/*
 * _cbl_pump_otir — ISR-насос CBL (путь OTIR): зовёт fill() приложения
 * за очередным блоком; при недоливе (fill вернул 0 или не задан) —
 * тишина через cbl_push_otir(), если включён CBL_UNDERRUN_SILENCE.
 *
 * Обычная (не __naked) Си-функция: вызывается из _irq_tramp.c через
 * указатель, а трамплин уже сохранил ВЕСЬ контекст (оба регистровых
 * набора + IX/IY) вокруг вызова — что бы эта функция ни наделала с
 * регистрами, трамплин восстановит всё сам после возврата.
 */

#include "_cbl.h"

void _cbl_pump_otir(void)
{
    _cbl_reqs++;
    int ok = _cbl_fill ? _cbl_fill(_cbl_block) : 0;
    if (!ok) {
        _cbl_undr++;
        if (_cbl_underrun_mode == CBL_UNDERRUN_SILENCE && _cbl_silence) {
            cbl_push_otir(_cbl_silence, _cbl_block);
        }
    }
}
