cdrom: add missing BCD->int convert in cdrFreeze()
[pcsx_rearmed.git] / libpcsxcore / cdrom.c
index 3a2eb1f..a417a52 100644 (file)
@@ -24,6 +24,7 @@
 #include "cdrom.h"
 #include "ppf.h"
 #include "psxdma.h"
+#include "arm_features.h"
 
 /* logging */
 #if 0
@@ -876,7 +877,8 @@ void cdrInterrupt() {
                        }
                        cdr.Result[0] |= (cdr.Result[1] >> 4) & 0x08;
 
-                       strncpy((char *)&cdr.Result[4], "PCSX", 4);
+                       /* This adds the string "PCSX" in Playstation bios boot screen */
+                       memcpy((char *)&cdr.Result[4], "PCSX", 4);
                        cdr.Stat = Complete;
                        break;
 
@@ -1006,7 +1008,7 @@ finish:
 #endif
 }
 
-#ifdef __ARM_ARCH_7A__
+#ifdef HAVE_ARMV7
  #define ssat32_to_16(v) \
   asm("ssat %0,#16,%1" : "=r" (v) : "r" (v))
 #else
@@ -1413,13 +1415,15 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) {
                        psxCpu->Clear(madr, cdsize / 4);
                        pTransfer += cdsize;
 
-
-                       // burst vs normal
                        if( chcr == 0x11400100 ) {
+                               HW_DMA3_MADR = SWAPu32(madr + cdsize);
                                CDRDMA_INT( (cdsize/4) / 4 );
                        }
                        else if( chcr == 0x11000000 ) {
-                               CDRDMA_INT( (cdsize/4) * 1 );
+                               // CDRDMA_INT( (cdsize/4) * 1 );
+                               // halted
+                               psxRegs.cycle += (cdsize/4) * 24/2;
+                               CDRDMA_INT(16);
                        }
                        return;
 
@@ -1495,7 +1499,9 @@ int cdrFreeze(void *f, int Mode) {
                pTransfer = cdr.Transfer + tmp;
 
                // read right sub data
-               memcpy(tmpp, cdr.Prev, 3);
+               tmpp[0] = btoi(cdr.Prev[0]);
+               tmpp[1] = btoi(cdr.Prev[1]);
+               tmpp[2] = btoi(cdr.Prev[2]);
                cdr.Prev[0]++;
                ReadTrack(tmpp);