9 puan yazan GN⁺ 2025-11-22 | 1 yorum | WhatsApp'ta paylaş
  • AthenaEnv adlı açık kaynaklı ortam sayesinde PlayStation 2 üzerinde JavaScript kodu çalıştırmak mümkün hale geliyor
  • Bu ortam, QuickJS motorunu gömülü olarak kullanarak JavaScript'i yorumluyor ve render, girdi, ses, dosya işleme gibi oyun geliştirme API'leri sunuyor
  • Geliştiriciler, yalnızca main.js, athena.ini, athena.elf gibi temel dosya yapısıyla oyun yazabiliyor ve bunu PCSX2 emülatöründe çalıştırabiliyor
  • Tamamlanan proje, .iso dosyası olarak paketlenip tek dosya halinde dağıtılabiliyor; bunun için zip→iso dönüştürme süreci de anlatılıyor
  • Bu, retro konsol geliştirme ile web teknolojilerinin birleşimini gösteren bir örnek ve JavaScript tabanlı oyun geliştirmenin genişleme potansiyeline işaret ediyor

AthenaEnv proje özeti

  • AthenaEnv, PS2 için bir JavaScript çalıştırma ortamı olup geleneksel bir oyun motorundan ziyade API merkezli bir geliştirme ortamı sunuyor
    • İçeride QuickJS değiştirilip gömülü hale getirilerek JavaScript kodu yorumlanıyor
    • PS2 yerel programı (C ile yazılmış), JavaScript kodunu çalıştıracak şekilde yapılandırılmış
  • Sunulan API'ler arasında render, varlık yükleme, girdi işleme, dosya giriş/çıkışı, ses oynatma bulunuyor
    • Soyutlama seviyesi p5.js ya da Raylib düzeyinde; çarpışma algılama veya sahne yönetimi gibi kısımların ayrıca uygulanması gerekiyor

PS2'de JavaScript oyunu çalıştırma süreci

  • Çalıştırmak için PCSX2 emülatörü kullanılıyor ve ayarlarda “Enable host filesystem” seçeneğinin etkinleştirilmesi gerekiyor
  • Proje klasöründe şu dosyalar yer alıyor
    • athena.elf: Athena çalıştırılabilir dosyası
    • athena.ini: giriş noktası (main.js) ve açılış logosu ayarı gibi yapılandırmaları içerir
    • main.js, src/, assets/: oyun kodu ve kaynaklar
  • Emülatörde athena.elf çalıştırıldığında oyun başlıyor; JavaScript kodu değiştirildikten sonra reset atarak anında yansıtmak mümkün

.iso dosyası oluşturma süreci

  • Dağıtım için projenin tek bir ISO imajı halinde paketlenme yöntemi anlatılıyor
    • Gerekli dosyalar: athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
    • Tüm dosyalar seçilip zip olarak sıkıştırıldıktan sonra mconverter.eu sitesi kullanılarak iso'ya dönüştürülüyor
    • Dönüştürmeden sonra “Enable host filesystem” ayarı olmadan da çalıştırmak mümkün
  • Dönüştürmeyi otomatikleştirmek için Python tabanlı CLI aracı GENISO (https://github.com/scottvr/GENISO) tanıtılıyor
    • Harici bağımlılık olmadan zip'i iso'ya dönüştürebiliyor

Hello World örneği

  • Temel örnekte font ve görsel yükleme, oyun döngüsü kurma, sprite animasyonu, girdi işleme, metin render etme uygulanıyor
    • Athena'nın yerleşik Screen, Font, Image, Pads modülleri kullanılıyor
    • Screen.display() metodu ile kare bazlı döngü çalıştırılıyor
    • Pads.get(0) ile kontrolcü girdisi algılanıyor
    • Sprite'ın startx, endx gibi özellikleriyle kare bazlı animasyon kontrol ediliyor
    • font.print() ile FPS veya metin çıktısı veriliyor
  • Sprite'ı ters çevirmek, width değerine negatif bir sayı vererek yapılıyor; konumu düzeltmek için offset hesabı gerekiyor

3D desteği ve sonraki geliştirmeler

Sonuç

  • AthenaEnv, yalnızca JavaScript ile PS2 oyunu üretmeyi mümkün kılan yenilikçi bir ortam
  • Web geliştiricilerinin de retro konsollar için oyun geliştirmeye erişebilmesini sağlıyor ve
    JavaScript ekosisteminin genişleyebilirliğini ve uyumluluğunu gösteren bir örnek sunuyor

1 yorum

 
GN⁺ 2025-11-22
Hacker News yorumları
  • Fabrice Bellard'ın yaptığı projelerin gerçekten çok geniş bir etkisi var gibi görünüyor
    QuickJS sayesinde PS2 gibi eski sistemlerde bile AthenaEnv üzerinden homebrew'un yeniden canlanabilmesi harika

    • Photoshop becerim neredeyse hiç olmadığı için yapamadım ama xkcd 2347 memesine “Fabrice Bellard'ın yarı uykulu halde sadece kanıtlamak için implement ettiği şey” yazmak isterdim
      Birçok FOSS projesinin bağımlılık zincirinin bir yerinde onun kodu var
  • Yazarın ZIP'i ISO'ya dönüştüren bir web sitesini kullanmanın zahmetinden bahsettiğini görünce, dış bağımlılığı olmayan çapraz platform bir Python betiği yazdım
    Buna ZIP2ISO.py üzerinden bakabilirsiniz
    ISO9660 spesifikasyonunu okumadan bunu Gemini3 Pro ile “vibe-coded” yapmış olması dikkat çekiciydi

    • Aynı iş muhtemelen mkisofs ile de yapılabilir
  • AthenaEnv ilginç görünüyor. QuickJS'yi JS yorumlayıcısı olarak kullanıp PS2'nin yerel sistem kütüphanelerini saran bir yapı gibi duruyor
    Modern konsollarda da (Switch/2, PS5, Xbox) JS Canvas(WebGPU/WebGL) oyunlarını dağıtabileceğiniz benzer bir proje olup olmadığını merak ediyorum
    Konsol SDK'ları NDA altında olduğu için kamuya açık bilgi neredeyse yok ve çoğu oyun Unreal ya da Unity kullanıyor
    PC veya mobilde ise Electron ya da WebView ile çalıştırmak kolay olduğu için iş görece daha basit

    • JS ile yapılmış Cross Code oyununun konsollara port edildiği bir örnek var. Süreç bu blog yazısında detaylandırılmış
    • Nintendo 3DS ve Wii U SDK'larında web teknolojileri tabanlı Electron benzeri bir framework vardı ama Switch'te kaldırıldığını hatırlıyorum
      Switch'in WebKit tarayıcı applet'inde JIT devre dışı, bu yüzden yalnızca e-manuel gibi sınırlı amaçlar için kullanılıyor
  • Gerçek bir konsolda çalıştırmak için ISO'yu diske yazdırmak gerekip gerekmediğini merak ettim

    • FreeDVDBoot ile birleştirilirse mümkün olabilir
    • Hafıza kartındaki FreeMcBoot + USB flash sürücü kombinasyonu popüler bir yöntem. Optik sürücü aşınmasını da azaltabilir
    • Diske yazıp çalıştırmak için konsolu hacklemek gerekir ama USB üzerinden de mümkün. Yalnızca gerçek disk hissi için diske yazdırmak isteyebilirsiniz
    • Fiziksel disk yerine optik sürücü emülasyonu kullanmanın daha iyi olmayacağını söyleyenler de var
  • QuickJS kullanan benzer bir proje olarak Nintendo Switch için nx.js var

    • Bu proje şu anda yalnızca canvas2d desteği sunuyor ama teorik olarak WebGPU veya WebGL oyunlarını Switch'e dönüştüren bir katman yapılabilir gibi görünüyor
      Ancak v8/JIT motorundan QuickJS'ye geçilirse performans kaybı büyük olur
  • Artık PS2 bile JavaScript'in pençesinden kaçamıyor

  • AthenaEnv, aynı geliştiricinin yaptığı Lua tabanlı Enceladus'un devamı niteliğinde bir proje
    Yalnızca oyunlarda değil, homebrew uygulamalarında da çok kullanılıyor; Enceladus tarafında RETROLauncher ve POPSLoader, Athena tarafında ise OSD-XMB örnek verilebilir

  • PS2 için bir web tarayıcısı yapıp oyunu bir web sitesi olarak açmak da mümkün olmaz mı diye düşündüm

    • Ama Chrome'un minimum bellek gereksinimi 4GB; bunu PS2'nin 32MB RAM'ine sığdırmak için 128'de 1 ölçeğine indirmek gerekir
  • Böyle bir şey arıyordum, gerçekten harika bir proje, teşekkürler

  • İnsanlar .gdscript ya da Godot kullanmamak için akla gelmedik şeyler yapıyor

    • Godot'u seviyorum ama PS2'de çalışması mümkün değil
    • Aslında Godot ile derleyip PS2'ye dışa aktarmak basit bir iş değil