/*
 * mem_get_page_bios — перевести пару (блок, индекс страницы) в номер
 * физической 16-КБ страницы (годен для OUT в PORT_PAGE_W1/W2/W3 или
 * bank_*-хелперов).  BIOS EMM_FN4 ($C4, rst 8): A=blk, B=idx → A=page,
 * CF=err.
 *
 *   in:  blk_id — id от mem_alloc_pages_*; idx — 0..(n-1).
 *   out: номер физической страницы (1..255); 0 при ошибке (errno).
 */

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

uint8_t mem_get_page_bios(uint8_t blk_id, uint8_t idx) __naked
{
    (void)blk_id; (void)idx;
    __asm
        ;; 2 аргумента uint8/uint8: blk_id → A, idx → L.
        push  ix
        ld    b, l                  ; BIOS хочет idx в B
        ;; A всё ещё держит blk_id
        ld    c, #0xC4              ; BIOS EMM_GETPAGE
        rst   #0x08
        pop   ix
        ret   nc                    ; CF=0 → A = физ. страница (возврат)
        ;; CF=1 → A = код; ставим errno, возвращаем 0 как сигнал.
        call  __errno_set
        xor   a, a
        ret
    __endasm;
}
