- ChipWits, uno de los primeros juegos de Macintosh de 1984, liberó como código abierto su código fuente FORTH original de Mac y Commodore 64 con motivo de su 40.º aniversario
- El objetivo de la publicación es preservar el legado del juego y compartir cómo se hacía desarrollo multiplataforma en microcomputadoras de 8 bits en 1984
- Los datos se recuperaron de discos de hace 40 años que Doug Sharp había conservado; aunque había algunos sectores defectuosos, la mayoría de los discos pudieron leerse sin problemas
- Mientras que el código completo de la versión para Mac tiene unas 3,000 líneas de FORTH, el port modernizado llega a 35,000 líneas de C#, lo que deja ver la compacidad del código y las limitaciones de la época
- El proyecto publicó en GitHub las imágenes originales de disco y el código extraído, y busca trabajar con la comunidad para identificar las versiones más recientes del código fuente, documentar cómo compilarlo y extraer sprites
Publicación del código original de ChipWits
- Para celebrar los 40 años de ChipWits, se liberó como código abierto el código fuente FORTH original de Mac y Commodore 64
- El código original recuperado y las imágenes de disco están recopilados en chipwits/chipwits-forth
- La publicación busca preservar el legado de ChipWits y compartir la experiencia de desarrollo multiplataforma para microcomputadoras de 8 bits en 1984
- Quienes conozcan estos sistemas originales pueden participar en la exploración y organización del código fuente, y el proyecto solicita colaboración a través del servidor de Discord de ChipWits
Por qué eligieron FORTH en 1984
- ChipWits fue uno de los primeros juegos lanzados para Macintosh en 1984
- Sus cocreadores, Doug Sharp y Mike Johnston, diseñaron ChipWits como su primer juego original después de portar juegos educativos entre distintas microcomputadoras de 8 bits
- El juego es de programación de robots, influenciado por juegos de programación de la época como Rocky’s Boots y Logo
- El entorno de desarrollo para Mac en 1984 era limitado, y la principal forma de desarrollar era comprar una Apple Lisa
- El precio original de Apple Lisa era de $9,995, equivalente hoy a $30,373
- Como era un costo difícil de asumir para un estudio indie, Doug y Mike desarrollaron con MacForth Plus, que corría directamente en la Mac
- En ese tiempo existían variantes de FORTH para varias microcomputadoras de 8 bits, así que era una buena elección de lenguaje pensando en futuros ports
- El desarrollo comenzó en abril de 1984, y tomó alrededor de 7 meses completar la primera versión y publicarla a tiempo para la temporada navideña
Ports a Commodore 64 y Apple II
- Epyx iba a ser la publicadora de ChipWits, y Commodore 64 era el mercado más grande
- Epyx no tenía juegos para Mac, y como Brainworks apuntaba al mercado educativo donde Apple era fuerte, Epyx solo publicó la versión de Commodore 64
- El port para C64 se completó en 1985 y fue escrito con Super Forth 64
- Portar el juego a Commodore 64 fue complicado porque había que mantener el diseño general de la interfaz de usuario de la Mac
- Hubo que desarrollar un sistema de menús desplegables operado con joystick en lugar de mouse
- Se añadieron gráficos a color y sonido del chip SID
- Todo tenía que caber en un disco de 165 KB en vez de los 400 KB del disco de Mac
- También había que funcionar con 64 KB de RAM en lugar de los 128 KB de la Mac, además de un procesador más lento
- Tras el éxito de la versión para Commodore 64, también se hizo una versión para Apple II, igualmente escrita en una variante de FORTH
Recepción tras el lanzamiento y ejecución del original
- ChipWits recibió varias reseñas y premios después de su lanzamiento
- El MacUser Editor’s Choice 1986 Award describió a ChipWits como “la introducción más entretenida a los conceptos de programación”, elogiando su lenguaje basado en íconos y su diseño educativo
- Macazine predijo que ChipWits se convertiría en un título de culto entre usuarios de Macintosh y niños
- MacWorld opinó que si te gusta programar, te gustará ChipWits
- Creative Computing dejó una reseña que incluía una escena de alguien insultando a un robot de caricatura a las 4:30 de la mañana
- En 2008, Maclife.com eligió a ChipWits como uno de los Top 10 Apple II / Mac Games de todos los tiempos
- Las versiones originales se están preparando para poder ejecutarse en emuladores de navegador mediante los proyectos de código abierto Emularity y Apple2js
Recuperación de discos de hace 40 años
- Mientras trabajaban en una nueva versión de ChipWits, Doug Sharp encontró los discos originales que había conservado
- Los disquetes de 3.5 pulgadas y los discos flexibles de 5.25 pulgadas habían estado guardados en una casa durante 40 años, pero la mayoría pudo leerse sin sectores defectuosos
- Para recuperar los discos de Commodore 64 se usó una 1541 Commodore 64 Disk Drive comprada en eBay
- Los datos se leyeron en una PC moderna mediante un adaptador USB XoomFloppy
- Los disquetes Mac de 3.5 pulgadas no podían leerse con el método estándar de unidades modernas debido al esquema propietario de sectores de Mac
- Mac usaba una disposición propietaria de sectores para ampliar la capacidad del disco hasta 800 KB
- Una PowerMac G3 WallStreet se usó como sistema puente por tener unidad de 3.5 pulgadas y pila de red, pero como en macOS moderno está desactivado el soporte para 400 KB, solo podía leer discos de 800 KB
- Luego, por sugerencia de un fan, usaron el controlador de hardware personalizado GreaseWeazle para controlar una unidad de disco por USB, y ese método sí funcionó
- Todos los discos se volcaron como imágenes por bloques y se organizaron en el repositorio de GitHub
- Los nombres de archivo usan las etiquetas de los discos
- Si se detectaban sectores defectuosos, se anteponía
badal nombre del archivo - Para facilitar la lectura en computadoras modernas, extrajeron los bloques con scripts en Python y los reformatearon como archivos ASCII UTF-8
- PETSCII, la codificación de caracteres propia de Commodore 64, se convirtió a ASCII
Qué revela el código fuente FORTH sobre su desarrollo
- Las imágenes completas de disco originales y el código pueden revisarse en chipwits/chipwits-forth
- El código completo de ChipWits para Mac tiene unas 3,000 líneas de FORTH
- El port modernizado ya alcanza las 35,000 líneas de C#, lo que resalta la compacidad del FORTH original
- Un texto aparte, Forth Code for Electrocrabs in 1984 ChipWits Deciphered, analiza una “screen” de código FORTH que controla a los electrocrabs
- FORTH es un lenguaje basado en pila, similar a la notación polaca inversa
- En vez de
1 + 1, se escribe1 1 + - En vez de
if random(3) == 1, se usa3 irnd 1 = if
- En vez de
Cómo se implementaba un juego en 1984, visto en ejemplos de código
- El código de movimiento del robot en la versión para Mac no separa un bucle de render por cuadro como en el desarrollo moderno
- La lógica del juego y el renderizado gráfico están mezclados dentro del código imperativo
- La animación se implementa renderizando píxeles directamente dentro del bucle
- Con unas pocas palabras de código se maneja si se mueve a una baldosa vacía, si choca con una pared o si toca una bomba
- La definición
?boomincluso decide si el juego termina al entrar en contacto con una bomba - Se suma 0 al puntaje según la posición del robot para forzar que se vuelva a dibujar el marcador, que pudo haberse borrado al pasar el robot
- La definición de sprites en la versión de Commodore 64 muestra cómo antes se mezclaban código y datos de assets
- El código fuente FORTH se guardaba no en archivos, sino en unidades llamadas screen numeradas, que se cargaban en el orden necesario
- Los sprites monocromos del C64 eran de 24×21 píxeles, y solo podían usarse 8 sprites por pantalla
- Al elegir sprites de 4 colores, la resolución bajaba a 12×21 y los píxeles pasaban a tener el doble de ancho
- El personaje ChipWit se renderiza superponiendo varios sprites, en una técnica parecida a la animación por celdas de los dibujos animados vintage
- Esta elección consumía más sprites disponibles para ChipWit, pero permitía imágenes más nítidas y animación por partes
- La tabla de puntajes de ítems en la versión para Mac está comprimida para caber en una sola screen
- Una anotación como
( 110584 dws)es la marca de fecha de la screen;110584significa 5 de noviembre de 1984, ydwscorresponde a Douglass Walter Sharp - Esa screen parece haber sido una de las últimas modificadas antes del lanzamiento final, y la última screen modificada es del 8 de noviembre
d,está definido para guardar valores multiplicados por 10, así que 150 puntos podían representarse como15 d- Esto ayudaba a mantener alineada la tabla y a que cupiera en una sola screen, y posiblemente facilitaba ajustar los puntajes completos durante el balanceo previo al lanzamiento
- Una anotación como
Reboot y trabajo de la comunidad
- El equipo está trabajando en una versión modernizada de ChipWits por separado de la liberación de la versión FORTH original
- La versión reboot busca conservar la diversión y el rigor informático del original, mientras mejora varios aspectos, desde la curva de aprendizaje hasta un leaderboard global competitivo
- Si agregas ChipWits a tu lista de deseados en Steam, puedes recibir una notificación cuando se lance la versión final
- Los objetivos inmediatos en los issues actuales de GitHub sobre el código FORTH original son los siguientes
- Confirmar que todo el código fuente relevante fue extraído de las imágenes de disco crudas
- Corregir problemas de alineación en algunos archivos fuente
- Algunos tienen ancho de 40 caracteres y otros de 64
- Determinar qué discos contienen la versión más reciente del código fuente
- Documentar cómo compilar desde el código fuente en Mac y C64
- Extraer sprites e imágenes crudas de los discos y convertirlos en archivos
.png
- El objetivo final es una versión FORTH mantenida por la comunidad de ChipWits para PC moderna
1 comentarios
Opiniones de Hacker News
Hay un artículo que explica por qué ChipWits se creó en FORTH en 1984
https://chipwits.com/2023/04/08/forth-programming-language-g...
Gracias por crear un juego que me encantaba; ya descargué la nueva demo y también lo agregué a mi lista de deseados en Steam
Forth es un lenguaje que llevo años queriendo aprender
En las computadoras antiguas, si querías un programa rápido tenías la opción de usar lenguaje ensamblador, y si no te importaba que fuera lento, BASIC; me parece curioso que Forth se mantenga como una especie de lenguaje de “velocidad intermedia”, aunque parezca bastante de alto nivel
Es un lenguaje basado en pila
https://www.forth.com/starting-forth/
Basta con conectar un cable USB a la computadora y abrir un programa de terminal para empezar de inmediato, así que es ideal para sumergirse por completo en el lenguaje
Eso sí, los productos que vienen de Australia pueden tardar meses en llegar, así que conviene buscar primero un proveedor más cercano
Otra buena forma es aprender como en 1984: ejecutar en una computadora moderna un emulador de Commodore 64 o Apple ][, por ejemplo, y montar dentro un entorno de desarrollo Forth
La documentación de esa época estaba escrita para principiantes absolutos, así que es muy fácil de seguir, y en internet hay muchos PDF escaneados gratuitos
Fue fácil y divertido, pero hasta cierto punto era tan absurdamente sencillo que para algunas personas podría sentirse demasiado básico, o aumentar la tentación de ir más allá de una implementación de juguete
Hay que gestionar la pila directamente, lo cual es bastante engorroso, y crear tu propio FORTH es divertido. No hace falta hacerlo necesariamente en ensamblador; hace tiempo también hice en C++ un lenguaje de scripting parecido a Forth
BASIC encajaba bien porque significa “Beginner's All-purpose Symbolic Instruction Code”
La Amstrad CPC 6128 también ofrecía en un disco aparte una implementación de Logo, un dialecto educativo de Lisp, y de niño esas listas enlazadas me impactaron muchísimo
En esa época, el “código abierto” no era un concepto común, y los compiladores e intérpretes de varios lenguajes eran herramientas comerciales profesionales
[1] https://en.wikipedia.org/wiki/Amstrad_CPC#Other_languages
[2] https://en.wikipedia.org/wiki/An_Open_Letter_to_Hobbyists
Se ve muy genial
Relacionado con esto también está http://tumbleforth.hardcoded.net/, y creo que se ve bastante bien. Si alguien lo hizo hasta el final, me da curiosidad saber cómo fue la experiencia
Me hizo pensar la computación de otra manera
Aunque todavía soy joven y me falta mucho, mirando hacia atrás, parece que antes se eligieron ciertas abstracciones por las restricciones del hardware, y que en las “ramas evolutivas” de los lenguajes de programación actuales se han acumulado muchas abstracciones que no envejecieron bien, formando muchas capas de cachivaches que sostienen el peso. Es parecido a otros proyectos de ingeniería
Puede que Collapse OS no sea práctico hoy, pero sí da una sensación de liberación al salirse de varias capas de abstracción. Se siente como una forma de disfrutar la computación al estilo de los años 60 sin una experiencia de desarrollo espantosa
Mi proyecto fantasioso actual es seguir estas cosas, compilar Dusk OS en una máquina virtual, luego pasarlo a una máquina física, escribir en C un intérprete de Scheme para Dusk OS y después expandirlo a gusto
Antes de llegar ahí hay varios ríos que cruzar. Implementé un intérprete de Scheme en Python en unas horas, y dediqué unas horas más a mejorar el escáner/tokenizador. Ahora estoy leyendo Crafting Interpreters para ver cómo tendría que implementar un intérprete de Scheme en C. Después de hacer el intérprete en C, pienso volver a mirar esta guía y lanzarme de lleno a DuskOS
Ya me gusta el tono del autor
Por ejemplo:
Impresiona su producción constante y enorme. No coincido del todo con la filosofía de Collapse, pero la lista de correo de DuskOS tiene justo el nivel de tráfico ideal para leerla sin participar
Al ver el trabajo de Virgil probé un poco de Forth, y el año pasado dediqué tiempo a descompilar a mano SmithForth[1]
Sorprende lo poco de ensamblador que hace falta para hacer bootstrap de un lenguaje. Se entiende perfectamente que Forth pueda ofrecer un REPL en entornos embebidos, y parece mucho más divertido que el ciclo de desarrollo típico del que se suele oír hablar
[0]:https://duskos.org/
[1]:https://dacvs.neocities.org/SF/
Después leí la página de Wikipedia de ChipWits y la entrada del blog, y el juego original se ve realmente genial. El logo que aparece en el manual de Wikipedia también está muy bueno
Últimamente estaba armando una lista de juegos viejos/nuevos con elementos de puzles y programación, y pienso incluirlo ahí. Puede que lo pruebe justo después de terminar el “juego” de ensamblador ketman. Aunque, en realidad, cuesta llamarlo juego
Espero que el nuevo ChipWits tenga mucho éxito
ValForth de Valpar fue una de las primeras implementaciones FORTH multiplataforma en el ecosistema Atari ST, y tenía extensiones ingeniosas para juegos
https://www.atarimagazines.com/rom/issue1/jumping_forth.php
Como dice el artículo, también existía el FORTH de Elcomp para 8 bits, y había libros como https://www.atarimania.com/documents/FORTH-on-the-Atari-Lear.... “Starting FORTH” de Leo Brodie sigue siendo una excelente introducción
Todos aprendimos BASIC, pero estos lenguajes alternativos nos mostraron que realmente existían metáforas completamente distintas para programar dispositivos
Para un niño de los 80, eso te abría muchísimo la cabeza
Forth parece uno de esos lenguajes que, como Perl, después de escribirlo una vez, cuesta leerlo
Es fácil de escribir y crear cosas con él, pero si vuelves al código más o menos un año después, parece que no vas a entender qué hace
Aun así, es realmente rápido y eficiente
Acabo de abrir al azar un programa bastante grande en Perl que no tocaba desde hace más de 3 años, revisé el código fuente y no tuve ningún problema para entender qué hace
No creo que el código Perl sea más difícil de releer que el de la mayoría de los demás lenguajes de programación. La dificultad depende principalmente de qué tan hábil sea el desarrollador con ese lenguaje y de cuánto tiempo haya pasado desde la última vez que escribió código en él
Si el lenguaje se te oxidó mucho o nunca tuviste mucha soltura con él, se vuelve difícil revisar código viejo en cualquier lenguaje
Claro, si no es tu propio código es más difícil, y también influye mucho qué tan bien esté escrito. Hay mucho código basura en cualquier lenguaje, y si era basura desde el principio, no mejora con el tiempo
Creo que Forth es difícil de escribir, pero fácil de leer
Lo jugué mucho de chico en la Commodore 64
Era un juego único, interesante y divertido
No quiero hacer spam en Hacker News, pero si jugaste el original, me encantaría escuchar tu reacción al reboot: https://chipwits.com
De chico quería desesperadamente tener este juego
Me hace pensar que estoy bastante viejo
Me da curiosidad con qué está escrita la versión moderna de ChipWits
Me encantaba este juego. También tenía un paquete de Forth para C64, pero nunca conecté que este juego se hubiera hecho con eso
Compré Human Resource Machine y me divirtió en su mayor parte, hasta que se volvió demasiado difícil
Parece el mismo concepto que ChipWits, es decir, programación basada en pila convertida en juego
Si alguien jugó ambos, me da curiosidad cómo se comparan