[Back to COMM SWAG index]  [Back to Main SWAG index]  [Original]

{
From: gerhard@loipon.wlink.nl (Gerhard Hoogterp)

> > Anyhow, the point is usualy not which fossil is loaded but
> > if there is a fossil at all. And that's what the $1954 result is for.

>I now realize that $1954 will be returned for either BNU/X00, but I would
>still like to be able to list to screen "which" fossil has been detected,
>and I cannot seem to figure it out.

}
Uses Dos;

Const UsePort      = 0;

Type InfoArray     = Array[0..255] of Char;
     FossilInfo    = Record
      Size         : Word;        { Record Size         }
      MajVer       : Byte;        { Major Version       }
      MinVer       : Byte;        { Minor Version       }
      IndentPtr    : ^InfoArray;  { Indentifier         }
      InpSize      : Word;        { Size inp. Buffer    }
      InpFree      : Word;        { Free in inp. buffer }
      OutBuf       : Word;        { Size out. Buffer    }
      OutFree      : Word;        { Free in out. Buffer }
      SWidth       : Byte;        { Screen width        }
      SHeight      : Byte;        { Screen height       }
     End;

Var Info : FossilInfo;
    C    : Byte;

Procedure InitPort(Port : Word);
Var Regs : Registers;
Begin
With Regs Do
 Begin
 AH:=$04;
 DX := Port;
 Intr($14,Regs);
 If AX<>$1954
    Then Halt;
 End;
End;


Procedure GrabPortInfo(Port : Word);
Var Regs : Registers;
Begin
With Regs Do
 Begin
 AH:=$1B;
 DX:=Port;
 CX:=SizeOf(Info);
 ES:=Seg(Info);
 DI:=Ofs(Info);
 Intr($14,Regs);
 End;
End;


Procedure DonePort(Port : Word);
Var Regs : Registers;
Begin
With Regs Do
 Begin
 AH:=$05;
 DX:=Port;
 Intr($14,Regs);
 End;
End;


Begin
FillChar(Info,SizeOf(Info),#00);

InitPort(UsePort);
GrabPortInfo(UsePort);

WriteLn('Fossil ID:');
Write('  ');

C:=0;
While (C<256) And (Info.IndentPtr^[C]<>#00) Do
 Begin
 Write(Info.IndentPtr^[C]);
 Inc(C);
 End;
Writeln;

DonePort(UsePort);
End.


[Back to COMM SWAG index]  [Back to Main SWAG index]  [Original]