2349481b86
Часть II плана music_runtime_index_plan.md (SI0..SI4). gen/pop_sound_tbl.h БОЛЬШЕ НЕ ГЕНЕРИРУЕТСЯ: раскладка набора читается из SND/snd.idx (формат PSI1, писатель и разборщик — tools/pop_idx.py, 22 теста в make test-tools). Один и тот же sprpop.exe работает с набором SDLPoP (9 страниц) и MSDOS (10) — sha256 бинарника при смене набора не меняется. Заодно умолчание источника эффектов переведено на SDLPoP (SND_SRC=sdlpop): сборка обязана работать без оригинального дистрибутива DOS. У кого он есть, включает лучший набор явно — make SND_SRC=msdos (там полнее оцифровка: в SDLPoP звук 48 spiked пустой). Устройство: pop_snd_tbl/pop_snd_page/pop_snd_pages — резидентные данные (pop_snd_data.c), тип и инварианты — рукописный pop_snd_tbl.h. Записи читаются ОДНИМ read прямо в таблицу, поэтому sizeof(pop_snd_ent_t) == 5 стало частью дискового контракта: проверяется статически и полем размера записи в заголовке. POP_SND_PAGES как compile-time размер набора исчез — вместо него POP_SND_MAX_PAGES (вместимость, 16) и runtime pop_snd_pages. Цена: таблица переехала из _CODE в _DATA, суммарный резидент почти не изменился (куча 239 -> 229 Б); банк 8 +601 Б на чтение и валидацию. Валидация не доверяет файлу: заголовок целиком плюс каждая запись (страница, смещение, кратность блоку, непересечение с блоком тишины, выход за последнюю страницу). Последнее считается В БЛОКАХ — байтовый адрес конца не влезает в uint16, а 32-битная арифметика на Z80 дорога. НЕТ ИНДЕКСА — ЭФФЕКТОВ НЕТ, НО МУЗЫКА ИГРАЕТ. Первая версия просто возвращала ошибку, и игра становилась непроходимой: тишину льёт первый блок набора, без набора CBL не открывался, а с ним вставала музыка (её блоки считает тот же насос) — заставка ждала конца трека вечно. Теперь поднимается пустой набор с блоком тишины. Заливается ровно 128 байт и под DI: gfx_w0_page_prepare ставит в страницу IRQ-стабы, и заливка всей страницы затирала их — первое же прерывание давало чёрный экран. Грабли сборки: смена SND_SRC тихо давала неверный результат (sdlpop -> msdos -> sdlpop оставлял чужой набор в assets/packed). Причина не в логике, а в секундной гранулярности mtime. Лечение убирает время из решения: смена варианта сносит stamp'ы своего семейства, а упаковка, сборка архива и копия индекса делаются одним рецептом. То же получила и музыка (MUSIC_FMT). Проверено в MAME: таблица в памяти совпадает с файлом из образа побайтово; один EXE поднимает оба набора; отладочный --order reverse (30 из 31 записей отличаются от штатных) звучит правильно; битый индекс выключает эффекты, не роняя игру; без индекса PV-сцена проходит с музыкой; Ctrl+S работает в обоих режимах. Разбор — docs/sound_plan.md §10. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011MsUsEFAQfsjjQpJ7RtKVY
6.7 KiB
6.7 KiB
SprPoP/docs — индекс
Актуальность на 2026-08-26 (перенос из applications/PoP/roomtest).
Сюда взято только то, что ещё читают. Исполненные планы остались архивом
в ../../PoP/docs/, закрытые задачи и баги — в ../../PoP/roomtest/.
Входные точки
| Документ | О чём |
|---|---|
TASKS_OPEN.md |
Что берётся в работу сейчас — начинать отсюда |
BUGS_OPEN.md |
Открытые баги и незакрытые оптимизации |
impl_diff.md |
Осознанные расхождения с SDLPoP: где сделано не дословно и почему. Новое расхождение — записью сюда, а не только комментарием в коде |
keys.txt |
Целевая раскладка управления, к которой подгоняем SprPoP |
keys_plan.md |
План перевода на неё: что совпадает, что переназначить, каких функций нет вовсе |
../assets/orig/README.md |
Откуда берутся исходные данные: make fetch (SDLPoP + музыка), зачем нужен и почему необязателен MSDOS/, SND_SRC |
Производительность
| Документ | О чём |
|---|---|
perf_registry.md |
Реестр оптимизаций: всё отложенное одним списком |
perf_backlog.md |
Отложенная оптимизация отрисовки + как мерить (wait-state'ы, границы кадра) |
perf_green_phase.md |
ЗЕЛЁНАЯ фаза (слой фона): раскладка тактов, способы ускорения G1..G6, журнал правок |
perf_cyan_phase.md |
ЦИАН фаза (персонажи + передний слой): раскладка тактов, C1..C7, журнал правок |
perf_l11_room15.md |
Сцена и замер: факел + чомпер + страж (ур.11 к.15) |
perf_l13_room23.md |
Сцена и метод замера кадра: каскад плит (ур.13 к.23), зонды, канал clog |
resident_budget.md |
Бюджет резидента W1/W2: как мерить и как освобождать |
layout_plan_v2.md |
Раскладка кода по окнам/банкам/страницам + замеры скорости отрисовки |
Движок и содержание игры
| Документ | О чём |
|---|---|
full_game_plan.md |
Полноценная игра: автомат состояний, title/intro, demo, таймер, cutscenes, ending, Hall of Fame |
levels_plan.md |
Уровни: загрузка, переходы, тайлсеты, читы |
levels_12_15_plan.md |
Уровни 12/13 (тень, Джафар, падающие плиты) + что такое 14/15 и 0 |
midtable_analysis.md |
Слои отрисовки: back/mid/fore и objtable в оригинале, чего стоит порт |
room_model_plan.md |
kid_room ≠ drawn_room (straddle): сделан S1, остальное впереди |
quicksave_plan.md |
QuickSave/QuickLoad (реализовано): формат снимка POPQ v3 — справочник |
menu_settings_plan.md |
Pause menu и Settings, POP.CFG, VANILLA и задел под ENHANCED |
palette_plan.md |
Карта всех 256 слотов палитры + механика fade |
status_line_text.md |
Строка HP как статус-строка: инвентаризация ВСЕХ текстов SDLPoP |
sound_plan.md |
Звук через CBL: разбор и архитектура |
music_runtime_index_plan.md |
Будущее улучшение: runtime-индексы музыки и PCM-эффектов, смена аудионаборов без перелинковки EXE |
shadow_render.md |
Вид Тени (OR+XOR) — отложено: почему XOR несовместим с прозрачностью #FF |
roomnav_skip.md |
Комнаты для отладочного телепорта +/−: какие пропускать и почему |
host_tests_plan.md |
Модульные тесты движка под ucsim_z80: два шва, регрессии, дифф против SDLPoP |
Справочники по оригиналу
| Документ | О чём |
|---|---|
PORT_PLAN.md |
Общая карта фаз со статусами; §6 модель движения, §10 режим памяти |
KID_PLAN.md |
Модель персонажа: char_type, actions_*, устройство play_seq |
gates_spikes_plan.md |
Раскладка объектов по комнатам, декод LINKLOC/LINKMAP, ссылки на seg-код |
PoP/POP-DAT-FormatSpecifications.pdf |
Каноническая спецификация форматов .DAT (грепаемая копия — .txt) |
PoP/MSDOS_RESOURCE_FORMAT.md |
Наш разбор ресурсов MS-DOS-версии |
PoP/APPLEII_RESOURCE_FORMAT.md |
Наш разбор ресурсов Apple II |
Заделы
| Документ | О чём |
|---|---|
ideas_backlog.md |
Осознанно отложенные гипотезы (мышь, PRNG) |
prng_alternatives.md |
Запасные генераторы, если упрёмся в бюджет кадра |
Не переносилось
Исполнено целиком, лежит в ../../PoP/docs/: frame_pacing_plan.md
(фиксированный логический кадр), l9_invert_plan.md (зелье переворота),
shadow_atlas_plan.md (запечка атласа Тени).