//************************************************************************** //* * //* CFLAMES2 by Kirk A. Baum * //* This C program was addapted from a pascal program by M.D.Mackey. * //* It has been modified to half the resolution used by Mark and the * //* routines are in C with inline assembly. The original code was * //* written in Pascal with Inline assemby. * //* As with Marks code, I release this code into the public domain. * //* It may be freely distributed and modified, but please give credit* //* where it is due if you use this code in your program. * //* If you have any suggestions or comments please contact me at: * //* kbaum@Novell.com. * //* Mark can be reached at: mackey@aqueous.ml.csiro.au * //* * //************************************************************************** #include #include #include #include void setmode13(void); void setpalette(void); int p1[56][80]; unsigned int i,j,k,l; int delta; char ch; unsigned char pal[768]={ 0, 0, 0, 0, 0, 24, 0, 0, 24, 0, 0, 28, 0, 0, 32, 0, 0, 32, 0, 0, 36, 0, 0, 40, 8, 0, 40, 16, 0, 36, 24, 0, 36, 32, 0, 32, 40, 0, 28, 48, 0, 28, 56, 0, 24, 64, 0, 20, 72, 0, 20, 80, 0, 16, 88, 0, 16, 96, 0, 12, 104, 0, 8,112, 0, 8,120, 0, 4,128, 0, 0, 128, 0, 0,132, 0, 0,136, 0, 0,140, 0, 0, 144, 0, 0,144, 0, 0,148, 0, 0,152, 0, 0, 156, 0, 0,160, 0, 0,160, 0, 0,164, 0, 0, 168, 0, 0,172, 0, 0,176, 0, 0,180, 0, 0, 184, 4, 0,188, 4, 0,192, 8, 0,196, 8, 0, 200, 12, 0,204, 12, 0,208, 16, 0,212, 16, 0, 216, 20, 0,220, 20, 0,224, 24, 0,228, 24, 0, 232, 28, 0,236, 28, 0,240, 32, 0,244, 32, 0, 252, 36, 0,252, 36, 0,252, 40, 0,252, 40, 0, 252, 44, 0,252, 44, 0,252, 48, 0,252, 48, 0, 252, 52, 0,252, 52, 0,252, 56, 0,252, 56, 0, 252, 60, 0,252, 60, 0,252, 64, 0,252, 64, 0, 252, 68, 0,252, 68, 0,252, 72, 0,252, 72, 0, 252, 76, 0,252, 76, 0,252, 80, 0,252, 80, 0, 252, 84, 0,252, 84, 0,252, 88, 0,252, 88, 0, 252, 92, 0,252, 96, 0,252, 96, 0,252,100, 0, 252,100, 0,252,104, 0,252,104, 0,252,108, 0, 252,108, 0,252,112, 0,252,112, 0,252,116, 0, 252,116, 0,252,120, 0,252,120, 0,252,124, 0, 252,124, 0,252,128, 0,252,128, 0,252,132, 0, 252,132, 0,252,136, 0,252, 136, 0,252, 140, 0, 252, 140, 0,252, 144, 0,252, 144, 0,252, 148, 0, 252, 152, 0,252, 152, 0,252, 156, 0,252, 156, 0, 252, 160, 0,252, 160, 0,252, 164, 0,252, 164, 0, 252, 168, 0,252, 168, 0,252, 172, 0,252, 172, 0, 252, 176, 0,252, 176, 0,252, 180, 0,252, 180, 0, 252, 184, 0,252, 184, 0,252, 188, 0,252, 188, 0, 252, 192, 0,252, 192, 0,252, 196, 0,252, 196, 0, 252, 200, 0,252, 200, 0,252, 204, 0,252, 208, 0, 252, 208, 0,252, 208, 0,252, 208, 0,252, 208, 0, 252, 212, 0,252, 212, 0,252, 212, 0,252, 212, 0, 252, 216, 0,252, 216, 0,252, 216, 0,252, 216, 0, 252, 216, 0,252, 220, 0,252, 220, 0,252, 220, 0, 252, 220, 0,252, 224, 0,252, 224, 0,252, 224, 0, 252, 224, 0,252, 228, 0,252, 228, 0,252, 228, 0, 252, 228, 0,252, 228, 0,252, 232, 0,252, 232, 0, 252, 232, 0,252, 232, 0,252, 236, 0,252, 236, 0, 252, 236, 0,252, 236, 0,252, 240, 0,252, 240, 0, 252, 240, 0,252, 240, 0,252, 240, 0,252, 244, 0, 252, 244, 0,252, 244, 0,252, 244, 0,252, 248, 0, 252, 248, 0,252, 248, 0,252, 248, 0,252, 252, 0, 252, 252, 4,252, 252, 8,252, 252, 12,252, 252, 16, 252, 252, 20,252, 252, 24,252, 252, 28,252, 252, 32, 252, 252, 36,252, 252, 40,252, 252, 40,252, 252, 44, 252, 252, 48,252, 252, 52,252, 252, 56,252, 252, 60, 252, 252, 64,252, 252, 68,252, 252, 72,252, 252, 76, 252, 252, 80,252, 252, 84,252, 252, 84,252, 252, 88, 252, 252, 92,252, 252, 96,252, 252, 100,252, 252, 104, 252, 252, 108,252, 252, 112,252, 252, 116,252, 252, 120, 252, 252, 124,252, 252, 124,252, 252, 128,252, 252, 132, 252, 252, 136,252, 252, 140,252, 252, 144,252, 252, 148, 252, 252, 152,252, 252, 156,252, 252, 160,252, 252, 164, 252, 252, 168,252, 252, 168,252, 252, 172,252, 252, 176, 252, 252, 180,252, 252, 184,252, 252, 188,252, 252, 192, 252, 252, 196,252, 252, 200,252, 252, 204,252, 252, 208, 252, 252, 208,252, 252, 212,252, 252, 216,252, 252, 220, 252, 252, 224,252, 252, 228,252, 252, 232,252, 252, 236, 252, 252, 240,252, 252, 244,252, 252, 248,252, 252, 252}; //************************************************************************ //************************************************************************* void setmode13() { asm mov AX,13h asm int 10h } //************************************************************************* //************************************************************************* void setpalette() { int i; for(i=0;i<768;i++) { pal[i] = pal[i] >> 2; } _SI = (unsigned int)&pal[0]; asm mov cx,768 asm mov dx,0x03c8 asm xor al,al asm out dx,al asm inc dx l1: asm outsb asm dec cx asm jnz l1 } //************************************************************************* //************************************************************************* void main() { setmode13(); setpalette(); randomize(); ch=' '; // Initialize the screen buffer for(i=0;i<56;i++) { for(j=0;j<80;j++) { p1[i][j]=0; } } // Loop until the escape key has been pressed while(ch != 27) { // transform the current buffer asm mov cx,4399; _DI = (unsigned int)&p1[0][0]; asm xor ax,ax asm add di,160 D1: asm mov ax,ds:[di-2] asm add ax,ds:[di] asm add ax,ds:[di+2] asm add ax,ds:[di+160] asm shr ax,2 asm jz D2 asm sub ax,1 asm jz D2 asm sub ax,1 asm jz D2 asm sub ax,1 D2: asm mov word ptr ds:[di-160],ax asm add di,2 asm dec cx asm jnz D1; // Set new bottom line with random white or black color delta = 0; for(j=0;j<80;j++) // {set new bottom line} { if(random(10) < 5) { delta=random(2)*255; } p1[54][j]=delta; p1[55][j]=delta; } // Write the buffer to the screen _SI=(unsigned int)&p1[0][0]; asm mov ax,0a000h asm mov es,ax asm mov di,0 asm mov dx,50 F3: asm mov bx,4 F2: asm mov cx,80 F1: asm mov al,[si] asm mov ah,al asm mov es:[di],ax; //{word aligned write to display mem} asm add di,2 asm mov es:[di],ax asm add di,2 asm add si,2 asm dec cx asm jnz F1 asm sub si,160 asm dec bx asm jnz F2 asm add si,160 asm dec dx asm jnz F3 if(kbhit()) { ch=getch(); } } // Restore the screen to text mode asm mov ax,03h asm int 10h }