Скачать Short Fire Routine for Mode 13h

31.05.1995
Скачать файл (1,39 Кб)




USES CRT, DOS;
 
 
 
CONST
 
     YMAX = 50;
     YMIN = 0;
     XMAX = 317;
     XMIN = 2;
     maxc = 1;
 
VAR
 
   X,Y,Z  : WORD;
   TOTAL  : WORD;
   A,B,C  : LONGINT;
   I      : WORD;
   SCREEN : ARRAY[1..64000] OF BYTE;
   ST, ET : REAL;
   CYCLES : LONGINT;
 
PROCEDURE CT(VAR MOO:REAL);
VAR
   H,M,S,MS : WORD;
 
BEGIN
     GETTIME(H,M,S,MS);
     MOO:=H*3600+M*60+S+MS DIV 100;
END;
 
procedure setcolor(color,r,g,b : byte);
begin
     port[$3c8]:=color;
     port[$3c9]:=r;
     port[$3c9]:=g;
     port[$3c9]:=b;
end;
BEGIN
     RANDOMIZE;
     ASM MOV AX, 13H; INT 10H; END;
     asm
        mov dx, 03d4h
        mov al, 9
        out dx, al
        inc dx
        and al, 0e0h
        or  al, 7
        out dx, al
     end;
  for i:=0 to 63 do setcolor(i,0,0,0);
  for i:=0 to 63 do setcolor(64+i,0,0,0);
  for i:=0 to 63 do setcolor(128+i,i,i shr 1,0);
  for i:=0 to 63 do setcolor(192+i,63,32+i shr 1,0);
 
  FILLCHAR(SCREEN, 64000, 0);
 
     WHILE KEYPRESSED DO READKEY;
     CT(ST);
     CYCLES:=0;
     REPEAT
           MOVE(SCREEN, MEM[$A000:0], 64000);
           FOR Y:=YMAX DOWNTO YMIN DO
           BEGIN
                IF Y=YMAX THEN
                BEGIN
                     FOR Z:=XMIN TO XMAX DO
                     BEGIN
                          CASE RANDOM(10) OF
                               0,2,4 : SCREEN[Y*320+Z]:=0;
                               1,3,5,6,7,8,9 : SCREEN[Y*320+Z]:=255;
                          END;
                     END;
                END;
 
           FOR X:=XMIN TO XMAX DO
                   BEGIN
                        IF Y<YMAX THEN
                           BEGIN
                                INC(CYCLES);
                                IF CYCLES=MAXC+1 THEN CYCLES:=0;
                                IF CYCLES=0 THEN
                                BEGIN
                                TOTAL:=0;
                                SCREEN[Y*320+X]:=SCREEN[(Y+1)*320+X];
                                TOTAL:=TOTAL+SCREEN[(Y+1)*320+(X-1)];
                                TOTAL:=TOTAL+SCREEN[(Y+1)*320+(X)];
                                TOTAL:=TOTAL+SCREEN[(Y+1)*320+(X+1)];
                                TOTAL:=TOTAL+SCREEN[(Y)*320+(X-1)];
                                TOTAL:=TOTAL+SCREEN[(Y)*320+(X)];
                                TOTAL:=TOTAL+SCREEN[(Y)*320+(X+1)];
                                A:=TOTAL DIV 6;
                                END;
 
                                IF A>255 THEN A:=255;
                                SCREEN[Y*320+X]:=A;
                                SCREEN[Y*320+(X-1)]:=A;
                                SCREEN[Y*320+(X+1)]:=A;
                           END;
                   END;
           END;
     UNTIL (KEYPRESSED);
     asm
        mov ax, 3h
        int 10h
     end;
END.