PIC EQU 20H
EOI EQU 20H
TIMER EQU 10H
NF10 EQU 9H
NRELOJ EQU 1CH
ORG 36
F10_IP DW ?
F10_CS DW 0000
ORG 70H
RELOJ_IP DW ?
RELOJ_CS DW 0000
ORG 1000H
PULSACIONES DW 0
PULSADA DB 0
HORAS DB 30H
DB 30H
DB ":"
MINUTOS DB 30H
DB 30H
FIN DB ?
;.........................................
ORG 5000H
; Rutina de atencion a la interrupcion de f10.
RUTINA_F10:PUSH AX
INC PULSACIONES
MOV PULSADA,1
MOV AL,EOI
OUT EOI,AL
POP AX
IRET
;...............................................
ORG 6000H
RUTINA_RELOJ:PUSH AX
INC MINUTOS+1
CMP MINUTOS+1,3AH
JNZ seis
MOV MINUTOS+1,30H
INC MINUTOS
CMP MINUTOS,36H
JNZ seis
MOV MINUTOS, 30H
cuatro: INC HORAS+1
CMP HORAS+1,34H
JNZ cinco
CMP HORAS,32H
JNZ cinco
MOV HORAS,30H
MOV HORAS+1,30H
JMP seis
cinco: CMP HORAS+1,3AH
JNZ seis
MOV HORAS+1,30H
INC HORAS
; Pone el contador del timer a 0
seis: MOV AL,0
OUT TIMER,AL
MOV AL,EOI
OUT EOI,AL
POP AX
IRET
;.............................................
ORG 2000H
; Modifica los vectores de interrupcion y
; programa al PIC,y al TIMER.
INICIO: CLI
MOV F10_IP, (OFFSET RUTINA_F10)
MOV RELOJ_IP, (OFFSET RUTINA_RELOJ)
MOV AL,0FCH
OUT PIC+1,AL
MOV AL,NF10
OUT PIC+4,AL
MOV AL,NRELOJ
OUT PIC+5,AL
MOV AL,120
OUT TIMER+1,AL
MOV AL,0
OUT TIMER,AL
MOV BX, OFFSET HORAS
MOV AL,(OFFSET FIN)-(OFFSET HORAS)
STI
bucle: CMP PULSADA,1
JNZ bucle
MOV PULSADA,0
INT 7
JMP bucle
END