summaryrefslogtreecommitdiff
path: root/src/nasty.S
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2025-07-27 15:33:22 +0200
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2025-07-27 15:33:22 +0200
commitefb1cf0895d6c5019f5a88fa14b59afd030fefca (patch)
tree24fe5d99faad9eeed625d0ef1a6edea65482e246 /src/nasty.S
parentb5a24778844f41e38168d97761d72cf0d5b400b3 (diff)
Setup descriptor tables, and enable interrupts
Diffstat (limited to 'src/nasty.S')
-rw-r--r--src/nasty.S85
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