diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a14d0a1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + ".fantomasignore": "ignore", + "stddef.h": "c" + } +} \ No newline at end of file diff --git a/kernel/debug.c b/kernel/debug.c index e69de29..b703001 100644 --- a/kernel/debug.c +++ b/kernel/debug.c @@ -0,0 +1,5 @@ +#include "debug.h" + +void debug_print(const char *str) { + // Implementation for printing debug messages +} diff --git a/kernel/debug.h b/kernel/debug.h index e69de29..63473f4 100644 --- a/kernel/debug.h +++ b/kernel/debug.h @@ -0,0 +1,6 @@ +#ifndef DEBUG_H +#define DEBUG_H + +void debug_print(const char *str); + +#endif // DEBUG_H diff --git a/kernel/fs.c b/kernel/fs.c index e69de29..2496839 100644 --- a/kernel/fs.c +++ b/kernel/fs.c @@ -0,0 +1,5 @@ +#include "fs.h" + +void fs_init() { + // Filesystem initialization code +} diff --git a/kernel/fs.h b/kernel/fs.h index e69de29..7eb878c 100644 --- a/kernel/fs.h +++ b/kernel/fs.h @@ -0,0 +1,6 @@ +#ifndef FS_H +#define FS_H + +void fs_init(); + +#endif // FS_H diff --git a/kernel/heap.c b/kernel/heap.c index e69de29..9a2fdfe 100644 --- a/kernel/heap.c +++ b/kernel/heap.c @@ -0,0 +1,6 @@ +#include "heap.h" + +void *heap_alloc(size_t size) { + // Heap allocation code + return NULL; +} diff --git a/kernel/heap.h b/kernel/heap.h index e69de29..6100172 100644 --- a/kernel/heap.h +++ b/kernel/heap.h @@ -0,0 +1,8 @@ +#ifndef HEAP_H +#define HEAP_H + +#include + +void *heap_alloc(size_t size); + +#endif // HEAP_H diff --git a/kernel/irq.c b/kernel/irq.c index e69de29..37e6af1 100644 --- a/kernel/irq.c +++ b/kernel/irq.c @@ -0,0 +1,5 @@ +#include "irq.h" + +void irq_init() { + // IRQ initialization code +} diff --git a/kernel/irq.h b/kernel/irq.h index e69de29..4dddcd5 100644 --- a/kernel/irq.h +++ b/kernel/irq.h @@ -0,0 +1,6 @@ +#ifndef IRQ_H +#define IRQ_H + +void irq_init(); + +#endif // IRQ_H diff --git a/kernel/isr.asm b/kernel/isr.asm index 2137e7b..deba3e0 100644 --- a/kernel/isr.asm +++ b/kernel/isr.asm @@ -4,6 +4,8 @@ [GLOBAL isr20, isr21, isr22, isr23, isr24, isr25, isr26, isr27, isr28, isr29] [GLOBAL isr30, isr31, isr_default] +[EXTERN isr_handler] + %macro ISR_NOERR 1 isr%1: cli diff --git a/kernel/keyboard.c b/kernel/keyboard.c index e1c6cd9..187dc77 100644 --- a/kernel/keyboard.c +++ b/kernel/keyboard.c @@ -14,7 +14,7 @@ static const char scancode_map[128] = { '9', '0', '-', '=', '\b', '\t', 'q', 'w', 'e', 'r', // 0x0A - 0x13 't', 'y', 'z', 'u', 'i', 'o', 'p', '[', ']', '\n', // 0x14 - 0x1D 0, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', // 0x1E - 0x27 - ';', '\'', '`', 0, '\\', 'y', 'x', 'c', 'v', 'b', // 0x28 - 0x31 + ';', '\'', '`', 0, '\\', 'x', 'c', 'v', 'b', // 0x28 - 0x31 'n', 'm', ',', '.', '/', 0, '*', 0, ' ', 0, // 0x32 - 0x3B // rest can be filled as needed }; diff --git a/kernel/kmain.c b/kernel/kmain.c index 7a40550..4e8517b 100644 --- a/kernel/kmain.c +++ b/kernel/kmain.c @@ -6,6 +6,7 @@ #include "idt.h" #include "paging.h" #include "memmap.h" +#include "gdt.h" #define LPT1 0x378 @@ -23,6 +24,10 @@ void kmain(void) { lpt_write('L'); // Send 'L' to LPT1 to test + terminal_write("Initializing GDT...\n"); + gdt_init(); + serial_write("GDT initialized.\n"); + terminal_write("Initializing IDT...\n"); idt_init(); serial_write("IDT initialized.\n"); diff --git a/kernel/linker.ld b/kernel/linker.ld new file mode 100644 index 0000000..6484f20 --- /dev/null +++ b/kernel/linker.ld @@ -0,0 +1,31 @@ +ENTRY(_start) + +SECTIONS { + . = 1M; + + .multiboot : { + *(.multiboot) + } + + .text : { + *(.text) + } + + .rodata : { + *(.rodata) + } + + .data : { + *(.data) + } + + .bss : { + *(.bss) + *(COMMON) + } + + . = ALIGN(4096); + __stack_top = .; + . += 128K; + __stack_bottom = .; +} diff --git a/kernel/paging.c b/kernel/paging.c index cbf329c..17509ee 100644 --- a/kernel/paging.c +++ b/kernel/paging.c @@ -1,5 +1,7 @@ #include "paging.h" #include "io.h" +#include +#include page_directory_entry_t *page_directory = (page_directory_entry_t *)0x100000; page_table_entry_t *page_table = (page_table_entry_t *)0x101000; diff --git a/kernel/paging.h b/kernel/paging.h index 3c8a377..01e73aa 100644 --- a/kernel/paging.h +++ b/kernel/paging.h @@ -39,6 +39,7 @@ typedef struct { extern page_directory_entry_t *page_directory; extern page_table_entry_t *page_table; +extern page_table_entry_t *heap_page_table; void paging_init(void); void set_page_directory(page_directory_entry_t *dir); diff --git a/kernel/panic.c b/kernel/panic.c new file mode 100644 index 0000000..ad28b18 --- /dev/null +++ b/kernel/panic.c @@ -0,0 +1,5 @@ +#include "panic.h" + +void panic(const char *message) { + // Panic handling code +} diff --git a/kernel/panic.h b/kernel/panic.h new file mode 100644 index 0000000..d7e1696 --- /dev/null +++ b/kernel/panic.h @@ -0,0 +1,6 @@ +#ifndef PANIC_H +#define PANIC_H + +void panic(const char *message); + +#endif // PANIC_H diff --git a/kernel/scheduler.c b/kernel/scheduler.c new file mode 100644 index 0000000..334f98e --- /dev/null +++ b/kernel/scheduler.c @@ -0,0 +1,5 @@ +#include "scheduler.h" + +void scheduler_init() { + // Scheduler initialization code +} diff --git a/kernel/scheduler.h b/kernel/scheduler.h new file mode 100644 index 0000000..34753c7 --- /dev/null +++ b/kernel/scheduler.h @@ -0,0 +1,6 @@ +#ifndef SCHEDULER_H +#define SCHEDULER_H + +void scheduler_init(); + +#endif // SCHEDULER_H diff --git a/kernel/syscalls.c b/kernel/syscalls.c index e69de29..20ed1de 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -0,0 +1,5 @@ +#include "syscalls.h" + +void syscall_handler() { + // Syscall handling code +} diff --git a/kernel/syscalls.h b/kernel/syscalls.h index e69de29..fc63d06 100644 --- a/kernel/syscalls.h +++ b/kernel/syscalls.h @@ -0,0 +1,6 @@ +#ifndef SYSCALLS_H +#define SYSCALLS_H + +void syscall_handler(); + +#endif // SYSCALLS_H diff --git a/kernel/terminal.h b/kernel/terminal.h index ce28bc3..5ea3b42 100644 --- a/kernel/terminal.h +++ b/kernel/terminal.h @@ -8,5 +8,6 @@ void terminal_putchar(char c); void terminal_write(const char *str); void terminal_setcolor(uint8_t color); void terminal_clear(void); +void update_cursor(void); #endif diff --git a/kernel/threading.c b/kernel/threading.c index e69de29..6b8517a 100644 --- a/kernel/threading.c +++ b/kernel/threading.c @@ -0,0 +1,5 @@ +#include "threading.h" + +void threading_init() { + // Threading initialization code +} diff --git a/kernel/threading.h b/kernel/threading.h index e69de29..c9497c8 100644 --- a/kernel/threading.h +++ b/kernel/threading.h @@ -0,0 +1,6 @@ +#ifndef THREADING_H +#define THREADING_H + +void threading_init(); + +#endif // THREADING_H diff --git a/kernel/utils.c b/kernel/utils.c new file mode 100644 index 0000000..adcc060 --- /dev/null +++ b/kernel/utils.c @@ -0,0 +1,5 @@ +#include "utils.h" + +void util_function() { + // Utility function code +} diff --git a/kernel/utils.h b/kernel/utils.h new file mode 100644 index 0000000..f2f9aaa --- /dev/null +++ b/kernel/utils.h @@ -0,0 +1,6 @@ +#ifndef UTILS_H +#define UTILS_H + +void util_function(); + +#endif // UTILS_H