home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Unsorted BBS Collection
/
thegreatunsorted.tar
/
thegreatunsorted
/
programming
/
asm_programming
/
FIRECODE.ZIP
/
FLAME_AS.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-29
|
8KB
|
227 lines
//**************************************************************************
//* *
//* 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 <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
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
}