ReC98/th03/math/vector2_between_plus.asm

48 lines
942 B
NASM

; Constructs a vector from (x1|y1) to (x2|y2), and additionally applies
; [plus_angle] to the resulting angle between the two points.
; int pascal far vector2(int r, int far *dx, int far *dy, char plus_angle, int y2, int x2, int y1, int x1)
vector2_between_plus proc far
@@r = word ptr 6
@@_dx = dword ptr 8
@@_dy = dword ptr 0Ch
@@plus_angle = byte ptr 10h
@@y2 = word ptr 12h
@@x2 = word ptr 14h
@@y1 = word ptr 16h
@@x1 = word ptr 18h
push bp
mov bp, sp
push si
mov si, [bp+@@r]
mov ax, [bp+@@y2]
sub ax, [bp+@@y1]
push ax
mov ax, [bp+@@x2]
sub ax, [bp+@@x1]
push ax
call iatan2
add al, [bp+@@plus_angle]
mov dl, al
movsx eax, si
mov dh, 0
add dx, dx
mov bx, dx
movsx edx, _CosTable8[bx]
movsx ecx, _SinTable8[bx]
imul eax, edx
sar eax, 8
les bx, [bp+@@_dy]
mov es:[bx], ax
movsx eax, si
imul eax, ecx
sar eax, 8
les bx, [bp+@@_dx]
mov es:[bx], ax
pop si
pop bp
retf 14h
vector2_between_plus endp