Upload
This commit is contained in:
commit
43352ff262
1291 changed files with 220976 additions and 0 deletions
420
HARD/VMATH.ASM
Normal file
420
HARD/VMATH.ASM
Normal file
|
|
@ -0,0 +1,420 @@
|
|||
.386
|
||||
|
||||
include vmathsin.asm
|
||||
|
||||
;rotate sins/coss
|
||||
rxsin dw 0
|
||||
rxcos dw 0
|
||||
rysin dw 0
|
||||
rycos dw 0
|
||||
rzsin dw 0
|
||||
rzcos dw 0
|
||||
|
||||
checkdeg MACRO reg
|
||||
local l0,l1,l2
|
||||
l0: cmp reg,3600
|
||||
jb l1
|
||||
jl l2
|
||||
;>3600
|
||||
sub reg,3600
|
||||
jmp l0
|
||||
l2: ;<0
|
||||
add reg,3600
|
||||
jmp l0
|
||||
l1: ENDM
|
||||
|
||||
public _cmatrix_yxz
|
||||
_cmatrix_yxz PROC FAR
|
||||
CBEG
|
||||
movpar ds,4
|
||||
movpar si,3
|
||||
mov di,si
|
||||
movpar ax,0 ;rotx
|
||||
mov ds:[si+2],ax
|
||||
movpar ax,1 ;roty
|
||||
mov ds:[si+0],ax
|
||||
movpar ax,2 ;rotz
|
||||
mov ds:[si+4],ax
|
||||
call calcmatrix
|
||||
CEND
|
||||
_cmatrix_yxz ENDP
|
||||
|
||||
calcmatrix PROC NEAR ;rY*rX*rZ
|
||||
;ds:[si+0]=rotx
|
||||
;ds:[si+2]=roty
|
||||
;ds:[si+4]=rotz
|
||||
;dest: ds:[di]
|
||||
;load values, check 'em and calc sin/cos
|
||||
;ROT-X
|
||||
mov bx,ds:[si]
|
||||
checkdeg bx
|
||||
mov ds:[si],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rxsin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rxcos,ax
|
||||
;ROT-Y
|
||||
mov bx,ds:[si+2]
|
||||
checkdeg bx
|
||||
mov ds:[si+2],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rysin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rycos,ax
|
||||
;ROT-Z
|
||||
mov bx,ds:[si+4]
|
||||
checkdeg bx
|
||||
mov ds:[si+4],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rzsin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rzcos,ax
|
||||
|
||||
;matrix equations: rY*rX*rZ
|
||||
; 0=Ycos*Zcos- 2=Xsin*Ysin*Zcos+ 4=-Xcos*Ysin
|
||||
; Xsin*Ysin*Zsin Ycos*Zsin
|
||||
; 6=-Xcos*Zsin 8=Xcos*Zcos 10=Xsin
|
||||
;
|
||||
;12=Xsin*Ycos*Zsin+ 14=Ysin*Zsin- 16=Xcos*Ycos
|
||||
; Ysin*Zcos Xsin*Ycos*Zcos\
|
||||
|
||||
mov ax,cs:rysin
|
||||
imul cs:rzsin
|
||||
shld dx,ax,1
|
||||
mov ds:[di+14],dx ;14a
|
||||
|
||||
mov ax,cs:rycos
|
||||
imul cs:rzcos
|
||||
shld dx,ax,1
|
||||
mov ds:[di+0],dx ;0a
|
||||
|
||||
mov ax,dx
|
||||
imul cs:rxsin
|
||||
shld dx,ax,1
|
||||
sub ds:[di+14],dx ;14b
|
||||
|
||||
mov ax,cs:rxsin
|
||||
imul cs:rysin
|
||||
shld dx,ax,1
|
||||
mov cx,dx
|
||||
|
||||
mov ax,cs:rzsin
|
||||
imul dx
|
||||
shld dx,ax,1
|
||||
sub ds:[di+0],dx ;0b
|
||||
|
||||
mov ax,cs:rzcos
|
||||
imul cx
|
||||
shld dx,ax,1
|
||||
mov ds:[di+2],dx ;2a
|
||||
|
||||
mov ax,cs:rycos
|
||||
imul cs:rzsin
|
||||
shld dx,ax,1
|
||||
add ds:[di+2],dx ;2b
|
||||
|
||||
mov ax,cs:rxsin
|
||||
imul dx
|
||||
shld dx,ax,1
|
||||
mov ds:[di+12],dx ;12a
|
||||
|
||||
mov ax,cs:rysin
|
||||
imul cs:rzcos
|
||||
shld dx,ax,1
|
||||
add ds:[di+12],dx ;12b
|
||||
|
||||
mov ax,cs:rxcos
|
||||
imul cs:rzsin
|
||||
shld dx,ax,1
|
||||
neg dx
|
||||
mov ds:[di+6],dx ;6
|
||||
|
||||
mov ax,cs:rxcos
|
||||
imul cs:rzcos
|
||||
shld dx,ax,1
|
||||
mov ds:[di+8],dx ;8
|
||||
|
||||
mov ax,cs:rxcos
|
||||
imul cs:rysin
|
||||
shld dx,ax,1
|
||||
neg dx
|
||||
mov ds:[di+4],dx ;4
|
||||
|
||||
mov ax,cs:rxcos
|
||||
imul cs:rycos
|
||||
shld dx,ax,1
|
||||
mov ds:[di+16],dx ;16
|
||||
|
||||
mov ax,cs:rxsin
|
||||
mov ds:[di+10],ax ;10
|
||||
|
||||
ret
|
||||
calcmatrix ENDP
|
||||
|
||||
calcmatrixsep PROC NEAR ;calc 3 separate matrices
|
||||
;ds:[si+0]=rotx
|
||||
;ds:[si+2]=roty
|
||||
;ds:[si+4]=rotz
|
||||
;dest: ds:[di]
|
||||
;load values, check 'em and calc sin/cos
|
||||
;ROT-X
|
||||
mov bx,ds:[si]
|
||||
checkdeg bx
|
||||
mov ds:[si],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rxsin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rxcos,ax
|
||||
;ROT-Y
|
||||
mov bx,ds:[si+2]
|
||||
checkdeg bx
|
||||
mov ds:[si+2],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rysin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rycos,ax
|
||||
;ROT-Z
|
||||
mov bx,ds:[si+4]
|
||||
checkdeg bx
|
||||
mov ds:[si+4],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rzsin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rzcos,ax
|
||||
mov bx,0
|
||||
mov cx,32767
|
||||
|
||||
;rX
|
||||
mov ds:[di+0],cx
|
||||
mov ds:[di+2],bx
|
||||
mov ds:[di+4],bx
|
||||
mov ds:[di+6],bx
|
||||
mov ax,cs:rxcos
|
||||
mov ds:[di+8],ax
|
||||
mov ax,cs:rxsin
|
||||
mov ds:[di+10],ax
|
||||
mov ds:[di+12],bx
|
||||
mov ax,cs:rxsin
|
||||
neg ax
|
||||
mov ds:[di+14],ax
|
||||
mov ax,cs:rxcos
|
||||
mov ds:[di+16],ax
|
||||
add di,18
|
||||
|
||||
;rY
|
||||
mov ax,cs:rycos
|
||||
mov ds:[di+0],ax
|
||||
mov ds:[di+2],bx
|
||||
mov ax,cs:rysin
|
||||
neg ax
|
||||
mov ds:[di+4],ax
|
||||
mov ds:[di+6],bx
|
||||
mov ds:[di+8],cx
|
||||
mov ds:[di+10],bx
|
||||
mov ax,cs:rysin
|
||||
mov ds:[di+12],ax
|
||||
mov ds:[di+14],bx
|
||||
mov ax,cs:rycos
|
||||
mov ds:[di+16],ax
|
||||
add di,18
|
||||
|
||||
;rZ
|
||||
mov ax,cs:rzcos
|
||||
mov ds:[di+0],ax
|
||||
mov ax,cs:rzsin
|
||||
mov ds:[di+2],ax
|
||||
mov ds:[di+4],bx
|
||||
mov ax,cs:rzsin
|
||||
neg ax
|
||||
mov ds:[di+6],ax
|
||||
mov ax,cs:rzcos
|
||||
mov ds:[di+8],ax
|
||||
mov ds:[di+10],bx
|
||||
mov ds:[di+12],bx
|
||||
mov ds:[di+14],bx
|
||||
mov ds:[di+16],cx
|
||||
add di,18
|
||||
|
||||
ret
|
||||
calcmatrixsep ENDP
|
||||
|
||||
calcmatrix0 PROC NEAR ;rX*rY*rZ
|
||||
;ds:[si]=rotx
|
||||
;ds:[si]=roty
|
||||
;ds:[si]=rotz
|
||||
;dest: ds:[di]
|
||||
;load values, check 'em and calc sin/cos
|
||||
;ROT-X
|
||||
mov bx,ds:[si]
|
||||
checkdeg bx
|
||||
mov ds:[si],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rxsin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rxcos,ax
|
||||
;ROT-Y
|
||||
mov bx,ds:[si+2]
|
||||
checkdeg bx
|
||||
mov ds:[si+2],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rysin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rycos,ax
|
||||
;ROT-Z
|
||||
mov bx,ds:[si+4]
|
||||
checkdeg bx
|
||||
mov ds:[si+4],bx
|
||||
shl bx,1
|
||||
mov ax,cs:sintable16[bx]
|
||||
mov cs:rzsin,ax
|
||||
mov ax,cs:costable16[bx]
|
||||
mov cs:rzcos,ax
|
||||
|
||||
;matrix equations: rX*rY*rZ ;rZ*rY*rX
|
||||
; 0=Ycos*Zcos 2=Ycos*Zsin 4=-Ysin
|
||||
; 6=Xsin*Zcos*Ysin 8=Xsin*Ysin*Zsin 10=Ycos*Xsin
|
||||
; -Xcos*Zsin +Xcos*Zcos
|
||||
;12=Xcos*Zcos*Ysin 14=Xcos*Ysin*Zsin 16=Ycos*Xcos
|
||||
; +Xsin*Zsin -Xsin*Zcos
|
||||
|
||||
;calculate rotation matrix
|
||||
;0,2,10,16,4
|
||||
mov bx,cs:rycos
|
||||
mov ax,cs:rzcos
|
||||
imul bx
|
||||
shld dx,ax,1
|
||||
mov ds:[di+0],dx
|
||||
;
|
||||
mov ax,cs:rzsin
|
||||
imul bx
|
||||
shld dx,ax,1
|
||||
mov ds:[di+2],dx
|
||||
;
|
||||
mov ax,cs:rxsin
|
||||
imul bx
|
||||
shld dx,ax,1
|
||||
mov ds:[di+10],dx
|
||||
;
|
||||
mov ax,cs:rxcos
|
||||
imul bx
|
||||
shld dx,ax,1
|
||||
mov ds:[di+16],dx
|
||||
;
|
||||
mov ax,cs:rysin
|
||||
neg ax
|
||||
mov ds:[di+4],ax
|
||||
;6,8
|
||||
mov ax,cs:rxsin
|
||||
imul cs:rysin
|
||||
shld dx,ax,1
|
||||
mov cx,dx
|
||||
;
|
||||
mov ax,cx
|
||||
imul cs:rzcos
|
||||
shld dx,ax,1
|
||||
mov ds:[di+6],dx
|
||||
;
|
||||
mov ax,cx
|
||||
imul cs:rzsin
|
||||
shld dx,ax,1
|
||||
mov ds:[di+8],dx
|
||||
;
|
||||
mov bx,cs:rxcos
|
||||
mov ax,cs:rzsin
|
||||
imul bx
|
||||
shld dx,ax,1
|
||||
sub ds:[di+6],dx
|
||||
;
|
||||
mov ax,cs:rzcos
|
||||
imul bx
|
||||
shld dx,ax,1
|
||||
add ds:[di+8],dx
|
||||
;12,14
|
||||
mov ax,cs:rxcos
|
||||
imul cs:rysin
|
||||
shld dx,ax,1
|
||||
mov cx,dx
|
||||
;
|
||||
mov ax,cx
|
||||
imul cs:rzcos
|
||||
shld dx,ax,1
|
||||
mov ds:[di+12],dx
|
||||
;
|
||||
mov ax,cx
|
||||
imul cs:rzsin
|
||||
shld dx,ax,1
|
||||
mov ds:[di+14],dx
|
||||
;
|
||||
mov bx,cs:rxsin
|
||||
mov ax,cs:rzsin
|
||||
imul bx
|
||||
shld dx,ax,1
|
||||
add ds:[di+12],dx
|
||||
;
|
||||
mov ax,cs:rzcos
|
||||
imul bx
|
||||
shld dx,ax,1
|
||||
sub ds:[di+14],dx
|
||||
|
||||
ret
|
||||
calcmatrix0 ENDP
|
||||
|
||||
mulmacro MACRO row,col
|
||||
mov ax,ds:[si+0+row*6]
|
||||
imul word ptr es:[di+0+col*2]
|
||||
mov cx,dx
|
||||
mov bx,ax
|
||||
mov ax,ds:[si+2+row*6]
|
||||
imul word ptr es:[di+6+col*2]
|
||||
add cx,dx
|
||||
add bx,ax
|
||||
mov ax,ds:[si+4+row*6]
|
||||
imul word ptr es:[di+12+col*2]
|
||||
add cx,dx
|
||||
add bx,ax
|
||||
shld cx,bx,1
|
||||
ENDM
|
||||
|
||||
mulmatrices PROC NEAR
|
||||
;ds:si=matrix1,es:di=matrix2 => ds:si (overwrite)
|
||||
mulmacro 0,0
|
||||
push cx
|
||||
mulmacro 0,1
|
||||
push cx
|
||||
mulmacro 0,2
|
||||
push cx
|
||||
|
||||
mulmacro 1,0
|
||||
push cx
|
||||
mulmacro 1,1
|
||||
push cx
|
||||
mulmacro 1,2
|
||||
push cx
|
||||
|
||||
mulmacro 2,0
|
||||
push cx
|
||||
mulmacro 2,1
|
||||
push cx
|
||||
mulmacro 2,2
|
||||
|
||||
mov ds:[si+4+12],cx
|
||||
pop word ptr ds:[si+2+12]
|
||||
pop word ptr ds:[si+0+12]
|
||||
pop word ptr ds:[si+4+6]
|
||||
pop word ptr ds:[si+2+6]
|
||||
pop word ptr ds:[si+0+6]
|
||||
pop word ptr ds:[si+4]
|
||||
pop word ptr ds:[si+2]
|
||||
pop word ptr ds:[si+0]
|
||||
ret
|
||||
mulmatrices ENDP
|
||||
|
||||
|
||||
Loading…
Reference in a new issue