home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / hellsrc.zip / VECT3.ASM < prev    next >
Assembly Source File  |  1993-11-24  |  5KB  |  163 lines

  1.         .386p
  2.         jumps
  3. code32  segment para public use32
  4.         assume cs:code32, ds:code32
  5.  
  6. public  _v0r0sincosptr, _v0r0perspective
  7. public  _v0r0srx0, _v0r0sry0, _v0r0srz0
  8. public  _v0r0crx0, _v0r0cry0, _v0r0crz0
  9. public  _v0r0srx1, _v0r0sry1, _v0r0srz1
  10. public  _v0r0crx1, _v0r0cry1, _v0r0crz1
  11. public  _v0r0tx, _v0r0ty, _v0r0tz
  12.  
  13. public  _v0rot0init, _v0rot0a, _v0rot0b
  14.  
  15. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  16. ; CODE
  17. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  18.  
  19. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  20. ; Initialize sin and cos for rotation
  21. ; In:
  22. ;   EBX - rotation around X (0-511)
  23. ;   ECX - rotation around Y (0-511)
  24. ;   EDX - rotation around Z (0-511)
  25. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  26. _v0rot0init:
  27.         push eax ebp
  28.         db 0bdh
  29. _v0r0sincosptr  dd      ?
  30.         movsx eax,word ptr [ebp+ebx*2]
  31.         mov _v0r0srx0,eax
  32.         mov _v0r0srx1,eax
  33.         movsx eax,word ptr [ebp+ebx*2+256]
  34.         mov _v0r0crx0,eax
  35.         mov _v0r0crx1,eax
  36.         movsx eax,word ptr [ebp+ecx*2]
  37.         mov _v0r0sry0,eax
  38.         mov _v0r0sry1,eax
  39.         movsx eax,word ptr [ebp+ecx*2+256]
  40.         mov _v0r0cry0,eax
  41.         mov _v0r0cry1,eax
  42.         movsx eax,word ptr [ebp+edx*2]
  43.         mov _v0r0srz0,eax
  44.         mov _v0r0srz1,eax
  45.         movsx eax,word ptr [ebp+edx*2+256]
  46.         mov _v0r0crz0,eax
  47.         mov _v0r0crz1,eax
  48.         pop ebp eax
  49.         ret
  50.  
  51. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  52. ; Rotate set of X,Y,Z coordinates (translate and apply perspective if needed)
  53. ; In:
  54. ;   ESI -> source raw point buffer
  55. ;   EDI -> destination point buffer
  56. ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  57. ;-----------------------------------------------------------------------------
  58. _v0rot0a:                               ; without xlat and perspective
  59.         mov word ptr vrot0m0,(VROT0M0LEN shl 8)+0ebh
  60.         jmp short vrot0
  61. ;-----------------------------------------------------------------------------
  62. _v0rot0b:                               ; with xlat and perspective
  63.         mov word ptr vrot0m0,0c089h
  64.         jmp short vrot0
  65. ;-----------------------------------------------------------------------------
  66. vrot0:
  67.         pushad
  68.         lodsw
  69.         stosw
  70.         push ax
  71. vrot0ml:
  72.         movsx ecx,word ptr [esi]
  73.         mov eax,ecx
  74.         db 69h,0c0h             ;       imul eax,crz
  75. _v0r0crz0       dd      ?       ;
  76.         sar eax,9
  77.         movsx edx,word ptr [esi+2]
  78.         mov ebx,edx
  79.         db 69h,0dbh             ;       imul ebx,srz
  80. _v0r0srz0       dd      ?       ;
  81.         sar ebx,9
  82.         sub eax,ebx
  83.         db 69h,0c9h             ;       imul ecx,srz
  84. _v0r0srz1       dd      ?       ;
  85.         sar ecx,9
  86.         db 69h,0d2h             ;       imul edx,crz
  87. _v0r0crz1       dd      ?       ;
  88.         sar edx,9
  89.         add ecx,edx
  90.         movsx ebp,word ptr [esi+4]
  91.         mov ebx,ecx
  92.         db 69h,0dbh             ;       imul ebx,crx
  93. _v0r0crx0       dd      ?       ;
  94.         sar ebx,9
  95.         mov edx,ebp
  96.         db 69h,0d2h             ;       imul edx,srx
  97. _v0r0srx0       dd      ?       ;
  98.         sar edx,9
  99.         sub ebx,edx
  100.         db 69h,0c9h             ;       imul ecx,srx
  101. _v0r0srx1       dd      ?       ;
  102.         sar ecx,9
  103.         db 69h,0edh             ;       imul ebp,crx
  104. _v0r0crx1       dd      ?       ;
  105.         sar ebp,9
  106.         add ebp,ecx
  107.         mov edx,ebp
  108.     db 69h,0edh        ;    imul ebp,cry
  109. _v0r0cry0       dd      ?       ;
  110.     sar ebp,9
  111.         mov ecx,eax
  112.         db 69h,0c9h             ;       imul ecx,sry
  113. _v0r0sry0       dd      ?       ;
  114.         sar ecx,9
  115.     sub ebp,ecx
  116.     db 69h,0d2h        ;    imul edx,sry
  117. _v0r0sry1       dd      ?       ;
  118.     sar edx,9
  119.         db 69h,0c0h             ;       imul eax,cry
  120. _v0r0cry1       dd      ?       ;
  121.         sar eax,9
  122.     add eax,edx
  123.         add esi,6
  124. vrot0m0         dw      ?       ; MOV EAX,EAX or JMP SHORT vrot0mlc
  125.         db 66h,5                ; ADD AX,_v0r0tx
  126. _v0r0tx         dw      0       ;
  127.         db 66h,81h,0c3h         ; ADD BX,_v0r0ty
  128. _v0r0ty         dw      0       ;
  129.         db 66h,81h,0c5h         ; ADD BP,_v0r0tz
  130. _v0r0tz         dw      0       ;
  131.         mov [edi],ax
  132.         mov [edi+2],bx
  133.     mov [edi+4],bp
  134.         db 66h,0b9h             ; MOV CX,_v0r0perspective
  135. _v0r0perspective  dw 0          ;       ; perspective multiplier
  136.         imul cx
  137.         idiv bp
  138.         mov [edi+6],ax
  139.         mov eax,ebx
  140.         imul cx
  141.         idiv bp
  142.         mov [edi+8],ax
  143.         add edi,10
  144.         dec word ptr [esp]
  145.         jnz vrot0ml
  146.         jmp short vrot0mld
  147. VROT0M0LEN=($-vrot0m0)-2
  148. vrot0mlc:
  149.         mov [edi],ax
  150.         mov [edi+2],bx
  151.         mov [edi+4],bp
  152.         add edi,6
  153.         dec word ptr [esp]
  154.         jnz vrot0ml
  155. vrot0mld:
  156.         add esp,2
  157.         popad
  158.         ret
  159.  
  160. code32  ends
  161.         end
  162.  
  163.