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 / SHADEBOB.ASM < prev    next >
Assembly Source File  |  1994-06-15  |  4KB  |  217 lines

  1.         ideal
  2.         p386
  3.         model    large,pascal
  4.  
  5.         codeseg
  6.  
  7. ; -- init_shadebob ---------------------------------------------
  8. ;
  9. @dgroup    dw    DGROUP
  10.         dataseg
  11. def_bob_traect    dd    0
  12. NBOBROWS    =    16
  13. NBOBCOLS    =    16
  14. label        original_bob    byte
  15. db    0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0
  16. db    0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0
  17. db    0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0
  18. db    0,0,1,1,1,1,1,2,2,1,1,1,1,1,0,0
  19. db    0,1,1,1,1,2,2,2,2,2,2,1,1,1,1,0
  20. db    0,1,1,1,2,2,2,3,3,2,2,2,1,1,1,0
  21. db    1,1,1,2,2,2,3,3,3,3,2,2,2,1,1,1
  22. db    1,1,2,2,2,3,3,4,4,3,3,2,2,2,1,1
  23. db    1,1,2,2,2,3,3,4,4,3,3,2,2,2,1,1
  24. db    1,1,1,2,2,2,3,3,3,3,2,2,2,1,1,1
  25. db    0,1,1,1,2,2,2,3,3,2,2,2,1,1,1,0
  26. db    0,1,1,1,1,2,2,2,2,2,2,1,1,1,1,0
  27. db    0,0,1,1,1,1,1,2,2,1,1,1,1,1,0,0
  28. db    0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0
  29. db    0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0
  30. db    0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0
  31.         udataseg
  32. label        scaled_bob    byte
  33. db    NBOBROWS*NBOBCOLS dup(?)
  34. label        compiled_bob    byte
  35. db    NBOBROWS*(NBOBCOLS+2) dup(?)
  36.         codeseg
  37. public        init_shadebob
  38. proc        init_shadebob    far
  39.     pushad
  40.     push    ds es
  41.     mov    dx,ax
  42.     mov    ax,[@dgroup]
  43.     mov    ds,ax
  44.     mov    es,ax
  45.     xor    eax,eax
  46.     mov    [def_bob_traect],eax
  47.     call    scale_shadebob
  48.     mov    si,offset scaled_bob
  49.     call    compile_shadebob
  50.     pop    es ds
  51.     popad
  52.     ret
  53. endp        init_shadebob
  54. ; -- scale_shadebob --------------------------------------------
  55. ;
  56. proc        scale_shadebob    near
  57.     mov    si,offset original_bob
  58.     push    si
  59.     mov    cx,NBOBROWS*NBOBCOLS
  60.     mov    bl,0
  61. @@loop0:
  62.     lodsb
  63.     cmp    al,bl
  64.     jbe    @@1
  65.     mov    bl,al
  66. @@1:
  67.     loop    @@loop0
  68.     pop    si
  69.     cmp    dl,1
  70.     adc    dl,-1
  71.     mov    di,offset scaled_bob
  72.     mov    cx,NBOBROWS*NBOBCOLS
  73. @@loop1:
  74.     lodsb
  75.     mul    dl
  76.     div    bl
  77.     stosb
  78.     loop    @@loop1
  79.     ret
  80. endp        scale_shadebob
  81.  
  82. ; -- compile_shadebob ------------------------------------------
  83. ;
  84. proc        compile_shadebob    near
  85.     pushad
  86.     push    es
  87.     mov    es,[@dgroup]
  88.     mov    di,offset compiled_bob
  89.     mov    bp,NBOBROWS
  90. @@compile:
  91.     mov    cx,NBOBCOLS
  92.     xor    dx,dx
  93. @@skip:
  94.     lodsb
  95.     or    al,al
  96.     jnz    @@nonzero0
  97.     inc    dx
  98.     loop    @@skip
  99.     mov    [es:di],dl
  100.     inc    di
  101.     stosb    ; Zero body
  102.     stosb    ; Zero tail
  103.     jmp    @@next
  104. @@nonzero0:
  105.     mov    [es:di],dl    ; Head length
  106.     add    di,2
  107.     lea    bx,[di-1]
  108.     stosb
  109.     mov    dx,1    ; Body has length at least 1
  110.     dec    cx
  111.     jz    @@count_tail
  112. @@count_body:
  113.     lodsb
  114.     or    al,al
  115.     jz    @@count_tail
  116.     stosb
  117.     inc    dx
  118.     loop    @@count_body
  119. @@count_tail:
  120.     mov    [es:bx],dl    ; Length of body
  121.     mov    [es:di],cl    ; Remaining bytes are all zero
  122.     inc    di
  123.     add    si,cx
  124.     cmp    cx,1
  125.     adc    si,-1
  126. @@next:
  127.     dec    bp
  128.     jnz    @@compile
  129.     pop    es
  130.     popad
  131.     ret
  132. endp        compile_shadebob
  133.  
  134. ; -- set_bob_traectory -----------------------------------------
  135. ;
  136. public        set_bob_traectory
  137. proc        set_bob_traectory    far
  138.     push    ds
  139.     mov    ds,[@dgroup]
  140.     mov    [word def_bob_traect],ax
  141.     mov    [word def_bob_traect+2],dx
  142.     pop    ds
  143.     ret
  144. endp        set_bob_traectory
  145.  
  146. ; -- put_shadebob ----------------------------------------------
  147. ; No screen bounds checking
  148. public        put_shadebob
  149. proc        put_shadebob    far
  150.     pushad
  151.     mov    bp,[word def_bob_traect]
  152.     or    bp,[word def_bob_traect+2]
  153.     jz    @@end
  154.     call    [def_bob_traect]
  155.     jc    @@end
  156.     push    ds es
  157.     mov    cx,0a000h
  158.     mov    es,cx
  159.     mov    ds,[@dgroup]
  160.     imul    di,bx,320
  161.     add    di,ax
  162.     mov    bp,NBOBROWS
  163.     mov    si,offset compiled_bob
  164. @@loop:
  165.     lea    bx,[di+320]
  166.     movzx    ax,[byte si]
  167.     add    di,ax
  168.     movzx    cx,[byte si+1]
  169.     add    si,2
  170.     mov    dx,2
  171. IF    1    ; If straight copy
  172.     shr    cx,1
  173.     rep    movsw
  174.     adc    cl,cl
  175.     rep    movsb
  176. ELSE    ; Add copy
  177.     test    cl,1
  178.     jz    @@shift
  179.     lodsb
  180.     add    [es:di],al
  181.     inc    di
  182. @@shift:
  183.     shr    cx,1
  184.     jz    @@next
  185. @@addloop:
  186.     mov    ax,[si]
  187.     add    si,dx
  188. IF    0
  189.     add    [es:di],al
  190.     add    [es:di+1],ah
  191. ELSE
  192.     add    al,[es:di]
  193. jnc    @@_1
  194. int 3
  195. @@_1:
  196.     add    ah,[es:di+1]
  197. jnc    @@_2
  198. int 3
  199. @@_2:
  200.     mov    [es:di],ax
  201. ENDIF
  202.     add    di,dx
  203.     loop    @@addloop
  204. ENDIF
  205. @@next:
  206.     inc    si
  207.     mov    di,bx
  208.     dec    bp
  209.     jnz    @@loop
  210.     pop    es ds
  211. @@end:
  212.     popad
  213.     ret
  214. endp        put_shadebob
  215.  
  216.         end
  217.