# Emulators
## [FCEUX](https://fceux.com/)
The first emulator I began using for reverse-engineering work (on the [[Faxanadu Disassembly]] project).
Compatible with Windows, Linux, macOS.
This features:
* A debugger with breakpoints, memory and register watches, symbol names
* RAM/ROM hex viewer with really good display of updates to registers
* Palette viewer
* Nametable viewer
* [[Game Genie]] cheat code (and easy creation from the debugger and hex viewer)
* Speed controls
* Memory watches
* Instruction logger with optional ability to only log newly-seen code paths
It works well, but does have some quirky interaction issues, including:
* The occasional crash when typing in text fields
* Inputs in text fields in any debugging-related windows also trigger inputs in the game
* Some state (like Game Genie codes, symbol names) are remembered across sessions. Others (like memory watches) don't seem to be.
Worth checking out, but I've been moving to Mesen.
## [[Mesen]] (Recommended)
A multi-system emulator, featuring [[NES]], [[SNES]], [[Game Boy]] (Color, DMG), [[Game Boy Advance]], [[Sega Master System]], [[Game Gear]], [[PC Engine]], and [[Wonderswan]].
As of this writing ([[2025-08-20|August 20, 2025]]), I'm still new to this and learning it.
This seems to featured everything in FCEUX, but with better polish in general and better ability to watch memory.
# ROM Inspection
# Disassembly
## [[Ghidra]]
I've been using Ghidra to disassemble games. This is a free tool developed by the NSA to disassemble games.
I use the [GhidraNes](https://github.com/kylewlacy/GhidraNes) plugin to support NES, along with modifications to Ghidra's 6502 support to understand `IGN` instructions in NES games.
This plugin splits games into different ROM banks. An understanding of what banks are loaded and when for a given game is pretty important when figuring out which banks should be disassembled and which should be discarded or treated as data.
Ghidra has some wonkiness in the UI (and they sure like their giant animations) but it's overall a pretty useful piece of software once you figure out how to work with it.
See [[Ghidra]] for more details and tips.