# 슈퍼 마리오 64의 PS1 포트 버전

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25007](https://news.hada.io/topic?id=25007)
- GeekNews Markdown: [https://news.hada.io/topic/25007.md](https://news.hada.io/topic/25007.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-12-12T04:32:45+09:00
- Updated: 2025-12-12T04:32:45+09:00
- Original source: [github.com/malucard](https://github.com/malucard/sm64-psx)
- Points: 1
- Comments: 1

## Topic Body

- 닌텐도 64용 **슈퍼 마리오 64 디컴파일 프로젝트**를 기반으로, **PlayStation(PSX)** 전용으로 이식된 버전  
- **DualShock 진동 지원**, **고정소수점 수학 변환**, **렌더링 최적화** 등 PS1 하드웨어에 맞춘 대규모 수정 포함  
- **그래픽 전처리기**, **텍스처 압축**, **애니메이션 메모리 최적화** 등 성능 개선 기능 추가  
- 일부 **카메라 제어 미완성**, **충돌 및 크래시 문제**, **음악 빌드 불가** 등 다수의 알려진 버그 존재  
- 고전 게임의 **플랫폼 간 이식 실험**으로, 레거시 콘솔 개발과 리버스 엔지니어링 연구에 의미 있는 사례  

---
### 프로젝트 개요
- 이 코드는 **Super Mario 64 (J/U/E/SH)** 전체 디컴파일 버전의 포크로, **PSX와 PC(디버깅용)** 만을 대상으로 함  
  - 닌텐도 64용 빌드는 더 이상 지원하지 않음  
  - 현재는 **미국판(US)** ROM만 빌드 가능  
- 게임 빌드에는 원본 자산이 포함되지 않으며, **정품 ROM에서 자산 추출**이 필요  

### 주요 기능
- **DualShock™ 호환 그래픽** 추가로, 원래의 “Rumble Pak Compatible” 표시를 모방  
- **DualShock 대형 모터용 아날로그 진동 신호**와 **소형 모터용 디지털 신호** 모두 지원  
- PSX용 **저정밀 소프트 플로트 구현**으로 부동소수점 연산 성능 저하 최소화  
- **고정소수점 수학**으로 코드 대체, PSX 표준인 16비트 정수 벡터·행렬 사용  
- **렌더 그래프 워커** 단순화 및 재작성  
- **다각형 분할(최대 2배)** 로 대형 폴리곤 문제 완화  
- **RSP 디스플레이 리스트**를 **JIT 방식**으로 커스텀 포맷으로 변환, 처리 속도 향상  
- **디스플레이 리스트 전처리기**로 불필요 명령 제거 및 메시 최적화  
- **마리오 애니메이션 압축**(580,632 → 190,324바이트) 및 VRAM에 직접 배치  
- **커스텀 프로파일러**와 **4bpp 텍스처 인코더** 추가  
- PSX의 투명도 한계를 고려해 **육각형 그림자**로 대체  
- (예정) **오른쪽 아날로그 스틱 카메라 회전** 및 **Goddard 서브시스템 재작성**  

### 알려진 문제
- **부유하는 나무**, **일부 애니메이션 미작동 또는 크래시**  
- **음악 빌드 불가**, **효과음 누락 또는 이상음**  
- **카메라 제어 미완성**, **특정 레벨 진입 시 크래시**  
- **엔딩 시퀀스 로드 실패**, **라키투 등장 안 함**, **폴 작동 불가**  
- **텍스처 개별 로드로 인한 긴 로딩 시간**, **PSX 한계로 인한 텍스처 왜곡**  
- **그래픽 전처리기 개선 필요**, **일부 텍스처 렌더 오류**, **타이틀 화면 미완성**, **일시정지 메뉴 미작동**  

### 빌드 방법
#### Linux
- `mipsel-none-elf-gcc` 툴체인 설치 후 저장소 클론  
- `baserom.us.z64` 파일을 루트 디렉터리에 배치  
- (선택) `.local` 폴더에 사운드트랙 `.wav` 파일(0~37) 추가  
- `make` 실행 시 ISO 이미지 생성 (`build/us_psx/sm64.us.iso`)  
- 벤치마크 버전(`make BENCH=1`)은 ISO 없이 ELF/EXE만 생성하며, **8MB RAM PSX** 필요  

#### Windows (미검증)
- **MSYS2** 설치 후 `mingw-w64` 패키지 구성  
- `mipsel-none-elf-gcc` 설치 및 `sm64-psx` 저장소 클론  
- `baserom.us.z64` 파일 배치 후 `make` 실행  
- 빌드 결과물은 Linux와 동일한 경로에 생성  

##### 문제 해결
- **gcc 미인식** 시 잘못된 MSYS2 환경 실행 여부 확인  
- **baserom.us.z64 누락** 시 파일 위치 점검  
- **Makefile 미발견** 시 디렉터리 경로 확인  
- **패키지 오류** 시 `pacman -Syu` 및 `pacman -Su`로 업데이트  
- **mipsel gcc 작동 확인**은 `mipsel-none-elf-gcc -v` 명령으로 검증  
- 플랫폼 전환 시 `make -C tools clean`으로 툴 재컴파일 필요  

### 프로젝트 구조
- `actors`: 오브젝트 동작, 지오 레이아웃, 디스플레이 리스트  
- `assets`: 애니메이션 및 데모 데이터  
- `src`: 게임 핵심 C 소스 (오디오, 엔진, 게임, 메뉴, 포트 등)  
- `textures`, `text`, `levels`: 그래픽 및 레벨 데이터  
- `tools`: 빌드 도구  
- `lib`: N64 SDK 코드 포함  

### 기여
- **Pull Request** 환영  
- 주요 변경 전에는 **Issue 등록 후 논의** 권장

## Comments



### Comment 47620

- Author: neo
- Created: 2025-12-12T04:32:46+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=46221925) 
- 이 포트를 좋아한다면, GBA에서 **SM64를 완전히 새로 구현한 프로젝트**도 흥미로울 것 같음  
  [YouTube 영상 보기](https://youtu.be/nS5rj80L-pk)
  - 여기가 HN이니 꼭 언급해야 함. 이 **GBA 포트는 Rust로 작성됨**  
    관련 기사: [The Impossible Port – Super Mario 64 on the Game Boy Advance](https://www.digitec.ch/en/page/the-impossible-port-super-mario-64-on-the-game-boy-advance-33835)
  - 흥미로움. GBA가 **Minecraft 스타일의 라이트 버전**을 감당할 수 있을지 궁금함  
    N64도 꽤 잘 어울릴 것 같고, 언젠가 SummerCart64를 구해서 실험해보고 싶음
  - 혹시 이 프로젝트의 **소스 코드**를 아는 사람 있음? 삭제된 것 같음
  - 멋지긴 하지만 개인적으로 보기엔 좀 힘듦  
    그래도 완성까지 해낸 점은 정말 대단함

- 정말 놀라운 성취임  
  예전에 두 콘솔 모두를 가지고 있었는데, 이 포트를 보니 N64가 1996년 당시 **‘집 안의 SGI’ 감성**을 얼마나 잘 구현했는지 다시 느껴짐  
  일본 수입판 N64에서 Mario 64를 처음 봤을 때의 충격이 아직도 생생함  
  PSX의 Wipeout 같은 게임이 또 다른 방향으로 발전했던 시절의 **다채로운 게임 환경**이 떠오름

- “Tessellation (최대 2배)”로 큰 폴리곤 문제를 줄인다고 하지만, 영상에서 여전히 **텍스처 왜곡**이 심함  
  아마 2배로는 부족하거나, 레벨 지오메트리를 다시 만들어야 할 듯함
  - 나도 텍스처 왜곡은 보이지만 PS1 게임 특유의 **지오메트리 흔들림**은 안 보임  
    아마 부동소수점 연산을 소프트웨어로 처리하고 있어서 **perspective-correct mapping**은 프레임레이트에 부담이 될 것 같음
  - 현재는 레벨 폴리곤에 **전처리 과정이 거의 없음**  
    추후 구현되면 큰 폴리곤을 분할해서 텍스처 좌표 제한 문제도 해결될 예정임
  - 알려진 이슈에도 “Tessellation이 충분하지 않다”고 명시되어 있음  
    PS1 시절의 **초기 3D의 거친 느낌**이 여전히 남아 있음

- 실행 영상이나 스크린샷이 있는지 궁금함. GitHub에는 없는 이유를 이해하긴 함
  - 어젯밤에 본 괜찮은 **게임플레이 영상**이 있음  
    [YouTube 링크](https://www.youtube.com/watch?v=kscCFfXecTI)
  - 또 다른 영상도 있음  
    [YouTube 링크](https://www.youtube.com/watch?v=6f92hKbz5Eo)

- 텍스처 왜곡이 있다며 불평하는 사람들이 많지만, 그래도 이건 정말 **놀라운 작업물**임

- **Kaze**를 언급하지 않을 수 없음  
  그는 수년간 Mario 64를 다양한 방식으로 최적화해온 사람으로, **레트로 게임과 프로그래밍의 교차점**에 관심 있다면 꼭 볼 만함  
  [Kaze의 YouTube 채널](https://www.youtube.com/@KazeN64)
  - 8월에 올린 영상에서 Mario 64가 얼마나 **RAM을 낭비하는지** 분석했는데, 그때 PS1 포트 가능성을 처음 언급했음  
    이렇게 빨리 현실화될 줄은 몰랐음  
    [관련 영상 보기](https://www.youtube.com/watch?v=oZcbgNdWL7w)
  - 그는 정말 대단함 (그리고 근육질임)  
    PS1에 Kaze 수준의 지식을 가진 사람이 있다면, **Mario 32** 같은 프로젝트도 가능할 듯함

- 최근 **디컴파일 프로젝트**가 폭발적으로 늘고 있는데, 그 배경이 궁금함
  - 주된 이유는 **1:1 바이트 매칭 디컴파일을 지원하는 툴링의 발전** 덕분임  
    예를 들어 [decomp.me](https://decomp.me/) 같은 도구가 대표적임  
    이런 툴은 기존 바이너리와 정확히 일치하는 코드를 재구성할 수 있게 해주며, 새로운 프로젝트가 빠르게 시작될 수 있게 함  
    또한 콘솔 SDK API를 모방하는 **포팅 레이어**의 등장도 한몫함  
    다만 완벽 매칭을 위해 오래된 툴체인의 **비정상적인 동작을 재현**해야 하는 등, 엄청난 노력이 필요함
  - 아마 **AI가 디컴파일을 더 쉽게 만든 것**일 수도 있음
  - 그냥 **AI** 때문일 수도 있음
  - **Ghidra**를 사용하는 사람이 많아진 것도 영향이 있음

- 최근에는 **Dreamcast 포트**도 나왔고, Star Fox 64와 Mario Kart 64도 여러 플랫폼으로 이식됨  
  관련 목록: [awesome-game-decompilations](https://github.com/CharlotteCross1998/awesome-game-decompilations)
  - Star Fox 64 포트도 막 완성되었음

- 스크린샷이 없어서 아쉬움

- “드디어, **Super Mario 32**”
