summaryrefslogtreecommitdiff
path: root/libpcsxcore
diff options
context:
space:
mode:
authorSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-30 15:01:32 +0000
committerSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-30 15:01:32 +0000
commit3793b2e8357da08454cf146455b1ae24649efd50 (patch)
tree48bb677e11bf31a465adb73498d43a1da0589888 /libpcsxcore
parentb661294ebd3fcc65cebc54f277584d93991799a6 (diff)
downloadpcsxr-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.c43
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);