diff --git a/src/kernel/entry.asm b/src/kernel/entry.asm index 737e646..46e2283 100644 --- a/src/kernel/entry.asm +++ b/src/kernel/entry.asm @@ -2,8 +2,14 @@ [global _start] [extern main] +[extern idtp] _start: call main cli hlt + +[global idtLoad] +idtLoad: + lidt [idtp] + ret diff --git a/src/kernel/idt.c b/src/kernel/idt.c index 9e78727..b1aa4d9 100644 --- a/src/kernel/idt.c +++ b/src/kernel/idt.c @@ -28,5 +28,7 @@ void idtSetGate(uint8_t i, uint32_t offset, uint16_t selector, uint8_t typeAttr) void setupIdt() { idtp.limit = sizeof(struct idtEntry) * 256; idtp.base = (uint32_t)&idt; + + idtLoad(); } diff --git a/src/kernel/idt.h b/src/kernel/idt.h index 89e7e97..bc394c6 100644 --- a/src/kernel/idt.h +++ b/src/kernel/idt.h @@ -5,6 +5,7 @@ void setupIdt(); void idtSetGate(uint8_t i, uint32_t offset, uint16_t selector, uint8_t typeAttr); +extern void idtLoad(); #endif diff --git a/src/kernel/main_c.swp b/src/kernel/main_c.swp new file mode 100644 index 0000000..745ad5a Binary files /dev/null and b/src/kernel/main_c.swp differ diff --git a/src/kernel/screen_c.swp b/src/kernel/screen_c.swp new file mode 100644 index 0000000..90291f2 Binary files /dev/null and b/src/kernel/screen_c.swp differ diff --git a/src/kernel/screen_h.swp b/src/kernel/screen_h.swp new file mode 100644 index 0000000..89946c7 Binary files /dev/null and b/src/kernel/screen_h.swp differ diff --git a/src/kernel/system.c b/src/kernel/system.c index 43c43e3..78e1f69 100644 --- a/src/kernel/system.c +++ b/src/kernel/system.c @@ -1,3 +1,27 @@ #include "system.h" +#include "stdint.h" +uint8_t inb(uint16_t port) { + uint8_t result; + asm volatile("in %1, %0" : "=a"(result) : "Nd"(port)); + return result; +} + +void outb(uint16_t port, uint8_t data) { + asm volatile("out %0, %1" :: "a"(data), "Nd"(port)); +} + +char* memcopy(char* src, char* dst, uint16_t length) { + for (int i = 0; i < length; i++) { + *(dst + i) = *(src + i); + } + return dst; +} + +char* memset(char* dst, char value, uint16_t length) { + for (int i = 0; i < length; i++) { + *(dst + i) = value; + } + return dst; +} diff --git a/src/kernel/system.h b/src/kernel/system.h index 1305e5b..c0311f8 100644 --- a/src/kernel/system.h +++ b/src/kernel/system.h @@ -1,6 +1,21 @@ #ifndef SYSTEM_H #define SYSTEM_H +#include "stdint.h" +// Port functions +uint8_t inb(uint16_t port); +void outb(uint16_t port, uint8_t data); + +// Memory functions +char* memcopy(char* src, char* dst, uint16_t length); +char* memset(char* dst, char data, uint16_t length); + +struct regs { + unsigned int gs, fs, es, ds; + unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; + unsigned int intNo, errCode; + unsigned int eip, cs, eflags, useresp, ss; +}; #endif