Revert "GPF loop, yay"

This reverts commit 904df77287.
This commit is contained in:
c0repwn3r 2022-05-10 09:48:29 -04:00
parent 904df77287
commit 523443ab90
Signed by: core
GPG Key ID: FDBF740DADDCEECF
11 changed files with 8 additions and 106 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -50,5 +50,5 @@ void main() {
idt_init();
kernel_msg_ok("Interrupts initialized");
//__asm__ __volatile__("int $2");
__asm__ __volatile__("int $2");
}

View File

@ -1,52 +1,8 @@
#include "int.h"
#include "../../print.h"
char *exception_messages[] = {
"Division By Zero",
"Debug",
"Non Maskable Interrupt",
"Breakpoint",
"Into Detected Overflow",
"Out of Bounds",
"Invalid Opcode",
"No Coprocessor",
"Double Fault",
"Coprocessor Segment Overrun",
"Bad TSS",
"Segment Not Present",
"Stack Fault",
"General Protection Fault",
"Page Fault",
"Unknown Interrupt",
"Coprocessor Fault",
"Alignment Check",
"Machine Check",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved",
"Reserved"
};
void exception_handler(registers_t r) {
print_str("int: ");
char s[3];
int_to_ascii(r.int_no, s);
print_str(s);
print_str("\n");
print_str(exception_messages[r.int_no]);
print_str("\n");
void exception_handler() {
print_str("I");
}
void idt_set_descriptor(u8 vector, void* isr, u8 flags) {

View File

@ -21,17 +21,8 @@ typedef struct {
static idtr_t idtr;
typedef struct {
u32 ds; // Data segment selector
u32 edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha
u32 int_no, err_code; // Interrupt number and error code (if present)
u32 eip, cs, eflags, useresp, ss; // Pushed automatically by the CPU
} registers_t;
__attribute__((noreturn))
void exception_handler(registers_t r);
void exception_handler(void);
void idt_set_descriptor(u8 vector, void* isr, u8 flags);

View File

@ -1,58 +1,13 @@
%macro isr_err_stub 1
isr_stub_%+%1:
push byte %1
; Save CPU state
pusha ; Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax
mov ax, ds ; Lower 16-bits of eax = ds.
push eax ; save the data segment descriptor
mov ax, 0x10 ; kernel data segment descriptor
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
call exception_handler ; Call C handler
; Restore CPU state
pop eax
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
popa
add esp, 8 ; Cleans up the pushed error code and pushed ISR number
sti
iret ; pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP
call exception_handler
iret
%endmacro
; if writing for 64-bit, use iretq instead
%macro isr_no_err_stub 1
isr_stub_%+%1:
push byte 0
push byte %1
; Save CPU state
pusha ; Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax
mov ax, ds ; Lower 16-bits of eax = ds.
push eax ; save the data segment descriptor
mov ax, 0x10 ; kernel data segment descriptor
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
call exception_handler ; Call C handler
; Restore CPU state
pop eax
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
popa
add esp, 8 ; Cleans up the pushed error code and pushed ISR number
sti
iret ; pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP
call exception_handler
iret
%endmacro
extern exception_handler