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

54 lines
6.6 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` | `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_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` | `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 одновременно не проверялись.