Amiga调试工具服务

通过WinUAE模拟器提供Amiga 68k调试工具的MCP服务器,支持AI助手直接读写模拟硬件。

  • by axewater
  • JavaScript
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 axewater/mcp-winuae-emu

使用说明

mcp winuae emu

一 主控程序 通过WinUAE模拟器提供Amiga 68k调试工具的服务器。它连接到一个 自定义WinUAE分叉 通过GDB远程串行协议(RSP),AI助手可以直接对模拟的Amiga硬件进行读写访问。

它的作用

该服务器允许AI助手(Claude等)启动WinUAE,连接到其GDB服务器,然后读取/写入内存、读取/写入寄存器、设置断点、单步执行代码、反汇编铜列表等,所有这些都是通过MCP工具调用完成的。

快速开始

1.下载预构建的WinUAE二进制文件

下载 winuae-gdb.exe 从 WinUAE分叉发布 并将其放置在目录中(例如。, C:\apps\winuae\).

这是一个自定义版本 BartmanAbyss的WinUAE分叉 添加了寄存器和内存写入支持。看 补丁详细信息.

2.安装MCP服务器

git clone https://github.com/axewater/mcp-winuae-emu.git
cd mcp-winuae-emu
npm install
npm run build

3.添加到克劳德代码

添加到MCP设置(~/.claude/claude_desktop_config.json 或项目 .mcp.json):

{
  "mcpServers": {
    "winuae-emu": {
      "command": "node",
      "args": ["C:/path/to/mcp-winuae-emu/dist/index.js"],
      "env": {
        "WINUAE_PATH": "C:/apps/winuae",
        "WINUAE_CONFIG": "C:/apps/winuae/Configurations/A500-Dev.uae"
      }
    }
  }
}

4.提供Kickstart ROM和配置

你需要一个有效的Amiga Kickstart ROM文件(例如,A500的Kickstart 1.3)和一个WinUAE .uae 配置文件。最小配置:

cpu_type=68000
chipset=ocs
chipmem_size=1
kickstart_rom_file=C:\path\to\kickstart.rom

服务器读取您的配置,合并GDB所需的设置,并启动 winuae-gdb.exe 自动。

配置

变量 默认值 描述
WINUAE_PATH C:\apps\winuae 目录包含 winuae-gdb.exe
WINUAE_CONFIG <WINUAE_PATH>\Configurations\A500-Dev.uae 通往您的道路 .uae 配置文件
WINUAE_GDB_PORT 2345 GDB服务器TCP端口
WINUAE_DEBUG 0 设置为 1 启用GDB协议调试日志记录

工具

连接

工具 说明
winuae_connect 启动WinUAE并连接到GDB服务器
winuae_disconnect 断开并停止模拟器
winuae_status 检查是否连接和响应

记忆

工具 说明
winuae_memory_read 以十六进制读取内存字节
winuae_memory_write 将十六进制字节写入内存
winuae_memory_dump 十六进制+ASCII转储(类似于十六进制编辑器)
winuae_load 将二进制文件加载到Amiga内存中

中央处理器

工具 说明
winuae_registers_get 读取所有m68k寄存器(D0-D7、A0-A7、SR、PC)
winuae_registers_set 写入寄存器(D0-D7、A0-A7、SR、PC的任何子集)
winuae_step 单步N指令
winuae_continue 恢复执行
winuae_pause 暂停执行并读取寄存器
winuae_reset 暂停CPU并读取当前寄存器状态

断点和观察点

工具 说明
winuae_breakpoint_set 在某个地址设置软件断点
winuae_breakpoint_clear 删除断点
winuae_watchpoint_set 内存读/写/访问中断
winuae_watchpoint_clear 删除观察点

Amiga硬件

工具 说明
winuae_custom_registers 读取并解码所有自定义芯片寄存器($DFF000-$DFF1FE)
winuae_copper_disassemble 解码铜列表(等待、移动、跳过、结束)
winuae_disassemble m68k基本拆卸

运作原理

  1. 发射:阅读您的 .uae config,合并GDB设置,生成 winuae-gdb.exe -portable -G -s debugging_features=gdbserver -s debugging_trigger=
  2. 连接:检索到的TCP连接 localhost:2345 直到GDB服务器准备就绪
  3. 协议:通过以下方式进行沟通 GDB RSP --数据包帧、校验和、ack模式、寄存器/内存命令、断点命令等。

技术说明

  • 这 -G 旗和 -s 覆盖 必须 是CLI参数。此WinUAE内部版本(v4.10.1)忽略 use_gui 和 debugging_features 在配置文件中设置时。
  • GDB服务器发送 O 连接时的数据包(控制台输出)。协议处理程序会自动跳过这些。
  • 自定义芯片寄存器读取使用64字节块,因为GDB服务器对硬件I/O地址有读取大小限制。
  • ECS/AGA专用寄存器($DFF1C0+)在OCS芯片组配置上返回零。
  • CIA寄存器($BFE001/$BFD000)不能通过GDB内存读取接口访问。

学分

局限性

  • 仅限Windows --需要WinUAE
  • 基本拆卸 --反汇编程序只识别少数操作码(RTS、NOP、RTE等);所有其他显示为 DC.W
  • 中情局无法访问 --CIA-A/CIA-B寄存器未通过GDB服务器映射
  • 单个连接 --GDB服务器一次接受一个客户端

许可证

麻省理工学院