diff options
Diffstat (limited to 'libpcsxcore')
| -rw-r--r-- | libpcsxcore/mdec.c | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/libpcsxcore/mdec.c b/libpcsxcore/mdec.c index a1289f40..ffcc91b3 100644 --- a/libpcsxcore/mdec.c +++ b/libpcsxcore/mdec.c @@ -528,39 +528,34 @@ void psxDma1(u32 adr, u32 bcr, u32 chcr) { image = (u16 *)PSXM(adr); - if (mdec.reg0 & MDEC0_RGB24) { // 15-b decoding + if (mdec.reg0 & MDEC0_RGB24) { // 15-b decoding
+ dmacnt = 0; size = size / ((16 * 16) / 2); for (; size > 0; size--, image += (16 * 16)) { mdec.rl = rl2blk(blk, mdec.rl); - yuv2rgb15(blk, image); - } - } else { // 24-b decoding - // Fear Effect 2 Artwork (4000+ = BIAS 1) - // Breaks: Lemmings - //MDECOUTDMA_INT( ((size / 4) / BIAS) * 4000); - + yuv2rgb15(blk, image);
+
+ dmacnt++; + }
+
+ // 300 blocks @ 30 fps
+ dmacnt = dmacnt * PSXCLK / (300 * 30); + } else { // 24-b decoding
+ dmacnt = 0; size = size / ((24 * 16) / 2); for (; size > 0; size--, image += (24 * 16)) { mdec.rl = rl2blk(blk, mdec.rl); - yuv2rgb24(blk, (u8 *)image); + yuv2rgb24(blk, (u8 *)image);
+
+ dmacnt++; } +
+ // 300 blocks @ 30 fps
+ dmacnt = dmacnt * PSXCLK / (300 * 30);
} - - /* - Absolute minimum DMA time: - - # bytes written to memory * - average cycles to create byte / - 32-bit DMA per cycle - - Cycle Voodoo List:
- FF9 Dali = 1-75 ~ 150
- Rebel 2 = 1-3 (stage 6)
- */ - dmacnt = ( (u8 *)image - (u8 *)PSXM(adr)) * 1; - MDECOUTDMA_INT( dmacnt / 4); + MDECOUTDMA_INT( dmacnt ); mdec.reg1 |= MDEC1_BUSY; @@ -575,7 +570,7 @@ void mdec1Interrupt() { // PSXCLK / 60 or PSXCLK / 50 since the bug happened at end of frame. // PSXCLK / 500 seems good for FF9. // CAUTION: commented interrupt-handling may lead to problems, keep an eye ;-) - MDECOUTDMA_INT(PSXCLK / 500); + MDECOUTDMA_INT(PSXCLK / 400); // MDECOUTDMA_INT(psxRegs.intCycle[PSXINT_MDECOUTDMA].cycle * 8); HW_DMA1_CHCR &= SWAP32(~0x01000000); |
