Programa residente, es un protector de pantalla que pinta rombos de afuera hacia el centro de la pantalla, esta bueno, si mal no me equivoco se ejecuta al minuto
1: .MODEL TINY
2: CODSEG SEGMENT PARA
3: ASSUME CS:CODSEG, DS:CODSEG, SS:CODSEG
4: ORG 100H
5: BEGIN: JMP CARGADOR
6: SALVINT09 DD ?
7: SALVINT1C DD ?
8: CONTADOR DW 1092
9: ATRIBUTO DB ?
10: ACTIVADO DB 0
11: PXMAX DW ?
12: PXMIN DW ?
13: PYMAX DW ?
14: PYMIN DW ?
15: TAMA¥O DW 0
16:
17: ; RUTINA DE SERVICIO PARA EL TECLADO
18: TECLADO: CLI
19: PUSH ax
20: PUSH bx
21: PUSH cx
22: PUSH dx
23: PUSH sp
24: PUSH bp
25: PUSH si
26: PUSH di
27: PUSHF
28: MOV AH,1
29: INT 16H
30: JZ FINAL
31: CMP ACTIVADO,1
32: JNE AQUI
33: MOV AH,0
34: MOV AL,3
35: INT 10H
36: AQUI: MOV CONTADOR,1092
37: MOV ACTIVADO,0
38:
39: FINAL: STI
40: POPF
41: POP di
42: POP si
43: POP bp
44: POP sp
45: POP dx
46: POP cx
47: POP bx
48: POP ax
49: JMP CS:SALVINT09 ;REASUMIR INTERRUPCION 09
50:
51: ; RUTINA DE SERVICIO PARA EL RELOJ
52: TIMER: PUSH ax
53: PUSH bx
54: PUSH cx
55: PUSH dx
56: PUSH sp
57: PUSH bp
58: PUSH si
59: PUSH di
60: PUSHF
61: DEC CONTADOR
62: JNZ FINAL
63: CMP ACTIVADO,0
64: JNE SALTO1
65: MOV ACTIVADO,1
66:
67: MOV AH,0
68: MOV AL,13H
69: INT 10H
70: SALTO1: CALL AJUSTAR
71: MOV CX,PXMAX
72: MOV DX,99
73: PINTAR: CALL PIXEL
74: CMP CX,159
75: JE SALTO2
76: DEC DX
77: LOOP PINTAR
78:
79: SALTO2: MOV DX,PYMIN
80: PINTAR2: CALL PIXEL
81: CMP CX,PXMIN
82: JE SALTO3
83: DEC DX
84: LOOP PINTAR2
85:
86: SALTO3: MOV CX,PXMAX
87: MOV DX,99
88: PINTAR3: CALL PIXEL
89: CMP CX,159
90: JE SALTO4
91: INC DX
92: LOOP PINTAR3
93:
94: SALTO4: MOV DX,PYMAX
95: PINTAR4: CALL PIXEL
96: CMP CX,PXMIN
97: JE SALTO5
98: INC DX
99: LOOP PINTAR4
100:
101: SALTO5: ADD TAMA¥O,2
102: CMP TAMA¥O,96
103: JNE SALTO6
104: MOV TAMA¥O,0
105:
106: SALTO6: NOP
107: MOV CONTADOR,5
108: INC ATRIBUTO
109:
110: POPF
111: POP di
112: POP si
113: POP bp
114: POP sp
115: POP dx
116: POP cx
117: POP bx
118: POP ax
119: JMP CS:SALVINT1C ;REASUMIR INTERRUPCION 1CH
120:
121: AJUSTAR: MOV SI,0
122: ADD SI,TAMA¥O
123: MOV PYMAX,SI
124: MOV SI,199
125: SUB SI,TAMA¥O
126: MOV PYMIN,SI
127: MOV SI,259
128: SUB SI,TAMA¥O
129: MOV PXMAX,SI
130: MOV SI,59
131: ADD SI,TAMA¥O
132: MOV PXMIN,SI
133: RET
134:
135: PIXEL: MOV AH,0CH
136: MOV AL,ATRIBUTO
137: MOV BH,0
138: INT 10H
139: RET
140:
141: CARGADOR: CLI ;SE PREVIENEN INT POSTERIORES
142:
143: MOV AH,35H ;SE OBTIENE LA DIRECCION DE LA INT 09H EN ES:BX
144: MOV AL,09H
145: INT 21H
146:
147: MOV WORD PTR SALVINT09,BX
148: MOV WORD PTR SALVINT09+2,ES
149:
150: MOV AH,35H ;SE OBTIENE LA DIRECCION DE LA INT 1CH EN ES:BX
151: MOV AL,1CH
152: INT 21H
153:
154: MOV WORD PTR SALVINT1C,BX
155: MOV WORD PTR SALVINT1C+2,ES
156:
157: MOV AH,25H
158: MOV AL,09 ;SE ESTABLECE LA NUEVA DIRECCION PARA LA INT 09H EN BORRADOR
159: LEA DX,CS:TECLADO
160: INT 21H
161:
162: MOV AH,25H
163: MOV AL,1CH ;SE ESTABLECE LA NUEVA DIRECCION PARA LA INT 09H EN BORRADOR
164: LEA DX,CS:TIMER
165: INT 21H
166:
167: MOV AH,31H ;PETICION PARA PERMANECER RESIDENTE
168: MOV AL,00
169: LEA DX,CS:CARGADOR ;SE FIJA EL TAMAÑO DE LA PARTE RESIDENTE
170: INT 21H
171: STI ;SE REESTABLECEN LAS INTERRUPCIONES
172: CODSEG ENDS
173: END BEGIN
No hay comentarios:
Publicar un comentario