# Sprinter Commander: результаты запуска EXE P4.2 Дата: 8 сентября 2026 года. Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`. Выполнены требования `REQ-EXEC-01..06`: запуск по `Enter`, возврат в Commander после изменившей окружение программы, обработка плохого EXE и отказ для неподдерживаемого типа файла. Связанные документы: [требования](commander-requirements.md), [архитектура](commander-architecture.md), [roadmap](commander-roadmap.md), [носители тестов](test-media.md). ## Реализация - `Enter` запускает только обычную запись с расширением `.EXE` без учёта регистра; каталог, маркер предела DSS и иной тип файла не передаются EXEC; - полный путь строится в резидентной памяти, ESTEX `EXEC $40` вызывается с `B=1` и синхронно возвращает код завершения в диапазоне `00..FF`; - перед запуском сохраняются текущий диск и 256-байтный CWD; - child получает каталог активной панели как CWD, что позволяет программам без аргументов открывать соседние файлы; затем CWD Commander возвращается; - одновременный copy job запрещён; пути временно используют уже существующие строковые поля `ScCopyJob`, поэтому EXEC не добавил два новых буфера в W2; - после child восстанавливаются диск/CWD, режим 80x32 и восемь записей палитры Commander во всех четырёх planes; - повторная установка темы не перезаписывает снимок исходной системной палитры, который нужен штатному cleanup; - обе панели перечитываются, затем экран полностью строится из EMM-модели; - успешный статус показывает код завершения, ошибка загрузчика — имя и `errno`; Commander остаётся управляемым. Низкоуровневая обёртка находится в `sc_platform_exec.c`, а холодная оркестрация и форматирование статуса — в `sc_exec_ui.c` (BANK2). ## Интеграционный child `tests/p4_exec_child/p4child.exe` намеренно создаёт неблагоприятное для родителя состояние: 1. создаёт `EXECLEFT/CREATED.TXT` и `EXECRGHT/PASSIVE.TXT`; 2. оставляет CWD в `EXECLEFT`; 3. переключает экран в 40x32; 4. заменяет используемые Commander цвета ярко-зелёной/пурпурной палитрой; 5. ждёт `Enter` и возвращает код `5A`. Имена каталогов теста строго соответствуют 8.3. Промежуточный вариант `EXECRIGHT` оказался VFAT long name и был виден DSS как `EXECRI~1`; отказ `chdir("EXECRIGHT")` был ошибкой fixture, а не доказательством дефекта DSS. ## Матрица MAME Образ создаёт `tests/make_p4_exec_hdd.sh`, сценарий выполняет `tests/mame_p4_exec_hdd.lua`, итоговое содержимое проверяет `tests/check_p4_exec_hdd.sh`. | Сценарий | Результат | |---|---| | `P4CHILD.EXE` | child показал `active=0 passive=0` и CWD `\\EXECLEFT` | | возврат из child | Commander снова в 80x32 с исходной темой; статус содержит `5A` | | refresh активной панели | появился `CREATED.TXT`, размер 19 | | refresh пассивной панели | появился `PASSIVE.TXT`, размер 27 | | `BROKEN.EXE` | показано `Cannot execute BROKEN.EXE (errno 17)`; приложение продолжило работу | | `NOTE.TXT` | показано имя объекта и явный отказ: поддерживаются только `.EXE` | | cleanup/exit | диалог работает; системная палитра восстановлена; возврат в `D:\>` | После остановки MAME CHD был извлечён и оба marker-файла сравнены побайтно: ```text PASS: child создал active/passive markers с ожидаемым содержимым. ``` Артефакты: - [child после изменения режима, палитры и CWD](../artifacts/mame-p4/exec/child-mode-palette-cwd.png); - [Commander после восстановления и refresh обеих панелей](../artifacts/mame-p4/exec/commander-restored-both-panels.png); - [ошибка повреждённого EXE](../artifacts/mame-p4/exec/broken-exe-error.png); - [отказ для обычного TXT](../artifacts/mame-p4/exec/unsupported-file.png); - [диалог выхода после EXEC](../artifacts/mame-p4/exec/quit-after-exec.png); - [чистый возврат в DSS](../artifacts/mame-p4/exec/clean-dss-return.png). ## Размер сборки Конфигурация: `--memory big --safe --max-allocs 3000`. | Область | Размер | |---|---:| | `_CODE` W2 | 8870 байт | | данные W2 | 3240 байт | | свободная куча W2 | 2738 байт | | стек | 1279 байт | | BANK1: scan/sort/copy job | 4242 / 16384 байт | | BANK2: draw/copy/EXEC UI | 5973 / 16384 байт | | `SPRCMD.EXE` | 42447 байт | `check_bank_calls.py` — чисто. Таблица актуализирована по финальной сборке P5 после исправления режима `O_RDONLY` в libc; P4.1 и P4.2 вместе закрывают критерий выхода P4.