diff --git a/Asuro.iso b/Asuro.iso index b25b3ee6..8b3c9d43 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 4c1678fc..f3cf6967 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 4c1678fc..f3cf6967 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/BIOS_DATA_AREA.ppu b/lib/BIOS_DATA_AREA.ppu new file mode 100644 index 00000000..b2095c80 Binary files /dev/null and b/lib/BIOS_DATA_AREA.ppu differ diff --git a/lib/bda.ppu b/lib/bda.ppu index bef3d522..0667234e 100644 Binary files a/lib/bda.ppu and b/lib/bda.ppu differ diff --git a/lib/console.o b/lib/console.o index 37ff6869..b1cb47ee 100644 Binary files a/lib/console.o and b/lib/console.o differ diff --git a/lib/console.ppu b/lib/console.ppu index 3a17f7a5..0de019db 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/kernel.o b/lib/kernel.o index 1facbaa3..b3c9bf50 100644 Binary files a/lib/kernel.o and b/lib/kernel.o differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 8e3985f5..b9d2c6cc 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/util.ppu b/lib/util.ppu index b20dd8ed..00fb1bce 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/src/bda.pas b/src/BIOS_DATA_AREA.pas similarity index 92% rename from src/bda.pas rename to src/BIOS_DATA_AREA.pas index bb406ec9..b0c269d9 100644 --- a/src/bda.pas +++ b/src/BIOS_DATA_AREA.pas @@ -1,4 +1,4 @@ -unit bda; +unit BIOS_DATA_AREA; interface @@ -25,6 +25,9 @@ type end; PBDA = ^TBDA; +const + BDA : PBDA = PBDA($0400); + implementation end. diff --git a/src/console.pas b/src/console.pas index 730965e0..2215bfe6 100644 --- a/src/console.pas +++ b/src/console.pas @@ -3,7 +3,8 @@ unit console; interface uses - util, bda; + util, + BIOS_DATA_AREA; type TColor = ( Black = $0, @@ -23,37 +24,37 @@ type lYellow = $E, lWhite = $F ); -procedure console_init(); -procedure console_clear(); -procedure console_setdefaultattribute(attribute : char); +procedure init(); +procedure clear(); +procedure setdefaultattribute(attribute : char); -procedure console_writechar(character : char); -procedure console_writestring(str: PChar); -procedure console_writeint(i: Integer); -procedure console_writeword(i: DWORD); +procedure writechar(character : char); +procedure writestring(str: PChar); +procedure writeint(i: Integer); +procedure writeword(i: DWORD); -procedure console_writecharln(character : char); -procedure console_writestringln(str: PChar); -procedure console_writeintln(i: Integer); -procedure console_writewordln(i: DWORD); +procedure writecharln(character : char); +procedure writestringln(str: PChar); +procedure writeintln(i: Integer); +procedure writewordln(i: DWORD); -procedure console_writecharex(character : char; attributes : char); -procedure console_writestringex(str: PChar; attributes : char); -procedure console_writeintex(i: Integer; attributes : char); -procedure console_writewordex(i: DWORD; attributes : char); +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 console_writecharlnex(character : char; attributes : char); -procedure console_writestringlnex(str: PChar; attributes : char); -procedure console_writeintlnex(i: Integer; attributes : char); -procedure console_writewordlnex(i: DWORD; attributes : char); +procedure writecharlnex(character : char; attributes : char); +procedure writestringlnex(str: PChar; attributes : char); +procedure writeintlnex(i: Integer; attributes : char); +procedure writewordlnex(i: DWORD; attributes : char); -function console_combinecolors(Foreground, Background : TColor) : char; +function combinecolors(Foreground, Background : TColor) : char; -procedure _console_increment_x(); -procedure _console_increment_y(); -procedure _console_safeincrement_y(); -procedure _console_safeincrement_x(); -procedure _console_newline(); +procedure _increment_x(); +procedure _increment_y(); +procedure _safeincrement_y(); +procedure _safeincrement_x(); +procedure _newline(); implementation @@ -85,13 +86,13 @@ var Console_Matrix : P2DVideoMemory = P2DVideoMemory($b8000); Console_Cursor : TCoord; -procedure console_init(); [public, alias: 'console_init']; +procedure init(); [public, alias: 'console_init']; Begin - Console_Properties.Default_Attribute:= console_combinecolors(White, Black); - console_clear(); + Console_Properties.Default_Attribute:= console.combinecolors(White, Black); + console.clear(); end; -procedure console_clear(); [public, alias: 'console_clear']; +procedure clear(); [public, alias: 'console_clear']; var x,y: Byte; @@ -106,71 +107,71 @@ begin Console_Cursor.Y:= 0; end; -procedure console_setdefaultattribute(attribute: char); [public, alias: 'console_setdefaultattribute']; +procedure setdefaultattribute(attribute: char); [public, alias: 'console_setdefaultattribute']; begin Console_Properties.Default_Attribute:= attribute; end; -procedure console_writechar(character: char); [public, alias: 'console_writechar']; +procedure writechar(character: char); [public, alias: 'console_writechar']; begin - console_writecharex(character, Console_Properties.Default_Attribute); + console.writecharex(character, Console_Properties.Default_Attribute); end; -procedure console_writestring(str: PChar); [public, alias: 'console_writestring']; +procedure writestring(str: PChar); [public, alias: 'console_writestring']; begin - console_writestringex(str, Console_Properties.Default_Attribute); + console.writestringex(str, Console_Properties.Default_Attribute); end; -procedure console_writeint(i: Integer); [public, alias: 'console_writeint']; +procedure writeint(i: Integer); [public, alias: 'console_writeint']; begin - console_writeintex(i, Console_Properties.Default_Attribute); + console.writeintex(i, Console_Properties.Default_Attribute); end; -procedure console_writeword(i: DWORD); [public, alias: 'console_writeword']; +procedure writeword(i: DWORD); [public, alias: 'console_writeword']; begin - console_writewordex(i, Console_Properties.Default_Attribute); + console.writewordex(i, Console_Properties.Default_Attribute); end; -procedure console_writecharln(character: char); [public, alias: 'console_writecharln']; +procedure writecharln(character: char); [public, alias: 'console_writecharln']; begin - console_writecharlnex(character, Console_Properties.Default_Attribute); + console.writecharlnex(character, Console_Properties.Default_Attribute); end; -procedure console_writestringln(str: PChar); [public, alias: 'console_writestringln']; +procedure writestringln(str: PChar); [public, alias: 'console_writestringln']; begin - console_writestringlnex(str, Console_Properties.Default_Attribute); + console.writestringlnex(str, Console_Properties.Default_Attribute); end; -procedure console_writeintln(i: Integer); [public, alias: 'console_writeintln']; +procedure writeintln(i: Integer); [public, alias: 'console_writeintln']; begin - console_writeintlnex(i, Console_Properties.Default_Attribute); + console.writeintlnex(i, Console_Properties.Default_Attribute); end; -procedure console_writewordln(i: DWORD); [public, alias: 'console_writewordln']; +procedure writewordln(i: DWORD); [public, alias: 'console_writewordln']; begin - console_writewordlnex(i, Console_Properties.Default_Attribute); + console.writewordlnex(i, Console_Properties.Default_Attribute); end; -procedure console_writecharex(character: char; attributes: char); [public, alias: 'console_writecharex']; +procedure writecharex(character: char; attributes: char); [public, alias: 'console_writecharex']; begin Console_Matrix^[Console_Cursor.Y][Console_Cursor.X].Character:= character; Console_Matrix^[Console_Cursor.Y][Console_Cursor.X].Attributes:= attributes; - _console_safeincrement_x(); + console._safeincrement_x(); end; -procedure console_writestringex(str: PChar; attributes: char); [public, alias: 'console_writestringex']; +procedure writestringex(str: PChar; attributes: char); [public, alias: 'console_writestringex']; var i : integer; begin i:= 0; while (str[i] <> #0) do begin - console_writecharex(str[i], attributes); + console.writecharex(str[i], attributes); i:=i+1; end; end; -procedure console_writeintex(i: Integer; attributes : char); [public, alias: 'console_writeintex']; +procedure writeintex(i: Integer; attributes : char); [public, alias: 'console_writeintex']; var buffer: array [0..11] of Char; str: PChar; @@ -195,10 +196,10 @@ begin Dec(str); str^ := '-'; end; - console_writestringex(str, attributes); + console.writestringex(str, attributes); end; -procedure console_writewordex(i: DWORD; attributes : char); [public, alias: 'console_writedwordex']; +procedure writewordex(i: DWORD; attributes : char); [public, alias: 'console_writedwordex']; var buffer: array [0..11] of Char; str: PChar; @@ -213,39 +214,39 @@ begin str^ := Char((digit mod 10) + Byte('0')); digit := digit div 10; until (digit = 0); - console_writestringex(@Buffer[0], attributes); + console.writestringex(@Buffer[0], attributes); end; -procedure console_writecharlnex(character: char; attributes: char); [public, alias: 'console_writecharlnex']; +procedure writecharlnex(character: char; attributes: char); [public, alias: 'console_writecharlnex']; begin - console_writecharex(character, attributes); - _console_safeincrement_y(); + console.writecharex(character, attributes); + console._safeincrement_y(); end; -procedure console_writestringlnex(str: PChar; attributes: char); [public, alias: 'console_writestringlnex']; +procedure writestringlnex(str: PChar; attributes: char); [public, alias: 'console_writestringlnex']; begin - console_writestringex(str, attributes); - _console_safeincrement_y(); + console.writestringex(str, attributes); + console._safeincrement_y(); end; -procedure console_writeintlnex(i: Integer; attributes: char); [public, alias: 'console_writeintlnex']; +procedure writeintlnex(i: Integer; attributes: char); [public, alias: 'console_writeintlnex']; begin - console_writeintex(i, attributes); - _console_safeincrement_y(); + console.writeintex(i, attributes); + console._safeincrement_y(); end; -procedure console_writewordlnex(i: DWORD; attributes: char); [public, alias: 'console_writewordlnex']; +procedure writewordlnex(i: DWORD; attributes: char); [public, alias: 'console_writewordlnex']; begin - console_writewordex(i, attributes); - _console_safeincrement_y(); + console.writewordex(i, attributes); + console._safeincrement_y(); end; -function console_combinecolors(Foreground, Background: TColor): char; [public, alias: 'console_combinecolors']; +function combinecolors(Foreground, Background: TColor): char; [public, alias: 'console_combinecolors']; begin - console_combinecolors:= char(((ord(Background) shl 4) or ord(Foreground))); + combinecolors:= char(((ord(Background) shl 4) or ord(Foreground))); end; -procedure _console_update_cursor(); [public, alias: '_console_update_cursor']; +procedure _update_cursor(); [public, alias: '_console_update_cursor']; var pos : word; b : byte; @@ -260,44 +261,44 @@ begin outb($3D5, b); end; -procedure _console_increment_x(); [public, alias: '_console_increment_x']; +procedure _increment_x(); [public, alias: '_console_increment_x']; begin Console_Cursor.X:= Console_Cursor.X+1; If Console_Cursor.X > 79 then Console_Cursor.X:= 0; - _console_update_cursor; + console._update_cursor; end; -procedure _console_increment_y(); [public, alias: '_console_increment_y']; +procedure _increment_y(); [public, alias: '_console_increment_y']; begin Console_Cursor.Y:= Console_Cursor.Y+1; If Console_Cursor.Y > 24 then begin - _console_newline(); + console._newline(); Console_Cursor.Y:= 24; end; - _console_update_cursor; + console._update_cursor; end; -procedure _console_safeincrement_x(); [public, alias: '_console_safeincrement_x']; +procedure _safeincrement_x(); [public, alias: '_console_safeincrement_x']; begin Console_Cursor.X:= Console_Cursor.X+1; If Console_Cursor.X > 79 then begin - _console_safeincrement_y(); + console._safeincrement_y(); end; - _console_update_cursor; + console._update_cursor; end; -procedure _console_safeincrement_y(); [public, alias: '_console_safeincrement_y']; +procedure _safeincrement_y(); [public, alias: '_console_safeincrement_y']; begin Console_Cursor.Y:= Console_Cursor.Y+1; If Console_Cursor.Y > 24 then begin - _console_newline(); + console._newline(); Console_Cursor.Y:= 24; end; Console_Cursor.X:= 0; - _console_update_cursor; + console._update_cursor; end; -procedure _console_newline(); [public, alias: '_console_newline']; +procedure _newline(); [public, alias: '_console_newline']; var x, y : byte; @@ -311,7 +312,7 @@ begin Console_Matrix^[24][x].Character:= #0; Console_Matrix^[24][x].Attributes:= #7; end; - _console_update_cursor + console._update_cursor end; end. diff --git a/src/kernel.pas b/src/kernel.pas index 5924d188..61e2373a 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -3,50 +3,41 @@ unit kernel; interface uses - multiboot, - console, - bda; + multiboot, + util, + console, + BIOS_DATA_AREA; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; implementation -procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; [public, alias: 'kmain']; -var - _bda : PBDA; - +procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; [public, alias: 'kmain']; begin - _bda:= PBDA($0400); - console_init(); - console_writestringln('Booting Asuro...'); + console.init(); + console.writestringln('Booting Asuro...'); if (mbmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then begin - console_setdefaultattribute(console_combinecolors(Red, Black)); - console_writestringln('Multiboot Compliant Boot-Loader Needed!'); - console_writestringln('HALTING'); - asm - cli - hlt - end; - end; - console_clear(); - console_setdefaultattribute(console_combinecolors(Green, Black)); - console_writestringln('Asuro Booted Correctly!'); - console_writestringln(''); - console_setdefaultattribute(console_combinecolors(White, Black)); - console_writestring('Lower Memory = '); - console_writeint(mbinfo^.mem_lower); - console_writestringln('KB'); - console_writestring('Higher Memory = '); - console_writeint(mbinfo^.mem_upper); - console_writestringln('KB'); - console_writestring('Total Memory = '); - console_writeint(((mbinfo^.mem_upper + 1000) div 1024) +1); - console_writestringln('MB'); - console_setdefaultattribute(console_combinecolors(lYellow, Black)); - asm - cli - hlt + 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.setdefaultattribute(console.combinecolors(Green, Black)); + console.writestringln('Asuro Booted Correctly!'); + console.writestringln(''); + console.setdefaultattribute(console.combinecolors(White, Black)); + console.writestring('Lower Memory = '); + console.writeint(mbinfo^.mem_lower); + console.writestringln('KB'); + console.writestring('Higher Memory = '); + console.writeint(mbinfo^.mem_upper); + console.writestringln('KB'); + console.writestring('Total Memory = '); + console.writeint(((mbinfo^.mem_upper + 1000) div 1024) +1); + console.writestringln('MB'); + console.setdefaultattribute(console.combinecolors(lYellow, Black)); + util.halt_and_catch_fire; end; end. diff --git a/src/util.pas b/src/util.pas index 298a8a92..27aea650 100644 --- a/src/util.pas +++ b/src/util.pas @@ -4,28 +4,29 @@ unit util; interface -function util_hi(b : byte) : byte; -function util_lo(b : byte) : byte; -function util_switchendian(b : byte) : byte; +function hi(b : byte) : byte; +function lo(b : byte) : byte; +function switchendian(b : byte) : byte; procedure outb(port : word; val : byte); procedure outw(port : word; val : word); procedure outl(port : word; val : longword); +procedure halt_and_catch_fire(); implementation -function util_hi(b : byte) : byte; [public, alias: 'util_hi']; +function hi(b : byte) : byte; [public, alias: 'util_hi']; begin - util_hi:= (b AND $F0) SHR 4; + hi:= (b AND $F0) SHR 4; end; -function util_lo(b : byte) : byte; [public, alias: 'util_lo']; +function lo(b : byte) : byte; [public, alias: 'util_lo']; begin - util_lo:= b AND $0F; + lo:= b AND $0F; end; -function util_switchendian(b : byte) : byte; [public, alias: 'util_switchendian']; +function switchendian(b : byte) : byte; [public, alias: 'util_switchendian']; begin - util_switchendian:= (util_lo(b) SHL 4) OR util_hi(b); + switchendian:= (lo(b) SHL 4) OR hi(b); end; procedure outl(port : word; val : longword); [public, alias: 'outl']; @@ -67,4 +68,12 @@ begin end; end; +procedure halt_and_catch_fire(); [public, alias: 'halt_and_catch_fire']; +begin + asm + cli + hlt + end; +end; + end.