diff --git a/Asuro.iso b/Asuro.iso index b9dff2d2..00aedf70 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 0b85c19c..b7c227ea 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 0b85c19c..b7c227ea 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/console.o b/lib/console.o index 7a1ffae7..41b7853d 100644 Binary files a/lib/console.o and b/lib/console.o differ diff --git a/lib/console.ppu b/lib/console.ppu index d27fb5fd..b128182b 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/gdt.ppu b/lib/gdt.ppu index 412bf6d3..59f30ac5 100644 Binary files a/lib/gdt.ppu and b/lib/gdt.ppu differ diff --git a/lib/idt.ppu b/lib/idt.ppu index 69a893e5..1380caa3 100644 Binary files a/lib/idt.ppu and b/lib/idt.ppu differ diff --git a/lib/isr.ppu b/lib/isr.ppu index fc13a3db..6dcaa9cf 100644 Binary files a/lib/isr.ppu and b/lib/isr.ppu differ diff --git a/lib/isr0.ppu b/lib/isr0.ppu index 53672e01..03f21de9 100644 Binary files a/lib/isr0.ppu and b/lib/isr0.ppu differ diff --git a/lib/kernel.o b/lib/kernel.o index b3c6db79..b4cd89e2 100644 Binary files a/lib/kernel.o and b/lib/kernel.o differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index edecc13a..7a8d36b2 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index 2718b1e2..0ce0df56 100644 Binary files a/lib/keyboard.ppu and b/lib/keyboard.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index c01d9239..675d1588 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpkernel.a b/lib/libpkernel.a index 716f518c..d5b49a76 100644 Binary files a/lib/libpkernel.a and b/lib/libpkernel.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index bd759691..0d3d5e97 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 0eed4ee1..33fe3006 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/util.ppu b/lib/util.ppu index 88428555..40260752 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/src/console.pas b/src/console.pas index a80d86e9..5b77ac40 100644 --- a/src/console.pas +++ b/src/console.pas @@ -371,6 +371,7 @@ begin end; Console_Cursor.X:= 0; console._update_cursor; + psleep(500); end; procedure _newline(); [public, alias: '_console_newline']; diff --git a/src/gdt.pas b/src/gdt.pas index f4934acb..cb1b8d26 100644 --- a/src/gdt.pas +++ b/src/gdt.pas @@ -11,6 +11,9 @@ unit gdt; interface +uses + console; + type TGDT_Entry = bitpacked record limit_low : uint16; @@ -58,10 +61,14 @@ begin gdt_entries[Gate_Number].limit_low := (Limit AND $FFFF); gdt_entries[Gate_Number].granularity := ((Limit SHR 16) AND $0F) OR (Granularity AND $F0); gdt_entries[Gate_Number].access := Access; + console.writestring('GDT: GATE '); + console.writeint(Gate_Number); + console.writestringln(' SET.'); end; procedure init(); begin + console.writestringln('GDT: INIT START.'); gdt_pointer.limit := (sizeof(TGDT_Entry) * 5) - 1; gdt_pointer.base := uint32(@gdt_entries); set_gate($00, $00, $00, $00, $00); @@ -69,7 +76,9 @@ begin set_gate($02, $00, $FFFFFFFF, $92, $CF); set_gate($03, $00, $FFFFFFFF, $FA, $CF); set_gate($04, $00, $FFFFFFFF, $F2, $CF); - flush_gdt(uint32(@gdt_pointer)) + console.writestringln('GDT: FLUSH.'); + flush_gdt(uint32(@gdt_pointer)); + console.writestringln('GDT: INIT END.'); end; end. \ No newline at end of file diff --git a/src/idt.pas b/src/idt.pas index b05560c3..8cb21f20 100644 --- a/src/idt.pas +++ b/src/idt.pas @@ -12,7 +12,7 @@ unit idt; interface uses - util; + util, console; const ISR_RING_0 = $8E; @@ -52,6 +52,9 @@ begin IDT_Entries[Number].selector:= Selector; IDT_Entries[Number].flags:= Flags; IDT_Entries[Number].always_0:= $00; + console.writestring('IDT: GATE '); + console.writeint(Number); + console.writestringln(' SET.'); end; procedure load(idt_pointer : uint32); assembler; nostackframe; @@ -62,10 +65,14 @@ end; procedure init(); begin + console.writestringln('IDT: INIT START.'); IDT_Pointer.limit:= (sizeof(TIDT_Entry) * 256) - 1; IDT_Pointer.base:= uint32(@IDT_Entries); + console.writestringln('IDT: CLEAR.'); util.memset(uint32(@IDT_Entries), 0, sizeof(TIDT_Entry) * 256); + console.writestringln('IDT: LOAD.'); load(uint32(@IDT_Pointer)); + console.writestringln('IDT: INIT END.'); end; end. \ No newline at end of file diff --git a/src/irq.pas b/src/irq.pas index 8dcbde07..b815853d 100644 --- a/src/irq.pas +++ b/src/irq.pas @@ -11,7 +11,7 @@ unit irq; interface -uses util; +uses util, console; procedure init(); @@ -19,6 +19,7 @@ implementation procedure init(); begin + console.writestringln('IRQ: INIT START.'); outb($20, $11); outb($A0, $11); outb($21, $20); @@ -29,6 +30,7 @@ begin outb($A1, $01); outb($21, $00); outb($A1, $00); + console.writestringln('IRQ: INIT END.'); end; end. \ No newline at end of file diff --git a/src/isr.pas b/src/isr.pas index 524b3dc4..47625206 100644 --- a/src/isr.pas +++ b/src/isr.pas @@ -12,6 +12,7 @@ unit isr; interface uses + Console, ISR0, ISR1, ISR2, ISR3, ISR4, ISR5, ISR6, ISR7, ISR8, ISR9, ISR10, ISR11, ISR12, ISR13, ISR14, ISR15, ISR16, ISR17, ISR18, ISR32, ISR33, @@ -23,6 +24,7 @@ implementation procedure init(); begin + console.writestringln('ISR: INIT START.'); ISR0.register(); // Divide-By-Zero ISR1.register(); // Debug ISR2.register(); // Non-Maskable Inturrupt @@ -46,6 +48,7 @@ begin ISR32.register(); // 55ms Timer ISR33.register(); // Keyboard ISR40.register(); // 1024/s Timer + console.writestringln('ISR: INIT END.'); end; end. \ No newline at end of file diff --git a/src/kernel.pas b/src/kernel.pas index ac9689ac..0bcaae2d 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -28,26 +28,34 @@ var begin mbi:= mbinfo; mbm:= mbmagic; - gdt.init(); - idt.init(); - isr.init(); - irq.init(); console.init(); + console.writestringln('Booting Asuro...'); + if (mbm <> MULTIBOOT_BOOTLOADER_MAGIC) then begin console.setdefaultattribute(console.combinecolors(Red, Black)); console.writestringln('Multiboot Compliant Boot-Loader Needed!'); console.writestringln('HALTING'); util.halt_and_catch_fire; end; - console.clear(); - console.writestring('If this reads "0x8" then we have a GDT: '); + + gdt.init(); + idt.init(); + isr.init(); + irq.init(); + asm MOV dds, CS end; - console.setdefaultattribute(console.combinecolors(Red, Black)); - if dds = $08 then console.setdefaultattribute(console.combinecolors(Green, Black)); - console.writehexln(dds); + + if dds = $08 then begin + console.setdefaultattribute(console.combinecolors(Green, Black)); + console.writestringln('GDT: LOAD SUCCESS.'); + end else begin + console.setdefaultattribute(console.combinecolors(Red, Black)); + console.writestringln('GDT: LOAD FAIL.'); + end; + console.writestringln(''); console.setdefaultattribute(console.combinecolors(Green, Black)); console.writestringln('Asuro Booted Correctly!'); console.writestringln(''); diff --git a/src/util.pas b/src/util.pas index e26f3c7f..4619b93e 100644 --- a/src/util.pas +++ b/src/util.pas @@ -26,6 +26,7 @@ function inb(port : uint16) : uint8; function inw(port : uint16) : uint16; function inl(port : uint16) : uint32; procedure memset(location : uint32; value : uint8; size : uint32); +procedure psleep(t : uint16); implementation @@ -49,6 +50,18 @@ begin switchendian:= (lo(b) SHL 4) OR hi(b); end; +procedure psleep(t : uint16); +var + i : uint32; + t1, t2 : uint32; + +begin + for i:=0 to t*t*t do begin + t1:=i; + t2:=t1+4444+i; + end; +end; + procedure outl(port : uint16; val : uint32); [public, alias: 'util_outl']; begin asm