summaryrefslogtreecommitdiff
path: root/src/kernel/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/kernel.c')
-rw-r--r--src/kernel/kernel.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
new file mode 100644
index 0000000..8db2e50
--- /dev/null
+++ b/src/kernel/kernel.c
@@ -0,0 +1,42 @@
+#include <stdbool.h>
+#include <serial.h>
+#include <printf.h>
+#include <paging.h>
+#include <video.h>
+#include <acpi.h>
+
+void panic() { // will fill with debugging info latter
+ printf("Kernel panic!\n");
+ for(;;);
+}
+
+
+void main() {
+ if(!(init_serial(COM1))) {
+ printf("\nKernal started on CPU 1!\n"); // will detect cpu later
+ }
+
+ rsdp_t *rsdp;
+ struct memory_table *table = (struct memory_table *)&_meminfo_loc;
+ struct vbe_infoblock *vbe_info = (struct vbe_infoblock *)0x500;
+ debug_print_memory();
+
+ rsdp = find_RSDP();
+ if(!(rsdp)) {
+ printf("Couldn't find the RSDP... uhh, not sure what to do now.\n");
+ panic();
+ }
+ dump_video();
+
+ if(rsdp->v1.version) {
+ map_page(0x200000, (rsdp->v2.xsdt_addr / 0x1000) * 0x1000, PAGE_SIZE_4K);
+ }
+ else {
+ map_page(0x200000, (rsdp->v1.rsdt_addr / 0x1000) * 0x1000, PAGE_SIZE_4K);
+ struct acpi_header *acpi = (struct acpi_header *)((uint64_t)0x200000 + (rsdp->v1.rsdt_addr % 0x1000));
+ }
+
+ printf("kernel is done, you can ignore this panic\n");
+ panic();
+
+}