Project64 Debugger
The Project64 debugger is a debugger I've been working on as an alternative to the outdated Nemu64 emulator. It features roughly everything Nemu has, plus a stack trace, Javascript API, DMA logger, and a symbol manager.

Debugger feature overview & todo list:
Javascript API documentation:
Project64 repo:
Development builds:


How to use
To toggle a PC breakpoint, double click an instruction in the command viewer. To add a memory breakpoint, right click bytes in the memory viewer or press the + button next to the breakpoint list in the command viewer.

Video demos
Javascript CPU event hooking example
Javascript socket example
Debugging example (old)

If you have any bug reports, questions or suggestions, feel free to post them!

(This is a continuation of the Origami64 thread, which I'm no longer able to maintain.)

[Image: KJhd94F.png]
Changes since the last post in the old Origami64 thread:

Javascript API:
    Add events.onopcode
    Add events.ongprvalue
    Add file system interface (fs)
    Make AddressRange inclusive (fix ADDR_ANY)

Commands window:
    Support more commands in code editor
    Add "Step over" button
    Improve GPR read/write highlighting
    Fix crash from viewing unmapped memory

Memory viewer:
    Add memory locks feature (interpreter mode only)
    Make auto-refresh optional
    Fix crash from viewing unmapped memory (can now view memory-mapped registers)

Stack viewer:
    Fix crash from viewing unmapped memory

I also went ahead and fixed PJ64's settings window for Wine, so Linux users shouldn't need to manually edit the config file anymore.

The development build section on PJ64's website was made public (, so I'm no longer uploading github releases to my personal fork.
Added this CPU logging tool last night:

When "Enable CPU Logging" is checked, the PC, opcode, and GP/FP register states are pushed to a list at the start of every CPU step. Setting "Buffer size" sets the maximum number of states it's allowed to log before it starts tossing out old states. Double-clicking an entry in the list brings up the PC address in the command viewer.

I also made it so that when there is a CPU-related error, instead of just showing a nondescript error message and quitting, PJ64 will now pause and show the commands window at the exception vector, so the COP0 registers can be checked for the cause of the error.
Added a window that lets you pick which exception codes the debugger should break on:

For most games you can check everything except interrupt and coprocessor unusable (and watchpoint? may be a bug). Some games which use TLB exceptions to their advantage may need the TLB-related codes unchecked.
I upgraded the memory search tool to look and feel like Cheat Engine:

[Image: 68747470733a2f2f696d6167652e70726e747363...672e706e67]

Added features include:
  • A watchlist
  • Faster scanning with no result limit
  • Floating point support
  • A scan option for strings of unknown 1-byte encoding
  • Simple gameshark code creation

Watchlist data is saved/loaded automatically per game.
David, and sσnic × sρiraι liked this post
Basic search tool tutorial:

sσnic × sρiraι liked this post
The memory viewer has been upgraded to behave more like a proper hex editor. Most importantly that means you can copy and paste multiple bytes at a time and resize the window.


List of changes
David liked this post
I loved the Javascript API <3
It would be very interesting to expand this API to run a native nodejs compatible with Node Modules.

Transform all this debug into a system of custom plugins built in NodeJS.
The plugins could be run in folders or zip files.

Is it possible to make the scripts work automatically with the emulator? That is another point that I would like to see.
I support Project 64 to be compatible with native NodeJS. I am interested in developing projects in the future using Project 64 Javascript API.

Last tiny question: Is it possible to use a method to obtain the game screen and the game audio? This would be useful for example for someone creating a web server that shows the game screen of the Project 64.

Another javascript suggestion.
You can control player 1, player 2, player 3, player 4 using scripts.

Users browsing this thread: 1 Guest(s)