| Z88 Developers' Notes | ||
|---|---|---|
| Contents | Contents of System Calls | |
OS_Mal, allocate memory
RST 20H, DEFB $54
IN:
A = 0, alwaysOUT, if call successful:
BC = requested size of reserved memory in bytes (2 to 256)
IX = memory handle (returned from OS_Mop)
Fc = 0OUT, if call failed:
HL = address of memory allocated (H14 & H15 are memory are memory
mask)
B = bank number of allocated memory
C = segment specifier implied by HL (H14 & H15)
Fc = 1Registers changed after return:
A = error code:
RC_HAND ($08), IX is not a valid memory handle
RC_ROOM ($07), no room to allocate block in MEMORY POOL
RC_ERR ($0F), if BC > 256 bytes, fatal error
....DE../IXIY sameNotes:
AFBC..HL/.... different
Remember "No Room" means the pool is exhausted, and not the whole of memory. If a subsequent OS_Mop cannot allocate a pool, then memory is definitively exhausted.Bugs:
The call WILL NOT automatically bind in the allocated memory into the Z80 address space.
Related calls:
OS_Bix, Bind in extended address
OS_Box, restore bindings after OS_Bix
OS_Fc, select fast code (fast bank switching)
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