diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-05 01:28:53 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-05 01:28:53 +0000 |
| commit | 047ebc15acd10e6e64b2bcb1105861956e6c3c3e (patch) | |
| tree | 8dcbdf979a2d216f23d855c266da74d2734e6e6e | |
| parent | ff6c04a6bb5c60ac7187a388092eb615cf98e65e (diff) | |
| download | pcsxr-047ebc15acd10e6e64b2bcb1105861956e6c3c3e.tar.gz | |
Rebel Assault 2 - mdec.c
- faster mdec times (1 cycle / byte)
- fixes stage 6
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@59192 e17a0e51-4ae3-4d35-97c3-1a29b211df97
| -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; |
