; 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