[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]