{ ************************************************ * Asuro * Unit: Kernel * Description: Main Entry Point for Asuro ************************************************ * Author: K Morris * Contributors: A Hance ************************************************ } unit kernel; interface uses multiboot, util, gdt, idt, isr, irq, isr32, console, bios_data_area, keyboard, mouse, vmemorymanager, pmemorymanager, lmemorymanager, drivermanagement, tss, scheduler, PCI, Terminal, strings, USB, testdriver, E1000, IDE, storagemanagement; //ipv4; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; implementation procedure temphook(ignored : TKeyInfo); begin Terminal.run; end; procedure terminal_command_meminfo(params : PParamList); begin console.writestring('Lower Memory = '); console.writeint(multibootinfo^.mem_lower); console.writestringln('KB'); console.writestring('Higher Memory = '); console.writeint(multibootinfo^.mem_upper); console.writestringln('KB'); console.writestring('Total Memory = '); console.writeint(((multibootinfo^.mem_upper + 1000) div 1024) + 1); console.writestringln('MB'); end; procedure terminal_command_bsod(params : PParamList); begin if ParamCount(params) > 1 then begin bsod(getparam(0, params), getparam(1, params)); end else begin console.writestringln('Invalid number of params.'); console.writestringln('Usage: bsod '); end; end; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; [public, alias: 'kmain']; var c : uint8; z : uint32; dds : uint32; pint : puint32; pint2 : puint32; keyboard_layout : array [0..1] of TKeyInfo; i : uint32; cEIP : uint32; temp : uint32; atmp : puint32; test : puint8; begin multibootinfo:= mbinfo; multibootmagic:= mbmagic; console.init(); console.writestringln('A'); terminal.init(); console.writestringln('B'); terminal.registerCommand('MEMINFO', @terminal_command_meminfo, 'Print Simple Memory Information.'); console.writestringln('C'); terminal.registerCommand('BSOD', @terminal_command_bsod, 'Force a Panic Screen.'); console.writestringln('Booting Asuro...'); while true do begin end; if (multibootmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then begin console.setdefaultattribute(console.combinecolors(Red, Black)); console.outputln('KERNEL', 'Multiboot Compliant Boot-Loader Needed!'); console.outputln('KERNEL', 'HALTING.'); util.halt_and_catch_fire; end; gdt.init(); asm MOV dds, CS end; if dds = $08 then begin console.outputln('KERNEL', 'GDT: LOAD SUCCESS.'); end else begin console.outputln('KERNEL', 'GDT: LOAD FAIL.'); console.outputln('KERNEL', 'HALTING.'); halt_and_catch_fire; end; idt.init(); isr.init(); irq.init(); pmemorymanager.init(); vmemorymanager.init(); lmemorymanager.init(); tss.init(); scheduler.init(); bios_data_area.init(); drivermanagement.init(); storagemanagement.init(); //asm INT 13 end; STI; isr32.hook(uint32(@bios_data_area.tick_update)); //drivers console.outputln('KERNEL', 'DRIVERS: INIT BEGIN.'); keyboard.init(keyboard_layout); mouse.init(); testdriver.init(); E1000.init(); IDE.init(); //Nothing beyond here USB.init(); pci.init(); console.outputln('KERNEL', 'DRIVERS: INIT END.'); //ipv4.register(); console.writestringln(''); console.setdefaultattribute(console.combinecolors(Green, Black)); console.writestringln('Asuro Booted Correctly!'); console.setdefaultattribute(console.combinecolors(White, Black)); console.writestringln(''); console.writestringln('Press any key to boot in to Asuro Terminal...'); keyboard.hook(@temphook); util.halt_and_dont_catch_fire; end; end.