Releases
X16Emu ADD is the Advanced Disassembler and Debugger, a fork of the official Commander X16 emulator.
Releases are named R<major>.<nnn>:
R<major>names the official Commander X16 release line the build follows. That half of the number is upstream's, and so are its release notes — they are not reproduced here. Read them at X16Community/x16-emulator/releases, e.g. r49 ("Pyrite").nnncounts the ADD builds on top of that line. Those are the changes listed below.
R49 means the build follows the R49 line, not that it is byte-for-byte official R49: the emulator
core tracks upstream's ongoing development after that release, so a build may include upstream
fixes made since R49 was cut. Each release package ships the rom.bin it was built and tested
against — use that one.
R49.001
The first ADD release, following the upstream R49 line. Everything here is new relative to the official emulator.
Graphical debugger (-imgui)
- New Dear ImGui debug window with a dockable, rearrangeable layout that is saved between runs
- Disassembly panel with effective-address tooltips, run-to-here and breakpoint toggling
- CPU panel: registers with 65C816-aware widths, decoded flags, the stack, the X16 virtual registers R0–R15, and user-defined address watches
- Memory panel: hex editor over CPU space, banked RAM and VRAM, with range selection, hex/ASCII search, changed-byte highlighting, and break-on-write straight from a selection
- Source panel: original cc65 source in tabs, current line highlighted and centred on each stop, breakpoints settable before the PC ever reaches the code
- VERA panel: palette, tile, sprite, bitmap and tilemap viewers, plus all 32 registers decoded per scanline so raster splits are visible rather than flattened
- PSG, YM2151 and PCM panels with scope traces that keep drawing while the machine is paused
- Symbols, Call Stack and Breakpoints panels; the call stack names frames by nearest label, so code without debug info still reads sensibly
- Toolbar with run/step controls, an absolute clock-speed readout (red above native speed) and a warp toggle; status line showing run state, IRQ nesting depth, 24-bit PC, cycles and instructions
Remote debugging (-debugport)
- New Debug Adapter Protocol server over TCP, default port 9009, for VS Code, Visual Studio or any other DAP-compliant client
- Breakpoints, stepping, stack traces, scopes, variables, memory read/write and disassembly
- VRAM read and write through
readMemory/writeMemorywith avram:reference, reaching VERA's 17-bit space that the CPU map cannot address - Conditional breakpoints on registers and memory (
A == $05,byte[$1234] != 0), bank-pinned conditions (bank == 2), and hit counts - Expression evaluation covering registers, memory, cc65 labels and equates, VRAM, and VERA
registers — including
vera_line, which reports the registers that actually rendered a given scanline - Scriptable keyboard, text and joystick input, making automated regression runs practical. The
virtual SNES controllers need no gamepad attached and no
-joy1..-joy4flag, so a headless CI machine can drive a game that reads the controller ports tools/x16dbg, a .NET command-line DAP client with one-shot and interactive modes
Source-level debugging (-dbgfile, -srcpath)
- cc65
.dbgparsing: addresses map back to source files, lines, labels and equates .dbgfiles auto-load alongside the program they belong to, including for modules the running programLOADs at runtime, so debugging follows execution into overlays- Breakpoints are invalidated when a module unloads and re-resolved when one loads back in
- Banked code in
$A000–$BFFFis attributed to the correct RAM bank at runtime, so source mapping and breakpoints stay correct across bank switches
Debugger capacity
- Memory write watchpoints, up to 64 of them
- 65C816 / GS support throughout: 24-bit bank:address browsing and mode-correct register widths
Windows
- Statically linked MSVC builds for x64, x86 and ARM64 — a single self-contained
x16emu.exewith no SDL2, zlib or Visual C++ redistributable to install - Separate MIDI builds shipping FluidSynth, for those who want it
- The emulator keeps running and painting while its window is dragged or resized, instead of freezing for the duration
Build and release
- Every push is built for all platforms; pushing an
R<major>.<nnn>tag stages a draft release with every platform asset attached, ready for a human to publish, and the default branch keeps a rollingdevprerelease - ROM images are fetched with a fallback to the latest release when the upstream build artifact has expired
Known limitations
- The debugger and DAP server are experimental — expect keys, layouts and DAP details to change
- The WebAssembly build is not tested with the debugger or the DAP server
- MSVC builds have no
-trace; use a-mingwpackage if you need it - Upstream's original
-debugdebugger is still present but is not extended by ADD