#define BLITTER_MAX_PIPELINED_CYCLES 4
#define CYCLECOUNT_FINISHED -1000
-#define CYCLECOUNT_START 4
+#define CYCLECOUNT_START 3
/*
Blitter Idle Cycle:
return;
}
blt_info.blit_interrupt = 1;
- send_interrupt(6, (4 + 1) * CYCLE_UNIT);
+ send_interrupt(6, 3 * CYCLE_UNIT);
if (debug_dma) {
record_dma_event(DMA_EVENT_BLITIRQ, current_hpos(), vpos);
}
if (blitline) {
do {
blitter_line_read();
- if (ddat1use) {
- bltdpt = bltcpt;
- }
- ddat1use = 1;
blitter_line();
blitter_line_proc();
blitter_nxline();
blt_info.vblitsize--;
if (blitlinepixel) {
- record_dma_blit(0x00, blt_info.bltddat, bltdpt, last_blitter_hpos);
blitter_line_write();
blitlinepixel = 0;
}
+ bltdpt = bltcpt;
} while (blt_info.vblitsize != 0);
- bltdpt = bltcpt;
} else {
if (blitdesc)
blitter_dofast_desc();
} else if (c == 3 && line) { // line 2/4 (C)
record_dma_blit(0x70, 0, bltcpt, hpos);
+ check_channel_mods(hpos, 3, &bltcpt);
blt_info.bltcdat = chipmem_wget_indirect(bltcpt);
regs.chipset_latch_rw = blt_info.bltcdat;
record_dma_blit_val(blt_info.bltcdat);
} else if ((c == 4 || c == 6) && line) { // line 4/4 (D)
- if (ddat2use) {
- bltdpt = bltcpt;
- }
- ddat2use = 1;
-
blitter_line_proc();
blitter_nxline();
/* onedot mode and no pixel = bus write access is skipped */
if (blitlinepixel && c == 4) {
record_dma_blit(0x00, blt_info.bltddat, bltdpt, hpos);
+ check_channel_mods(hpos, 4, &bltdpt);
chipmem_wput_indirect(bltdpt, blt_info.bltddat);
regs.chipset_latch_rw = blt_info.bltddat;
alloc_cycle_blitter(hpos, &bltdpt, 4);
// cycle allocations
for (;;) {
- // copper bltsize write needs one cycle (any cycle) delay
- // does not need free bus
- if (blit_waitcyclecounter > 0) {
- blit_waitcyclecounter--;
- markidlecycle(hpos);
- break;
- }
// final D idle cycle
// does not need free bus
blt_info.blit_finald--;
}
+ // Skip BLTSIZE write cycle
+ if (blit_waitcyclecounter) {
+ blit_waitcyclecounter = 0;
+ break;
+ }
+
bool cant = blitter_cant_access(hpos);
if (cant) {
blit_misscyclecounter++;
blitter_hcounter = 0;
blitter_vcounter = 0;
blit_cyclecounter = -CYCLECOUNT_START;
- if (!copper) {
- blit_cyclecounter++;
- }
+ blit_waitcyclecounter = 1;
blit_maxcyclecounter = blt_info.hblitsize * blt_info.vblitsize + 2;
blt_info.blit_pending = 0;
blt_info.blit_main = 1;