From c45c9b3b325bacd22eedfc3522a26a97d905decb Mon Sep 17 00:00:00 2001 From: xamidev Date: Sun, 14 Jul 2024 21:41:04 +0200 Subject: [PATCH] Add: ISR now handling common exceptions --- < | 50 +++++++++ com1.out | Bin 100 -> 154 bytes iso/boot/kernel.elf | Bin 14760 -> 19892 bytes isr.c | 117 ++++++++++++++++++++ kernel.elf | Bin 14760 -> 19892 bytes kmain.c | 10 ++ link.ld | 4 + loader.s | 253 +++++++++++++++++++++++++++++++++++++++++++- makefile | 2 +- os.iso | Bin 491520 -> 495616 bytes system.h | 10 ++ 11 files changed, 443 insertions(+), 3 deletions(-) create mode 100644 < create mode 100644 isr.c diff --git a/< b/< new file mode 100644 index 0000000..37cc297 --- /dev/null +++ b/< @@ -0,0 +1,50 @@ +#include "stdio.h" +#include "serial.h" +#include "gdt.h" +#include "idt.h" +#include "system.h" + +int kmain(int retvalue) +{ + + gdt_install(); + idt_install(); + isr_install(); + + // serial testing + + init_serial(); + + log("serial connection established", 3); + log("initialized GDT entries", 2); + log("kernel started", 2); + log("initialized IDT", 2); + log("initialized ISRs", 3); + + clear(); + + // printf testing + + // TODO: Framebuffer upgrade: color output + + int age = 34; + int problems = 124; + char* name = "xamidev"; + + printf("Hello %s, you are %d years old and have %d problems. wow %%\n", name, age, problems); + + long suchwow = 2934342; + char character = 65; + printf("such number %u\nsuch character %c", suchwow, character); + + printf("wow negative %d\n", -3742); + printf("such hex %x %X\n", 0xcafe, 0xdeadbeef); + + printf("such pointer %p\n", (void*)0xcafe1234); + + // Div by zero exception + + printf("Lalala, what a beautiful day! %d", 4/0); + + return retvalue; +} diff --git a/com1.out b/com1.out index a4fd5dac498d349677f191b46c72b7ddd33de8e5..c02424cb412d8cbdeb2a1d9996a86fc9bf5fba38 100644 GIT binary patch delta 60 zcmYe9#W*3wEZWo0%|BLwAu}(tBr`E5vnn-3!P6y#fr}y9#nma)9bGCos2C^*07Fa? AF8}}l delta 5 McmbQmm@**+00p}N^Z)<= diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 37b93083e6094b2aa4cec9a8fbcee2f813abce40..7ee5345edfd6aac3b673981e44bba301b8b89265 100755 GIT binary patch literal 19892 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 delta 3170 zcma)9eN0=|6~8vm*l7%Y7($^q!4OECgt#mpTgpdD7APh_8@2Q!Ni)}g!4UH?+f;06 z=ekb2Mhr@FwN`DkEn8P9QJa=DEzKs>u{cq*8RBZ9KxtjWGkpU1 z;&4?=>bWWP+>&}?{b9$XB*0M{KWkkTd`WgtiGbr1c^aoBsXu&DrZ=jz;F<(GCi+I4F@0DyV;UYs7Iu3+CB84t52`bS zV?uN-CeR(=(Y#{)G;*oix{BxK->d%+awsD4NAr&^%O}2NC1ZR#FIyZl4YU0eUvvfq z(3S92`Br}4YLott1a&LtuGodx>H2Qr8(!Fu!^jf<{^D{nf%hWzM#pi6z+_|na*_RA2!~FQVjrvlE zp-7ltS$8A3RtNfJesR4`pA9h-aq*e;+w|9vWnKOXzIDT6`ez}BA{Y444fgFvrf4nf zmm~?v{-QJ-GxmpHm$@2+TPt&K%G_3kOP9G*Q+#nlu6B5e=N4t@DWkgV48FbSH+mc7 zP^6oGUbHXkx|Xq}45Nm|=vgqj1-^HqPhSQx6gk8{*|;fdd!ixLdIqadS7PQX?RNgw zcOEeGx;omL-A^-~z3G+UAXPpa9W`W*&m^fA{XO)L(Z52!JRwPUfBygV@4`0tE%x8W zkc^Mf|JV={OQdlJNqmJkv^dyq8&PwgHYMxLl0k{Z(kp^-ISy+7EPKJ zwhEE8oE6!?)q&B0@qy^T*uQ6RZWvg^q*+-#W_X2;MyyPz^ zzdTBA6YM@1gcI;~;I9+#PT6IFKT;TE*cu;FpXd z3n4S|LO=tr)s42%FJMiCR z{R44>Z6HXZQ<);B7uZfbp_vVga{(!6L0Dsm|y{+5V)){DVcJ_2Mx_zv*o3%9u-aj^LR~VgM&4B-7X(Zw4~%y zHHG}1T~>boE^A41fcf3NHka24M}Fq*ay26~n)V4fm=wQ&&fayEAa) zbP<2M*06~-5+$2{Blzf5TfAP3<$*vQtBrOEwWrX@E7>s-b6MlxwFs)$$+L=j$@@N8+d4RhRx> D&xcos diff --git a/isr.c b/isr.c new file mode 100644 index 0000000..7ec9781 --- /dev/null +++ b/isr.c @@ -0,0 +1,117 @@ +#include "system.h" +#include "stdio.h" +#include "idt.h" + +extern void isr0(); +extern void isr1(); +extern void isr2(); +extern void isr3(); +extern void isr4(); +extern void isr5(); +extern void isr6(); +extern void isr7(); +extern void isr8(); +extern void isr9(); +extern void isr10(); +extern void isr11(); +extern void isr12(); +extern void isr13(); +extern void isr14(); +extern void isr15(); +extern void isr16(); +extern void isr17(); +extern void isr18(); +extern void isr19(); +extern void isr20(); +extern void isr21(); +extern void isr22(); +extern void isr23(); +extern void isr24(); +extern void isr25(); +extern void isr26(); +extern void isr27(); +extern void isr28(); +extern void isr29(); +extern void isr30(); +extern void isr31(); + +void isr_install() +{ + + idt_set_gate(0, (unsigned)isr0, 0x08, 0x8E); + idt_set_gate(1, (unsigned)isr1, 0x08, 0x8E); + idt_set_gate(2, (unsigned)isr2, 0x08, 0x8E); + idt_set_gate(3, (unsigned)isr3, 0x08, 0x8E); + idt_set_gate(4, (unsigned)isr4, 0x08, 0x8E); + idt_set_gate(5, (unsigned)isr5, 0x08, 0x8E); + idt_set_gate(6, (unsigned)isr6, 0x08, 0x8E); + idt_set_gate(7, (unsigned)isr7, 0x08, 0x8E); + idt_set_gate(8, (unsigned)isr8, 0x08, 0x8E); + idt_set_gate(9, (unsigned)isr9, 0x08, 0x8E); + idt_set_gate(10, (unsigned)isr10, 0x08, 0x8E); + idt_set_gate(11, (unsigned)isr11, 0x08, 0x8E); + idt_set_gate(12, (unsigned)isr12, 0x08, 0x8E); + idt_set_gate(13, (unsigned)isr13, 0x08, 0x8E); + idt_set_gate(14, (unsigned)isr14, 0x08, 0x8E); + idt_set_gate(15, (unsigned)isr15, 0x08, 0x8E); + idt_set_gate(16, (unsigned)isr16, 0x08, 0x8E); + idt_set_gate(17, (unsigned)isr17, 0x08, 0x8E); + idt_set_gate(18, (unsigned)isr18, 0x08, 0x8E); + idt_set_gate(19, (unsigned)isr19, 0x08, 0x8E); + idt_set_gate(20, (unsigned)isr20, 0x08, 0x8E); + idt_set_gate(21, (unsigned)isr21, 0x08, 0x8E); + idt_set_gate(22, (unsigned)isr22, 0x08, 0x8E); + idt_set_gate(23, (unsigned)isr23, 0x08, 0x8E); + idt_set_gate(24, (unsigned)isr24, 0x08, 0x8E); + idt_set_gate(25, (unsigned)isr25, 0x08, 0x8E); + idt_set_gate(26, (unsigned)isr26, 0x08, 0x8E); + idt_set_gate(27, (unsigned)isr27, 0x08, 0x8E); + idt_set_gate(28, (unsigned)isr28, 0x08, 0x8E); + idt_set_gate(29, (unsigned)isr29, 0x08, 0x8E); + idt_set_gate(30, (unsigned)isr30, 0x08, 0x8E); + idt_set_gate(31, (unsigned)isr31, 0x08, 0x8E); +} + +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" +}; + +void fault_handler(struct regs *r) +{ + if (r->int_no < 32) + { + printf("%s Exception. Halting!\n", exception_messages[r->int_no]); + for (;;); + } +} diff --git a/kernel.elf b/kernel.elf index 37b93083e6094b2aa4cec9a8fbcee2f813abce40..7ee5345edfd6aac3b673981e44bba301b8b89265 100755 GIT binary patch literal 19892 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 delta 3170 zcma)9eN0=|6~8vm*l7%Y7($^q!4OECgt#mpTgpdD7APh_8@2Q!Ni)}g!4UH?+f;06 z=ekb2Mhr@FwN`DkEn8P9QJa=DEzKs>u{cq*8RBZ9KxtjWGkpU1 z;&4?=>bWWP+>&}?{b9$XB*0M{KWkkTd`WgtiGbr1c^aoBsXu&DrZ=jz;F<(GCi+I4F@0DyV;UYs7Iu3+CB84t52`bS zV?uN-CeR(=(Y#{)G;*oix{BxK->d%+awsD4NAr&^%O}2NC1ZR#FIyZl4YU0eUvvfq z(3S92`Br}4YLott1a&LtuGodx>H2Qr8(!Fu!^jf<{^D{nf%hWzM#pi6z+_|na*_RA2!~FQVjrvlE zp-7ltS$8A3RtNfJesR4`pA9h-aq*e;+w|9vWnKOXzIDT6`ez}BA{Y444fgFvrf4nf zmm~?v{-QJ-GxmpHm$@2+TPt&K%G_3kOP9G*Q+#nlu6B5e=N4t@DWkgV48FbSH+mc7 zP^6oGUbHXkx|Xq}45Nm|=vgqj1-^HqPhSQx6gk8{*|;fdd!ixLdIqadS7PQX?RNgw zcOEeGx;omL-A^-~z3G+UAXPpa9W`W*&m^fA{XO)L(Z52!JRwPUfBygV@4`0tE%x8W zkc^Mf|JV={OQdlJNqmJkv^dyq8&PwgHYMxLl0k{Z(kp^-ISy+7EPKJ zwhEE8oE6!?)q&B0@qy^T*uQ6RZWvg^q*+-#W_X2;MyyPz^ zzdTBA6YM@1gcI;~;I9+#PT6IFKT;TE*cu;FpXd z3n4S|LO=tr)s42%FJMiCR z{R44>Z6HXZQ<);B7uZfbp_vVga{(!6L0Dsm|y{+5V)){DVcJ_2Mx_zv*o3%9u-aj^LR~VgM&4B-7X(Zw4~%y zHHG}1T~>boE^A41fcf3NHka24M}Fq*ay26~n)V4fm=wQ&&fayEAa) zbP<2M*06~-5+$2{Blzf5TfAP3<$*vQtBrOEwWrX@E7>s-b6MlxwFs)$$+L=j$@@N8+d4RhRx> D&xcos diff --git a/kmain.c b/kmain.c index a9712ba..37cc297 100644 --- a/kmain.c +++ b/kmain.c @@ -2,12 +2,14 @@ #include "serial.h" #include "gdt.h" #include "idt.h" +#include "system.h" int kmain(int retvalue) { gdt_install(); idt_install(); + isr_install(); // serial testing @@ -16,11 +18,15 @@ int kmain(int retvalue) log("serial connection established", 3); log("initialized GDT entries", 2); log("kernel started", 2); + log("initialized IDT", 2); + log("initialized ISRs", 3); clear(); // printf testing + // TODO: Framebuffer upgrade: color output + int age = 34; int problems = 124; char* name = "xamidev"; @@ -35,6 +41,10 @@ int kmain(int retvalue) printf("such hex %x %X\n", 0xcafe, 0xdeadbeef); printf("such pointer %p\n", (void*)0xcafe1234); + + // Div by zero exception + printf("Lalala, what a beautiful day! %d", 4/0); + return retvalue; } diff --git a/link.ld b/link.ld index 29147a9..bc9c8dd 100644 --- a/link.ld +++ b/link.ld @@ -5,6 +5,10 @@ SECTIONS { . = 0x00100000; + .__mbHeader : { + *(.__mbHeader) + } + /* Align relevant sections at 4KB */ .text ALIGN (0x1000) : diff --git a/loader.s b/loader.s index 25aa675..1286130 100644 --- a/loader.s +++ b/loader.s @@ -1,12 +1,15 @@ global loader +section .__mbHeader + +align 0x4 +section .text: + MAGIC_NUMBER equ 0x1BADB002 ; multiboot magic FLAGS equ 0x0 CHECKSUM equ -MAGIC_NUMBER KERNEL_STACK_SIZE equ 4096 -section .text: -align 4 dd MAGIC_NUMBER dd FLAGS dd CHECKSUM @@ -45,6 +48,252 @@ idt_load: lidt [idtp] ret +global isr0 +global isr1 +global isr2 +global isr3 +global isr4 +global isr5 +global isr6 +global isr7 +global isr8 +global isr9 +global isr10 +global isr11 +global isr12 +global isr13 +global isr14 +global isr15 +global isr16 +global isr17 +global isr18 +global isr19 +global isr20 +global isr21 +global isr22 +global isr23 +global isr24 +global isr25 +global isr26 +global isr27 +global isr28 +global isr29 +global isr30 +global isr31 + +; Interrupt service routine exceptions +isr0: + cli + push byte 0 + push byte 0 + jmp isr_common_stub + +isr1: + cli + push byte 0 + push byte 1 + jmp isr_common_stub + +isr2: + cli + push byte 0 + push byte 2 + jmp isr_common_stub + +isr3: + cli + push byte 0 + push byte 3 + jmp isr_common_stub + +isr4: + cli + push byte 0 + push byte 4 + jmp isr_common_stub + +isr5: + cli + push byte 0 + push byte 5 + jmp isr_common_stub + +isr6: + cli + push byte 0 + push byte 6 + jmp isr_common_stub + +isr7: + cli + push byte 0 + push byte 7 + jmp isr_common_stub + +isr8: + cli + push byte 8 + jmp isr_common_stub + +isr9: + cli + push byte 0 + push byte 9 + jmp isr_common_stub + +isr10: + cli + push byte 10 + jmp isr_common_stub + +isr11: + cli + push byte 11 + jmp isr_common_stub + +isr12: + cli + push byte 12 + jmp isr_common_stub + +isr13: + cli + push byte 13 + jmp isr_common_stub + +isr14: + cli + push byte 14 + jmp isr_common_stub + +isr15: + cli + push byte 0 + push byte 15 + jmp isr_common_stub + +isr16: + cli + push byte 0 + push byte 16 + jmp isr_common_stub + +isr17: + cli + push byte 0 + push byte 17 + jmp isr_common_stub + +isr18: + cli + push byte 0 + push byte 18 + jmp isr_common_stub + +isr19: + cli + push byte 0 + push byte 19 + jmp isr_common_stub + +isr20: + cli + push byte 0 + push byte 20 + jmp isr_common_stub + +isr21: + cli + push byte 0 + push byte 21 + jmp isr_common_stub + +isr22: + cli + push byte 0 + push byte 22 + jmp isr_common_stub + +isr23: + cli + push byte 0 + push byte 23 + jmp isr_common_stub + +isr24: + cli + push byte 0 + push byte 24 + jmp isr_common_stub + +isr25: + cli + push byte 0 + push byte 25 + jmp isr_common_stub + +isr26: + cli + push byte 0 + push byte 26 + jmp isr_common_stub + +isr27: + cli + push byte 0 + push byte 27 + jmp isr_common_stub + +isr28: + cli + push byte 0 + push byte 28 + jmp isr_common_stub + +isr29: + cli + push byte 0 + push byte 29 + jmp isr_common_stub + +isr30: + cli + push byte 0 + push byte 30 + jmp isr_common_stub + +isr31: + cli + push byte 0 + push byte 31 + jmp isr_common_stub + +extern fault_handler + +isr_common_stub: + pusha + push ds + push es + push fs + push gs + mov ax, 0x10 + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + mov eax, esp + push eax + mov eax, fault_handler + call eax + pop eax + pop gs + pop fs + pop es + pop ds + popa + add esp, 8 + iret + section .bss align 4 kernel_stack: diff --git a/makefile b/makefile index f663857..cfcec12 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -OBJECTS = loader.o kmain.o stdio.o io.o string.o serial.o gdt.o idt.o system.o +OBJECTS = loader.o kmain.o stdio.o io.o string.o serial.o gdt.o idt.o system.o isr.o CC = gcc CFLAGS = -m32 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -nostartfiles -nodefaultlibs -Wall -Wextra -c LDFLAGS = -T link.ld -melf_i386 diff --git a/os.iso b/os.iso index b19cf325f0773de7434a4114fc757d0b2d2540fc..83ed1fda1804c7800f6421bab67765a7d4f71ee7 100644 GIT binary patch delta 6567 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 F{}+#9`@8@E diff --git a/system.h b/system.h index 5a9118e..16f117a 100644 --- a/system.h +++ b/system.h @@ -5,4 +5,14 @@ typedef int size_t; void *memset(void *dest, char val, size_t count); +struct regs +{ + unsigned int gs, fs, es, ds; + unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; + unsigned int int_no, err_code; + unsigned int eip, cs, eflags, useresp, ss; +}; + +void isr_install(); + #endif