diff options
| -rw-r--r-- | libpcsxcore/mdec.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/libpcsxcore/mdec.c b/libpcsxcore/mdec.c index 2f4c565e..04476521 100644 --- a/libpcsxcore/mdec.c +++ b/libpcsxcore/mdec.c @@ -544,7 +544,9 @@ void psxDma1(u32 adr, u32 bcr, u32 chcr) { image = (u16 *)PSXM(adr); if (mdec.reg0 & MDEC0_RGB24) { // 15-b decoding
- dmacnt = 0; + dmacnt = 0;
+
+ size = size / ((16 * 16) / 2); for (; size > 0; size--, image += (16 * 16)) { mdec.rl = rl2blk(blk, mdec.rl); @@ -553,10 +555,16 @@ void psxDma1(u32 adr, u32 bcr, u32 chcr) { dmacnt++; }
- // 300 blocks @ 30 fps
- dmacnt = dmacnt * PSXCLK / (300 * 30); +
+ // macroblock size
+ dmacnt *= (16 * 16 * 2);
+
+ // macroblock cycles
+ dmacnt *= 1;
} else { // 24-b decoding
- dmacnt = 0; + dmacnt = 0;
+
+ size = size / ((24 * 16) / 2); for (; size > 0; size--, image += (24 * 16)) { mdec.rl = rl2blk(blk, mdec.rl); @@ -565,8 +573,11 @@ void psxDma1(u32 adr, u32 bcr, u32 chcr) { dmacnt++; } - // 300 blocks @ 30 fps
- dmacnt = dmacnt * PSXCLK / (300 * 30);
+ // macroblock size
+ dmacnt *= (16 * 16 * 3);
+
+ // macroblock cycles
+ dmacnt *= 1;
} @@ -580,7 +591,21 @@ void psxDma1(u32 adr, u32 bcr, u32 chcr) { }
- MDECOUTDMA_INT( dmacnt ); + /*
+ current mblock speed = 1 cycle / byte
+
+
+ Destruction Derby Raw = ~1-2 macroblock cycles
+ - no movie hang
+
+ Rebel Assault 2 = ~0-1 macroblock cycles
+ - no hangs, chopped movies
+
+ Shadow Madness = ~1-4 macroblock cycles
+ - smoother videos, fixes boot
+ */
+
+ MDECOUTDMA_INT( dmacnt );
mdec.reg1 |= MDEC1_BUSY; |
