diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2025-07-27 15:33:22 +0200 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2025-07-27 15:33:22 +0200 |
commit | efb1cf0895d6c5019f5a88fa14b59afd030fefca (patch) | |
tree | 24fe5d99faad9eeed625d0ef1a6edea65482e246 /src/nasty.S | |
parent | b5a24778844f41e38168d97761d72cf0d5b400b3 (diff) |
Setup descriptor tables, and enable interrupts
Diffstat (limited to 'src/nasty.S')
-rw-r--r-- | src/nasty.S | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/src/nasty.S b/src/nasty.S index 26732a3..3f1c569 100644 --- a/src/nasty.S +++ b/src/nasty.S @@ -1,7 +1,90 @@ .intel_syntax noprefix - .section .text + .global halt halt: 1: hlt jmp 1b + + +.global set_gdt +set_gdt: + lgdt [rdi] + push rsi + lea rax, 1f + push rax + retfq +1: mov ds, rdx + mov es, rdx + mov fs, rdx + mov gs, rdx + mov ss, rdx + ltr rcx + ret + +.global set_idt +set_idt: + lidt [rdi] + ret + +.global disable_interrupts +disable_interrupts: + cli + ret + +.global enable_interrupts +enable_interrupts: + sti + ret + +#define DEFINE_ISRS \ + ISR(0) \ + ISR(1) \ + ISR(2) \ + ISR(3) \ + ISR(4) \ + ISR(5) \ + ISR(6) \ + ISR(7) \ + ISR(8) \ + ISR(9) \ + ISR(10) \ + ISR(11) \ + ISR(12) \ + ISR(13) \ + ISR(14) \ + ISR(15) \ + ISR(16) \ + ISR(17) \ + ISR(18) \ + ISR(19) \ + ISR(20) \ + ISR(21) \ + ISR(22) \ + ISR(23) \ + ISR(24) \ + ISR(25) \ + ISR(26) \ + ISR(27) \ + ISR(28) \ + ISR(29) \ + ISR(30) \ + ISR(31) + +.extern interrupt_handler +#define ISR(n) \ +isr_stub_##n: \ + mov rdi, n; \ + call interrupt_handler; \ + iretq; +DEFINE_ISRS +#undef ISR + +#define ISR(n) \ + .quad isr_stub_##n; + +.section .data +.global isr_stubs +isr_stubs: +DEFINE_ISRS +#undef ISR |