aboutsummaryrefslogtreecommitdiff
path: root/libpcsxcore/r3000a.c
diff options
context:
space:
mode:
authornotaz2011-10-23 17:53:09 +0300
committernotaz2011-10-30 23:48:08 +0200
commit62656449abd4cc364e2a87608efb12a97ce26a3d (patch)
tree365c0dd794fa868441f42df4801eccb618f59a8f /libpcsxcore/r3000a.c
parenteaa11918b84c8486618b597489537043eeaccbe0 (diff)
downloadpcsx_rearmed-62656449abd4cc364e2a87608efb12a97ce26a3d.tar.gz
pcsx_rearmed-62656449abd4cc364e2a87608efb12a97ce26a3d.tar.bz2
pcsx_rearmed-62656449abd4cc364e2a87608efb12a97ce26a3d.zip
gte: change gte irq workaround
This should be closer to what happens on the real thing. Special thanks to Ryphecha for the idea.
Diffstat (limited to 'libpcsxcore/r3000a.c')
-rw-r--r--libpcsxcore/r3000a.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/libpcsxcore/r3000a.c b/libpcsxcore/r3000a.c
index 1e8d0b0..cccfa60 100644
--- a/libpcsxcore/r3000a.c
+++ b/libpcsxcore/r3000a.c
@@ -79,13 +79,13 @@ void psxShutdown() {
}
void psxException(u32 code, u32 bd) {
- if (!Config.HLE && (((PSXMu32(psxRegs.pc) >> 24) & 0xfe) == 0x4a)) {
+ if (!Config.HLE && ((((psxRegs.code = PSXMu32(psxRegs.pc)) >> 24) & 0xfe) == 0x4a)) {
// "hokuto no ken" / "Crash Bandicot 2" ...
// BIOS does not allow to return to GTE instructions
// (just skips it, supposedly because it's scheduled already)
- // so we step over it with the interpreter
- extern void execI();
- execI();
+ // so we execute it here
+ extern void (*psxCP2[64])(void *cp2regs);
+ psxCP2[psxRegs.code & 0x3f](&psxRegs.CP2D);
}
// Set the Cause