diff --git a/Asuro.iso b/Asuro.iso index 7a12a2aa..3356ade0 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 96cf75a5..a9d6a7bb 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 96cf75a5..a9d6a7bb 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/PCI.ppu b/lib/PCI.ppu index 26ee5a2c..0eb8253b 100644 Binary files a/lib/PCI.ppu and b/lib/PCI.ppu differ diff --git a/lib/console.o b/lib/console.o index ce825e57..ce299f54 100644 Binary files a/lib/console.o and b/lib/console.o differ diff --git a/lib/console.ppu b/lib/console.ppu index 3eab389a..b46f9f8a 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/gdt.ppu b/lib/gdt.ppu index 2ab7a701..85af4dd5 100644 Binary files a/lib/gdt.ppu and b/lib/gdt.ppu differ diff --git a/lib/idt.ppu b/lib/idt.ppu index e551e4eb..64662555 100644 Binary files a/lib/idt.ppu and b/lib/idt.ppu differ diff --git a/lib/irq.ppu b/lib/irq.ppu index d25ad090..73994ff5 100644 Binary files a/lib/irq.ppu and b/lib/irq.ppu differ diff --git a/lib/isr.ppu b/lib/isr.ppu index 2af896b6..afc20e07 100644 Binary files a/lib/isr.ppu and b/lib/isr.ppu differ diff --git a/lib/isr0.ppu b/lib/isr0.ppu index 2242a91b..2e42f2e3 100644 Binary files a/lib/isr0.ppu and b/lib/isr0.ppu differ diff --git a/lib/isr1.ppu b/lib/isr1.ppu index 655ae4b4..8a1c698a 100644 Binary files a/lib/isr1.ppu and b/lib/isr1.ppu differ diff --git a/lib/isr10.ppu b/lib/isr10.ppu index d9d95147..feec528c 100644 Binary files a/lib/isr10.ppu and b/lib/isr10.ppu differ diff --git a/lib/isr11.ppu b/lib/isr11.ppu index 93949e6e..61e70ab8 100644 Binary files a/lib/isr11.ppu and b/lib/isr11.ppu differ diff --git a/lib/isr12.ppu b/lib/isr12.ppu index 5e586035..6069a03a 100644 Binary files a/lib/isr12.ppu and b/lib/isr12.ppu differ diff --git a/lib/isr13.ppu b/lib/isr13.ppu index bf18373b..5504373a 100644 Binary files a/lib/isr13.ppu and b/lib/isr13.ppu differ diff --git a/lib/isr14.ppu b/lib/isr14.ppu index 30df4681..7a200138 100644 Binary files a/lib/isr14.ppu and b/lib/isr14.ppu differ diff --git a/lib/isr15.ppu b/lib/isr15.ppu index 41d91d27..397fe8b3 100644 Binary files a/lib/isr15.ppu and b/lib/isr15.ppu differ diff --git a/lib/isr16.ppu b/lib/isr16.ppu index ebf61c03..5be6088f 100644 Binary files a/lib/isr16.ppu and b/lib/isr16.ppu differ diff --git a/lib/isr17.ppu b/lib/isr17.ppu index 4c84ef9f..42e1396d 100644 Binary files a/lib/isr17.ppu and b/lib/isr17.ppu differ diff --git a/lib/isr18.ppu b/lib/isr18.ppu index 0e145957..8771d06c 100644 Binary files a/lib/isr18.ppu and b/lib/isr18.ppu differ diff --git a/lib/isr2.ppu b/lib/isr2.ppu index bacbc6f2..de57e011 100644 Binary files a/lib/isr2.ppu and b/lib/isr2.ppu differ diff --git a/lib/isr3.ppu b/lib/isr3.ppu index 746cda7b..581acd46 100644 Binary files a/lib/isr3.ppu and b/lib/isr3.ppu differ diff --git a/lib/isr32.ppu b/lib/isr32.ppu index 009ed6f0..efb97d27 100644 Binary files a/lib/isr32.ppu and b/lib/isr32.ppu differ diff --git a/lib/isr33.ppu b/lib/isr33.ppu index 5ede861d..13b0cdc4 100644 Binary files a/lib/isr33.ppu and b/lib/isr33.ppu differ diff --git a/lib/isr4.ppu b/lib/isr4.ppu index f7028954..d3f279f1 100644 Binary files a/lib/isr4.ppu and b/lib/isr4.ppu differ diff --git a/lib/isr40.ppu b/lib/isr40.ppu index f34e3ba6..344f6fc6 100644 Binary files a/lib/isr40.ppu and b/lib/isr40.ppu differ diff --git a/lib/isr5.ppu b/lib/isr5.ppu index f4bb9891..bee81613 100644 Binary files a/lib/isr5.ppu and b/lib/isr5.ppu differ diff --git a/lib/isr6.ppu b/lib/isr6.ppu index ec222249..14e3150a 100644 Binary files a/lib/isr6.ppu and b/lib/isr6.ppu differ diff --git a/lib/isr7.ppu b/lib/isr7.ppu index 1b068c53..3a86bcb8 100644 Binary files a/lib/isr7.ppu and b/lib/isr7.ppu differ diff --git a/lib/isr8.ppu b/lib/isr8.ppu index 8e5f38fc..17045606 100644 Binary files a/lib/isr8.ppu and b/lib/isr8.ppu differ diff --git a/lib/isr9.ppu b/lib/isr9.ppu index 8749034c..8e2b1c47 100644 Binary files a/lib/isr9.ppu and b/lib/isr9.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 21b740c5..6beaa8be 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index f350cae1..83d518ac 100644 Binary files a/lib/keyboard.ppu and b/lib/keyboard.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index bd5a14d5..f5b91a46 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 0887a782..3de08d1d 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 4dfef3ae..4599158d 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/lmemorymanager.ppu b/lib/lmemorymanager.ppu index e37a17fb..dae11634 100644 Binary files a/lib/lmemorymanager.ppu and b/lib/lmemorymanager.ppu differ diff --git a/lib/mouse.ppu b/lib/mouse.ppu new file mode 100644 index 00000000..3362aef0 Binary files /dev/null and b/lib/mouse.ppu differ diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index 760e6ecd..672ab095 100644 Binary files a/lib/pmemorymanager.ppu and b/lib/pmemorymanager.ppu differ diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index 9d1b4d67..372da0c7 100644 Binary files a/lib/scheduler.ppu and b/lib/scheduler.ppu differ diff --git a/lib/tss.ppu b/lib/tss.ppu index f3bc7109..f72485b0 100644 Binary files a/lib/tss.ppu and b/lib/tss.ppu differ diff --git a/lib/util.ppu b/lib/util.ppu index d2b2d8b1..15c6e084 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index 497c4f6d..ab71b462 100644 Binary files a/lib/vmemorymanager.ppu and b/lib/vmemorymanager.ppu differ diff --git a/src/console.pas b/src/console.pas index 749b92cd..95777ce4 100644 --- a/src/console.pas +++ b/src/console.pas @@ -77,6 +77,8 @@ procedure writebin32ln(b : uint32); procedure writebin32ex(b : uint32; attributes : char); procedure writebin32lnex(b : uint32; attributes : char); +procedure backspace; + function combinecolors(Foreground, Background : TColor) : char; procedure _increment_x(); @@ -440,6 +442,14 @@ begin outb($3D5, b); end; +procedure backspace; +begin + Dec(Console_Cursor.X); + writechar(' '); + Dec(Console_Cursor.X); + _update_cursor(); +end; + procedure _increment_x(); [public, alias: '_console_increment_x']; begin Console_Cursor.X:= Console_Cursor.X+1; diff --git a/src/kernel.pas b/src/kernel.pas index 473f251a..97a45b50 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -28,22 +28,28 @@ uses lmemorymanager, tss, scheduler, - PCI; + PCI, + Terminal; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; implementation +procedure temphook(ignored : TKeyInfo); +begin + Terminal.run; +end; + procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; [public, alias: 'kmain']; var - c : uint8; - z : uint32; - dds : uint32; - pint : puint32; - pint2 : puint32; + c : uint8; + z : uint32; + dds : uint32; + pint : puint32; + pint2 : puint32; keyboard_layout : array [0..1] of TKeyInfo; - i : uint32; - cEIP : uint32; + i : uint32; + cEIP : uint32; begin multibootinfo:= mbinfo; @@ -105,7 +111,10 @@ begin console.writestring('Total Memory = '); console.writeint(((mbinfo^.mem_upper + 1000) div 1024) + 1); console.writestringln('MB'); - console.setdefaultattribute(console.combinecolors(lYellow, Black)); + 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; diff --git a/src/terminal.pas b/src/terminal.pas new file mode 100644 index 00000000..6963d133 --- /dev/null +++ b/src/terminal.pas @@ -0,0 +1,52 @@ +unit terminal; + +interface + +uses + console, + keyboard; + +var + buffer : array[0..1024] of byte; + bIndex : uint32 = 0; + +procedure run; + +implementation + +procedure process_command; +begin + console.writecharln(' '); + console.writestring('Asuro#> '); + bIndex:= 0; +end; + +procedure key_event(info : TKeyInfo); +begin + if (info.key_code >= 32) and (info.key_code <= 126) then begin + if bIndex <= 1024 then begin + buffer[bIndex]:= info.key_code; + inc(bIndex); + console.writechar(char(info.key_code)); + end; + end; + if info.key_code = 8 then begin //backspace + if bIndex > 0 then begin + console.backspace; + dec(bIndex); + buffer[bIndex]:= 0; + end; + end; + if info.key_code = 13 then begin //return + process_command; + end; +end; + +procedure run; +begin + keyboard.hook(@key_event); + console.clear(); + console.writestring('Asuro#> '); +end; + +end. \ No newline at end of file