A port of https://www.github.com/n64decomp/sm64 for modern devices.
Find a file
2026-02-04 15:09:13 -05:00
actors remove some DL cmds 2026-01-07 01:07:49 -05:00
asm Refresh 10 2020-06-02 12:44:34 -04:00
assets Refresh 3 2019-11-03 14:36:27 -05:00
bin unused variable cleanup 2026-01-07 10:55:29 -05:00
data fix: remove all warnings from codebase 2020-09-17 21:36:28 -04:00
doxygen init2 2019-08-25 00:46:40 -04:00
enhancements Add a 60 FPS interpolation enhancement patch 2020-07-04 22:48:31 +02:00
include reduce display list size and processing by letting GBI2 use real G_TRI2 2026-01-07 11:03:41 -05:00
levels Update script.c 2026-02-01 15:02:23 -04:00
lib unused variable cleanup 2026-01-07 10:55:29 -05:00
psp merge: merge psp port into tree and maintain both 2020-09-17 16:00:23 -04:00
romdisk move save icon to romdisk 2025-12-21 21:45:40 -05:00
rsp Refresh 10 2020-06-02 12:44:34 -04:00
sound fix: redo comments in assembly 2020-09-16 13:05:36 -04:00
src latency reduction 2026-02-04 15:09:13 -05:00
text refresh 6 2020-02-03 00:51:26 -05:00
tools Add cstdint to tools/armips.cpp to fix compilation errors 2026-01-02 22:22:13 -06:00
.clang-format merge: merge psp port into tree and maintain both 2020-09-17 16:00:23 -04:00
.clang-tidy Refresh 1 2019-09-01 15:50:50 -04:00
.gitattributes Refresh 1 2019-09-01 15:50:50 -04:00
.gitignore restore eeprom write calls, add tgz to gitignore 2025-12-26 23:11:38 -05:00
assets.json Refresh 10.1 2020-06-17 22:14:59 -04:00
CHANGES Refresh 11 2020-07-04 11:18:55 -04:00
charmap.txt refresh 5 2020-01-03 10:38:57 -05:00
charmap_menu.txt refresh 5 2020-01-03 10:38:57 -05:00
diff.py Refresh 10.1 2020-06-17 22:14:59 -04:00
diff_settings.py Refresh 8 2020-04-03 14:57:26 -04:00
Dockerfile Refresh 10 2020-06-02 12:44:34 -04:00
Dockerfile.dreamcast Adding Dockerifles for PSP and Dreamcast 2020-10-03 23:27:47 +01:00
Dockerfile.psp Adding Dockerifles for PSP and Dreamcast 2020-10-03 23:27:47 +01:00
Doxyfile refresh 4 2019-12-01 21:52:53 -05:00
environ.sh Create environ.sh 2025-12-26 13:47:21 -05:00
extract_assets.py merge: merge psp port into tree and maintain both 2020-09-17 16:00:23 -04:00
first-diff.py Refresh 10 2020-06-02 12:44:34 -04:00
format.sh init2 2019-08-25 00:46:40 -04:00
Jenkinsfile refresh 6 2020-02-03 00:51:26 -05:00
loader.c sketchy first pass fix-up 2025-12-17 10:32:53 -05:00
Makefile cflags, redundant flushes 2026-01-07 14:56:41 -05:00
Makefile.split Refresh 10 2020-06-02 12:44:34 -04:00
README.md Update README.md 2025-12-26 19:27:43 -05:00
rename_sym.sh Refresh 7 2020-03-01 22:42:52 -05:00
sm64.eu.sha1 init2 2019-08-25 00:46:40 -04:00
sm64.jp.sha1 init2 2019-08-25 00:46:40 -04:00
sm64.ld Refresh 10 2020-06-02 12:44:34 -04:00
sm64.sh.sha1 Refresh 7 2020-03-01 22:42:52 -05:00
sm64.us.sha1 init2 2019-08-25 00:46:40 -04:00
undefined_syms.txt Refresh 8 2020-04-03 14:57:26 -04:00

Super Mario 64 for the Sega Dreamcast

This is an update to the original 2020 mrneo240 Dreamcast port of Super Mario 64. It addresses the audio-visual issues that were present and adds VMU saving.

This repo does not include all assets necessary for compiling the game. A prior copy of the game is required to extract the assets. Specifically you will need to provide the US version.

Building for Sega Dreamcast

Just use the CDI builder found here: https://colab.research.google.com/drive/1JsN-2JOu1tzzHKowCJJRgtL01XgejZTE

Nobody follows directions anyway. If you want to build it the real way, I'll leave the reset of the docs, but I know they'll go unread.

Fixed textures live in the psp/textures/ folder. copy these into textures/, overwrite the extracted ones, and rebuild

  1. Install the Dreamcast toolchain https://github.com/KallistiOS/KallistiOS/tree/master/utils/dc-chain.
  2. Install python3
  3. Place a Super Mario 64 ROM called baserom.<VERSION>.z64 into the repository's root directory for asset extraction, where VERSION can be us, jp, or eu. Note: Only US supported
  4. Run make TARGET_DC=1
  5. This will produce an ELF ready to be loaded with dc-tool / dc-load.
  6. To make a CDI, run make TARGET_DC=1 cdi . You need mkdcdisc installed and on your path.

Project Structure

sm64
├── actors: object behaviors, geo layout, and display lists
├── asm: handwritten assembly code, rom header
│   └── non_matchings: asm for non-matching sections
├── assets: animation and demo data
│   ├── anims: animation data
│   └── demos: demo data
├── bin: C files for ordering display lists and textures
├── build: output directory
├── data: behavior scripts, misc. data
├── doxygen: documentation infrastructure
├── enhancements: example source modifications
├── include: header files
├── levels: level scripts, geo layout, and display lists
├── lib: SDK library code
├── rsp: audio and Fast3D RSP assembly code
├── sound: sequences, sound samples, and sound banks
├── src: C source code for game
│   ├── audio: audio code
│   ├── buffers: stacks, heaps, and task buffers
│   ├── engine: script processing engines and utils
│   ├── game: behaviors and rest of game source
│   ├── goddard: Mario intro screen
│   ├── menu: title screen and file, act, and debug level selection menus
│   └── pc: port code, audio and video renderer
├── text: dialog, level names, act names
├── textures: skybox and generic texture data
└── tools: build tools

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Run clang-format on your code to ensure it meets the project's coding standards.