Hola Bienvenidos a esta nueva serie sobre la 20C, una computadora modular de arquitectura simple diseñada desde cero para aprender y hacer experimentos.
Vamos a ver juntos cómo aprender más fácil cómo funciona una computadora en profundidad, cómo programarla en assembler y que pasa eléctricamente en la misma con cada línea de nuestros programas.
¡Bienvenidos!
Aprender es un placer
Siempre pensé que aprender es un placer, y una de las cosas que siempre me apasionaron de chico fueron las computadoras, en especial la Commodore 64. Siempre quise aprender como funcionaba pero indefectiblemente cada vez que leía un libro y llegaba hasta el sistema binario, el hexadecimal o cómo direccionar memoria se me complicaba tanto que dejaba a mis tiernos 9 años.
De grande me hice la pregunta ¿Cómo es que una computadora recibe una instrucción para hacer algo? Cómo puede ser que un programa de software se transforme en impulsos eléctricos que hagan que algó físico realice una cuenta o escriba algo en una pantalla.
Buscando esta respuesta encontré a uno de nuestros héroes modernos, Ben Eater, que tiene un canal de youtube donde explica paso por paso como es este funcionamiento, pero nada específico de Commodore 64.
Empezando
Empecé entendiendo como funcionaba una parte de una computadora, su CPU o unidad central donde la mayoría del procesamiento sucede. Para poder entender este aprendizaje, armé maquetas, pelé cables, soldé, desoldé y quede con un maqueta muy buena pero un poco complicada de explicar.
Enseñar para aprender
Para afianzar lo que había aprendido hice dos cosas, la primera filmar cada paso que había hecho para armar la maqueta y luego lo compartí en mi canal de youtube en episodios de más o menos una hora de duración donde comparo el cpu 6502 contra el 6510.
La segunda cosa que hice fue escribir artículos detallados con la teoría de cómo funcionaba lo que estábamos viendo en el video y lo publiqué acá en el blog de EspacioTEC y también en mi página en osolabs.tech, (al momento de publicación 17 artículos algunos de hasta 50 páginas)
Aquí pueden encontrar los videos en 6502 vs 6510 estudio detallado y comparación – YouTube y los artículos en https://blog.espaciotec.com.ar/c64-a-fondo-indice/ ambos también presentes en la página de OsoLabs https://www.osolabs.tech/6502vs6510
Cortando cables como un perro.
Me di cuenta que cada vez que quería aprender algo nuevo sobre la computadora, probar un chip nuevo, poner un teclado, etc. tenía que hacer varias cosas:
- Comprar el chip,
- Conseguir un breadboard (el cual es una base que funciona para realizar circuitos muy fácilmente).
- Mirar en internet o en manuales viejos que era cada patita del chip (pinout) y como funcionaba,
- Decidir cómo hacer el experimento (por ejemplo prender un led),
- Conseguir el led, las resistencias para no quemarlo,
- Conseguir una fuente de corriente contínua que se pueda conectar mi experimento,
- Imaginar cómo hacer las conexiones en el breadboard las cuáles no siempre son las más lógicas desde un punto de vista del circuito y finalmente…
Y ponerme a cortar y pelar cables, cables muchos cables, para poder realizar el experimento, mínimo 40 cables normalmente más cerca de los 60 si contamos los componentes adicionales que tenemos y ahí empieza el troubleshooting.
Troubleshooting
Chequear en detalle, que se conecte bien cada cable, que si hace contacto en el breadboard, que mientras estoy probando no se haya salido un cable. Muchas veces me pasó de estar 2 días probando y modificando un programa en lenguaje máquina que no funcionaba cuando el problema era que un cable del address bus se había salido, arruinando el experimento.
Otras veces teniendo todo perfecto me pasó el clásico de no conectar el pin de power del chip a 5v o conectarle 5 volts a un pin sólo de output!! Corriendo el riesgo de quemar el chip. Esos 5 segundos de pensar que no se quemeee que no se quemeeeee.
Cuando algo que queremos probar depende de que muchas partes de la computadora funcionen (CPU, RAM, ROM, I/O, CLOCK) etc, el tiempo de setup para cada nuevo experimento es exponencial hasta que están todas las partes conectadas. Para que funcionara todo el tiempo tenía que tener armada la maqueta con los circuitos por que si quería empezar de cero cada vez me llevaba más tiempo para armar todo a medida que agregaba nuevos módulos y hacía nuevos experimentos que los incluyeran.
Si quería obviar todos estos pasos había computadoras ya integradas todas en una misma plaqueta o circuito impreso, pero podía usar lo que había con nulas posibilidades de expansión y cero flexibilidad.
Claramente tenía que haber una forma más fácil de aprender. Tenía que haber una mejor forma de explicarle a otra persona cómo funciona una computadora y una mejor forma de armar tu propia computadora de 8 bits.
La 20c
Como no podía encontrar en el mercado una computadora que fuera lo suficientemente sencilla, flexible y modular creé una y llamé La20c. Esta posee tres características fundacionales:
- Arquitectura Simple
- Hardware Modular y OpenSource.
- Amigable para realizar experimentos.
Elegí una arquitectura muy simple que está basada en los procesadores de la familia del 6502 de MOS Technologies, usada en computadoras como la Commodore 64, la Apple 2 y el Atari 2600.
Es modular ya que cree un módulo por cada chip que vamos a usar para que sea fácil identificar la función de cada uno de ellos siendo cada módulo es OpenSource para que cualquiera pueda fabricarlo y modificarlo mientras aprende.
Es fácil realizar experimentos ya que cada módulo es un cuadrado de 16×16 cm ideal para poner una placa de breadboard (que mide 16cm) la cual usamos para realizar experimentos simples.
La 20c es un esquema de aprendizaje que consiste en hardware, artículos y videos para poder aprender sobre arquitectura de computadoras.
Los artículos
En los artículos está el marco teórico para la arquitectura en general y cada uno de sus componentes, acá vemos cosas como para que sirve cada patita de los integrados (el pinout), cuál es la arquitectura interna de registros que tienen y qué funciones realiza cada uno.
Los videos
En los videos desarrollamos los experimentos para cada parte de la computadora. Podemos por ejemplo usar dos modelos de cpu diferentes, conectarlos a un analizador de protocolos, algunos leds u otros dispositivos y mostrar cómo se lee de la memoria ram y la rom paso a paso, comparando eléctricamente que pasa en el hardware en simultáneo con lo que sucede a la vez en el programa que creamos.
El Hardware
El hardware consiste en módulos intercambiables que reflejan fielmente cada parte de la arquitectura de una computadora. Tenemos módulos para todas las partes de la arquitectura que repasamos y para cada parte tenemos varias alternativas para poder combinar y analizar diferentes integrados.
Si quiero ver como funciona una Commodore 64 tengo los módulos específicos que reflejan los componentes de la misma como por ejemplo un CPU 6510 o un dispositivo de I/O CIA 6526. Para probar un Atari 2600 tenemos módulos de CPU 6507, RIOT y TIA por ejemplo.
La 20c tiene todos los módulos necesarios para aprender sobre nuestra arquitectura basada en 6502 como ser:
- CPU (6502, 6510, 8502, 6507)
- ROM
- RAM
- BUS de datos y direccionamiento
- GLUE LOGIC
- I/O (PIA, VIA, CIA)
- CLOCK
- CONNECTOR para conectar entre placas
- ARDUINO CONNECTOR para conectar un arduino y usarlo de analizarlo de protocolos.
El tener cada módulo me permite hacer la combinación que requiera en mi experimento siempre teniendo la seguridad de que conecto al chip de forma correcta y en el socket que corresponde.
Cada módulo tiene una sóla función para poder explicar de forma fácil el funcionamiento de la computadora, se ve claramente el cpu, la ram, la rom, los buses de datos que conectan el equipo y las interfaces de entrada y salida.
Cada parte del módulo está claramente indicada diciendo el nombre de cada pin y conector y teniendo claramente identificadas las conexiones entre los distintos componentes de un mismo módulo a través de los trace del PCB.
Conexiones
Con la 20c puedo conectar cada componente a su módulo correspondiente sabiendo que van a estar correctamente conectados cada pin, siempre haciendo contacto y sin posibilidad de que se salga el cablecito que se conecta directamente al chip, conectando muy simplemente cada módulo entre sí a través de los buses de datos y direccionamiento.
Cada módulo tiene una sola forma correcta de conectar sus componentes internos claramente indicada con la información de para qué sirve cada pin del chip y cada conexión.
Usamos headers que aceptan cables de conexión tipo jumper que no necesitamos cortar o pelar ya que vienen de fábrica en el formato que lo necesitamos para la interconexión entre cada módulo y también tenemos un módulo conector si no queremos usar cables.
Para experimentar, el tamaño importa
Hay un momento y un lugar para poder hacer experimentos con un breadboard y cada módulo de la 20c tiene el tamaño de 16cmx16cm para que un breadboard pueda estar en alguno de sus lados cómodamente.
Cuando quiero probar un chip nuevo usando un breadboard con la 20c puedo realizar el experimento en forma controlada sabiendo que todas las conexiones del resto de la computadora están estables ya que todos los otros chips necesarios para que funcione el experimento, a saber cpu, memoria ram, memoria rom, conector de periféricos (via / cia / pia) ,pantallas, teclados y dispositivos de entrada salida están bien conectados cada uno en su módulo.
La 20c puede conectarse horizontalmente en una mesa para ver claramente sus componentes o como si fuera una torre para que ocupe menos lugar.
Los Complementos
Con la combinación de estos módulos podemos armar una computadora completa que nos permite estudiar con detalle la arquitectura de un computador. Para nuestro experimentos muchas veces vamos a agregar algunos extras:
CABLES
Estos son de tipo Jumper Macho/Macho para conectar las diferentes partes, o se puede usar el módulo CONNECTOR para ni siquiera tener que utilizar cables.
FUENTE
Una fuente electrónica que nos dé 5 Volts con 1.5 amperes.
BREADBOARD
Para realizar experimentos con componentes electrónicos que no sean parte de la computadora
COMPONENTES ELECTRÓNICOS para Experimentar
LEDs, resistencias, displays LCD, circuitos integrados y otros que queramos probar en nuestros experimentos.
ARDUINO MEGA
En caso de que queramos utilizarlo como un analizador de Protocolo y ver que pasa dentro de nuestra computadora
ESCRITOR DE EEPROM
Que nos permitirá grabar nuestros programas en la EEPROM de nuestra computadora 20c.
El Open Source
Mucho de lo que aprendí sobre el 6502, la commodore y sobre computación en general se lo debo a la Universidad Pública (hola UTN!!) y a miles de horas de video y millones de palabras de personas que escribieron artículos en sus blogs, foros de facebook, twitter y grupos de Whatsapp los cuáles desinteresadamente o mejor dicho interesados más que nada en difundir conocimiento compartieron conmigo y el mundo sus horas de research.
Para sumar a estos esfuerzos la 20c es Open Source, con cada episodio hablando de una placa o explicando un experimento también vamos a hablar sobre el circuito de la misma, como se creó el PCB con diagramas incluidos y cómo se manda a fabricar. Los archivos Gerber para crear la placa van a estar disponibles en el github de OsoLabs.tech después de cada episodio (https://github.com/osolabstech/The20c/) .
Empezar a Aprender en serio
Desde que diseñe y empecé a usar La 20c, puedo transmitir mucho mejor el amor por las computadoras y su funcionamiento en forma detallada y partiendo de principios básicos o como me gusta decirles primeros principios.
Los invito a que se nos unan en este viaje de aprender en serio, leyendo los artículo, viendo los videos y divirtiéndose con la 20c.
Estudio visual
¿Querés ver esta misma información visualmente? Mirate la primera demo de la 20C!!
Referencias
A continuación les dejo algunos links donde profundizar el tema:
WEBSITE
Aquí el sitio de OsoLabs con todos los videos y artículos.
VIDEOS
Aquí el video correspondiente a este capítulo y la lista de todos los videos de esta serie.
https://www.osolabs.tech/the20c
ARTICULOS
Aqui podrán encontrar todos los artículos sobre la 20c:
https://www.osolabs.tech/the20c
CODIGO
Todos los ejemplos de código de los videos los pueden encontrar en:
https://github.com/osolabstech/The20c
OTRO RECURSOS
Y como siempre la serie de Ben Eater del 6502 que es excelente
Build a 6502 computer | Ben Eater
Y la serie de mi creación comparando el 6502 vs 6510 tanto en video como en artículos
https://www.osolabs.tech/6502vs6510