void fault_handler(regs_t *r) { #ifdef PROFILE_DEBUG dbg_printf("\n\n!!! FAULT %i(%i) - %s !!!\n\n", r->int_no, r->err_code, exception_messages[r->int_no]); dbg_printf("--- CORE DUMP -----------------------------------------------------\n"); dbg_printf("eax: %p, ebx: %p, ecx: %p, edx: %p\n", r->eax, r->ebx, r->ecx, r->edx); dbg_printf("esp: %p, ebp: %p, esi: %p, edi: %p\n", r->esp, r->ebp, r->esi, r->edi); dbg_printf("cs: %p, ss: %p, ds: %p, es: %p\n", r->cs, r->ss, r->ds, r->es); dbg_printf("fs: %p, gs: %p, eip: %p, eflags: %b\n", r->fs, r->gs, r->eip, r->eflags); #endif kclear(); kprintf("\n\n!!! FAULT %i(%i) - %s !!!\n\n", r->int_no, r->err_code, exception_messages[r->int_no]); kprintf("--- CORE DUMP -----------------------------------------------------\n"); kprintf("eax: %p, ebx: %p, ecx: %p, edx: %p\n", r->eax, r->ebx, r->ecx, r->edx); kprintf("esp: %p, ebp: %p, esi: %p, edi: %p\n", r->esp, r->ebp, r->esi, r->edi); kprintf("cs: %p, ss: %p, ds: %p, es: %p\n", r->cs, r->ss, r->ds, r->es); kprintf("fs: %p, gs: %p, eip: %p, eflags: %b\n", r->fs, r->gs, r->eip, r->eflags); // The stubs do an iRet because i am sure i will have // some fault hanlders return back. I might even do a vector map // so that things like the PMEM code can assert there own fault_handler // for specific interrupts. halt(); }
// Kernel entry point void _main(struct multiboot *mboot_ptr, uint32_t initial_stack) { // Clear screen to get rid of boot messages. kclear(); // Initialise all the ISRs and segmentation. init_dt(); // Some print tests. kprintf("Boot successfull\n"); int num = 36; printf("Integer \"num\" = %i.\n", num); printf("Initial kernel stack is: %i\n", initial_stack); // Test the interrupts. printf("Testing interrupts\n"); test_interrupts(); // Initialize interrupts. printf("Initializing Interrupts\n"); init_interrupts(); printf("The kernel has booted\n"); // Start the timer. init_timer(50); for(;;) { } }
void eqraos_screen() { kclear(0x13); kgoto_xy(0,0); kset_color(0x3F); kputs(" eqraOS v0.1 "); //kgoto_xy(0,1); //kputs(" Ahmad Essam [[email protected]] "); kgoto_xy(0,24); kset_color(0x3F); kputs(" "); kgoto_xy(0,3); }
void kmain(uint32_t magic) { if ( magic != 0x2BADB002 ) { print("Something went not according to specs."); exit(); } kclear(); char printbuf[256]; snprintf(printbuf, 256, "kernel loaded at %p, ends at %p\n", kernel_start, kernel_end); print(printbuf); print("initializing GDT...\n"); init_gdt(); print("initializing IDT...\n"); init_idt(); print("initializing physical memory manager...\n"); init_pmm(); if (pmm_is_free((paddr_t)kernel_start) || pmm_is_free((paddr_t)kernel_end)) panic("kernel memory is not reserved"); if (pmm_is_free((paddr_t)0xb8000)) panic("video ram is not reserved"); print("initializing virtual memory manager...\n"); init_vmm(); print("initializing PICs...\n"); init_pics(0x20, 0x28); print("initializing keyboard...\n"); init_keyboard(); print("enabling keyboard interrupts...\n"); enable_irq(1); send_eoi(0); __asm__ __volatile__ ("sti"); print("initializing symbol table...\n"); init_stacktrace(); print("initializing timer...\n"); init_timer(10); enable_irq(0); print("initializing speaker...\n"); print("initializing ACPI...\n"); init_acpi(); print("reclaiming ACPI memory...\n"); acpi_reclaim_memory(); print("initializing shell...\n"); init_shell_builtins(); beep(100, 100); cprint("Hello OS\n", 2); update_cursor(); shell(); }
void _cdecl kernel_panic(const char* msg,...) { disable_irq(); va_list args; va_start(args,msg); /* missing */ va_end(args); char* panic = "\nSorry, eqraOS has encountered a problem and has been shutdown.\n\n"; kclear(0x1f); kgoto_xy(0,0); kset_color(0x1f); kputs(panic); kprintf("*** STOP: %s",msg); /* hang */ for (;;) ; }
/*! * \brief Clear screen * * This function clears the console */ void clear() { kclear(); }