Frequently Asked Questions (FAQ)
General
How do I start analyzing a new file?
You can open a file via File → Open (Ctrl+O) or by passing the filename as an argument when starting the application from the command line:
What file formats are supported?
Regenerator 2000 supports the following formats:
| Format | Description |
|---|---|
.prg |
Standard Commodore program (first 2 bytes = load address) |
.crt |
C64 cartridge image with bank selection |
.d64 |
35/40/42-track disk image (pick a PRG from within) |
.d71 |
70/80-track double-sided disk image |
.d81 |
80-track disk image |
.t64 |
Tape image container (pick a PRG from within) |
.vsf |
VICE snapshot — extracts RAM and uses PC as start address |
.bin / .raw |
Raw binary — requires manually setting the origin |
.dis65 |
6502bench SourceGen project file |
.regen2000proj |
Regenerator 2000 project file (includes all labels and comments) |
What systems are supported?
Regenerator 2000 includes system-specific labels, comments, and memory maps for:
- Commodore 64
- Commodore 128
- Commodore VIC-20
- Commodore Plus/4
- Commodore PET (BASIC 2.0 and 4.0)
- Commodore 1541 disk drive
You can set the system in Document Settings (Alt+D or Ctrl+Shift+D).
How do I save my work?
Press Ctrl+S to save as a .regen2000proj file. This preserves all your labels, comments, block types and
bookmarks.
Use Alt+S (or Ctrl+Shift+S) to Save As with a different filename.
Does it run on Windows, macOS, and Linux?
Yes. Pre-compiled binaries are available for all three platforms on the
GitHub Releases page.
You can also install from Crates.io with cargo install regenerator2000.
How do I reopen a recent project?
Use File → Open Recent (Alt+O or Ctrl+Shift+O) to quickly access your most recently opened files and projects.
Disassembly
How do I change the type of a block?
Place the cursor on the desired line (or select a range with Shift+V for Visual Mode) and press the corresponding key:
| Key | Block Type |
|---|---|
| C | Code |
| B | Byte |
| W | Word |
| A | Address |
| P | PETSCII Text |
| S | Screencode Text |
| < | Lo/Hi Address Table |
| > | Hi/Lo Address Table |
| , | Lo/Hi Word Table |
| . | Hi/Lo Word Table |
| E | External File |
| ? | Undefined (reset) |
See Block Types for detailed explanations and assembler-specific examples.
How do I select multiple lines?
Press Shift+V to enter Visual Mode (similar to Vim). Use Up / Down (or J / K) to extend the selection. Then apply a block type conversion or other operation to the entire selection. Press Esc to exit Visual Mode.
Can I rename labels?
Yes. Place the cursor on a label and press L. Type the new name and press Enter. The label will be renamed globally — every instruction that references that address will use the new name.
What do the label prefixes mean?
Auto-generated labels use a short prefix that indicates how the address is referenced in the code. For example,
s_C000 means a subroutine entry point at $C000, while zpa_A0 means a zero-page absolute address at $A0.
See Analysis — Label Prefixes for the complete prefix reference and how the analyzer decides which prefix to assign.
What is the difference between a local and a global label?
- Global Labels: Top-level symbols accessible from anywhere in the program.
- Local Labels (e.g.,
_loop,.skipdepending on the assembler): Belong to the nearest Global Label above them and are only visible between that global label and the next one. They are useful for loop targets or temporary variables to avoid name collisions between different subroutines. - Scope Labels: When a global label is used inside a custom scope block (such as an explicit procedure or block),
it becomes a scope label and must be accessed via
scope_name.label_namefrom the outside, rather than being a truly global one.
In the TUI, you can toggle between local and global scope when creating a label or editing an existing one. Press L to open the label dialog, and then use Tab to focus the checkbox and Space to toggle it.
How do I navigate the disassembly?
| Action | Shortcut |
|---|---|
| Jump to address | Ctrl+G or Alt+G |
| Jump to line number | Ctrl+Shift+G |
| Follow a jump/branch | Enter |
| Go back in history | Backspace |
| Go to symbol by name | Ctrl+P |
| Find cross-references | Ctrl+X |
| Search (Vim-style) | / |
| Search dialog | Ctrl+F |
| Next / previous match | N / Shift+N |
What are arrows in the disassembly view?
The columns on the left side of the disassembly draw visual arrows showing the flow of jump (JMP) and branch
(BNE, BEQ, BCC, etc.) instructions. This helps you quickly see loops, conditional paths, and where control flow
goes. You can configure the number of arrow columns in Document Settings (the "Arrow Columns" option).
How does undo/redo work?
Press U to undo the last action and Ctrl+R to redo. Every block type change, label rename, comment edit, and similar action is recorded on the undo stack. The history is saved with the project file.
What is "Patch BRK"?
The 6502 BRK instruction is technically 2 bytes, but most C64 programs treat it as 1 byte. By default,
BRK single byte is enabled. If your program uses the 2-byte form, disable it in Document Settings and optionally
enable Patch BRK to ensure the padding byte is correctly exported.
See Settings for details.
Labels & Comments
How do I add a comment?
- Side comment (inline, after the instruction): Press ; and type your comment.
- Line comment (on its own line, above the instruction): Press : and type your comment.
Line comments also act as splitters — they prevent adjacent blocks of the same type from being auto-merged.
Can I write multi-line comments?
Yes. In the line comment dialog, press Ctrl+J (or Shift+Enter) to insert a new line. You can also use shortcut keys for quick separators:
- Alt+-: Insert a dash separator (
---) - Alt+=: Insert an equals separator (
===) - Alt+\: Insert a mixed separator (
-=-)
What are bookmarks and how do I use them?
Bookmarks let you mark addresses you want to return to quickly:
- Ctrl+B: Toggle a bookmark at the current address.
- Ctrl+Shift+B (or Alt+B): Open the Bookmarks dialog to navigate between bookmarks.
Scopes
What are scopes?
Scopes (also called namespaces or procedures) allow you to group code into logical blocks, typically representing
routines or functions. Labels defined inside a scope are local to that scope, preventing naming conflicts. For
example, two different routines can both have a local label called loop without collision.
How do I create a scope?
- Select the range of code using Shift+V (Visual Mode).
- Press R to create a scope over the selection.
A default label is created at the scope's start address if one doesn't already exist. You can rename it with L.
How do I remove a scope?
Place the cursor on the first or last line of the scope and press Del.
The Del key also serves a second purpose: it excludes external addresses from analysis when the cursor is on an external label.
Which assemblers support scopes?
| Assembler | Scope Syntax |
|---|---|
| 64tass | .block / .bend |
| KickAssembler | { / } |
| ca65 | .proc / .endproc |
| ACME | Not supported (ignored) |
See Block Types — Scopes for detailed examples in each assembler's syntax.
Views
How do I switch between views?
Use Tab to switch focus between the Disassembly View (left) and the right pane. Toggle which view appears in the right pane using:
| Shortcut | View |
|---|---|
| Alt+1 or Ctrl+1 | Blocks |
| Alt+2 or Ctrl+2 | Hex Dump |
| Alt+3 or Ctrl+3 | Sprites |
| Alt+4 or Ctrl+4 | Charset |
| Alt+5 or Ctrl+5 | Bitmap |
| Alt+6 or Ctrl+6 | Debugger |
How do I sync the right pane with the disassembly?
By default, the Hex Dump and Blocks views sync with the Disassembly cursor. You can enable or disable syncing for each view independently in File → Settings (Alt+P or Ctrl+,).
Exporting
Which assemblers are supported for export?
Regenerator 2000 supports exporting to:
- 64tass
- ACME
- KickAssembler
- ca65
See Assemblers for detailed command lines and configuration.
How do I export my project?
- Ctrl+E: Export to ASM (uses the last saved filename, or prompts).
- Alt+E (or Ctrl+Shift+E): Export As (always prompts for a filename).
You can also export from the command line:
# Export to ASM:
regenerator2000 --headless --export_asm output.asm my_file.regen2000proj
# Override assembler format:
regenerator2000 --headless --assembler acme --export_asm output.asm my_file.regen2000proj
Can I export VICE labels?
Yes. Use File → Export → Export VICE Labels... to generate a .lbl file that can be loaded in VICE's monitor for
debugging.
What is the "External File" block type for?
When you mark a memory region as "External File" (E), the exporter writes those bytes to a separate .bin file
and emits a .binary "filename.bin" (or equivalent) directive in the ASM output. This keeps large binary blobs
(music, graphics, charset data) out of the main source file.
VICE Debugger
How do I connect to VICE?
- Start VICE with the binary monitor enabled:
x64 -binarymonitor my_program.prg - Load the same binary in Regenerator 2000:
regenerator2000 my_program.prg - In Regenerator 2000, open Debugger → Connect to VICE... and press Enter (default:
localhost:6502). - Open the Debugger panel with Alt+6.
Warning
Both VICE and Regenerator 2000 must be running the same binary. If the binaries differ, breakpoints and the PC display will be misaligned.
What debugging operations are supported?
| Action | Shortcut |
|---|---|
| Toggle Breakpoint | F2 |
| Toggle Breakpoint... | Shift+F2 |
| Run to Cursor | F4 |
| Watchpoint | F6 |
| Step Instruction | F7 |
| Step Over | F8 |
| Step Out | Shift+F8 |
| Run / Continue | F9 |
For comprehensive details, see Debugger (VICE Integration).
MCP Integration
What is MCP?
The Model Context Protocol (MCP) is an open standard that allows AI assistants to interact with tools programmatically. Regenerator 2000 implements an MCP server, enabling AI agents to read disassembly, set labels, add comments, and manipulate blocks.
How do I start the MCP server?
- HTTP mode (port 3000):
regenerator2000 --mcp-server my_project.regen2000proj - stdio mode (headless):
regenerator2000 --mcp-server-stdio my_project.regen2000proj
See MCP Integration for the full list of available tools and resources.
Troubleshooting
Some keyboard shortcuts don't work in my terminal
Different terminals handle key combinations differently. If a Ctrl shortcut doesn't work, try the Alt alternative (most shortcuts have both). For the best experience, we recommend using a modern terminal:
- macOS: iTerm2, Ghostty, Alacritty, kitty, WezTerm
- Windows: Windows Terminal, Alacritty, WezTerm
- Linux: Ghostty, Alacritty, kitty, WezTerm, GNOME Terminal
The display looks garbled or colors are wrong
Ensure your terminal supports 256 colors or true color (24-bit). Most modern terminals do.
If running inside tmux or screen, add set -g default-terminal "tmux-256color" to your tmux config.
How do I report a bug or request a feature?
Open an issue on GitHub: https://github.com/ricardoquesada/regenerator2000/issues
You can also join the Discord server (look for the #regenerator2000 channel under
"Misc Projects").