C64调试MCP
](https://www.npmjs.com/package/c64-debug-mcp) 
通过对话调试Commodore 64程序-人工智能控制用于6502组装和BASIC的VICE仿真器。
特性
- 🎮 全C64控制:暂停、恢复、步进和重置模拟器
- 🔍 内存操作:读取、写入、搜索和比较内存
- 🐛 断点:设置执行断点和观察点
- 📊 注册访问权限:获取和设置CPU寄存器(A、X、Y、PC、SP、标志)
- 📸 显示捕捉:捕获屏幕状态和文本内容
- ⌨️ 输入控制:发送键盘和操纵杆输入
- 📝 程序加载:加载PRG文件并管理执行
- 🔢 灵活的格式:使用C64表示法($D000、$FF、%11111111)或标准格式(0xD000、255、0b11111111)
地址格式
MCP服务器接受多种格式的C64地址进行自然交互:
- C64风格:
$D000(美元符号前缀-经典的6502汇编符号) - C风格:
0xD000(0x前缀-标准编程十六进制表示法) - 十进制:
53248(传统十进制格式)
备注:没有前缀的裸十六进制(例如。, D000)不支持使用4位小数来避免歧义。
范围支持
读取内存或设置断点的工具同时支持这两种功能 地址+长度 和 开始+结束 格式:
地址+长度格式 (原件):
memory_read(address="$D000", length=256) // Read 256 bytes starting at $D000
breakpoint_set(kind="exec", address="$1000", length=1) // Breakpoint at $1000开始+结束格式 (范围更直观):
memory_read(start="$D000", end="$D0FF") // Read from $D000 to $D0FF inclusive
memory_read(start=198, end=199) // Read addresses 198-199 (2 bytes)
breakpoint_set(kind="exec", start="$1000", end="$1000") // Breakpoint at $1000这两种格式都适用于所有地址表示(decimal、$、0x)。
常见C64地址:
$D000-SID芯片寄存器(声音)$D020-边框颜色寄存器$D021-背景颜色寄存器$0400-默认屏幕内存$0800-通用程序启动$C000-BASIC ROM启动
地址范围
对于使用内存范围的操作(如 memory_read 和 breakpoint_set),您可以通过两种方式指定范围:
选项1:地址+长度
memory_read(address="$0400", length=256) // Read 256 bytes from $0400
breakpoint_set(kind="exec", address="$1000", length=16) // Break on $1000-$100F选项2:开始+结束(含)
memory_read(start="$0400", end="$04FF") // Read from $0400 to $04FF (256 bytes)
breakpoint_set(kind="exec", start="$1000", end="$100F") // Break on $1000-$100F这两种格式工作方式相同,支持所有地址格式(十进制、十六进制)。
字节值格式
MCP服务器接受多种格式的字节值(0-255),用于自然C64风格的输入:
- C64六角形:
$FF(美元符号前缀-经典6502符号) - C十六进制:
0xFF(0x前缀-标准编程符号) - C64二进制:
%11111111(百分比前缀-经典6502位表示法) - C二进制:
0b11111111(0b前缀-标准编程符号) - 十进制:
255(传统十进制格式)
备注:没有前缀的纯十六进制/二进制(例如。, FF, 11111111)不支持以避免歧义。
数组中的混合格式:
[255, "$FF", "0xFF", "%11111111", "0b11111111"]常见C64字节值:
$00-$0F-颜色值(0-15)$20-PETSCII空间角色$41-PETSCII“A”角色%00011011-VIC-II D011控制寄存器(文本模式,25行,屏幕打开)%11111111-设置所有位(启用所有精灵等)
用例:
// Set border to light blue
memory_write(address="$D020", data=["$0E"])
// Enable all 8 sprites
memory_write(address="$D015", data=["%11111111"])
// Write " AB" to screen (PETSCII)
memory_write(address="$0400", data=["$20", "$41", "$42"])
// Set VIC-II control register with bit pattern
memory_write(address="$D011", data=["%00011011"])需求
- Node.js>=22.13.0
- VICE仿真器(https://vice-emu.sourceforge.io/)
- MCP兼容的人工智能助手(Claude Code、Codex、Windsurf等)
安装
claude mcp add c64-dev-tools -- npx -y c64-debug-mcp@latest或者手动添加到MCP客户端配置中:
{
"mcpServers": {
"c64-dev-tools": {
"command": "npx",
"args": ["-y", "c64-debug-mcp@latest"]
}
}
}快速开始
- 添加MCP服务器(请参阅上面的安装)
- 让你的AI助手与C64交互:
- “000美元的内存中有什么?” - “将断点设置为1000美元” - “加载并运行我的程序.prg”
重要提示: MCP服务器自动启动并控制VICE。您的AI助手拥有模拟器进程,可以随时重置或重新启动它。调试时不要手动使用VICE或在模拟器中创建有价值的工作——重置机器时,任何未保存的状态都可能丢失。
示例工作流
调试程序
You: Load examples/hello.prg and set a breakpoint at $1000
AI assistant will:
1. Load the program using program_load
2. Set a breakpoint at $1000 using breakpoint_set
3. Resume execution until breakpoint is hit
4. Show you the register state when stopped内存分析
You: What's the BASIC program in memory?
AI assistant will:
1. Read memory from $0801 (BASIC start)
2. Parse the BASIC tokens
3. Show you the program listing屏幕捕获
You: Show me what's on the screen
AI assistant will:
1. Capture the display using capture_display
2. Save a PNG image
3. Describe what's visible许可证
麻省理工学院-见 许可证 文件
由以下材料制成❤️ 面向C64开发人员和人工智能辅助逆向编码
*“C64永远不会变老,它只会变得更聪明”🎮*
