} else Event[ev][spec].status = EvStALREADY;
}
+static unsigned interrupt_r26=0x8004E8B0;
+
static inline void SaveRegs() {
memcpy(regs, psxRegs.GPR.r, 32*4);
regs[32] = psxRegs.GPR.n.lo;
LoadRegs();
pc0 = psxRegs.CP0.n.EPC;
+ k0 = interrupt_r26;
if (psxRegs.CP0.n.Cause & 0x80000000) pc0 += 4;
psxRegs.CP0.n.Status = (psxRegs.CP0.n.Status & 0xfffffff0) |
pc0 = ra;
}
+void psxBios__card_wait() { // 5d
+#ifdef PSXBIOS_LOG
+ PSXBIOS_LOG("psxBios_%s: %x\n", biosB0n[0x5d], a0);
+#endif
+
+ v0 = 1;
+ pc0 = ra;
+}
+
/* System calls C0 */
/*
//biosB0[0x5a] = psxBios_sys_b0_5a;
biosB0[0x5b] = psxBios_ChangeClearPad;
biosB0[0x5c] = psxBios__card_status;
- //biosB0[0x5d] = psxBios__card_wait;
+ biosB0[0x5d] = psxBios__card_wait;
//*******************C0 CALLS****************************
//biosC0[0x00] = psxBios_InitRCnt;
//biosC0[0x01] = psxBios_InitException;
switch (psxRegs.CP0.n.Cause & 0x3c) {
case 0x00: // Interrupt
+ interrupt_r26=psxRegs.CP0.n.EPC;
#ifdef PSXCPU_LOG
// PSXCPU_LOG("interrupt\n");
#endif
void psxBiosFreeze(int Mode) {
u32 base = 0x40000;
- pad_stopped = 0;
bfreezepsxMptr(jmp_int, u32);
bfreezepsxMptr(pad_buf, int);
bfreezepsxMptr(pad_buf1, char);
bfreezel(&CurThread);
bfreezes(FDesc);
bfreezel(&card_active_chan);
+ bfreezel(&pad_stopped);
+ bfreezel(&heap_size);
}