Mercurial > repos > blastem
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); |