Files
Sprinter-SDCC/applications/Volkov/docs/p4-exec-results.md
T
snark13 8e389c03f8 Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
2026-09-10 10:45:30 +03:00

101 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.