Ensamblar una computadora de 8 bits: cómo reducir el número de chips a seis


La combinación del viejo truco con la codificación de color NTSC y el hardware moderno le permite construir una máquina sorprendentemente viable.

En los sistemas de 8 bits, hay algo permanentemente atractivo: puede construir un sistema autónomo lo suficientemente potente como para admitir la interacción adecuada del usuario, pero lo suficientemente simple para ensamblar y programarlo usted mismo. La mayoría de las máquinas modernas de 8 bits creadas por aficionados están vinculadas a los procesadores clásicos que vivieron en la época dorada de las computadoras domésticas de la década de 1980, cuando millones de televisores se usaban como pantallas. Inicialmente, la idea era construir mi automóvil basado en el procesador Motorola 6809de la misma época Traté de usar la menor cantidad de chips posible, pero a pesar de mis esfuerzos, todavía necesitaba 13 chips adicionales para trabajar con RAM y transferencia de datos en serie. Entonces pensé: ¿qué pasa si uso un procesador de 8 bits más moderno? ¿Cuánto puedo reducir la cantidad de chips que necesito?


Como resultado, monté un automóvil en él, que se llamaba Amatista . Al igual que cualquier computadora doméstica, tiene un teclado incorporado y puede emitir audio y video. También tiene un lenguaje de programación incorporado de alto nivel para que los usuarios puedan escribir sus propios programas en él. Logré reducir el número de microcircuitos a seis: CPU ATMEGA1284P , interfaz USB y cuatro circuitos integrados simples.

El 2008 ATMEGA1284P (o 1284P) tiene 128 kilobytes de memoria flash y 16 kilobytes de RAM. Puede operar con una frecuencia de hasta 20 megahercios. Tiene controladores serie integrados integrados y 32 entradas / salidas digitales.



Gracias a la memoria incorporada y las interfaces seriales, desapareció la necesidad de muchos chips auxiliares. Podría generar audio directamente, interrumpiendo y aplicando una señal a la entrada / salida con diferentes frecuencias. Así, aprendí a dar un tono que, sin embargo, poseía la nitidez característica de una onda cuadrada. ¿Pero qué pasa con la generación de una señal de video analógica? ¿Esto realmente requerirá un equipo especial?

Truco estándar


A finales de 2018, vi un truco que Steve Wozniak usó en la década de 1970 para implementar el soporte de gráficos en color en Apple II. En los Estados Unidos, este truco se usó para la transmisión en color en el sistema NTSC en la década de 1950.

Inicialmente, la televisión estadounidense era solo en blanco y negro y utilizaba el estándar NTSC bastante simple (desarrollado por el Comité Nacional de Sistemas de Televisión). Para formar una imagen en la pantalla, un haz de electrones trazó puntos en su superficie, fila tras fila. La amplitud de la señal de video recibida determinó el brillo del haz en cualquier ubicación dada a lo largo de la fila. Luego, en 1953, NTSC se actualizó para admitir televisión en color, manteniendo la compatibilidad con los televisores en blanco y negro existentes.

Los ingenieros decidieron presentar información de color en forma de una señal sinusoidal de alta frecuencia. Para esto, la subportadora se dividió en dos componentes con un desplazamiento de fase de 90 °, cada uno de los cuales se sometió a modulación. El resultado fue una señal modulada tanto en amplitud como en fase. La amplitud de la señal determinó qué tan saturado debería estar el color. Esta señal de croma de alta frecuencia se agregó luego a la señal de luminancia de baja frecuencia para crear la llamada señal de video compuesto. Este método todavía se usa para muchos televisores y pantallas más baratas.



« »: , [ ], - , [ ]. . [ ] , : . [ ], .


Un televisor en blanco y negro percibe una señal de color como ruido y la ignora. Pero un televisor en color puede separar la señal de color de la señal de luminancia utilizando bucles de filtro.

En la década de 1970, los ingenieros se dieron cuenta de que este esquema de filtrado podría ser muy útil para las computadoras domésticas porque permite que una señal digital rectangular simule la mayor parte de la señal analógica compuesta. El flujo de ceros enviado por la computadora al televisor se percibirá como un voltaje analógico constante de baja frecuencia, es decir, negro. El flujo de unidades se considerará como un voltaje constante de alta frecuencia, es decir, blanco. Pero con una velocidad de bits suficientemente alta, surgirán estructuras binarias más complejas que los esquemas de filtrado de paso alto reconocerán como señales de color. Este truco permitió que Apple II mostrara hasta 16 colores.

Al principio, pensé que necesitaba cambiar el pin de entrada / salida muy rápidamente para generar directamente una señal de video. Sin embargo, pronto me di cuenta de que con mi 1284P funcionando a 14.318 MHz, no podía cambiarlo lo suficientemente rápido como para mostrar más de cuatro colores. El hecho es que sus interfaces seriales integradas necesitarían dos ciclos de reloj para enviar un bit, lo que limitaría mi frecuencia de reloj a 7.159 MHz. Apple II utilizó un acceso rápido y directo a la memoria para conectar su chip externo a la salida de video, mientras que su CPU estaba ocupada con el procesamiento interno. Pero, dado que la RAM de mi computadora está integrada en el chip, no pude usar este enfoque.

Así que miré en mis cajones y saqué cuatro microcircuitos de la serie 7400: dos multiplexores y dos registros de desplazamiento en serie paralelos. Pude instalar ocho pines 1284P en paralelo y enviar datos de ellos simultáneamente a los multiplexores y registros de desplazamiento, que los convierten en un flujo de bits en serie de alta velocidad. Por lo tanto, aprendí a generar bits lo suficientemente rápido como para mostrar unos 215 colores diferentes en la pantalla. Sin embargo, tuve que pagar con mi poder de procesamiento: el procesamiento de video consume constantemente el 75% de los recursos del procesador.



Computadora compacta


Amethyst es una computadora de placa única. Se ensambla a partir de solo seis circuitos integrados: un procesador, una interfaz USB y cuatro microcircuitos de la serie 7400, que se utilizan para crear una imagen de 215 colores. Los interruptores del teclado se sueldan directamente a la placa, que también admite audio y cuatro conexiones de E / S en serie para periféricos, como controladores de juegos y dispositivos de almacenamiento. Puede escribir programas y ejecutarlos gracias a la máquina virtual incorporada Forth.

Necesitaba un entorno de programación ligero para los usuarios, lo que me hizo elegir Forth en lugar del básico tradicional. Forth es un antiguo lenguaje de programación para sistemas embebidos, admite interactividad y puede compilar código de manera eficiente. Con él, puede hacer mucho con la mínima cantidad de recursos. Dado que el 1284P no permite que el código de máquina compilado se ejecute directamente desde su RAM, el código de usuario se compila en un bytecode intermedio. Este código de bytes se alimenta como entrada a una máquina virtual que se ejecuta desde la memoria flash 1284P. El código de la máquina virtual se escribió en ensamblador y se optimizó manualmente para hacerlo lo más rápido posible.

Como ingeniero que trabaja para una empresa que produce impresoras láser 3D, tengo acceso a máquinas de corte láser avanzadas. Así que diseñé y fabriqué fácilmente una caja de madera (vi el acabado de madera en el Atari 2600 ). Los interruptores mecánicos del teclado se soldaron directamente a una sola placa de circuito Amethyst. Este teclado tiene una característica curiosa: la ausencia de la gran brecha habitual. En cambio, solo un botón, ubicado modestamente sobre la tecla Enter.

El esquema completo, los archivos PCB para la placa de circuito y el código fuente están disponibles en mi repositorio de GitHub . Para que pueda crear su propia amatista o incluso mejorar mi proyecto. ¿Qué pasa si puedes descubrir cómo ahorrar un par de fichas más?


All Articles