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.

Programa de ejemplo: Prog58

Hola, soy Francisco, he comprado el primer libro y estoy intentado cargar el Prg58 en el CBM Prog Studio, y me da error al compilar porque no entiende las variables. No se como cargar cuando hay varios ficheros asm en la carpeta. Gracias por su ayuda
Me gustaMe gusta
Hola, Francisco.
En el volumen 1 no se me ocurrió publicar los proyectos con sus ficheros *.cbmprj. Estos ficheros le indican a CBM prg Studio en qué orden ensamblar los ficheros *.asm y así evitan los problemas como el que indicas.
En su momento no se me ocurrió publicarlos porque pensé que cada lector usaría su ensamblador favorito.
Bueno, si descomprimes y copias el fichero Prg58.cbmprj que te adjunto dentro de la carpeta Prog58 el CBM prg Studio ya debería ensamblar bien.
Si editas el fichero Prg58.cbmprj verás que es un fichero XML y que su parte más importante es esta:
<BuildList>
<FileName>Prog58.asm</FileName>
<FileName>ConstText.asm</FileName>
<FileName>LibText.asm</FileName>
<FileName>Mem.asm</FileName>
</BuildList>
En esa parte simplemente le está indicando a CBM prg Studio en qué orden ensamblar los ficheros.
Puedes conseguir un efecto similar si, teniendo abiertos los ficheros *.asm en CBM prg Studio, te vas a Project > Properties y modificas el orden de los ficheros *.asm para que sigan el mismo orden de arriba.
Espero ser de ayuda…
Un saludo,
HVSW.
Me gustaMe gusta
Gracias por tu respuesta, no he encontrado el fichero adjunto Prg58.cbmprj. Parece ser que no encuentra las variables al compilar. Te adjunto pantallazo con los errores. Saludos.
Me gustaMe gusta
Ya he conseguido que compile, con las indicaciones que me has dado. Saludos
El mar, 21 may 2024 a las 20:47, Paco Pepe (…) escribió:
Me gustaMe gusta
¡¡Estupendo!! Me alegro mucho.
Un saludo, HVSW.
Me gustaMe gusta
Hola de nuevo, no se como incluir el fichero del Prg 54 «Booga-Boo_the_Flea.sid» en el CBM Studio. Saludos
Me gustaMe gusta
Ya lo he conseguido, era simplemente copiar el fichero.sid en el directorio. Saludos
El jue, 23 may 2024 21:31, Paco Pepe pacopeper@gmail.com escribió:
Me gustaMe gusta
Hola de nuevo.
En realidad no hace falta nada especial. Simplemente deja el fichero *.sid en la carpeta del proyecto (la carpeta se llamará probablemente Prog54 o algo así). Y luego ese fichero lo referencias desde el fichero IncSid.asm mediante la directiva incbin «Booga-Boo_the_Flea.sid»,126. Eso es todo.
¡¡Espero que resulte!!
Un saludo, HVSW.
Me gustaMe gusta