Show HN: A working Nintendo in ~1GB of Qwen weights
nesformer, NES CPU·RAM·ROM을 Qwen 가중치로 실행…화면 처리는 호스트가 맡아
nesformer는 학습 없이 계산한 Qwen3.5 가중치로 NES의 6502 CPU와 2KB RAM, 최대 32KB 프로그램 ROM을 실행합니다. 화면 렌더링과 컨트롤러 처리는 호스트 프로그램이 맡고 지원 카트리지는 NROM으로 제한됩니다. 프로젝트가 제시한 테스트에서는 일부 게임 기록과 저장 프레임이 기준 에뮬레이터와 일치했지만 실행 속도는 실제 NES보다 150~290배 느립니다.
- 주제
본문
NES 에뮬레이션 프로젝트 nesformer는 6502 CPU와 작업 RAM, 카트리지 프로그램 ROM을 학습 없이 계산한 Qwen3.5 가중치로 실행합니다. 화면 렌더링과 컨트롤러 입력 처리는 호스트 프로그램이 맡습니다.
모델은 게임 코드가 CPU에서 실행되는 과정을 토큰으로 한 단계씩 출력합니다. 이때 Gated DeltaNet의 상태 행렬을 기계의 메모리처럼 써서 레지스터와 RAM, ROM을 저장합니다. 컴파일러가 이 회로에 맞춰 가중치를 계산하므로 일반적인 언어 모델 학습 과정은 거치지 않습니다.
bf16 기준 체크포인트는 4억6,660만 파라미터, 933MB입니다. 그중 값이 0이 아닌 파라미터는 930만 개라 가중치 압축 파일은 3.3MB입니다. 제목의 약 1GB는 압축 파일 크기가 아니라 비압축 가중치 크기를 가리킵니다.
모델은 6502 코어와 2KB 작업 RAM, 최대 32KB 프로그램 ROM을 맡습니다. 호스트 프로그램은 화면 렌더링과 컨트롤러 처리, 입력 응답과 인터럽트 시점을 담당합니다. ROM은 명령어를 가져올 때와 데이터를 읽을 때 쓰도록 모델 상태에 각각 저장합니다.
프로젝트 작성자는 기준 6502 에뮬레이터와 비교해 nestest의 공식 명령어 테스트와 두 게임의 실행 기록이 일치했고, Thwaite와 Full Game의 저장 프레임도 모두 일치했다고 보고했습니다. 이 결과는 문서에 제시된 테스트 범위에 해당합니다. 지원 대상은 NROM(mapper 0) 카트리지이며, 비공식 명령어와 RAM에서 실행하는 코드, IRQ는 지원하지 않습니다. PPU의 일부 효과는 근사 처리하고 소리는 구현하지 않았습니다.
속도도 실제 기기와 차이가 큽니다. 프로젝트를 구축한 컴퓨터의 CPU 한 코어에서 기본 엔진은 초당 약 1,650토큰을 처리했고, 작성자는 실제 NES 실행에 초당 약 70만 토큰이 필요하다고 계산했습니다. 대기 루프를 건너뛰는 최적화를 적용해도 nesformer는 실제 콘솔보다 150~290배 느립니다.
자료: GitHub / 정리·해설: Trawling
참고 자료
- feat: initial release of nesformer · dbreunig/nesformer@26b1b05 · GitHub — https://github.com/dbreunig/nesformer/commit/26b1b053f826154498926892815574580dc45c24