shithub: psxe

Download patch

ref: 0f73e41c1fa19b5e13345f35024f182143edb068
parent: 6091f3ba98fc8c7a686d27afd7935c3a34029b9f
author: allkern <lisandroaalarcon@gmail.com>
date: Tue Aug 1 19:19:54 EDT 2023

Stub CdlSetfilter

--- a/psx/dev/cdrom.c
+++ b/psx/dev/cdrom.c
@@ -282,7 +282,39 @@
         } break;
     }
 }
-void cdrom_cmd_setfilter(psx_cdrom_t* cdrom) { log_fatal("setfilter: Unimplemented"); exit(1); }
+void cdrom_cmd_setfilter(psx_cdrom_t* cdrom) {
+    switch (cdrom->state) {
+        case CD_STATE_RECV_CMD: {
+            if (cdrom->pfifo_index != 2) {
+                log_fatal("CdlSetfilter: Expected exactly 2 parameter");
+
+                cdrom->irq_delay = DELAY_1MS;
+                cdrom->delayed_command = CDL_ERROR;
+                cdrom->state = CD_STATE_ERROR;
+                cdrom->error = ERR_PCOUNT;
+                cdrom->error_flags = GETSTAT_ERROR;
+
+                return;
+            }
+
+            PFIFO_POP;
+            PFIFO_POP;
+
+            cdrom->irq_delay = DELAY_1MS;
+            cdrom->delayed_command = CDL_SETFILTER;
+            cdrom->state = CD_STATE_SEND_RESP1;
+        } break;
+
+        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_RECV_CMD;
+        } break;
+    }
+}
 void cdrom_cmd_setmode(psx_cdrom_t* cdrom) {
     switch (cdrom->state) {
         case CD_STATE_RECV_CMD: {
--