summaryrefslogtreecommitdiff
path: root/libpcsxcore/ix86
diff options
context:
space:
mode:
authoriCatButler <i.am.catbutler@gmail.com>2016-03-28 13:01:50 +0100
committeriCatButler <i.am.catbutler@gmail.com>2016-03-28 13:01:50 +0100
commite3df273095a5800e3dcdcb63bd66e269c0c2d3a8 (patch)
tree8e96b8cbb344da3ab10ecf09f258fceb46d9c765 /libpcsxcore/ix86
parentb1f5a6ce4d7b9156910078300bfdf4ff0fd8ccf0 (diff)
downloadpcsxr-e3df273095a5800e3dcdcb63bd66e269c0c2d3a8.tar.gz
- Fix memory addresses as each mirrored address range is further mirrored 4 times... :(
- Catch 8bit reads/writes and invalidate registers and memory as needed - Prevent reading over the end of stride and count arrays when decoding primitive commands
Diffstat (limited to 'libpcsxcore/ix86')
-rwxr-xr-xlibpcsxcore/ix86/iR3000A.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/libpcsxcore/ix86/iR3000A.c b/libpcsxcore/ix86/iR3000A.c
index 42800fb2..2ba1cd18 100755
--- a/libpcsxcore/ix86/iR3000A.c
+++ b/libpcsxcore/ix86/iR3000A.c
@@ -1283,15 +1283,16 @@ static void recLB() {
// SysPrintf("unhandled r8 %x\n", addr);
}
+ PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode
iPushOfB();
- CALLFunc((u32)psxMemRead8);
+ CALLFunc((u32)PGXP_psxMemRead8Trace);
if (_Rt_) {
iRegs[_Rt_].state = ST_UNK;
MOVSX32R8toR(EAX, EAX);
MOV32RtoM((u32)&psxRegs.GPR.r[_Rt_], EAX);
}
// ADD32ItoR(ESP, 4);
- resp+= 4;
+ resp+= 8;
}
static void recLBU() {
@@ -1328,15 +1329,16 @@ static void recLBU() {
// SysPrintf("unhandled r8u %x\n", addr);
}
+ PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode
iPushOfB();
- CALLFunc((u32)psxMemRead8);
+ CALLFunc((u32)PGXP_psxMemRead8Trace);
if (_Rt_) {
iRegs[_Rt_].state = ST_UNK;
MOVZX32R8toR(EAX, EAX);
MOV32RtoM((u32)&psxRegs.GPR.r[_Rt_], EAX);
}
// ADD32ItoR(ESP, 4);
- resp+= 4;
+ resp+= 8;
}
static void recLH() {
@@ -1831,15 +1833,16 @@ static void recSB() {
// SysPrintf("unhandled w8 %x\n", addr);
}
+ PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode
if (IsConst(_Rt_)) {
PUSH32I (iRegs[_Rt_].k);
} else {
PUSH32M ((u32)&psxRegs.GPR.r[_Rt_]);
}
iPushOfB();
- CALLFunc((u32)psxMemWrite8);
+ CALLFunc((u32)PGXP_psxMemWrite8Trace);
// ADD32ItoR(ESP, 8);
- resp+= 8;
+ resp+= 12;
}
static void recSH() {