# 자바스크립트로 PS2 게임을 만들 수 있다

> Clean Markdown view of GeekNews topic #24539. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=24539](https://news.hada.io/topic?id=24539)
- GeekNews Markdown: [https://news.hada.io/topic/24539.md](https://news.hada.io/topic/24539.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-11-22T22:33:07+09:00
- Updated: 2025-11-22T22:33:07+09:00
- Original source: [jslegenddev.substack.com](https://jslegenddev.substack.com/p/you-can-now-make-ps2-games-in-javascript)
- Points: 9
- Comments: 1

## Summary

**AthenaEnv**는 **PlayStation 2에서 자바스크립트를 실행**할 수 있게 만든 오픈소스 환경으로, 웹 개발자가 익숙한 **QuickJS 엔진과 API 기반 구조**를 통해 콘솔 게임을 직접 빌드할 수 있게 합니다. 렌더링·입력·사운드 등 핵심 기능을 JS로 제어하며, 완성된 프로젝트는 **.iso 이미지로 패키징**해 실제 PS2나 **PCSX2 에뮬레이터**에서 구동할 수 있습니다. 오래된 하드웨어 위에 현대적 스크립트 언어를 얹는 이 시도는, **웹 기술의 경계를 실험하는 개발자 문화**가 얼마나 창의적으로 진화하고 있는지를 잘 보여줍니다. 개인적으로는 “레트로 콘솔을 위한 Node.js 감성”이라는 표현이 가장 잘 어울리는 프로젝트 같습니다.

## Topic Body

- **AthenaEnv**라는 오픈소스 환경을 통해 **PlayStation 2에서 자바스크립트 코드 실행**이 가능해짐  
- 이 환경은 **QuickJS 엔진을 내장**해 자바스크립트를 해석하고, 렌더링·입력·사운드·파일 처리 등 **게임 개발용 API**를 제공  
- 개발자는 **main.js, athena.ini, athena.elf** 등 기본 파일 구조만으로 게임을 작성하고, **PCSX2 에뮬레이터**에서 실행 가능  
- 완성된 프로젝트는 **.iso 파일로 패키징**해 단일 파일 형태로 배포할 수 있으며, 이를 위해 zip→iso 변환 절차가 소개됨  
- **레트로 콘솔 개발과 웹 기술의 결합**을 보여주는 사례로, 자바스크립트 기반 게임 개발의 확장 가능성을 시사  

---
### AthenaEnv 프로젝트 개요
- AthenaEnv는 **PS2용 자바스크립트 실행 환경**으로, 전통적인 게임 엔진이 아닌 **API 중심의 개발 환경** 제공  
  - 내부적으로 **QuickJS**를 수정·내장해 자바스크립트 코드를 해석  
  - PS2 네이티브 프로그램(C로 작성)이 자바스크립트 코드를 실행하도록 구성  
- 제공 API는 **렌더링, 에셋 로딩, 입력 처리, 파일 입출력, 사운드 재생** 등을 포함  
  - **p5.js**나 **Raylib** 수준의 추상화로, 충돌 감지나 씬 관리 등은 직접 구현 필요  

### PS2에서 자바스크립트 게임 실행 과정
- 실행에는 **PCSX2 에뮬레이터**가 사용되며, 설정에서 “Enable host filesystem” 옵션을 활성화해야 함  
- 프로젝트 폴더에는 다음 파일이 포함됨  
  - `athena.elf`: Athena 실행 파일  
  - `athena.ini`: 진입점(main.js) 및 부트 로고 설정 등 구성  
  - `main.js`, `src/`, `assets/`: 게임 코드 및 리소스  
- 에뮬레이터에서 `athena.elf`를 실행하면 게임이 구동되며, **자바스크립트 코드 수정 후 리셋으로 즉시 반영** 가능  

### .iso 파일 생성 절차
- 배포를 위해 프로젝트를 **단일 ISO 이미지**로 묶는 방법이 설명됨  
  - 필수 파일: `athena.elf`, `athena.ini`, `main.js`, `src/`, `ATHA_000.01`, `SYSTEM.CNF`  
  - 모든 파일을 선택해 zip으로 압축 후, **mconverter.eu** 사이트를 이용해 iso로 변환  
  - 변환 후에는 “Enable host filesystem” 설정 없이도 실행 가능  
- 변환 자동화를 위해 **Python 기반 CLI 도구 GENISO**(https://github.com/scottvr/GENISO)가 소개됨  
  - 외부 의존성 없이 zip을 iso로 변환 가능  

### Hello World 예제
- 기본 예제에서는 **폰트와 이미지 로드**, **게임 루프 구성**, **스프라이트 애니메이션**, **입력 처리**, **텍스트 렌더링**을 구현  
  - `Screen`, `Font`, `Image`, `Pads` 등 Athena 내장 모듈 사용  
  - `Screen.display()` 메서드로 프레임 단위 루프 실행  
  - `Pads.get(0)`으로 컨트롤러 입력 감지  
  - 스프라이트의 `startx`, `endx` 등 속성으로 프레임 단위 애니메이션 제어  
  - `font.print()`로 FPS나 텍스트 출력  
- 스프라이트 반전은 **width에 음수값을 부여**해 구현하며, 위치 보정을 위해 오프셋 계산 필요  

### 3D 지원 및 향후 개발
- Athena는 **2D와 3D 모두 지원**하나, **3D 중심의 v4 버전이 개발 중**  
- 현재는 2D 중심 예제가 주를 이루며, 일부 3D 데모가 존재  
- 공식 **GitHub 저장소와 Discord 커뮤니티**를 통해 코드와 지원 자료 제공  
  - Sonic Infinite Runner PS2 포트: https://github.com/DevWill-hub/Sonic-Infinite-Runner-PS2  
  - AthenaEnv: https://github.com/DanielSant0s/AthenaEnv  
  - Athena 템플릿: https://github.com/JSLegendDev/Athena-PS2-Template  

### 결론
- AthenaEnv는 **자바스크립트만으로 PS2 게임을 제작할 수 있는 혁신적 환경**  
- 웹 개발자도 **레트로 콘솔용 게임 개발**에 접근할 수 있게 하며,  
  **자바스크립트 생태계의 확장성과 호환성**을 보여주는 사례임

## Comments



### Comment 46677

- Author: neo
- Created: 2025-11-22T22:33:08+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=46006082) 
- Fabrice Bellard가 만든 프로젝트들이 정말 **광범위한 영향력**을 가지는 것 같음  
  QuickJS 덕분에 PS2 같은 오래된 시스템에서도 AthenaEnv를 통해 홈브류 부활이 가능해진 게 멋짐
  - 포토샵 실력이 거의 없어서 못 했지만, [xkcd 2347](https://xkcd.com/2347/) 밈에 “Fabrice Bellard가 반쯤 잠든 상태에서 그냥 증명하려고 구현한 것”이라고 써넣고 싶었음  
    수많은 **FOSS 프로젝트**의 의존성 체인 어딘가에는 그의 코드가 들어 있음  

- 글쓴이가 ZIP을 ISO로 변환하는 웹사이트 사용의 번거로움을 언급한 걸 보고, 외부 의존성 없는 **크로스플랫폼 Python 스크립트**를 직접 만들었음  
  [ZIP2ISO.py](https://github.com/scottvr/GENISO/blob/main/ZIP2ISO.py)에서 확인 가능함  
  ISO9660 스펙을 읽지 않고 Gemini3 Pro로 “vibe-coded”한 게 인상적이었음
  - mkisofs로도 같은 작업이 가능할 것 같음  

- AthenaEnv가 흥미로움. QuickJS를 JS 인터프리터로 쓰고 PS2의 **네이티브 시스템 라이브러리**를 감싸는 구조로 보임  
  현대 콘솔(Switch/2, PS5, Xbox)에서도 JS Canvas(WebGPU/WebGL) 게임을 배포할 수 있는 비슷한 프로젝트가 있을지 궁금함  
  콘솔 SDK는 NDA라 공개 정보가 거의 없고, 대부분의 게임은 Unreal이나 Unity를 사용함  
  PC나 모바일은 Electron이나 WebView로 쉽게 실행할 수 있어서 상대적으로 단순함
  - JS로 만든 게임 Cross Code가 콘솔로 포팅된 사례가 있음. 자세한 과정은 [이 블로그 글](https://www.radicalfishgames.com/?p=6892)에 정리되어 있음  
  - Nintendo 3DS와 Wii U SDK에는 웹 기술 기반의 **Electron 유사 프레임워크**가 있었지만 Switch에서는 중단된 것으로 기억함  
    Switch의 WebKit 브라우저 앱릿은 JIT이 비활성화되어 있어서 e-매뉴얼 같은 제한된 용도로만 쓰임  

- 진짜 콘솔에서 실행하려면 ISO를 디스크로 구워야 하는지 궁금했음
  - [FreeDVDBoot](https://github.com/CTurt/FreeDVDBoot)와 결합하면 가능할 것 같음  
  - 메모리카드의 FreeMcBoot + USB 플래시 드라이브 조합이 인기 있는 방법임. **광학 드라이브 마모**도 줄일 수 있음  
  - 디스크를 구워 실행하려면 콘솔 해킹이 필요하지만, USB로도 가능함. 단지 **진짜 디스크 느낌**을 위해 구워볼 수도 있음  
  - 물리 디스크 대신 광학 드라이브 모드를 쓰는 게 낫지 않겠냐는 의견도 있음  

- QuickJS를 이용한 비슷한 프로젝트로 Nintendo Switch용 [nx.js](https://github.com/TooTallNate/nx.js)가 있음  
  - 이 프로젝트는 현재 **canvas2d만 지원**하지만, 이론적으로 WebGPU나 WebGL 게임을 Switch로 변환하는 레이어를 만들 수 있을 것 같음  
    다만 v8/JIT 엔진에서 QuickJS로 바꾸면 성능 저하가 클 것임  

- 이제 PS2조차 **JavaScript의 손아귀**에서 벗어날 수 없게 됨  

- AthenaEnv는 같은 개발자가 만든 Lua 기반 Enceladus의 후속 프로젝트임  
  게임뿐 아니라 홈브류 앱에도 많이 쓰이며, Enceladus에서는 RETROLauncher와 POPSLoader, Athena에서는 OSD-XMB 같은 예시가 있음  

- PS2용으로 **웹 브라우저를 만들어** 게임을 웹사이트로 여는 방식도 가능하지 않을까 생각함  
  - 하지만 Chrome의 최소 메모리 요구사항이 4GB라, PS2의 32MB RAM에 맞추려면 **128분의 1로 축소**해야 함  

- 이런 걸 찾고 있었는데 정말 멋진 프로젝트라 고마움  

- 사람들은 .gdscript나 Godot을 쓰지 않으려고 별짓을 다 함  
  - Godot을 좋아하지만 PS2에서는 실행이 불가능함  
  - 사실 Godot으로 빌드해서 PS2로 내보내는 건 단순한 일이 아님
