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   
Pascal/Delphi Source File  |  1995-07-31  |  2KB  |  100 lines

  1. {$R-} {$V-} {$G+}
  2. {$M 9000,0,270000}
  3. PROGRAM SeqPlay;
  4.  
  5. USES CRT,DOS,SB_DMA;
  6.  
  7. CONST
  8.   Taille_Seq:ARRAY[1..7] OF WORD=(
  9.              19976,20104,19976,20104,20104,20104,20040);
  10.   spd=2; size=3; curve=125;
  11.   Xmax=150 DIV size;
  12.   Ymax=100 DIV size;
  13.   sofs=50; samp=10; slen=255;
  14.  
  15. VAR
  16.   stab  :ARRAY[0..slen] OF WORD;
  17.   Chaine:STRING;
  18.   Fic   :FILE;
  19.   i     :WORD;
  20.   Tmp   :Pointer;
  21.   Regs  :Registers;
  22.  
  23.  
  24. PROCEDURE CSin;
  25. VAR i:BYTE;
  26. BEGIN
  27.   FOR i:=0 TO slen DO
  28.     stab[i]:=Round(Sin(i*4*PI/slen)*samp)+sofs;
  29. END;
  30.  
  31.  
  32. PROCEDURE InitSeq;
  33. BEGIN
  34.   i:=1;
  35.   REPEAT
  36.     Str(i,Chaine);
  37.     Assign(Fic,'SEQ.'+Chaine);
  38.     Reset(Fic,1);
  39.     GetMem(s[i],Taille_Seq[i]);
  40.     WHILE ((Seg(s[i]^) SHL 4 +Ofs(s[i]^))>44500) DO
  41.     BEGIN                              {pas  de  chevauchements}
  42.       FreeMem(s[i],Taille_Seq[i]);     {sur  +sieurs  segments!}
  43.       GetMem(tmp,1);                   {Le DMA n'aime pas ça...}
  44.       GetMem(s[i],Taille_Seq[i]);
  45.     END;
  46.     BlockRead(Fic,s[i]^,Taille_Seq[i]);
  47.     Close(Fic);
  48.     Inc(i);
  49.   UNTIL ((i>7) OR (IOResult<>0));
  50.   AskIRQDMA;
  51. END;
  52.  
  53.  
  54. PROCEDURE AfficheMap;
  55. TYPE scrarray=ARRAY[0..Xmax,0..Ymax] OF BYTE;
  56. VAR  postab  :ARRAY[0..Xmax,0..Ymax] OF WORD;
  57.      bitmap  :scrarray;
  58.      x,y,xp,
  59.      yp,sidx :WORD;
  60. BEGIN
  61.   Regs.AX:=19;
  62.   Intr(16,Regs);
  63.   FillChar(bitmap,SizeOf(bitmap),0);
  64.   sidx:=0;
  65.   FOR x:=0 TO Xmax DO
  66.     FOR y:=0 TO (Ymax DIV 2) DO
  67.       bitmap[x,y]:=lightred;
  68.   FOR x:=0 TO Xmax DO
  69.     FOR y:=(Ymax DIV 2) TO 2*(Ymax DIV 2) DO
  70.       bitmap[x,y]:=white;
  71.   DetectionSBetMixer;
  72.   VolMax;
  73.   IF Blaster THEN InitPlayBack7(s[1],19976,11000);{ICI ARRIERE-PLAN}
  74.   REPEAT
  75.     WHILE (Port[$3DA] AND 8)<>0 DO;
  76.     WHILE (Port[$3DA] AND 8)=0  DO;
  77.     FOR x:=0 TO Xmax DO
  78.       FOR y:=Ymax DOWNTO 0 DO
  79.       BEGIN
  80.         MEM[$A000:PosTab[x,y]]:=0;
  81.         xp:=size*x+stab[(sidx+curve*x+curve*y) MOD slen];
  82.         yp:=size*y+stab[(sidx+4*x+curve*y+y) MOD slen];
  83.         PosTab[x,y]:=30+xp+yp*320;
  84.         MEM[$A000:PosTab[x,y]]:=bitmap[x,y];
  85.       END;
  86.     sidx:=(sidx+spd) MOD slen;
  87.   UNTIL KeyPressed;
  88.   IF Blaster THEN FinPlayBack7; {ARRET DE LA MUSIQUE}
  89.   FOR i:=1 TO 7 DO
  90.     FreeMem(s[i],taille_seq[i]);
  91.   TextMode(3);
  92. END;
  93.  
  94.  
  95.  
  96. BEGIN
  97.   CSin;
  98.   InitSeq;
  99.   AfficheMap;
  100. END.