Metropoli BBS
VIEWER: assy.pas MODE: TEXT (CP437)
Program DMAtest;
Uses Crt;
Const
DSPResetPort = $226;
DSPInDataPort = $22A;
DSPOutDataPort = $22C;
DSPDataavailablePort = $22E;
Var
y,x,s,ready,laskuri:byte;

Procedure Lataa_kappale;
var
   xd:Word;
   xse:byte;
   fse:File of Byte;
Begin
 Assign(fse,'army.voc');
    {$I-}
 Reset (fse);
    {$I+}
 IF IOresult=0 Then Begin
  For xd:=0 To 64500 Do Begin
   Read(fse,xse);
   Mem[$7000:xd]:=xse; { Load sample to 7000:0000-7000:FFFF }
  End;
  xd:=0;
  Repeat
   Read(fse,xse);
   Mem[$8000:xd]:=xse;
   xd:=xd+1;
  Until Eof(fse);
(*    For xd:=0 To 65535 Do
             begin
              read(fse,xse);
               mem[$8000:xd]:=xse;
           end;*)
  Close(fse);
 End;
End;



Procedure WaitForDSPReady;
Begin
Repeat Until Port[DSPOutDataPort]=127;
{ Odotetaan, kunnes portti on valmis seuraavan }
{ byten kirjoittamista varten                  }
{ Wait, until blaster is ready to receiver data}
End;


BEGIN
y:=0;
s:=1;
clrscr;
gotoxy(1,10);
Writeln('         Wait a moment ! I''''ll load Saddam Husseins favourite song :
Lataa_kappale;
Clrscr;
Gotoxy(1,3);
Writeln('        Thank`s to Remco De.Berk (for nothing?), but he gives to me');
Writeln('            idea, how I still can program without ANY DRIVERS.    ');
Writeln('             However, I think, that Remco help me some way ');
Writeln('                    to make musik with samples :>');
Writeln('                    Sorry my miserable english :>');

Repeat;
Delay(3);
Port[DSPResetPort]:=1;   { Nämä kaksi porttikäskyä resetoivat Blasterin       }
Delay(3);        { This three lines make reset to Blaster             }
Port[DSPResetPort]:=0;
Repeat
 ready:=Port[DSPInDataPort];
 laskuri:=laskuri+1;
Until (ready=$AA) Or (laskuri=110);
If laskuri=110 Then Begin
 Writeln ('DSP reset error');
 Halt (1);
End;

WaitforDSPReady;
Port[$22C]:=$D1; { Tällä kytketään D/A kajari päälle. Default OFF     }
                      { Turn D/A Speaker ON                                }

Port[$0A]:=5;
{ Maskataan I/O Portti  rekisteri käyttöön  }

Port[$0C]:=0;
{Nollataan byte pointteri}

Port[$0B]:=$49;
{Asetetaan siirtämään muistista SB:lle, SB:stä mistiin ois 45}

Port[$02]:=0;
{Base Address, LSB}
Port[$02]:=0;
{MSB}

If y=0 Then port[$83]:=$7;
If y=1 Then port[$83]:=$8;
Inc(y);
If y>1 Then y:=0;
{ Page location in memory. Example page 7 request}
{memory 7000:0000 - 7000:FFFF                       }


Port[$03]:=$FE;  { Samplen pituus Low-byte ja sitten High-byte        }
Port[$03]:=$FF;  { Length of sample Low-byt. then high byte           }


Port[$0A]:=1;
{Kanava 1 Päälle}

{Dma valmiina}

Port[$22C]:=$40; { Asetetaan nopeus                                   }
WaitForDspReady;             { Speed setting
If s<3 Then port[$22C]:=$13;
If s>2 Then port[$22C]:=$18;
Inc(s);
If s>4 Then s:=1;

WaitForDSPReady;


Port[$22C]:=$14; { Asetetaan aivan vastaavalla tavalla, kuin edellä   }
WaitForDSPReady;             { myös DSP:lle tieto pituudesta +1
Port[$22C]:=$FF; { As Dma length.......Length inform. to Dsp +1 byte  }
WaitForDSPReady;
Port[$22C]:=$FF;


     {ja sitten pitäis jo tuon edellisen jälkeen jotain kuuluakkin :) }
     { Right now, you should hear something :)                        }


     WaitForDSPReady;
     gotoxy(1,10);
     textcolor(green);
     Writeln('                 If you dont like listen anything, press Q, ');
     Writeln('                 but if you want heard something, press SPACE :>
     Writeln('                 This is the most popular band in finland ');
     gotoxy(1,20);
     textcolor(lightcyan);
     writeln('           Demo source code for PASCAL to play digital sounds !!!
     writeln('        If you want this SOURCE, call +358-0-3462586 and yell the
     writeln('        I would give everyone this source. It`s so easy to progra
     writeln('        and DSP :>. Bye from TÖÖT-TG HST (WITHOUT DUAL STANDARD)
     writeln('    Jari Kaija c/o Husu Marjatta, Palovartijantie 9-11 D 47, 0075
     writeln('                                F I N L A N D ');
     write  (' Some modifications (didn't wirk before 'em by Black
     Hole/Proxima');


  repeat until keypressed;

     port[$22C]:=$D3; { Suljetaan kajari. Close speaker }


     { DMA END START. "RESET DMA" }

Port[$0A]:=5;
Port[$0C]:=0;
Port[$0A]:=0;

     { END OF DMA END }


Until upcase(readkey)=#81;
Textbackground(black);
Clrscr;
End.
[ RETURN TO DIRECTORY ]