diff --git a/Asuro.iso b/Asuro.iso index de14790d..6f4d23af 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index b3fd2cf4..ace7263f 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 b3fd2cf4..ace7263f 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 1d14400d..26ee5a2c 100644 Binary files a/lib/PCI.ppu and b/lib/PCI.ppu differ diff --git a/lib/bios_data_area.ppu b/lib/bios_data_area.ppu index 7831642b..b9d0120d 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 f9476d7b..ce825e57 100644 Binary files a/lib/console.o and b/lib/console.o differ diff --git a/lib/console.ppu b/lib/console.ppu index 23e2b516..3eab389a 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/gdt.ppu b/lib/gdt.ppu index a745d4f5..2ab7a701 100644 Binary files a/lib/gdt.ppu and b/lib/gdt.ppu differ diff --git a/lib/idt.ppu b/lib/idt.ppu index 35a8943e..e551e4eb 100644 Binary files a/lib/idt.ppu and b/lib/idt.ppu differ diff --git a/lib/irq.ppu b/lib/irq.ppu index c02d5f73..154ec19a 100644 Binary files a/lib/irq.ppu and b/lib/irq.ppu differ diff --git a/lib/isr.ppu b/lib/isr.ppu index ede6a997..79422f5a 100644 Binary files a/lib/isr.ppu and b/lib/isr.ppu differ diff --git a/lib/isr0.ppu b/lib/isr0.ppu index e13c71e2..2242a91b 100644 Binary files a/lib/isr0.ppu and b/lib/isr0.ppu differ diff --git a/lib/isr1.ppu b/lib/isr1.ppu index 9816c15e..655ae4b4 100644 Binary files a/lib/isr1.ppu and b/lib/isr1.ppu differ diff --git a/lib/isr10.ppu b/lib/isr10.ppu index 74fec85e..d9d95147 100644 Binary files a/lib/isr10.ppu and b/lib/isr10.ppu differ diff --git a/lib/isr11.ppu b/lib/isr11.ppu index 9e57301c..93949e6e 100644 Binary files a/lib/isr11.ppu and b/lib/isr11.ppu differ diff --git a/lib/isr12.ppu b/lib/isr12.ppu index 6c2e5dea..5e586035 100644 Binary files a/lib/isr12.ppu and b/lib/isr12.ppu differ diff --git a/lib/isr13.ppu b/lib/isr13.ppu index 739007c1..bf18373b 100644 Binary files a/lib/isr13.ppu and b/lib/isr13.ppu differ diff --git a/lib/isr14.ppu b/lib/isr14.ppu index 957606bf..30df4681 100644 Binary files a/lib/isr14.ppu and b/lib/isr14.ppu differ diff --git a/lib/isr15.ppu b/lib/isr15.ppu index 2b6fa437..41d91d27 100644 Binary files a/lib/isr15.ppu and b/lib/isr15.ppu differ diff --git a/lib/isr16.ppu b/lib/isr16.ppu index e4b27662..ebf61c03 100644 Binary files a/lib/isr16.ppu and b/lib/isr16.ppu differ diff --git a/lib/isr17.ppu b/lib/isr17.ppu index 29fb2fd5..4c84ef9f 100644 Binary files a/lib/isr17.ppu and b/lib/isr17.ppu differ diff --git a/lib/isr18.ppu b/lib/isr18.ppu index e734762a..0e145957 100644 Binary files a/lib/isr18.ppu and b/lib/isr18.ppu differ diff --git a/lib/isr2.ppu b/lib/isr2.ppu index 3ee49ee9..bacbc6f2 100644 Binary files a/lib/isr2.ppu and b/lib/isr2.ppu differ diff --git a/lib/isr3.ppu b/lib/isr3.ppu index a001e560..746cda7b 100644 Binary files a/lib/isr3.ppu and b/lib/isr3.ppu differ diff --git a/lib/isr32.ppu b/lib/isr32.ppu index bdf5dca6..009ed6f0 100644 Binary files a/lib/isr32.ppu and b/lib/isr32.ppu differ diff --git a/lib/isr33.ppu b/lib/isr33.ppu index 422d3ba1..5ede861d 100644 Binary files a/lib/isr33.ppu and b/lib/isr33.ppu differ diff --git a/lib/isr4.ppu b/lib/isr4.ppu index e2faa7fa..f7028954 100644 Binary files a/lib/isr4.ppu and b/lib/isr4.ppu differ diff --git a/lib/isr40.ppu b/lib/isr40.ppu index 401088bd..f34e3ba6 100644 Binary files a/lib/isr40.ppu and b/lib/isr40.ppu differ diff --git a/lib/isr45.ppu b/lib/isr45.ppu index b5e2ed12..f537a9b7 100644 Binary files a/lib/isr45.ppu and b/lib/isr45.ppu differ diff --git a/lib/isr5.ppu b/lib/isr5.ppu index 435d9a44..f4bb9891 100644 Binary files a/lib/isr5.ppu and b/lib/isr5.ppu differ diff --git a/lib/isr6.ppu b/lib/isr6.ppu index 622eb9d2..ec222249 100644 Binary files a/lib/isr6.ppu and b/lib/isr6.ppu differ diff --git a/lib/isr7.ppu b/lib/isr7.ppu index 1b8f0b24..1b068c53 100644 Binary files a/lib/isr7.ppu and b/lib/isr7.ppu differ diff --git a/lib/isr8.ppu b/lib/isr8.ppu index 320f3bd5..8e5f38fc 100644 Binary files a/lib/isr8.ppu and b/lib/isr8.ppu differ diff --git a/lib/isr9.ppu b/lib/isr9.ppu index 54e271e3..8749034c 100644 Binary files a/lib/isr9.ppu and b/lib/isr9.ppu differ diff --git a/lib/isr_types.ppu b/lib/isr_types.ppu index 92bc9c0b..b86404cd 100644 Binary files a/lib/isr_types.ppu and b/lib/isr_types.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 28367196..d73cb385 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index 2681508d..f350cae1 100644 Binary files a/lib/keyboard.ppu and b/lib/keyboard.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index b7dc5400..eae59ee8 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index aadb57a7..cc3f895e 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index a1942b2c..a05b4333 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/lmemorymanager.ppu b/lib/lmemorymanager.ppu index 242c5050..e37a17fb 100644 Binary files a/lib/lmemorymanager.ppu and b/lib/lmemorymanager.ppu differ diff --git a/lib/multiboot.ppu b/lib/multiboot.ppu index 0868deab..8dd60afa 100644 Binary files a/lib/multiboot.ppu and b/lib/multiboot.ppu differ diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index 3707230d..760e6ecd 100644 Binary files a/lib/pmemorymanager.ppu and b/lib/pmemorymanager.ppu differ diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index 7ae352a0..9d1b4d67 100644 Binary files a/lib/scheduler.ppu and b/lib/scheduler.ppu differ diff --git a/lib/system.o b/lib/system.o index 6ca0cb08..51dabf89 100644 Binary files a/lib/system.o and b/lib/system.o differ diff --git a/lib/system.ppu b/lib/system.ppu index 8759d684..f8a0c190 100644 Binary files a/lib/system.ppu and b/lib/system.ppu differ diff --git a/lib/tss.ppu b/lib/tss.ppu index b30c90ad..f3bc7109 100644 Binary files a/lib/tss.ppu and b/lib/tss.ppu differ diff --git a/lib/util.ppu b/lib/util.ppu index 5f622c9c..d2b2d8b1 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index 620dc34e..497c4f6d 100644 Binary files a/lib/vmemorymanager.ppu and b/lib/vmemorymanager.ppu differ diff --git a/src/console.pas b/src/console.pas index 281c59ce..749b92cd 100644 --- a/src/console.pas +++ b/src/console.pas @@ -38,29 +38,45 @@ procedure clear(); procedure setdefaultattribute(attribute : char); procedure writechar(character : char); -procedure writestring(str: PChar); -procedure writeint(i: Integer); -procedure writeword(i: DWORD); -procedure writehex(i: DWORD); - procedure writecharln(character : char); -procedure writestringln(str: PChar); -procedure writeintln(i: Integer); -procedure writewordln(i: DWORD); -procedure writehexln(i: DWORD); - procedure writecharex(character : char; attributes : char); -procedure writestringex(str: PChar; attributes : char); -procedure writeintex(i: Integer; attributes : char); -procedure writewordex(i: DWORD; attributes : char); -procedure writehexex(i : DWORD; attributes : char); - procedure writecharlnex(character : char; attributes : char); + +procedure writestring(str: PChar); +procedure writestringln(str: PChar); +procedure writestringex(str: PChar; attributes : char); procedure writestringlnex(str: PChar; attributes : char); + +procedure writeint(i: Integer); +procedure writeintln(i: Integer); +procedure writeintex(i: Integer; attributes : char); procedure writeintlnex(i: Integer; attributes : char); + +procedure writeword(i: DWORD); +procedure writewordln(i: DWORD); +procedure writewordex(i: DWORD; attributes : char); procedure writewordlnex(i: DWORD; attributes : char); + +procedure writehex(i: DWORD); +procedure writehexln(i: DWORD); +procedure writehexex(i : DWORD; attributes : char); procedure writehexlnex(i: DWORD; attributes : char); +procedure writebin8(b : uint8); +procedure writebin8ln(b : uint8); +procedure writebin8ex(b : uint8; attributes : char); +procedure writebin8lnex(b : uint8; attributes : char); + +procedure writebin16(b : uint16); +procedure writebin16ln(b : uint16); +procedure writebin16ex(b : uint16; attributes : char); +procedure writebin16lnex(b : uint16; attributes : char); + +procedure writebin32(b : uint32); +procedure writebin32ln(b : uint32); +procedure writebin32ex(b : uint32; attributes : char); +procedure writebin32lnex(b : uint32; attributes : char); + function combinecolors(Foreground, Background : TColor) : char; procedure _increment_x(); @@ -120,6 +136,94 @@ begin Console_Cursor.Y:= 0; end; +procedure writebin8ex(b : uint8; attributes : char); +var + Mask : PMask; + i : uint8; + +begin + Mask:= PMask(@b); + for i:=0 to 7 do begin + If Mask^[7-i] then writecharex('1', attributes) else writecharex('0', attributes); + end; +end; + +procedure writebin16ex(b : uint16; attributes : char); +var + Mask : PMask; + i,j : uint8; + +begin + for j:=1 downto 0 do begin + Mask:= PMask(uint32(@b) + (1 * j)); + for i:=0 to 7 do begin + If Mask^[7-i] then writecharex('1', attributes) else writecharex('0', attributes); + end; + end; +end; + +procedure writebin32ex(b : uint32; attributes : char); +var + Mask : PMask; + i,j : uint8; + +begin + for j:=3 downto 0 do begin + Mask:= PMask(uint32(@b) + (1 * j)); + for i:=0 to 7 do begin + If Mask^[7-i] then writecharex('1', attributes) else writecharex('0', attributes); + end; + end; +end; + +procedure writebin8(b : uint8); +begin + writebin8ex(b, Console_Properties.Default_Attribute); +end; + +procedure writebin16(b : uint16); +begin + writebin16ex(b, Console_Properties.Default_Attribute); +end; + +procedure writebin32(b : uint32); +begin + writebin32ex(b, Console_Properties.Default_Attribute); +end; + +procedure writebin8lnex(b : uint8; attributes : char); +begin + writebin8ex(b, attributes); + console._safeincrement_y(); +end; + +procedure writebin16lnex(b : uint16; attributes : char); +begin + writebin16ex(b, attributes); + console._safeincrement_y(); +end; + +procedure writebin32lnex(b : uint32; attributes : char); +begin + writebin32ex(b, attributes); + console._safeincrement_y(); +end; + +procedure writebin8ln(b : uint8); +begin + writebin8lnex(b, Console_Properties.Default_Attribute); +end; + +procedure writebin16ln(b : uint16); +begin + writebin16lnex(b, Console_Properties.Default_Attribute); +end; + +procedure writebin32ln(b : uint32); +begin + writebin32lnex(b, Console_Properties.Default_Attribute); +end; + procedure setdefaultattribute(attribute: char); [public, alias: 'console_setdefaultattribute']; begin Console_Properties.Default_Attribute:= attribute; diff --git a/src/isr/isr45.pas b/src/isr/isr45.pas index 3c03c4fc..22bdf96f 100644 --- a/src/isr/isr45.pas +++ b/src/isr/isr45.pas @@ -42,17 +42,24 @@ procedure register(); var status : uint8; bm : PBitMask; + ak : uint8; begin memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(45, uint32(@Main), $08, ISR_RING_0); outb($64, $20); status:= inb($64); + ak:= inb($64); + console.writebin8ln(status); bm:= PBitMask(@status); bm^.b1:= true; bm^.b5:= false; + console.writebin8ln(status); + //while true do begin end; outb($64, $60); + ak:= inb($64); outb($60, status); + ak:= inb($60); end; procedure hook(hook_method : uint32); diff --git a/src/kernel.pas b/src/kernel.pas index ed1b2ea3..c207afd8 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -69,6 +69,7 @@ begin console.writestringlnex('GDT: LOAD FAIL.', console.combinecolors(Red, Black)); halt_and_catch_fire; end; + idt.init(); isr.init(); irq.init(); @@ -79,7 +80,6 @@ begin scheduler.init(); //asm INT 13 end; - STI; isr32.hook(uint32(@bios_data_area.tick_update)); diff --git a/src/system.pas b/src/system.pas index d652cb9e..4f3f3ae0 100644 --- a/src/system.pas +++ b/src/system.pas @@ -66,10 +66,13 @@ type UBit30 = 0..(1 shl 30) - 1; TBitMask = bitpacked record - b7,b6,b5,b4,b3,b2,b1,b0 : Boolean; + b0,b1,b2,b3,b4,b5,b6,b7 : Boolean; end; PBitMask = ^TBitMask; + TMask = bitpacked array[0..7] of Boolean; + PMask = ^TMask; + implementation end.