diff options
author | aqua <aqua@iserlohn-fortress.net> | 2022-12-10 20:56:57 +0200 |
---|---|---|
committer | aqua <aqua@iserlohn-fortress.net> | 2022-12-11 11:32:51 +0200 |
commit | 9b2a78fa52249ab481493550490aa5f37872dcf6 (patch) | |
tree | 127031268b9b42b0fbdae3d87684d9c045983677 /src/kernel.cpp | |
parent | Rename CCFLAGS to CFLAGS (diff) | |
download | kernel-9b2a78fa52249ab481493550490aa5f37872dcf6.tar.xz |
Rewrite drivers/uart and drivers/vga in cpp
Diffstat (limited to 'src/kernel.cpp')
-rw-r--r-- | src/kernel.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/kernel.cpp b/src/kernel.cpp new file mode 100644 index 0000000..751bcb0 --- /dev/null +++ b/src/kernel.cpp @@ -0,0 +1,59 @@ +//===================================================================== +// glitch kernel +// spdx-license-identifier: ISC +// description: kernel entry point +//===================================================================== + +extern "C" { +#include "conf.h" +#include "mem.h" +#include <devices/keyboard.h> +#include <devices/mouse.h> +#include <devices/pic.h> +#include <devices/ps2_controller.h> +#include <stdio.h> +#include <sys/cpuid.h> +} +#include <devices/uart.hpp> +#include <devices/vga.hpp> + +FILE *stdin; +FILE *stdout; +FILE *stderr; + +extern "C" void +kmain() +{ + stderr = uart_init<COM1>(); + vmm_map(0xb8000, 0xc03ff000); + stdout = vga_init((void *)0xc03ff000); + + printf("glitch [version " VERSION "] [" CC "]\n"); + fprintf(stderr, "glitch [version " VERSION "] [" CC "]\n"); + { + char vendor[13] = {'\0'}; + unsigned int eax; + __get_cpuid(0, &eax, (unsigned int *)vendor, (unsigned int *)(vendor + 8), (unsigned int *)(vendor + 4)); + struct CPUVersion v; + __get_cpuid(1, (unsigned int *)&v, &eax, &eax, &eax); + printf("CPU: %s family %u model %u stepping %u\n", vendor, family(v), model(v), v.stepping); + fprintf(stderr, "CPU: %s family %u model %u stepping %u\n", vendor, family(v), model(v), v.stepping); + } + + pic_init(); + + ps2_ctrl_init(); + ps2_keyboard_init(); + mouse_init(); + + pic_enable(); + fprintf(stderr, "interrupts enabled\n"); + + /* + alloc4M(); + char *c = (char *)0xc0700000; + if (*c == 0) printf("c is 0\r\n"); + */ + + while (1) {} +} |