home *** CD-ROM | disk | FTP | other *** search
/ The Party 1994: Try This At Home / disk_image.bin / source / vexsrc / polyvshx.asm < prev    next >
Assembly Source File  |  1995-03-29  |  5KB  |  283 lines

  1. comment #
  2. /*****************************************************************************
  3.                                   ATTENTION!
  4.                            this source is VOTEWARE,
  5.               you may only use it to the conditions listed below:
  6.  
  7.   -You may modify it, or use parts of it in your own source as long as
  8.     this header stays on top of all files containing this source.
  9.   -You must give proper credit to the author, Niklas Beisert / pascal.
  10.   -You may not use it in commercial productions without the written
  11.     permission of the author.
  12.   -AND MOST IMPORTANT: you have to buy an Assembly '94 CD-ROM
  13.     by Sound Solutions (if you don't have it already) and vote for VEX-InTrO
  14.     in the PC-64k-Intro-Compo! (if you have already sent your voting card,
  15.     buy another one and fill it out CORRECTLY!!!)
  16. *****************************************************************************/
  17. #
  18.  
  19.  
  20.  
  21. ;// vertical xmode dithered gouraud shading
  22.  
  23. .model large,c
  24. .386
  25. locals
  26.  
  27. .data
  28.  
  29. extrn poly_width:word
  30. extrn poly_scrseg:word
  31. extrn poly_x:word
  32. extrn poly_y:word
  33. extrn poly_len:word
  34. extrn poly_tx:dword
  35. extrn poly_dtx:dword
  36.  
  37. .code
  38.  
  39. public vxshadeline
  40. public vxshadelined
  41. public vxshadelineq320
  42. public vxshadelinedq320
  43.  
  44. exp=4
  45.  
  46. vxshadeline proc uses ds edi
  47.   mov ax,poly_y
  48.   mul poly_width
  49.   add ax,poly_x
  50.   adc dx,0
  51.   mov cl,al
  52.   and cl,3
  53.   shrd ax,dx,2
  54.   add ax,poly_scrseg
  55.   push ax
  56.  
  57.   mov dx,3c4h
  58.   mov ax,0102h
  59.   shl ah,cl
  60.   out dx,ax
  61.  
  62.   mov edx,poly_dtx
  63.   mov edi,poly_tx
  64.   rol edx,16
  65.   rol edi,16
  66.   mov ax,di
  67.   mov ah,dl
  68.   mov dx,poly_width
  69.   shr dx,2
  70.   pop di
  71.  
  72.   mov cx,poly_len
  73.  
  74.   mov bx,0a000h
  75.   mov ds,bx
  76.  
  77.   xchg ax,bx
  78.   mov al,cl
  79.   and al,(1 shl exp)-1
  80.   sub al,1 shl exp
  81.   neg al
  82.   mov ah,(@@blockend-@@block) shr exp
  83.   mul ah
  84.   add ax,offset @@block
  85.   shr cx,exp
  86.   inc cx
  87.   xchg ax,bx
  88.   jmp bx
  89. @@block:
  90.     rept 1 shl exp
  91.       mov ds:[di],al
  92.       add edi,edx
  93.       adc al,ah
  94.     endm
  95. @@blockend:
  96.   dec cx
  97.   jnz @@block
  98.  
  99. @@done:
  100.   ret
  101. endp
  102.  
  103. jmppos dw 0
  104.  
  105. vxshadelined proc uses ds edi si
  106.   mov ax,poly_y
  107.   mul poly_width
  108.   add ax,poly_x
  109.   adc dx,0
  110.   mov cl,al
  111.   and cl,3
  112.   shrd ax,dx,2
  113.   add ax,poly_scrseg
  114.   mov di,word ptr poly_tx
  115.   shl edi,24
  116.   mov di,ax
  117.  
  118.   mov dx,3c4h
  119.   mov ax,0102h
  120.   shl ah,cl
  121.   out dx,ax
  122.  
  123.   mov si,word ptr poly_dtx+1
  124.   mov dx,word ptr poly_tx+1
  125.   mov bl,byte ptr poly_dtx
  126.   shl ebx,24
  127.   mov bx,poly_width
  128.   shr bx,2
  129.  
  130.   mov cx,poly_len
  131.  
  132.   mov ax,0a000h
  133.   mov ds,ax
  134.  
  135.   mov al,cl
  136.   and al,(1 shl exp)-1
  137.   sub al,1 shl exp
  138.   neg al
  139.   mov ah,(@@blockend-@@block) shr exp
  140.   mul ah
  141.   add ax,offset @@block
  142.   mov jmppos,ax
  143.   xor ax,ax
  144.   shr cx,exp
  145.   inc cx
  146.   jmp jmppos
  147. @@block:
  148.     rept 1 shl exp
  149.       add ax,dx
  150.       mov ds:[di],ah
  151.       xor ah,ah
  152.       add edi,ebx
  153.       adc dx,si
  154.     endm
  155. @@blockend:
  156.   dec cx
  157.   jnz @@block
  158.  
  159. @@done:
  160.   ret
  161. endp
  162.  
  163. vxshadelineq320 proc uses ds di
  164.   mov ax,poly_y
  165.   mul poly_width
  166.   add ax,poly_x
  167.   adc dx,0
  168.   mov cl,al
  169.   and cl,3
  170.   shrd ax,dx,2
  171.   add ax,poly_scrseg
  172.   mov di,ax
  173.  
  174.   mov dx,3c4h
  175.   mov ax,0102h
  176.   shl ah,cl
  177.   out dx,ax
  178.  
  179.   mov dx,word ptr poly_dtx+1
  180.   mov ax,word ptr poly_tx+1
  181.  
  182.   mov cx,poly_len
  183.  
  184.   mov bx,0a000h
  185.   mov ds,bx
  186.  
  187.   xchg ax,bx
  188.   mov al,cl
  189.   and al,(1 shl exp)-1
  190.   sub al,1 shl exp
  191.   neg al
  192.   push ax
  193.   mov ah,80
  194.   mul ah
  195.   sub di,ax
  196.   pop ax
  197.   mov ah,(@@blockend-@@block) shr exp
  198.   mul ah
  199.   add ax,offset @@block
  200.   xchg ax,bx
  201.   shr cx,exp
  202.   inc cx
  203.   jmp bx
  204.   o=0
  205. @@block:
  206.     rept 1 shl exp
  207. ;      mov ds:[di+o],ah
  208.       db 3eh,88h,0a5h
  209.       dw o
  210.       o=o+80
  211.       add ax,dx
  212.     endm
  213. @@blockend:
  214.   add di,80 shl exp
  215.   dec cx
  216.   jnz @@block
  217.  
  218. @@done:
  219.   ret
  220. endp
  221.  
  222. vxshadelinedq320 proc uses ds si di
  223.   mov ax,poly_y
  224.   mul poly_width
  225.   add ax,poly_x
  226.   adc dx,0
  227.   mov cl,al
  228.   and cl,3
  229.   shrd ax,dx,2
  230.   add ax,poly_scrseg
  231.   mov di,ax
  232.  
  233.   mov dx,3c4h
  234.   mov ax,0102h
  235.   shl ah,cl
  236.   out dx,ax
  237.  
  238.   mov si,word ptr poly_dtx+1
  239.   mov dx,word ptr poly_tx+1
  240.  
  241.   mov cx,poly_len
  242.  
  243.   mov ax,0a000h
  244.   mov ds,ax
  245.  
  246.   mov al,cl
  247.   and al,(1 shl exp)-1
  248.   sub al,1 shl exp
  249.   neg al
  250.   mov bl,al
  251.   mov ah,80
  252.   mul ah
  253.   sub di,ax
  254.   mov al,(@@blockend-@@block) shr exp
  255.   mul bl
  256.   add ax,offset @@block
  257.   mov bx,ax
  258.   xor ax,ax
  259.   shr cx,exp
  260.   inc cx
  261.   jmp bx
  262.   o=0
  263. @@block:
  264.     rept 1 shl exp
  265.       add ax,dx
  266. ;      mov ds:[di+o],ah
  267.       db 3eh,88h,0A5h
  268.       dw o
  269.       o=o+80
  270.       xor ah,ah
  271.       add dx,si
  272.     endm
  273. @@blockend:
  274.   add di,80 shl exp
  275.   dec cx
  276.   jnz @@block
  277.  
  278. @@done:
  279.   ret
  280. endp
  281.  
  282. end
  283.