289 lines
5.2 KiB
NASM
289 lines
5.2 KiB
NASM
.386p
|
|
jumps
|
|
.model SMALL, SYSCALL
|
|
|
|
.data
|
|
|
|
include svga.ash
|
|
|
|
EVEN
|
|
|
|
Virgule dw 00
|
|
|
|
ALIGN 4
|
|
|
|
Largeur dd 0000
|
|
OffsetLine dd 0000
|
|
PoidFort dd 0000
|
|
Hauteur dd 0000
|
|
|
|
.code
|
|
|
|
public NoLanguage ScaleLine
|
|
public NoLanguage ScaleBox
|
|
|
|
;*══════════════════════════════════════════════════════════════════════════*/
|
|
|
|
ScaleBox proc uses ebx esi edi ebp,\
|
|
xs0:DWORD, ys0:DWORD, xs1:DWORD, ys1:DWORD, ptrs:DWORD,\
|
|
xd0:DWORD, yd0:DWORD, xd1:DWORD, yd1:DWORD, ptrd:DWORD
|
|
|
|
mov esi, ptrs
|
|
mov edi, ptrd
|
|
|
|
mov eax, xd0
|
|
add edi, eax
|
|
mov ecx, xd1
|
|
sub ecx, eax ; ECX delta x screen
|
|
|
|
|
|
mov edx, xs0 ; start x source
|
|
add esi, edx
|
|
mov eax, xs1 ; end x source
|
|
sub eax, edx ; delta source
|
|
inc eax
|
|
shl eax, 16 ; *65536
|
|
|
|
xor edx, edx
|
|
div ecx
|
|
mov [Virgule], ax
|
|
shr eax, 16 ; poid fort
|
|
mov [PoidFort], eax
|
|
|
|
inc ecx
|
|
mov [Largeur], ecx
|
|
mov eax, 640
|
|
sub eax, ecx
|
|
mov [OffsetLine], eax
|
|
|
|
mov eax, yd0
|
|
add edi, TabOffLine[eax*4]
|
|
mov ecx, yd1
|
|
sub ecx, eax
|
|
|
|
mov eax, ys0
|
|
add esi, TabOffLine[eax*4]
|
|
mov edx, eax
|
|
|
|
mov eax, ys1
|
|
sub eax, edx
|
|
inc eax
|
|
shl eax, 16
|
|
|
|
xor edx, edx
|
|
div ecx
|
|
inc ecx
|
|
mov [Hauteur], ecx
|
|
mov ebp, eax
|
|
shr ebp, 16
|
|
mov dx, ax
|
|
xor bx, bx
|
|
|
|
yloop: push ebp
|
|
push edx
|
|
push ebx
|
|
push esi
|
|
|
|
mov ebp, [PoidFort]
|
|
mov dx, [Virgule]
|
|
mov ecx, [Largeur]
|
|
xor bx, bx
|
|
EVEN
|
|
xloop: mov al, byte ptr[esi]
|
|
mov [edi], al
|
|
inc edi
|
|
add bx, dx ; virgule 16 bits
|
|
adc esi, ebp ; poid fort
|
|
dec ecx
|
|
jnz xloop
|
|
|
|
add edi, [OffsetLine] ; 640-delta x screen
|
|
|
|
pop esi
|
|
pop ebx
|
|
pop edx
|
|
pop ebp
|
|
|
|
xor eax, eax
|
|
add bx, dx ; virgule 16 bits
|
|
adc eax, ebp ; poid fort
|
|
add esi, TabOffLine[eax*4]
|
|
|
|
dec [Hauteur]
|
|
jnz yloop
|
|
|
|
ret
|
|
|
|
ScaleBox endp
|
|
|
|
;*══════════════════════════════════════════════════════════════════════════*/
|
|
|
|
ScaleLine proc uses ebx esi edi ebp,\
|
|
xs0:DWORD, xs1:DWORD, ptrs:DWORD,\
|
|
xe0:DWORD, xe1:DWORD, ptrd:DWORD
|
|
|
|
|
|
mov esi, ptrs
|
|
mov edi, ptrd
|
|
|
|
mov eax, xe0
|
|
mov ecx, xe1
|
|
|
|
sub ecx, eax ; ECX delta x screen
|
|
; jz
|
|
|
|
mov edx, xs0 ; start x source
|
|
mov eax, xs1 ; end x source
|
|
|
|
sub eax, edx ; delta source
|
|
|
|
shl eax, 16 ; *65536
|
|
xor edx, edx
|
|
|
|
div ecx
|
|
mov ebp, eax ; EBP step intensite, EDX reste
|
|
|
|
shr ebp, 16 ; poid fort
|
|
|
|
mov dx, ax
|
|
|
|
xor bx, bx
|
|
|
|
EVEN
|
|
xloop: mov al, byte ptr[esi]
|
|
mov [edi], al
|
|
inc edi
|
|
add bx, dx ; virgule
|
|
adc esi, ebp ; poid fort
|
|
dec ecx
|
|
jnz xloop
|
|
|
|
ret
|
|
|
|
ScaleLine endp
|
|
|
|
;----------------------------------------------------------------------------
|
|
; The
|
|
End
|
|
|
|
|
|
|
|
|
|
cumul_low dw 00
|
|
cumul_high dw 00
|
|
y_sprite dw 00
|
|
|
|
ScaleSprite proc uses es ds si di,\
|
|
Xaff:WORD,Yaff:WORD,NumSpf:WORD,PtrSpf:PTR,\
|
|
largeur:WORD,hauteur:WORD
|
|
|
|
mov ax,largeur
|
|
mov cs:word ptr[patch_largeur],ax
|
|
|
|
mov ax,hauteur
|
|
mov cs:word ptr[patch_hauteur],ax
|
|
mov cx,ax
|
|
|
|
les di,Log
|
|
|
|
mov bx,Yaff
|
|
shl bx,1
|
|
mov di,ss:[bx]
|
|
add di,Xaff
|
|
|
|
lds si,PtrSpf
|
|
|
|
mov bx,NumSpf
|
|
shl bx,1
|
|
add si,word ptr[si+bx]
|
|
add si,4 ; saute start x y
|
|
|
|
lodsw
|
|
mov cs:word ptr[patch_largeur_sprite],ax ; largeur sprite
|
|
mov bx,ax
|
|
|
|
lodsw ; hauteur sprite
|
|
|
|
xor dx,dx
|
|
div cx
|
|
mov bp,ax
|
|
xor ax,ax
|
|
mov y_sprite,ax
|
|
div cx
|
|
mov cumul_low,ax
|
|
|
|
mov ax,bp
|
|
mul bx
|
|
mov cumul_high,ax
|
|
|
|
jmp $+2
|
|
|
|
patch_hauteur equ $+1
|
|
mov cx,1234h
|
|
|
|
l1: push cx
|
|
push di
|
|
|
|
patch_largeur_sprite equ $+1
|
|
mov bx,1234h
|
|
|
|
patch_largeur equ $+1
|
|
mov cx,1234h
|
|
|
|
mov ax,bx ; delta
|
|
xor dx,dx
|
|
div cx ; /NbStep
|
|
mov bp,ax
|
|
xor ax,ax ; reste*65536
|
|
div cx ; /NbStep
|
|
mov dx,bp ; low
|
|
mov bp,ax ; high
|
|
|
|
xor bx,bx
|
|
|
|
push si
|
|
|
|
cl0: mov al,byte ptr[si]
|
|
stosb
|
|
add bx,bp
|
|
adc si,dx
|
|
loop cl0
|
|
|
|
pop si
|
|
|
|
mov ax,cumul_low
|
|
add y_sprite,ax
|
|
jnc l4
|
|
add si,cs:word ptr[patch_largeur_sprite]
|
|
l4: add si,cumul_high
|
|
|
|
pop di
|
|
add di,320
|
|
pop cx
|
|
loop l1
|
|
|
|
ret
|
|
|
|
ScaleSprite endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|