Files
Sprinter-SDCC/applications/PoP/docs/ideas_backlog.md
T
snark13 4f7d9c0596 PoP docs: запасные PRNG (LFSR/LCG, xorshift(7,9,8)) + оценка потолка выигрыша
Тексты обеих Z80-процедур, разбор их устройства и качества, почему НЕ берём
8-битный RND Apple II (вырожденные младшие биты — раскладка кладки читает
prandom(1), вышла бы шахматка), и главное — сколько это реально даст.

Потолок выигрыша 2 814 тактов за кадр (0.65 %): тело генератора уже не
основной расход, остаются обёртка pop_prandom, pop_rnd_fit и ABI вызова.
Поэтому первый шаг, если упрёмся, — слить приведение к диапазону в ту же
asm-процедуру (один call вместо трёх), и только потом менять генератор.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 17:10:35 +03:00

3.6 KiB
Raw Blame History

Идеи и вопросы «на подумать» (PoP)

Не план работ, а список того, что осознанно отложено: каждая запись — гипотеза с причиной, по которой её стоит проверить, и с тем, что мешает сделать это прямо сейчас.

Заменить генератор псевдослучайных чисел

Сейчас стоит LCG оригинала, шаг на ассемблере (~1 020 тактов), бит-в-бит совместимый с SDLPoP. Есть более дешёвые Z80-генераторы (86–148 тактов), но потолок выигрыша — 2 814 тактов за кадр, 0.65 %, и он растворяется в обёртках вызова. Тексты процедур, разбор качества и порядок действий — prng_alternatives.md. Первый шаг там не про генератор: слить приведение к диапазону в ту же asm-процедуру, чтобы на вызов был один call, а не три.

Отключать мышь на время игры

Гипотеза. Мышь на Sprinter — источник прерываний (обёртки RST 30h, см. memory mouse_api). Игре она не нужна вообще: управление — raw-клавиатура (<kbd_raw.h>), которую мы и так забираем у DSS целиком. Значит каждое мышиное прерывание за кадр — украденные такты в бюджете, который у нас и без того занят на 86 %.

Откуда взялось (2026-07-30). При замере бюджета по 100 кадрам три кадра выбились до 552–647 К тактов (1.28–1.51 кадра) при типичных 371 К. Причиной оказалось движение мыши на ХОСТЕ: при неподвижной мыши 225 кадров подряд прошли без единого превышения. То есть эффект реальный и измеримый, просто в тесте он был наведён извне.

Что проверить.

  1. Есть ли у драйвера мыши (RST 30h) функция «выключить/включить» — разобрать список из 14 обёрток; если нет явной, посмотреть, что делает «hide cursor» и снимает ли она обработчик.
  2. Сколько тактов реально стоит одно мышиное прерывание на нашем железе (замер: breakpoint на входе ISR + totalcycles, при движении мыши).
  3. Не ломает ли отключение выход в DSS: состояние обязано восстанавливаться при exit, включая аварийный (atexit).

Почему не сейчас. Выигрыш проявляется только когда игрок реально двигает мышью, то есть в норме его нет; а риск оставить систему без мыши после выхода — заметный. Делать после того, как закроем стражей и займёмся бюджетом всерьёз (там же, где батчинг кроссбанковых вызовов и возможный возврат pop_bg в резидент --w3).