[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{
Yesterday I saw Bas' plasma routine. Real nice! But... a little slow I thought
so I improved it. Another thing, Bas, the bouble buffer didn't work on my
et4000, the bplptr never changed in your mode.
Well, enjoy this new routine!
}
program plasma;
{ bigscreenplasma, by Bas van Gaalen & Sven van Heel, Holland, PD }
{ Improved by GEM, Sweden (convertion to asm --> many times faster) }
uses
crt;
const
vidseg:word=$a000;
var
stab1,stab2:array[0..255+80] of byte;
x:word;
procedure setpal(c,r,g,b:byte); assembler;
asm
mov dx,3c8h
mov al,[c]
out dx,al
inc dx
mov al,[r]
out dx,al
mov al,[g]
out dx,al
mov al,[b]
out dx,al
end;
begin
asm
mov ax,0013h
int 10h
mov dx,03c4h
mov ax,0604h
out dx,ax
mov dx,03d4h
mov ax,4609h
out dx,ax
mov ax,0014h
out dx,ax
mov ax,0e317h
out dx,ax
mov es,vidseg
xor di,di
xor ax,ax
mov cx,16000
rep stosw
end;
for x:=0 to 63 do begin
setpal(x,x div 4,x div 2,x);
setpal(127-x,x div 4,x div 2,x);
setpal(127+x,20+x div 4,x div 2,x);
setpal(254-x,20+x div 4,x div 2,x);
end;
for x:=0 to 255+80 do begin
stab1[x]:=round(sin(2*pi*x/255)*128)+128;
stab2[x]:=round(cos(2*pi*x/255)*128)+128;
end;
asm
mov cl,50
mov ch,90
mov es,vidseg
push bp
@main:
{ mov dx,3c8h (* For checking rastertime *)
xor al,al
out dx,al
inc dx
out dx,al
out dx,al
out dx,al}
mov dx,3dah
@vert1:
in al,dx
test al,8
jz @vert1
@vert2:
in al,dx
test al,8
jnz @vert2
mov dx,3dah (* This is kinda rediculous! *)
@vert1b: (* I have to insert another vbl to slow it down.... *)
in al,dx
test al,8
jz @vert1b
@vert2b:
in al,dx
test al,8
jnz @vert2b
{ mov dx,3c8h (* For checking rastertime *)
xor al,al
out dx,al
mov al,30
inc dx
out dx,al
out dx,al
out dx,al}
inc cl
inc ch
xor di,di
mov bp,di
@loooooop:
mov si,offset stab1
mov bx,bp
add bl,cl
mov dl,[si+bx]
xor dh,dh
mov bl,ch
mov al,[si+bx]
add si,dx
mov bx,bp
add bl,al
mov bl,[bx+offset stab2]
mov bh,bl
mov dx,40
@again:
lodsw
add ax,bx
stosw
dec dx
jnz @again
cmp si,offset stab1[256]
jb @1
sub si,256
@1:
inc bp
cmp bp,58
jne @loooooop
in al,60h
cmp al,1
jne @main
pop bp
end;
textmode(lastmode);
end.
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]