Files
Sprinter-SDCC/applications/SprPoP/docs
snark13 6dabe9b4b1 libc: пока raw-клавиатура открыта, не звать обработчик DSS — он крал наши скан-коды
Корень двух багов SprPoP (KBD-STUCK-WAIT, частично GRAB-KBD-TIMING) нашёлся
в исходниках DSS (docs/sources/Estex-DSS): обработчик прерывания DSS живёт в
IM1 по 0x0038 и ПЕРВЫМ ДЕЛОМ делает `CALL KEYSCAN`, а тот вычерпывает FIFO
SIO досуха.  Наш трамплин проверял «есть ли клавиатурный байт» один раз, на
входе в прерывание, а хвост кадрового пути уходил в DSS — значит скан-код,
прилетевший позже, доставался DSS и уезжал в его буфер.  Rx-overrun при этом
НЕ взводится (байт не потерян железом, а прочитан не тем владельцем) — отсюда
и загадка исходного диагноза: бит залип при `_kbdraw_overrun == 0`.

Измерено в MAME (брейки + totalcycles): окно 738 тактов (~34 мкс) на каждом
кадровом прерывании, из них 481 такт — пролог самого DSS.  Поэтому проверка
FIFO перед chain'ом снимает лишь треть и не годится (пробовали, кражи
продолжались); кадровый путь при открытом raw теперь заканчивается приватным
RETI, окно = 0.  Цена: на это время у DSS замирает опрос мыши и мигание
текстового курсора — зафиксировано в <kbd_raw.h>.

Пойманный случай (старая сборка): DSS прочитал 0x74 (make стрелки «вправо»)
при _kbdraw_pending = EXT, то есть посылку E0 74 разорвало пополам между
двумя владельцами канала.

Проверка: брейк на входе KEYSCAN с условием «страница точно DSS + raw открыт»
до правки срабатывал мгновенно (50/с), после — молчит; положительный контроль
на нашем RETI срабатывает сразу.

Трамплин 300 -> 310 Б (буфер W2-копии поднят 336 -> 384, запас 74 Б);
размерный эталон обновлён: +10 Б у программ, линкующих IRQ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 11:40:39 +03:00
..

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 План перевода на неё: что совпадает, что переназначить, каких функций нет вовсе

Производительность

Документ О чём
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: разбор и архитектура
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 (запечка атласа Тени).