shithub: psxe

Download patch

ref: 1fc5600819684177dcad1d806c64e7d063a32d97
parent: 40f341ac7852596d642ff4c3a99898d1cd020592
author: allkern <lisandroaalarcon@gmail.com>
date: Mon Aug 21 16:19:26 EDT 2023

Make Setloc not stop ReadN

--- a/psx/dev/cdrom.c
+++ b/psx/dev/cdrom.c
@@ -68,6 +68,8 @@
     exit(1);
 }
 void cdrom_cmd_getstat(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             if (cdrom->pfifo_index) {
@@ -91,7 +93,7 @@
             cdrom->delayed_command = CDL_NONE;
 
             SET_BITS(ifr, IFR_INT, IFR_INT3);
-            RESP_PUSH(GETSTAT_MOTOR);
+            RESP_PUSH(GETSTAT_MOTOR | (cdrom->disc ? 0 : GETSTAT_TRAYOPEN));
 
             cdrom->state = CD_STATE_RECV_CMD;
         } break;
@@ -149,6 +151,8 @@
     }
 }
 void cdrom_cmd_readn(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             log_fatal("CdlReadN: CD_STATE_RECV_CMD");
@@ -204,6 +208,8 @@
 }
 void cdrom_cmd_stop(psx_cdrom_t* cdrom) { log_fatal("stop: Unimplemented"); exit(1); }
 void cdrom_cmd_pause(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             cdrom->read_ongoing = 0;
@@ -234,6 +240,8 @@
     }
 }
 void cdrom_cmd_init(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             cdrom->irq_delay = DELAY_1MS;
@@ -260,6 +268,8 @@
     }
 }
 void cdrom_cmd_unmute(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             if (cdrom->pfifo_index) {
@@ -289,6 +299,8 @@
     }
 }
 void cdrom_cmd_setfilter(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             if (cdrom->pfifo_index != 2) {
@@ -321,6 +333,8 @@
     }
 }
 void cdrom_cmd_setmode(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             if (cdrom->pfifo_index != 1) {
@@ -360,6 +374,8 @@
 void cdrom_cmd_getlocl(psx_cdrom_t* cdrom) { log_fatal("getlocl: Unimplemented"); exit(1); }
 void cdrom_cmd_getlocp(psx_cdrom_t* cdrom) { log_fatal("getlocp: Unimplemented"); exit(1); }
 void cdrom_cmd_gettn(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             if (cdrom->pfifo_index) {
@@ -391,6 +407,8 @@
     }
 }
 void cdrom_cmd_gettd(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             if (cdrom->pfifo_index != 1) {
@@ -424,6 +442,8 @@
     }
 }
 void cdrom_cmd_seekl(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             cdrom->irq_delay = DELAY_1MS;
@@ -455,6 +475,8 @@
 }
 void cdrom_cmd_seekp(psx_cdrom_t* cdrom) { log_fatal("seekp: Unimplemented"); exit(1); }
 void cdrom_cmd_test(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             if (cdrom->pfifo_index != 1) {
@@ -499,6 +521,8 @@
     }
 }
 void cdrom_cmd_getid(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             if (cdrom->pfifo_index) {
@@ -556,6 +580,8 @@
     }
 }
 void cdrom_cmd_reads(psx_cdrom_t* cdrom) {
+    cdrom->delayed_command = CDL_NONE;
+
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
             log_fatal("CdlReadS: CD_STATE_RECV_CMD");
@@ -749,7 +775,6 @@
 
     cdrom->command = value;
     cdrom->state = CD_STATE_RECV_CMD;
-    cdrom->delayed_command = CDL_NONE;
 
     g_psx_cdrom_command_table[value](cdrom);
 }
--- a/psx/exe.c
+++ b/psx/exe.c
@@ -35,9 +35,8 @@
         cpu->r[30] = cpu->r[29];
     }
 
-    log_fatal("PC=%08x SP=%08x (%08x) GP=%08x", cpu->pc, cpu->r[29], hdr.ispb, cpu->r[28]);
-
     log_info("Loaded PS-X EXE file \"%s\"", path);
+    log_fatal("PC=%08x SP=%08x (%08x) GP=%08x", cpu->pc, cpu->r[29], hdr.ispb, cpu->r[28]);
 
     fclose(file);
 }
\ No newline at end of file
--