diff options
Diffstat (limited to 'kernel/src/main.c')
-rw-r--r-- | kernel/src/main.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/kernel/src/main.c b/kernel/src/main.c new file mode 100644 index 0000000..2a04c24 --- /dev/null +++ b/kernel/src/main.c @@ -0,0 +1,68 @@ +#include "acpi/acpi.h" +#include "boot/tag.h" +#include "cpu/cpu.h" +#include "drivers/ps2ctrl.h" +#include "drivers/ps2kb.h" +#include "drivers/ps2mouse.h" +#include "interrupt/idt.h" +#include "interrupt/pic.h" +#include "tty/cursor.h" +#include "tty/term.h" + +#include <print.h> +#include <math.h> +#include <stdlib.h> +#include <sys.h> + +static double x = 0, y = 0; + +void kernel_main(void* boot_info) { + + term_init(); + cursor_enable(); + + idt_init(); + pic_remap(PIC_REMAP_OFFSET); + + load_boot_info(boot_info); + acpi_init(); + + memory_init(); + + ps2ctrl_init(); + ps2kb_init(); + ps2mouse_init(); + + init_registers(); + + while(1) { + int_wait(); + + struct Keycode code = ps2kb_get(); + if(code.key != KEY_NONE) { + if(code.flags & KC_FLAG_ERROR) { + printk("error: %X\n", code.key); + } else if(code.flags & KC_FLAG_KEY_DOWN) { + printk("pressed: %X\n", code.key); + } else { + printk("released: %X\n", code.key); + } + } + + if (code.key == KEY_ESCAPE) { + acpi_poweroff(); + } + + struct MouseEvent event = ps2mouse_get(); + if (event.updated) { + putchar(event.lmb ? 'L' : '_'); + putchar(event.rmb ? 'R' : '_'); + putchar(event.mmb ? 'M' : '_'); + x += event.relx / 10.0; + y -= event.rely / 10.0; + x = fclamp(x, 0, TERM_W); + y = fclamp(y, 0, TERM_H); + printk(" x%d y%d\n", (int)x, (int)y); + } + } +} |