Experimental low-level N64 emulator written in C and a bit of C++.
Still under heavy development and not ready for prime time. Compatibility is not high and performance is not great (yet.)
The goals of this project are to create a low-level emulator with good compatibility, while learning a lot along the way.
- Reasonably accurate low-level emulation
- Decent performance. Because this is a low-level emulator, it will never be as fast as high-level emulators.
- Reasonable amount of automated testing
- Keyboard and gamepad support
- GDB stub for debugging
- Only Linux is currently supported, as I use Linux-specific features. This is planned to be fixed.
- The dynamic recompiler currently only supports x86_64 with the System-V calling convention. Microsoft's x86_64 calling convention, as well as aarch64 support is planned.
- Only little-endian host platforms are planned to be supported.
- Only gcc and clang will be supported. I unapologetically use extensions like case ranges and binary literals.
- Only software that uses NTSC video modes is currently supported. This is planned to be fixed.
Currently, only Linux on x86_64 is supported.
- Install dependencies: SDL2, Vulkan, and optionally Capstone
- Run the following commands:
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
Run with no parameters to use the default settings and load your ROM using the GUI, or run with options:
./n64 [OPTION]... [FILE]
n64, a dgb n64 emulator
-v, --verbose enables verbose output, repeat up to 4 times for more verbosity
-h, --help Display this help message
-i, --interpreter Force the use of the interpreter
-r, --rdp Load RDP plugin (Mupen64Plus compatible) - note: disables UI and requires ROM to be passed on the command line!
-m, --movie Load movie (Mupen64Plus .m64 format)
-p, --pif Load PIF ROM
https://github.com/Dillonb/n64
An interpreter and a basic dynamic recompiler are available, able to be switched at launch time with a command line flag.
The dynamic recompiler currently only supports the System-V calling convention.
Reasonably complete, enough for most games to run.
Hardware-verified over the EverDrive 64's USB port using rsp-recorder.
Still greatly in need of optimization.
Not started. parallel-rdp by Themaister is integrated in the meantime.
- Stephen Lane-Walsh for cflags, gdbstub, and moral support
- @wheremyfoodat for his help with x86 assembly and moral support
- Giovanni Bajo for his automated RSP tests
- Peter Lemon for his tests, and permission to use his ASM code and font as a template for my own tests
- DynASM as the emitter for the dynamic recompiler
- SDL2 for graphics, audio, and input
- Capstone as a MIPS disassembler for debugging
- parallel-rdp as the RDP until I write my own
- Dear Imgui for the GUI