home *** CD-ROM | disk | FTP | other *** search
/ The Equalizer BBS / equalizer-bbs-collection_2004.zip / equalizer-bbs-collection / DEMOSCENE-STUFF / IBYTES02.ZIP / SRC_HI!.ZIP / FLAME.ASM < prev    next >
Assembly Source File  |  1994-06-25  |  5KB  |  311 lines

  1.         ideal
  2.         p386
  3.  
  4.         model    large,pascal
  5.         codeseg
  6. MACRO    waitvr    keepdx
  7.     local    a
  8. IFNB    <keepdx>
  9.     push    dx
  10. ENDIF
  11.     mov    dx,03dah
  12. a:
  13.     in    al,dx
  14.     test    al,8
  15.     jz    a
  16. IFNB    <keepdx>
  17.     pop    dx
  18. ENDIF
  19. ENDM
  20.  
  21. ; -- set_flame_palette -----------------------------------------
  22. ;
  23.         udataseg
  24. flame_ofs    dw    ?
  25. flame_incr    dw    ?
  26.         codeseg
  27. label        make_pal_idx    byte
  28. db    4,  0, 0, 0,  0, 0,20
  29. db    36,  0, 0,20, 40, 0, 0
  30. db    64, 40, 0, 0, 63,31, 0
  31. db    64, 63,31, 0, 63,63, 0
  32. db    64, 63,63, 0, 63,63,63
  33. db    0
  34. public        set_flame_palette
  35. proc        set_flame_palette    far
  36.     local    @@a:word
  37.     pushad
  38.     push    ds es
  39.     mov    ax,SEG flame_ofs
  40.     mov    ds,ax
  41.     mov    [flame_ofs],0
  42.     mov    [flame_incr],1
  43.     mov    ax,SEG tmp_pal
  44.     mov    es,ax
  45.     mov    di,offset tmp_pal
  46.     push    di
  47.     xor    eax,eax
  48.     mov    cx,300h/4
  49.     rep    stosd
  50.     pop    di
  51.     xor    si,si
  52.     xor    dx,dx
  53. @@loop:
  54.     movzx    cx,[si+make_pal_idx]
  55.     add    dx,cx
  56.     or    cl,cl
  57.     jz    @@paldone
  58.     inc    si
  59.     xor    ch,ch
  60. @@cluster:
  61.     MACRO    onecolor    cofs
  62.     mov    al,[si+3+cofs+make_pal_idx]
  63.     sub    al,[si+cofs+make_pal_idx]
  64.     imul    ch
  65.     idiv    cl
  66.     add    al,[si+cofs+make_pal_idx]
  67.     mov    [es:di+cofs],al
  68.     ENDM
  69.     onecolor    0
  70.     onecolor    1
  71.     onecolor    2
  72.     add    di,3
  73.     inc    ch
  74.     cmp    ch,cl
  75.     jb    @@cluster
  76.     add    si,6
  77.     jmp    @@loop
  78. @@paldone:
  79.     mov    [@@a],dx
  80.     waitvr
  81.     mov    al,0
  82.     call    fade_to_flame    ; Output palette without changes (fade coef equal to zero)
  83.     pop    es ds
  84.     popad
  85.     mov    ax,[@@a]
  86.     ret
  87. endp        set_flame_palette
  88.  
  89. ; -- make_flame ------------------------------------------------
  90. ;
  91. public        make_flame
  92. proc        make_flame    far
  93.     push    ax bx cx dx di
  94.     push    ds es
  95.     mov    ax,SEG flame_incr
  96.     mov    ds,ax
  97.     mov    ax,0a000h
  98.     mov    es,ax
  99.     mov    cx,8000
  100. ;    mov    di,[flame_ofs]
  101. ;    mov    dx,[flame_incr]
  102.     mov    dx,2
  103.     mov    di,320*2
  104.     mov    cx,(200-4)/2*(320)/2
  105. @@loadbx:
  106.     mov    bx,160
  107. @@loop:
  108.     cmp    di,320*2
  109.     jb    @@next
  110.     cmp    di,(199-2)*320
  111.     ja    @@next
  112.     mov    al,[es:di]
  113.     add    al,[es:di+2]
  114.     mov    ah,0
  115.     adc    ah,0
  116.     add    al,[es:di-2]
  117.     adc    ah,0
  118. ;    add    al,[es:di-320*2]
  119. ;    adc    ah,0
  120.     add    al,[es:di+320*2]
  121.     adc    ah,0
  122.     REPT    1
  123.     cmp    ax,1
  124.     adc    ax,-1
  125.     ENDM
  126.     shr    ax,2
  127.     cmp    ah,1
  128.     sbb    ah,ah
  129.     and    al,ah
  130.     mov    ah,al
  131.     mov    [es:di],ax
  132.     mov    [es:di+320],ax
  133. @@next:
  134.     add    di,dx
  135.     dec    cx
  136.     jz    @@done
  137.     dec    bx
  138.     jnz    @@loop
  139.     add    di,320
  140.     jmp    @@loadbx
  141. @@done:
  142.     mov    [flame_ofs],di
  143.     mov    [flame_incr],dx
  144.     pop    es ds
  145.     pop    di dx cx bx ax
  146.     ret
  147. endp        make_flame
  148.  
  149. ; -- start_flame_fade ------------------------------------------
  150. ;
  151.         ufardata    FLAME
  152. tmp_pal    db    300h dup(?)
  153.         codeseg
  154. public        start_flame_fade
  155. proc        start_flame_fade    far
  156.     push    ax cx dx di es
  157.     mov    ax,SEG tmp_pal
  158.     mov    es,ax
  159.     waitvr
  160.     mov    dx,03c7h
  161.     mov    al,0
  162.     out    dx,al
  163.     inc    dx
  164.     inc    dx
  165.     mov    di,offset tmp_pal
  166.     mov    cx,300h
  167.     rep    insb
  168.     pop    es di dx cx ax
  169.     ret
  170. endp        start_flame_fade
  171. ; -- fade_to_flame ---------------------------------------------
  172. ;
  173. tmp_pal_seg    dw    SEG tmp_pal
  174. public        fade_to_flame
  175. proc        fade_to_flame    far
  176.     push    ax bx cx dx si ds
  177.     sub    al,64
  178.     sbb    ah,ah
  179.     and    al,ah
  180.     add    al,64    ; Not more than 64
  181.     mov    bl,al
  182.     mov    ax,[tmp_pal_seg]
  183.     mov    ds,ax
  184.     mov    cx,100h
  185.     mov    dx,03c8h
  186.     mov    al,0
  187.     out    dx,al
  188.     inc    dx
  189.     mov    si,offset tmp_pal
  190. @@loop:
  191.     mov    al,63
  192.     sub    al,[si]
  193.     imul    bl
  194.     sar    ax,6
  195.     add    al,[si]
  196.     out    dx,al
  197.     mov    al,63
  198.     sub    al,[si+1]
  199.     imul    bl
  200.     sar    ax,6
  201.     add    al,[si+1]
  202.     out    dx,al
  203.     mov    al,63
  204.     sub    al,[si+2]
  205.     imul    bl
  206.     sar    ax,6
  207.     add    al,[si+2]
  208.     out    dx,al
  209.     add    si,3
  210.     dec    cx
  211.     jnz    @@loop
  212.     pop    ds si dx cx bx ax
  213.     ret
  214. endp        fade_to_flame
  215. ; -- fade_to_black ---------------------------------------------
  216. ;
  217. public        fade_to_black
  218. proc        fade_to_black    far
  219.     push    ax bx cx dx si ds
  220.     mov    bl,64
  221.     sub    al,bl
  222.     sbb    ah,ah
  223.     and    al,ah
  224.     add    al,bl    ; Not more than 64
  225.     sub    bl,al
  226.     mov    ax,[tmp_pal_seg]
  227.     mov    ds,ax
  228.     mov    cx,300h
  229.     mov    dx,03c8h
  230.     mov    al,0
  231.     out    dx,al
  232.     inc    dx
  233.     mov    si,offset tmp_pal
  234. @@loop:
  235.     lodsb
  236.     imul    bl
  237.     sar    ax,6
  238.     out    dx,al
  239.     dec    cx
  240.     jnz    @@loop
  241.     pop    ds si dx cx bx ax
  242.     ret
  243. endp        fade_to_black
  244. ; -- wait_vr ---------------------------------------------------
  245. ;
  246. public        wait_vr
  247. proc        wait_vr    far
  248.     push    dx ax
  249.     waitvr
  250.     pop    ax dx
  251.     ret
  252. endp        wait_vr
  253. ; -- get_fade_pal_ptr ------------------------------------------
  254. ;
  255. public        get_fade_pal_ptr
  256. proc        get_fade_pal_ptr
  257.     mov    es,[tmp_pal_seg]
  258.     mov    di,offset tmp_pal
  259.     ret
  260. endp        get_fade_pal_ptr
  261.         end
  262. ; -- make_flame ------------------------------------------------
  263. ;
  264. public        make_flame
  265. proc        make_flame    far
  266.     push    ax bx cx dx di
  267.     push    ds es
  268.     mov    ax,SEG flame_incr
  269.     mov    ds,ax
  270.     mov    ax,0a000h
  271.     mov    es,ax
  272.     mov    cx,8000
  273.     mov    di,[flame_ofs]
  274.     mov    dx,[flame_incr]
  275. @@loop:
  276.     cmp    di,320
  277.     jb    @@next
  278.     cmp    di,198*320
  279.     ja    @@next
  280.     mov    ax,[es:di]
  281.     add    al,ah
  282.     mov    ah,0
  283.     adc    ah,0
  284.     add    al,[es:di-1]
  285.     adc    ah,0
  286.     add    al,[es:di-320]
  287.     adc    ah,0
  288.     add    al,[es:di+320]
  289.     adc    ah,0
  290.     REPT    3
  291.     cmp    ax,1
  292.     adc    ax,-1
  293.     ENDM
  294.     shr    ax,2
  295.     cmp    ah,1
  296.     sbb    ah,ah
  297.     and    al,ah
  298.     mov    [es:di],al
  299. @@next:
  300.     add    di,dx
  301.     inc    dx
  302.     dec    cx
  303.     jnz    @@loop
  304.     mov    [flame_ofs],di
  305.     mov    [flame_incr],dx
  306.     pop    es ds
  307.     pop    di dx cx bx ax
  308.     ret
  309. endp        make_flame
  310.  
  311.