1 puntos por GN⁺ 2024-11-23 | 1 comentarios | Compartir por WhatsApp
  • 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 bad al 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 escribe 1 1 +
    • En vez de if random(3) == 1, se usa 3 irnd 1 = if

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 ?boom incluso 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; 110584 significa 5 de noviembre de 1984, y dws corresponde 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 como 15 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

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

 
GN⁺ 2024-11-23
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...

    • ChipWits fue uno de los primeros juegos que probé en 1984, a los 6 años, en mi primera computadora, una Apple Macintosh
      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

    • Durante mucho tiempo, Forth fue, junto con C, un lenguaje estándar para desarrollo de hardware y drivers, y todavía se usa en muchos lugares
      Es un lenguaje basado en pila
      https://www.forth.com/starting-forth/
    • Se puede comprar una computadora de placa única que ejecuta Forth de forma nativa
      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
    • Creo que crear uno mismo un intérprete Forth de juguete es una buena manera de aprender el lenguaje
      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
    • Forth es muy rápido, e incluso puede ser más rápido que ensamblador escrito de forma ingenua, pero de ninguna manera es un lenguaje de alto nivel
      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
    • Las antiguas computadoras hogareñas de 8 bits estaban diseñadas pensando en adolescentes y niños, y quizá también tuvieron influencia de Alan Kay
      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

    • Avancé más o menos la mitad durante una semana en la que el trabajo estuvo tranquilo, y me recordó a mi clase de hardware en la universidad
      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
    • Apenas estoy empezando a verlo; gracias por compartirlo
      Ya me gusta el tono del autor
      Por ejemplo:

      Much terser than the C version right?
      This little assembler crash course gives us a better understanding of what is compiled by the C compiler, but not how it compiles it. We don't know how it's ran either. To know that, we'd have to dig through software that weighs millions of lines of code. Maybe you'd have the patience to do it, I don't, so let's continue tumbling down the rabbit hole. We'll go bare metal and then build an operating system of our own, with a C compiler of our own. It's simpler this way.
      What’s a linker? Aw, forget about it, it’s another piece of overcomplicated software that has convinced the world that it’s essential. We won’t need one in what’s coming.

    • Virgil Dupras, autor de la serie Tumble Forth, también está haciendo DuskOS, un sistema operativo escrito por completo en un Forth personalizado
      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/
    • Al principio fue una reacción que dejé por la emoción de ver algo real basado en Forth
      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

    • Creo que es totalmente injusto que Perl tenga esa reputación
      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
    • Personalmente lo siento al revés
      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

    • En el juego nuevo también mantuvimos casi intacta la jugabilidad del original
      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

    • Según el artículo, es C#, y dicen que la cantidad de código es al menos 10 veces mayor
      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
    • Unity y C#
  • 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