Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
4.2 KiB
Sprinter Commander: выбор записей 0.2/P7
Дата: 8 сентября 2026 года.
Статус: PASS в MAME 0.288 / BIOS 3.06 / DSS 1.71.57 на HDD D:.
Контракт
Insertменяет выбор текущей обычной записи и передвигает cursor вниз;*инвертирует выбор только файлов текущей панели;- файлы и каталоги можно выбирать, синтетический
..и виртуальный маркер DSS нельзя; - групповые
+,-и*игнорируют каталоги и не снимают выбор, ранее поставленный с каталога черезInsert; - выбранная запись отмечается
*слева от имени; - footer активной панели показывает
<bytes> bytes in <count> selected, а общая строка информации пока сохраняет компактноеsel размер/количество; - размер каталога в этой статистике равен нулю: рекурсивный подсчёт появится вместе с групповой job;
- сортировка переносит
SC_ENTRY_SELECTEDвместе с записью и сохраняет текущий файл под cursor; - refresh текущего среза явно очищает выбор; режим сортировки сохраняется;
- панели имеют независимые EMM-страницы и независимую статистику.
Функции выбора находятся в BANK1 и работают только через
sc_store_get/put; указатель на W3 не сохраняется. Для toggle и invert
используется один банковый entry point, чтобы не плодить resident thunk’и.
Проверка
Target-проба SELRT.EXE проверяет Insert двух файлов, точную сумму 30,
отказы для ../DSS-маркера, две инверсии, выбор каталога, сброс статистики
через sc_store_clear() и возврат EMM. Результат извлекается из CHD:
PASS: Insert/invert/masks, virtual guards, totals, refresh и EMM.
UI-сценарий выбирает два каталога и A.BIN, меняет порядок на N-,
инвертирует выбор и перечитывает каталог. Контрольные состояния:
- виртуальная запись не выбирается;
- три записи,
sel 10/003; - сортировка сохранила flags и cursor;
- инверсия файлов не изменила ранее выбранные каталоги,
sel 50/004; - refresh очистил выбор и сохранил
N-; - штатный возврат в DSS.
Размер
Конфигурация --memory big --safe --max-allocs 3000:
| Область | После P6 | После P7 | Изменение |
|---|---|---|---|
_CODE W2 |
9125 | 9434 | +309 |
| данные W2 | 3244 | 3256 | +12 |
| свободная куча W2 | 2479 | 2158 | -321 |
| BANK1 | 5137 | 6033 | +896 |
| BANK2 | 6053 | 6213 | +160 |
SPRCMD.EXE |
42702 | 43011 | +309 |
Первый вариант имел два банковых entry point и оставлял 2069 байт heap. После объединения и сокращения резидентных сообщений финальная сборка возвращает 2158 байт. Межбанковый аудит чистый.
Воспроизведение
make hdd-p7-select ALLOCS=3000
tests/run_mame_hdd.sh build/hdd/p7_select.chd \
tests/mame_p7_select.lua artifacts/mame-p7/local 65
tests/check_p7_select_hdd.sh build/hdd/p7_select.chd