shithub: psxe

Download patch

ref: bd6ea0ddb5cc24879535129940b4fb209403502e
parent: 406cf388b0d8fdfb1e917ef586e30d3416056df9
author: allkern <lisandroaalarcon@gmail.com>
date: Wed Aug 9 18:59:00 EDT 2023

Handle `Setloc` during `ReadN`

--- a/psx/dev/cdrom.c
+++ b/psx/dev/cdrom.c
@@ -114,9 +114,11 @@
                 return;
             }
 
-            cdrom->irq_delay = DELAY_1MS;
-            cdrom->delayed_command = CDL_SETLOC;
-            cdrom->state = CD_STATE_SEND_RESP1;
+            if (!cdrom->read_ongoing) {
+                cdrom->irq_delay = DELAY_1MS;
+                cdrom->delayed_command = CDL_SETLOC;
+                cdrom->state = CD_STATE_SEND_RESP1;
+            }
 
             cdrom->seek_sect = BTOI(PFIFO_POP);
             cdrom->seek_ss = BTOI(PFIFO_POP);
@@ -176,6 +178,8 @@
         } break;
 
         case CD_STATE_SEND_RESP2: {
+            cdrom->read_ongoing = 1;
+
             log_fatal("CdlReadN: CD_STATE_SEND_RESP2");
 
             SET_BITS(ifr, IFR_INT, IFR_INT1);
@@ -202,6 +206,8 @@
 void cdrom_cmd_pause(psx_cdrom_t* cdrom) {
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
+            cdrom->read_ongoing = 0;
+
             cdrom->irq_delay = DELAY_1MS;
             cdrom->state = CD_STATE_SEND_RESP1;
             cdrom->delayed_command = CDL_PAUSE;
--- a/psx/dev/cdrom.h
+++ b/psx/dev/cdrom.h
@@ -182,6 +182,7 @@
     int spin_delay;
     uint8_t error;
     uint8_t error_flags;
+    int read_ongoing;
 
     const char* path;
     FILE* disc;
--