parent
904df77287
commit
523443ab90
BIN
bin/boot.bin
BIN
bin/boot.bin
Binary file not shown.
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
BIN
kernel.elf
BIN
kernel.elf
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
os-image.bin
BIN
os-image.bin
Binary file not shown.
|
@ -50,5 +50,5 @@ void main() {
|
|||
idt_init();
|
||||
kernel_msg_ok("Interrupts initialized");
|
||||
|
||||
//__asm__ __volatile__("int $2");
|
||||
__asm__ __volatile__("int $2");
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue