git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@38813 e17a0e51-4ae3-4d35-97c3-1a29b211df97

This commit is contained in:
SND\weimingzhi_cp 2009-12-04 15:00:27 +00:00
parent 36abf09180
commit 3007d8a75d
2 changed files with 8 additions and 13 deletions

View File

@ -8,7 +8,8 @@ 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.
hardware area, which fixes FF7 chocobo racing problem. Don't always
allocate stack spaces before softcall.
December 3, 2009 Wei Mingzhi <weimingzhi@gmail.com>

View File

@ -263,13 +263,7 @@ 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) {
@ -277,13 +271,7 @@ 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;
}
@ -2336,7 +2324,13 @@ 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)));
}