summaryrefslogtreecommitdiff
path: root/src/nasty.S
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2025-07-27 16:53:54 +0200
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2025-07-27 16:53:54 +0200
commit82585d70771bbac69f95127b003446486623c07a (patch)
treeb6162eaee76f5683e5f81753adc13f28bec8d904 /src/nasty.S
parentefb1cf0895d6c5019f5a88fa14b59afd030fefca (diff)
Tweaks to the interrupt handler mechanism
Diffstat (limited to 'src/nasty.S')
-rw-r--r--src/nasty.S33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/nasty.S b/src/nasty.S
index 3f1c569..ac9fc91 100644
--- a/src/nasty.S
+++ b/src/nasty.S
@@ -37,6 +37,11 @@ enable_interrupts:
sti
ret
+.global get_cr2
+get_cr2:
+ mov rax, cr2
+ ret
+
#define DEFINE_ISRS \
ISR(0) \
ISR(1) \
@@ -46,20 +51,20 @@ enable_interrupts:
ISR(5) \
ISR(6) \
ISR(7) \
- ISR(8) \
+ ISR_E(8) \
ISR(9) \
- ISR(10) \
- ISR(11) \
- ISR(12) \
- ISR(13) \
- ISR(14) \
+ ISR_E(10) \
+ ISR_E(11) \
+ ISR_E(12) \
+ ISR_E(13) \
+ ISR_E(14) \
ISR(15) \
ISR(16) \
- ISR(17) \
+ ISR_E(17) \
ISR(18) \
ISR(19) \
ISR(20) \
- ISR(21) \
+ ISR_E(21) \
ISR(22) \
ISR(23) \
ISR(24) \
@@ -75,13 +80,21 @@ enable_interrupts:
#define ISR(n) \
isr_stub_##n: \
mov rdi, n; \
+ mov rsi, 0; \
call interrupt_handler; \
iretq;
+#define ISR_E(n) \
+isr_stub_##n: \
+ pop rsi; \
+ mov rdi, n; \
+ call interrupt_handler;
+ iretq;
DEFINE_ISRS
#undef ISR
+#undef ISR_E
-#define ISR(n) \
- .quad isr_stub_##n;
+#define ISR(n) .quad isr_stub_##n;
+#define ISR_E(n) .quad isr_stub_##n;
.section .data
.global isr_stubs