diff options
| author | iCatButler <i.am.catbutler@gmail.com> | 2016-03-28 13:01:50 +0100 |
|---|---|---|
| committer | iCatButler <i.am.catbutler@gmail.com> | 2016-03-28 13:01:50 +0100 |
| commit | e3df273095a5800e3dcdcb63bd66e269c0c2d3a8 (patch) | |
| tree | 8e96b8cbb344da3ab10ecf09f258fceb46d9c765 /libpcsxcore/ix86 | |
| parent | b1f5a6ce4d7b9156910078300bfdf4ff0fd8ccf0 (diff) | |
| download | pcsxr-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-x | libpcsxcore/ix86/iR3000A.c | 15 |
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() { |
