{ Someone in an Assembly conference posted a routine to determine the version of a Sound Blaster card. I've adapted it for use in TP ... } PROGRAM sb; { Determine Sound Blaster version. TP5+ } { Jul.13.94 Greg Vigneault } USES Dos, { import GetEnv } Crt; { import Delay } VAR Major, Minor : BYTE; { version has major & minor parts } (*-----------------------------------------------------------------*) { this procedure returns 0.0 if any error condition... } PROCEDURE SBver (VAR Maj, Min : BYTE); VAR bev : STRING[32]; { environment string } j,k : WORD; { scratch variables } BEGIN Maj := 0; Min := 0; { initialize } bev := GetEnv('BLASTER'); { look in environment } IF bev[0] = #0 THEN EXIT; { no sign of Blaster } j := Pos('A',bev); { search for i/o port } IF j = 0 THEN EXIT ELSE INC(j); { none? } Val( '$'+Copy(bev,j,3), j, k ); { base port number } IF k <> 0 THEN EXIT; { if bad port value } INC(j,$C); { command port } Port[j] := $E1; { command } DEC(j,2); { input port } Delay(20); { wait for response } Maj := Port[j]; { version major part } Delay(20); { wait for response } Min := Port[j]; { version minor part } END {SBver}; BEGIN SBver (Major, Minor); WriteLn; WriteLn ('Sound Blaster version: ',Major,'.',Minor); WriteLn; END.