program soundblaster;
uses crt;

procedure ausgabe(regi, wert : integer);
  begin
    port[$228]:=regi;
    delay(10);
    port[$229]:=wert;
    delay(10);
  end;

procedure status(zahl:byte);
  var z,i: byte;
  begin
    z:=128;
    for i:=1 to 8 do
      begin
       if zahl and z = z then write(1)
                          else write(0);
       z:=z div 2;
      end;
    writeln;
  end;

begin
  status(port[$022C]);
  status(port[$022D]);
  status(port[$022E]);
  port[$0226]:=1;
  delay(1);
  {port[$022D]:=$D1; }
  status(port[$0388]);
  delay(1);
  status(port[$022C]);
  status(port[$022D]);
  status(port[$022E]);
  delay(1);
  ausgabe($01, $20);
  writeln('Adresse 1: waveselect enable');
  ausgabe($02, $00); ausgabe($03, $00); ausgabe($04, $00);
  writeln('Adressen 2-4: Timer off');
  ausgabe($08, $00);
  writeln('Adresse 8 =0');
  ausgabe($23, $00); ausgabe($20, $00);
  writeln('Adresse 20H/23H: diverse Operatoreneinstellung=$00');
  ausgabe($43, $00); ausgabe($40, $00);
  writeln('Adresse 40H/43H: Operatoreneinstellung=$01 Lautst„rke');
  ausgabe($63, $77); ausgabe($60, $77);
  writeln('Adresse 60H/63H: Operatoreneinstellung=$77 (Attack, Decay');
  ausgabe($83, $07); ausgabe($80, $07);
  delay(1);
  writeln('Adresse 80H/83H: Operatoreneinstellung=$07 (Substain, Release)');
  ausgabe($BD, $00);
  writeln('Adresse $BD:=$00 -> Percussion aus');

  ausgabe($E3, $00); ausgabe($E0, $00);
  writeln('Adresse $E3:=$00 -> Waveselect Sinus');
  ausgabe($A3, $81); ausgabe($A0, $81);
  writeln('untere Frequenzkanal : $81 (d)');
  ausgabe($B3, $29); ausgabe($B0, $29);
  writeln('Ton wird gespielt');
  ausgabe($C3, $11); ausgabe($C0, $11);
  writeln('Adresse $C0/$C3=$21 -> Ausgabe Mono Kanal A, additive Synthese');

  delay(3000);
  ausgabe($B3, $09); ausgabe($B3, $09);
  ausgabe($A3, $00); ausgabe($A0, $00);
  writeln('Ton ende');
  delay(1);
  port[$02C]:=$D3;
  delay(1);
  port[$0226]:=0;
  {writeln;        (* Adlib *)
  status(port[$0388]);
  writeln;
  status(port[$0388]);}
end.