Files
Sprinter-SDCC/docs/mcp-capability-matrix.md
T
2026-09-17 22:57:27 +03:00

51 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Покрытие 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` | — | Нужен структурированный список с owner и bank guard |
| `set_watchpoint` | — | Нужны owner, space/access, bank guard и проверка PC при попадании |
| `clear_watchpoint` | — | Зависит от owner-модели watchpoint |
| `step` | `step_instruction` | Один машинный шаг проверен; счётчик `count` ещё не поддержан |
| `step_over` | `step_source(kind="over")` | Проверен C-шаг F10; raw машинный `over count` пока отличается |
| `step_out` | `step_source(kind="out")` | Проверен C-выход; raw выход из одного машинного frame отличается |
| `resume` | `continue_execution` | Проверено с control lease и DAP-событиями |
| `pause` | `pause_execution` | Проверено с control lease |
| `status` | `session_status`, `where` | Проверено; C-статус содержит session/build/generation |
| `disassemble` | — | Нужен явный logical/raw адрес и банк; строковый debugger pass-through не используется |
| `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` | — | Нужна очередь ввода с release при stop/disconnect |
| `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-клиент проверяет
`press_key("x")` и остановку на строке после `getchar()`.
`run_raw_mcp_hello_probe.py`
проверяет отдельный raw plugin на том же приложении. Несколько процессов MAME
с MCP одновременно не проверялись.