shithub: psxe

Download patch

ref: db273a45b868d3de4b768c2f49c6d965dd4da2cf
parent: a2fbacf6aa6dac7f47439ac5139db9d13b5ab0a5
author: allkern <lisandroaalarcon@gmail.com>
date: Fri Sep 8 20:34:21 EDT 2023

Fix Setloc bug

--- a/psx/dev/cdrom.c
+++ b/psx/dev/cdrom.c
@@ -97,15 +97,14 @@
                 return;
             }
 
-            cdrom->seek_ff = BTOI(f);
-            cdrom->seek_ss = BTOI(s);
-            cdrom->seek_mm = BTOI(m);
+            cdrom->seek_ff = f;
+            cdrom->seek_ss = s;
+            cdrom->seek_mm = m;
 
-            log_fatal("setloc: %02u:%02u:%02u (%08x)",
+            log_fatal("setloc: %02x:%02x:%02x",
                 cdrom->seek_mm,
                 cdrom->seek_ss,
-                cdrom->seek_ff,
-                cdrom->seek_offset
+                cdrom->seek_ff
             );
         } break;
 
@@ -142,6 +141,8 @@
             msf.s = cdrom->seek_ss;
             msf.f = cdrom->seek_ff;
 
+            msf_from_bcd(&msf);
+
             int err = psx_disc_seek(cdrom->disc, msf);
 
             if (err) {
@@ -179,6 +180,8 @@
             msf.s = cdrom->seek_ss;
             msf.f = cdrom->seek_ff;
 
+            msf_from_bcd(&msf);
+
             psx_disc_seek(cdrom->disc, msf);
             psx_disc_read_sector(cdrom->disc, cdrom->dfifo);
 
@@ -768,7 +771,7 @@
 }
 
 void cdrom_write_cmd(psx_cdrom_t* cdrom, uint8_t value) {
-    //log_set_quiet(0);
+    log_set_quiet(0);
     log_fatal("%s(%02x) %u params=[%02x, %02x, %02x, %02x, %02x, %02x]",
         g_psx_cdrom_command_names[value],
         value,
@@ -780,7 +783,7 @@
         cdrom->pfifo[4],
         cdrom->pfifo[5]
     );
-    //log_set_quiet(1);
+    log_set_quiet(1);
 
     cdrom->command = value;
     cdrom->state = CD_STATE_RECV_CMD;
@@ -801,6 +804,7 @@
         SET_BITS(status, STAT_DRQSTS_MASK, STAT_DRQSTS_MASK);
 
         cdrom->dfifo_full = 1;
+        cdrom->dfifo_index = 0;
     } else {
         SET_BITS(status, STAT_DRQSTS_MASK, 0);
 
--- a/psx/disc/cue.c
+++ b/psx/disc/cue.c
@@ -6,6 +6,7 @@
 
 #include <stdint.h>
 #include <stdio.h>
+#include <stddef.h>
 #include <string.h>
 #include <ctype.h>
 
--- a/psx/msf.c
+++ b/psx/msf.c
@@ -31,15 +31,15 @@
 }
 
 void msf_to_bcd(msf_t* msf) {
-    msf->m = BTOI(msf->m);
-    msf->s = BTOI(msf->s);
-    msf->f = BTOI(msf->f);
-}
-
-void msf_from_bcd(msf_t* msf) {
     msf->m = ITOB(msf->m);
     msf->s = ITOB(msf->s);
     msf->f = ITOB(msf->f);
+}
+
+void msf_from_bcd(msf_t* msf) {
+    msf->m = BTOI(msf->m);
+    msf->s = BTOI(msf->s);
+    msf->f = BTOI(msf->f);
 }
 
 uint32_t msf_to_address(msf_t msf) {
--