psxbios: Better EnterCiritcal implementation
authorgameblabla <gameblabla@openmailbox.org>
Wed, 17 Jul 2019 23:57:08 +0000 (01:57 +0200)
committergameblabla <gameblabla@openmailbox.org>
Wed, 17 Jul 2019 23:57:08 +0000 (01:57 +0200)
Nocash documentation says it should return 0 if one or
none of the bits were changed and return 1 of both bits were set.

This fixes Medievil 2, which would freeze upon starting up a game
and this properly fixes Digimon World crashing (with fixed strcat implementation).
It also possibly fix other games.

libpcsxcore/psxbios.c

index d4a38e1..58581e9 100644 (file)
@@ -2907,8 +2907,9 @@ void psxBiosException() {
 #endif
                        switch (a0) {
                                case 1: // EnterCritical - disable irq's
 #endif
                        switch (a0) {
                                case 1: // EnterCritical - disable irq's
-                                       psxRegs.CP0.n.Status &= ~0x404; 
-v0=1;  // HDHOSHY experimental patch: Spongebob, Coldblood, fearEffect, Medievil2, Martian Gothic
+                                       /* Fixes Medievil 2 not loading up new game, Digimon World not booting up and possibly others */
+                                       v0 = (psxRegs.CP0.n.Status & 0x404) == 0x404;
+                                       psxRegs.CP0.n.Status &= ~0x404;
                                        break;
 
                                case 2: // ExitCritical - enable irq's
                                        break;
 
                                case 2: // ExitCritical - enable irq's