/* * cbl_close — выключить CBL, снять хук насоса, освободить буфер * тишины (если был аллоцирован под CBL_UNDERRUN_SILENCE) и отпустить * IM2-таблицу. Идемпотентно; вызывается и из atexit. * * Порт 0x004E не гасится напрямую — вместо этого _cbl_port_sync() * пересчитывает нужное значение: если gfx_wait_vsync() ещё держит * ссылку (_cbl_port_refs > 0), останется "немой" режим ради бита * синхронизации; иначе порт гасится полностью. */ #include #include "_cbl.h" #include "../irq/_irq.h" void cbl_close(void) { if (!_irq_cbl_hook) return; IRQ_DISABLE(); _irq_cbl_hook = 0; IRQ_ENABLE(); _cbl_port_sync(); free(_cbl_silence); _cbl_silence = 0; _irq_table_unref(); }