From 8a2cb7168fbf709e205c4c4b0edd1671ce3a1074 Mon Sep 17 00:00:00 2001 From: Tyler McGurrin Date: Thu, 19 Dec 2024 10:14:32 -0500 Subject: [PATCH] should be a working build, uhh i add uhm ISR? sorta, not done dont care --- build_scripts/config.mk | 3 + build_scripts/genISR.sh | 50 +++ src/kernel/Makefile | 40 ++- src/kernel/arch/i686/gen_isr.c | 520 +++++++++++++++++++++++++++++++ src/kernel/arch/i686/gen_isr.inc | 257 +++++++++++++++ src/kernel/arch/i686/idt.asm | 11 +- src/kernel/arch/i686/isr.asm | 58 ++++ src/kernel/arch/i686/isr.c | 22 ++ src/kernel/arch/i686/isr.h | 21 ++ src/kernel/hal/hal.c | 8 + src/kernel/main.c | 9 +- 11 files changed, 986 insertions(+), 13 deletions(-) create mode 100755 build_scripts/genISR.sh create mode 100644 src/kernel/arch/i686/gen_isr.c create mode 100644 src/kernel/arch/i686/gen_isr.inc create mode 100644 src/kernel/arch/i686/isr.asm create mode 100644 src/kernel/arch/i686/isr.c create mode 100644 src/kernel/arch/i686/isr.h diff --git a/build_scripts/config.mk b/build_scripts/config.mk index 30934b9..fc24c17 100644 --- a/build_scripts/config.mk +++ b/build_scripts/config.mk @@ -18,6 +18,9 @@ export TARGET_LINKFLAGS = export TARGET_LIBS = export BUILD_DIR = $(abspath build) +export SOURCE_DIR = $(abspath .) + +# i hate making make files... BINUTILS_VERSION = 2.43.1 BINUTILS_URL = https://ftp.gnu.org/gnu/binutils/binutils-$(BINUTILS_VERSION).tar.gz diff --git a/build_scripts/genISR.sh b/build_scripts/genISR.sh new file mode 100755 index 0000000..9959582 --- /dev/null +++ b/build_scripts/genISR.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# exit on err +set -e + +if [ $# -le 1 ]; then + echo "Usage: genISR.sh " + exit 1 +fi + +# varibles +ISRS_GEN_C=$1 +ISRS_GEN_ASM=$2 + +ISRS_WITH_ERROR_CODE="8 10 11 12 13 14 17 21 29 30" + +# Gen C File +# Later(TM), scratch that... NOW +echo "// THIS FILE IS AUTOGENERATED VIA genISR.sh, because im pacient but not THAT pacient good lord its 500 lines of pure hell also like i have no braincells left..." > $ISRS_GEN_C +echo "#include \"idt.h\"" >> $ISRS_GEN_C +echo "#include \"gdt.h\"" >> $ISRS_GEN_C +echo "" >> $ISRS_GEN_C + +for i in $(seq 0 255); do + echo "void __attribute((cdecl)) i686_ISR${i}();" >> $ISRS_GEN_C +done + +echo "" >> $ISRS_GEN_C +echo "void i686_ISR_InitializeGates()" >> $ISRS_GEN_C +echo "{" >> $ISRS_GEN_C + +for i in $(seq 0 255); do + echo " i686_IDT_SetGate(${i}, i686_ISR${i}, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT);" >> $ISRS_GEN_C +done + + +echo "}" >> $ISRS_GEN_C +# die die die die die die die die die go my braincells + +# Generate ASM +echo "; THIS FILE IS AUTOGENERATED VIA genISR.sh i could've done this once myself but shell script is my fren" > $ISRS_GEN_ASM + +for i in $(seq 0 255); do + if echo "$ISRS_WITH_ERROR_CODE" | grep -q "\b${i}\b"; then + echo "ISR_ERRORCODE ${i}" >> $ISRS_GEN_ASM + else + echo "ISR_NOERRORCODE ${i}" >> $ISRS_GEN_ASM + fi +echo "I Have No Braincells^10, its 4:30 in the morning... anyways your files were made..." +done \ No newline at end of file diff --git a/src/kernel/Makefile b/src/kernel/Makefile index bdbc6f0..a290964 100644 --- a/src/kernel/Makefile +++ b/src/kernel/Makefile @@ -3,10 +3,34 @@ TARGET_CFLAGS += -ffreestanding -nostdlib -I. TARGET_LIBS += -lgcc TARGET_LINKFLAGS += -T linker.ld -nostdlib -SOURCES_C=$(shell find . -type f -name "*.c") -SOURCES_ASM=$(shell find . -type f -name "*.asm") -OBJECTS_C=$(patsubst %.c, $(BUILD_DIR)/kernel/c/%.obj, $(SOURCES_C)) -OBJECTS_ASM=$(patsubst %.asm, $(BUILD_DIR)/kernel/asm/%.obj, $(SOURCES_ASM)) +HEADERS_C = $(wildcard *.h) \ + $(wildcard */*.h) \ + $(wildcard */*/*.h) \ + $(wildcard */*/*/*.h) + +SOURCES_C = $(wildcard *.c) \ + $(wildcard */*.c) \ + $(wildcard */*/*.c) \ + $(wildcard */*/*/*.c) \ + arch/i686/gen_isr.c + +OBJECTS_C = $(patsubst %.c, $(BUILD_DIR)/kernel/c/%.obj, $(SOURCES_C)) + +HEADERS_ASM = $(wildcard *.inc) \ + $(wildcard */*.inc) \ + $(wildcard */*/*.inc) \ + $(wildcard */*/*/*.inc) \ + arch/i686/gen_isr.inc + +SOURCES_ASM = $(wildcard *.asm) \ + $(wildcard */*.asm) \ + $(wildcard */*/*.asm) \ + $(wildcard */*/*/*.asm) + + +OBJECTS_ASM = $(patsubst %.asm, $(BUILD_DIR)/kernel/asm/%.obj, $(SOURCES_ASM)) + +# i love rejanking this cuz yes (its 4am fuck off) .PHONY: all kernel clean always @@ -18,15 +42,19 @@ $(BUILD_DIR)/kernel.bin: $(OBJECTS_ASM) $(OBJECTS_C) @$(TARGET_LD) $(TARGET_LINKFLAGS) -Wl,-Map=$(BUILD_DIR)/kernel.map -o $@ $^ $(TARGET_LIBS) @echo "--> Created: kernel.bin" -$(BUILD_DIR)/kernel/c/%.obj: %.c +$(BUILD_DIR)/kernel/c/%.obj: %.c $(HEADERS_C) @mkdir -p $(@D) @$(TARGET_CC) $(TARGET_CFLAGS) -c -o $@ $< @echo "--> Compiled: " $< -$(BUILD_DIR)/kernel/asm/%.obj: %.asm +$(BUILD_DIR)/kernel/asm/%.obj: %.asm $(HEADERS_ASM) @mkdir -p $(@D) @$(TARGET_ASM) $(TARGET_ASMFLAGS) -o $@ $< @echo "--> Compiled: " $< +arch/i686/gen_isr.c arch/i686/gen_isr.inc: + @$(SOURCE_DIR)/build_tools/generate_isrs.sh $@ + @echo "--> Compiled: ISR Gen Files" + clean: rm -f $(BUILD_DIR)/kernel.bin \ No newline at end of file diff --git a/src/kernel/arch/i686/gen_isr.c b/src/kernel/arch/i686/gen_isr.c new file mode 100644 index 0000000..e7d8f0e --- /dev/null +++ b/src/kernel/arch/i686/gen_isr.c @@ -0,0 +1,520 @@ +// THIS FILE IS AUTOGENERATED VIA genISR.sh, because im pacient but not THAT pacient good lord its 500 lines of pure hell also like i have no braincells left... +#include "idt.h" +#include "gdt.h" + +void __attribute((cdecl)) i686_ISR0(); +void __attribute((cdecl)) i686_ISR1(); +void __attribute((cdecl)) i686_ISR2(); +void __attribute((cdecl)) i686_ISR3(); +void __attribute((cdecl)) i686_ISR4(); +void __attribute((cdecl)) i686_ISR5(); +void __attribute((cdecl)) i686_ISR6(); +void __attribute((cdecl)) i686_ISR7(); +void __attribute((cdecl)) i686_ISR8(); +void __attribute((cdecl)) i686_ISR9(); +void __attribute((cdecl)) i686_ISR10(); +void __attribute((cdecl)) i686_ISR11(); +void __attribute((cdecl)) i686_ISR12(); +void __attribute((cdecl)) i686_ISR13(); +void __attribute((cdecl)) i686_ISR14(); +void __attribute((cdecl)) i686_ISR15(); +void __attribute((cdecl)) i686_ISR16(); +void __attribute((cdecl)) i686_ISR17(); +void __attribute((cdecl)) i686_ISR18(); +void __attribute((cdecl)) i686_ISR19(); +void __attribute((cdecl)) i686_ISR20(); +void __attribute((cdecl)) i686_ISR21(); +void __attribute((cdecl)) i686_ISR22(); +void __attribute((cdecl)) i686_ISR23(); +void __attribute((cdecl)) i686_ISR24(); +void __attribute((cdecl)) i686_ISR25(); +void __attribute((cdecl)) i686_ISR26(); +void __attribute((cdecl)) i686_ISR27(); +void __attribute((cdecl)) i686_ISR28(); +void __attribute((cdecl)) i686_ISR29(); +void __attribute((cdecl)) i686_ISR30(); +void __attribute((cdecl)) i686_ISR31(); +void __attribute((cdecl)) i686_ISR32(); +void __attribute((cdecl)) i686_ISR33(); +void __attribute((cdecl)) i686_ISR34(); +void __attribute((cdecl)) i686_ISR35(); +void __attribute((cdecl)) i686_ISR36(); +void __attribute((cdecl)) i686_ISR37(); +void __attribute((cdecl)) i686_ISR38(); +void __attribute((cdecl)) i686_ISR39(); +void __attribute((cdecl)) i686_ISR40(); +void __attribute((cdecl)) i686_ISR41(); +void __attribute((cdecl)) i686_ISR42(); +void __attribute((cdecl)) i686_ISR43(); +void __attribute((cdecl)) i686_ISR44(); +void __attribute((cdecl)) i686_ISR45(); +void __attribute((cdecl)) i686_ISR46(); +void __attribute((cdecl)) i686_ISR47(); +void __attribute((cdecl)) i686_ISR48(); +void __attribute((cdecl)) i686_ISR49(); +void __attribute((cdecl)) i686_ISR50(); +void __attribute((cdecl)) i686_ISR51(); +void __attribute((cdecl)) i686_ISR52(); +void __attribute((cdecl)) i686_ISR53(); +void __attribute((cdecl)) i686_ISR54(); +void __attribute((cdecl)) i686_ISR55(); +void __attribute((cdecl)) i686_ISR56(); +void __attribute((cdecl)) i686_ISR57(); +void __attribute((cdecl)) i686_ISR58(); +void __attribute((cdecl)) i686_ISR59(); +void __attribute((cdecl)) i686_ISR60(); +void __attribute((cdecl)) i686_ISR61(); +void __attribute((cdecl)) i686_ISR62(); +void __attribute((cdecl)) i686_ISR63(); +void __attribute((cdecl)) i686_ISR64(); +void __attribute((cdecl)) i686_ISR65(); +void __attribute((cdecl)) i686_ISR66(); +void __attribute((cdecl)) i686_ISR67(); +void __attribute((cdecl)) i686_ISR68(); +void __attribute((cdecl)) i686_ISR69(); +void __attribute((cdecl)) i686_ISR70(); +void __attribute((cdecl)) i686_ISR71(); +void __attribute((cdecl)) i686_ISR72(); +void __attribute((cdecl)) i686_ISR73(); +void __attribute((cdecl)) i686_ISR74(); +void __attribute((cdecl)) i686_ISR75(); +void __attribute((cdecl)) i686_ISR76(); +void __attribute((cdecl)) i686_ISR77(); +void __attribute((cdecl)) i686_ISR78(); +void __attribute((cdecl)) i686_ISR79(); +void __attribute((cdecl)) i686_ISR80(); +void __attribute((cdecl)) i686_ISR81(); +void __attribute((cdecl)) i686_ISR82(); +void __attribute((cdecl)) i686_ISR83(); +void __attribute((cdecl)) i686_ISR84(); +void __attribute((cdecl)) i686_ISR85(); +void __attribute((cdecl)) i686_ISR86(); +void __attribute((cdecl)) i686_ISR87(); +void __attribute((cdecl)) i686_ISR88(); +void __attribute((cdecl)) i686_ISR89(); +void __attribute((cdecl)) i686_ISR90(); +void __attribute((cdecl)) i686_ISR91(); +void __attribute((cdecl)) i686_ISR92(); +void __attribute((cdecl)) i686_ISR93(); +void __attribute((cdecl)) i686_ISR94(); +void __attribute((cdecl)) i686_ISR95(); +void __attribute((cdecl)) i686_ISR96(); +void __attribute((cdecl)) i686_ISR97(); +void __attribute((cdecl)) i686_ISR98(); +void __attribute((cdecl)) i686_ISR99(); +void __attribute((cdecl)) i686_ISR100(); +void __attribute((cdecl)) i686_ISR101(); +void __attribute((cdecl)) i686_ISR102(); +void __attribute((cdecl)) i686_ISR103(); +void __attribute((cdecl)) i686_ISR104(); +void __attribute((cdecl)) i686_ISR105(); +void __attribute((cdecl)) i686_ISR106(); +void __attribute((cdecl)) i686_ISR107(); +void __attribute((cdecl)) i686_ISR108(); +void __attribute((cdecl)) i686_ISR109(); +void __attribute((cdecl)) i686_ISR110(); +void __attribute((cdecl)) i686_ISR111(); +void __attribute((cdecl)) i686_ISR112(); +void __attribute((cdecl)) i686_ISR113(); +void __attribute((cdecl)) i686_ISR114(); +void __attribute((cdecl)) i686_ISR115(); +void __attribute((cdecl)) i686_ISR116(); +void __attribute((cdecl)) i686_ISR117(); +void __attribute((cdecl)) i686_ISR118(); +void __attribute((cdecl)) i686_ISR119(); +void __attribute((cdecl)) i686_ISR120(); +void __attribute((cdecl)) i686_ISR121(); +void __attribute((cdecl)) i686_ISR122(); +void __attribute((cdecl)) i686_ISR123(); +void __attribute((cdecl)) i686_ISR124(); +void __attribute((cdecl)) i686_ISR125(); +void __attribute((cdecl)) i686_ISR126(); +void __attribute((cdecl)) i686_ISR127(); +void __attribute((cdecl)) i686_ISR128(); +void __attribute((cdecl)) i686_ISR129(); +void __attribute((cdecl)) i686_ISR130(); +void __attribute((cdecl)) i686_ISR131(); +void __attribute((cdecl)) i686_ISR132(); +void __attribute((cdecl)) i686_ISR133(); +void __attribute((cdecl)) i686_ISR134(); +void __attribute((cdecl)) i686_ISR135(); +void __attribute((cdecl)) i686_ISR136(); +void __attribute((cdecl)) i686_ISR137(); +void __attribute((cdecl)) i686_ISR138(); +void __attribute((cdecl)) i686_ISR139(); +void __attribute((cdecl)) i686_ISR140(); +void __attribute((cdecl)) i686_ISR141(); +void __attribute((cdecl)) i686_ISR142(); +void __attribute((cdecl)) i686_ISR143(); +void __attribute((cdecl)) i686_ISR144(); +void __attribute((cdecl)) i686_ISR145(); +void __attribute((cdecl)) i686_ISR146(); +void __attribute((cdecl)) i686_ISR147(); +void __attribute((cdecl)) i686_ISR148(); +void __attribute((cdecl)) i686_ISR149(); +void __attribute((cdecl)) i686_ISR150(); +void __attribute((cdecl)) i686_ISR151(); +void __attribute((cdecl)) i686_ISR152(); +void __attribute((cdecl)) i686_ISR153(); +void __attribute((cdecl)) i686_ISR154(); +void __attribute((cdecl)) i686_ISR155(); +void __attribute((cdecl)) i686_ISR156(); +void __attribute((cdecl)) i686_ISR157(); +void __attribute((cdecl)) i686_ISR158(); +void __attribute((cdecl)) i686_ISR159(); +void __attribute((cdecl)) i686_ISR160(); +void __attribute((cdecl)) i686_ISR161(); +void __attribute((cdecl)) i686_ISR162(); +void __attribute((cdecl)) i686_ISR163(); +void __attribute((cdecl)) i686_ISR164(); +void __attribute((cdecl)) i686_ISR165(); +void __attribute((cdecl)) i686_ISR166(); +void __attribute((cdecl)) i686_ISR167(); +void __attribute((cdecl)) i686_ISR168(); +void __attribute((cdecl)) i686_ISR169(); +void __attribute((cdecl)) i686_ISR170(); +void __attribute((cdecl)) i686_ISR171(); +void __attribute((cdecl)) i686_ISR172(); +void __attribute((cdecl)) i686_ISR173(); +void __attribute((cdecl)) i686_ISR174(); +void __attribute((cdecl)) i686_ISR175(); +void __attribute((cdecl)) i686_ISR176(); +void __attribute((cdecl)) i686_ISR177(); +void __attribute((cdecl)) i686_ISR178(); +void __attribute((cdecl)) i686_ISR179(); +void __attribute((cdecl)) i686_ISR180(); +void __attribute((cdecl)) i686_ISR181(); +void __attribute((cdecl)) i686_ISR182(); +void __attribute((cdecl)) i686_ISR183(); +void __attribute((cdecl)) i686_ISR184(); +void __attribute((cdecl)) i686_ISR185(); +void __attribute((cdecl)) i686_ISR186(); +void __attribute((cdecl)) i686_ISR187(); +void __attribute((cdecl)) i686_ISR188(); +void __attribute((cdecl)) i686_ISR189(); +void __attribute((cdecl)) i686_ISR190(); +void __attribute((cdecl)) i686_ISR191(); +void __attribute((cdecl)) i686_ISR192(); +void __attribute((cdecl)) i686_ISR193(); +void __attribute((cdecl)) i686_ISR194(); +void __attribute((cdecl)) i686_ISR195(); +void __attribute((cdecl)) i686_ISR196(); +void __attribute((cdecl)) i686_ISR197(); +void __attribute((cdecl)) i686_ISR198(); +void __attribute((cdecl)) i686_ISR199(); +void __attribute((cdecl)) i686_ISR200(); +void __attribute((cdecl)) i686_ISR201(); +void __attribute((cdecl)) i686_ISR202(); +void __attribute((cdecl)) i686_ISR203(); +void __attribute((cdecl)) i686_ISR204(); +void __attribute((cdecl)) i686_ISR205(); +void __attribute((cdecl)) i686_ISR206(); +void __attribute((cdecl)) i686_ISR207(); +void __attribute((cdecl)) i686_ISR208(); +void __attribute((cdecl)) i686_ISR209(); +void __attribute((cdecl)) i686_ISR210(); +void __attribute((cdecl)) i686_ISR211(); +void __attribute((cdecl)) i686_ISR212(); +void __attribute((cdecl)) i686_ISR213(); +void __attribute((cdecl)) i686_ISR214(); +void __attribute((cdecl)) i686_ISR215(); +void __attribute((cdecl)) i686_ISR216(); +void __attribute((cdecl)) i686_ISR217(); +void __attribute((cdecl)) i686_ISR218(); +void __attribute((cdecl)) i686_ISR219(); +void __attribute((cdecl)) i686_ISR220(); +void __attribute((cdecl)) i686_ISR221(); +void __attribute((cdecl)) i686_ISR222(); +void __attribute((cdecl)) i686_ISR223(); +void __attribute((cdecl)) i686_ISR224(); +void __attribute((cdecl)) i686_ISR225(); +void __attribute((cdecl)) i686_ISR226(); +void __attribute((cdecl)) i686_ISR227(); +void __attribute((cdecl)) i686_ISR228(); +void __attribute((cdecl)) i686_ISR229(); +void __attribute((cdecl)) i686_ISR230(); +void __attribute((cdecl)) i686_ISR231(); +void __attribute((cdecl)) i686_ISR232(); +void __attribute((cdecl)) i686_ISR233(); +void __attribute((cdecl)) i686_ISR234(); +void __attribute((cdecl)) i686_ISR235(); +void __attribute((cdecl)) i686_ISR236(); +void __attribute((cdecl)) i686_ISR237(); +void __attribute((cdecl)) i686_ISR238(); +void __attribute((cdecl)) i686_ISR239(); +void __attribute((cdecl)) i686_ISR240(); +void __attribute((cdecl)) i686_ISR241(); +void __attribute((cdecl)) i686_ISR242(); +void __attribute((cdecl)) i686_ISR243(); +void __attribute((cdecl)) i686_ISR244(); +void __attribute((cdecl)) i686_ISR245(); +void __attribute((cdecl)) i686_ISR246(); +void __attribute((cdecl)) i686_ISR247(); +void __attribute((cdecl)) i686_ISR248(); +void __attribute((cdecl)) i686_ISR249(); +void __attribute((cdecl)) i686_ISR250(); +void __attribute((cdecl)) i686_ISR251(); +void __attribute((cdecl)) i686_ISR252(); +void __attribute((cdecl)) i686_ISR253(); +void __attribute((cdecl)) i686_ISR254(); +void __attribute((cdecl)) i686_ISR255(); + +void i686_ISR_InitializeGates() +{ + i686_IDT_SetGate(0, i686_ISR0, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(1, i686_ISR1, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(2, i686_ISR2, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(3, i686_ISR3, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(4, i686_ISR4, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(5, i686_ISR5, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(6, i686_ISR6, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(7, i686_ISR7, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(8, i686_ISR8, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(9, i686_ISR9, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(10, i686_ISR10, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(11, i686_ISR11, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(12, i686_ISR12, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(13, i686_ISR13, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(14, i686_ISR14, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(15, i686_ISR15, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(16, i686_ISR16, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(17, i686_ISR17, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(18, i686_ISR18, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(19, i686_ISR19, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(20, i686_ISR20, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(21, i686_ISR21, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(22, i686_ISR22, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(23, i686_ISR23, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(24, i686_ISR24, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(25, i686_ISR25, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(26, i686_ISR26, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(27, i686_ISR27, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(28, i686_ISR28, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(29, i686_ISR29, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(30, i686_ISR30, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(31, i686_ISR31, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(32, i686_ISR32, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(33, i686_ISR33, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(34, i686_ISR34, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(35, i686_ISR35, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(36, i686_ISR36, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(37, i686_ISR37, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(38, i686_ISR38, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(39, i686_ISR39, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(40, i686_ISR40, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(41, i686_ISR41, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(42, i686_ISR42, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(43, i686_ISR43, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(44, i686_ISR44, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(45, i686_ISR45, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(46, i686_ISR46, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(47, i686_ISR47, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(48, i686_ISR48, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(49, i686_ISR49, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(50, i686_ISR50, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(51, i686_ISR51, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(52, i686_ISR52, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(53, i686_ISR53, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(54, i686_ISR54, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(55, i686_ISR55, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(56, i686_ISR56, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(57, i686_ISR57, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(58, i686_ISR58, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(59, i686_ISR59, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(60, i686_ISR60, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(61, i686_ISR61, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(62, i686_ISR62, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(63, i686_ISR63, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(64, i686_ISR64, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(65, i686_ISR65, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(66, i686_ISR66, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(67, i686_ISR67, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(68, i686_ISR68, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(69, i686_ISR69, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(70, i686_ISR70, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(71, i686_ISR71, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(72, i686_ISR72, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(73, i686_ISR73, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(74, i686_ISR74, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(75, i686_ISR75, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(76, i686_ISR76, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(77, i686_ISR77, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(78, i686_ISR78, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(79, i686_ISR79, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(80, i686_ISR80, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(81, i686_ISR81, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(82, i686_ISR82, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(83, i686_ISR83, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(84, i686_ISR84, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(85, i686_ISR85, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(86, i686_ISR86, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(87, i686_ISR87, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(88, i686_ISR88, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(89, i686_ISR89, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(90, i686_ISR90, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(91, i686_ISR91, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(92, i686_ISR92, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(93, i686_ISR93, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(94, i686_ISR94, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(95, i686_ISR95, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(96, i686_ISR96, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(97, i686_ISR97, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(98, i686_ISR98, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(99, i686_ISR99, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(100, i686_ISR100, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(101, i686_ISR101, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(102, i686_ISR102, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(103, i686_ISR103, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(104, i686_ISR104, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(105, i686_ISR105, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(106, i686_ISR106, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(107, i686_ISR107, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(108, i686_ISR108, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(109, i686_ISR109, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(110, i686_ISR110, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(111, i686_ISR111, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(112, i686_ISR112, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(113, i686_ISR113, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(114, i686_ISR114, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(115, i686_ISR115, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(116, i686_ISR116, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(117, i686_ISR117, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(118, i686_ISR118, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(119, i686_ISR119, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(120, i686_ISR120, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(121, i686_ISR121, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(122, i686_ISR122, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(123, i686_ISR123, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(124, i686_ISR124, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(125, i686_ISR125, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(126, i686_ISR126, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(127, i686_ISR127, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(128, i686_ISR128, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(129, i686_ISR129, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(130, i686_ISR130, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(131, i686_ISR131, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(132, i686_ISR132, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(133, i686_ISR133, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(134, i686_ISR134, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(135, i686_ISR135, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(136, i686_ISR136, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(137, i686_ISR137, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(138, i686_ISR138, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(139, i686_ISR139, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(140, i686_ISR140, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(141, i686_ISR141, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(142, i686_ISR142, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(143, i686_ISR143, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(144, i686_ISR144, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(145, i686_ISR145, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(146, i686_ISR146, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(147, i686_ISR147, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(148, i686_ISR148, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(149, i686_ISR149, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(150, i686_ISR150, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(151, i686_ISR151, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(152, i686_ISR152, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(153, i686_ISR153, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(154, i686_ISR154, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(155, i686_ISR155, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(156, i686_ISR156, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(157, i686_ISR157, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(158, i686_ISR158, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(159, i686_ISR159, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(160, i686_ISR160, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(161, i686_ISR161, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(162, i686_ISR162, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(163, i686_ISR163, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(164, i686_ISR164, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(165, i686_ISR165, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(166, i686_ISR166, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(167, i686_ISR167, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(168, i686_ISR168, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(169, i686_ISR169, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(170, i686_ISR170, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(171, i686_ISR171, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(172, i686_ISR172, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(173, i686_ISR173, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(174, i686_ISR174, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(175, i686_ISR175, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(176, i686_ISR176, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(177, i686_ISR177, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(178, i686_ISR178, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(179, i686_ISR179, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(180, i686_ISR180, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(181, i686_ISR181, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(182, i686_ISR182, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(183, i686_ISR183, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(184, i686_ISR184, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(185, i686_ISR185, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(186, i686_ISR186, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(187, i686_ISR187, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(188, i686_ISR188, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(189, i686_ISR189, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(190, i686_ISR190, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(191, i686_ISR191, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(192, i686_ISR192, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(193, i686_ISR193, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(194, i686_ISR194, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(195, i686_ISR195, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(196, i686_ISR196, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(197, i686_ISR197, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(198, i686_ISR198, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(199, i686_ISR199, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(200, i686_ISR200, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(201, i686_ISR201, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(202, i686_ISR202, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(203, i686_ISR203, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(204, i686_ISR204, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(205, i686_ISR205, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(206, i686_ISR206, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(207, i686_ISR207, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(208, i686_ISR208, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(209, i686_ISR209, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(210, i686_ISR210, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(211, i686_ISR211, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(212, i686_ISR212, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(213, i686_ISR213, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(214, i686_ISR214, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(215, i686_ISR215, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(216, i686_ISR216, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(217, i686_ISR217, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(218, i686_ISR218, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(219, i686_ISR219, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(220, i686_ISR220, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(221, i686_ISR221, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(222, i686_ISR222, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(223, i686_ISR223, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(224, i686_ISR224, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(225, i686_ISR225, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(226, i686_ISR226, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(227, i686_ISR227, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(228, i686_ISR228, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(229, i686_ISR229, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(230, i686_ISR230, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(231, i686_ISR231, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(232, i686_ISR232, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(233, i686_ISR233, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(234, i686_ISR234, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(235, i686_ISR235, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(236, i686_ISR236, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(237, i686_ISR237, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(238, i686_ISR238, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(239, i686_ISR239, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(240, i686_ISR240, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(241, i686_ISR241, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(242, i686_ISR242, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(243, i686_ISR243, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(244, i686_ISR244, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(245, i686_ISR245, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(246, i686_ISR246, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(247, i686_ISR247, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(248, i686_ISR248, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(249, i686_ISR249, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(250, i686_ISR250, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(251, i686_ISR251, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(252, i686_ISR252, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(253, i686_ISR253, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(254, i686_ISR254, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); + i686_IDT_SetGate(255, i686_ISR255, i686_GDT_CODE_SEGMENT, IDT_FLAG_RING0 | IDT_FLAG_GATE_32BIT_INT); +} diff --git a/src/kernel/arch/i686/gen_isr.inc b/src/kernel/arch/i686/gen_isr.inc new file mode 100644 index 0000000..e50d732 --- /dev/null +++ b/src/kernel/arch/i686/gen_isr.inc @@ -0,0 +1,257 @@ +; THIS FILE IS AUTOGENERATED VIA genISR.sh i could've done this once myself but shell script is my fren +ISR_NOERRORCODE 0 +ISR_NOERRORCODE 1 +ISR_NOERRORCODE 2 +ISR_NOERRORCODE 3 +ISR_NOERRORCODE 4 +ISR_NOERRORCODE 5 +ISR_NOERRORCODE 6 +ISR_NOERRORCODE 7 +ISR_ERRORCODE 8 +ISR_NOERRORCODE 9 +ISR_ERRORCODE 10 +ISR_ERRORCODE 11 +ISR_ERRORCODE 12 +ISR_ERRORCODE 13 +ISR_ERRORCODE 14 +ISR_NOERRORCODE 15 +ISR_NOERRORCODE 16 +ISR_ERRORCODE 17 +ISR_NOERRORCODE 18 +ISR_NOERRORCODE 19 +ISR_NOERRORCODE 20 +ISR_ERRORCODE 21 +ISR_NOERRORCODE 22 +ISR_NOERRORCODE 23 +ISR_NOERRORCODE 24 +ISR_NOERRORCODE 25 +ISR_NOERRORCODE 26 +ISR_NOERRORCODE 27 +ISR_NOERRORCODE 28 +ISR_ERRORCODE 29 +ISR_ERRORCODE 30 +ISR_NOERRORCODE 31 +ISR_NOERRORCODE 32 +ISR_NOERRORCODE 33 +ISR_NOERRORCODE 34 +ISR_NOERRORCODE 35 +ISR_NOERRORCODE 36 +ISR_NOERRORCODE 37 +ISR_NOERRORCODE 38 +ISR_NOERRORCODE 39 +ISR_NOERRORCODE 40 +ISR_NOERRORCODE 41 +ISR_NOERRORCODE 42 +ISR_NOERRORCODE 43 +ISR_NOERRORCODE 44 +ISR_NOERRORCODE 45 +ISR_NOERRORCODE 46 +ISR_NOERRORCODE 47 +ISR_NOERRORCODE 48 +ISR_NOERRORCODE 49 +ISR_NOERRORCODE 50 +ISR_NOERRORCODE 51 +ISR_NOERRORCODE 52 +ISR_NOERRORCODE 53 +ISR_NOERRORCODE 54 +ISR_NOERRORCODE 55 +ISR_NOERRORCODE 56 +ISR_NOERRORCODE 57 +ISR_NOERRORCODE 58 +ISR_NOERRORCODE 59 +ISR_NOERRORCODE 60 +ISR_NOERRORCODE 61 +ISR_NOERRORCODE 62 +ISR_NOERRORCODE 63 +ISR_NOERRORCODE 64 +ISR_NOERRORCODE 65 +ISR_NOERRORCODE 66 +ISR_NOERRORCODE 67 +ISR_NOERRORCODE 68 +ISR_NOERRORCODE 69 +ISR_NOERRORCODE 70 +ISR_NOERRORCODE 71 +ISR_NOERRORCODE 72 +ISR_NOERRORCODE 73 +ISR_NOERRORCODE 74 +ISR_NOERRORCODE 75 +ISR_NOERRORCODE 76 +ISR_NOERRORCODE 77 +ISR_NOERRORCODE 78 +ISR_NOERRORCODE 79 +ISR_NOERRORCODE 80 +ISR_NOERRORCODE 81 +ISR_NOERRORCODE 82 +ISR_NOERRORCODE 83 +ISR_NOERRORCODE 84 +ISR_NOERRORCODE 85 +ISR_NOERRORCODE 86 +ISR_NOERRORCODE 87 +ISR_NOERRORCODE 88 +ISR_NOERRORCODE 89 +ISR_NOERRORCODE 90 +ISR_NOERRORCODE 91 +ISR_NOERRORCODE 92 +ISR_NOERRORCODE 93 +ISR_NOERRORCODE 94 +ISR_NOERRORCODE 95 +ISR_NOERRORCODE 96 +ISR_NOERRORCODE 97 +ISR_NOERRORCODE 98 +ISR_NOERRORCODE 99 +ISR_NOERRORCODE 100 +ISR_NOERRORCODE 101 +ISR_NOERRORCODE 102 +ISR_NOERRORCODE 103 +ISR_NOERRORCODE 104 +ISR_NOERRORCODE 105 +ISR_NOERRORCODE 106 +ISR_NOERRORCODE 107 +ISR_NOERRORCODE 108 +ISR_NOERRORCODE 109 +ISR_NOERRORCODE 110 +ISR_NOERRORCODE 111 +ISR_NOERRORCODE 112 +ISR_NOERRORCODE 113 +ISR_NOERRORCODE 114 +ISR_NOERRORCODE 115 +ISR_NOERRORCODE 116 +ISR_NOERRORCODE 117 +ISR_NOERRORCODE 118 +ISR_NOERRORCODE 119 +ISR_NOERRORCODE 120 +ISR_NOERRORCODE 121 +ISR_NOERRORCODE 122 +ISR_NOERRORCODE 123 +ISR_NOERRORCODE 124 +ISR_NOERRORCODE 125 +ISR_NOERRORCODE 126 +ISR_NOERRORCODE 127 +ISR_NOERRORCODE 128 +ISR_NOERRORCODE 129 +ISR_NOERRORCODE 130 +ISR_NOERRORCODE 131 +ISR_NOERRORCODE 132 +ISR_NOERRORCODE 133 +ISR_NOERRORCODE 134 +ISR_NOERRORCODE 135 +ISR_NOERRORCODE 136 +ISR_NOERRORCODE 137 +ISR_NOERRORCODE 138 +ISR_NOERRORCODE 139 +ISR_NOERRORCODE 140 +ISR_NOERRORCODE 141 +ISR_NOERRORCODE 142 +ISR_NOERRORCODE 143 +ISR_NOERRORCODE 144 +ISR_NOERRORCODE 145 +ISR_NOERRORCODE 146 +ISR_NOERRORCODE 147 +ISR_NOERRORCODE 148 +ISR_NOERRORCODE 149 +ISR_NOERRORCODE 150 +ISR_NOERRORCODE 151 +ISR_NOERRORCODE 152 +ISR_NOERRORCODE 153 +ISR_NOERRORCODE 154 +ISR_NOERRORCODE 155 +ISR_NOERRORCODE 156 +ISR_NOERRORCODE 157 +ISR_NOERRORCODE 158 +ISR_NOERRORCODE 159 +ISR_NOERRORCODE 160 +ISR_NOERRORCODE 161 +ISR_NOERRORCODE 162 +ISR_NOERRORCODE 163 +ISR_NOERRORCODE 164 +ISR_NOERRORCODE 165 +ISR_NOERRORCODE 166 +ISR_NOERRORCODE 167 +ISR_NOERRORCODE 168 +ISR_NOERRORCODE 169 +ISR_NOERRORCODE 170 +ISR_NOERRORCODE 171 +ISR_NOERRORCODE 172 +ISR_NOERRORCODE 173 +ISR_NOERRORCODE 174 +ISR_NOERRORCODE 175 +ISR_NOERRORCODE 176 +ISR_NOERRORCODE 177 +ISR_NOERRORCODE 178 +ISR_NOERRORCODE 179 +ISR_NOERRORCODE 180 +ISR_NOERRORCODE 181 +ISR_NOERRORCODE 182 +ISR_NOERRORCODE 183 +ISR_NOERRORCODE 184 +ISR_NOERRORCODE 185 +ISR_NOERRORCODE 186 +ISR_NOERRORCODE 187 +ISR_NOERRORCODE 188 +ISR_NOERRORCODE 189 +ISR_NOERRORCODE 190 +ISR_NOERRORCODE 191 +ISR_NOERRORCODE 192 +ISR_NOERRORCODE 193 +ISR_NOERRORCODE 194 +ISR_NOERRORCODE 195 +ISR_NOERRORCODE 196 +ISR_NOERRORCODE 197 +ISR_NOERRORCODE 198 +ISR_NOERRORCODE 199 +ISR_NOERRORCODE 200 +ISR_NOERRORCODE 201 +ISR_NOERRORCODE 202 +ISR_NOERRORCODE 203 +ISR_NOERRORCODE 204 +ISR_NOERRORCODE 205 +ISR_NOERRORCODE 206 +ISR_NOERRORCODE 207 +ISR_NOERRORCODE 208 +ISR_NOERRORCODE 209 +ISR_NOERRORCODE 210 +ISR_NOERRORCODE 211 +ISR_NOERRORCODE 212 +ISR_NOERRORCODE 213 +ISR_NOERRORCODE 214 +ISR_NOERRORCODE 215 +ISR_NOERRORCODE 216 +ISR_NOERRORCODE 217 +ISR_NOERRORCODE 218 +ISR_NOERRORCODE 219 +ISR_NOERRORCODE 220 +ISR_NOERRORCODE 221 +ISR_NOERRORCODE 222 +ISR_NOERRORCODE 223 +ISR_NOERRORCODE 224 +ISR_NOERRORCODE 225 +ISR_NOERRORCODE 226 +ISR_NOERRORCODE 227 +ISR_NOERRORCODE 228 +ISR_NOERRORCODE 229 +ISR_NOERRORCODE 230 +ISR_NOERRORCODE 231 +ISR_NOERRORCODE 232 +ISR_NOERRORCODE 233 +ISR_NOERRORCODE 234 +ISR_NOERRORCODE 235 +ISR_NOERRORCODE 236 +ISR_NOERRORCODE 237 +ISR_NOERRORCODE 238 +ISR_NOERRORCODE 239 +ISR_NOERRORCODE 240 +ISR_NOERRORCODE 241 +ISR_NOERRORCODE 242 +ISR_NOERRORCODE 243 +ISR_NOERRORCODE 244 +ISR_NOERRORCODE 245 +ISR_NOERRORCODE 246 +ISR_NOERRORCODE 247 +ISR_NOERRORCODE 248 +ISR_NOERRORCODE 249 +ISR_NOERRORCODE 250 +ISR_NOERRORCODE 251 +ISR_NOERRORCODE 252 +ISR_NOERRORCODE 253 +ISR_NOERRORCODE 254 +ISR_NOERRORCODE 255 diff --git a/src/kernel/arch/i686/idt.asm b/src/kernel/arch/i686/idt.asm index 81f945f..3e1dbdb 100644 --- a/src/kernel/arch/i686/idt.asm +++ b/src/kernel/arch/i686/idt.asm @@ -5,18 +5,17 @@ ;/////////////////////; [bits 32] -;void __attribute__((cdecl)) i686_IDT_Load(IDTDescriptor* idtDescriptor); +; void __attribute__((cdecl)) i686_IDT_Load(IDTDescriptor* idtDescriptor); global i686_IDT_Load i686_IDT_Load: + ; make new call frame push ebp ; save old call frame mov ebp, esp ; initialize new call frame - - ; load IDT + + ; load idt mov eax, [ebp + 8] - lgdt [eax] - - + lidt [eax] ; restore old call frame mov esp, ebp diff --git a/src/kernel/arch/i686/isr.asm b/src/kernel/arch/i686/isr.asm new file mode 100644 index 0000000..3fd1da6 --- /dev/null +++ b/src/kernel/arch/i686/isr.asm @@ -0,0 +1,58 @@ +;/////////////////////; +;Nanite OS ; +;COPYRIGHT (C) 2024 ; +;Tyler McGurrin ; +;/////////////////////; +[bits 32] + +extern i686_ISR_Handler + +; cpu pushes to the stack: ss, esp, eflags, cs, eip + +%macro ISR_NOERRORCODE 1 + +global i686_ISR%1: +i686_ISR%1: + push 0 ; push dummy error code + push %1 ; push interrupt number + jmp isr_common + +%endmacro + +%macro ISR_ERRORCODE 1 +global i686_ISR%1: +i686_ISR%1: + ; cpu pushes an error code to the stack + push %1 ; push interrupt number + jmp isr_common + +%endmacro + +%include "arch/i686/gen_isr.inc" + +isr_common: + pusha ; pushes in order: eax, ecx, edx, ebx, esp, ebp, esi, edi + + xor eax, eax ; push ds + mov ax, ds + push eax + + mov ax, 0x10 ; use kernel data segment + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + + push esp ; pass pointer to stack to C, so we can access all the pushed information + call i686_ISR_Handler + add esp, 4 + + pop eax ; restore old segment + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + + popa ; pop what we pushed with pusha + add esp, 8 ; remove error code and interrupt number + iret ; will pop: cs, eip, eflags, ss, esp \ No newline at end of file diff --git a/src/kernel/arch/i686/isr.c b/src/kernel/arch/i686/isr.c new file mode 100644 index 0000000..34859c2 --- /dev/null +++ b/src/kernel/arch/i686/isr.c @@ -0,0 +1,22 @@ +/*----------------*\ +|Nanite OS | +|Copyright (C) 2024| +|Tyler McGurrin | +\*----------------*/ +#include "isr.h" +#include "idt.h" +#include "gdt.h" +#include "io.h" +#include + +void i686_ISR_InitializeGates(); + +void i686_ISR_Initialize() { + i686_ISR_InitializeGates(); + for (int i = 0; i < 256; i++) + i686_IDT_EnableGate(i); +} + +void __attribute__((cdecl)) i686_ISR_Handler(Registers* regs) { + printf("Interrupt %d\n", regs->interrupt); +} \ No newline at end of file diff --git a/src/kernel/arch/i686/isr.h b/src/kernel/arch/i686/isr.h new file mode 100644 index 0000000..39cf850 --- /dev/null +++ b/src/kernel/arch/i686/isr.h @@ -0,0 +1,21 @@ +/*----------------*\ +|Nanite OS | +|Copyright (C) 2024| +|Tyler McGurrin | +\*----------------*/ +#pragma once +#include + + +typedef struct +{ + // in the reverse order they are pushed: + uint32_t ds; // data segment pushed by us + uint32_t edi, esi, ebp, useless, ebx, edx, ecx, eax; // pusha + uint32_t interrupt, error; // we push interrupt, error is pushed automatically (or our dummy) + uint32_t eip, cs, eflags, esp, ss; // pushed automatically by CPU +} __attribute__((packed)) Registers; + +typedef void (*ISRHandler)(Registers* regs); + +void i686_ISR_Initialize(); \ No newline at end of file diff --git a/src/kernel/hal/hal.c b/src/kernel/hal/hal.c index 4c26eed..6da7bfa 100644 --- a/src/kernel/hal/hal.c +++ b/src/kernel/hal/hal.c @@ -6,13 +6,21 @@ #include "hal.h" #include #include +#include #include void HAL_Initialize() { + // init GDT printf("> Initializing GDT..."); i686_GDT_Initialize(); printf("Done!\n"); + // init IDT printf("> Initializing IDT..."); i686_IDT_Initialize(); printf("Done!\n"); + // init ISR + printf("> Initializing ISR..."); + i686_ISR_Initialize(); + printf("Done!\n"); + } \ No newline at end of file diff --git a/src/kernel/main.c b/src/kernel/main.c index 977282b..737a771 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -25,7 +25,14 @@ extern uint8_t __end; int halx, haly = 0; HAL_Initialize(); movecursorpos(19, 8); - printf("Done!\n\n\n"); + printf("Done!\n\n\n\n"); + printf("Testing Interrupts...\n"); + __asm("int $0x2"); + printf("Testing Interrupts...\n"); + __asm("int $0x3"); + printf("Testing Interrupts...\n"); + __asm("int $0x4"); +