home *** CD-ROM | disk | FTP | other *** search
- {
- 15 minutes ago I suddenly got a idea to a fullscreen plasma (320*200). But
- I have promised my group mates to do no more plasmas so here it is and it
- is all yours. It is not 320*200, because I did not do it in assembler since I
- am not going to use the routine myself, but it should be pretty easy to
- convert.
-
- -+--+--+--- CUT -+--+--+--- }
-
- PROGRAM _320_100_PLASMA;
-
- VAR
- FT :ARRAY [0..511] OF BYTE;
- SINT :ARRAY [0..255] OF BYTE;
- I1,A,B,D,C,OD,COLOR :BYTE;
- X,Y,K,I :WORD;
-
- BEGIN
- {SET 320*200*256}
- ASM
- MOV AX,0013H; INT 10H;
- {THIS THINGGY DOUBLES THE HEIGT OF THE PIXELS}
- mov dx,3d4h
- mov al,9
- out dx,al
- inc dx
- in al,dx
- and al,0e0h
- add al,3
- out dx,al
- END;
-
- {DO PALETTE}
- PORT [$3C8]:=0;
- FOR I:=0 TO 255 DO
- BEGIN
- PORT [$3C9]:=I DIV 4;
- PORT [$3C9]:=I DIV 5;
- PORT [$3C9]:=I DIV 6
- END;
-
- {DO TABLES}
- FOR I:=0 TO 511 DO FT [I]:=ROUND (64+63*SIN (I/40.74));
- FOR I:=0 TO 255 DO SINT [I]:=ROUND (128+127*SIN (I/40.74));
-
- {MAIN LOOP}
- REPEAT
- INC (I1); {GRID COUNTER}
- DEC (C,2);
- INC (OD,1);
- D:=OD;
- FOR Y:=0 TO 100 DO
- BEGIN
- K:=Y*320+Y AND 1; {CALCULATE OFFSET AND ADD ONE EVERY SECOND LINE}
- K:=K-(I1 AND 1)*320; {MOVE GRID ONE PIXEL DOWN EVERY SECOND FRAME}
- INC (D,2);
- A:=SINT [(C+Y) AND 255];
- B:=SINT [(D) AND 255];
- FOR X:=0 TO 159 DO
- BEGIN
- COLOR:=FT [A+B]+FT [Y+B];
- MEM [$A000:K]:=COLOR;
- INC (A,1+COLOR SHR 7);
- INC (B,2); INC (K,2);
- {OFFSET OF PLASMA PIXEL, INCREASED BY TWO TO CREATE THE GRID}
- END;
- END;
- UNTIL PORT [$60]<128; {EXIT IF KEY PRESSED} END.
-