6.9 KiB
Покрытие raw MCP в общей C-сессии
Эталон списка — 30 инструментов MAME.HT/src/mame_mcp.py с
-plugin mamebridge. Столбец «C-сессия» означает инструмент
toolchain/sdbg_mcp.py, который обращается к единственному sdbg_server.py
через sdbgbridge. Сходное имя само по себе не означает одинаковую адресацию.
| Raw MCP | C-сессия | Состояние и отличие |
|---|---|---|
read_registers |
read_registers |
Проверено при stop; C-ответ включает страницы банков и generation |
read_memory |
read_program_memory |
Проверено при stop: 0x10000+PC совпал с logical Z80; raw 0..0x3ffff, до 4096 байт |
read_logical_memory |
read_memory |
Проверено при stop; предел C — 256 байт, проверяется загруженный C-код |
read_vram |
read_vram |
Проверено в живом MAME; 1..4096 байт, точный VRAM share |
read_share |
read_share |
Проверено; C требует точный tag из list_shares, raw принимает подстроку |
list_shares |
list_shares |
Проверено; структурированные tag/размер для shares и regions |
write_memory |
— | Нужны lease, проверка адреса/банка и инвалидация C-карты |
set_breakpoint |
set_line_breakpoint, set_function_breakpoint |
Только проверенные C-адреса; произвольный raw-адрес и условие ещё не покрыты |
clear_breakpoint |
clear_breakpoint, clear_my_breakpoints |
Только логические ID текущего владельца, не MAME ID |
list_breakpoints |
list_breakpoints |
Проверено на hello: логические C-точки всех владельцев, owner, адреса/банк и фактическое guard-условие только для чтения. Точки из родного окна MAME сюда не входят |
set_watchpoint |
— | Нужны owner, space/access, bank guard и проверка PC при попадании |
clear_watchpoint |
— | Зависит от owner-модели watchpoint |
step |
step_instruction |
Проверено на hello с count=3: 1..64 машинных инструкций при stop, общий control lease и событие остановки; при breakpoint возможно раннее завершение |
step_over |
step_over_instruction |
Проверено на hello: машинный over count=1..64 отдельно от C-F10, асинхронное завершение через события; длинный вызов можно прервать Pause |
step_out |
step_out_instruction |
Проверено на возвращаемом _gettextmode: машинный out отдельно от C Shift+F11, асинхронное завершение. Вызов через tail-jump (___sdcc_enter_ix) может длиться до следующего RET; нужен Pause |
resume |
continue_execution |
Проверено с control lease и DAP-событиями |
pause |
pause_execution |
Проверено с control lease |
status |
session_status, where |
Проверено; C-статус содержит session/build/generation |
disassemble |
disassemble_logical |
Проверено на hello: 1..256 байт текущей logical Z80 памяти при stop, ответ содержит bank_pages/generation. Raw program 0..0x3ffff вне текущего окна ещё не дизассемблируется |
screenshot |
screenshot |
Проверено на выполняющемся hello; только каталог сессии, до 8 МиБ, при stop кадр помечается stale |
read_screen_pixels |
read_screen_pixels |
Проверено; до 8192 pen16 пикселей, кадр/время/stale в ответе |
list_ports |
list_ports |
Проверено; структурированные tag/маска/имя, предел 512 портов и 4096 полей |
press_key |
press_key |
Проверено на hello через getchar(): один символ/enter/space/tab на 1..60 кадров, только при running CPU и с control lease; удержанные клавиши отпускаются при stop/ошибке. Имена прочих физических клавиш пока не поддержаны |
type_string |
type_string |
Проверено на tests/gets: Ab9 + Enter напечатаны, CPU остановился на C-строке после gets(). До 64 символов из PC-раскладки, предварительная проверка всей строки, пауза между клавишами; набор прекращается при stop. Асинхронная очередь пока не нужна для этого ограниченного вызова |
type_text |
— | Нужна отдельная проверка natural keyboard и прямой физической клавиатуры |
move_mouse |
— | Нужна owner-очередь относительных осей |
click_mouse |
— | Нужна owner-очередь кнопок |
press_input |
— | Нужен whitelist портов/масок и автоснятие удержания |
set_input |
— | Нужен whitelist портов/масок и cleanup owner |
debugger_command |
— | Произвольная команда обходит DAP; сначала только проверенные читающие команды |
Живые доказательства для текущего покрытия: run_vscode_dap_probe.py
с --mcp-python проверяет stdio C-MCP и DAP, включая program/logical memory,
порты, shares/VRAM/PNG;
с --waitkey --emulated-key --screen-mcp-python проверяет экран работающего
hello во время getchar() и последующий ввод. Автономный
run_managed_mcp_probe.py через официальный MCP-клиент проверяет
disassemble_logical в main, list_breakpoints, press_key("x") и
остановку на строке после getchar().
run_type_string_probe.py вводит Ab9 и Enter в tests/gets, проверяет
остановку после gets() и сохраняет снимок с напечатанной строкой.
run_raw_mcp_hello_probe.py
проверяет отдельный raw plugin на том же приложении. Несколько процессов MAME
с MCP одновременно не проверялись.