/************************ *** Team Kitty, 2019 *** *** Sync *** ***********************/ /* * 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 #include 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..."); 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; }