Contributor: SWAG SUPPORT TEAM
program BIOS;
{ Compile in real mode only }
uses
 Dos, Crt;
const
 Coms:array[0..3] of String= ('Com1: ', 'Com2: ', 'Com3: ', 'Com4: ');
 Lpts:array[0..2] of String= ('Lpt1: ', 'Lpt2: ', 'Lpt3: ');
type
 PBios = ^TBios;
 TBios = Record
 SerialPortAdd : Array [0..3] of Word;
 ParallelPortAdd : Array [0..3] of Word;
 EqptFlags : Word;
 MfgrTestFlags : Byte;
 MainMem,
 ExpRam,
 KbdStat : Word;
 KeyPad : Byte;
 KbdBuffHead,
 KbdBuffTail : Word;
 KbdBuff : Array [0..31] of Char;
 SeekStatus,
 MortotStatus,
 MortoCnt,
 DiskError : Byte;
 NECStatus : Array [0..6] of Byte;
 VideoMode : Byte;
 ScrnWidth,
 VideoBufferSize,
 VideoBufferOfs : Word;
 CursorPos : Array [0..7,0..1] of Byte;
 CursorBottom,
 CursorTop,
 ActiveDisplayPage : Byte;
 ActiveDisplayPort : Word;
 CRTModeReg,
 Palette : Byte;
 DataEdgeTimeCount,
 CRCReg : Word;
 LastCharInput : Char;
 Tick : Word;
 Hour : Integer;
 TimerOverFlow,
 BrkStatus : Byte;
 ResetFlag : Word;
 HardDiskStatus : LongInt;
 ParallelTimeout,
 SerialTimeout : Array[0..3] of Byte;
 KbdBufferOfs,
 KbdBufferEnd : Word;
 End;
 AtBios = Record
 Name : Array[0..164] of Char;
 End;
var
 SaveAttr: Byte;
procedure FlushKeyBuffer;
var
 Recpack : registers;
begin
 with recpack do begin
 Ax := (0ドルc shl 8) or 6;
 Dx := 00ドルff;
 end;
 Intr(21,ドルrecpack);
end;
Procedure CursorOff; assembler;
asm
 mov AH, 01ドル;
 mov CH, 20ドル;
 mov CL, 20ドル;
 int 10ドル;
End;
procedure CursorSmall;
Begin
 if LastMode  CO80 then asm
 mov AH, 01ドル;
 mov CH, 12;
 mov CL, 13;
 int 10ドル;
 end else asm;
 mov AH, 01ドル;
 mov CH, 06ドル;
 mov CL, 07ドル;
 int 10ドル;
 end;
end;
function GetHexWord(w: Word): String;
const
 hexChars: array [0..$F] of Char =
 '0123456789ABCDEF';
begin
 GetHexWord := hexChars[Hi(w) shr 4] + hexChars[Hi(w) and $F] +
 hexChars[Lo(w) shr 4] + hexChars[Lo(w) and $F];
end;
procedure WriteXY(X, Y: Integer; S: String);
begin
 GotoXY(X, Y);
 Write(S);
end;
procedure WriteXY2(X, Y: Integer; S: String; W: Word);
begin
 GotoXY(X, Y);
 Write(S);
 Write(W);
end;
procedure WriteXY3(X, Y: Integer; S: String; B: Boolean);
begin
 GotoXY(X, Y);
 Write(S);
 Write(B);
 ClrEOL;
end;
procedure WriteData(Ticks: PBios);
var
 SaveAttr, i: Integer;
begin
 for i := 0 to 3 do
 WriteXY(1, 1 + i, Coms[i] + GetHexWord(Ticks^.SerialPortAdd[i]));
 for i := 0 to 2 do
 WriteXY(1, 6 + i, Lpts[i] + GetHexWord(Ticks^.ParallelPortAdd[i]));
 WriteLn;
 WriteXY2(1, 10, 'VideoMode: ', Ticks^.VideoMode);
 WriteXY2(1, 11, 'Dos Mem: ', Ticks^.MainMem);
 WriteXY(1, 12, 'Video Card Port Addresss: ' + GetHexWord(Ticks^.ActiveDisplayPort));
 WriteXY2(1, 13, 'Tick: ', Ticks^.Tick);
 WriteXY2(1, 14, 'Hour: ', Ticks^.Hour);
 WriteXY2(1, 15, 'Break Status: ', Ticks^.BrkStatus);
 WriteXY2(1, 16, 'Palette: ', Ticks^.Palette);
 WriteXY3(1, 18, 'Right Shift: ', 0  Ticks^.KbdStat and 1);
 WriteXY3(1, 19, 'Left Shift: ', 0  Ticks^.KbdStat and 2);
 WriteXY3(1, 20, 'Ctrl : ', 0  Ticks^.KbdStat and 4);
 WriteXY3(1, 21, 'Alt: ', 0  Ticks^.KbdStat and 8);
 WriteXY3(1, 22, 'Scroll Lock: ', 0  Ticks^.KbdStat and 16);
 WriteXY3(1, 23, 'Num Lock: ', 0  Ticks^.KbdStat and 32);
 WriteXY3(1, 24, 'Caps Lock: ', 0  Ticks^.KbdStat and 64);
{ WriteXY3(1, 24, 'Insert: ', 0  Ticks^.KbdStat and 128); }
 GotoXY(1,25);
 SaveAttr := TextAttr;
 TextAttr := 0 + 7 * 16;
 Write(' Press Shift, Alt, Caps Lock, etc, to see status of keys' +
 '-- Any key to exit ');
 TextAttr := SaveAttr;
end;
procedure Opening;
begin
 SaveAttr := TextAttr;
 TextAttr := 7 + 1 * 16;
 ClrScr;
 GotoXY(1,25);
 TextAttr := 0 + 7 * 16;
 ClrEOL;
 TextAttr := 11 + 1 * 16;
 CursorOff;
end;
var
 Sel : Word;
 Ticks: PBios;
{ Ticks : TBios Absolute Seg0040; }
begin
 Opening;
 Ticks := Ptr(0000,ドル 0400ドル);
 repeat
 WriteData(Ticks);
 until KeyPressed;
 CursorSmall;
 FlushKeyBuffer;
 TextAttr := SaveAttr;
end.


AltStyle によって変換されたページ (->オリジナル) /