diff --git a/Asuro.iso b/Asuro.iso index 5cced422..42165d87 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index a5a08464..adb07e3a 100755 Binary files a/bin/kernel.bin and b/bin/kernel.bin differ diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index a5a08464..adb07e3a 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/E1000.ppu b/lib/E1000.ppu index 4b57f299..8623dd66 100644 Binary files a/lib/E1000.ppu and b/lib/E1000.ppu differ diff --git a/lib/IDE.ppu b/lib/IDE.ppu index 04979d14..09bc19e2 100644 Binary files a/lib/IDE.ppu and b/lib/IDE.ppu differ diff --git a/lib/PCI.ppu b/lib/PCI.ppu index e216790d..8c67ae6d 100644 Binary files a/lib/PCI.ppu and b/lib/PCI.ppu differ diff --git a/lib/USB.ppu b/lib/USB.ppu index 3595d729..6846fd84 100644 Binary files a/lib/USB.ppu and b/lib/USB.ppu differ diff --git a/lib/bios_data_area.ppu b/lib/bios_data_area.ppu index 23015577..f1b16a90 100644 Binary files a/lib/bios_data_area.ppu and b/lib/bios_data_area.ppu differ diff --git a/lib/console.o b/lib/console.o index a05a7f87..4ed1e8d0 100644 Binary files a/lib/console.o and b/lib/console.o differ diff --git a/lib/console.ppu b/lib/console.ppu index 5b1fafe7..5f3b0d16 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/drivermanagement.ppu b/lib/drivermanagement.ppu index 8cc73836..0b397230 100644 Binary files a/lib/drivermanagement.ppu and b/lib/drivermanagement.ppu differ diff --git a/lib/eth2.ppu b/lib/eth2.ppu index 94544023..c53bce5f 100644 Binary files a/lib/eth2.ppu and b/lib/eth2.ppu differ diff --git a/lib/gdt.ppu b/lib/gdt.ppu index 00b66358..1938a64e 100644 Binary files a/lib/gdt.ppu and b/lib/gdt.ppu differ diff --git a/lib/idt.ppu b/lib/idt.ppu index 07bbe92a..9666e729 100644 Binary files a/lib/idt.ppu and b/lib/idt.ppu differ diff --git a/lib/ipv4.ppu b/lib/ipv4.ppu index f852badf..8d9e6080 100644 Binary files a/lib/ipv4.ppu and b/lib/ipv4.ppu differ diff --git a/lib/irq.ppu b/lib/irq.ppu index a772646b..8b0b85be 100644 Binary files a/lib/irq.ppu and b/lib/irq.ppu differ diff --git a/lib/isr.ppu b/lib/isr.ppu index 2aba6b25..cfa42735 100644 Binary files a/lib/isr.ppu and b/lib/isr.ppu differ diff --git a/lib/isr0.ppu b/lib/isr0.ppu index e2777dc0..66587313 100644 Binary files a/lib/isr0.ppu and b/lib/isr0.ppu differ diff --git a/lib/isr1.ppu b/lib/isr1.ppu index 3d1dcba3..2ece7b69 100644 Binary files a/lib/isr1.ppu and b/lib/isr1.ppu differ diff --git a/lib/isr10.ppu b/lib/isr10.ppu index 3622033a..6eb56a9a 100644 Binary files a/lib/isr10.ppu and b/lib/isr10.ppu differ diff --git a/lib/isr11.ppu b/lib/isr11.ppu index 0784e1e2..0bf3779e 100644 Binary files a/lib/isr11.ppu and b/lib/isr11.ppu differ diff --git a/lib/isr12.ppu b/lib/isr12.ppu index 96e1fab6..a6126d4f 100644 Binary files a/lib/isr12.ppu and b/lib/isr12.ppu differ diff --git a/lib/isr13.ppu b/lib/isr13.ppu index 945ced18..4e4cd780 100644 Binary files a/lib/isr13.ppu and b/lib/isr13.ppu differ diff --git a/lib/isr14.ppu b/lib/isr14.ppu index e5024c73..e49f35dc 100644 Binary files a/lib/isr14.ppu and b/lib/isr14.ppu differ diff --git a/lib/isr15.ppu b/lib/isr15.ppu index 64aaa176..fec248c0 100644 Binary files a/lib/isr15.ppu and b/lib/isr15.ppu differ diff --git a/lib/isr16.ppu b/lib/isr16.ppu index 9882cc3b..8c4a81f2 100644 Binary files a/lib/isr16.ppu and b/lib/isr16.ppu differ diff --git a/lib/isr17.ppu b/lib/isr17.ppu index 2ba4301a..88378899 100644 Binary files a/lib/isr17.ppu and b/lib/isr17.ppu differ diff --git a/lib/isr18.ppu b/lib/isr18.ppu index 02dd2332..2f3ec4b4 100644 Binary files a/lib/isr18.ppu and b/lib/isr18.ppu differ diff --git a/lib/isr2.ppu b/lib/isr2.ppu index d5441d58..2516e722 100644 Binary files a/lib/isr2.ppu and b/lib/isr2.ppu differ diff --git a/lib/isr3.ppu b/lib/isr3.ppu index a0b6f5ac..5b009710 100644 Binary files a/lib/isr3.ppu and b/lib/isr3.ppu differ diff --git a/lib/isr32.ppu b/lib/isr32.ppu index 7b3ba77e..54d04218 100644 Binary files a/lib/isr32.ppu and b/lib/isr32.ppu differ diff --git a/lib/isr33.ppu b/lib/isr33.ppu index ff736439..4a6875d3 100644 Binary files a/lib/isr33.ppu and b/lib/isr33.ppu differ diff --git a/lib/isr4.ppu b/lib/isr4.ppu index ac262086..1cbdd7b7 100644 Binary files a/lib/isr4.ppu and b/lib/isr4.ppu differ diff --git a/lib/isr40.ppu b/lib/isr40.ppu index 2ccdc7ac..178a8fcf 100644 Binary files a/lib/isr40.ppu and b/lib/isr40.ppu differ diff --git a/lib/isr44.ppu b/lib/isr44.ppu index b1f1df4c..6f783739 100644 Binary files a/lib/isr44.ppu and b/lib/isr44.ppu differ diff --git a/lib/isr5.ppu b/lib/isr5.ppu index b8a6bdb6..60784dac 100644 Binary files a/lib/isr5.ppu and b/lib/isr5.ppu differ diff --git a/lib/isr6.ppu b/lib/isr6.ppu index c871a0cc..4756ba10 100644 Binary files a/lib/isr6.ppu and b/lib/isr6.ppu differ diff --git a/lib/isr7.ppu b/lib/isr7.ppu index efbde61d..740bf6e2 100644 Binary files a/lib/isr7.ppu and b/lib/isr7.ppu differ diff --git a/lib/isr76.ppu b/lib/isr76.ppu index 7ee4cad5..9ed09f1f 100644 Binary files a/lib/isr76.ppu and b/lib/isr76.ppu differ diff --git a/lib/isr8.ppu b/lib/isr8.ppu index 91bb1168..3a471e85 100644 Binary files a/lib/isr8.ppu and b/lib/isr8.ppu differ diff --git a/lib/isr9.ppu b/lib/isr9.ppu index 8d55c618..4231143b 100644 Binary files a/lib/isr9.ppu and b/lib/isr9.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 73b6c8e4..ec9af174 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index 527bbe25..1aff5150 100644 Binary files a/lib/keyboard.ppu and b/lib/keyboard.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 53087dba..764fad21 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index e2850a3b..2c50d47a 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index d912161f..3bd5db30 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/lists.ppu b/lib/lists.ppu index dba6b15b..eb310004 100644 Binary files a/lib/lists.ppu and b/lib/lists.ppu differ diff --git a/lib/lmemorymanager.ppu b/lib/lmemorymanager.ppu index 9db0f8f5..ce949e5f 100644 Binary files a/lib/lmemorymanager.ppu and b/lib/lmemorymanager.ppu differ diff --git a/lib/mouse.ppu b/lib/mouse.ppu index a37f475f..f3093c2e 100644 Binary files a/lib/mouse.ppu and b/lib/mouse.ppu differ diff --git a/lib/net.ppu b/lib/net.ppu index e9fd148f..cbf4b342 100644 Binary files a/lib/net.ppu and b/lib/net.ppu differ diff --git a/lib/netutils.ppu b/lib/netutils.ppu index 9defaa6d..8d1d250c 100644 Binary files a/lib/netutils.ppu and b/lib/netutils.ppu differ diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index 2e70b9a1..eda4efde 100644 Binary files a/lib/pmemorymanager.ppu and b/lib/pmemorymanager.ppu differ diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index bce9f17a..0f59a03d 100644 Binary files a/lib/scheduler.ppu and b/lib/scheduler.ppu differ diff --git a/lib/storagemanagement.ppu b/lib/storagemanagement.ppu index aeb98496..53e1eeed 100644 Binary files a/lib/storagemanagement.ppu and b/lib/storagemanagement.ppu differ diff --git a/lib/strings.ppu b/lib/strings.ppu index ea9dc236..68d29a47 100644 Binary files a/lib/strings.ppu and b/lib/strings.ppu differ diff --git a/lib/terminal.ppu b/lib/terminal.ppu index 593e900b..2948e23a 100644 Binary files a/lib/terminal.ppu and b/lib/terminal.ppu differ diff --git a/lib/testdriver.ppu b/lib/testdriver.ppu index f89b65f4..31681ee0 100644 Binary files a/lib/testdriver.ppu and b/lib/testdriver.ppu differ diff --git a/lib/tss.ppu b/lib/tss.ppu index d8f5b295..5f91320d 100644 Binary files a/lib/tss.ppu and b/lib/tss.ppu differ diff --git a/lib/util.ppu b/lib/util.ppu index 74e8fb9a..987b0b09 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index 569c1fc6..c46a71d3 100644 Binary files a/lib/vmemorymanager.ppu and b/lib/vmemorymanager.ppu differ diff --git a/src/console.pas b/src/console.pas index 02235a08..a7975cb6 100644 --- a/src/console.pas +++ b/src/console.pas @@ -37,6 +37,8 @@ procedure init(); procedure clear(); procedure setdefaultattribute(attribute : char); +procedure disable_cursor; + procedure writechar(character : char); procedure writecharln(character : char); procedure writecharex(character : char; attributes : char); @@ -121,6 +123,12 @@ var Console_Matrix : P2DVideoMemory = P2DVideoMemory($C00b8000); Console_Cursor : TCoord; +procedure disable_cursor; +begin + outb($3D4, $0A); + outb($3D5, $20); +end; + procedure init(); [public, alias: 'console_init']; Begin Console_Properties.Default_Attribute:= console.combinecolors(White, Black); diff --git a/src/driver/bus/USB.pas b/src/driver/bus/USB.pas index e85d0f17..d586fffd 100644 --- a/src/driver/bus/USB.pas +++ b/src/driver/bus/USB.pas @@ -3,6 +3,7 @@ unit USB; interface uses + tracer, Console, PCI, drivertypes, @@ -49,6 +50,7 @@ var MMR : POHCI_MMR; begin + push_trace('USB.loadOHCI'); devices:= PCI.getDeviceInfo($0C, $03, $10, count); console.output('USB-OHCI Driver', 'Found '); console.writeint(count); @@ -70,6 +72,7 @@ begin end; end; loadOHCI:= true; + pop_trace; end; function loadUHCI(ptr : void) : boolean; @@ -79,6 +82,7 @@ var i : uint32; begin + push_trace('USB.loadUHCI'); devices:= PCI.getDeviceInfo($0C, $03, $00, count); console.output('USB-UHCI Driver','Found '); console.writeint(count); @@ -96,6 +100,7 @@ begin end; end; loadUHCI:= true; + pop_trace; end; procedure init; @@ -103,6 +108,7 @@ var UHCI_ID, OHCI_ID : TDeviceIdentifier; begin + push_trace('USB.init'); console.outputln('USB Driver', 'INIT BEGIN.'); UHCI_ID.Bus:= biPCI; @@ -125,6 +131,7 @@ begin drivermanagement.register_driver('USB-OHCI Driver', @OHCI_ID, @loadOHCI); console.outputln('USB Driver', 'INIT END.'); + pop_trace; end; end. \ No newline at end of file diff --git a/src/driver/exp/testdriver.pas b/src/driver/exp/testdriver.pas index a5f7ca12..3b816e8a 100644 --- a/src/driver/exp/testdriver.pas +++ b/src/driver/exp/testdriver.pas @@ -3,7 +3,7 @@ unit testdriver; interface uses - console, drivermanagement; + tracer, console, drivermanagement; procedure init; @@ -11,7 +11,9 @@ implementation function load(ptr : void) : boolean; begin - console.outputln('DUMMY DRIVER', 'LOADED.') + push_trace('testdriver.load'); + console.outputln('DUMMY DRIVER', 'LOADED.'); + pop_trace; end; procedure init; @@ -19,6 +21,7 @@ var devID : TDeviceIdentifier; begin + push_trace('testdriver.init'); devID.bus:= biPCI; { PCI BUS } devID.id0:= idANY; { ANY DEVICE ID } devID.id1:= $00000006; { CLASS } @@ -27,6 +30,7 @@ begin devID.id4:= idANY; devID.ex:= nil; { NO EXTENDED INFO } drivermanagement.register_driver('DUMMY DRIVER', @devID, @load); + pop_trace; end; end. \ No newline at end of file diff --git a/src/idt.pas b/src/idt.pas index f90bba7f..ef19651a 100644 --- a/src/idt.pas +++ b/src/idt.pas @@ -45,6 +45,12 @@ procedure set_gate(Number : uint8; Base : uint32; Selector : uint16; Flags : uin implementation +procedure load(idt_pointer : uint32); assembler; nostackframe; +asm + MOV EAX, idt_pointer + LIDT [EAX] +end; + procedure set_gate(Number : uint8; Base : uint32; Selector : uint16; Flags : uint8); begin IDT_Entries[Number].base_high:= (Base and $FFFF0000) SHR 16; @@ -55,12 +61,7 @@ begin console.output('IDT','GATE '); console.writeint(Number); console.writestringln(' SET.'); -end; - -procedure load(idt_pointer : uint32); assembler; nostackframe; -asm - MOV EAX, idt_pointer - LIDT [EAX] + load(uint32(@IDT_Pointer)); end; procedure init(); diff --git a/src/include/util.pas b/src/include/util.pas index e0a365a6..376209ab 100644 --- a/src/include/util.pas +++ b/src/include/util.pas @@ -16,6 +16,7 @@ interface uses bios_data_area, tracer; +function INTE : boolean; procedure CLI(); procedure STI(); procedure GPF(); @@ -32,6 +33,7 @@ procedure outl(port : uint16; val : uint32); function inb(port : uint16) : uint8; function inw(port : uint16) : uint16; function inl(port : uint16) : uint32; +procedure io_wait; procedure memset(location : uint32; value : uint8; size : uint32); procedure memcpy(source : uint32; dest : uint32; size : uint32); @@ -52,6 +54,38 @@ implementation uses console; +function INTE : boolean; +var + flags : uint32; +begin + asm + PUSH EAX + PUSHF + POP EAX + MOV flags, EAX + POP EAX + end; + INTE:= (flags AND (1 SHL 9)) > 0; +end; + +procedure io_wait; +var + port : uint8; + val : uint8; +begin + port:= $80; + val:= 0; + asm + PUSH EAX + PUSH EDX + MOV DX, port + MOV AL, val + OUT DX, AL + POP EDX + POP EAX + end; +end; + procedure printmemory(source : uint32; length : uint32; col : uint32; delim : PChar; offset_row : boolean); var buf : puint8; @@ -269,6 +303,7 @@ var z : uint32; begin + disable_cursor; if not BSOD_ENABLE then exit; console.setdefaultattribute(console.combinecolors(white, Red)); console.clear; diff --git a/src/irq.pas b/src/irq.pas index bdee02f7..b7322565 100644 --- a/src/irq.pas +++ b/src/irq.pas @@ -21,15 +21,25 @@ procedure init(); begin console.outputln('IRQ','INIT START.'); outb($20, $11); + io_wait; outb($A0, $11); + io_wait; outb($21, $20); + io_wait; outb($A1, $28); + io_wait; outb($21, $04); + io_wait; outb($A1, $02); + io_wait; outb($21, $01); + io_wait; outb($A1, $01); + io_wait; outb($21, $00); + io_wait; outb($A1, $00); + io_wait; console.outputln('IRQ','INIT END.'); end; diff --git a/src/kernel.pas b/src/kernel.pas index 6ce63dee..ff63f2b9 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -97,9 +97,11 @@ var begin + { Store Multiboot info } multibootinfo:= mbinfo; multibootmagic:= mbmagic; + { Ensure tracer is frozen } tracer.freeze(); { Console Init } @@ -144,16 +146,25 @@ begin tss.init(); scheduler.init(); - { Management Interfaces } + { Call Tracer } tracer.init(); + + { Management Interfaces } + tracer.push_trace('kmain.DRVMGMT'); drivermanagement.init(); + tracer.pop_trace; + tracer.push_trace('kmain.STRMGMT'); storagemanagement.init(); + tracer.pop_trace; { Hook Timer for Ticks } + tracer.push_trace('kmain.TMR'); STI; isr32.hook(uint32(@bios_data_area.tick_update)); + tracer.pop_trace; { Device Drivers } + tracer.push_trace('kmain.DEVDRV'); console.outputln('KERNEL', 'DEVICE DRIVERS: INIT BEGIN.'); keyboard.init(keyboard_layout); mouse.init(); @@ -161,26 +172,36 @@ begin E1000.init(); IDE.init(); console.outputln('KERNEL', 'DEVICE DRIVERS: INIT END.'); + tracer.pop_trace; { Bus Drivers } + tracer.push_trace('kmain.BUSDRV'); console.outputln('KERNEL', 'BUS DRIVERS: INIT BEGIN.'); USB.init(); pci.init(); console.outputln('KERNEL', 'BUS DRIVERS: INIT END.'); - + tracer.pop_trace; + { Network Stack } + tracer.push_trace('kmain.NETDRV'); net.init; + tracer.pop_trace; { End of Boot } + tracer.push_trace('kmain.EOB'); 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...'); + tracer.pop_trace; + tracer.push_trace('kmain.KEYHOOK'); keyboard.hook(@temphook); + tracer.pop_trace; + tracer.push_trace('kmain.END'); util.halt_and_dont_catch_fire; end;