/* * _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); } } }