- Nhờ môi trường mã nguồn mở AthenaEnv, giờ đây có thể chạy mã JavaScript trên PlayStation 2
- Môi trường này tích hợp sẵn engine QuickJS để thông dịch JavaScript và cung cấp API phục vụ phát triển game như render, input, âm thanh, xử lý tệp
- Nhà phát triển có thể viết game chỉ với cấu trúc tệp cơ bản như main.js, athena.ini, athena.elf, và chạy trên trình giả lập PCSX2
- Dự án hoàn chỉnh có thể được đóng gói thành tệp
.iso để phân phối dưới dạng một tệp duy nhất; bài viết cũng giới thiệu quy trình chuyển đổi từ zip sang iso
- Đây là một ví dụ cho thấy sự kết hợp giữa phát triển console retro và công nghệ web, gợi mở khả năng mở rộng của phát triển game dựa trên JavaScript
Tổng quan về dự án AthenaEnv
- AthenaEnv là môi trường chạy JavaScript cho PS2, cung cấp môi trường phát triển xoay quanh API thay vì một game engine truyền thống
- Bên trong, dự án chỉnh sửa và nhúng QuickJS để thông dịch mã JavaScript
- Chương trình native trên PS2 (viết bằng C) được cấu hình để chạy mã JavaScript
- Các API được cung cấp bao gồm render, nạp asset, xử lý input, nhập xuất tệp, phát âm thanh
- Mức trừu tượng tương tự p5.js hoặc Raylib, nên các phần như phát hiện va chạm hay quản lý scene vẫn cần tự triển khai
Quy trình chạy game JavaScript trên PS2
- Việc chạy sử dụng trình giả lập PCSX2, và cần bật tùy chọn “Enable host filesystem” trong phần cài đặt
- Thư mục dự án bao gồm các tệp sau
athena.elf: tệp thực thi Athena
athena.ini: cấu hình như điểm vào (main.js), thiết lập logo khởi động, v.v.
main.js, src/, assets/: mã game và tài nguyên
- Khi chạy
athena.elf trong trình giả lập, game sẽ khởi động; sau khi sửa mã JavaScript, chỉ cần reset là có thể áp dụng ngay
Quy trình tạo tệp .iso
- Bài viết giải thích cách gói dự án thành một ảnh ISO duy nhất để phân phối
- Tệp bắt buộc:
athena.elf, athena.ini, main.js, src/, ATHA_000.01, SYSTEM.CNF
- Chọn toàn bộ tệp, nén thành zip, sau đó dùng trang mconverter.eu để chuyển sang iso
- Sau khi chuyển đổi, có thể chạy mà không cần bật “Enable host filesystem”
- Để tự động hóa việc chuyển đổi, bài viết giới thiệu công cụ CLI GENISO viết bằng Python (https://github.com/scottvr/GENISO)
- Có thể chuyển zip sang iso mà không cần phụ thuộc bên ngoài
Ví dụ Hello World
- Ví dụ cơ bản triển khai nạp phông chữ và hình ảnh, xây dựng game loop, animation sprite, xử lý input, render văn bản
- Sử dụng các module tích hợp sẵn của Athena như
Screen, Font, Image, Pads
- Chạy vòng lặp theo từng frame bằng phương thức
Screen.display()
- Phát hiện input từ tay cầm bằng
Pads.get(0)
- Điều khiển animation theo từng frame bằng các thuộc tính của sprite như
startx, endx
- In FPS hoặc văn bản bằng
font.print()
- Việc lật sprite được thực hiện bằng cách đặt giá trị âm cho width, và cần tính offset để bù lại vị trí
Hỗ trợ 3D và phát triển trong tương lai
- Athena hỗ trợ cả 2D lẫn 3D, nhưng phiên bản v4 tập trung vào 3D hiện đang được phát triển
- Hiện tại phần lớn vẫn là các ví dụ thiên về 2D, bên cạnh một số demo 3D
- Mã nguồn và tài liệu hỗ trợ được cung cấp qua kho GitHub chính thức và cộng đồng Discord
Kết luận
- AthenaEnv là một môi trường đột phá cho phép tạo game PS2 chỉ bằng JavaScript
- Nó giúp cả các lập trình viên web cũng có thể tiếp cận phát triển game cho console retro, đồng thời
cho thấy tính mở rộng và khả năng tương thích của hệ sinh thái JavaScript
1 bình luận
Ý kiến trên Hacker News
Có cảm giác các dự án do Fabrice Bellard tạo ra thực sự có ảnh hưởng rất rộng
Thật tuyệt khi nhờ QuickJS mà việc hồi sinh homebrew trên những hệ thống cũ như PS2 trở nên khả thi thông qua AthenaEnv
Ở đâu đó trong chuỗi phụ thuộc của vô số dự án FOSS đều có mã của ông ấy
Thấy tác giả nhắc đến sự bất tiện khi dùng website chuyển ZIP sang ISO, tôi đã tự làm một script Python đa nền tảng không có phụ thuộc bên ngoài
Có thể xem tại ZIP2ISO.py
Điều gây ấn tượng là nó được “vibe-code” bằng Gemini3 Pro mà không cần đọc đặc tả ISO9660
AthenaEnv khá thú vị. Có vẻ nó dùng QuickJS làm trình thông dịch JS và bọc các thư viện hệ thống native của PS2
Tôi tò mò liệu có dự án tương tự nào để phát hành game JS Canvas(WebGPU/WebGL) trên các máy console hiện đại (Switch/2, PS5, Xbox) hay không
SDK của console đều bị ràng buộc bởi NDA nên gần như không có thông tin công khai, và phần lớn game dùng Unreal hoặc Unity
Trên PC hoặc di động thì tương đối đơn giản hơn vì có thể chạy dễ dàng bằng Electron hoặc WebView
Applet trình duyệt WebKit của Switch bị vô hiệu hóa JIT, nên chỉ dùng cho các mục đích hạn chế như e-manual
Tôi thắc mắc nếu muốn chạy trên console thật thì có cần ghi ISO ra đĩa hay không
Một dự án tương tự dùng QuickJS là nx.js dành cho Nintendo Switch
Tuy vậy nếu đổi từ engine v8/JIT sang QuickJS thì hiệu năng sẽ giảm đáng kể
Giờ thì ngay cả PS2 cũng không thể thoát khỏi bàn tay của JavaScript
AthenaEnv là dự án kế thừa của Enceladus dùng Lua, cũng do cùng nhà phát triển tạo ra
Nó được dùng nhiều không chỉ cho game mà cả ứng dụng homebrew; ở Enceladus có các ví dụ như RETROLauncher và POPSLoader, còn ở Athena thì có OSD-XMB
Tôi tự hỏi liệu có thể làm một trình duyệt web cho PS2 rồi mở game dưới dạng website hay không
Tôi đã tìm thứ như thế này, đúng là một dự án rất ngầu, cảm ơn
Người ta làm đủ mọi cách để không phải dùng .gdscript hay Godot