notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
implement "add_image_index" correctly
[pcsx_rearmed.git]
/
libpcsxcore
/
psxbios.c
diff --git
a/libpcsxcore/psxbios.c
b/libpcsxcore/psxbios.c
index
b135b52
..
12c17ef
100644
(file)
--- a/
libpcsxcore/psxbios.c
+++ b/
libpcsxcore/psxbios.c
@@
-25,6
+25,8
@@
#include "psxbios.h"
#include "psxhw.h"
#include "psxbios.h"
#include "psxhw.h"
+#include "gpu.h"
+#include <zlib.h>
#undef SysPrintf
#define SysPrintf if (Config.PsxOut) printf
#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 TCB Thread[8];
static int CurThread = 0;
static FileDesc FDesc[32];
+static u32 card_active_chan;
boolean hleSoftCall = FALSE;
boolean hleSoftCall = FALSE;
@@
-803,8
+806,8
@@
void psxBios_qsort() { // 0x31
}
void psxBios_malloc() { // 0x33
}
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]);
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);
// 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
}
// 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);
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;
}
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 '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':
case 'd': case 'D':
case 'o': case 'O':
case 'x': case 'X':
@@
-1009,7
+1012,7
@@
_start:
memcpy((char*)PSXM(sp), save, 4 * 4);
memcpy((char*)PSXM(sp), save, 4 * 4);
- SysPrintf(tmp);
+ SysPrintf(
"%s",
tmp);
pc0 = ra;
}
pc0 = ra;
}
@@
-1117,6
+1120,7
@@
void psxBios_mem2vram() { // 0x47
void psxBios_SendGPU() { // 0x48
GPU_writeStatus(a0);
void psxBios_SendGPU() { // 0x48
GPU_writeStatus(a0);
+ gpuSyncPluginSR();
pc0 = ra;
}
pc0 = ra;
}
@@
-1240,6
+1244,8
@@
void psxBios__card_info() { // ab
PSXBIOS_LOG("psxBios_%s: %x\n", biosA0n[0xab], a0);
#endif
PSXBIOS_LOG("psxBios_%s: %x\n", biosA0n[0xab], a0);
#endif
+ card_active_chan = a0;
+
// DeliverEvent(0x11, 0x2); // 0xf0000011, 0x0004
DeliverEvent(0x81, 0x2); // 0xf4000001, 0x0004
// 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
PSXBIOS_LOG("psxBios_%s: %x\n", biosA0n[0xac], a0);
#endif
+ card_active_chan = a0;
+
// DeliverEvent(0x11, 0x2); // 0xf0000011, 0x0004
DeliverEvent(0x81, 0x2); // 0xf4000001, 0x0004
// DeliverEvent(0x11, 0x2); // 0xf0000011, 0x0004
DeliverEvent(0x81, 0x2); // 0xf4000001, 0x0004
@@
-1813,7
+1821,7
@@
void psxBios_putchar() { // 3d
}
void psxBios_puts() { // 3e/3f
}
void psxBios_puts() { // 3e/3f
- SysPrintf(Ra0);
+ SysPrintf(
"%s",
Ra0);
pc0 = ra;
}
pc0 = ra;
}
@@
-1829,7
+1837,8
@@
int nfile;
if ((*ptr & 0xF0) != 0x50) continue; \
ptr+= 0xa; \
if (pfile[0] == 0) { \
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]; \
} else for (i=0; i<20; i++) { \
if (pfile[i] == ptr[i]) { \
dir->name[i] = ptr[i]; \
@@
-1869,14
+1878,13
@@
void psxBios_firstfile() { // 42
nfile = 1;
if (!strncmp(Ra0, "bu00", 4)) {
bufile(1);
nfile = 1;
if (!strncmp(Ra0, "bu00", 4)) {
bufile(1);
- v0 = _dir;
- }
-
- if (!strncmp(Ra0, "bu10", 4)) {
+ } else if (!strncmp(Ra0, "bu10", 4)) {
bufile(2);
bufile(2);
- v0 = _dir;
}
}
+ // firstfile() calls _card_read() internally, so deliver it's event
+ DeliverEvent(0x11, 0x2);
+
pc0 = ra;
}
pc0 = ra;
}
@@
-2025,6
+2033,7
@@
void psxBios__card_write() { // 0x4e
PSXBIOS_LOG("psxBios_%s: %x,%x,%x\n", biosB0n[0x4e], a0, a1, a2);
#endif
PSXBIOS_LOG("psxBios_%s: %x,%x,%x\n", biosB0n[0x4e], a0, a1, a2);
#endif
+ card_active_chan = a0;
port = a0 >> 4;
if (port == 0) {
port = a0 >> 4;
if (port == 0) {
@@
-2048,6
+2057,7
@@
void psxBios__card_read() { // 0x4f
PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x4f]);
#endif
PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x4f]);
#endif
+ card_active_chan = a0;
port = a0 >> 4;
if (port == 0) {
port = a0 >> 4;
if (port == 0) {
@@
-2129,6
+2139,15
@@
void psxBios_GetB0Table() { // 57
v0 = 0x874; pc0 = ra;
}
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);
void psxBios_ChangeClearPad() { // 5b
#ifdef PSXBIOS_LOG
PSXBIOS_LOG("psxBios_%s: %x\n", biosB0n[0x5b], a0);
@@
-2486,7
+2505,7
@@
void psxBiosInit() {
//biosB0[0x55] = psxBios__get_error;
biosB0[0x56] = psxBios_GetC0Table;
biosB0[0x57] = psxBios_GetB0Table;
//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;
//biosB0[0x59] = psxBios_sys_b0_59;
//biosB0[0x5a] = psxBios_sys_b0_5a;
biosB0[0x5b] = psxBios_ChangeClearPad;
@@
-2545,6
+2564,17
@@
void psxBiosInit() {
memset(Thread, 0, sizeof(Thread));
Thread[0].status = 2; // main thread
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);
psxMu32ref(0x0150) = SWAPu32(0x160);
psxMu32ref(0x0154) = SWAPu32(0x320);
psxMu32ref(0x0160) = SWAPu32(0x248);
@@
-2810,4
+2840,5
@@
void psxBiosFreeze(int Mode) {
bfreezes(Thread);
bfreezel(&CurThread);
bfreezes(FDesc);
bfreezes(Thread);
bfreezel(&CurThread);
bfreezes(FDesc);
+ bfreezel(&card_active_chan);
}
}