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
psxbios: Make HLE bios start from block 1, not 2.
[pcsx_rearmed.git]
/
libpcsxcore
/
psxbios.c
diff --git
a/libpcsxcore/psxbios.c
b/libpcsxcore/psxbios.c
index
1f6c342
..
59471f1
100644
(file)
--- a/
libpcsxcore/psxbios.c
+++ b/
libpcsxcore/psxbios.c
@@
-307,6
+307,8
@@
static inline void DeliverEvent(u32 ev, u32 spec) {
} else Event[ev][spec].status = EvStALREADY;
}
} 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;
static inline void SaveRegs() {
memcpy(regs, psxRegs.GPR.r, 32*4);
regs[32] = psxRegs.GPR.n.lo;
@@
-865,7
+867,6
@@
void psxBios_bcmp() { // 0x29
void psxBios_memcpy() { // 0x2a
char *p1 = (char *)Ra0, *p2 = (char *)Ra1;
void psxBios_memcpy() { // 0x2a
char *p1 = (char *)Ra0, *p2 = (char *)Ra1;
- s32 n=0;
v0 = a0;
if (a0 == 0 || a2 > 0x7FFFFFFF)
{
v0 = a0;
if (a0 == 0 || a2 > 0x7FFFFFFF)
{
@@
-873,7
+874,6
@@
void psxBios_memcpy() { // 0x2a
return;
}
while ((s32)a2-- > 0) {
return;
}
while ((s32)a2-- > 0) {
- n++;
*p1++ = *p2++;
}
a2 = 0;
*p1++ = *p2++;
}
a2 = 0;
@@
-1935,10
+1935,8
@@
void psxBios_StopPAD() { // 14
PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x14]);
#endif
pad_stopped = 1;
PSXBIOS_LOG("psxBios_%s\n", biosB0n[0x14]);
#endif
pad_stopped = 1;
- if (pad_buf == 0){
pad_buf1 = NULL;
pad_buf2 = NULL;
pad_buf1 = NULL;
pad_buf2 = NULL;
- }
pc0 = ra;
}
pc0 = ra;
}
@@
-1972,6
+1970,7
@@
void psxBios_ReturnFromException() { // 17
LoadRegs();
pc0 = psxRegs.CP0.n.EPC;
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) |
if (psxRegs.CP0.n.Cause & 0x80000000) pc0 += 4;
psxRegs.CP0.n.Status = (psxRegs.CP0.n.Status & 0xfffffff0) |
@@
-2218,9
+2217,6
@@
void psxBios_puts() { // 3e/3f
pc0 = ra;
}
pc0 = ra;
}
-char ffile[64], *pfile;
-int nfile;
-
/* To avoid any issues with different behaviour when using the libc's own strlen instead.
* We want to mimic the PSX's behaviour in this case for bufile. */
/* To avoid any issues with different behaviour when using the libc's own strlen instead.
* We want to mimic the PSX's behaviour in this case for bufile. */
@@
-2282,7
+2278,7
@@
void psxBios_firstfile() { // 42
if (pa0) {
strcpy(ffile, pa0);
pfile = ffile+5;
if (pa0) {
strcpy(ffile, pa0);
pfile = ffile+5;
- nfile =
1
;
+ nfile =
0
;
if (!strncmp(pa0, "bu00", 4)) {
// firstfile() calls _card_read() internally, so deliver it's event
DeliverEvent(0x11, 0x2);
if (!strncmp(pa0, "bu00", 4)) {
// firstfile() calls _card_read() internally, so deliver it's event
DeliverEvent(0x11, 0x2);
@@
-2602,6
+2598,15
@@
void psxBios__card_status() { // 5c
PSXBIOS_LOG("psxBios_%s: %x\n", biosB0n[0x5c], a0);
#endif
PSXBIOS_LOG("psxBios_%s: %x\n", biosB0n[0x5c], a0);
#endif
+ v0 = card_active_chan;
+ pc0 = ra;
+}
+
+void psxBios__card_wait() { // 5d
+#ifdef PSXBIOS_LOG
+ PSXBIOS_LOG("psxBios_%s: %x\n", biosB0n[0x5d], a0);
+#endif
+
v0 = 1;
pc0 = ra;
}
v0 = 1;
pc0 = ra;
}
@@
-2960,7
+2965,7
@@
void psxBiosInit() {
//biosB0[0x5a] = psxBios_sys_b0_5a;
biosB0[0x5b] = psxBios_ChangeClearPad;
biosB0[0x5c] = psxBios__card_status;
//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;
//*******************C0 CALLS****************************
//biosC0[0x00] = psxBios_InitRCnt;
//biosC0[0x01] = psxBios_InitException;
@@
-3188,6
+3193,7
@@
void psxBiosException() {
switch (psxRegs.CP0.n.Cause & 0x3c) {
case 0x00: // Interrupt
switch (psxRegs.CP0.n.Cause & 0x3c) {
case 0x00: // Interrupt
+ interrupt_r26=psxRegs.CP0.n.EPC;
#ifdef PSXCPU_LOG
// PSXCPU_LOG("interrupt\n");
#endif
#ifdef PSXCPU_LOG
// PSXCPU_LOG("interrupt\n");
#endif
@@
-3286,7
+3292,6
@@
void psxBiosException() {
void psxBiosFreeze(int Mode) {
u32 base = 0x40000;
void psxBiosFreeze(int Mode) {
u32 base = 0x40000;
- pad_stopped = 0;
bfreezepsxMptr(jmp_int, u32);
bfreezepsxMptr(pad_buf, int);
bfreezepsxMptr(pad_buf1, char);
bfreezepsxMptr(jmp_int, u32);
bfreezepsxMptr(pad_buf, int);
bfreezepsxMptr(pad_buf1, char);
@@
-3301,4
+3306,6
@@
void psxBiosFreeze(int Mode) {
bfreezel(&CurThread);
bfreezes(FDesc);
bfreezel(&card_active_chan);
bfreezel(&CurThread);
bfreezes(FDesc);
bfreezel(&card_active_chan);
+ bfreezel(&pad_stopped);
+ bfreezel(&heap_size);
}
}