diff --git a/src/kernel/bool.h b/src/kernel/bool.h new file mode 100644 index 0000000..98349dc --- /dev/null +++ b/src/kernel/bool.h @@ -0,0 +1,8 @@ +#ifndef BOOL_H +#define BOOL_H + +#define bool _Bool +#define true 1 +#define false 0 + +#endif diff --git a/src/kernel/idt.c b/src/kernel/idt.c new file mode 100644 index 0000000..9e78727 --- /dev/null +++ b/src/kernel/idt.c @@ -0,0 +1,32 @@ +#include "idt.h" +#include "stdint.h" + +struct idtEntry { + uint16_t offsetLow; + uint16_t selector; + uint8_t zero; + uint8_t typeAttr; + uint16_t offsetHigh; +} __attribute__((packed)); + +struct idtPointer { + uint16_t limit; + uint32_t base; +} __attribute__((packed)); + +struct idtEntry idt[256] = { 0 }; +struct idtPointer idtp; + +void idtSetGate(uint8_t i, uint32_t offset, uint16_t selector, uint8_t typeAttr) { + idt[i].offsetLow = (uint16_t)offset; + idt[i].selector = selector; + idt[i].zero = 0; + idt[i].typeAttr = typeAttr; + idt[i].offsetHigh = (uint16_t)(offset >> 16); +} + +void setupIdt() { + idtp.limit = sizeof(struct idtEntry) * 256; + idtp.base = (uint32_t)&idt; +} + diff --git a/src/kernel/idt.h b/src/kernel/idt.h new file mode 100644 index 0000000..89e7e97 --- /dev/null +++ b/src/kernel/idt.h @@ -0,0 +1,10 @@ +#ifndef IDT_H +#define IDT_H + +#include "stdint.h" + +void setupIdt(); +void idtSetGate(uint8_t i, uint32_t offset, uint16_t selector, uint8_t typeAttr); + +#endif + diff --git a/src/kernel/idt_c.swp b/src/kernel/idt_c.swp new file mode 100644 index 0000000..0059092 Binary files /dev/null and b/src/kernel/idt_c.swp differ diff --git a/src/kernel/idt_h.swp b/src/kernel/idt_h.swp new file mode 100644 index 0000000..d202a49 Binary files /dev/null and b/src/kernel/idt_h.swp differ diff --git a/src/kernel/main.c b/src/kernel/main.c index f23560e..4088bfe 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -1,6 +1,8 @@ #include "screen.h" +#include "idt.h" void main() { - print("Hello, World!", 0x0f); + setupIdt(); + print("kern.\n", 0x0f); } diff --git a/src/kernel/main_c.swp b/src/kernel/main_c.swp new file mode 100644 index 0000000..1d8d77e Binary files /dev/null and b/src/kernel/main_c.swp differ diff --git a/src/kernel/stdint.h b/src/kernel/stdint.h new file mode 100644 index 0000000..ae0b2a3 --- /dev/null +++ b/src/kernel/stdint.h @@ -0,0 +1,21 @@ +#ifndef STDINT_H +#define STDINT_H + +#define NULL ((void*)0) + +// Signed ints +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed int int32_t; +typedef signed long long int64_t; + +// Unsigned ints +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; + +// Other +typedef unsigned int size_t; + +#endif diff --git a/src/kernel/system.c b/src/kernel/system.c new file mode 100644 index 0000000..43c43e3 --- /dev/null +++ b/src/kernel/system.c @@ -0,0 +1,3 @@ +#include "system.h" + + diff --git a/src/kernel/system.h b/src/kernel/system.h new file mode 100644 index 0000000..1305e5b --- /dev/null +++ b/src/kernel/system.h @@ -0,0 +1,6 @@ +#ifndef SYSTEM_H +#define SYSTEM_H + + + +#endif diff --git a/src/kernel/system_c.swp b/src/kernel/system_c.swp new file mode 100644 index 0000000..aa7fc04 Binary files /dev/null and b/src/kernel/system_c.swp differ diff --git a/src/kernel/system_h.swp b/src/kernel/system_h.swp new file mode 100644 index 0000000..069fabd Binary files /dev/null and b/src/kernel/system_h.swp differ