home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
progm
/
dpl.zip
/
SCRNBK.D
< prev
next >
Wrap
Text File
|
1988-07-11
|
3KB
|
137 lines
; Doug's Programming Language -- DPL, Version 2.22
; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
;-----------------------------------------
; S C R N B K -- BACKUP THE CURRENT STATE OF THE VIDEO DISPLAY,
; ASSUMING THAT IT IS IN TEXT MODE.
;
; Entry conditions:
; AX points to the start of the video buffer
; Exit conditions:
; DX Holds the old row/column position of the cursor
; CX holds the cursor size
; Assume AX,BX,CX,DX registers destroyed
;
;
; S C R N R S -- RESTORES THE VIDEO TO THE PREVIOUS STATE.
;
; Entry conditions:
; None
; Exit conditions:
; Assume AX,BX,CX,DX registers destroyed
;
SUBPGM SCRNBK
;
;-------------------------===========================--------------------------
;-------------------------====< BEGIN EXECUTION >====--------------------------
;-------------------------===========================--------------------------
;
BEGIN SCRNBK
PUSH DI ; SAVE THE INDEXES
PUSH ES
PUSH DS
;
; MOVE THE BUFFER POINTER INTO DI
;
MOV DI,AX ; DI WILL POINT TO THE TARGET BUFFER
;
; GET & SAVE THE CURRENT VIDEO STATE
;
MOV AH,0FH ; GET THE CURRENT VIDEO DATA
INT 10H
MOV [VIDPAGE],BH ; SAVE THE PAGE
MOV AH,03H
INT 10H
;
PUSH DX ; SAVE THE CURSOR & SCAN LINES
PUSH CX
;
; SETUP THE SEGMENTS
;
PUSH DS ; PLACE DS IN ES
POP ES
MOV AX,0B000H
TEST [CRTFLAG],01 ; MONO BOARD?
JE BKSC_05 ; YES, CONTINUE ON...
MOV AX,0B800H ; NO, CGA
;
BKSC_05:
MOV DS,AX
;
; CALCUATE THE STARTING PAGE NUMBER
;
SUB BL,BL
XCHG BH,BL ; PLACE THE PAGE # IN BL
MOV AX,2048*2
MOV CX,AX ; MOVE A COPY FOR THE BLOCK MOVE
MUL BX
MOV SI,AX ; SI POINTS TO START OF VID RAM
CLD
REP MOVSB ; BACK IT UP!!!
;
POP CX ; RETURN WITH THE X,Y & CURSOR SIZE
POP DX
;
POP DS
POP ES
POP DI
RETURN
;
;
;---------------------------------------
; S C R N R S -- RESTORE THE SCREEN
;
; Entry conditions:
; AX points to the screen backup buffer
; DX holds the cursor X,Y coordinates
; CX holds the cursor shape
; Exit conditions:
; Assume all working registers modified
;
PUBLIC SCRNRS
SCRNRS PROC
PUSH ES ; DO NOT DISTURB
PUSH DX ; SAVE THE ROW/COL & CURSOR SIZE
PUSH CX
MOV SI,AX ; SI POINTS TO THE SCREEN BUFFER
;
; GET THE PROPER VIDEO SEGMENT
;
MOV AX,0B000H
TEST [CRTFLAG],01 ; MONO BOARD?
JE RSSC_05 ; YES, CONTINUE ON...
MOV AX,0B800H ; NO, CGA
;
RSSC_05:
MOV ES,AX
;
; CALCULATE THE STARTING PAGE NUMBER
;
SUB BH,BH
MOV BL,[VIDPAGE] ; BX = VIDEO PAGE
MOV AX,2048*2
MOV CX,AX ; CX HOLDS THE SIZE TO BE MOVED
MUL BX
MOV DI,AX ; DI POINTS TO START OF VID RAM
;
; MOVE IT...
;
CLD
REP MOVSB ; BACK IT UP!!!
;
; RESTORE THE PREVIOUS VIDEO STATE
;
POP CX ; GET THE CURSOR SIZE
POP DX ; GET THE ROW/COL
;
MOV BH,[VIDPAGE]
MOV AH,02H ; SET THE CURSOR POSITION
INT 10H
;
POP ES
RETURN
SCRNRS ENDP
;
ENDPGM SCRNBK
;