CIA1: Reloj TOD

El C64 dispone de un reloj llamado TOD – Time of Day. No se trata de un reloj como el de los ordenadores modernos, que si se apaga y enciende el ordenador sigue en hora gracias a una batería. Es más bien un contador que, partiendo de cero, se va incrementando. Si se pone en hora, a partir de ese momento marcará la hora del día con horas, minutos, segundos y décimas de segundo.

El reloj TOD consta de cuatro registros:

REGISTRO DIRECCIÓN FUNCIÓN
TODTEN $dc08 Time of day. Décimas de segundo.
TODSEC $dc09 Time of day. Segundos.
TODMIN $dc0a Time of day. Minutos.
TODHRS $dc0b Time of day. Horas.

Si se leen los registros se leerán respectivamente las horas, los minutos, los segundos y las décimas de segundo. Si se escriben los registros el reloj se pondrá en hora. En particular, al escribir en el registro TODTEN se arranca el reloj.

Tanto al leer como al escribir los datos podría ocurrir el siguiente problema. Supongamos que son las 11:59. Se leen las horas (11h) y, al leer los minutos ya son las 12:00. Por tanto, se lee 00 para los minutos, es decir, las 11:00, cuando se empezó a las 11:59 y se terminó a las 12:00. Para evitar estos problemas, el reloj tiene un sistema de bloqueo (“latching”), de modo que al leer las horas el valor a leer se bloquea hasta que se lean las décimas de segundo, aunque el reloj se sigue actualizando internamente. Esto también ocurre con las escrituras.

Los registros del TOD están codificados en BCD, lo que significa que cada registro (8 bits) tiene codificado un dígito decimal (del 0 al 9) en cada nibble. Esto es suficiente para codificar las horas (de 00 a 12), los minutos (de 00 a 59), los segundos (de 00 a 59), y las décimas (de 0 a 9), y facilita la presentación de los datos al usuario.

Es más, el bit 7 de TODHRS, que en principio no se utiliza porque la hora más alta posible no lo necesita (12=%0001-0010), se utiliza para marcar si la hora es AM (bit 7 = 0) o PM (bit 7 = 1).

Además de lo anterior, el registro TOD tiene una alarma, de modo que es posible configurar una hora que, una vez alcanzada, se genera una interrupción. Esto se consigue grabando una hora en los registros TOD a la vez que el bit 7 del registro CIACRB está a 1. De este modo, la operación de grabación (“sta”) no cambia la hora del reloj, sino que configura la alarma.

El C64 tiene un reloj alternativo en las posiciones $a0-$a1-$a2 (Software Jiffy Clock), pero este reloj se actualiza por software (mediante interrupciones) y, por tanto, no es tan preciso como el TOD, que está actualizado por hardware (mediante registros específicos).

Dos usos interesantes del TOD son generar números pseudo aleatorios y, simplemente, saber el tiempo que ha transcurrido desde un determinado momento.

Reloj TOD


Programa de ejemplo: Prog58

Deja un comentario