jueves, junio 11, 2026

DONKEY.BAS on the Edge: Cómo revivimos el juego de Bill Gates de 1981 con Cloudflare Workers y Pages (Just For Fun!)

Hace unos días hablando con Chema Alonso me topé otra vez con uno de esos pequeños tesoros que la historia de la informática guarda en un cajón. DONKEY.BAS. Cuatro mil quinientos bytes de BASIC que vienen de 1981 y que, sin embargo, dan para hablar de muchas cosas. De cómo se hacía software cuando un PC tenía 16KB de RAM, de una de las polémicas más divertidas de la historia de Microsoft y, sobre todo, de algo que veo todos los días en mi trabajo, que es lo fácil que es hoy modernizar y desplegar cualquier aplicación gracias a la plataforma de Cloudflare.

Así que cogí el código original, lo migré a la web y lo puse a correr en producción en Cloudflare Pages en cuestión de minutos. Os cuento la historia completa, que tiene su miga. De la historia de este juego, por lo visto, se habla en el libro de  "Microhistorias: anécdotas y curiosiades de la historia de la informática (y los hackers)" de Fran Ramírez y Rafel Troncoso en 0xWord, que os dejo por aquí.

Figura 2: Libro de "Microhistorias: anécdotas y curiosiades de la historia
de la informática (y los hackers)" de Fran Ramírez y Rafel Troncoso 0xWord.

Por cierto, antes de entrar en materia con DONKEY.BAS, os recuerdo que ya os publiqué un caso parecido con la migración del mítico Arkanoid en el artículo titulado: "Cómo migrar Arkanoid de C++ a TypeScript con OpenCode y desplegarlo en Workers de Cloudflare".

La historia: el juego que Bill Gates escribió... y por el que le pincharon durante años

DONKEY.BAS lo escribieron en 1981 Bill Gates y Neil Konzen para demostrar las capacidades gráficas (el flamante modo CGA) y de sonido (el mítico PC speaker) del IBM PC, junto con la potencia del intérprete de BASIC que Microsoft había desarrollado para IBM. Venía incluido en las primeras versiones de PC-DOS, así que millones de personas lo tuvieron delante.

Figura 3: El juego de Donkey.BAS Version 2.0 (Fixed Version)

¿El juego? Sencillísimo: conduces un coche por una carretera de dos carriles y solo puedes hacer una cosa, cambiar de carril con la barra espaciadora para esquivar a los burros que van apareciendo. Si chocas, ¡BOOM! y punto para el burro. Si lo esquivas, "Donkey loses!" y punto para ti. No hay más objetivo. No hay final.

Y aquí viene lo "polémico".

Que uno de los fundadores de Microsoft hubiera firmado un juego tan primitivo —con gráficos que parpadeaban y una jugabilidad de quince segundos— se convirtió con los años en una especie de chiste recurrente en la industria.

Cuando salió el Macintosh en 1984, desde el mundo Apple se usó DONKEY.BAS como ejemplo de lo tosco que era el software del bando IBM/Microsoft frente a la elegancia gráfica del Macintosh. Bill Gates, lejos de esconderlo, siempre lo defendió con orgullo: era una demo técnica de lo que se podía hacer, no una obra maestra del diseño de videojuegos.


Hay un detalle que a mí me encanta y que demuestra que las prisas de 1981 eran las mismas que las de hoy: si miráis el código original, en la pantalla de título pone Version 1.1O... con una letra "O mayúscula" en lugar de un cero - tal vez por no mostrar a los usuarios el famoso 0 de las tipografías de los ordenadores con la raya cruzada que los no técnicos quizá nunca entendieron -. Usas una O en lugar de un 0 con la raya cruzada, era igual que en algunas máquinas de escribir donde en lugar de usar el 1 se hacía con la "l" minúscula.

O quizá es un typo que lleva más de cuarenta años viajando por copias y copias del fichero. Quien diga que nunca ha subido a producción con una errata, que tire la primera piedra. El código fuente original que usé como referencia está perfectamente conservado aquí:

Merece la pena abrir el .BAS y leer esos GOTO, esos POKE 106,0 y esos SOUND 37+RND*200,4. Es arqueología pura, y para los amantes del BASIC, un placer visual. 

La migración: de GOTO y POKE a HTML5, Canvas y Web Audio

Lo bonito de un código tan pequeño es que se puede entender entero y replicar su lógica con fidelidad. El programa en BASIC original hace, en esencia, esto:
  • Pinta la carretera con dos líneas verticales y una línea central discontinua que se desplaza para dar sensación de avance:
    • (`LINE`, `STEP 20`).
  • El coche solo tiene dos posiciones X. El truco de cambiar de carril es maravillosamente simple:
    • `CX = 252 - CX` (línea 1730).
  • El burro aparece en un carril al azar: 
    • `DX = 105 + 42*INT(RND*2)` (línea 1700).
  • La colisión esta en la línea 1750 con IF que dispara el BOOM! y la animación de fragmentos volando a las esquinas en las líneas 2060-2200.
    •  `IF CX=DX AND Y+25>=CY` (línea 1750) 
  • Y el sonido, esos pitidos monofónicos del PC speaker, salen de las instrucciones `SOUND`.
Para esta prueba lo reescribí desde cero en HTML5 + CSS + JavaScript puro (Vanilla JS), sin frameworks ni motores de juego pesados, porque la gracia era mantener el espíritu minimalista del original:
  • Gráficos: con la API de Canvas, respetando la resolución y la paleta CGA (negro, cian, magenta, blanco), pero con escalado nítido (`image-rendering: pixelated`) para que se vea bien en una pantalla 4K de hoy.
  • Sonido: con la Web Audio API, generando ondas cuadradas para emular el PC speaker, un pitido corto al cambiar de carril y una ráfaga aleatoria de tonos para la explosión, calcada del `SOUND 37+RND*200,4`.
  • Controles: barra espaciadora para cambiar de carril y Esc para salir, tal cual el original... y, ya puestos a modernizar, soporte táctil para jugar desde el móvil.
Comenté cada bloque del JavaScript indicando qué línea del BASIC original estaba replicando, porque me parecía la mejor forma de honrar el código de Gates y Konzen: no reinventarlo, sino traducirlo.


El despliegue: de cero a producción con Cloudflare Pages en minutos

Y aquí es donde, como Account Executive en Cloudflare, no puedo evitar ponerme un poco pesado, porque es justo lo que me enamoró de esta plataforma. Tenía tres ficheros (`index.html`, `style.css`, `game.js`) y quería ponerlos en internet, con HTTPS, en una red global y sin montar ni un solo servidor. Pues bien:

```bash
wrangler login
wrangler pages deploy .
```

Y ya está. Literalmente. Wrangler (el CLI de Cloudflare) subió los ficheros, creó el proyecto y me devolvió una URL de producción servida desde más de 330 ciudades repartidas por el mundo. Sin aprovisionar máquinas, sin configurar un balanceador, sin pelearme con certificados TLS. El juego de Bill Gates de 1981 corriendo en la red perimetral más grande del planeta, gratis y en edge.


Para quien prefiera no tocar la terminal, Cloudflare Pages también permite el despliegue por Direct Upload: arrastras la carpeta al panel y listo. O lo conectas a tu repositorio de Git y cada Push despliega solo, con Preview Deployments por cada rama para revisar cambios antes de pasarlos a producción.

¿Y qué tiene esto que ver con modernizar de verdad?

DONKEY.BAS es un juguete, claro. Pero la historia que cuenta es exactamente la misma que vivo con empresas que arrastran aplicaciones de hace veinte o treinta años: hay un core de lógica de negocio valioso atrapado en una tecnología que ya nadie quiere mantener, y el reto no es reescribirlo todo de golpe, sino modernizar la capa de entrega y de ejecución para llevarlo donde están hoy los usuarios.

Y ahí la propuesta de Cloudflare es potentísima, porque no se queda en servir ficheros estáticos:
  • Cloudflare Workers: ejecuta tu lógica de backend en JavaScript, TypeScript, Python o Rust (vía WebAssembly) directamente en el edge, con arranques en frío de milisegundos. Olvídate de pensar en servidores o en regiones; tu código corre cerca del usuario, donde esté.
  • Cloudlfare Pages + Functions: para frontends modernos con su API integrada, sin coser dos plataformas distintas.
  • Almacenamiento y estado en el edge: Workers KV, D1 (SQL), R2 (objetos, sin tarifas de salida) y Durable Objects para coordinación y estado en tiempo real. Tu aplicación heredada puede ir migrando piezas a estos servicios sin un Big Bang.
  • Seguridad de serie: WAF, mitigación de DDoS, *bot management* y Zero Trust delante de todo. Modernizar también es poner la seguridad por delante, no como un parche posterior.
  • IA en el edge con Workers AI y AI Gateway: por si a ese DONKEY.BAS del futuro queréis ponerle un rival que conduzca solo con IA.
La clave es que puedes hacerlo incremental. Pones Cloudflare delante de tu aplicación actual, empiezas a mover funcionalidad a Workers poco a poco (el patrón strangler fig de toda la vida) y, sin pararlo todo, acabas con una arquitectura distribuida, segura y rápida. Igual que yo no reescribí la lógica de DONKEY.BAS, sino que la trasladé a una plataforma moderna.

Conclusión: cuarenta años después, el burro sigue cruzando

Me hace especial ilusión que un trozo de código de 1981, escrito por dos genios con un IBM PC y muchísimo ingenio, pueda estar hoy en producción en una red global sin tocar un servidor. Es la mejor metáfora que se me ocurre de para qué sirve todo esto: 

La tecnología cambia, pero las buenas ideas —y los buenos cores de negocio— merecen viajar bien.

Si tenéis una aplicación heredada que os da miedo tocar, hablemos. A lo mejor vuestro "DONKEY.BAS" particular está a un `wrangler pages deploy` de tener una segunda vida. Y si solo queréis jugar y esquivar burros como en 1981, también os entiendo perfectamente. Puedes jugar a DONKEY.BAS en Cloudflare aquí.

Que gane el mejor conductor.

Autor: Carlos Luengo,  Senior Account Executive en Cloudflare. 

No hay comentarios:

Entrada destacada

Hacking IA: Jailbreak, Prompt Injection, Hallucinations & Unalignment. Nuestro nuevo libro en 0xWord

Pocas veces me ha hecho tanta ilusión que saliera un nuevo libro en 0xWord como con este libro de " Hacking IA: Jailbreak, Prompt Inje...

Entradas populares