9 puntos por GN⁺ 2025-11-22 | 1 comentarios | Compartir por WhatsApp
  • Gracias a un entorno de código abierto llamado AthenaEnv, ahora es posible ejecutar código JavaScript en PlayStation 2
  • Este entorno integra el motor QuickJS para interpretar JavaScript y ofrece APIs para desarrollo de juegos como renderizado, entrada, sonido y manejo de archivos
  • Los desarrolladores pueden crear juegos con una estructura básica de archivos como main.js, athena.ini y athena.elf, y ejecutarlos en el emulador PCSX2
  • Los proyectos terminados pueden empaquetarse como archivos .iso para distribuirse como un solo archivo, y se presenta el proceso de conversión de zip a iso
  • Es un ejemplo de la combinación entre desarrollo para consolas retro y tecnologías web, y sugiere el potencial de expansión del desarrollo de juegos basado en JavaScript

Resumen del proyecto AthenaEnv

  • AthenaEnv es un entorno de ejecución de JavaScript para PS2 que ofrece un entorno de desarrollo centrado en APIs en lugar de un motor de juegos tradicional
    • Internamente modifica e integra QuickJS para interpretar código JavaScript
    • Está estructurado para que un programa nativo de PS2 (escrito en C) ejecute código JavaScript
  • Las APIs disponibles incluyen renderizado, carga de assets, manejo de entrada, entrada/salida de archivos y reproducción de sonido
    • El nivel de abstracción es similar al de p5.js o Raylib, por lo que funciones como detección de colisiones o gestión de escenas deben implementarse manualmente

Proceso para ejecutar juegos JavaScript en PS2

  • Para la ejecución se usa el emulador PCSX2, y es necesario activar la opción “Enable host filesystem” en la configuración
  • La carpeta del proyecto incluye los siguientes archivos
    • athena.elf: ejecutable de Athena
    • athena.ini: configuración del punto de entrada (main.js) y del logo de arranque, entre otros
    • main.js, src/, assets/: código del juego y recursos
  • Al ejecutar athena.elf en el emulador, el juego se inicia, y los cambios al código JavaScript se reflejan de inmediato tras un reset

Procedimiento para crear un archivo .iso

  • Se explica cómo empaquetar el proyecto en una única imagen ISO para su distribución
    • Archivos obligatorios: athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
    • Se seleccionan todos los archivos, se comprimen en zip y luego se convierten a iso usando el sitio mconverter.eu
    • Después de la conversión, puede ejecutarse incluso sin la opción “Enable host filesystem”
  • Para automatizar la conversión se presenta la herramienta CLI GENISO, basada en Python (https://github.com/scottvr/GENISO)
    • Permite convertir zip a iso sin dependencias externas

Ejemplo Hello World

  • El ejemplo básico implementa carga de fuentes e imágenes, estructura del game loop, animación de sprites, manejo de entrada y renderizado de texto
    • Usa módulos integrados de Athena como Screen, Font, Image y Pads
    • Ejecuta el loop por fotogramas con el método Screen.display()
    • Detecta la entrada del control con Pads.get(0)
    • Controla la animación por fotogramas con propiedades del sprite como startx y endx
    • Muestra FPS o texto con font.print()
  • El volteo del sprite se implementa asignando un valor negativo a width, y requiere calcular un offset para corregir la posición

Soporte 3D y desarrollo futuro

Conclusión

  • AthenaEnv es un entorno innovador que permite crear juegos de PS2 solo con JavaScript
  • También permite que desarrolladores web se acerquen al desarrollo de juegos para consolas retro, y
    muestra la expansión y compatibilidad del ecosistema JavaScript

1 comentarios

 
GN⁺ 2025-11-22
Comentarios en Hacker News
  • Parece que los proyectos creados por Fabrice Bellard realmente tienen un impacto amplísimo
    Está genial que, gracias a QuickJS, incluso en sistemas antiguos como la PS2 sea posible revivir el homebrew a través de AthenaEnv

    • No lo hice porque casi no tengo habilidades con Photoshop, pero quería poner en el meme de xkcd 2347 algo como “implementado por Fabrice Bellard medio dormido solo para demostrar que se podía”
      En alguna parte de la cadena de dependencias de muchísimos proyectos FOSS hay código suyo
  • Al ver que el autor mencionó lo incómodo que era usar un sitio web para convertir ZIP a ISO, hice yo mismo un script de Python multiplataforma sin dependencias externas
    Se puede ver en ZIP2ISO.py
    Me impresionó que estuviera “vibe-codeado” con Gemini3 Pro sin leer la especificación ISO9660

    • Parece que mkisofs también podría hacer lo mismo
  • AthenaEnv es interesante. Parece estar estructurado usando QuickJS como intérprete de JS y envolviendo las bibliotecas nativas del sistema de la PS2
    Me pregunto si habrá un proyecto similar para distribuir juegos JS Canvas (WebGPU/WebGL) también en consolas modernas (Switch/2, PS5, Xbox)
    Los SDK de consolas están bajo NDA, así que casi no hay información pública, y la mayoría de los juegos usan Unreal o Unity
    En PC o móvil es relativamente simple porque se puede ejecutar fácilmente con Electron o WebView

    • Existe el caso de Cross Code, un juego hecho en JS que fue porteado a consolas. El proceso detallado está resumido en esta entrada de blog
    • Según recuerdo, los SDK de Nintendo 3DS y Wii U tenían un framework similar a Electron basado en tecnologías web, pero en Switch se dejó de lado
      El applet de navegador WebKit de Switch tiene el JIT desactivado, así que solo se usa para fines limitados como el e-manual
  • Me preguntaba si para ejecutarlo en una consola real habría que grabar el ISO en un disco

    • Creo que sería posible si se combina con FreeDVDBoot
    • Una combinación popular es FreeMcBoot en la memory card + una memoria USB. También ayuda a reducir el desgaste de la unidad óptica
    • Para grabarlo en disco y ejecutarlo sí hace falta hackear la consola, pero también se puede por USB. Aun así, uno podría grabarlo solo por la sensación de usar un disco real
    • También hubo quien opinó que sería mejor usar emulación de unidad óptica en vez de un disco físico
  • Hay un proyecto similar con QuickJS para Nintendo Switch llamado nx.js

    • Actualmente este proyecto solo soporta canvas2d, pero en teoría parece posible crear una capa que convierta juegos WebGPU o WebGL para Switch
      Eso sí, cambiar de un motor v8/JIT a QuickJS implicaría una pérdida de rendimiento considerable
  • Ahora ni siquiera la PS2 puede escapar del alcance de JavaScript

  • AthenaEnv es el proyecto sucesor de Enceladus, basado en Lua y hecho por el mismo desarrollador
    Se usa mucho no solo para juegos, sino también para apps homebrew, y en Enceladus hay ejemplos como RETROLauncher y POPSLoader, mientras que en Athena está OSD-XMB

  • Pensé que quizá también sería posible crear un navegador web para PS2 y abrir el juego como si fuera un sitio web

    • Pero como Chrome requiere al menos 4GB de memoria, para adaptarlo a los 32MB de RAM de la PS2 habría que reducirlo a una centésima vigésima octava parte
  • Justo estaba buscando algo así; qué proyecto tan genial, gracias

  • La gente hace de todo para no usar .gdscript ni Godot

    • Me gusta Godot, pero en PS2 no se puede ejecutar
    • En realidad, compilar con Godot y exportarlo a PS2 no es algo sencillo