diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-10-30 15:01:32 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-10-30 15:01:32 +0000 |
| commit | 3793b2e8357da08454cf146455b1ae24649efd50 (patch) | |
| tree | 48bb677e11bf31a465adb73498d43a1da0589888 /libpcsxcore | |
| parent | b661294ebd3fcc65cebc54f277584d93991799a6 (diff) | |
| download | pcsxr-3793b2e8357da08454cf146455b1ae24649efd50.tar.gz | |
Squaresoft on PlayStation 1998 Collector's CD Vol. 1: mdec.c
- Use 300 macroblocks @ 30 fps
- Should improve movie playback
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@58930 e17a0e51-4ae3-4d35-97c3-1a29b211df97
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); |
