NES_Emulator
Owns authoritative machine state and advances the CPU, PPU, APU, buses, and mapper.
Software engineer
Tampa / FL / 2026
Emulation / Debugging / C
An immersive NES emulator and debugger for live disassembly, hardware inspection, execution tracing, profiling, and deterministic rewind.
Gameplay and the derived execution model move backward together through the same deterministic timeline.
02 / Intent
Most emulators make the machine disappear behind the game. Orbiter was built around the opposite idea: emulation is more interesting when the machine remains visible, inspectable, and reversible while it runs.
The result is a Windows application where playback and debugging occupy the same surface. A game can run beside its disassembly, processor state, profiler, character memory, and a control-flow model accumulated from actual execution.
03 / Architecture
Orbiter uses four explicit layers so that emulation, derived knowledge, presentation data, and interface code can evolve without collapsing into one system.
Owns authoritative machine state and advances the CPU, PPU, APU, buses, and mapper.
Orchestrates execution, records events, maintains the timeline, and derives durable analysis.
Builds stable, display-ready CPU, PPU, video, palette, sprite, and character-map data.
Turn publications and analysis into interactive panels, GPU textures, graphs, and controls.
04 / Engineering decisions
Mutable emulator state lives in a flat NES_State value. Each timeline entry pairs that state with the execution-analysis cursor, so rewinding restores both the machine and the debugger knowledge associated with that moment. A fixed 1,024-entry ring keeps the operation bounded and predictable.
The emulator records instruction and interrupt events into fixed-capacity buffers while it runs. NES_Process consumes that stream into a persistent model of executed instructions, basic blocks, subroutines, edges, and hit counts. The interface reads the model instead of inserting visualization concerns into the emulator.
The run API advances until the PPU emits a frame event. The application chooses how many whole frames to run from the amount of audio already queued, generates 48 kHz samples during those frames, and caps catch-up work to prevent an audio stall from turning into an unbounded visual jump.
NES_Publication converts internal state into data the interface can safely consume: colorized video, character maps, palettes, sprites, and device registers. Views then upload images to D3D11 and arrange the debugger without becoming coupled to emulator internals.
05 / Current reality
Orbiter is an early Windows x64 prerelease, not a finished general-purpose NES emulator. It currently supports iNES mappers 0, 1, 2, and 9. CPU instructions still execute atomically before the PPU and APU are advanced by their reported cycle count, so the scheduler is deterministic but not yet cycle accurate. The application also runs emulation, debugging, audio production, and rendering on one thread.