summary refs log tree commit diff
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
parent38f2755daa2456a4ebcaadcf3ddd2ff88e4fa838 (diff)
feat: Move drive handing to `SIO_IRQ_PROC1`
-rw-r--r--CMakeLists.txt2
-rw-r--r--src/pico1541.c13
2 files changed, 10 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 04846ba..4963841 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,5 +11,5 @@ add_executable(pico1541
 )
 pico_set_binary_type(pico1541 copy_to_ram)
 target_include_directories(pico1541 PRIVATE src)
-target_link_libraries(pico1541 pico_runtime pico_multicore hardware_timer hardware_flash tinyusb_device tinyusb_board pico_stdlib)
+target_link_libraries(pico1541 pico_runtime pico_multicore hardware_timer hardware_flash hardware_irq tinyusb_device tinyusb_board pico_stdlib)
 pico_add_extra_outputs(pico1541)
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() {