-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkernel.c
More file actions
61 lines (59 loc) · 1.69 KB
/
kernel.c
File metadata and controls
61 lines (59 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include "vga.h"
#include "gdt.h"
#include "isr.h"
#include "idt.h"
#include "kstd.h"
#include "paging.h"
#include "console.h"
extern uint8_t kernel_stack[];
// GDT flush expects this symbol; reserve a 16 KiB kernel stack.
uint8_t kernel_stack[16384] __attribute__((aligned(16)));
void kernel_main(uint32_t magic, void* mb_info){
if (magic != 0x2BADB002) {
terminal_writestring("Not booted with multiboot2!\n");
while (1);
}
uint64_t max[400000];
terminal_initialize();
femboysay("Welcome to eOS, Epstein OS\n");
femboysay("Will init GDT\n");
gdt_init();
femboysay("GDT initialized\n");
femboysay("Will init IDT\n");
idt_init();
isr_init();
femboysay("IDT initialized\n");
femboysay("Will remap PIC\n");
pic_remap();
femboysay("PIC remapped\n");
femboysay("Will unmask/mask\n");
outb(0x21, 0xFC); // unmask timer + keyboard
outb(0xA1, 0xFF); // mask all IRQs on slavep
femboysay("Done.\n");
femboysay("Will change PIT divisor\n");
uint16_t divisor = 1193;
outb(0x43,0x36);
outb(0x40,divisor & 0xFF);
outb(0x40,(divisor >> 8)&0xFF);
waitmode = 1;
femboysay("Accurate timing implemented\n");
femboysay("Will enable interrupts\n");
__asm__ volatile("sti");
wait(1);
femboysay("Interrupts enabled\n");
femboysay("Will init paging\n");
init_paging();
femboysay("Paging init\n");
volatile uint32_t *x = (uint32_t*)0x00300000;
*x = 0xDEADBEEF;
terminal_writestring("4KB identity mapping works\n");
kmalloc(400000);
changeout(handle_shell,0);
while (1)
{
__asm__ volatile("hlt");
}
}