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

6.2 KiB
Raw Blame History

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 намеренно создаёт неблагоприятное для родителя состояние:

  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-файла сравнены побайтно:

PASS: child создал active/passive markers с ожидаемым содержимым.

Артефакты:

Размер сборки

Конфигурация: --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.