Cómo desarrollé un compilador de C y un navegador web para Am29000

Fuentes: How I developed an Am29000 C compiler and web browser

Entre finales de 1998 y principios de 1999, Oscar Toledo G., programador mexicano, construyó desde cero un compilador de C y un navegador web para su computadora casera basada en el procesador Am29000, un chip RISC de 32 bits de AMD. El autor ya había desarrollado para esa máquina un sistema operativo con interfaz gráfica en código máquina, pero programar directamente en ensamblador resultaba agotador: cada nueva función obligaba a planificar memoria, recolocar saltos y corregir errores ocultos.

Para resolver el problema recurrió a Internet, donde descubrió el GCC 2.8.1 con soporte para Am29000, aunque su equipo solo contaba con 512 KB de RAM, muy por debajo de los 2 MB requeridos. Decidió entonces adaptar a Am29000 un compilador de C que ya había escrito para el transputer, una arquitectura más simple. El mayor reto fue la gestión de registros: el Am29000 disponía de muchos registros locales, pero una sola indirección obligaba a conservar la variable en memoria.

Toledo arrancó con un port de Small-C en diciembre de 1997, lo descartó, y en mayo de 1998 retomó el compilador del transputer, compilándolo primero con DJGPP —un porte de GCC para MS-DOS— para validarlo en PC. Después rediseñó el árbol de expresiones, sustituyendo arreglos paralelos por listas enlazadas con asignación dinámica, y en dos semanas completó el generador de código para Am29000. Con esta cadena de herramientas pudo, finalmente, abordar el desarrollo de un navegador web para su sistema casero.