diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2025-07-27 16:53:54 +0200 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2025-07-27 16:53:54 +0200 |
commit | 82585d70771bbac69f95127b003446486623c07a (patch) | |
tree | b6162eaee76f5683e5f81753adc13f28bec8d904 /src/nasty.S | |
parent | efb1cf0895d6c5019f5a88fa14b59afd030fefca (diff) |
Tweaks to the interrupt handler mechanism
Diffstat (limited to 'src/nasty.S')
-rw-r--r-- | src/nasty.S | 33 |
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 |