Files
Sprinter-SDCC/docs/mcp-capability-matrix.md
2026-09-17 23:32:46 +03:00

6.9 KiB
Raw Permalink Blame History

Покрытие 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 одновременно не проверялись.