Files
Sprinter-SDCC/applications/Volkov/docs/test-media.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

5.9 KiB

Носители для тестов Commander

Дата: 8 сентября 2026 года.

Решение

Стандартный носитель интеграционных и нагрузочных тестов Commander — отдельный FAT16 HDD-образ, подключаемый к MAME как hard2. DSS видит его как диск D:; системный hard1 остаётся диском C:.

MAME качественно эмулирует механические задержки FDD. Это полезно для проверки совместимости, но делает повторяющиеся scan/copy-прогоны на порядок медленнее и не даёт пользы большинству функциональных тестов. Поэтому FDD A: сохраняется только для отдельных smoke-тестов чтения/запуска с дискеты.

Образы

Все рабочие образы Commander лежат локально в build/hdd/ и не подменяют общий mame/v306/IMG/test_hdd.chd:

make hdd          # только SPRCMD.EXE -> build/hdd/sprcmd.chd
make hdd-stress   # P3: EMPTY/MANY/BIGDIR -> build/hdd/p3_stress.chd
make hdd-copy     # P4: COPYFROM/COPYTO -> build/hdd/p4_copy.chd
make hdd-exec     # P4: EXECLEFT/EXECRGHT -> build/hdd/p4_exec.chd
make hdd-p5       # P5: 20 copy + resource cycles -> p5_stability.chd
make hdd-p5-enospc # P5: почти полный HDD -> p5_enospc.chd
make hdd-p5-panels # P5: 27/28 записей -> p5_panel_edges.chd
make hdd-p5-copy-faults # P5: copy/EXEC fault matrix -> p5_copy_faults.chd
make hdd-p5-viewer # P5: SPRCMD + реальный mdview2 -> p5_viewer.chd
make hdd-p5-media # P5: hot-unplug hard2 во время F5 -> p5_media.chd
make hdd-p6-sort # 0.2: target/UI сортировки -> p6_sort.chd
make hdd-p7-select # 0.2: target/UI выбора -> p7_select.chd
make hdd-p8-masks # 0.2: расширение того же образа масками +/−
make hdd-p9-mkdir # 0.2: validator и UI F7 mkdir -> p9_mkdir.chd
make hdd-p10-rename # 0.2: file/dir rename и UI F6 -> p10_rename.chd
make hdd-p11-delete # 0.2: confirm/cancel и UI F8 -> p11_delete.chd
make hdd-p12-group-copy # 0.2: выбранные файлы -> p12_group_copy.chd
make hdd-p13-group-delete # 0.2: выбранные файлы -> p13_group_delete.chd
make hdd-p14-default-colors # UI: dir/EXE/file -> p14_default_colors.chd
make hdd-p15-tree-copy # 0.2: recursive current dir -> p15_tree_copy.chd
make hdd-p15-tree-cancel # 0.2: cancel/cleanup -> p15_tree_cancel.chd
make hdd-p15-tree-self # 0.2: self-target guard -> p15_tree_self.chd
make hdd-p16-group-tree-copy # 0.2: multi-root F5 -> p16_group_tree_copy.chd
make hdd-p17-tree-delete # 0.2: recursive group F8 -> p17_tree_delete.chd
make hdd-p17-tree-delete-cancel # runtime Esc -> p17_tree_delete_cancel.chd
make hdd-p18-metadata # exact FAT metadata F5 -> p18_metadata.chd
make hdd-p19-overwrite # backup/rollback probe -> p19_overwrite.chd
make hdd-p19-policy # UI conflict policy -> p19_policy.chd

Сборщик toolchain/make_hdd.sh принимает как отдельные файлы, так и готовые деревья каталогов. Рекурсивное копирование дерева одной командой особенно важно для BIGDIR: 680 файлов не требуют 680 отдельных запусков mcopy.

Запуск и проверка

Lua-сценарий сначала вводит D:, а затем запускает SPRCMD.EXE. Благодаря этому текущий диск DSS и оба относительных контекста панелей находятся на тестовом HDD, а не на системном C: или медленном A:.

Пример полного теста F5:

make hdd-copy ALLOCS=3000
tests/run_mame_hdd.sh \
  build/hdd/p4_copy.chd tests/mame_p4_copy_hdd.lua \
  artifacts/mame-p4/copy-hdd-local 75
tests/check_p4_copy_hdd.sh build/hdd/p4_copy.chd

После пересборки CHD MAME требуется полностью перезапустить. Нельзя извлекать или проверять образ во время работающего MAME: окончательное состояние валидируется только после чистого выхода эмулятора.

Скриншоты подтверждают состояние интерфейса, но не заменяют файловую проверку. Для copy-теста после MAME CHD преобразуется обратно в RAW, файлы извлекаются через mtools и сравниваются с детерминированными шаблонами.

Для EXEC-теста аналогичная тройка команд использует tests/mame_p4_exec_hdd.lua и tests/check_p4_exec_hdd.sh. Все имена, которые должен открыть DSS, задаются в формате 8.3: VFAT long name на образе не является доступным DSS-именем и может отображаться как alias с ~1.

Сценарий смены носителя управляет только тестовым hard2. Перед запуском любой автоматизации проверяется, что другого экземпляра MAME Sprinter нет: одновременный доступ двух процессов к CHD запрещён. После физического unload DSS может ожидать возврата устройства внутри системного вызова; Lua возвращает тот же образ, после чего Commander получает управляемую ошибку и продолжает работу.