Add first C user program

This commit is contained in:
Freywar Ulvnaudgari
2026-06-11 20:35:48 +03:00
parent 00842ed785
commit ce47817244
55 changed files with 365 additions and 276 deletions
+40
View File
@@ -0,0 +1,40 @@
#include "src/kernel/idt.h"
struct idt_entry {
uint16_t offset_low;
uint16_t selector;
uint8_t ist;
uint8_t flags;
uint16_t offset_mid;
uint32_t offset_high;
uint32_t zero;
} __attribute__((packed));
struct idt_descriptor {
uint16_t size;
uint64_t offset;
} __attribute__((packed));
static struct idt_entry idt[256];
static struct idt_descriptor idt_desc;
static void idt_load() {
idt_desc.size = sizeof(idt) - 1;
idt_desc.offset = (uint64_t)&idt;
__asm__ volatile("lidt %0" : : "m"(idt_desc));
}
inline void idt_init() {
idt_load();
}
void idt_set_entry(int vector, void (*handler)(struct interrupt_frame *), uint8_t flags) {
uint64_t addr = (uint64_t)handler;
idt[vector].offset_low = addr & 0xFFFF;
idt[vector].selector = 0x0010;
idt[vector].ist = 0;
idt[vector].flags = flags;
idt[vector].offset_mid = (addr >> 16) & 0xFFFF;
idt[vector].offset_high = (addr >> 32) & 0xFFFFFFFF;
idt[vector].zero = 0;
}