Código:
DibujaCronometro:
; decenas de horas
ld a, [_HORAS]
and $F0
swap a
ld [_POS_CRONOM], a
; horas
ld a, [_HORAS]
and $0F
ld [_POS_CRONOM+1], a
; :
ld a, 10
ld [_POS_CRONOM+2], a
; decenas de minutos
ld a, [_MINUTOS]
and $F0
swap a
ld [_POS_CRONOM+3], a
; minutos
ld a, [_MINUTOS]
and $0F
ld [_POS_CRONOM+4], a
; :
ld a, 10
ld [_POS_CRONOM+5], a
; decenas de segundos
ld a, [_SEGUNDOS]
and $F0
swap a
ld [_POS_CRONOM+6], a
; segundos
ld a, [_SEGUNDOS]
and $0F
ld [_POS_CRONOM+7], a
ret
; Controla el tiempo
ControlTimer:
ld a, [_CONTROL_TIEMPO]
cp 20 ; cada 20 interrupciones, pasa 1 seg
jr z, .incrementa
inc a ; si no, incrementamos y volvemos
ld [_CONTROL_TIEMPO], a
ret
.incrementa
; reseteamos el contador
ld a, 0
ld [_CONTROL_TIEMPO], a
; incrementamos los segundos
ld a, [_SEGUNDOS]
inc a
daa
cp 96 ; han pasado 60 segundos? (96 porque usamos BCD)
jr z, .minutos ; si, a controlar los minutos
ld [_SEGUNDOS], a ; no, guardamos y volvemos
ret
.minutos
ld a, 0
ld [_SEGUNDOS], a ; incrementar el minuto, segundos a 0
ld a, [_MINUTOS]
inc a
daa
cp 96 ; han pasado 60 minutos?
jr z, .horas ; si, a controlar las horas
ld [_MINUTOS], a ; no, guardamos y volvemos
ret
.horas
ld a, 0
ld [_MINUTOS], a ; incrementar el minuto, segundos a 0
ld a, [_HORAS]
inc a
daa
cp 36 ; han pasado 24 horas? (36 equivale a 24 en BCD)
jr z, .reset ; si, a volver a empezar
ld [_HORAS], a ; no, guardamos y volvemos
ret
.reset
call Resetea
ret
Marcadores