4f7d9c0596
Тексты обеих 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>
44 lines
3.6 KiB
Markdown
44 lines
3.6 KiB
Markdown
# Идеи и вопросы «на подумать» (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`).
|