home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Shareware - Software Farm 2
/
wosw_2.zip
/
wosw_2
/
CPROG
/
CEXPRESS.ZIP
/
GRAPHIC.ASM
/
PAGESWAP.ASM
< prev
next >
Wrap
Assembly Source File
|
1989-05-03
|
2KB
|
64 lines
;void page_swap(box,page_number);
; unsigned char *box,page_number;
EXTRN _memory_model:byte
EXTRN _video_buffer:word
EXTRN _snow_protect:byte
_TEXT SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:_TEXT
PUBLIC _page_swap
_page_swap proc near
push bp ;
mov bp,sp ;set stack frame
push di ;
push si ;
cmp _memory_model,0 ;near or far?
jle begin ;jump if near
inc bp ;else add 2 to BP
inc bp ;
begin: push ds ;save DS
cmp _memory_model,2 ;data near or far?
jb L0 ;jump if near
lds si,dword ptr[bp+4] ;DS:SI pts to byte array
inc bp ;inc BP since dword ptr
inc bp ;
jmp short L00 ;
L0: mov si,[bp+4] ;NEAR case
L00: mov bl,_snow_protect ;fetch _snow_protect
cld ;set direction flag
mov cx,_video_buffer ;get video buffer addr
mov dl,[bp+6] ;get page number
mov ax,1000H ;page size
mul dl ;times number pages
add ax,cx ;add to buffer offset
mov es,ax ;ES pts to page
mov cx,2000 ;number words to exchange
sub di,di ;point DI to 0 offset
cmp bl,0 ;_snow_protect?
je L1 ;jump if not
mov dx,3D8H ;CGA mode select register
mov al,25h ;shuts off screen
out dx,al ;disable video
L1: mov ax,es:[di] ;get video word
xchg ax,[si] ;xchg with word in Box
stosw ;move Box word to screen
add si,2 ;forward box ptr
loop L1 ;go do next word
cmp bl,0 ;snow protect?
je L2 ;jump ahead if not
mov dx,3d8h ;CGA mode select register
mov al,41 ;80x25, blink enabled
out dx,al ;reenable video
L2: pop ds ;
pop si ;
pop di ;
pop bp ;
cmp _memory_model,0 ;quit
jle quit ;
db 0CBh ;RET far
quit: ret ;RET near
_page_swap endp
_TEXT ENDS
END