Project64d
A fork of Project64 with advanced debugging features for ROM hackers and homebrewers.
Github - Discussion - Javascript API
Recent builds (View all)
These builds are newer but less stable than the Github releases.
To use them, drop them into an existing PJ64d setup.
Features
MIPS CPU Debugger

Symbol Manager
The symbol manager can keep track of discovered functions and monitor variables in real time.
Symbols are saved to a file in the Save directory, so you won't lose them at the end of your debugging session.

DMA Logging
The DMA log can be used to quickly trace data back to ROM.

Updated memory editor
The updated memory editor incorporates DMA log and symbol information, and can be used to place read and write breakpoints.

Javascript API
PJ64d features a Javascript API that can hook CPU read/write/execute events, access virtual memory, and connect to external applications via sockets.
Requirements
In settings, Pause emulation when window is not active and Hide advanced settings should be unchecked.
In advanced settings, Always use interpreter core and Enable debugger should be checked.
These settings are preconfigured in the newer Github releases.
Bug reports, questions, suggestions?
Feel free to post them in the forum thread!
http://origami64.net/showthread.php?tid=549
Plans & Development status
2017 Jun 12

Todo:

Debugger: Add tooltips for bitfield registers
Debugger: Add additional 'View memory' button for load/stores
Debugger: Highlight addresses with script callbacks
Debugger: Add 'Step over' (F3)
Debugger: Make scrollbar thumb functional
Debugger: Add tooltips for bitfield registers
Memory Dumper: Include symbols in ASM dumps
Memory Search: Add hex string search
Memory Search: Support floating point
Memory Viewer: Improve caret behavior
Memory Viewer: Support pasting
Memory Viewer: Add 'Fill bytes'
Memory Viewer: Add 'Toggle freeze'
Memory Viewer: Add 'Inject file here'
Memory Viewer: Add 'Copy' to context menu (Selected bytes, Address, DMA base address, )
Memory Viewer: Add 'Follow' to context menu
Memory Viewer: Highlight addresses with script callbacks
Memory Viewer: Integrate TLB information
Memory Viewer: Add history, back and forward buttons 
Script API: Add events.onjal(func)
Script API: Add mem.setstring(address, string)
Script API: Add mem.setblock(address, buf)
Script API: Add constants for mapped registers
Script Console: Fix instability when stopping scripts
Script Console: Fix input/eval instability
Script Console: Show number of waiting events in status bar
Symbols: Add ELF symbol generation feature
Symbols: Add 'Set value' to context menu for variables
Symbols: Support editing for existing symbols
Symbols: Implement filtering
Symbols: Fix crash from clicking '-' when nothing is selected
Symbols: Fix crash from invalid addresses

Add call log window
 + Show list of all function calls with occurence
 + Show the last bunch of function calls and args
 
Half baked / in-progress:
 Register field highlighting
 Register usage instruction highlighting
 ASCII scan needs subsequent result scans

Other thoughts:
 Debugger: Make branch arrow dotted if branch will be taken
 Stack Viewer: Add some sort of variable tracking/analysis
 
 arrays & sizes for symbols, structs too?
 
 full execution logging
 
 builtin http/websocket stuff for scripts
 
 scripts should have a library folder and require() implementation
 
 should probably make mem.bindvar types uppercase
 ('float' and 'double' are reserved keywords)
 
 mem.typedef and mem.bindstruct should have a way to deal with unknown struct offsets
 
 should add a built-in printf implementation and ditch Number.prototype.hex
 
 need to figure out how to make screen.print not terrible
 
 should add events.onclick to capture clicks to the emu screen
 
 need to make documentation maintenence easier (markdown/json/something)
 
 fix windows XP incompatibility (*Ex functions in the script system)
 use thread pools? use libuv/dukluv?
 
 object oriented gui for scripts
 
 miraculous debugger support for recompiler

 tutorials & gui documentation
 
 hack a gfx plugin to display segment addresses on screen
 
Done for next release:

Debugger:
 Add all memory mapped registers
 Add branch arrows column
 Add FCSR31 register to FPR tab
 Add shortcut keys for Skip/Step/Go (F1,F2,F4)
 Add tooltips to the buttons
 Add register field highlighting
 Add annotations for:
  Reads/writes to system registers, ROM header, symbols
  Exception vectors
 Context menu:
  Add 'View memory' for load/store addresses
  Add 'Follow' for jumps/branches
  Add 'Run to line'

Memory Dumper:
 Add binary support
 
Memory Search:
 Add ASCII string search
 
DMA Log:
 Add highlighting for sequential loads
 
Script API:
 Support address ranges for events.onexec/onread/onwrite
 Make events.read/write/exec return a callback ID
 Add events.remove(id) for callback removal
 Add events.ondraw(func)
 Add screen.print(x, y, text) [Unstable!]
 Add ugpr (upper 32 bits of GP registers)
 Add dfpr (double floating-point registers)
 Add gpr.lo, gpr.hi, ugpr.lo, ugpr.hi
 Add optional maxLen arg to mem.getstring and rom.getstring
  
Script Console:
 Remove character output limit
 Add 'Copy' button
 Add 'Clear' button
 
Interpreter core:
 Break out of invalid CRC halt if debugger is enabled
  
RSP Plugin Debugger
 Fix register window
 Use 0x1000 for IMEM base address