Support bounded machine instruction step counts in MCP

This commit is contained in:
Александр Петров
2026-09-17 23:22:37 +03:00
parent e8189b137a
commit 259c782190
13 changed files with 62 additions and 10 deletions
+2 -1
View File
@@ -287,7 +287,8 @@ Quick wins:
проверены живым прогоном. Привязка RPC к session/build/generation и
экранные API, одиночный `press_key` и читающий список C-точек уже
добавлены; logical Z80 disassembly и ограниченный `type_string`
проверены. Далее natural keyboard, управляемые поля портов и мышь,
проверены, машинный `step_instruction(count=1..64)` проверен на `hello`.
Далее natural keyboard, управляемые поля портов и мышь,
затем доказанные
watchpoints, запись typed values, disassemble_src и batch-загрузка
точек. Raw `mame_mcp.py` с `-plugin mamebridge` не подключать к тому же
+1
View File
@@ -297,6 +297,7 @@ commit `b0c4527c2edb1ee177fd09b3c412b65b385bf35b`:
| Список C-точек MCP, 2026-09-17 | В автономном видимом MAME MCP увидел собственную точку перед `getchar()` с owner и адресом; `list_breakpoints` также отдаёт guard-условие банка из bridge, если оно есть. Всего 29 автономных инструментов; вручную созданные debugger-точки пока не перечисляются |
| Logical Z80 disassembly MCP, 2026-09-17 | Через официальный MCP-клиент в видимом MAME прочитаны инструкции `main` с `0x8224` (`call $852C`); байты памяти до/после совпали. Адрес/длина ограничены, возвращаются bank_pages и generation. Всего 30 автономных инструментов; raw program disassembly ещё не поддержано |
| Строковый ввод MCP, 2026-09-17 | `tests/gets` с C-картой в видимом MAME получил `Ab9` и Enter через один MCP `type_string`; скриншот показал ввод и печать строки, CPU остановился на строке 16 после `gets()`. 31 автономный инструмент; natural keyboard/мышь остаются в плане |
| Счётчик машинных шагов MCP, 2026-09-17 | На видимом `hello` официальный MCP-клиент передал `step_instruction(count=3)`, получил следующую остановку и затем довёл приложение до `getchar()` и выхода; диапазон 1..64 проверяется клиентом, сервером и Lua backend |
| F10 через `getchar()`, 2026-09-15 | Асинхронный `next` ответил за 21,49 мс; при ручном `x` в окне MAME `hello.c:62``:63`, возврат `DE.low=0x78`; обе клавиатуры включены в изолированном cfg |
| VS Code TaskProvider Build, 2026-09-15 | Одиннадцать Node-проверок: выбор Makefile рядом с пакетом/в `build/`, команда make с Python shim, SDCC matcher, успешный и неуспешный код задачи, pyenv вне workspace; реальный make в `tests/hello` прошёл, VS Code показал Build → MAME/DSS → `main` |
| Ошибочная debug-сборка, 2026-09-15 | Изолированный `fault.c` вернул код 2 от make, `file:1: error 20` сохранился, Python traceback удалён; MAME не участвует |
+2
View File
@@ -544,6 +544,8 @@ DAP-точки отклоняется. Совместный живой прог
VRAM доступны через общий bridge, что подтверждено снимком работающего `hello`;
одиночный `press_key` проверен на ожидающем `getchar()`, а `type_string`
ввёл `Ab9` и Enter в `gets()` с остановкой после печати строки;
машинный `step_instruction` принимает ограниченный `count` 1..64, не меняя
семантику DAP source-step;
остальные интерфейсы этого раздела ещё не реализованы.
Автономный MCP `start_session` поднимает DSS→EXE→`main` без VS Code;
DAP attach к созданному socket и последующий `stop_session` проверены.
+1 -1
View File
@@ -19,7 +19,7 @@
| `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` | `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-событиями |
+5
View File
@@ -164,6 +164,11 @@ C-строке. Это покрывает типовой строковый вв
`bank_pages` и generation. Живой MCP-прогон получил инструкции `main` с
адреса `0x8224`; байты до и после операции совпали. Raw program вне
текущего отображения остаётся открытым.
Машинный `step_instruction` принимает ограниченный `count=1..64`; backend
передаёт это число в native `cpu.debug:step(count)`, общий session server
сохраняет control lease и событие остановки. Живой автономный MCP-прогон
выполнил `count=3` в `main`, затем продолжил `hello` до `getchar()` и вышел
через клавишу. DAP source-step не менялся.
## Г. Сделать запуск пригодным для Codex и Claude без VS Code
+4
View File
@@ -87,6 +87,10 @@ MCP-сервером MAME и удаляет socket. Закрытие самог
возвращает принятие команды; итоговую остановку получите через
`recent_events` с курсором `last`. Логи `SDBG_LOG` приходят как события
`output`; журнал ограничен 1024 событиями и сообщает `first`/`last`/`lost`.
`step_instruction(count)` синхронно выполняет 1..64 машинных шагов
(`count=1` по умолчанию) и возвращает позицию остановки. Если раньше
сработает breakpoint, выполнение может остановиться до заданного числа.
Команды DAP F11/F10/Shift+F11 сохраняют прежнюю C-семантику.
Число 29 в attach-режиме (31 в автономном с `start_session`/`stop_session`)
не означает полного переноса более нового `-plugin mamebridge`: