Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места. Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
7.1 KiB
Sprinter Commander: результаты двухпанельного skeleton P2
Дата: 6 сентября 2026 года.
Статус: многоцветный skeleton PASS в MAME; файловая система и аппаратная
проверка ожидаются.
Связанные документы: архитектура, roadmap, экранный backend, результаты P2.1
1. Реализованная граница
build/sprcmd.exe — первая запускаемая форма Commander, а не очередная
платформенная проба. В ней уже разделены:
ScApp, инициализация, главный цикл и идемпотентное состояние cleanup;- три EMM-страницы: левая панель, правая панель и screen model;
sc_screen— единственный владелец модели 80x32(char, attr);sc_video_system—WINRESTи прямоугольныйSCROLLбез BIOS-окон;- renderer двух панелей, status и строки функциональных клавиш;
- нормализованные
ScKeyEventиScCommand; - навигация по синтетическим P2-записям, включая системный scroll;
- единая модальная поверхность для сообщений и подтверждения выхода.
Синтетические строки нужны только для проверки cursor/top и scroll. Они не
являются подменой каталога: ffirst/fnext skeleton не вызывает, настоящий
источник файлов добавляется в P3.
2. Сборка
Команда: make, конфигурация --memory big --safe.
| Область | Значение |
|---|---|
_CODE |
7 129 байт (0x8100..0x9CD9) |
| данные | 443 байта (конец 0x9E94) |
| EXE | 7 675 байт |
| heap после статики | 7 276 байт |
| стек | 1 279 байт |
Банков кода skeleton пока не требует. Контракты уже рассчитаны на big, а
холодные функции будут переноситься в W1 по мере появления P3/P4-кода.
3. MAME-сценарий
Окружение: MAME 0.287 (b0c4527c), машина sprinter, BIOS v3.06.
Сценарий воспроизводится файлом tests/mame_p2_skeleton.lua.
| Действие | Наблюдение | Результат |
|---|---|---|
| Первый экран | две многоцветные панели 80x32, левая [ACTIVE], cursor/top 0/0 |
PASS |
Tab |
[ACTIVE] и > перешли на правую панель |
PASS |
PgDn, Down |
правая панель показывает строки 002–028, cursor/top 28/2; сосед и рамки неподвижны |
PASS |
F10 |
красный диалог подтверждения поверх модели | PASS |
N |
обе панели и тема полностью восстановлены из EMM | PASS |
F1, Esc |
общий message dialog открылся и восстановил экран | PASS, после закрытия |
повторный F10, Enter |
палитра восстановлена, штатный выход в DSS | PASS |
| второй запуск после выхода | приложение снова инициализировало EMM и тему | PASS |
| второй cleanup | возврат в DSS без сообщения об утечке EMM | PASS |
4. Проверка ресурсов
В начале sc_app_init() сохраняет mem_info.total/free, затем выделяет один
блок из трёх страниц. sc_app_cleanup() освобождает блок, повторяет
mem_info() и возвращает ошибку, если оба значения не восстановились. При
ошибке основной модуль печатает отдельное сообщение и возвращает код 4.
В MAME этого сообщения не было ни после первого, ни после второго процесса. Второй процесс успешно выделил тот же объём и полностью отрисовался. Таким образом, проверка включает и внутреннее сравнение счётчиков, и повторный запуск с чистого состояния.
5. Экран и палитра
Skeleton не открывает BIOS window descriptors и не обращается к VRAM напрямую. Панели и диалоги — прямоугольники в собственной EMM-модели.
Системные BIOS/ESTEX-вызовы палитры не запрещены. Первый зафиксированный
skeleton намеренно отображал все semantic attributes системным 0x30, чтобы
изолировать проверку приложения. После успешной отдельной пробы P2.2 добавлен
sc_theme: разные смысловые атрибуты, save/set всех четырёх планов и restore
при cleanup. Renderer и формат экранной модели при этом не изменились.
Интеграционный MAME-сценарий прошёл с белыми/жёлтыми/светло-голубыми элементами на синем фоне, чёрным на cyan/lightgray и белыми красными диалогами. Второй запуск подтвердил повторную инициализацию темы после её восстановления первым процессом.
6. Следующие работы
- повторить палитровую пробу P2.2 на реальном Sprinter;
- повторная инициализация
sc_videoпосле child, сменившего видеорежим; - измерение full/row/scroll present;
- аппаратный прогон P2.1 и skeleton;
- P3: заменить синтетические строки настоящими независимыми каталогами.