ref: 662bb5f225dd1cf6b189f045651618c584d6224e
parent: d4d4c78b6f6db4eccb8a9a9369e03e3d166c3993
author: allkern <lisandroaalarcon@gmail.com>
date: Sun Jul 30 19:34:56 EDT 2023
Improve CD state names
--- a/psx/dev/cdrom.c
+++ b/psx/dev/cdrom.c
@@ -64,7 +64,7 @@
RESP_PUSH(0x20);
cdrom->delayed_command = CDL_NONE;
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
}
void cdrom_cmd_unimplemented(psx_cdrom_t* cdrom) { log_fatal("Unimplemented CDROM command (%u)", cdrom->command);@@ -73,7 +73,7 @@
}
void cdrom_cmd_getstat(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: { if (cdrom->pfifo_index) { log_fatal("CdlGetStat: Expected exactly 0 parameters");@@ -82,22 +82,22 @@
cdrom->irq_delay = DELAY_1MS;
cdrom->delayed_command = CDL_GETSTAT;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {cdrom->delayed_command = CDL_NONE;
SET_BITS(ifr, IFR_INT, IFR_INT3);
RESP_PUSH(cdrom->stat);
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
} break;
}
}
void cdrom_cmd_setloc(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: { if (cdrom->pfifo_index != 3) { log_fatal("CdlSetloc: Expected exactly 3 parameters, got %u instead",cdrom->pfifo_index
@@ -108,7 +108,7 @@
cdrom->irq_delay = DELAY_1MS;
cdrom->delayed_command = CDL_SETLOC;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
cdrom->seek_sect = cdrom_btoi(PFIFO_POP);
cdrom->seek_ss = cdrom_btoi(PFIFO_POP);
@@ -128,27 +128,27 @@
);
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {cdrom->delayed_command = CDL_NONE;
SET_BITS(ifr, IFR_INT, IFR_INT3);
RESP_PUSH(cdrom->stat);
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
} break;
}
}
void cdrom_cmd_readn(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {- log_fatal("CdlReadN: CD_STATE_CMD");+ case CD_STATE_RECV_CMD: {+ log_fatal("CdlReadN: CD_STATE_RECV_CMD");cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
cdrom->delayed_command = CDL_READN;
} break;
- case CD_STATE_RESP1: {- log_fatal("CdlReadN: CD_STATE_RESP1");+ case CD_STATE_SEND_RESP1: {+ log_fatal("CdlReadN: CD_STATE_SEND_RESP1");SET_BITS(ifr, IFR_INT, 3);
RESP_PUSH(GETSTAT_MOTOR);
@@ -158,7 +158,7 @@
int double_speed = cdrom->mode & MODE_SPEED;
cdrom->irq_delay = double_speed ? READ_DOUBLE_DELAY : READ_SINGLE_DELAY;
- cdrom->state = CD_STATE_RESP2;
+ cdrom->state = CD_STATE_SEND_RESP2;
cdrom->delayed_command = CDL_READN;
if (cdrom->spin_delay) {@@ -167,8 +167,8 @@
}
} break;
- case CD_STATE_RESP2: {- log_fatal("CdlReadN: CD_STATE_RESP2");+ case CD_STATE_SEND_RESP2: {+ log_fatal("CdlReadN: CD_STATE_SEND_RESP2");SET_BITS(ifr, IFR_INT, 1);
RESP_PUSH(GETSTAT_MOTOR | GETSTAT_READ);
@@ -185,7 +185,7 @@
int double_speed = cdrom->mode & MODE_SPEED;
cdrom->irq_delay = double_speed ? READ_DOUBLE_DELAY : READ_SINGLE_DELAY;
- cdrom->state = CD_STATE_RESP2;
+ cdrom->state = CD_STATE_SEND_RESP2;
cdrom->delayed_command = CDL_READN;
} break;
}
@@ -193,13 +193,13 @@
void cdrom_cmd_stop(psx_cdrom_t* cdrom) { log_fatal("stop: Unimplemented"); exit(1); } void cdrom_cmd_pause(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: {cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
cdrom->delayed_command = CDL_PAUSE;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {SET_BITS(ifr, IFR_INT, 3);
RESP_PUSH(GETSTAT_MOTOR | GETSTAT_READ);
@@ -206,15 +206,15 @@
int double_speed = cdrom->mode & MODE_SPEED;
cdrom->irq_delay = DELAY_1MS * (double_speed ? 70 : 35);
- cdrom->state = CD_STATE_RESP2;
+ cdrom->state = CD_STATE_SEND_RESP2;
cdrom->delayed_command = CDL_PAUSE;
} break;
- case CD_STATE_RESP2: {+ case CD_STATE_SEND_RESP2: {SET_BITS(ifr, IFR_INT, 2);
RESP_PUSH(GETSTAT_MOTOR);
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
cdrom->delayed_command = CDL_NONE;
} break;
}
@@ -221,26 +221,26 @@
}
void cdrom_cmd_init(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: {cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
cdrom->delayed_command = CDL_INIT;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {SET_BITS(ifr, IFR_INT, 3);
RESP_PUSH(cdrom->stat);
cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP2;
+ cdrom->state = CD_STATE_SEND_RESP2;
cdrom->delayed_command = CDL_INIT;
} break;
- case CD_STATE_RESP2: {+ case CD_STATE_SEND_RESP2: {SET_BITS(ifr, IFR_INT, 2);
RESP_PUSH(cdrom->stat);
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
cdrom->delayed_command = CDL_NONE;
} break;
}
@@ -247,7 +247,7 @@
}
void cdrom_cmd_unmute(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: { if (cdrom->pfifo_index) { log_fatal("CdlGetStat: Expected exactly 0 parameters");@@ -256,15 +256,15 @@
cdrom->irq_delay = DELAY_1MS;
cdrom->delayed_command = CDL_DEMUTE;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {SET_BITS(ifr, IFR_INT, IFR_INT3);
RESP_PUSH(cdrom->stat);
cdrom->delayed_command = CDL_NONE;
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
} break;
}
}
@@ -271,7 +271,7 @@
void cdrom_cmd_setfilter(psx_cdrom_t* cdrom) { log_fatal("setfilter: Unimplemented"); exit(1); } void cdrom_cmd_setmode(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: { if (cdrom->pfifo_index != 1) { log_fatal("CdlSetmode: Expected exactly 1 parameter");@@ -291,16 +291,16 @@
cdrom->irq_delay = DELAY_1MS;
cdrom->delayed_command = CDL_SETMODE;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {cdrom->delayed_command = CDL_NONE;
SET_BITS(ifr, IFR_INT, IFR_INT3);
RESP_PUSH(cdrom->stat);
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
} break;
}
}
@@ -308,7 +308,7 @@
void cdrom_cmd_getlocp(psx_cdrom_t* cdrom) { log_fatal("getlocp: Unimplemented"); exit(1); } void cdrom_cmd_gettn(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: { if (cdrom->pfifo_index) { log_fatal("CdlGetTN: Expected exactly 0 parameters");@@ -317,10 +317,10 @@
cdrom->irq_delay = DELAY_1MS;
cdrom->delayed_command = CDL_GETTN;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {SET_BITS(ifr, IFR_INT, IFR_INT3);
RESP_PUSH(0x14);
RESP_PUSH(0x01);
@@ -327,13 +327,13 @@
RESP_PUSH(cdrom->stat);
cdrom->delayed_command = CDL_NONE;
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
} break;
}
}
void cdrom_cmd_gettd(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: { if (cdrom->pfifo_index != 1) { log_fatal("CdlGetTD: Expected exactly 0 parameters");@@ -344,10 +344,10 @@
cdrom->irq_delay = DELAY_1MS;
cdrom->delayed_command = CDL_GETTD;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {SET_BITS(ifr, IFR_INT, IFR_INT3);
RESP_PUSH(0x14);
RESP_PUSH(0x01);
@@ -354,15 +354,15 @@
RESP_PUSH(cdrom->stat);
cdrom->delayed_command = CDL_NONE;
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
} break;
}
}
void cdrom_cmd_seekl(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: {cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
cdrom->delayed_command = CDL_SEEKL;
log_fatal("seekl: Seeking to address %08x", cdrom->seek_offset);@@ -370,20 +370,20 @@
fseek(cdrom->disc, cdrom->seek_offset, 0);
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {SET_BITS(ifr, IFR_INT, 3);
RESP_PUSH(cdrom->stat);
cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP2;
+ cdrom->state = CD_STATE_SEND_RESP2;
cdrom->delayed_command = CDL_SEEKL;
} break;
- case CD_STATE_RESP2: {+ case CD_STATE_SEND_RESP2: {SET_BITS(ifr, IFR_INT, 2);
RESP_PUSH(cdrom->stat);
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
cdrom->delayed_command = CDL_NONE;
} break;
}
@@ -391,7 +391,7 @@
void cdrom_cmd_seekp(psx_cdrom_t* cdrom) { log_fatal("seekp: Unimplemented"); exit(1); } void cdrom_cmd_test(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: { if (cdrom->pfifo_index != 1) { log_fatal("CdlTest: Expected exactly 1 parameter");@@ -406,10 +406,10 @@
cdrom->irq_delay = DELAY_1MS;
cdrom->delayed_command = CDL_TEST;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {cdrom->delayed_command = CDL_NONE;
SET_BITS(ifr, IFR_INT, IFR_INT3);
@@ -418,13 +418,13 @@
RESP_PUSH(0x13);
RESP_PUSH(0x03);
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
} break;
}
}
void cdrom_cmd_getid(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {+ case CD_STATE_RECV_CMD: { if (cdrom->pfifo_index) { log_fatal("CdlGetID: Expected exactly 0 parameters");@@ -436,20 +436,20 @@
}
cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
cdrom->delayed_command = CDL_GETID;
} break;
- case CD_STATE_RESP1: {+ case CD_STATE_SEND_RESP1: {SET_BITS(ifr, IFR_INT, 3);
RESP_PUSH(GETSTAT_MOTOR);
cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP2;
+ cdrom->state = CD_STATE_SEND_RESP2;
cdrom->delayed_command = CDL_GETID;
} break;
- case CD_STATE_RESP2: {+ case CD_STATE_SEND_RESP2: {SET_BITS(ifr, IFR_INT, 2);
if (cdrom->disc) {@@ -472,7 +472,7 @@
RESP_PUSH(0x08);
}
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
cdrom->delayed_command = CDL_NONE;
} break;
}
@@ -479,15 +479,15 @@
}
void cdrom_cmd_reads(psx_cdrom_t* cdrom) { switch (cdrom->state) {- case CD_STATE_CMD: {- log_fatal("CdlReadS: CD_STATE_CMD");+ case CD_STATE_RECV_CMD: {+ log_fatal("CdlReadS: CD_STATE_RECV_CMD");cdrom->irq_delay = DELAY_1MS;
- cdrom->state = CD_STATE_RESP1;
+ cdrom->state = CD_STATE_SEND_RESP1;
cdrom->delayed_command = CDL_READS;
} break;
- case CD_STATE_RESP1: {- log_fatal("CdlReadS: CD_STATE_RESP1");+ case CD_STATE_SEND_RESP1: {+ log_fatal("CdlReadS: CD_STATE_SEND_RESP1");SET_BITS(ifr, IFR_INT, 3);
RESP_PUSH(GETSTAT_MOTOR);
@@ -497,7 +497,7 @@
int double_speed = cdrom->mode & MODE_SPEED;
cdrom->irq_delay = double_speed ? READ_DOUBLE_DELAY : READ_SINGLE_DELAY;
- cdrom->state = CD_STATE_RESP2;
+ cdrom->state = CD_STATE_SEND_RESP2;
cdrom->delayed_command = CDL_READS;
if (cdrom->spin_delay) {@@ -506,8 +506,8 @@
}
} break;
- case CD_STATE_RESP2: {- log_fatal("CdlReadS: CD_STATE_RESP2");+ case CD_STATE_SEND_RESP2: {+ log_fatal("CdlReadS: CD_STATE_SEND_RESP2");SET_BITS(ifr, IFR_INT, 1);
RESP_PUSH(GETSTAT_MOTOR | GETSTAT_READ);
@@ -524,7 +524,7 @@
int double_speed = cdrom->mode & MODE_SPEED;
cdrom->irq_delay = double_speed ? READ_DOUBLE_DELAY : READ_SINGLE_DELAY;
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
cdrom->delayed_command = CDL_NONE;
} break;
}
@@ -670,7 +670,7 @@
);
cdrom->command = value;
- cdrom->state = CD_STATE_CMD;
+ cdrom->state = CD_STATE_RECV_CMD;
cdrom->delayed_command = CDL_NONE;
g_psx_cdrom_command_table[value](cdrom);
--- a/psx/dev/cdrom.h
+++ b/psx/dev/cdrom.h
@@ -17,10 +17,12 @@
#define CD_SECTOR_SIZE 0x930
#define CD_SECTORS_PER_SECOND 75
-#define CD_STATE_CMD 0
-#define CD_STATE_RESP1 1
-#define CD_STATE_RESP2 2
-#define CD_STATE_ERROR 3
+enum {+ CD_STATE_RECV_CMD,
+ CD_STATE_SEND_RESP1,
+ CD_STATE_SEND_RESP2,
+ CD_STATE_ERROR
+};
#define CDL_NONE 0x00
#define CDL_GETSTAT 0x01
--
⑨