76 lines
1.5 KiB
NASM
76 lines
1.5 KiB
NASM
;----------------------------------------------------------------------------
|
|
; S_BLOCK.ASM 386
|
|
; (c) Adeline 1993
|
|
;----------------------------------------------------------------------------
|
|
.386P
|
|
jumps
|
|
.model SMALL, SYSCALL
|
|
|
|
.data
|
|
|
|
include f:\projet\lib386\lib_svga\svga.ash
|
|
|
|
;----------------------------------------------------------------------------
|
|
.code
|
|
|
|
public NoLanguage CopyBlockIncrust
|
|
|
|
;----------------------------------------------------------------------------
|
|
; CopyBlockIncrust( x0, y0, x1, y1, *src, xd, yd, *dst )
|
|
;
|
|
CopyBlockIncrust proc uses esi edi ebx ebp,\
|
|
x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD, src:DWORD,\
|
|
xd:DWORD, yd:DWORD, dst:DWORD
|
|
|
|
mov edx, x0
|
|
mov ecx, y0
|
|
mov ebx, x1
|
|
mov eax, y1
|
|
;----------------------
|
|
|
|
mov esi, TabOffLine[ecx*4] ; y0
|
|
add esi, src
|
|
add esi, edx ; SI Offset Src
|
|
|
|
mov edi, yd
|
|
mov edi, TabOffLine[edi*4]
|
|
add edi, dst
|
|
add edi, xd ; DI Offset Dst
|
|
|
|
sub ebx, edx
|
|
inc ebx ; BX Delta Y
|
|
|
|
sub eax, ecx
|
|
inc eax ; AX Delta X
|
|
mov ebp, eax
|
|
|
|
mov edx, Screen_X
|
|
sub edx, ebx ; DX Delta Screen
|
|
Again:
|
|
mov ecx, ebx
|
|
|
|
loopx: lodsb
|
|
or al, al
|
|
jz incrust
|
|
mov byte ptr[edi], al
|
|
incrust: inc edi
|
|
dec ecx
|
|
jnz loopx
|
|
|
|
add esi, edx
|
|
add edi, edx
|
|
dec ebp
|
|
jne short Again
|
|
CopyBlock_End: ret
|
|
CopyBlockIncrust endp
|
|
|
|
;----------------------------------------------------------------------------
|
|
; The
|
|
End
|
|
|
|
|
|
|
|
|
|
|
|
|