home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 25
/
CD_ASCQ_25_1095.iso
/
dos
/
fr
/
smusk
/
sb_dma
/
seqplay
/
seqplay.pas
< prev
Wrap
Pascal/Delphi Source File
|
1995-07-31
|
2KB
|
100 lines
{$R-} {$V-} {$G+}
{$M 9000,0,270000}
PROGRAM SeqPlay;
USES CRT,DOS,SB_DMA;
CONST
Taille_Seq:ARRAY[1..7] OF WORD=(
19976,20104,19976,20104,20104,20104,20040);
spd=2; size=3; curve=125;
Xmax=150 DIV size;
Ymax=100 DIV size;
sofs=50; samp=10; slen=255;
VAR
stab :ARRAY[0..slen] OF WORD;
Chaine:STRING;
Fic :FILE;
i :WORD;
Tmp :Pointer;
Regs :Registers;
PROCEDURE CSin;
VAR i:BYTE;
BEGIN
FOR i:=0 TO slen DO
stab[i]:=Round(Sin(i*4*PI/slen)*samp)+sofs;
END;
PROCEDURE InitSeq;
BEGIN
i:=1;
REPEAT
Str(i,Chaine);
Assign(Fic,'SEQ.'+Chaine);
Reset(Fic,1);
GetMem(s[i],Taille_Seq[i]);
WHILE ((Seg(s[i]^) SHL 4 +Ofs(s[i]^))>44500) DO
BEGIN {pas de chevauchements}
FreeMem(s[i],Taille_Seq[i]); {sur +sieurs segments!}
GetMem(tmp,1); {Le DMA n'aime pas ça...}
GetMem(s[i],Taille_Seq[i]);
END;
BlockRead(Fic,s[i]^,Taille_Seq[i]);
Close(Fic);
Inc(i);
UNTIL ((i>7) OR (IOResult<>0));
AskIRQDMA;
END;
PROCEDURE AfficheMap;
TYPE scrarray=ARRAY[0..Xmax,0..Ymax] OF BYTE;
VAR postab :ARRAY[0..Xmax,0..Ymax] OF WORD;
bitmap :scrarray;
x,y,xp,
yp,sidx :WORD;
BEGIN
Regs.AX:=19;
Intr(16,Regs);
FillChar(bitmap,SizeOf(bitmap),0);
sidx:=0;
FOR x:=0 TO Xmax DO
FOR y:=0 TO (Ymax DIV 2) DO
bitmap[x,y]:=lightred;
FOR x:=0 TO Xmax DO
FOR y:=(Ymax DIV 2) TO 2*(Ymax DIV 2) DO
bitmap[x,y]:=white;
DetectionSBetMixer;
VolMax;
IF Blaster THEN InitPlayBack7(s[1],19976,11000);{ICI ARRIERE-PLAN}
REPEAT
WHILE (Port[$3DA] AND 8)<>0 DO;
WHILE (Port[$3DA] AND 8)=0 DO;
FOR x:=0 TO Xmax DO
FOR y:=Ymax DOWNTO 0 DO
BEGIN
MEM[$A000:PosTab[x,y]]:=0;
xp:=size*x+stab[(sidx+curve*x+curve*y) MOD slen];
yp:=size*y+stab[(sidx+4*x+curve*y+y) MOD slen];
PosTab[x,y]:=30+xp+yp*320;
MEM[$A000:PosTab[x,y]]:=bitmap[x,y];
END;
sidx:=(sidx+spd) MOD slen;
UNTIL KeyPressed;
IF Blaster THEN FinPlayBack7; {ARRET DE LA MUSIQUE}
FOR i:=1 TO 7 DO
FreeMem(s[i],taille_seq[i]);
TextMode(3);
END;
BEGIN
CSin;
InitSeq;
AfficheMap;
END.