[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]