Initial commit
This commit is contained in:
285
LIB386/LIB_SVGA/S_BLOCK.ASM
Normal file
285
LIB386/LIB_SVGA/S_BLOCK.ASM
Normal file
@@ -0,0 +1,285 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; S_BLOCK.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386P
|
||||
jumps
|
||||
.model FLAT, SYSCALL
|
||||
|
||||
.data
|
||||
|
||||
include f:\projet\lib386\lib_svga\svga.ash
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
.code
|
||||
|
||||
public NoLanguage CopyBlock
|
||||
public NoLanguage SaveBlock
|
||||
public NoLanguage RestoreBlock
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; CopyBlock( x0, y0, x1, y1, *src, xd, yd, *dst )
|
||||
;
|
||||
CopyBlock 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]
|
||||
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 edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
|
||||
mov ebp, ebx
|
||||
inc eax
|
||||
shr ebx, 2
|
||||
and ebp, 11b
|
||||
|
||||
shr eax, 1
|
||||
jnc short odd
|
||||
Again:
|
||||
mov ecx, ebx
|
||||
rep movsd
|
||||
mov ecx, ebp
|
||||
rep movsb
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
odd:
|
||||
mov ecx, ebx
|
||||
rep movsd
|
||||
mov ecx, ebp
|
||||
rep movsb
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
|
||||
dec eax
|
||||
jnz short Again
|
||||
|
||||
CopyBlock_End: ret
|
||||
|
||||
CopyBlock endp
|
||||
|
||||
comment @
|
||||
|
||||
CopyBlock proc uses esi edi ebx,\
|
||||
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 edx, Screen_X
|
||||
sub edx, ebx ; DX Delta Screen
|
||||
Again:
|
||||
mov ecx, ebx
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
mov ecx, ebx
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
|
||||
add esi, edx
|
||||
add edi, edx
|
||||
dec eax
|
||||
jne short Again
|
||||
CopyBlock_End: ret
|
||||
CopyBlock endp
|
||||
|
||||
@
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; SaveBlock( *screen, *buffer, x0, y0, dx, dy )
|
||||
;
|
||||
; DS:SI *screen
|
||||
; ES:DI *buffer
|
||||
; AX x0
|
||||
; BX y0
|
||||
; CX dx
|
||||
; dx dy
|
||||
;
|
||||
|
||||
SaveBlock proc uses esi edi ebx ebp,\
|
||||
screen:DWORD, buffer:DWORD,\
|
||||
x0:DWORD, y0:DWORD, deltax:DWORD, deltay:DWORD
|
||||
|
||||
mov edi, buffer
|
||||
mov eax, x0
|
||||
mov ebx, y0
|
||||
mov ecx, deltax
|
||||
mov edx, deltay
|
||||
|
||||
sub ecx, eax
|
||||
sub edx, ebx ; DX = DeltaY
|
||||
inc ecx
|
||||
inc edx
|
||||
mov esi, TabOffLine[ebx*4]
|
||||
add esi, eax
|
||||
add esi, screen ; SI Offset Src
|
||||
|
||||
mov ebx, ecx ; BX = DeltaX
|
||||
|
||||
mov eax, Screen_X
|
||||
sub eax, ebx ; bp Delta Screen
|
||||
|
||||
mov ebp, ebx
|
||||
inc edx
|
||||
shr ebx, 2
|
||||
and ebp, 11b
|
||||
|
||||
shr edx, 1
|
||||
jnc short odd
|
||||
Again:
|
||||
mov ecx, ebx ; Delta X
|
||||
rep movsd
|
||||
mov ecx, ebp
|
||||
rep movsb
|
||||
|
||||
add esi, eax
|
||||
odd:
|
||||
mov ecx, ebx ; Delta X
|
||||
rep movsd
|
||||
mov ecx, ebp
|
||||
rep movsb
|
||||
|
||||
add esi, eax
|
||||
|
||||
dec edx
|
||||
jne Again
|
||||
|
||||
ret
|
||||
SaveBlock endp
|
||||
|
||||
comment @
|
||||
|
||||
SaveBlock proc uses esi edi ebx ebp,\
|
||||
screen:DWORD, buffer:DWORD,\
|
||||
x0:DWORD, y0:DWORD, deltax:DWORD, deltay:DWORD,\
|
||||
|
||||
mov edi, buffer
|
||||
mov eax, x0
|
||||
mov ebx, y0
|
||||
mov ecx, deltax
|
||||
mov edx, deltay
|
||||
|
||||
sub ecx, eax
|
||||
sub edx, ebx ; DX = DeltaY
|
||||
inc ecx
|
||||
inc edx
|
||||
mov esi, TabOffLine[ebx*4]
|
||||
add esi, eax ; SI Offset Src
|
||||
add esi, screen
|
||||
|
||||
mov ebx, ecx ; BX = DeltaX
|
||||
|
||||
mov ebp, Screen_X
|
||||
sub ebp, ebx ; bp Delta Screen
|
||||
Again:
|
||||
mov ecx, ebx ; Delta X
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
mov ecx, ebx
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
|
||||
add esi, ebp
|
||||
dec edx
|
||||
jne Again
|
||||
|
||||
ret
|
||||
SaveBlock endp
|
||||
|
||||
@
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; RestoreBlock( *buffer, *screen, x0, y0, dx, dy )
|
||||
;
|
||||
; DS:SI *buffer
|
||||
; ES:DI *screen
|
||||
; AX x0
|
||||
; BX y0
|
||||
; CX x1
|
||||
; dx y1
|
||||
; Already Clipped
|
||||
;
|
||||
RestoreBlock proc uses esi edi ebx ebp,\
|
||||
screen:DWORD, buffer:DWORD,\
|
||||
x0:DWORD, y0:DWORD, deltax:DWORD, deltay:DWORD
|
||||
|
||||
mov esi, buffer
|
||||
mov eax, x0
|
||||
mov ebx, y0
|
||||
mov ecx, deltax
|
||||
mov edx, deltay
|
||||
|
||||
sub ecx, eax
|
||||
sub edx, ebx ; DX = DeltaY
|
||||
inc ecx
|
||||
inc edx
|
||||
mov edi, TabOffLine[ebx*4]
|
||||
add edi, eax ; SI Offset Src
|
||||
add edi, screen
|
||||
mov ebx, ecx ; BX = DeltaX
|
||||
|
||||
mov ebp, Screen_X
|
||||
sub ebp, ebx ; bp Delta Screen
|
||||
Again:
|
||||
mov ecx, ebx ; Delta X
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
mov ecx, ebx
|
||||
and ecx, 11b
|
||||
rep movsb
|
||||
|
||||
add edi, ebp
|
||||
dec edx
|
||||
jne Again
|
||||
|
||||
ret
|
||||
RestoreBlock endp
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user