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

    {
    NORBERT IGL

    >> if you already have the DAC Programming, simply Write out each
    >> Byte to the DAC PORT (Write $10, then the data For Direct Mode)
    >> Then Delay after each Byte, depending on the Sampling rate.
    >> You'll have to play around With the Delay's.

      Just found a piece of source in my Files.... (:-)),
      but i don't know the original author ( RedFox ? )
      and i translated the (orig.) german remarks....
    }

    Uses
      Crt;
    Const
      ResetPort  = $226;
      ReadPort   = $22A;
      WritePort  = $22C;
      StatusPort = $22C;
      DataDaPort = $22E;

      { N.I.: Note: Use SB_Port (prev. Msg) to get the correct address.... }

      AD_Null       = $80;
      OK            = 0000;
      NichtGefunden = 1000;
      DirectDAC     = $10;
      SpeakerOn     = $D1;
      SpeakerOff    = $D3;

    Var
      DSPResult   : Word;
      DSPReadWert : Byte;

      loop : Word;
      w    : Word;
      m    : Word;

    Procedure WriteToDSP(Command : Byte);
    begin
      Repeat Until (port[StatusPort] and $80) = 0;
      port[WritePort] := Command;
    end;

    Procedure ReadFromDSP;
    begin
      Repeat Until (port[DataDaPort] and $80) = $80;
      DSPReadWert := port[ReadPort];
    end;

    Procedure ResetDSP;
    Var
      MaxVersuch : Byte;
    begin
      MaxVersuch:=100;
      Repeat
        port[ResetPort] := 1;
        Delay(10);
        port[ResetPort] := 0;
        ReadFromDSP;
        dec(MaxVersuch);
      Until (DSPReadWert = $AA) or (MaxVersuch = 0);

      if MaxVersuch = 0 then
        DSPResult := NichtGefunden
      else
        DSPResult := OK;
    end;

    begin
      ClrScr;

      ResetDSP;

      if DSPResult <> OK then
      begin
        Writeln(' Soundeblaster not found !');
        Writeln(' Wrong SB-address ?');
      end
      else
      begin
        Writeln(' Demo : direct output to the SoundblasterCard !');
        Writeln('  ÚÄÄ¿  ÚÄÄ¿  ÚÄÄ¿  ÚÄÄ¿  ÚÄÄ¿  Ú  creates a square');
        Writeln('  ³  ³  ³  ³  ³  ³  ³  ³  ³  ³  ³  waveform With an');
        Writeln('ÄÄÙ  ÀÄÄÙ  ÀÄÄÙ  ÀÄÄÙ  ÀÄÄÙ  ÀÄÄÙ  64`er amplitude ');
        Writeln;
        Writeln(' RedFox (14.11.91) ');

        WriteToDSP(SpeakerOn);               { Speaker on }

        m := 5000;                           { dynamc Wait (Init) }

        For loop := 1 to 600 do              { 600 samples }
        begin
          dec(m, 10);
          if m < 20 then
            m := 500;
          WriteToDSP(DirectDAC);             { command to SB  }
          WriteToDSP(AD_Null + 32);          { now the sample }

          { rising edge    }
          For w := 1 to m do begin end;      { dynamc wait    }

          WriteToDSP(DirectDAC);             { command to SB  }
          WriteToDSP(AD_Null - 32);          { falling edge   }

          For w := 1 to m do begin end;      { wait again     }
        end;
        WriteToDSP(SpeakerOff);              { speaker off }
      end;
    end.

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