Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
6.2 KiB
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 и отказ
для неподдерживаемого типа файла.
Связанные документы: требования, архитектура, roadmap, носители тестов.
Реализация
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 намеренно создаёт неблагоприятное для
родителя состояние:
- создаёт
EXECLEFT/CREATED.TXTиEXECRGHT/PASSIVE.TXT; - оставляет CWD в
EXECLEFT; - переключает экран в 40x32;
- заменяет используемые Commander цвета ярко-зелёной/пурпурной палитрой;
- ждёт
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-файла сравнены побайтно:
PASS: child создал active/passive markers с ожидаемым содержимым.
Артефакты:
- child после изменения режима, палитры и CWD;
- Commander после восстановления и refresh обеих панелей;
- ошибка повреждённого EXE;
- отказ для обычного TXT;
- диалог выхода после EXEC;
- чистый возврат в DSS.
Размер сборки
Конфигурация: --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.