📄 gui_scr.asm
字号:
DATA SEGMENT PARA
DOS_SCREEN DB 4096 DUP(?)
DOS_CUR_POS DW ?
EDIT_SCREEN DB 4096 DUP(?)
EDIT_CUR_POS DW ?
TEMP_SCREEN DB 4096 DUP(?)
DATA ENDS
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DATA
PUBLIC SAVE_DOS_SCR
PUBLIC RESET_DOS_SCR
PUBLIC SAVE_SCR
PUBLIC RESET_SCR
PUBLIC P0_TO_P1 ;COPY PAGE0 TO PAGE1
PUBLIC P1_TO_P0 ;COPY PAGE1 TO PAGE0
PUBLIC SAVE_P1
PUBLIC RESET_P1
;------------------SAVE DOS SCREEN----------------------
SAVE_DOS_SCR PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV BX,0
MOV CX,4000
LP_DOS_SAVE:
MOV AX,0B800H
MOV DS,AX
MOV DL,DS:[BX]
MOV AX,DATA
MOV DS,AX
MOV DOS_SCREEN[BX],DL
INC BX
LOOP LP_DOS_SAVE
MOV AH,03H
MOV BH,00H
INT 10H
MOV DOS_CUR_POS,DX
POP DS
POP DX
POP CX
POP BX
POP AX
RETF
SAVE_DOS_SCR ENDP
;-------------------------------------------------------
;------------------RESET DOS SCREEN---------------------
RESET_DOS_SCR PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV BX,0
MOV CX,4000
LP_DOS_RESET:
MOV AX,DATA
MOV DS,AX
MOV DL,DOS_SCREEN[BX]
MOV AX,0B800H
MOV DS,AX
MOV DS:[BX],DL
INC BX
LOOP LP_DOS_RESET
MOV AX,DATA
MOV DS,AX
MOV AH,02H
MOV BH,00H
MOV DX,DOS_CUR_POS
INT 10H
POP DS
POP DX
POP CX
POP BX
POP AX
RETF
RESET_DOS_SCR ENDP
;-------------------------------------------------------
;------------------SAVE SCREEN--------------------------
SAVE_SCR PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV BX,0
MOV CX,4000
LP_SAVE:
MOV AX,0B800H
MOV DS,AX
MOV DL,DS:[BX]
MOV AX,DATA
MOV DS,AX
MOV EDIT_SCREEN[BX],DL
INC BX
LOOP LP_SAVE
MOV AH,03H
MOV BH,00H
INT 10H
MOV EDIT_CUR_POS,DX
POP DS
POP DX
POP CX
POP BX
POP AX
RETF
SAVE_SCR ENDP
;-------------------------------------------------------
;------------------RESET SCREEN-------------------------
RESET_SCR PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV BX,0
MOV CX,4000
LP_RESET:
MOV AX,DATA
MOV DS,AX
MOV DL,EDIT_SCREEN[BX]
MOV AX,0B800H
MOV DS,AX
MOV DS:[BX],DL
INC BX
LOOP LP_RESET
MOV AX,DATA
MOV DS,AX
MOV AH,02H
MOV BH,00H
MOV DX,EDIT_CUR_POS
INT 10H
MOV AH,01H
MOV CH,13
MOV CL,14
INT 10H
POP DS
POP DX
POP CX
POP BX
POP AX
RETF
RESET_SCR ENDP
;-------------------------------------------------------
;---------------------P0_TO_P1--------------------------
P0_TO_P1 PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV BX,0
MOV CX,4000
MOV AX,0B800H
MOV DS,AX
MOV AX,0B900H
MOV ES,AX
P01_SAVE:
MOV DL,DS:[BX]
MOV ES:[BX],DL
INC BX
LOOP P01_SAVE
POP DS
POP DX
POP CX
POP BX
POP AX
RETF
P0_TO_P1 ENDP
;-------------------------------------------------------
;---------------------P1_TO_P0--------------------------
P1_TO_P0 PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV BX,0
MOV CX,4000
MOV AX,0B900H
MOV DS,AX
MOV AX,0B800H
MOV ES,AX
P10_SAVE:
MOV DL,DS:[BX]
MOV ES:[BX],DL
INC BX
LOOP P10_SAVE
POP DS
POP DX
POP CX
POP BX
POP AX
RETF
P1_TO_P0 ENDP
;-------------------------------------------------------
;-------------------SAVE PAGE1 TO TEMP------------------
SAVE_P1 PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV BX,0
MOV CX,4000
MOV AX,DATA
MOV DS,AX
MOV AX,0B900H
MOV ES,AX
SP_RESET:
MOV DL,ES:[BX]
MOV TEMP_SCREEN[BX],DL
INC BX
LOOP SP_RESET
POP DS
POP DX
POP CX
POP BX
POP AX
RETF
SAVE_P1 ENDP
;-------------------------------------------------------
;-----------RESET PAGE1 TO EMPTY EDIT SCREEN------------
;ATTENTION- ASSUME TEMP_SCREEN IS USED JUST AT THE BEGINNIGN
RESET_P1 PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
MOV BX,0
MOV CX,4000
RP_RESET:
MOV AX,DATA
MOV DS,AX
MOV DL,TEMP_SCREEN[BX]
MOV AX,0B900H
MOV DS,AX
MOV DS:[BX],DL
INC BX
LOOP RP_RESET
POP DS
POP DX
POP CX
POP BX
POP AX
RETF
RESET_P1 ENDP
;-------------------------------------------------------
CODE ENDS
END SAVE_DOS_SCR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -