{ Could somebody tell me how to program the FM-voices of my sound-blaster ? Here's a .sbi player for you... } program SBIread; uses Crt; const SBIREG : array[1..11] of Word = ($20,$23,$40,$43,$60,$63,$80,$83,$E0,$E3,$C0); var FromF: file; I: integer; FN: string; NumRead, NumWritten: Word; buf: array[1..2048] of Char; ch: char; IsSBI: boolean; SBIName: string; procedure Bit; begin Delay(1); {something fancier was suggested, but this works fine} end; function CheckSoundCard: boolean; var Temp, Temp2: byte; begin port[$388]:=$4; repeat until Port[$22E] > 127; port[$389]:=$60; repeat until Port[$22E] > 127; port[$389]:=$80; repeat until Port[$22E] > 127; Temp:=port[$388]; port[$388]:=$2; repeat until Port[$22E] > 127; port[$389]:=$FF; repeat until Port[$22E] > 127; port[$388]:=$4; repeat until Port[$22E] > 127; port[$389]:=$21; repeat until Port[$22E] > 127; Delay(1); Temp2:=port[$388]; port[$388]:=$4; repeat until Port[$22E] > 127; port[$389]:=$60; repeat until Port[$22E] > 127; port[$389]:=$80; repeat until Port[$22E] > 127; If ((temp and $E0)=$00) and ((temp2 and $E0)=$c0) then CheckSoundCard:=True else CheckSoundCard:=False; end; procedure ClearCard; var CP: byte; begin For CP:=0 to 255 do begin port[$388]:=CP; port[$389]:=0; end; end; procedure Sounder(A,B: byte); begin port[$388]:=A; Bit; port[$389]:=B; Bit; end; begin Writeln('SBI file player'); if not CheckSoundCard then begin writeln('Soundcard not detected!'); halt(1); end; FN:=ParamStr(1); If Pos('.',FN)=0 then FN:=FN+'.SBI'; Assign(FromF, FN); Reset(FromF, 1); BlockRead(FromF,buf,SizeOf(buf),NumRead); Close(FromF); If (buf[1]='S') and (buf[2]='B') and (buf[3]='I') and (ord(buf[4])=26) then IsSBI:=True else IsSBI:=False; If IsSBI=False then Writeln('Not a SBI file!') else begin SBIName:=''; I:=4; repeat i:=i+1; if (ord(buf[i])<>0) then SBIName:=SBIName+buf[i]; until ord(buf[i])=0; Writeln('Name of file : ',FN); Writeln('Name of instrument: ',SBIName); ClearCard; for i:=1 to 11 do Sounder(SBIreg[i],ord(buf[i+36])); Sounder($A0,$58); Sounder($B0,$31); Delay(900); ClearCard; end; end.