diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2009-12-04 14:31:00 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2009-12-04 14:31:00 +0000 |
| commit | 36abf091805cf044a3a09b0909fc56a23583b756 (patch) | |
| tree | f6c127b5ebbc428e0de236ceabbfadd77f7f05d8 | |
| parent | 821c3db4efeef0fd6b93ceb8d1446fe94fea5a95 (diff) | |
| download | pcsxr-36abf091805cf044a3a09b0909fc56a23583b756.tar.gz | |
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@38811 e17a0e51-4ae3-4d35-97c3-1a29b211df97
| -rw-r--r-- | ChangeLog | 3 | ||||
| -rw-r--r-- | libpcsxcore/psxbios.c | 18 |
2 files changed, 13 insertions, 8 deletions
@@ -8,8 +8,7 @@ December 4, 2009 Wei Mingzhi <weimingzhi@gmail.com> * plugins/dfinput/pad.h: Likewise. * po/zh_CN.po, po/zh_TW.po, po/pt_BR.po, po/pcsx.pot: Updated. * libpcsxcore/psxbios.c: Don't touch the stack pointer if pointed to the - hardware area, which fixes FF7 chocobo racing problem. Don't always - allocate stack spaces before softcall. + hardware area, which fixes FF7 chocobo racing problem. December 3, 2009 Wei Mingzhi <weimingzhi@gmail.com> diff --git a/libpcsxcore/psxbios.c b/libpcsxcore/psxbios.c index c6a6a050..ffd1c9e7 100644 --- a/libpcsxcore/psxbios.c +++ b/libpcsxcore/psxbios.c @@ -263,7 +263,13 @@ static __inline void softCall(u32 pc) { pc0 = pc; ra = 0x80001000; + // Fixes crashing problems with at least Final Fantasy 7 and Xenogears. + // This should be considered a temporary fix; after all, we do not + // know how much space below sp is in use. It may be worth considering + // creating a new stack for interrupt handlers. + if ((sp >> 24) != 0x1f) sp -= 256; while (pc0 != 0x80001000) psxCpu->ExecuteBlock(); + if ((sp >> 24) != 0x1f) sp += 256; } static __inline void softCall2(u32 pc) { @@ -271,7 +277,13 @@ static __inline void softCall2(u32 pc) { pc0 = pc; ra = 0x80001000; + // Fixes crashing problems with at least Final Fantasy 7 and Xenogears. + // This should be considered a temporary fix; after all, we do not + // know how much space below sp is in use. It may be worth considering + // creating a new stack for interrupt handlers. + if ((sp >> 24) != 0x1f) sp -= 256; while (pc0 != 0x80001000) psxCpu->ExecuteBlock(); + if ((sp >> 24) != 0x1f) sp += 256; ra = sra; } @@ -2324,13 +2336,7 @@ void biosInterrupt() { for (i=0; i<3; i++) { if (psxHu32(0x1070) & (1 << (i+4))) { if (RcEV[i][1].status == EvStACTIVE) { - // Fixes crashing problems with at least Final Fantasy 7 and Xenogears. - // This should be considered a temporary fix; after all, we do not - // know how much space below sp is in use. It may be worth considering - // creating a new stack for interrupt handlers. - if ((sp >> 24) != 0x1f) sp -= 256; softCall(RcEV[i][1].fhandler); - if ((sp >> 24) != 0x1f) sp += 256; } psxHwWrite32(0x1f801070, ~(1 << (i+4))); } |
