summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMaxwell Beck <max@rastertail.net>2025-07-20 11:13:53 -0500
committerMaxwell Beck <max@rastertail.net>2025-07-20 11:13:53 -0500
commit039f2b9965ac716f7cb24c3563f6a9bf9e3038da (patch)
treeccfacca3474a26a772b78a8018de640001cef870 /src
parent38f2755daa2456a4ebcaadcf3ddd2ff88e4fa838 (diff)
feat: Move drive handing to `SIO_IRQ_PROC1`
Diffstat (limited to 'src')
-rw-r--r--src/pico1541.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/pico1541.c b/src/pico1541.c
index 8a02587..9864c89 100644
--- a/src/pico1541.c
+++ b/src/pico1541.c
@@ -1,8 +1,10 @@
+#include <hardware/regs/intctrl.h>
 #include <stdint.h>
 
 #include <hardware/clocks.h>
 #include <hardware/flash.h>
 #include <hardware/gpio.h>
+#include <hardware/irq.h>
 #include <hardware/timer.h>
 #include <pico/multicore.h>
 
@@ -272,15 +274,18 @@ DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff) {
 	return RES_PARERR;
 }
 
+void drive_irq() {
+	drive_cycle(&drive);
+}
+
 void drive_thread() {
 	drive_init(&drive);
 	drive.image = disk;
+
+	irq_set_exclusive_handler(SIO_IRQ_PROC1, drive_irq);
+	irq_set_enabled(SIO_IRQ_PROC1, true);
 	
 	multicore_fifo_push_blocking(1);
-
-	while (multicore_fifo_pop_blocking_inline()) {
-		drive_cycle(&drive);
-	}
 }
 
 int main() {