experimental low-level n64 emulator
Find a file
2020-11-29 14:13:34 -05:00
.github/workflows strip executable as part of pipeline 2020-11-25 18:40:08 -05:00
cmake/modules Initial commit 2020-06-06 18:02:59 -04:00
docs Typo 2020-10-30 23:12:25 -04:00
screenshots Add mario screenshot 2020-11-01 12:00:13 -05:00
src Cache broadcast modifiers 2020-11-29 14:13:34 -05:00
tests determine CIC type and write to PIF RAM. the PIF ROM now boots. 2020-11-25 11:51:03 -05:00
.gitattributes .h files are C 2020-06-17 17:09:16 -04:00
.gitignore ignore remaining build dirs 2020-11-29 12:07:14 -05:00
.gitmodules Merge branch 'master' into parallel-rdp 2020-11-10 19:55:18 -05:00
CMakeLists.txt SIMD-ify some of the hottest RSP multiplies 2020-11-28 15:46:12 -05:00
README.md Update README.md 2020-11-20 10:37:03 -05:00

n64

Experimental low-level N64 emulator

Build Documentation Status

Mario Face

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.

Links

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.
  • Only software that uses NTSC video modes is currently supported. This is planned to be fixed.

Progress

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.

An interpreter and a basic cached interpreter are available, able to be switched at compile time by editing a #define in n64system.c.

RSP

Reasonably complete. Fast3d (Super Mario 64) seems to work. There are still bugs in the VRCP family of instructions.

Still greatly in need of optimization.

RDP

Not started. My fork of Angrylion can (and must!) be loaded to provide this functionality in the meantime, however.