2020-12-03 15:48:30 -05:00
# UltraSM64
2019-08-25 00:46:40 -04:00
2020-12-03 21:00:33 -05:00
- This repo contains a full decompilation of Super Mario 64 (J), (U), (E), and (SH).
2020-06-02 12:44:34 -04:00
- Naming and documentation of the source code and data structures are in progress.
2020-12-08 19:28:12 -05:00
- It has been edited to allow for the usage of the final "N64 OS" library, version ``2.0L` `
- Shindou Rumble Pak code is on for all regions.
2021-01-02 22:48:12 -05:00
- Targeting the iQue Player is supported.
2021-01-11 00:46:56 -05:00
- Saving to 32kbyte/256kbit SRAM is supported.
2021-01-24 14:06:58 -05:00
- Using gzip DEFLATE compression is supported.
2020-12-08 19:28:12 -05:00
- It has been patched with someone2639's shiftable segments patch
2021-01-02 22:48:12 -05:00
- Getting HVQM FMV support to work with the game is in progress.
2020-12-03 15:48:30 -05:00
- Getting UNFLoader (flashcart USB library) to work with the game is in progress.
2019-08-25 00:46:40 -04:00
2021-01-25 12:42:24 -05:00
## Multi-Save support
The repository supports SRAM in addition to EEPROM. The standard save data functions are #ifdef 'd to accommedate this.
To build with SRAM support, run make with ``SAVETYPE=sram` `.
I may attempt FlashRAM in the future.
## Multi-Console support
The repository supports targeting the iQue Player in addition to the N64. The iQue libultra is * * *NOT*** compatible with N64 in many ways, so it is currently NOT possible to have one build for both consoles.
2021-01-25 22:21:15 -05:00
To target iQue, run make with the ``CONSOLE=bb` ` argument.
2021-01-25 12:42:24 -05:00
## Compression
The repository supports using DEFLATE compression instead of Nintendo's Yay0. This boasts a better compression ratio, but at a slight cost to load times.
On average I'd estimate that the bottleneck on decompression is about 1-2 seconds.
To switch to gzip, run make with the ``COMPRESS=gzip` ` argument.
2021-01-25 22:21:15 -05:00
The repo also supports gziping with ``libdeflate-gzip` `. This compresses at a slightly better ratio than standard ` `gzip` `, with no real downside from a decompression standpoint.
2021-01-25 12:42:24 -05:00
To use ``libdeflate-gzip` `, first clone the [repo ](https://github.com/ebiggers/libdeflate ), then make and make install it.
Then run make for sm64 with ``GZIPVER=libdef` ` in addition to ` `COMPRESS=gzip` `
2021-01-25 22:21:15 -05:00
The repo also supports RNC (Rob Northen Compression). RNC has two methods.
Method 1 is designed to compress as small as possible, while method 2 is designed so that decompression is as fast as possible.
Both methods are fast. Method 1 has better compression than 2, so I suggest using method 1 if using RNC.
To switch to RNC, run make with either ``COMPRESS=rnc1` ` or ` `COMPRESS=rnc2` `, depending on preferred method.
2021-01-25 12:42:24 -05:00
2020-12-03 15:48:30 -05:00
## FAQ
2019-08-25 00:46:40 -04:00
2020-12-03 15:48:30 -05:00
Q: Why in the hell are you bundling your own build of ``ld` `?
2019-08-25 00:46:40 -04:00
2020-12-03 15:48:30 -05:00
A: Newer binutils (Like the one bundled with Ubuntu, 2.34) break linking with libultra builds due to local asm symbols.
2019-08-25 00:46:40 -04:00
2020-12-03 15:48:30 -05:00
This puts me at a crossroads of either touching leaked code and requiring GCC, or just using an older linker that works just fine.
2020-03-31 20:11:48 -07:00
2020-12-03 15:48:30 -05:00
I went with the latter.
2020-03-31 20:11:48 -07:00
2020-12-08 19:28:12 -05:00
Thanks to "someone2639" for this hacky-ass idea
2020-03-31 20:11:48 -07:00
2020-12-08 19:28:12 -05:00
Q: Will this allow me to use FlashRAM/Transfer Pak/microcode swapping/Other Cool N64 Features?
2020-03-31 20:11:48 -07:00
2020-12-03 15:48:30 -05:00
A: Theoretically, all yes.
2020-03-31 20:11:48 -07:00
2020-12-03 15:48:30 -05:00
## Installation help
2020-03-31 20:11:48 -07:00
2020-12-03 15:48:30 -05:00
Go read the original repo README.md