El motor de una micro-revolución: MOS 6502

A principios de los ’70 un grupo de ingenieros de Motorola estaba convencido de que era posible obtener un microprocesador barato si se planteaba un diseño simple y un proceso de fabricación mejorado respecto a los estándares de la época. Sin contar con el apoyo de la compañía, este grupo crearía una de las familias de chips que sería el catalizador de la revolución de la computación hogareña, se trata del 6502 y sus sucesores, principal motor de las primeras máquinas de Atari y Apple, entre otros.

Chuck Peddle era uno de los ingenieros líderes en el desarrollo del procesador 6800 de Motorola, en sus reuniones con importantes clientes industriales, se dio cuenta de que la tecnología era apreciada, pero demasiado cara para ser usada en forma masiva. En conversaciones con sus clientes llegó a la conclusión de que el costo del procesador tenía que bajar de los USD$300 que costaba el 6800 a sólo USD$25 de la época, conclusión que no alegró para nada a los directivos de Motorola que no tenían ninguna motivación para buscar reducir el precio de una tecnología que ya tenía buenas ventas.

Para Chuck y otros ingenieros, se trataba de un interesante desafío técnico y sin contar con el apoyo de Motorola comenzaron a trabajar en los cambios necesarios para mejorar su procesador. Por una parte el equipo estaba descontento por el escaso apoyo de Motorola, y por otra parte la compañía estaba molesta por la porfía de Chuck y su equipo, finalmente la gota que rebalsó el vaso fue la petición formal de Motorola para detener el proyecto, lo que hizo que Chuck y su equipo decidieran abandonar la compañía, para seguir trabajando en su microprocesador por su propia cuenta.

El grupo se integró a una compañía de bajo perfil llamada MOS, en donde llegaron a un acuerdo para participar en las ganancias que podrían obtener con el nuevo microprocesador, un acuerdo que desde el punto de vista de MOS era conveniente por la baja rentabilidad que significaba en ese tiempo la producción de estos chips. Este acuerdo, junto a la renuncia en masa de Motorola era una demostración de la confianza que tenía el equipo de ingenieros en el producto que estaban desarrollando.

El 6501 demuestra a Motorola que estaban equivocados

MOS 6501

El primer procesador de la serie 6500 fue el 6501. Un hecho inédito que rodeó el desarrollo de este chip fue que Chuck lo diseñó completamente a mano y funcionó en el primer intento, cuando lo normal en esos años era pasar por un proceso de más de 10 intentos fallidos. Este procesador fue bastante escaso ya que no se hizo con el fin de ser vendido, sino como una forma de demostrar a Motorola lo equivocados que estaban, y que sí se podía construir un microprocesador útil y barato.

Uno de los factores que influyeron en la reducción de los costos de producción fue una innovación de estos ingenieros respecto al proceso de fabricación. En esos tiempos, la tasa de fallas en la producción era de un 70%, es decir, sólo 7 de cada diez procesadores fabricados iban directo a la basura. Esto ocurría principalmente debido a que el proceso consistía en crear un gran molde del procesador e ir aplicando reducciones hasta llegar al tamaño real, en estas reducciones siempre ocurrían errores y los ingenieros en MOS encontraron una forma de aplicar correcciones al molde en cada reducción, logrando con este cambio una tasa de éxito de un 70%, es decir, 7 de cada 10 procesadores resultaban perfectos.

El 6501 era totalmente compatible con las placas del Motorola 6800 y podía ser usado como un reemplazo directo a nivel de hardware, lo que motivó una demanda de Motorola por supuesta violación de patentes de sus ex-ingenieros. Supuesta porque en realidad lo que estaba en juego era la propiedad intelectual, ya que se estaba aplicando el conocimiento de tecnologías que en realidad no estaban patentadas. Aún así, se llegó a un acuerdo con Motorola y se pagó una suma de unos USD$200.000 para detener el pleito.

MOS presenta el 6502 desafiando a Intel y Motorola

Jobs y Wozniak en 1976

El problema con Motorola provocó la creación del 6502, se trataba de un 6501 pero incompatible con el hardware diseñado para el Motorola 6800. El 6502 debutó en WestCon 1975 al precio exacto de USD$25 que se habían propuesto. Al principio los asistentes pensaron que se trataba de algún tipo de estafa, ya que no se concebía crear un procesador tan económico, pero en el mismo día Motorola e Intel bajaron el precio de sus procesadores 6800 y 8080 de USD$179 a sólo USD$69, validando al 6502 que se vendió por cientos.

En esos años, Commodore que estaba en el negocio de las calculadoras, estaba pasando por aprietos económicos ya que el negocio iba en bajada y la competencia era cada vez más fuerte. Como una estrategia para cambiar el rumbo del negocio, compraron a MOS que también estaba pasando por aprietos pero que contaba con la tecnología que ellos necesitaban.

Para Chuck, el negocio de los microprocesadores estaba orientado al mundo industrial, sin embargo mientras visitaba a distintas empresas para tratar de vender el 6502 le dijeron que un par de chicos estaban tratando de usar su procesador para construir un computador personal. El hecho le pareció simpático y accedió a ir a ayudarles a su garage, se trataba nada más y nada menos que de Steve Jobs y Steve Wozniak quienes trabajaban en su primer computador Apple. Chuck pensaba en masificar el 6502 en las industrias y para nada sospechaba que el gran mercado estaba en los computadores personales. Ni en un millón de años! Según sus propias palabras.

El legado del 6502

Atari 800XL

El 6502 es un procesador de 8 bits, esto quiere decir que todas sus operaciones internas maneja números entre 0 y 255, por otra parte posee un bus de direcciones de 16 bits que le permite acceder hasta 64KB de memoria. El 6502 normalmente operaba con un reloj entre 1 y 2 Mhz pero dada una misma frecuencia de reloj era capaz de funcionar mucho más rápido que el 6800 de Motorola, gracias a su astuto diseño que reducía el número de ciclos de reloj necesarios para ejecutar una instrucción. Como pueden ver, ya desde esos años la frecuencia de reloj del procesador se podía prestar para malentendidos.

Entre los computadores que se construyeron en torno al 6502 encontramos el Commodore PET, VIC-20, Apple I y II, BBC Micro y toda la linea de computadores Atari de 8 bits (XL, XE, 400, 800, etc), incluso en otro tipo de dispositivos como la unidad de disco 1541 de Commodore.

En la pionera consola Atari 2600 se utilizó una versión económica del 6502 conocida como 6507, versión que contaba con menos pines y sólo podía acceder a 8KB de memoria. El Commodore 64 también usó un 6502 modificado, se trataba del 6510 en donde se agregó funcionalidades simples que normalmente se implementaban con circuitería adicional.

Sin duda una de las variantes más interesantes del 6502 la encontramos en la consola Nintendo Entertainment System (NES), en donde se usaba un 6502 en que funcionalidad no utilizada en la programación de videojuegos fue reemplazada por generación de sonido, manejo de joysticks y sprites, convirtiendo al procesador en un conveniente sistema integrado en un chip (system on a chip).

El 6502 fue un microprocesador que continuó su legado en el mundo de los 16 bits. Una versión de 16 bit conocida como 65C816 es el corazón de la consola Super Nintendo. También encontramos una versión especial del 6502 con modificaciones orientadas a videojuegos en la consola TurboGrafx-16/PC-Engine, en donde se podía cambiar la velocidad del procesador hasta llevarlo a unos 7Mhz.

Como se puede ver, el 6502 estuvo presente en al menos tres frentes de los inicios de la computación hogareña, desde el lado hi-end en Apple hasta computadores menos ambiciosos pero tremendamente exitosos como los de Commodore y Atari. Lo que impresiona aún mas es ver que el mismo procesador que iniciaba la computación personal fue el que inició el mercado de los videojuegos hogareños con el Atari 2600, y tras la debacle de Atari en 1983 que casi termina con la industria de los videojuegos, vuelve en gloria y majestad en el NES de Nintendo para iniciar un camino sin retorno en este mercado.

Links:
MOS Technology 6502 (Wikipedia)
The rise of MOS Technology & the 6502 (Commodore.ca)

En memoria de Chuck Peddle (R.I.P.)

Publicado originalmente en la serie Bicentenario de FayerWayer. Septiembre, 2019

Catrin Labs Computers: CLC-88 Micro de 8 bits

Ya entrando en terreno es hora de hacer algunas definiciones para el computador de 8-bits. Una de las decisiones más difíciles es el procesador, ya que cualquier elección deja inmediatamente fuera al 50% de la población. La mayoría de los programadores dominan sólo uno de los dos, el 6502 o el Z-80 dependiendo de la región en donde vivieron o con qué máquina comenzaron.

Pero si no hay costos de producción involucrados, por qué no incluir ambos procesadores? Si! La idea no es tan descabellada, de hecho fue lo que hicieron en el Commodore 128 que tenía un procesador 6502 para quien quisiera compatibilidad con el C64, y un Z80 para quien quisiera usar el nuevo chip de video y aplicaciones productivas basadas en CP/M. Al momento de iniciar el equipo se decide cuál de los dos chips será utilizado.

En este caso, la arquitectura de audio y video se mantendría para ambos, por lo que se podrá programar con el assembler que más te acomode, y siempre usando el mismo hardware de audio, video, mapeo de memoria e I/O.

Esto abre las puertas a que independiente del computador con el que hayas aprendido a programar puedas rápidamente programar en este nuevo computador, y usando el assembler que más te acomode. Y más interesante aún, se podrían hacer ports de juegos existentes con la misma facilidad que en el pasado se hacían ports entre Atari y C64 (6502), y entre MSX, Spectrum y Amstrad (Z80).

Kernel / Basic

Como el sistema está pensado principalmente para juegos y no hay necesidad de compatibilidad con impresoras o sistemas de I/O diversos, al menos en un principio el sistema operativo sería bastante minimalista.

El sistema operativo básicamente se encargaría de hacer el sistema booteable. Sus tareas principales serían:

  • Inicializar el audio
  • Inicializar un modo de video
  • Atender las interrupciones por linea, vertical blank, NMI y alguna otra que se requiera
  • Operaciones de Input / Output con el medio de almacenamiento (SD Card)

Con un sistema minimalista de este tipo se dejaría disponible casi toda la RAM principal y no costaría tanto hacer las dos versiones que se necesitarían para 6502 y Z80.

En una segunda fase, se podrían añadir funciones orientadas a la programación como despliegue de texto, cursor, operaciones matemáticas (división, multiplicación, trigonométricas), dibujo de lineas y otras. En una tercera fase estas funciones podrían ser llamadas desde un interprete de basic implementado para ambos procesadores.

Modos de Video

Un criterio similar es aplicable a lo modos de video. Para qué inventar todo un nuevo sistema si se puede recuperar lo mejor de cada chip y de paso nuevamente hacer que sea muy fácil portar un juego de un sistema existente. Algo así se hizo en el MSX en donde existía un modo de video similar al del Spectrum, entonces cuando no habían recursos para un port con todas las de la ley, se hacía un port de Spectrum casi calcado. No era lo mejor, pero ahora sin restricciones de presupuesto a partir de ese port inicial ya funcionando se podría modificar el código para aprovechar el nuevo hardware.

Acá juega un papel importante el uso de las Display Lists que existían en Atari. Se trata de un conjunto de instrucciones que sigue el chip de video para generar la pantalla linea por linea. Éstas instrucciones permiten mezclar distintos modos de video, distintas paletas de colores, distintos niveles de scroll y distintos sprites por cada linea. Por ejemplo si queremos tener un juego tiled con scroll suave y abajo un marcador en modo bitmap pero usando otra paleta de colores, el display list lo permite perfectamente.

En este nuevo computador existirían modos de video compatibles con los computadores ya mencionados además de nuevos modos de video más poderosos, todos combinables en una sola pantalla gracias al Display List.

Nombre tentativo: CLC-88

Con el título ya sabrán que este micro de 8 bits ya tiene nombre: CLC-88. No es que bruto que original el nombre pero creo que representa muy bien la idea de que primero, es un computador de 8 bits y segundo, es un computador que perfectamente podría haber sido diseñado el año 1988.  El prefijo CLC corresponde a Catrin Labs Computers, y al mismo tiempo es una famosa instrucción del 6502 que usabas cada vez que querías sumar.

Para el equipo de 16 bits si es que llega a concretarse, se seguirá una lógica similar con CLC-92. En este caso si bien no dice nada de 16 bits, sí es un computador que podría haber sido diseñado en 1992. Además que estrictamente estos equipos eran híbridos de 16 y 32 bits por lo que «16» no le haría tanta justicia… Esto último se me ocurrió recién, la verdad es que quería usar el número 92, pero suena creíble!

Mas info:

Parte I: Catrin Computer Labs

Parte II: Chip de video

 

Catrin Labs Computers: Chips de Video

La parte que no es tan obvia en cuanto a hardware en este proyecto es el chip de video. Si pensamos en usar un chip de video de la época necesariamente nos casaríamos con un tipo de estética, ya sea el attribute clash de Spectrum o los 4 colores por línea del Atari, o la extraña paleta de verdes, grises y cafés del C64.

En los tiempos en que se diseñaban estos computadores se hacían prototipos físicos, no habían computadores para simular el comportamiento ni nada de eso. Simplemente se armaban protobards, se conectaban todos los cables y sobre eso se iteraba, era natural que sólo el diseño se planificaba para ser realizado en varios meses o incluso años.

Hoy en día no existe ese problema y los computadores son tan potentes que pueden perfectamente ayudar a diseñar y simular nuevos chips, así como existen emuladores para simular chips antiguos por qué no crear un emulador también para simular un chip que no existe?  Eso permite experimentar y refinar el diseño antes de convertirlo en hardware real y elimina la limitación de ajustarse al hardware existente. Si a esto agregamos que existe tecnología como FPGA que permite implementar diseños electrónicos de nuevo hardware via hardware existente, el camino de un diseño en software a una ejecución en hardware es posible.

Afortunadamente hay suficiente información de cómo diseñar chips de video, tenemos el mismo código de los emuladores, y en camino viene un libro que trata sobre el diseño del ULA en el Spectrum. También Leonardo Ruilova me recomendó otro libro de la misma temática, escrito por uno de los creadores de un proyecto similar, XGameStation.

Alternativas

Hay múltiples alternativas para resolver el problema del chip de video. Siempre pensando en que es un proyecto de largo plazo y hay tiempo para experimentar, veo las siguientes opciones:

  • Que este nuevo hardware simplemente corra sobre hardware potente como una Raspberry Pi, como si fuera un emulador de toda la vida, pero a diferencia de los emuladores existentes, éste siempre sería perfecto, pues no existe el hardware a emular y la única referencia sería el código del emulador. En este caso el chip de video sería un emulador de un nuevo chip, implementado en la Raspberry Pi. Posteriormente se podría crear el hardware real y quizás sería un raro caso en donde primero se construye el emulador y luego el hardware.
  • Utilizar VGA pero con un procesador dedicado sólo a video.  VGA sólo actuaría como framebuffer, y el procesador dedicado sería el equivalente a un custom chip del Amiga o a un chip de aceleración. Este chip tendría acceso casi exclusivo a la VRAM y operaría a una frecuencia diferente del procesador principal. El chip estaría inicialmente implementado en software controlando la VGA física. Si consideramos que un PC antiguo puede emular perfectamente computadores de 8-bit y 16 bit, la dedicación exclusiva a procesar video es perfectamente posible.
  • Utilizar un chip de video existente.  En el proyecto de 8-bit guy están siguiendo este camino, pero está el inconveniente de que aparecen las restricciones del chip de video existente. Por ejemplo el chip que están usando sólo puede generar graficos tiled (como una NES), y la interfaz de comunicación es serial. Por ahora esta alternativa está descartada (*)
  • Utilizar un chip de propósito general para generar video. Es algo similar a la opción de usar VGA sólo que el chip generaría directamente la señal de video. Es una opción bastante interesante y ya se ha hecho, pero por problemas de rendimiento no se pueden generar muchos colores con los chips conocidos.

(*) Sigo atentamente la evolución del proyecto de 8-bit guy y está bastante activo. Hoy publicaron un demo de lo que pueden hacer con Gameduino y es bastante impresionante, pero nuevamente se aleja de la esencia del proyecto que es tener limitaciones de recursos de la época.

Por ahora, creo que el camino más flexible es implementar un emulador de un chip que genere un framebuffer. Esto permitiría tener un diseño en el corto plazo y ya con más experiencia poder tomar cualquiera de estos tres caminos: Mantener la emulación, Controlar una VGA, Utilizar un chip de propósito general.

Actualización: Hay un proyecto similar llamado Anvil-6502 en donde hicieron un chip de video que funciona bastante bien. Es principalmente bitmapped y requiere un procesador rápido, pero puede servir de base para convertir el framebuffer en señal de video. Hay unos demos bastante espectaculares.

Más info en:

Parte I : Catrin Labs Computers

Parte III: CLC-88 Micro de 8 bits