C64 a Fondo – 6502 vs 6510 Parte 1 – El módulo de reloj

Vamos a empezar esta serie analizando que es un módulo de reloj o system clock, por qué se usa, como funciona el de la Commodore 64 a grandes rasgos y por qué vamos a usar otro módulo de reloj durante nuestro estudio.

Les dejo el link al articulo anterior en la serie, y al final como siempre los links a todos los artículos de la misma.

Introducción

¿Qué es un módulo de reloj?

Un módulo de reloj es un circuito electrónico que oscila generando una secuencia de pulsos repetitivos que llamaremos señal de reloj, estos pulsos son distribuidos a todos los elementos lógicos que tenemos en nuestra computadora para que se sincronicen.

¿Por qué se usa?

Porque generalmente nuestras computadoras trabajan con lógica sincrónica. Los gates o compuertas lógicas que usamos para operar sobre los datos tienen un tiempo finito de respuesta a los cambios en los inputs que reciben, esto se llama delay de propagación. 

El intervalo entre los pulsos del reloj tiene que ser suficientemente largo como para que los gates y sus salidas se establezcan en valores estables antes de que suceda el próximo pulso de reloj.

Cómo funciona el de la Commodore 64

Bienvenidos al infierno, digo a cómo funciona aproximadamente el reloj de la Commodore 64. Y digo aproximadamente por que en este post no vamos a describir el circuito en detalle pero sí algunos vericuetos interesantes.

Empecemos con un cristal llamado Y1, este nos da una resonancia mecánica desde la cuál vamos a llegar  a través de varios circuitos a los 1 Mhz a los que típicamente corre el 6510.

 

Ahora dependiendo de si la computadora es NTSC o PAL la frecuencia de la señal va a ser de aproximadamente 14,318 Mhz o 17,73 Mhz redondeando. 

A esta señal se conoce como el Color Clock por que al dividir estos números por 4 obtenemos 3.58 Mhz para NTSC y 4.43 Mhz para PAL las cuáles son las señales de carrier responsables de que cómo vemos los colores en nuestros televisores.

Un Circuito integrado conocido como el U31 Dual Voltage Controlled Oscillator nos genera otras frecuencias en 8.18 Mhz para NTSC y 7.88 Mhz para PAL, esta señal se conoce como el Dot Clock y nos dice cuántos píxeles se puede escribir por pantalla en cada refresh de la misma.

NTSC: 59.826Hz (refresh rate) * 520 Pixels * 263 lineas = 8.18MHz

PAL: 50.125Hz (refresh rate) * 504 Pixels * 312 lineas = 7.88MHz

Finalmente llegamos al System Clock que define que es un ciclo de CPU como la Commodore 64 es un máquina de 8 bits esto nos limita a mostrar hasta 8 píxeles por ciclo de CPU por lo que corresponde un ciclo de duración de un octavo de Dot Clock.

NTSC: 8.18MHz / 8 = 1.023MHz

PAL: 7.88MHz / 8 = 0.985Mhz

Llegando al máximo de velocidad de 1Mhz del 6510.

¿Por qué usamos otro reloj en nuestro estudio?

Si utilizáramos un reloj de 1 Mhz sería muy difícil ver que ocurre en la cpu por cada instrucción de nuestro programa. Los instrumentos que usamos para medir no podrían detectar fácilmente la variación de bits o impulsos eléctricos en los pines de address bus y no llegaríamos a comprender que sucede en cada paso. 

Por eso tenemos un reloj que nos permite parar la pelota e ir más lento, tan lento como queramos, inclusive pulsando un botón vamos a ir ciclo por ciclo de reloj e instrucción por instrucción.

Cómo funciona nuestro clock 

Vamos a utilizar el reloj del kit de Ben Eater. Este funciona con tres timer 555 y algunas compuertas and y or, en las referencias les dejo el detalle de como lo arma él en sus videos.

Este reloj nos permite a través de un switch decidir si queremos ir paso a paso cada ciclo de reloj pulsando un botón o usar un potenciómetro para dar la velocidad de las instrucciones.

Cómo Seguimos

Para ver visualmente como funciona el módulo de reloj y cómo corremos el osciloscopio para analizar sus variaciones les dejo el primer video de la serie

6502 vs 6510 Módulo de Reloj Manual – Parte 1

Artículos en la serie C64 a Fondo

A continuación el link al próximo artículo en la serie

Parte 1 – El módulo de reloj

y aquí los links a los artículos anteriores

Introducción

Referencias

A continuación les dejo tres excelentes artículos que hablan en profundidad del reloj de la Commodore 64.

Hardware Basics Part 1 – Tick Tock, know your Clock — Dustlayer

Hardware Basics Part 2 – A Complicated Relationship — Dustlayer

Clock Frequency

Y Cómo construir el módulo de Reloj por Ben Eater.

Clock module 

C64 a fondo – 6502 vs 6510

Hoy los quiero invitar a un viaje al interior de la Commodore 64 y sus chips donde vamos a ver en profundidad detalles de assembler, conexiones y funcionamiento, que me desvelaron desde chico, y creo que agregan mucho a nuestro conocimiento técnico. 

¿Por qué la Commodore? Bueno un poco por amor (un poco bastante ja) y otro por que pienso que es una de las últimas computadoras en las cuáles podemos llegar a entender en profundidad qué es lo que está pasando realmente por dentro cuando ejecutamos un programa, jugamos un juego o tocamos música con el SID. 

Todavía podemos ver los chips, medir las señales en sus patas, mirar donde hay una resistencia o un capacitor y entender por donde pasa la magia desde el programa a la acción.

Cómo conocí la Commodore 64.

Un día caminando por la calle con mi viejo a los 9 años, me recuerdo pidiéndole por enésima vez un Colecovision, el mismo que veía todas las noches en las propagandas de la trasnoche Kenya Sharp con el juego de pitufos. El se paró en el medio de la calle, me miró y me dijo:

¿Y si tuvieras una computadora mejor, que podés programar tus propios juegos?

Así llegó el 10 de Julio de 1987 mi Drean Commodore 64C, y también llegarían muchas horas de juegos de la mano de Commando, Ghost and Goblins, y  terminando en un Zack Mackraken allá por los 16 años. 

También llegaron muchas horas de programación en Basic y los libros de Data Becker (esos blancos y naranjas) con los que siempre me pasaba lo mismo. 

Comenzaba a leer ávido y en detalle esas letras apenas entendibles y pasaba la página 1, 2 (siempre introducciones), 5, 6 (ya empezaban a explicar binario y hexadecimal) e invariablemente en la página 16, ya no entendía nada. 

Que se necesitaba un monitor de código máquina, que tal cartucho, que el diskette (que no se comparaba con mi humilde datasette) y que me daban algún programa de ayuda que consistía en 20 páginas ilegibles con muchas instrucciones DATA que luego de tipearlo terminaban invariablemente en el nefasto:

"ERROR EN LOS DATA".

Luego de esta frustración me iba a Atarilin a conseguir algún juego nuevo de la mano de Carlos y Alejandro, de los que siempre venía alguna palabra de aliento,y volvía a mis 10 minutos de carga del datasette y a jugar un par de horas, la resiliencia de los 11 años.

Esa misma resiliencia me hacía al mes volver a comprar un nuevo libro de Data Becker y volver a empezar el ciclo, así pasaron “Peeks y Pokes para el Commodore 64”, “Gráficos para el Commodore 64”, “64 consejos y trucos” pero nunca llega al soñado “64 interno” considerado sólo para expertos a esa tierna edad.

El retorno del Commodoriano

El año pasado (2022) repasando el libro Make Electronics me tope con los videos de youtube de Ben Eater, un verdadero demente que hizo una computadora sólo con breadboards y utilizando el 6502 como procesador, sus videos muy bien explicados, y la posibilidad de comprar kits con todo lo necesario para armarlos y seguirlos paso a paso me llevo a tirarme de lleno a contestar las preguntas que me torturaban desde chico:

 ¿Cómo funcionaba la Commodore? ¿Cómo cargaba una instrucción desde el código máquina al procesador? ¿Cómo se ejecutaba?

Compré los kits y mientras los esperaba compre una Commodore 64 por mercado libre, la prendo con su fuente original (no lo hagan en sus casas niños si no quieren quemarla) y me daba un hermoso error con todos ceros en la pantalla y un OUT OF MEMORY ERROR.

Lo pensé, decidí quedármela y aprovecharlo como la oportunidad para arreglarla y aprender a fondo cómo funciona por dentro esta computadora.

6502 vs 6510

Y así nace esta serie, donde comparo cómo funciona el procesador 6502 (usado en Apple , Atari, etc) y el 6510 de nuestra querida Commodore 64 que en apariencia son iguales pero tienen sutiles y fundamentales diferencias.

Uso como guía los videos de Ben Eater (Build a 6502 computer | Ben Eater ) agregando estudios del 6510 y la Commodore 64.

Con esta serie de blogspot y videos que armé para acompañarlos y vamos a explorar desde el pin out hasta los registros internos del 6510, pasando por sus puertos de I/O, como cargarle una instrucción en código máquina a mano y llegando hasta conectarle una eeprom con varias instrucciones para que ejecute un programa de nuestra autoría.

Espero me acompañen en este viaje para contestar estas preguntas que me hacía desde pequeño y conocer a fondo estos procesadores.

Siganme en este apasionante viaje empezando por el próximo artículo,

Parte 1 – El módulo de reloj

Artículos en la serie C64 a Fondo

A continuación los links a todos los artículos de la serie

Introducción

Parte 1 – El módulo de reloj

Parte 2 – Pinout 6510 y 6502

Parte 3 – Codeando a Mano la Primera Instrucción de Código Máquina

Parte 4 – Primer Programa desde EEPROM

Parte 5 – I/O Pins del procesador 6510