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