X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fpsxbios.c;h=12c17ef5abf15a6abd204624efac7ca75127395b;hp=f2f254056eb91c03d8d917a9cf6dd3c297a3c167;hb=30773ad710989fd84254978e19af5ea92768e3ea;hpb=66ade3810a3c9077a8d779884d6ed42d036b129c diff --git a/libpcsxcore/psxbios.c b/libpcsxcore/psxbios.c index f2f25405..12c17ef5 100644 --- a/libpcsxcore/psxbios.c +++ b/libpcsxcore/psxbios.c @@ -25,6 +25,8 @@ #include "psxbios.h" #include "psxhw.h" +#include "gpu.h" +#include #undef SysPrintf #define SysPrintf if (Config.PsxOut) printf @@ -259,6 +261,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; @@ -803,8 +806,8 @@ void psxBios_qsort() { // 0x31 } void psxBios_malloc() { // 0x33 - unsigned int *chunk, *newchunk; - unsigned int dsize, csize, cstat; + unsigned int *chunk, *newchunk = NULL; + unsigned int dsize = 0, csize, cstat; int colflag; #ifdef PSXBIOS_LOG PSXBIOS_LOG("psxBios_%s\n", biosA0n[0x33]); @@ -874,7 +877,7 @@ void psxBios_malloc() { // 0x33 // split free chunk *chunk = SWAP32(dsize); newchunk = (u32*)((uptr)chunk + dsize + 4); - *newchunk = SWAP32((csize - dsize - 4) & 0xfffffffc | 1); + *newchunk = SWAP32(((csize - dsize - 4) & 0xfffffffc) | 1); } // return pointer to allocated memory @@ -937,7 +940,7 @@ void psxBios_InitHeap() { // 0x39 heap_end = (u32 *)((u8 *)heap_addr + size); *heap_addr = SWAP32(size | 1); - SysPrintf("InitHeap %x,%x : %x %x\n",a0,a1, (uptr)heap_addr-(uptr)psxM, size); + SysPrintf("InitHeap %x,%x : %x %x\n",a0,a1, (int)((uptr)heap_addr-(uptr)psxM), size); pc0 = ra; } @@ -987,7 +990,7 @@ _start: case 'g': case 'G': ptmp += sprintf(ptmp, tmp2, (double)psxMu32(sp + n * 4)); n++; break; case 'p': - case 'i': + case 'i': case 'u': case 'd': case 'D': case 'o': case 'O': case 'x': case 'X': @@ -1009,7 +1012,7 @@ _start: memcpy((char*)PSXM(sp), save, 4 * 4); - SysPrintf(tmp); + SysPrintf("%s", tmp); pc0 = ra; } @@ -1117,6 +1120,7 @@ void psxBios_mem2vram() { // 0x47 void psxBios_SendGPU() { // 0x48 GPU_writeStatus(a0); + gpuSyncPluginSR(); pc0 = ra; } @@ -1240,6 +1244,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 @@ -1251,6 +1257,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 @@ -1813,7 +1821,7 @@ void psxBios_putchar() { // 3d } void psxBios_puts() { // 3e/3f - SysPrintf(Ra0); + SysPrintf("%s", Ra0); pc0 = ra; } @@ -1829,7 +1837,8 @@ int nfile; if ((*ptr & 0xF0) != 0x50) continue; \ ptr+= 0xa; \ if (pfile[0] == 0) { \ - strcpy(dir->name, ptr); \ + strncpy(dir->name, ptr, sizeof(dir->name)); \ + dir->name[sizeof(dir->name) - 1] = '\0'; \ } else for (i=0; i<20; i++) { \ if (pfile[i] == ptr[i]) { \ dir->name[i] = ptr[i]; \ @@ -2024,6 +2033,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) { @@ -2047,6 +2057,7 @@ void psxBios__card_read() { // 0x4f PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x4f]); #endif + card_active_chan = a0; port = a0 >> 4; if (port == 0) { @@ -2128,6 +2139,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); @@ -2485,7 +2505,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; @@ -2820,4 +2840,5 @@ void psxBiosFreeze(int Mode) { bfreezes(Thread); bfreezel(&CurThread); bfreezes(FDesc); + bfreezel(&card_active_chan); }