Sync/kernel/kernel.c

89 lines
2.6 KiB
C
Raw Normal View History

/************************
*** Team Kitty, 2019 ***
*** Sync ***
***********************/
2019-04-03 21:46:58 +00:00
/*
* Sync main..
*
* Going off the back of Syncboot, the UEFI bootloader which currently only supports x86_64,
* this kernel is to be rewritten. The kernel is started in Long Mode, with interrupts enabled.
*
* Therefore, most of the checks are no longer needed, as they are performed by Syncboot for us.
* So, this becomes an exercise in time saving.
*
*
*/
//#include <stdio.h>
#include <kernel.h>
void gdb_end() {} /* GDB Debugging stump */
int kernel_main(void) {
/* The kernel is started in 64-bit Long Mode by Syncboot. */
/* Here, we start by drawing a splash, then loading a GDT and IDT into the placeholder UEFI gives us. */
/* Not sure how well serial would work in UEFI. */
// TODO: look at this.
//init_serial();
//serial_print(0x3F8, "[INFO] Serial ready.\r\n");
//serial_print(0x3F8, "[INFO] Beginning GDT subroutine.\r\n");
/* term_writes: writes a string to the terminal. */
//term_writes("GDT...");
/* Prepares the Global Descriptor Table, called from gdt.c */
gdt_install();
/* puts: writes a line to the terminal. */
//puts("GDT Ready.");
//serial_print(0x3F8, "[INFO] GDT subroutine complete.\r\n");
/* Prepare the Interrupt Descriptor Table. */
//serial_print(0x3F8, "[INFO] Beginning IDT subroutine.\r\n");
//term_writes("IDT...");
2019-04-07 18:25:27 +00:00
idt_install();
//puts("IDT Ready.");
//serial_print(0x3F8, "[INFO] IDT subroutine complete.\r\n[INFO] Enabling interrupts.\r\n");
gdb_end(); /* The first important step. Waypoint it for gdb debugging. */
//term_writes("Memory available:");
/* The first important thing: start the system clock immediately. */
//serial_print(0x3F8, "[INFO] Starting System Clock.\r\n");
//term_writes("Timer...");
timer_install();
//puts("Timer Ready.");
//serial_print(0x3F8, "[INFO] All subsystems ready. Printing message.\r\n");
/* Everything is ready; print a pretty message. */
//term_setcolor(RED);
//term_writes("\n(c)");
//term_setcolor(GREEN);
//term_writes(" Sync");
//term_setcolor(WHITE);
//term_writes(", 2019\n");
//serial_print(0x3F8, "[INFO] All operations complete. Checking for other tasks...\r\n");
/* Here are a series of tests for the ANSI escape code and CSI implementations. */
//term_writes("\x1b[BA"); /* Down a line, then A. */
/* A stub causing a Divide by Zero error. */
//serial_print(0x3F8, "[DEBUG] Attempting a Divide by Zero error.\r\n");
//char div = (5 / 0);
//serial_print(0x3F8, "[DEBUG] Survived the error!\r\n");
gdb_end(); /* Everything is done. The last debug routine. */
return 0;
2019-04-03 21:46:58 +00:00
}