* osAiGetLength Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * osAiSetFrequency Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * contquery.c * osContSetCh * bzero Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * osInvalDCache Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * osInvalICache Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * __osProbeTLB Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * osSetIntMask Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * osWritebackDCache Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * crc Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * __osVoiceContDataCrc Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * voice file headers Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * exceptasm Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * CHECK_IPAGE in pfsreadwritefile * prs read write macros in __osPfsRWInode * PIF_RAM_SIZE in sirawdma * Additional use of VI_SUBPIXEL_SH in __osViSwapContext * Remove PR/os.h includes from some libc files * Add void as arg to empty arg functions * interrupt threadasm macros * Use NTLBENTRIES in osMapTLBRdb * Some usage of NULL in thread.c * Use K0BASE/RDB_BASE_VIRTUAL_ADDR instead of KUSIZE in some places * Force semicolon usage on _osVirtualToPhysical * replace tabs with spaces * __osContinitialized boolean * PR review cleanup Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> * Update src/os/invaldcache.s Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> --------- Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com>
ultralib
Reverse engineering of libultra
Compatibility
Currently this repo supports building the following versions:
| IDO / GCC | libultra.a / libgultra.a |
libultra_d.a / libgultra_d.a |
libultra_rom.a / libgultra_rom.a |
|---|---|---|---|
| 2.0E | ❌ / N/A | ❌ / N/A | ❌ / N/A |
| 2.0F | ❌ / N/A | ❌ / N/A | ❌ / N/A |
| 2.0G | ❌ / N/A | ❌ / N/A | ❌ / N/A |
| 2.0H | N/A / ❌ | N/A / ❌ | N/A / ❌ |
| 2.0I | ✔️ / ✔️ | ❌ / ✔️ | ✔️ / ✔️ |
| 2.0I_patch | ❌ / ❌ | ❌ / ❌ | ❌ / ❌ |
| 2.0J | ✔️ / ✔️ | ❌ / ✔️ | ✔️ / ✔️ |
| 2.0K | ✔️ / ✔️ | ❌ / ✔️ | ✔️ / ✔️ |
| 2.0L | ✔️ / ✔️ | ❌ / ✔️ | ✔️ / ✔️ |
| ique_v1.5 | ❌ | ❌ | ❌ |
Preparation
After cloning the repo, put a copy of the target archive(s) in their correct version folder in base/.
For example, if your target archive is libgultra_rom.a 2.0L then you'd place it in base/L/.
If you will be building without a target archive by setting COMPARE=0 then you can skip this step.
Build dependencies
The build process requires the following packages:
- build-essential
- python3
- binutils-mips-linux-gnu (libultra* only)
Under Debian / Ubunutu you can install them with the following commands:
sudo apt update
sudo apt install build-essential python3
If building any libultra you can install binutils-mips-linux-gnu with:
sudo apt install binutils-mips-linux-gnu
Building
Run make setup with the proper flags set followed by make with optional jobs. For example, if building the 2.0L PC archive you'd do the following:
make VERSION=L TARGET=libgultra_rom setupmake VERSION=L TARGET=libgultra_rom
Every target flag combination requires separate a setup command.
If building without an target archive, than you can use COMPARE=0 like the the following:
make VERSION=L TARGET=libgultra_rom COMPARE=0 setupmake VERSION=L TARGET=libgultra_rom COMPARE=0
note that running setup without COMPARE=0 and no archive will result in an error,
and only needs to be run once instead of per target flag combination
If building for use with modern linkers, than you can use FIXUPS=1 like the the following:
make VERSION=L TARGET=libgultra_rom FIXUPS=1 setupmake VERSION=L TARGET=libgultra_rom FIXUPS=1
note that running with FIXUPS=1 will automatically set COMPARE=0.