From efb1cf0895d6c5019f5a88fa14b59afd030fefca Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sun, 27 Jul 2025 15:33:22 +0200 Subject: Setup descriptor tables, and enable interrupts --- src/nasty.S | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) (limited to 'src/nasty.S') 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 -- cgit v1.2.3