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

    Uses
      Crt; (* Crt Needed For Delay Routine *)

    Function AdlibCard : Boolean;
     (* Routine to determine if a Adlib compatible card is installed *)
    Var
      Val1,Val2 : Byte;
    begin
      Port[$388] := 4;      (* Write 60h to register 4 *)
      Delay(3);             (* Which resets timer 1 and 2 *)
      Port[$389] := $60;
      Delay(23);
      Port[$388] := 4;      (* Write 80h to register 4 *)
      Delay(3);             (* Which enables interrupts *)
      Port[$389] := $80;
      Delay(23);
      Val1 := Port[$388];   (* Read status Byte *)
      Port[$388] := 2;      (* Write ffh to register 2 *)
      Delay(3);             (* Which is also Timer 1 *)
      Port[$389] := $FF;
      Delay(23);
      Port[$388] := 4;      (* Write 21h to register 4 *)
      Delay(3);             (* Which will Start Timer 1 *)
      Port[$389] := $21;
      Delay(85);            (* wait 85 microseconds *)
      Val2 := Port[$388];   (* read status Byte *)
      Port[$388] := 4;      (* Repeat the first to steps *)
      Delay(3);             (* Which will reset both Timers *)
      Port[$389] := $60;
      Delay(23);
      Port[$388] := 4;
      Delay(3);
      Port[$389] := $80;    (* Now test the status Bytes saved *)
      If ((Val1 And $e0) = 0) And ((Val2 And $e0) = $c0) Then
        AdlibCard := True    (* Card was found *)
      Else
        AdlibCard := False;  (* No Card Installed *)
    end;

    begin
      ClrScr;                       (* Clear the Screen *)
      Write(' Adlib Card ');        (* Prepare Response *)
      If AdlibCard Then
        Writeln( 'Found!')           (* There is one *)
      Else
        Writeln('Not Found!');       (* Not! *)
    end.

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