; Ejemplo de ISR que gestiona un contador de ticks y segundos. ORG 50000 CALL CLS ; Instalamos la ISR: LD HL, CLOCK_ISR_ASM_ROUTINE DI ; Desactivar interrupciones LD ($FEFF), HL ; Guardamos en ($FEFF) la direccion LD A, $FE ; de la rutina CLOCK_ISR_ASM_ROUTINE LD I, A ; I = $FE => direccion de ISR en $FEFF IM 2 ; Cambiar a IM 2 EI ; Activar interrupciones JR ImprimirNumero ; Hacemos la 1a impresion: 00 Bucle: HALT ImprimirNumero: LD DE, 0 CALL CursorAt ; Cursor en (0,0) LD A, (seconds) CALL PrintNum2digits JR Bucle ; Repetir indefinidamente ;----------------------------------------------------------------------- ; Rutina de ISR : incrementa FRAMES 50 veces por segundo. ;----------------------------------------------------------------------- INTS_PER_SECOND EQU 50 CLOCK_ISR_ASM_ROUTINE: PUSH AF PUSH HL LD A, (ticks) INC A LD (ticks), A CP INTS_PER_SECOND JR C, FRAMES_menor_que_50 SUB INTS_PER_SECOND ; Restamos 50 a A (no lo hago 0 directamente ; por si alguien incremento su valor externamente) LD HL, seconds INC (HL) ; Incrementamos segundos FRAMES_menor_que_50: LD (ticks), A POP HL POP AF EI RETI ticks DB 0 seconds DB 0 ;--------------------------------------------------------- INCLUDE "utils.asm" END 50000