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.