]>
git.dujemihanovic.xyz Git - nameless-os.git/blob - kernel/kernel.c
9257a0e9cdedc7a251d84912414f5591c9c87976
4 #include <irq/i8259a.h>
9 struct interrupt_frame
;
11 extern void double_fault(struct abort_frame
*frame
);
12 extern void keyb_handler(struct interrupt_frame
*frame
);
13 extern void pf_handler(struct fault_frame
*frame
);
14 static struct idt_descriptor idt
[256] __attribute__((aligned(0x10)));
15 static struct idtr idtr
__attribute__((aligned(0x10)));
24 void print_e820(struct e820_map
*mmap
, int mmap_size
)
26 kprint(" Base | Length | Type | Attrib |\n", 0);
27 kprint("------------------------------------------------------------\n", 0);
28 for (int i
=0; i
<mmap_size
; i
++) {
29 kprintq(mmap
[i
].base
);
31 kprintq(mmap
[i
].length
);
33 kprintd(mmap
[i
].type
);
35 kprintd(mmap
[i
].attrib
);
41 void kmain(struct e820_map
*mmap
, int mmap_size
)
44 kprint("Welcome to Nameless OS!\nRunning revision: ", 0);
45 kprint(GIT_COMMIT
, 0);
47 kprint("BIOS memory map:\n", 0);
48 print_e820(mmap
, mmap_size
);
49 kprint("Preparing IDT...\n", 0);
50 idt_set_descriptor(idt
, 8, 0x8, (uint32_t) double_fault
, IDT_INTERRUPT_GATE
, 0x0);
51 idt_set_descriptor(idt
, 14, 0x8, (uint32_t) pf_handler
, IDT_INTERRUPT_GATE
, 0x0);
52 idt_set_descriptor(idt
, 33, 0x8, (uint32_t) keyb_handler
, IDT_INTERRUPT_GATE
, 0x0);
53 kprint("IDT prepared, loading...\n", 0);
54 populate_idtr(&idtr
, idt
);
56 kprint("IDT loaded, enabling interrupts...\n", 0);
61 kprint("All done\n", 0);