Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# Sprinter Commander: рекурсивный group F5 0.2/P16
|
||||
|
||||
Дата: 9 сентября 2026 года.
|
||||
|
||||
Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`.
|
||||
|
||||
## Реализованный контракт
|
||||
|
||||
При групповом F5 Commander сначала последовательно копирует выбранные файлы,
|
||||
а затем добавляет все выбранные каталоги текущего уровня как независимые
|
||||
roots в одну traversal queue P15. Для каждого root действует тот же контракт:
|
||||
|
||||
- breadth-first обход и пустые каталоги;
|
||||
- crash-safe temp/commit для файлов;
|
||||
- cancel между файлами, каталогами и 4-КБ блоками;
|
||||
- no-overwrite и self-target guard;
|
||||
- один динамический EMM-блок очереди на всю группу;
|
||||
- один refresh passive panel после операции.
|
||||
|
||||
Если top-level файл даёт ошибку или cancel до запуска обхода, directory roots
|
||||
остаются `unprocessed`. При ошибке одного tree root операция останавливается;
|
||||
уже committed-файлы и созданные каталоги сохраняются.
|
||||
|
||||
Это не меняет семантику `+`, `-`, `*`: групповые команды выделения по-прежнему
|
||||
игнорируют каталоги. Каталог может попасть в F5-группу только после отдельного
|
||||
`Insert`.
|
||||
|
||||
## Проверка
|
||||
|
||||
В active panel вручную выбраны `ADIR`, `BDIR` и `ROOT.BIN`; `KEEP.TXT`
|
||||
оставлен невыбранным. Два root-каталога содержат по файлу, а `ADIR` — ещё и
|
||||
пустой вложенный каталог. UI сообщил:
|
||||
|
||||
```text
|
||||
Tree copied: 3 files; 3 dirs.
|
||||
```
|
||||
|
||||
Внешний checker сравнил target с точным ожидаемым множеством и подтвердил
|
||||
отсутствие `KEEP.TXT` и temp:
|
||||
|
||||
```text
|
||||
PASS: selected file and two directory roots copied exactly.
|
||||
```
|
||||
|
||||
Контрольные состояния:
|
||||
|
||||
- [два каталога и файл выбраны](../artifacts/mame-p16/group-tree/selected-roots.png);
|
||||
- [группа скопирована](../artifacts/mame-p16/group-tree/copied.png);
|
||||
- [passive panel перечитана](../artifacts/mame-p16/group-tree/passive-refreshed.png);
|
||||
- [чистый возврат в DSS](../artifacts/mame-p16/group-tree/clean-dss-return.png).
|
||||
|
||||
## Компоновка
|
||||
|
||||
`_CODE` W2, DATA, BANK1 и размер EXE не изменились относительно P15. BANK2
|
||||
вырос с 14547 до 14918 байт (+371); остаётся 1466 байт. Итоговая сборка:
|
||||
|
||||
```text
|
||||
_CODE 9503; DATA 3524; heap 1821
|
||||
BANK1 9687/16384; BANK2 14918/16384
|
||||
SPRCMD.EXE 43080
|
||||
```
|
||||
|
||||
Межбанковый аудит чист.
|
||||
|
||||
## Воспроизведение
|
||||
|
||||
```sh
|
||||
make hdd-p16-group-tree-copy ALLOCS=3000
|
||||
tests/run_mame_hdd.sh build/hdd/p16_group_tree_copy.chd \
|
||||
tests/mame_p16_group_tree_copy.lua artifacts/mame-p16/local 60
|
||||
tests/check_p16_group_tree_copy_hdd.sh build/hdd/p16_group_tree_copy.chd
|
||||
```
|
||||
Reference in New Issue
Block a user