/* * 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 #include 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; }