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