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
--
⑨