/*
 * mem_alloc_pages_estex — выделить n смежных 16-КБ физических страниц
 * из EMM-пула через ESTEX GETMEM ($3D): B=npages → A=blk_id, CF=err.
 *
 *   in:  n — 1..255; out: blk_id (1..255) или 0 при ошибке (errno).
 *
 * blk_id непрозрачен — mem_get_page_bios() даст номера страниц,
 * mem_free_block_estex() освободит.  Id с 1; 0 = «не выделилось».
 */

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

uint8_t mem_alloc_pages_estex(uint8_t n) __naked
{
    (void)n;
    __asm
        ;; SDCC: единственный uint8-аргумент в A; ESTEX хочет n в B.
        push  ix
        ld    b, a
        ld    c, #0x3D              ; ESTEX GETMEM
        rst   #0x10
        pop   ix
        jr    c, _alloc_fail
        ret                         ; CF=0 → A = blk_id (возврат uint8 в A)
    _alloc_fail:
        call  __errno_set           ; CF=1 → A = код ошибки
        xor   a, a                  ; вернуть 0 = сигнал ошибки
        ret
    __endasm;
}
