comparison vdp.c @ 1321:0849e9356bfe

Fix time 68K is locked out of bus when doing a 128KB VRAM mode DMA transfer. Fixes a number of problems in Overdrive 2
author Michael Pavone <pavone@retrodev.com>
date Mon, 17 Apr 2017 23:58:21 -0700
parents df3d690cb2c3
children b1423d432c0e
comparison
equal deleted inserted replaced
1320:df3d690cb2c3 1321:0849e9356bfe
2430 uint32_t dmalen = (context->regs[REG_DMALEN_H] << 8) | context->regs[REG_DMALEN_L]; 2430 uint32_t dmalen = (context->regs[REG_DMALEN_H] << 8) | context->regs[REG_DMALEN_L];
2431 if (!dmalen) { 2431 if (!dmalen) {
2432 dmalen = 0x10000; 2432 dmalen = 0x10000;
2433 } 2433 }
2434 uint32_t min_dma_complete = dmalen * (context->regs[REG_MODE_4] & BIT_H40 ? 16 : 20); 2434 uint32_t min_dma_complete = dmalen * (context->regs[REG_MODE_4] & BIT_H40 ? 16 : 20);
2435 if ((context->regs[REG_DMASRC_H] & 0xC0) == 0xC0 || (context->cd & 0xF) == VRAM_WRITE) { 2435 if (
2436 (context->regs[REG_DMASRC_H] & 0xC0) == 0xC0
2437 || (((context->cd & 0xF) == VRAM_WRITE) && !(context->regs[REG_MODE_2] & BIT_128K_VRAM))) {
2436 //DMA copies take twice as long to complete since they require a read and a write 2438 //DMA copies take twice as long to complete since they require a read and a write
2437 //DMA Fills and transfers to VRAM also take twice as long as it requires 2 writes for a single word 2439 //DMA Fills and transfers to VRAM also take twice as long as it requires 2 writes for a single word
2440 //unless 128KB mode is enabled
2438 min_dma_complete *= 2; 2441 min_dma_complete *= 2;
2439 } 2442 }
2440 min_dma_complete += context->cycles; 2443 min_dma_complete += context->cycles;
2441 if (target_cycles < min_dma_complete) { 2444 if (target_cycles < min_dma_complete) {
2442 vdp_run_context(context, target_cycles); 2445 vdp_run_context(context, target_cycles);