home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / asm_programming / FIRECODE.ZIP / FLAME11.ASM < prev    next >
Assembly Source File  |  1993-09-07  |  6KB  |  269 lines

  1. ; FLAME coded by Bernard Schmitz 4/9/93
  2. ; Modified by Christopher L. Tumber 5/9/93
  3.  
  4. ; Define EIGHT to average eight pixels instead of four.
  5. ; It's a bit slower, but looks better IMHO.
  6.  
  7.         title   flame
  8.  
  9.         locals
  10.  
  11.         .model  small
  12.  
  13.         .stack  1024
  14.  
  15. ; buffers to hold frames
  16.  
  17. f1      segment byte
  18.  
  19. frame1  db      32000 dup(?)
  20.  
  21.         ends
  22.  
  23. f2      segment byte
  24.  
  25. frame2  db      32000 dup(?)
  26.  
  27.         ends
  28.  
  29.         .data
  30.  
  31. ; random number seed
  32.  
  33. seed    dd      ?
  34.  
  35. ; message
  36.  
  37. bye     db      'FLAME was coded by Bernard Schmitz on the 4th of September 1993', 13, 10
  38.         db      'Internet: c8902477@peach.newcastle.edu.au', 13, 10
  39.         db      'Modified by Christopher L. Tumber',13,10
  40.         db      'Internet: aa993@freenet.carleton.ca',13,10
  41.         db      13, 10
  42.         db      'Inspired by FIRE coded by Jare of VangeliSTeam.', 13, 10
  43.         db      '$'
  44.  
  45. ; palette
  46.  
  47. pal     label   byte
  48.         i=0
  49.         rept    8
  50.         db      0, 0, i*2
  51.         i=i+1
  52.         endm
  53.  
  54.         i=0
  55.         rept    8
  56.         db      i*2, 0, 16-2*i
  57.         i=i+1
  58.         endm
  59.         i=0
  60.         rept    16
  61.         db      16+47*i/16, 0, 0
  62.         i=i+1
  63.         endm
  64.         i=0
  65.         rept    24
  66.         db      63, 21*i/8, 0
  67.         i=i+1
  68.         endm
  69.         i=0
  70.         rept    24
  71.         db      63, 63, 21*i/8
  72.         i=i+1
  73.         endm
  74.  
  75.         db      179*3 dup(63)
  76.  
  77.         .code
  78.         .386
  79.  
  80. main    proc
  81.  
  82.         mov     ax, 0013h               ; mode 13h
  83.         int     10h
  84.  
  85.  
  86.         mov     ax, @data               ; setup palette
  87.         mov     ds, ax
  88.         mov     dx, 3c8h
  89.         xor     al,al
  90.         out     dx,al
  91.         inc     dx
  92.         mov     cx, 256*3
  93.         mov     si, offset pal
  94.         align   2
  95. @@p1:
  96.         mov     al, [si]
  97.         out     dx, al
  98.         inc     si
  99.         dec     cx
  100.         jnz     @@p1
  101.  
  102.         cld
  103.  
  104.         mov     ax, f1                  ; setup frame segments
  105.         mov     fs, ax
  106.         mov     ax, f2
  107.         mov     gs, ax
  108.  
  109.         push    fs                      ; clear frame one
  110.         pop     es
  111.         xor     di, di
  112.         xor     eax, eax
  113.         mov     cx, 320*100/4     ;200 For full screen
  114.         rep
  115.         stosd
  116.  
  117.         push    gs                      ; clear frame two
  118.         pop     es
  119.         xor     di, di
  120.         xor     eax, eax
  121.         mov     cx, 320*100/4     ;200 for full screen
  122.         rep
  123.         stosd
  124.         align   2
  125. @@l0:
  126.         push    fs
  127.         pop     ds
  128.         mov     si, 321
  129.         push    gs
  130.         pop     es
  131.         mov     di, 1
  132.         mov     cx, 320*100-322      ;200 for full screen
  133.         xor     bl, bl
  134.         align   2
  135. @@l1:
  136.         xor     ax, ax
  137.         add     al, [si-320]
  138.         adc     ah, bl
  139.         add     al, [si+320]
  140.         adc     ah, bl
  141.         add     al, [si-1]
  142.         adc     ah, bl
  143.         add     al, [si+1]
  144.         adc     ah, bl
  145. ifdef   eight
  146.         add     al, [si-321]
  147.         adc     ah, bl
  148.         add     al, [si+321]
  149.         adc     ah, bl
  150.         add     al, [si-319]
  151.  
  152.         adc     ah, bl
  153.         add     al, [si+319]
  154.         adc     ah, bl
  155.         shr     ax, 3
  156. else
  157.         shr     ax, 2
  158. endif
  159.         or      ax, ax
  160.         je      short @@l2
  161.         dec     al
  162.         align   2
  163. @@l2:
  164.         mov     es:[di], al
  165.         inc     di
  166.         inc     si
  167.         dec     cx
  168.         jnz     @@l1
  169.  
  170.         mov     edx, 69069
  171.         mov     di, 320*98   ;198 for full screen
  172.         mov     cx, 320
  173.         mov     ax, @data
  174.         mov     ds, ax
  175.         mov     eax, seed
  176.         align   2
  177. @@l3:
  178.         imul    eax, edx
  179.         inc     eax
  180.         mov     bl, ah
  181.         and     bl, 0fh
  182.         add     bl, 64
  183.         mov     es:[di-320], bl
  184.         imul    eax, edx
  185.         inc     eax
  186.         mov     bl, ah
  187.         and     bl, 0fh
  188.         add     bl, 64
  189.         mov     es:[di], bl
  190.         imul    eax, edx
  191.         inc     eax
  192.         mov     bl, ah
  193.         and     bl, 0fh
  194.         add     bl, 128
  195.         mov     es:[di+320], bl
  196.         inc     di
  197.         dec     cx
  198.         jnz     @@l3
  199.  
  200.         imul    eax, edx
  201.         inc     eax
  202.         mov     cl, al
  203.         and     cx, 000fh
  204.         mov     si, 320*98       ;198 for full screen
  205.         align   2
  206. @@l4:
  207.         imul    eax, edx
  208.         inc     eax
  209.         mov     ebx, eax
  210.         mov     bl, bh
  211.         xor     bh, bh
  212.         mov     di, si
  213.         add     di, bx
  214.         add     di, 32
  215.         xor     bl, bl
  216.         not     bl
  217.         mov     es:[di-320], bl
  218.         mov     es:[di+320], bl
  219.         mov     es:[di-1], bl
  220.         mov     es:[di+1], bl
  221.         mov     es:[di], bl
  222.         mov     es:[di-319], bl
  223.         mov     es:[di+319], bl
  224.         mov     es:[di-321], bl
  225.         mov     es:[di+321], bl
  226.         dec     cx
  227.         jnz     @@l4
  228.  
  229.         mov     seed, eax               ; save random number seed
  230.  
  231.         mov     ax, 40960+1920              ; display current frame
  232.         mov     es, ax
  233.         xor     di, di
  234.         push    gs
  235.         pop     ds
  236.         xor     si, si
  237.         mov     cx, 320*100/4         ;100 for full screen
  238.         rep
  239.         movsd
  240.  
  241.         push    fs                      ; swap frames
  242.         pop     ax
  243.         push    gs
  244.         pop     fs
  245.         mov     gs, ax
  246.  
  247.         mov     ah, 01h                 ; check for key
  248.         int     16h
  249.         jz      @@l0
  250.  
  251.         xor     ah, ah
  252.         int     16h                     ; get key
  253.  
  254.         mov     ax, 0003h               ; back to text screen
  255.         int     10h
  256.  
  257.         mov     ax, @data               ; print message
  258.         mov     ds, ax
  259.         mov     dx, offset bye
  260.         mov     ah, 9
  261.         int     21h
  262.  
  263.         mov     ax, 4c00h               ; quit to dos
  264.         int     21h
  265.  
  266. main    endp
  267.  
  268.         end     main
  269.