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