Runtime for traditional ports or recompilations of N64 games.
Find a file
2024-06-07 12:55:17 -04:00
.github/workflows Remove SDL2 and other libraries 2024-06-07 12:55:17 -04:00
librecomp Comments explaining which callbacks are required 2024-06-07 12:55:17 -04:00
thirdparty Move GraphicsConfig back to ultramodern 2024-06-07 12:55:17 -04:00
ultramodern Comments explaining which callbacks are required 2024-06-07 12:55:17 -04:00
.gitignore Namespace librecomp headers under recomp 2024-06-01 19:48:53 +02:00
.gitmodules Remove rt64 2024-06-07 12:55:16 -04:00
CMakeLists.txt CMake fixes to allow building this repo as a submodule (#25) 2024-05-30 09:16:07 +02:00
COPYING Initial commit 2024-05-19 14:14:54 -04:00
README.md Remove SDL2 and other libraries 2024-06-07 12:55:17 -04:00

N64 Modern Runtime

Note This repo is a WIP as files are moved out of Zelda64Recomp and genericized. It cannot be used directly in its current state.

This repo contains two libraries: Ultramodern and Librecomp.

Ultramodern

Ultramodern is a reimplementation of much of the core functionality of libultra. It can be used with either statically recompiled projects that use N64Recomp or direct source ports. It implements the following libultra functionality:

  • Threads
  • Controllers
  • Audio
  • Message Queues
  • Timers
  • RSP Task Handling
  • VI timing

Platform-specific I/O is handled via callbacks that are provided by the project using ultramodern. This includes reading from controllers and playing back audio samples.

ultramodern expects the user to provide and regiter a graphics renderer. The recommended one is RT64.

Librecomp

Librecomp is a library meant to be used to bridge the gap between code generated by N64Recomp and ultramodern. It provides wrappers to allow recompiled code to call ultramodern. Librecomp also provides some of the remaining libultra functionality that ultramodern doesn't provide, which includes:

  • Overlay handling
  • PI DMA (ROM reads)
  • EEPROM, SRAM and Flashram saving (these may be partially moved to ultramodern in the future)

Building

It is recommended to reference this project on your CMakeLists.txt file. Note that this project has been developed with clang 15, older versions may not work.

For building locally this project (ie, developing new features for the libraries of this project), the following is recommneded:

cmake -B build -G Ninja -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Debug
cmake --build build -j $(nproc) --config Debug