# Покрытие 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` | Один машинный шаг проверен; счётчик `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` | `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 одновременно не проверялись.