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 10H70: SALTO1: CALL AJUSTAR
71: MOV CX,PXMAX 72: MOV DX,9973: PINTAR: CALL PIXEL
74: CMP CX,159 75: JE SALTO2 76: DEC DX77: LOOP PINTAR
78: 79: SALTO2: MOV DX,PYMIN80: PINTAR2: CALL PIXEL
81: CMP CX,PXMIN 82: JE SALTO3 83: DEC DX84: LOOP PINTAR2
85: 86: SALTO3: MOV CX,PXMAX 87: MOV DX,9988: PINTAR3: CALL PIXEL
89: CMP CX,159 90: JE SALTO4 91: INC DX92: LOOP PINTAR3
93: 94: SALTO4: MOV DX,PYMAX95: PINTAR4: CALL PIXEL
96: CMP CX,PXMIN 97: JE SALTO5 98: INC DX99: 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,199125: SUB SI,TAMA¥O
126: MOV PYMIN,SI 127: MOV SI,259128: 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 ENDS173: END BEGIN
No hay comentarios:
Publicar un comentario