Академический Документы
Профессиональный Документы
Культура Документы
;******************************************************************
;
Area de programa.
;******************************************************************
;******************************************************************
; Lo siguiente es la nueva rutina de servicio para la INT 78H.
; la cual salva y recupera porciones de la pantalla.
;******************************************************************
NewInt:
PUSHA
;Guarda todos los registros.
CMP AH,00H
MOV CS:SW1,AH
;Desea salvar la pantalla?
JNE NI1
;No, continua
CALL GUARDA
;Si, guardar.
JMP NI9
NI1:
CMP AH,01H
;Desea recuperar la pantalla?
JNE NI9
;No, continua
CALL RECUPERA
;Si, recupera
NI9:
POPA
;Recupera todos los registros.
IRET
;Retorna de la INT 78H
;******************************************************************
; Salva la pantalla.
;******************************************************************
GUARDA:
PUSH ES
PUSH CS
POP ES
MOV CX,0002H
MOV DI,OFFSET FILA1
L1:
MOV AX,DS:[SI]
MOV ES:[DI],AX
ADD SI,0002H
ADD DI,0002H
LOOP L1
PUSH DS
MOV AX,0B800H
MOV DS,AX
MOV AH,ES:FILA2
SUB AH,ES:FILA1
INC AH
MOV ES:CONTF,AH
MOV AH,ES:COL2
SUB AH,ES:COL1
INC AH
MOV ES:CONTC,AH
MOV AL,ES:FILA1
MOV BL,0A0H
MUL BL
MOV CX,0000H
MOV CL,ES:COL1
ADD CX,CX
ADD AX,CX
MOV ES:PRIN,AX
MOV ES:PRIN1,AX
L0:
MOV DI,OFFSET BUFF
MOV CX,0000H
MOV CL,ES:CONTF
L4:
MOV BL,ES:CONTC
MOV SI,ES:PRIN
L5:
CMP ES:SW1,00
JNE L2
L2:
L3:
PS2:
MOV AX,DS:[SI]
MOV ES:[DI],AX
JMP L3
MOV AX,ES:[DI]
MOV DS:[SI],AX
ADD SI,0002H
ADD DI,0002H
DEC BL
JNZ L5
MOV AX,ES:PRIN
ADD AX,00A0H
MOV ES:PRIN,AX
LOOP L4
POP DS
POP ES
RETN
;******************************************************************
; Recupera la pantalla.
;******************************************************************
RECUPERA:
CMP ES:CONTF,01H
JE PS2
PUSH ES
PUSH CS
POP ES
PUSH DS
MOV AX,0B800H
MOV DS,AX
MOV AX,ES:PRIN1
MOV ES:PRIN,AX
JMP L0
;******************************************************************
; Hasta aqui llega la parte residente del programa.
;******************************************************************
;******************************************************************
; De aqui en adelante comienza la parte transitoria del TSR.
; La cual se descarta despues de quedar instalada la INT 78H.
;******************************************************************
CARGADOR: MOV AL,IntUse ;Recoge la INT a usar.
MOV AH,35H
INT 21H
MOV AX,ES
ADD AX,BX
;Verifica si esta todo en cero.
CMP AX,0000H
JE COLOCA
;No esta siendo utilizada, colocar la nueva.
MOV SI,OFFSET ErrMsg ;Si se esta utilizando, envia mensaje
CALL PrtString ;de error.
MOV AH,4CH
;Termina con codigo.
MOV AL,01H
INT 21H
COLOCA:
PrtString:
MOV CL,4
;Divide por 16
SHR DX,CL
;No en parrafos.
INC DX
;sumar 1 por seguridad.
MOV AL,00H
;Retorna el codigo de OK.
MOV AH,31H
;TSR function
INT 21H
MOV AH,09H
MOV DX,OFFSET ERRMSG
INT 21H
RETN
END INICIO
TEXTO
BLK
FILA1
COL1
FILA2
COL2
.MODEL SMALL
;Para crear un programa .COM
.386
.STACK 100H
.DATA
DB "Proposito: Este programa PRUEBA al TSR INT78-2 actua como una funcion,",0AH,0DH
DB "para salvar y recuperar areas de la RAM de video.",0AH,0DH
DB "Entradas:
AH
Funcion",0AH,0DH
DB "
00
Salva parte de la pantalla.",0AH,0DH
DB "
01
Recupera lo salvado.",0AH,0DH
DB "
SI
debe aputar al inicio de 4 bytes que representan",0AH,0DH
DB "
las coordenadas de los puntos diagonales.",0AH,0DH
DB "
esquina superior izquierda (fila1,columna1) y",0AH,0DH
DB "
esquina inferior derecha (fila2,columna2).",0AH,0DH
DB "
DS Segmento donde estan las coordenadas.$"
DB 50 DUP (0AH),"$"
DB 0CH
DB 00H
DB 15H
DB 40H
.CODE
MOV AX,SEG TEXTO
MOV DS,AX
MOV AH,02H
MOV BH,00H
MOV DX,0C00H
INT 10H
MOV AH,09H
MOV DX,OFFSET TEXTO
INT 21H
MOV AH,00H
INT 16H
MOV AH,00H
MOV SI,OFFSET FILA1
INT 78H
MOV AH,09H
MOV DX,OFFSET BLK
INT 21H
MOV AH,00H
INT 16H
MOV AH,01H
INT 78H
MOV AH,00H
INT 16H
MOV AX,4C00H
INT 21H
END