This is a novelty port of the sm64-port to DOS. Do not expect it to be playable.
- Install Docker
- Build image:
docker build . -t sm64_dos
- Run build:
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 -ti sm64_dos make -j4 ENABLE_OPENGL_LEGACY=1 DISABLE_SKYBOX=1 DISABLE_AUDIO=1
Consult the Dockerfile for required libraries and steps.
For best performance:
- Use
ENABLE_OPENGL_LEGACY=1
to enable the legacy OpenGL renderer - Use
DISABLE_SKYBOX=1
to avoid drawing the skybox (saves a lot of cycles in software mode) - Use
DISABLE_AUDIO=1
to save your ears and some CPU cycles - Use
DOS_GL=dmesa
to enable 3Dfx-backed OpenGL instead of software-backed (this only works with legacy OpenGL!)
When DOS_GL
is set to dmesa
, the game will render using FXMesa, which uses 3Dfx Glide for rendering.
That means you will need a 3Dfx card (Voodoo II and above recommended, but will run on a Voodoo I probably) and appropriate
drivers to run it.
The drivers can be obtained from this repository (see this file). Put the appropriate
glide3x.dxe
file next to the EXE.
When running Windows 9x, you will have to reboot into DOS mode before running the game for this to work.
dosbox-x and PCem can emulate Voodoo cards for testing purposes.
- You'll need a copy of CWSDPMI.EXE alongside the executable.
- Either
cp build/us_dos/sm64.us.f3dex2e.exe .
or symlinkln -s build/us_dos/sm64.us.f3dex2e.exe sm64.exe
- Run with
dosbox sm64.exe
or try on some real hardware.
Controls can be edited as per the PC port, tweak the SM64CONF.TXT
which is created with defaults upon first run.
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 and third party libraries
├── 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
- mkst: initial DOS port
- Bisqwit: DJGPP OSMesa binaries, dithering code
- Q2DOS project: FXMesa/DMesa binaries and code
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Official Discord: https://discord.gg/7bcNTPK