/*
 * gfx_set_idle_hook — что вызывать, пока gfx_wait_vsync ждёт луч.
 *
 * ЗАЧЕМ.  Ожидание кадра — это самый длинный простой в кадре: у игры с
 * пейсингом «3 растровых кадра на логический тик» процессор проводит там
 * ~42 мс из 60, крутя `in a,(#0xFE)` и больше ничего не делая.  Хук
 * позволяет занять это время полезным опросом, не отнимая ни такта у
 * полезной работы.
 *
 * Первый потребитель (и повод завести) — клавиатура: приёмный FIFO SIO
 * всего 3 байта, а одно нажатие расширенной клавиши при зажатом Shift
 * даёт пачку из 5 байт («fake shift»); если импульс запроса прерывания
 * потерян, байты копятся и один теряется.  Лечится вычерпыванием по
 * опросу (`kbd_raw_poll` из <kbd_raw.h>) — но только ПЛОТНЫМ, раз в
 * ~0.5 мс, а не пару раз за кадр.  Замер: applications/PoP/roomtest/
 * TASKS.md, задача KBD-1.
 *
 * ТРЕБОВАНИЯ К ХУКУ: он зовётся в тесном цикле, поэтому обязан быть
 * дешёвым и НЕ рисовать (окно W3 в этот момент принадлежит вызывающему,
 * а не графике) и не ждать сам.  fn = 0 — снять хук.
 */
#include "../_bgi.h"

void gfx_set_idle_hook(void (*fn)(void))
{
    _gfx_idle_hook = fn;
}
