home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / GFXFX2.ZIP / COPPER3.PAS < prev    next >
Pascal/Delphi Source File  |  1995-02-14  |  1KB  |  65 lines

  1.  
  2. {$define fast}
  3.  
  4. { 'fast' for fast computers (386dx/40,
  5.   delete for slow computers (worse) }
  6.  
  7. program copper; { COPPER3.PAS }
  8. { Real-time color-mix-copper, by Bas van Gaalen }
  9. uses u_vga,u_kb;
  10.  
  11. {$ifdef fast}
  12. const size=360; amp=148;
  13. {$else}
  14. const size=250; amp=93;
  15. {$endif}
  16.  
  17. const step=15; bars=3;
  18. var
  19.   pal:array[0..3*size-1] of byte;
  20.   stab:array[0..255] of word;
  21.   bartab:array[0..bars-1] of word;
  22.  
  23. procedure createtab; var i:byte; begin
  24.   for i:=0 to 255 do stab[i]:=round(sin(2*pi*i/255)*amp)+amp; end;
  25.  
  26. procedure movebars;
  27. var n,i:word;
  28. begin
  29.   fillchar(pal,3*size,0);
  30.   for n:=0 to bars-1 do begin
  31.     for i:=0 to 31 do pal[n mod 3+3*stab[bartab[n]]+3*i]:=2*i;
  32.     for i:=0 to 31 do pal[n mod 3+3*stab[bartab[n]]+3*32+3*i]:=63-2*i;
  33.     bartab[n]:=1+bartab[n] mod 255;
  34.   end;
  35. end;
  36.  
  37. procedure copperbars;
  38. var cc,l:word;
  39. begin
  40.   asm cli end;
  41.   vretrace;
  42.   cc:=0;
  43.   for l:=0 to size-1 do begin
  44.     port[$3c8]:=0;
  45.     port[$3c9]:=pal[cc];
  46.     port[$3c9]:=pal[cc+1];
  47.     while (port[$3da] and 1)<>0 do;
  48.     while (port[$3da] and 1)=0 do;
  49.     port[$3c9]:=pal[cc+2];
  50.     inc(cc,3);
  51.   end;
  52.   asm sti end;
  53. end;
  54.  
  55. var i:byte;
  56. begin
  57.   fillchar(pal,sizeof(pal),0);
  58.   for i:=0 to bars-1 do bartab[i]:=step*i;
  59.   createtab;
  60.   repeat
  61.     movebars;
  62.     copperbars;
  63.   until keypressed;
  64. end.
  65.