/* * mem_info_estex — состояние EMM-аллокатора через ESTEX INFOMEM ($3C): * HL=всего страниц, BC=свободно. * * *total ← всего 16-КБ физических страниц в системе * *free_pages ← сколько сейчас доступно * * Оба указателя должны быть валидными uint16_t. Ошибок нет. */ #include #include void mem_info_estex(uint16_t *total, uint16_t *free_pages) __naked { (void)total; (void)free_pages; __asm ;; HL = total ptr, DE = free_pages ptr на входе. ;; RST 10 портит оба — прячем на стек через вызов. push ix push hl ; потом [SP+2] = total_ptr push de ; TOS [SP+0] = free_pages_ptr ld c, #0x3C ; ESTEX INFOMEM → HL = total, BC = free rst #0x10 pop de ; DE = free_pages_ptr ld a, c ld (de), a inc de ld a, b ld (de), a ; *free_pages = BC pop de ; DE = total_ptr ld a, l ld (de), a inc de ld a, h ld (de), a ; *total = HL pop ix ret __endasm; }