X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fmdec.c;h=c0f2cfd70566a7c286babc758f1cc404c13dc934;hb=9a0a61d27586bfb93aa443cc59d9588d2b9cf992;hp=ca42458567137d749a93c62e26eb0cfd201dc4db;hpb=6c9db47c7c54b925e00a96b17faa05e17d6af262;p=pcsx_rearmed.git diff --git a/libpcsxcore/mdec.c b/libpcsxcore/mdec.c index ca424585..c0f2cfd7 100644 --- a/libpcsxcore/mdec.c +++ b/libpcsxcore/mdec.c @@ -476,6 +476,7 @@ void psxDma0(u32 adr, u32 bcr, u32 chcr) { int size; if (chcr != 0x01000201) { + log_unhandled("mdec0: invalid dma %08x\n", chcr); return; } @@ -524,7 +525,7 @@ void psxDma0(u32 adr, u32 bcr, u32 chcr) { break; } - MDECINDMA_INT(size); + set_event(PSXINT_MDECINDMA, size); } void mdec0Interrupt() @@ -545,7 +546,10 @@ void psxDma1(u32 adr, u32 bcr, u32 chcr) { int size; u32 words; - if (chcr != 0x01000200) return; + if (chcr != 0x01000200) { + log_unhandled("mdec1: invalid dma %08x\n", chcr); + return; + } words = (bcr >> 16) * (bcr & 0xffff); /* size in byte */ @@ -621,7 +625,7 @@ void psxDma1(u32 adr, u32 bcr, u32 chcr) { } /* define the power of mdec */ - MDECOUTDMA_INT(words * MDEC_BIAS); + set_event(PSXINT_MDECOUTDMA, words * MDEC_BIAS); /* some CPU stalling */ psxRegs.cycle += words; } @@ -670,27 +674,26 @@ void mdec1Interrupt() { } int mdecFreeze(void *f, int Mode) { - u8 *base = (u8 *)&psxM[0x100000]; + u8 *base = (u8 *)psxM; u32 v; gzfreeze(&mdec.reg0, sizeof(mdec.reg0)); gzfreeze(&mdec.reg1, sizeof(mdec.reg1)); - // old code used to save raw pointers.. v = (u8 *)mdec.rl - base; gzfreeze(&v, sizeof(v)); - mdec.rl = (u16 *)(base + (v & 0xffffe)); + mdec.rl = (u16 *)(base + (v & 0x1ffffe)); v = (u8 *)mdec.rl_end - base; gzfreeze(&v, sizeof(v)); - mdec.rl_end = (u16 *)(base + (v & 0xffffe)); + mdec.rl_end = (u16 *)(base + (v & 0x1ffffe)); v = 0; if (mdec.block_buffer_pos) - v = mdec.block_buffer_pos - base; + v = mdec.block_buffer_pos - mdec.block_buffer; gzfreeze(&v, sizeof(v)); mdec.block_buffer_pos = 0; - if (v) - mdec.block_buffer_pos = base + (v & 0xfffff); + if (v && v < sizeof(mdec.block_buffer)) + mdec.block_buffer_pos = mdec.block_buffer; gzfreeze(&mdec.block_buffer, sizeof(mdec.block_buffer)); gzfreeze(&mdec.pending_dma1, sizeof(mdec.pending_dma1));