GeneveOS Memory Management Functions
Jump to navigation
Jump to search
Memory management in MDOS is available via XOP 7.
General purpose XOPs
opcode #0, return number of free pages in system
after return: r0=ERROR CODE (always zero)
r1=number of free pages
r2=number of fast free pages
opcode #1, claim pages into local map from free pages
pass: r1=number of pages
r2=local page address
r3=speed flag <>0 means FAST
return: r0=error code
r1=number of pages actually fetched
to complete map as required
r2=number of fast pages fetched
opcode #2, return pages into free pool from local map
pass: r1=number of pages
r2=local page address
return: r0=error code
opcode #3, map local page at excution page
pass: r1=local page number
r2=execution page number
return: r0=error code
opcode #4, get address map
pass: r1=execution address
r2=size of area for map
return: r0=error code
r1=count of pages reported
opcode #5, declare shared pages
pass: r1=number of pages to declare as shared
r2=local page address
r3=type to be assigned to shared pages
return: r0=error code
opcode #6, release shared pages (type)
pass: r1=type
return: r0=error code
also have to check their current execution map
opcode #7, get shared pages
pass: r1=type
r2=local page number for start of shared area
return: r0=error code
opcode #8, return size of shared page group
pass: r1=type
return: r0=error code
r1=number of pages in shared group
Privileged XOPs (only available for operating system)
opcode #9 : release task in: nil (task header at >8000)
out: nil
opcode #A : page get in: r0=>000A
r1=page number to get,
if r1h <> 0, get first available
r2=speed flag <>0 means fast
out: r0=error code
r1=pointer to node
r2=page number from node
opcode #B : add page to free pages in system
in: r0=>000B
r1=page number
out: r0= error if no free nodes available
opcode #C : add a node to the list of free nodes
in: r0=>000C
r1=pointer to node
out: no errors
opcode #D : link a node to the specified node
in: r0=>000D
r1=pointer to node
r2=pointer to node to link to
out: no errors
opcode #E, get address map (system)
return: R0= count of valid pages