Volkov: добавить Sprinter Commander

Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
This commit is contained in:
2026-09-10 10:45:30 +03:00
parent 05bcd8197e
commit 8e389c03f8
870 changed files with 21310 additions and 25 deletions
@@ -0,0 +1,69 @@
# Sprinter Commander: выбор по маске 0.2/P8
Дата: 8 сентября 2026 года.
Статус: `PASS` в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD `D:`.
## Реализация
Обычный `+` открывает `Select by mask`, обычный `-``Unselect by mask`.
Начальное значение `*.*`; Enter применяет действие, Esc отменяет его без
изменения панели. Доступны wildcard `*` и `?`, сравнение ASCII-букв не зависит
от регистра. Как в DOS, `*.*` означает все имена файлов, включая имена без точки.
Все групповые операции `+`, `-`, `*` игнорируют каталоги; синтетический `..` и виртуальный
маркер DSS также не участвуют. Выбор, поставленный на каталог отдельным `Insert`, не меняется.
Модальный редактор не использует консольные окна или прямой VRAM. Диалог и
поле находятся в общей EMM-модели Commander и выводятся координатными
функциями. Реализованы insertion в позиции cursor, Backspace, Delete,
Left/Right, Home/End, Enter и Esc. Для текущих DSS 8.3-масок ввод ограничен
12 символами; тот же editor будет переиспользован командами F7/F6 и
командной строкой.
Существующий `sc_dialog.c` вместе с новым editor перенесён из HOME в BANK2.
Mask matcher находится в BANK1 рядом с выбором; приложение передаёт ему
резидентный scratch-буфер copy job, пока файловая job не активна.
## Проверка
Target-часть проверяет:
- `*.bin` в нижнем регистре против имён верхнего регистра;
- `?.b?n`;
- `*.*` для файла без точки и неизменность каталога;
- последовательное set/clear с точными count/size;
- неизменность `..` и DSS-маркера.
UI-сценарий редактирует `*.*` в `*.bin`, получает три выбранных файла и
`sel 60/003`, затем снимает `b.bin`, получая `sel 40/002`. Следующий диалог
закрывается Esc, состояние не меняется.
- [диалог с `*.*`](../artifacts/mame-p8/masks/default-dialog.png);
- [поле после редактирования в `*.bin`](../artifacts/mame-p8/masks/edited-bin-mask.png);
- [три BIN выбраны](../artifacts/mame-p8/masks/bin-selected.png);
- [`b.bin` снят](../artifacts/mame-p8/masks/b-unselected.png);
- [Esc сохранил выбор](../artifacts/mame-p8/masks/cancel-preserves.png);
- [штатный cleanup](../artifacts/mame-p8/masks/clean-dss-return.png).
## Размер
| Область | После P7 | После P8 | Изменение |
|---|---:|---:|---:|
| `_CODE` W2 | 9434 | 9416 | -18 |
| данные W2 | 3256 | 3256 | 0 |
| свободная куча W2 | 2158 | 2176 | +18 |
| BANK1 | 6033 | 6451 | +418 |
| BANK2 | 6213 | 7268 | +1055 |
| `SPRCMD.EXE` | 43011 | 42993 | -18 |
Несмотря на новую функцию, HOME стал меньше благодаря переносу диалогов.
Оба банка имеют более 9 КБ резерва; межбанковый аудит чистый.
## Воспроизведение
```sh
make hdd-p8-masks ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p7_select.chd \
tests/mame_p7_select.lua artifacts/mame-p8/local 80
tests/check_p7_select_hdd.sh build/hdd/p7_select.chd
```