From ae5499137e377e08feb523c08b26495e79ed16df Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Fri, 2 Dec 2022 00:56:33 +0100 Subject: now also working on amd cpus --- kernel/include/io.h | 1 + kernel/include/keyboard.h | 2 ++ kernel/src/cpu/io.c | 5 +++++ kernel/src/cpu/tss.c | 5 +++-- kernel/src/devices/keyboard.c | 11 +++++++++++ kernel/src/main.c | 2 ++ kernel/src/sys/userspace_asm.S | 2 +- 7 files changed, 25 insertions(+), 3 deletions(-) (limited to 'kernel') diff --git a/kernel/include/io.h b/kernel/include/io.h index d47abb3..8e5ac0f 100644 --- a/kernel/include/io.h +++ b/kernel/include/io.h @@ -5,5 +5,6 @@ uint8_t inb(uint32_t port); void outb(uint32_t port, uint8_t value); +void io_wait(void); #endif diff --git a/kernel/include/keyboard.h b/kernel/include/keyboard.h index e8dc774..8b4085a 100644 --- a/kernel/include/keyboard.h +++ b/kernel/include/keyboard.h @@ -4,8 +4,10 @@ #include #define KEYBOARD_DATA_PORT 0x60 +#define KEYBOARD_CMD_PORT 0x60 #define KEYBOARD_STATUS_PORT 0x64 void keyboard_handler(void); +void init_keyboard(void); #endif diff --git a/kernel/src/cpu/io.c b/kernel/src/cpu/io.c index 1a68f08..a5adfd6 100644 --- a/kernel/src/cpu/io.c +++ b/kernel/src/cpu/io.c @@ -12,3 +12,8 @@ void outb(uint32_t port, uint8_t value) { __asm__ volatile ("outb %%al, %%dx;" : : "d"(port), "a"(value)); } + +void io_wait(void) +{ + outb(0x80, 0); +} diff --git a/kernel/src/cpu/tss.c b/kernel/src/cpu/tss.c index 0dfa18e..d2c16d3 100644 --- a/kernel/src/cpu/tss.c +++ b/kernel/src/cpu/tss.c @@ -12,9 +12,10 @@ void load_tss() void init_tss() { + memset(&tss, 0, sizeof(tss_type)); tss.iopb = sizeof(tss_type); - uint64_t stack = (uint64_t)kalloc(4096*4); - stack = (uint64_t)kalloc(4096*4) + 8; + uint32_t stack_size = 4096*4; + uint64_t stack = (uint64_t)kalloc(stack_size) + stack_size - 8; tss.rsp0_low = (uint32_t)stack; tss.rsp0_high = (uint32_t)(stack >> 32); diff --git a/kernel/src/devices/keyboard.c b/kernel/src/devices/keyboard.c index 0a2e364..73c052c 100644 --- a/kernel/src/devices/keyboard.c +++ b/kernel/src/devices/keyboard.c @@ -15,6 +15,17 @@ bool is_pressed[128]; #define BUFFER_SIZE 10000 stdbuff* keyboard_buffer; +void init_keyboard() +{ +// outb(KEYBOARD_CMD_PORT, 0xF3); +// io_wait(); +// outb(KEYBOARD_DATA_PORT, 0x00); +// io_wait(); +// while (!(inb(KEYBOARD_STATUS_PORT) & 1)) {} +// if (inb(KEYBOARD_DATA_PORT) == 0xFA) +// printf("[keyboard init]\n"); +} + void keyboard_handler() { if (keyboard_buffer == NULL) { diff --git a/kernel/src/main.c b/kernel/src/main.c index ae2e0ee..b568f8f 100644 --- a/kernel/src/main.c +++ b/kernel/src/main.c @@ -26,7 +26,9 @@ int kernel_main(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic) init_paging(); init_heap(); read_mb2(multiboot_bootinfo, multiboot_magic); + clear_screen(main_fb); // framebuffer is enabled from this point + init_keyboard(); init_timer(TICKS_PER_SECOND); init_idt(); disc_init(); diff --git a/kernel/src/sys/userspace_asm.S b/kernel/src/sys/userspace_asm.S index 02181bd..4431a84 100644 --- a/kernel/src/sys/userspace_asm.S +++ b/kernel/src/sys/userspace_asm.S @@ -23,7 +23,7 @@ jump_userspace: wrmsr mov $0xc0000081, %rcx rdmsr - mov $0x00100008, %edx + mov $0x00130008, %edx wrmsr movabs $begin_userspace, %rcx -- cgit v1.2.3