9 points par GN⁺ 2025-11-22 | 1 commentaires | Partager sur WhatsApp
  • Grâce à un environnement open source appelé AthenaEnv, il est désormais possible d’exécuter du code JavaScript sur PlayStation 2
  • Cet environnement intègre le moteur QuickJS pour interpréter le JavaScript et fournit des API de développement de jeux pour le rendu, les entrées, le son, la gestion des fichiers, etc.
  • Les développeurs peuvent créer un jeu avec une structure de fichiers minimale comprenant main.js, athena.ini, athena.elf, puis l’exécuter dans l’émulateur PCSX2
  • Le projet final peut être packagé en fichier .iso pour être distribué sous la forme d’un fichier unique, avec une procédure de conversion zip→iso présentée pour cela
  • C’est un exemple qui illustre la fusion entre le développement sur console rétro et les technologies web, et qui laisse entrevoir le potentiel d’extension du développement de jeux en JavaScript

Vue d’ensemble du projet AthenaEnv

  • AthenaEnv est un environnement d’exécution JavaScript pour PS2 qui propose non pas un moteur de jeu traditionnel, mais un environnement de développement centré sur des API
    • Il modifie et embarque QuickJS en interne pour interpréter le code JavaScript
    • Il est conçu pour qu’un programme natif PS2 (écrit en C) exécute le code JavaScript
  • Les API fournies couvrent le rendu, le chargement des assets, la gestion des entrées, les entrées/sorties de fichiers et la lecture audio
    • Le niveau d’abstraction est comparable à p5.js ou Raylib, ce qui signifie que des éléments comme la détection de collisions ou la gestion des scènes doivent être implémentés manuellement

Processus d’exécution d’un jeu JavaScript sur PS2

  • L’exécution se fait avec l’émulateur PCSX2, et il faut activer l’option « Enable host filesystem » dans les paramètres
  • Le dossier du projet contient les fichiers suivants
    • athena.elf : exécutable Athena
    • athena.ini : configuration du point d’entrée (main.js), du logo de démarrage, etc.
    • main.js, src/, assets/ : code du jeu et ressources
  • En lançant athena.elf dans l’émulateur, le jeu démarre, et les modifications du code JavaScript peuvent être appliquées immédiatement après un reset

Procédure de création d’un fichier .iso

  • Une méthode est expliquée pour regrouper le projet dans une image ISO unique en vue de sa distribution
    • Fichiers requis : athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
    • Il faut sélectionner tous les fichiers, les compresser en zip, puis utiliser le site mconverter.eu pour les convertir en iso
    • Après conversion, l’exécution est possible même sans activer le paramètre « Enable host filesystem »
  • Un outil CLI GENISO basé sur Python (https://github.com/scottvr/GENISO) est également présenté pour automatiser la conversion
    • Il permet de convertir un zip en iso sans dépendances externes

Exemple Hello World

  • L’exemple de base implémente le chargement de polices et d’images, la construction de la boucle de jeu, l’animation de sprites, la gestion des entrées et le rendu de texte
    • Utilisation des modules intégrés à Athena comme Screen, Font, Image, Pads
    • Exécution de la boucle image par image avec la méthode Screen.display()
    • Détection des entrées manette avec Pads.get(0)
    • Contrôle d’une animation image par image avec des propriétés du sprite comme startx, endx, etc.
    • Affichage des FPS ou de texte avec font.print()
  • L’inversion d’un sprite se fait en donnant une valeur négative à width, avec un calcul d’offset nécessaire pour corriger la position

Support 3D et développements futurs

Conclusion

  • AthenaEnv est un environnement innovant qui permet de créer des jeux PS2 uniquement en JavaScript
  • Il permet aussi aux développeurs web d’aborder le développement de jeux pour console rétro et
    montre l’extensibilité et la compatibilité de l’écosystème JavaScript

1 commentaires

 
GN⁺ 2025-11-22
Commentaires sur Hacker News
  • Les projets créés par Fabrice Bellard semblent avoir une portée vraiment immense
    C’est génial que QuickJS permette de relancer le homebrew sur d’anciens systèmes comme la PS2 via AthenaEnv

    • Je suis trop nul en Photoshop pour l’avoir fait, mais j’avais envie d’écrire sur le mème de xkcd 2347 : « implémenté par Fabrice Bellard à moitié endormi juste pour prouver que c’était possible »
      Quelque part dans la chaîne de dépendances d’innombrables projets FOSS, il y a forcément de son code
  • En voyant l’auteur mentionner la gêne d’utiliser un site web qui convertit des ZIP en ISO, j’ai créé moi-même un script Python multiplateforme sans dépendances externes
    On peut le voir sur ZIP2ISO.py
    C’était impressionnant de voir qu’il avait été « vibe-codé » avec Gemini3 Pro sans même lire la spécification ISO9660

    • On pourrait sans doute faire la même chose avec mkisofs
  • AthenaEnv est intéressant. Il semble utiliser QuickJS comme interpréteur JS et encapsuler les bibliothèques système natives de la PS2
    Je me demande s’il existe un projet similaire permettant de déployer des jeux JS Canvas (WebGPU/WebGL) sur des consoles modernes (Switch/2, PS5, Xbox)
    Les SDK de consoles sont sous NDA, donc il y a très peu d’informations publiques, et la plupart des jeux utilisent Unreal ou Unity
    Sur PC ou mobile, c’est relativement simple puisqu’on peut les exécuter facilement via Electron ou WebView

    • Il existe un cas de portage sur console du jeu Cross Code, développé en JS. Le processus est détaillé dans cet article de blog
    • Si je me souviens bien, les SDK de la Nintendo 3DS et de la Wii U incluaient un framework similaire à Electron basé sur les technologies web, mais cela a été abandonné sur Switch
      L’applet navigateur WebKit de la Switch a le JIT désactivé, donc il ne sert qu’à des usages limités comme les e-manuals
  • Je me demandais s’il fallait graver l’ISO sur un disque pour l’exécuter sur une vraie console

    • En le combinant avec FreeDVDBoot, cela semble possible
    • La combinaison FreeMcBoot sur carte mémoire + clé USB est une méthode populaire. Cela permet aussi de réduire l’usure du lecteur optique
    • Pour graver un disque et le lancer, il faut modifier la console, mais c’est aussi possible via USB. On pourrait tout de même le graver juste pour le ressenti d’un vrai disque
    • Certains estiment qu’il vaudrait mieux utiliser un émulateur de lecteur optique plutôt qu’un disque physique
  • Il existe un projet similaire utilisant QuickJS pour Nintendo Switch : nx.js

    • Ce projet ne prend actuellement en charge que canvas2d, mais en théorie il devrait être possible de créer une couche pour convertir des jeux WebGPU ou WebGL vers la Switch
      En revanche, passer d’un moteur v8/JIT à QuickJS entraînerait une forte baisse de performances
  • Même la PS2 ne peut désormais plus échapper à l’emprise de JavaScript

  • AthenaEnv est le projet successeur d’Enceladus, basé sur Lua, créé par le même développeur
    Il est beaucoup utilisé non seulement pour les jeux, mais aussi pour les applications homebrew ; côté Enceladus, il y a par exemple RETROLauncher et POPSLoader, et côté Athena, OSD-XMB

  • Je me suis dit qu’il serait peut-être possible de créer un navigateur web pour PS2 afin d’ouvrir les jeux comme des sites web

    • Mais comme la configuration mémoire minimale de Chrome est de 4 Go, il faudrait la réduire à un cent-vingt-huitième pour l’adapter aux 32 Mo de RAM de la PS2
  • C’est exactement le genre de chose que je cherchais, merci pour ce projet vraiment génial

  • Les gens font vraiment tout leur possible pour éviter d’utiliser .gdscript ou Godot

    • J’aime bien Godot, mais il est impossible de le faire tourner sur PS2
    • En réalité, construire avec Godot puis exporter vers PS2 n’a rien de simple