Console Fixes & BIOS Interfacing

- Removed some garbage text from startup
- Interface to the BDA added.
- Console Cursor updates added.

git-svn-id: https://spexeah.com:8443/svn/Asuro@13 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
kieron 2017-02-11 19:52:32 +00:00
parent d0ded03fdd
commit d6460dcf61
15 changed files with 98 additions and 11 deletions

BIN
Asuro.iso

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
lib/bda.ppu Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

30
src/bda.pas Normal file
View File

@ -0,0 +1,30 @@
unit bda;
interface
type
TBDA = bitpacked record
COM1 : WORD;
COM2 : WORD;
COM3 : WORD;
COM4 : WORD;
LPT1 : WORD;
LPT2 : WORD;
LPT3 : WORD;
EBDA : WORD;
Hardware_Flags : WORD;
Keyboard_Flags : WORD;
Keyboard_Buffer : ARRAY[0..31] OF BYTE;
Display_Mode : BYTE;
BaseIO : WORD;
Ticks : WORD;
HDD_Count : BYTE;
Keyboard_Start : WORD;
Keyboard_End : WORD;
Keyboard_State : Byte;
end;
PBDA = ^TBDA;
implementation
end.

View File

@ -2,6 +2,9 @@ unit console;
interface interface
uses
util, bda;
type type
TColor = ( Black = $0, TColor = ( Black = $0,
Blue = $1, Blue = $1,
@ -243,15 +246,18 @@ begin
end; end;
procedure _console_update_cursor(); [public, alias: '_console_update_cursor']; procedure _console_update_cursor(); [public, alias: '_console_update_cursor'];
var
pos : word;
b : byte;
begin begin
{asm pos:= (Console_Cursor.Y * 80) + Console_Cursor.X;
MOV AH, $02 outb($3D4, $0F);
MOV BH, $00 b:= pos and $00FF;
MOV DH, Console_Cursor.Y outb($3D5, b);
MOV DL, Console_Cursor.X outb($3D4, $0E);
INT $10 b:= pos shr 8;
end; } outb($3D5, b);
end; end;
procedure _console_increment_x(); [public, alias: '_console_increment_x']; procedure _console_increment_x(); [public, alias: '_console_increment_x'];

View File

@ -4,14 +4,19 @@ interface
uses uses
multiboot, multiboot,
console; console,
bda;
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall;
implementation implementation
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; [public, alias: 'kmain']; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: DWORD); stdcall; [public, alias: 'kmain'];
var
_bda : PBDA;
begin begin
_bda:= PBDA($0400);
console_init(); console_init();
console_writestringln('Booting Asuro...'); console_writestringln('Booting Asuro...');
if (mbmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then begin if (mbmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then begin
@ -23,8 +28,11 @@ begin
hlt hlt
end; end;
end; end;
console_clear();
console_setdefaultattribute(console_combinecolors(Green, Black)); console_setdefaultattribute(console_combinecolors(Green, Black));
console_writestringln('Asuro Booted Correctly!'); console_writestringln('Asuro Booted Correctly!');
console_writestringln('');
console_setdefaultattribute(console_combinecolors(White, Black));
console_writestring('Lower Memory = '); console_writestring('Lower Memory = ');
console_writeint(mbinfo^.mem_lower); console_writeint(mbinfo^.mem_lower);
console_writestringln('KB'); console_writestringln('KB');
@ -34,8 +42,7 @@ begin
console_writestring('Total Memory = '); console_writestring('Total Memory = ');
console_writeint(((mbinfo^.mem_upper + 1000) div 1024) +1); console_writeint(((mbinfo^.mem_upper + 1000) div 1024) +1);
console_writestringln('MB'); console_writestringln('MB');
console_setdefaultattribute(console_combinecolors(Red, Black)); console_setdefaultattribute(console_combinecolors(lYellow, Black));
console_writestringln('Entering Login Queue... You are number #RAN in the Queue.');
asm asm
cli cli
hlt hlt

View File

@ -1,10 +1,15 @@
unit util; unit util;
{$ASMMODE intel}
interface interface
function util_hi(b : byte) : byte; function util_hi(b : byte) : byte;
function util_lo(b : byte) : byte; function util_lo(b : byte) : byte;
function util_switchendian(b : byte) : byte; function util_switchendian(b : byte) : byte;
procedure outb(port : word; val : byte);
procedure outw(port : word; val : word);
procedure outl(port : word; val : longword);
implementation implementation
@ -23,4 +28,43 @@ begin
util_switchendian:= (util_lo(b) SHL 4) OR util_hi(b); util_switchendian:= (util_lo(b) SHL 4) OR util_hi(b);
end; end;
procedure outl(port : word; val : longword); [public, alias: 'outl'];
begin
asm
PUSH EAX
PUSH EDX
MOV DX, port
MOV EAX, val
OUT DX, EAX
POP EDX
POP EAX
end;
end;
procedure outw(port : word; val : word); [public, alias: 'outw'];
begin
asm
PUSH EAX
PUSH EDX
MOV DX, port
MOV AX, val
OUT DX, AX
POP EDX
POP EAX
end;
end;
procedure outb(port : word; val : byte); [public, alias: 'outb'];
begin
asm
PUSH EAX
PUSH EDX
MOV DX, port
MOV AL, val
OUT DX, AL
POP EDX
POP EAX
end;
end;
end. end.