.github/workflows | ||
cmake/modules | ||
src | ||
tests | ||
.gitattributes | ||
.gitignore | ||
CMakeLists.txt | ||
README.md |
n64
Nintendo 64 emulation research project
What is this?
This is a project I am working on to learn about the N64 and more advanced emulation techniques.
What is this not?
- This is NOT intended to be your "daily driver" N64 emulator for gaming, at least it is currently not planned to be.
Goals
Personal development
- Learn about JIT dynamic recompilers
- Learn about 3D graphics
- Challenge myself
Technical
- Nothing exclusively using high level emulation (HLE.) If anything is HLE'd, it must be an optional setting.
- GUI debugger to view hardware registers/memory
- GDB stub for debugging
- Reasonable amount of automated testing
- Configurable input, keyboard and gamepad support
Limitations
- Only Linux is currently supported, as I use Linux-specific features. This is planned to be fixed.
- Only little-endian host platforms are planned to be supported.
- Only gcc is supported for now, but this is for sure planned to be fixed. The binary built with gcc will export symbols for the RDP plugin (loaded as a shared library) to call back into, but the binary built with clang will not.
- Only gcc and clang will be supported. I unapologetically use extensions like case ranges and binary literals.
- RDRAM is stored internally as big-endian and translated on every read/write.
Progress
Currently, the only known commercial game that this will run is Namco Museum, as everything else that I know of needs a more complete RSP.
UI
Basically nonexistent. Runs a simple SDL window and configured with command-line parameters.
Debugger
Not started. There is verbose logging with -v (repeatable) that provides some debug info, however.
CPU
Reasonably complete. Not all instructions are there yet, but enough for now. I'm implementing instructions as I come across them in games, so this will slowly progress as time goes on.
RSP
Very early. Very few vector instructions are supported, and no known RSP microcode currently works yet. Tests have been adapted from another emulation project, and only a few are passing.
RDP
Not started. My fork of Angrylion can (and must!) be loaded to provide this functionality in the meantime, however.