# Sprinter Commander: результаты двухпанельного skeleton P2 Дата: 6 сентября 2026 года. Статус: многоцветный skeleton `PASS` в MAME; файловая система и аппаратная проверка ожидаются. Связанные документы: [архитектура](commander-architecture.md), [roadmap](commander-roadmap.md), [экранный backend](p2-screen-backend.md), [результаты P2.1](p2-screen-probe-results.md) ## 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](../artifacts/mame-p2/skeleton-color/initial-left-active.png) | | `Tab` | `[ACTIVE]` и `>` перешли на правую панель | [PASS](../artifacts/mame-p2/skeleton-color/tab-right-active.png) | | `PgDn`, `Down` | правая панель показывает строки 002–028, cursor/top `28/2`; сосед и рамки неподвижны | [PASS](../artifacts/mame-p2/skeleton-color/navigation-scroll.png) | | `F10` | красный диалог подтверждения поверх модели | [PASS](../artifacts/mame-p2/skeleton-color/quit-dialog.png) | | `N` | обе панели и тема полностью восстановлены из EMM | [PASS](../artifacts/mame-p2/skeleton-color/quit-cancelled-restored.png) | | `F1`, `Esc` | общий message dialog открылся и восстановил экран | [PASS](../artifacts/mame-p2/skeleton-color/reserved-command-dialog.png), [после закрытия](../artifacts/mame-p2/skeleton-color/message-closed-restored.png) | | повторный `F10`, `Enter` | палитра восстановлена, штатный выход в DSS | [PASS](../artifacts/mame-p2/skeleton-color/clean-exit-dos.png) | | второй запуск после выхода | приложение снова инициализировало EMM и тему | [PASS](../artifacts/mame-p2/skeleton-color/repeat-second-launch.png) | | второй cleanup | возврат в DSS без сообщения об утечке EMM | [PASS](../artifacts/mame-p2/skeleton-color/repeat-second-clean-exit.png) | ## 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: заменить синтетические строки настоящими независимыми каталогами.