9 Punkte von GN⁺ 2025-11-22 | 1 Kommentare | Auf WhatsApp teilen
  • Mit der Open-Source-Umgebung AthenaEnv ist es möglich, JavaScript-Code auf der PlayStation 2 auszuführen
  • Die Umgebung enthält die QuickJS-Engine integriert, interpretiert JavaScript und stellt APIs für die Spieleentwicklung bereit, darunter Rendering, Eingaben, Sound und Dateiverarbeitung
  • Entwickler können Spiele allein mit einer grundlegenden Dateistruktur wie main.js, athena.ini, athena.elf erstellen und sie im PCSX2-Emulator ausführen
  • Fertige Projekte lassen sich als .iso-Datei paketieren und als einzelne Datei verteilen; dafür wird ein Verfahren zur Umwandlung von zip in iso vorgestellt
  • Das Projekt zeigt eine Verbindung von Retro-Konsolenentwicklung und Web-Technologien und deutet auf das Erweiterungspotenzial JavaScript-basierter Spieleentwicklung hin

Überblick über das Projekt AthenaEnv

  • AthenaEnv ist eine JavaScript-Laufzeitumgebung für PS2, die statt einer traditionellen Game Engine eine API-zentrierte Entwicklungsumgebung bereitstellt
    • Intern wird QuickJS angepasst und eingebettet, um JavaScript-Code zu interpretieren
    • Ein natives PS2-Programm (in C geschrieben) ist so aufgebaut, dass es JavaScript-Code ausführt
  • Die bereitgestellten APIs umfassen Rendering, Asset-Laden, Eingabeverarbeitung, Datei-Ein/Ausgabe und Soundwiedergabe
    • Das Abstraktionsniveau liegt ungefähr bei p5.js oder Raylib; Dinge wie Kollisionserkennung oder Szenenverwaltung müssen selbst implementiert werden

Ablauf zum Ausführen von JavaScript-Spielen auf der PS2

  • Zum Ausführen wird der PCSX2-Emulator verwendet; in den Einstellungen muss die Option „Enable host filesystem“ aktiviert werden
  • Der Projektordner enthält die folgenden Dateien
    • athena.elf: ausführbare Athena-Datei
    • athena.ini: Konfiguration für Einstiegspunkt (main.js), Boot-Logo-Einstellungen usw.
    • main.js, src/, assets/: Spielcode und Ressourcen
  • Wenn im Emulator athena.elf gestartet wird, läuft das Spiel; Änderungen am JavaScript-Code lassen sich nach einem Reset sofort übernehmen

Vorgehen zum Erstellen einer .iso-Datei

  • Es wird erklärt, wie sich ein Projekt zur Distribution in ein einzelnes ISO-Image bündeln lässt
    • Erforderliche Dateien: athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
    • Alle Dateien werden ausgewählt, als zip komprimiert und anschließend über die Website mconverter.eu in iso umgewandelt
    • Nach der Umwandlung ist die Ausführung auch ohne die Einstellung „Enable host filesystem“ möglich
  • Zur Automatisierung der Umwandlung wird das Python-basierte CLI-Tool GENISO (https://github.com/scottvr/GENISO) vorgestellt
    • Es kann zip ohne externe Abhängigkeiten in iso umwandeln

Hello-World-Beispiel

  • Das Grundbeispiel implementiert Laden von Schriftarten und Bildern, Aufbau einer Game Loop, Sprite-Animation, Eingabeverarbeitung und Text-Rendering
    • Nutzung eingebauter Athena-Module wie Screen, Font, Image, Pads
    • Ausführung einer framebasierten Schleife über die Methode Screen.display()
    • Erkennung von Controller-Eingaben mit Pads.get(0)
    • Steuerung frameweiser Animation über Eigenschaften des Sprites wie startx, endx usw.
    • Ausgabe von FPS oder Text mit font.print()
  • Das Spiegeln von Sprites wird durch einen negativen Wert für die width umgesetzt; zur Positionskorrektur ist eine Offset-Berechnung nötig

3D-Unterstützung und weitere Entwicklung

Fazit

  • AthenaEnv ist eine innovative Umgebung, mit der sich PS2-Spiele allein in JavaScript erstellen lassen
  • Sie ermöglicht auch Web-Entwicklern den Zugang zur Spieleentwicklung für Retro-Konsolen und
    zeigt ein Beispiel für die Erweiterbarkeit und Kompatibilität des JavaScript-Ökosystems

1 Kommentare

 
GN⁺ 2025-11-22
Hacker-News-Kommentare
  • Es wirkt, als hätten die Projekte von Fabrice Bellard wirklich weitreichenden Einfluss.
    Dank QuickJS ist es großartig, dass auf alten Systemen wie der PS2 über AthenaEnv sogar ein Homebrew-Revival möglich wird.

    • Ich habe es nicht gemacht, weil meine Photoshop-Kenntnisse quasi nicht vorhanden sind, aber ich wollte in das Meme aus xkcd 2347 schreiben: „von Fabrice Bellard im Halbschlaf einfach implementiert, nur um zu beweisen, dass es geht“.
      Irgendwo in der Abhängigkeitskette unzähliger FOSS-Projekte steckt sein Code.
  • Nachdem der Autor den Aufwand erwähnt hatte, eine Website zum Umwandeln von ZIP in ISO zu benutzen, habe ich selbst ein plattformübergreifendes Python-Skript ohne externe Abhängigkeiten geschrieben.
    Zu finden unter ZIP2ISO.py.
    Beeindruckend war, dass es mit Gemini3 Pro „vibe-coded“ wurde, ohne die ISO9660-Spezifikation zu lesen.

    • Mit mkisofs müsste sich dieselbe Aufgabe wohl ebenfalls erledigen lassen.
  • AthenaEnv ist interessant. Es scheint so aufgebaut zu sein, dass QuickJS als JS-Interpreter verwendet wird und die nativen Systembibliotheken der PS2 gekapselt werden.
    Ich frage mich, ob es auch für moderne Konsolen (Switch/2, PS5, Xbox) ähnliche Projekte gibt, mit denen sich JS-Canvas-(WebGPU/WebGL)-Spiele verteilen lassen.
    Die Konsolen-SDKs stehen unter NDA, daher gibt es kaum öffentliche Informationen, und die meisten Spiele nutzen Unreal oder Unity.
    Auf PC oder Mobilgeräten ist es vergleichsweise einfach, weil man sie leicht mit Electron oder WebView ausführen kann.

    • Es gibt den Fall, dass das in JS entwickelte Spiel Cross Code auf Konsolen portiert wurde. Der genaue Ablauf ist in diesem Blogbeitrag beschrieben.
    • Im SDK für Nintendo 3DS und Wii U gab es meiner Erinnerung nach ein Electron-ähnliches Framework auf Basis von Webtechnologien, aber auf der Switch wurde das eingestellt.
      Das WebKit-Browser-Applet der Switch hat JIT deaktiviert und wird daher nur für eingeschränkte Zwecke wie das E-Manual verwendet.
  • Ich habe mich gefragt, ob man zum Ausführen auf einer echten Konsole die ISO auf eine Disc brennen muss.

    • In Kombination mit FreeDVDBoot scheint das möglich zu sein.
    • Die Kombination aus FreeMcBoot auf der Memory Card und einem USB-Flash-Laufwerk ist eine beliebte Methode. Damit lässt sich auch der Verschleiß des optischen Laufwerks reduzieren.
    • Um es von einer gebrannten Disc zu starten, muss die Konsole gehackt werden, aber per USB geht es ebenfalls. Man könnte es trotzdem brennen, einfach für das echte Disc-Gefühl.
    • Manche meinen auch, es wäre besser, statt einer physischen Disc einen Mod für das optische Laufwerk zu verwenden.
  • Ein ähnliches Projekt mit QuickJS ist nx.js für Nintendo Switch.

    • Dieses Projekt unterstützt derzeit nur canvas2d, aber theoretisch ließe sich wohl eine Schicht bauen, die WebGPU- oder WebGL-Spiele auf die Switch bringt.
      Allerdings würde der Wechsel von einer v8-/JIT-Engine zu QuickJS große Leistungseinbußen verursachen.
  • Jetzt kann sich sogar die PS2 dem Griff von JavaScript nicht mehr entziehen.

  • AthenaEnv ist ein Nachfolgeprojekt von Enceladus, das vom selben Entwickler auf Lua-Basis erstellt wurde.
    Es wird nicht nur für Spiele, sondern auch häufig für Homebrew-Apps genutzt; Beispiele sind bei Enceladus RETROLauncher und POPSLoader, bei Athena etwa OSD-XMB.

  • Ich dachte, man könnte vielleicht auch einen Webbrowser für die PS2 bauen und Spiele dann über Websites starten.

    • Aber da Chrome mindestens 4 GB Speicher braucht, müsste man es für die 32 MB RAM der PS2 auf ein Hundertachtundzwanzigstel herunterskalieren.
  • Genau nach so etwas habe ich gesucht, wirklich ein großartiges Projekt, danke.

  • Die Leute tun wirklich alles, nur um nicht .gdscript oder Godot zu benutzen.

    • Ich mag Godot, aber auf der PS2 läuft es nicht.
    • Tatsächlich ist es alles andere als trivial, mit Godot zu bauen und dann für die PS2 zu exportieren.