/*
 * mem_free_block_bios — освободить блок, выданный mem_alloc_pages_bios.
 * BIOS EMM_FN3 ($C3, rst 8): A=blk_id → CF=err.
 *
 * Идемпотентности НЕТ: повторное освобождение того же блока ставит
 * errno.  Владение отслеживает вызывающий.
 */

#include <stdint.h>
#include <sprinter_mem.h>

void mem_free_block_bios(uint8_t blk_id) __naked
{
    (void)blk_id;
    __asm
        ;; SDCC: единственный uint8-аргумент уже в A.
        push  ix
        ld    c, #0xC3              ; BIOS EMM_FN3 (FREE)
        rst   #0x08
        pop   ix
        ret   nc                    ; CF=0 → успех
        jp    __errno_set           ; CF=1 → A = код; tail-call хелпера
    __endasm;
}
