>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
C

Cómo construir una computadora de 8 bits con archivos de cabecera C

Imagina que has decidido escribir un emulador para el Commodore 64 o el ZX Spectrum. Por lo general, esto se convierte en una larga inmersión en los manuales del procesador Z80 o MOS 6502, implementando temporizaciones e intentando hacer que todo funcione con salida gráfica. Pero hay un proyecto que ofrece un enfoque diferente: tratarlo como ensamblar un kit en una placa de pruebas.

Hablamos del repositorio chips del desarrollador floooh. Es una colección de emuladores de chips de 8 bits y sistemas completos escritos en C puro. Lo principal es que todo está empaquetado en archivos de cabecera (header-only), y la interacción entre componentes imita pines físicos reales.

Cuál es la esencia de este proyecto

Cuando escribimos código, estamos acostumbrados a objetos, métodos y callbacks. En chips, todo funciona de manera diferente. El autor introdujo el concepto de máscaras de bits para pines. Cada chip tiene una función tick que toma un número de 64 bits. Cada bit en este número representa el estado de una "pierna" específica del chip: bus de direcciones, bus de datos, señales de lectura/escritura o interrupciones.

Alimentas una máscara como entrada, la función calcula un ciclo de reloj del chip y devuelve una máscara actualizada. Para construir una computadora, literalmente "pasas cables" en código, copiando bits de la máscara de salida de un chip a la máscara de entrada de otro. Esto se siente increíblemente lógico si alguna vez has sostenido un soldador o has profundizado en esquemas de hardware antiguo.

Qué hay dentro de la caja

El repositorio contiene una colección decente de hardware de la era dorada de las computadoras domésticas.

Para empezar — procesadores. Están los clásicos: Z80, 6502 y 8080. Junto a ellos vienen chips periféricos sin los cuales una computadora no arrancará. Por ejemplo, el controlador de interrupciones i8259, el temporizador i8253, o el controlador de video MC68b45.

Además de componentes individuales, el autor incluyó ensamblajes listos para usar en el proyecto. Puedes ejecutar emulación de:

  • Amstrad CPC 464/6
  • Commodore 64
  • ZX Spectrum 48/128
  • Acorn Atom
  • E incluso la soviética RK-86 (o más bien, su pariente cercana basada en el 8080)

Todo esto está escrito en un subconjunto de C99 que GCC, Clang e incluso MSVC manejan sin problemas. Sin dependencias externas — solo incluye el archivo .h correspondiente y estás listo para comenzar.

Cómo funciona técnicamente

A pesar de la búsqueda de "pureza" en la simulación de pines, el autor hizo compromisos sensatos para el rendimiento. Si simuláramos honestamente cada puerta lógica, el emulador avanzaría a paso de tortuga incluso en hardware de primera línea. Por eso la decodificación de direcciones en los emuladores de sistema a menudo está simplificada.

Es interesante cómo se maneja el testing. No hay pruebas en el repositorio principal — están en un proyecto separado chips-test. Los ejemplos de uso también están allí. Y si quieres ver lo que es capaz de hacer en un navegador, el autor tiene demos compilados a WebAssembly. Se ejecutan muy rápido, lo que confirma la viabilidad del enfoque header-only.

Beneficios prácticos

¿Por qué un desarrollador moderno necesitaría esto cuando hay decenas de emuladores listos para usar?

Primero, es una base ideal para crear tus propias herramientas especializadas. Si necesitas depurar código para un procesador antiguo o escribir un depurador personalizado, chips proporciona una base lista, probada y muy compacta.

Segundo, es un libro de texto excelente sobre arquitectura de computadoras. En lugar de leer teoría seca, puedes ver exactamente cómo fluyen los datos desde el procesador a la memoria a través del bus, simplemente colocando breakpoints en el código.

Tercero, el proyecto es útil para los entusiastas de sistemas embebidos. Gracias a la ausencia de dependencias y los bajos requisitos de recursos, estos emuladores pueden ejecutarse en un microcontrolador, creando una "computadora dentro de una computadora".

Vale la pena probar

Si eres un fanático de la computación retro o simplemente amas el código C hermoso y conciso, definitivamente vale la pena echar un vistazo al repositorio. La arquitectura de máscaras de bits es un enfoque fresco al viejo problema de la emulación.

El proyecto está vivo, se actualiza activamente y se mantiene. Por supuesto, la documentación en el propio README es bastante breve, pero el código está escrito de manera tan limpia que es fácil entenderlo por cuenta propia. Para quienes quieran profundizar aún más, el autor incluso compiló una colección de esquemas y manuales en un repositorio complementario emu-info.

Una advertencia — esto no es una biblioteca "plug and play" para el usuario promedio. Para obtener una imagen en pantalla, necesitarás conectar algún backend gráfico (como Sokol o SDL) y descubrir cómo convertir datos de la memoria de video emulada a píxeles. Pero para quienes les gusta profundizar en las "entrañas" del software de sistema, esto es más una ventaja que un inconveniente.

Proyectos relacionados