home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / asm_programming / FIRECODE.ZIP / FLAME_AS.C < prev    next >
C/C++ Source or Header  |  1993-08-29  |  8KB  |  227 lines

  1. //**************************************************************************
  2. //*                                                                        *
  3. //*    CFLAMES2 by Kirk A. Baum                                            *
  4. //*       This C program was addapted from a pascal program by M.D.Mackey. *
  5. //*       It has been modified to half the resolution used by Mark and the *
  6. //*       routines are in C with inline assembly.  The original code was   *
  7. //*       written in Pascal with Inline assemby.                           *
  8. //*       As with Marks code, I release this code into the public domain.  *
  9. //*       It may be freely distributed and modified, but please give credit*
  10. //*       where it is due if you use this code in your program.            *
  11. //*       If you have any suggestions or comments please contact me at:    *
  12. //*       kbaum@Novell.com.                                                *
  13. //*       Mark can be reached at: mackey@aqueous.ml.csiro.au               *
  14. //*                                                                        *
  15. //**************************************************************************
  16.  
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <time.h>
  20. #include <conio.h>
  21.  
  22. void setmode13(void);
  23. void setpalette(void);
  24.  
  25. int p1[56][80];
  26. unsigned int i,j,k,l;
  27. int delta;
  28. char ch;
  29. unsigned char pal[768]={  0,  0,  0,  0,  0, 24,  0,  0, 24,  0,  0, 28,
  30.               0,  0, 32,  0,  0, 32,  0,  0, 36,  0,  0, 40,
  31.                8,  0, 40, 16,  0, 36, 24,  0, 36, 32,  0, 32,
  32.               40,  0, 28, 48,  0, 28, 56,  0, 24, 64,  0, 20,
  33.               72,  0, 20, 80,  0, 16, 88,  0, 16, 96,  0, 12,
  34.              104,  0,  8,112,  0,  8,120,  0,  4,128,  0,  0,
  35.              128,  0,  0,132,  0,  0,136,  0,  0,140,  0,  0,
  36.              144,  0,  0,144,  0,  0,148,  0,  0,152,  0,  0,
  37.              156,  0,  0,160,  0,  0,160,  0,  0,164,  0,  0,
  38.              168,  0,  0,172,  0,  0,176,  0,  0,180,  0,  0,
  39.              184,  4,  0,188,  4,  0,192,  8,  0,196,  8,  0,
  40.              200, 12,  0,204, 12,  0,208, 16,  0,212, 16,  0,
  41.              216, 20,  0,220, 20,  0,224, 24,  0,228, 24,  0,
  42.              232, 28,  0,236, 28,  0,240, 32,  0,244, 32,  0,
  43.              252, 36,  0,252, 36,  0,252, 40,  0,252, 40,  0,
  44.              252, 44,  0,252, 44,  0,252, 48,  0,252, 48,  0,
  45.              252, 52,  0,252, 52,  0,252, 56,  0,252, 56,  0,
  46.              252, 60,  0,252, 60,  0,252, 64,  0,252, 64,  0,
  47.              252, 68,  0,252, 68,  0,252, 72,  0,252, 72,  0,
  48.              252, 76,  0,252, 76,  0,252, 80,  0,252, 80,  0,
  49.              252, 84,  0,252, 84,  0,252, 88,  0,252, 88,  0,
  50.              252, 92,  0,252, 96,  0,252, 96,  0,252,100,  0,
  51.              252,100,  0,252,104,  0,252,104,  0,252,108,  0,
  52.              252,108,  0,252,112,  0,252,112,  0,252,116,  0,
  53.              252,116,  0,252,120,  0,252,120,  0,252,124,  0,
  54.              252,124,  0,252,128,  0,252,128,  0,252,132,  0,
  55.              252,132,  0,252,136,  0,252, 136,   0,252, 140,   0,
  56.              252, 140,   0,252, 144,   0,252, 144,   0,252, 148,   0,
  57.              252, 152,   0,252, 152,   0,252, 156,   0,252, 156,   0,
  58.              252, 160,   0,252, 160,   0,252, 164,   0,252, 164,   0,
  59.              252, 168,   0,252, 168,   0,252, 172,   0,252, 172,   0,
  60.              252, 176,   0,252, 176,   0,252, 180,   0,252, 180,   0,
  61.              252, 184,   0,252, 184,   0,252, 188,   0,252, 188,   0,
  62.              252, 192,   0,252, 192,   0,252, 196,   0,252, 196,   0,
  63.              252, 200,   0,252, 200,   0,252, 204,   0,252, 208,   0,
  64.              252, 208,   0,252, 208,   0,252, 208,   0,252, 208,   0,
  65.              252, 212,   0,252, 212,   0,252, 212,   0,252, 212,   0,
  66.              252, 216,   0,252, 216,   0,252, 216,   0,252, 216,   0,
  67.              252, 216,   0,252, 220,   0,252, 220,   0,252, 220,   0,
  68.              252, 220,   0,252, 224,   0,252, 224,   0,252, 224,   0,
  69.              252, 224,   0,252, 228,   0,252, 228,   0,252, 228,   0,
  70.              252, 228,   0,252, 228,   0,252, 232,   0,252, 232,   0,
  71.              252, 232,   0,252, 232,   0,252, 236,   0,252, 236,   0,
  72.              252, 236,   0,252, 236,   0,252, 240,   0,252, 240,   0,
  73.              252, 240,   0,252, 240,   0,252, 240,   0,252, 244,   0,
  74.              252, 244,   0,252, 244,   0,252, 244,   0,252, 248,   0,
  75.              252, 248,   0,252, 248,   0,252, 248,   0,252, 252,   0,
  76.              252, 252,   4,252, 252,   8,252, 252,  12,252, 252,  16,
  77.              252, 252,  20,252, 252,  24,252, 252,  28,252, 252,  32,
  78.              252, 252,  36,252, 252,  40,252, 252,  40,252, 252,  44,
  79.              252, 252,  48,252, 252,  52,252, 252,  56,252, 252,  60,
  80.              252, 252,  64,252, 252,  68,252, 252,  72,252, 252,  76,
  81.              252, 252,  80,252, 252,  84,252, 252,  84,252, 252,  88,
  82.              252, 252,  92,252, 252,  96,252, 252, 100,252, 252, 104,
  83.              252, 252, 108,252, 252, 112,252, 252, 116,252, 252, 120,
  84.              252, 252, 124,252, 252, 124,252, 252, 128,252, 252, 132,
  85.              252, 252, 136,252, 252, 140,252, 252, 144,252, 252, 148,
  86.              252, 252, 152,252, 252, 156,252, 252, 160,252, 252, 164,
  87.              252, 252, 168,252, 252, 168,252, 252, 172,252, 252, 176,
  88.              252, 252, 180,252, 252, 184,252, 252, 188,252, 252, 192,
  89.              252, 252, 196,252, 252, 200,252, 252, 204,252, 252, 208,
  90.              252, 252, 208,252, 252, 212,252, 252, 216,252, 252, 220,
  91.              252, 252, 224,252, 252, 228,252, 252, 232,252, 252, 236,
  92.              252, 252, 240,252, 252, 244,252, 252, 248,252, 252, 252};
  93.  
  94.  
  95. //************************************************************************
  96. //*************************************************************************
  97. void setmode13()
  98. {
  99. asm mov AX,13h
  100. asm int 10h
  101. }
  102.  
  103.  
  104. //*************************************************************************
  105. //*************************************************************************
  106. void setpalette()
  107. {
  108. int  i;
  109.  
  110. for(i=0;i<768;i++)
  111.    {
  112.    pal[i] = pal[i] >> 2;
  113.    }
  114.  
  115.  _SI = (unsigned int)&pal[0];
  116.  asm mov cx,768
  117.  asm mov dx,0x03c8
  118.  asm xor al,al
  119.  asm out dx,al
  120.  asm inc dx
  121. l1:
  122.  asm outsb
  123.  asm dec cx
  124.  asm jnz l1
  125. }
  126.  
  127.  
  128. //*************************************************************************
  129. //*************************************************************************
  130. void main()
  131. {
  132.   setmode13();
  133.   setpalette();
  134.   randomize();
  135.   ch=' ';
  136.  
  137.   // Initialize the screen buffer
  138.   for(i=0;i<56;i++)
  139.      {
  140.      for(j=0;j<80;j++)
  141.     {
  142.     p1[i][j]=0;
  143.     }
  144.      }
  145.  
  146.   // Loop until the escape key has been pressed
  147.   while(ch != 27)
  148.      {
  149.  
  150.      // transform the current buffer
  151.      asm mov cx,4399;
  152.      _DI = (unsigned int)&p1[0][0];
  153.      asm xor ax,ax
  154.      asm add di,160
  155. D1:
  156.      asm mov ax,ds:[di-2]
  157.      asm add ax,ds:[di]
  158.      asm add ax,ds:[di+2]
  159.      asm add ax,ds:[di+160]
  160.      asm shr ax,2
  161.      asm jz D2
  162.  
  163.      asm sub ax,1
  164.      asm jz D2
  165.      asm sub ax,1
  166.      asm jz D2
  167.      asm sub ax,1
  168.  
  169. D2:
  170.      asm mov word ptr ds:[di-160],ax
  171.      asm add di,2
  172.      asm dec cx
  173.      asm jnz D1;
  174.  
  175.  
  176.      // Set new bottom line with random white or black color
  177.      delta = 0;
  178.      for(j=0;j<80;j++)   // {set new bottom line}
  179.     {
  180.     if(random(10) < 5)
  181.       {
  182.       delta=random(2)*255;
  183.       }
  184.     p1[54][j]=delta;
  185.     p1[55][j]=delta;
  186.     }
  187.  
  188.  
  189.      // Write the buffer to the screen
  190.      _SI=(unsigned int)&p1[0][0];
  191.      asm mov ax,0a000h
  192.      asm mov es,ax
  193.      asm mov di,0
  194.      asm mov dx,50
  195. F3:
  196.      asm mov bx,4
  197. F2:
  198.      asm mov cx,80
  199. F1:
  200.      asm mov al,[si]
  201.      asm mov ah,al
  202.      asm mov es:[di],ax;     //{word aligned write to display mem}
  203.      asm add di,2
  204.      asm mov es:[di],ax
  205.      asm add di,2
  206.      asm add si,2
  207.      asm dec cx
  208.      asm jnz F1
  209.  
  210.      asm sub si,160
  211.      asm dec bx
  212.      asm jnz F2
  213.  
  214.      asm add si,160
  215.      asm dec dx
  216.      asm jnz F3
  217.  
  218.      if(kbhit())
  219.        {
  220.        ch=getch();
  221.        }
  222.      }
  223.  
  224.   // Restore the screen to text mode
  225.   asm mov ax,03h
  226.   asm int 10h
  227. }