Backport http://pcsxr.codeplex.com/SourceControl/changeset/93284
[pcsx_rearmed.git] / libpcsxcore / psxbios.c
index 144a7b4..d5ed725 100644 (file)
@@ -613,14 +613,14 @@ void psxBios_tolower() { // 0x26
 
 void psxBios_bcopy() { // 0x27
        char *p1 = (char *)Ra1, *p2 = (char *)Ra0;
-       while (a2-- > 0) *p1++ = *p2++;
+       while ((s32)a2-- > 0) *p1++ = *p2++;
 
        pc0 = ra;
 }
 
 void psxBios_bzero() { // 0x28
        char *p = (char *)Ra0;
-       while (a1-- > 0) *p++ = '\0';
+       while ((s32)a1-- > 0) *p++ = '\0';
 
        pc0 = ra;
 }
@@ -630,7 +630,7 @@ void psxBios_bcmp() { // 0x29
 
        if (a0 == 0 || a1 == 0) { v0 = 0; pc0 = ra; return; }
 
-       while (a2-- > 0) {
+       while ((s32)a2-- > 0) {
                if (*p1++ != *p2++) {
                        v0 = *p1 - *p2; // BUG: compare the NEXT byte
                        pc0 = ra;
@@ -643,15 +643,16 @@ void psxBios_bcmp() { // 0x29
 
 void psxBios_memcpy() { // 0x2a
        char *p1 = (char *)Ra0, *p2 = (char *)Ra1;
-       while (a2-- > 0) *p1++ = *p2++;
+       while ((s32)a2-- > 0) *p1++ = *p2++;
 
        v0 = a0; pc0 = ra;
 }
 
 void psxBios_memset() { // 0x2b
        char *p = (char *)Ra0;
-       while (a2-- > 0) *p++ = (char)a1;
+       while ((s32)a2-- > 0) *p++ = (char)a1;
 
+       a2 = 0;
        v0 = a0; pc0 = ra;
 }
 
@@ -662,9 +663,9 @@ void psxBios_memmove() { // 0x2c
                a2++; // BUG: copy one more byte here
                p1 += a2;
                p2 += a2;
-               while (a2-- > 0) *--p1 = *--p2;
+               while ((s32)a2-- > 0) *--p1 = *--p2;
        } else {
-               while (a2-- > 0) *p1++ = *p2++;
+               while ((s32)a2-- > 0) *p1++ = *p2++;
        }
 
        v0 = a0; pc0 = ra;
@@ -677,7 +678,7 @@ void psxBios_memcmp() { // 0x2d
 void psxBios_memchr() { // 0x2e
        char *p = (char *)Ra0;
 
-       while (a2-- > 0) {
+       while ((s32)a2-- > 0) {
                if (*p++ != (s8)a1) continue;
                v0 = a0 + (p - (char *)Ra0 - 1);
                pc0 = ra;
@@ -2215,6 +2216,15 @@ void psxBios_ChangeClearPad() { // 5b
        pc0 = ra;
 }
 
+void psxBios__card_status() { // 5c
+#ifdef PSXBIOS_LOG
+   PSXBIOS_LOG("psxBios_%s: %x\n", biosB0n[0x5c], a0);
+#endif
+
+   v0 = 1;
+   pc0 = ra;
+}
+
 /* System calls C0 */
 
 /*
@@ -2568,7 +2578,7 @@ void psxBiosInit() {
        //biosB0[0x59] = psxBios_sys_b0_59;
        //biosB0[0x5a] = psxBios_sys_b0_5a;
        biosB0[0x5b] = psxBios_ChangeClearPad;
-       //biosB0[0x5c] = psxBios__card_status;
+       biosB0[0x5c] = psxBios__card_status;
        //biosB0[0x5d] = psxBios__card_wait;
 //*******************C0 CALLS****************************
        //biosC0[0x00] = psxBios_InitRCnt;