X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fpsxbios.c;h=cad69b315b3506e6662a782e7faef2f5430bf4f3;hp=f2751b864f0071e5dbdf290177ee7917fc9e0ace;hb=e9fda093d29f703068dd3e5bae7a4b3683e33b5c;hpb=ef79bbde537d6b9c745a7d86cb9df1d04c35590d diff --git a/libpcsxcore/psxbios.c b/libpcsxcore/psxbios.c index f2751b86..cad69b31 100644 --- a/libpcsxcore/psxbios.c +++ b/libpcsxcore/psxbios.c @@ -26,6 +26,9 @@ #include "psxbios.h" #include "psxhw.h" +#undef SysPrintf +#define SysPrintf if (Config.PsxOut) printf + char *biosA0n[256] = { // 0x00 "open", "lseek", "read", "write", @@ -256,6 +259,7 @@ static int CardState = -1; static TCB Thread[8]; static int CurThread = 0; static FileDesc FDesc[32]; +static u32 card_active_chan; boolean hleSoftCall = FALSE; @@ -1237,6 +1241,8 @@ void psxBios__card_info() { // ab PSXBIOS_LOG("psxBios_%s: %x\n", biosA0n[0xab], a0); #endif + card_active_chan = a0; + // DeliverEvent(0x11, 0x2); // 0xf0000011, 0x0004 DeliverEvent(0x81, 0x2); // 0xf4000001, 0x0004 @@ -1248,6 +1254,8 @@ void psxBios__card_load() { // ac PSXBIOS_LOG("psxBios_%s: %x\n", biosA0n[0xac], a0); #endif + card_active_chan = a0; + // DeliverEvent(0x11, 0x2); // 0xf0000011, 0x0004 DeliverEvent(0x81, 0x2); // 0xf4000001, 0x0004 @@ -1866,14 +1874,13 @@ void psxBios_firstfile() { // 42 nfile = 1; if (!strncmp(Ra0, "bu00", 4)) { bufile(1); - v0 = _dir; - } - - if (!strncmp(Ra0, "bu10", 4)) { + } else if (!strncmp(Ra0, "bu10", 4)) { bufile(2); - v0 = _dir; } + // firstfile() calls _card_read() internally, so deliver it's event + DeliverEvent(0x11, 0x2); + pc0 = ra; } @@ -2022,6 +2029,7 @@ void psxBios__card_write() { // 0x4e PSXBIOS_LOG("psxBios_%s: %x,%x,%x\n", biosB0n[0x4e], a0, a1, a2); #endif + card_active_chan = a0; port = a0 >> 4; if (port == 0) { @@ -2045,6 +2053,7 @@ void psxBios__card_read() { // 0x4f PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x4f]); #endif + card_active_chan = a0; port = a0 >> 4; if (port == 0) { @@ -2126,6 +2135,15 @@ void psxBios_GetB0Table() { // 57 v0 = 0x874; pc0 = ra; } +void psxBios__card_chan() { // 0x58 +#ifdef PSXBIOS_LOG + PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x58]); +#endif + + v0 = card_active_chan; + pc0 = ra; +} + void psxBios_ChangeClearPad() { // 5b #ifdef PSXBIOS_LOG PSXBIOS_LOG("psxBios_%s: %x\n", biosB0n[0x5b], a0); @@ -2483,7 +2501,7 @@ void psxBiosInit() { //biosB0[0x55] = psxBios__get_error; biosB0[0x56] = psxBios_GetC0Table; biosB0[0x57] = psxBios_GetB0Table; - //biosB0[0x58] = psxBios__card_chan; + biosB0[0x58] = psxBios__card_chan; //biosB0[0x59] = psxBios_sys_b0_59; //biosB0[0x5a] = psxBios_sys_b0_5a; biosB0[0x5b] = psxBios_ChangeClearPad; @@ -2542,6 +2560,17 @@ void psxBiosInit() { memset(Thread, 0, sizeof(Thread)); Thread[0].status = 2; // main thread + jmp_int = NULL; + pad_buf = NULL; + pad_buf1 = NULL; + pad_buf2 = NULL; + pad_buf1len = pad_buf2len = 0; + heap_addr = NULL; + heap_end = NULL; + CardState = -1; + CurThread = 0; + memset(FDesc, 0, sizeof(FDesc)); + psxMu32ref(0x0150) = SWAPu32(0x160); psxMu32ref(0x0154) = SWAPu32(0x320); psxMu32ref(0x0160) = SWAPu32(0x248); @@ -2807,4 +2836,5 @@ void psxBiosFreeze(int Mode) { bfreezes(Thread); bfreezel(&CurThread); bfreezes(FDesc); + bfreezel(&card_active_chan); }