home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD-ROM Magazin 1997 January
/
CD_01_97.ISO
/
game
/
movbloc2.asm
< prev
next >
Wrap
Assembly Source File
|
1994-11-10
|
2KB
|
142 lines
; 32-bit moveblock rutiinit
;
; MOVE_BLOCK_SCREEN siirtää SCR:stä SCREEN:iin
data segment word public
LANG EQU PASCAL
MODEL TPASCAL
assume ds:data
extrn SCR:dword
data ends
GLOBAL LANG MOVE_BLOCK_SCREEN : FAR
GLOBAL LANG MOVE_BLOCK : FAR
CODESEG
assume cs:code
.386
frametime DW ?
MOVE_BLOCK_SCREEN PROC FAR x1:word, y1:word, lev:word, kork:word, x2:word, Y2:word
;public MOVE_BLOCK_SCREEN
PUSH DS
add LEV,3
mov ax,x1
mov bx,ax
and ax,1111111111111100b
cmp ax,bx ;kun laitetaan 4:lla jaolliseen paikkaan niin
jnl tero1 ;offsetti tulee pienemmäksi eli täytyy lisätä LEVeyttä
add LEV,4
tero1:
mov ax,0a000h
mov es,ax
mov ax,320 ;lasketaan DEST offsetti
mul Y2
add ax,X2
mov di,ax
LDS SI,SCR ;lasketaan SOURCE offsetti
mov ax,320
mul Y1
add ax,X1
mov SI,AX
and si,1111111111111100b ;offsetti 4:n tarkkudella
and di,1111111111111100b
mov dx,LEV ;LEV/4
shr dx,2
mov bx,320 ;paljonko plussataan rivin perässä
mov cx,DX
shl CX,2
sub bx,cx ;BX= riviadd
mov cx,KORK
YLOOP:
mov ax,cx
mov cx,dx
REP MOVSD
add si,BX ;RIVIADD
add di,BX
mov cx,ax
LOOP YLOOP
pop DS
ret
MOVE_BLOCK_SCREEN ENDP
;-----------------------------------------------------------------------
MOVE_BLOCK PROC FAR FROM:DWORD, TOB:DWORD, x1:word, y1:word, lev:word, kork:word, x2:word, Y2:word
;public MOVE_BLOCK
PUSH DS
add LEV,3
mov ax,x1
mov bx,ax
and ax,1111111111111100b
cmp ax,bx ;kun laitetaan 4:lla jaolliseen paikkaan niin
jnl tero2 ;offsetti tulee pienemmäksi eli täytyy lisätä LEVeyttä
add LEV,4
tero2:
LES DI,TOB
mov ax,320 ;lasketaan DEST offsetti
mul Y2
add ax,X2
mov di,ax
LDS SI,FROM ;lasketaan SOURCE offsetti
mov ax,320
mul Y1
add ax,X1
mov SI,AX
and si,1111111111111100b ;offsetti 4:n tarkkudella
and di,1111111111111100b
mov dx,LEV ;LEV/4
shr dx,2
mov bx,320 ;paljonko plussataan rivin perässä
mov cx,DX
shl CX,2
sub bx,cx ;BX= riviadd
mov cx,KORK
YLOOP2:
mov ax,cx
mov cx,dx
REP MOVSD
add si,BX ;RIVIADD
add di,BX
mov cx,ax
LOOP YLOOP2
pop DS
ret
MOVE_BLOCK ENDP
code ENDS
END