OS_Axm, Allocate explicit memory
Register parameters
RST 20H, DEFW $C206
IN: IX = memory handle (from previous OS_Mop) B = bank (slot ORed) H = page address high byte ($00-$3F) L = number of pages to be allocated (1 to 64) OUT: Fc = 0, memory has been allocated Fc = 1, A = RC_Room if not enough space in slot(s) A = RC_Fail if bad argument Registers changed after return: ..BCDE.L/IXIY same AF....H./.... different
Notes
This call allocates a large contiguous memory area at explicit address. Refer to explicit memory allocation for further information. This system call is only available in OZ release V4.6 and newer. This call does not return H modified for OS_Mop MM_Sx segment. The caller must preserve/restore H after call, then perform segment adjustment, for example:
Manually adjust allocated offset pointer to specific segment
... ld h,0 ; any bank offset ld l,b ; B pages requested ld a, FM_FIX | FM_ANY | FM_NOF ; OS_Fma allocates an address from any slot oz OS_Fma ret c ld d,h oz OS_Axm ; allocate L pages at BH00 ld h,d ret c res 7,h set 6,h ; link offset to S1, where allocated memory will be bound (see below) ld l,0 ; allocation is on page boundary ld c,MS_S1 ; bind successfully BHL allocated memory into local S1 address space oz OS_Mpb ...
Applications should use OS_Mal for multiple page allocation, all convenience is provided there.
Related calls
OS_Axp, Allocate explicit page
OS_Bix, Bind in extended address
OS_Box, Restore bindings after OS_Bix
OS_Fc, Select fast code (fast bank switching)
OS_Fma, Find memory for allocation
OS_Fxm, Free explicit memory
OS_Mal, Allocate memory
OS_Mcl, Close memory (free memory pool)
OS_Mfr, Free (previously allocated block) memory
OS_Mgb, Get current bank binding in segment
OS_Mop, Open memory (allocate memory pool)
OS_Mpb, Set new bank binding in segment
OZ_Mgb, Get current bank binding in segment
OZ_Mpb, Set new bank binding in segment