Files
Sprinter-SDCC/applications/Volkov/docs/p2-skeleton-results.md
T
snark13 8e389c03f8 Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
2026-09-10 10:45:30 +03:00

99 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` | правая панель показывает строки 002028, 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: заменить синтетические строки настоящими независимыми каталогами.