Difference between revisions of "GeneveOS Memory Management Functions"
Jump to navigation
Jump to search
(Created page with "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) ...") |
|||
| Line 2: | Line 2: | ||
== General purpose XOPs == | == General purpose XOPs == | ||
=== Return number of free pages in system === | |||
opcode #0, return number of free pages in system | opcode #0, return number of free pages in system | ||
| Line 8: | Line 10: | ||
r2=number of fast free pages | r2=number of fast free pages | ||
=== Claim pages into local map from free pages === | |||
opcode #1, claim pages into local map from free pages | opcode #1, claim pages into local map from free pages | ||
| Line 17: | Line 20: | ||
to complete map as required | to complete map as required | ||
r2=number of fast pages fetched | r2=number of fast pages fetched | ||
=== Return pages into free pool from local map === | |||
opcode #2, return pages into free pool from local map | opcode #2, return pages into free pool from local map | ||
| Line 22: | Line 27: | ||
r2=local page address | r2=local page address | ||
return: r0=error code | return: r0=error code | ||
=== Map local page at excution page === | |||
opcode #3, map local page at excution page | opcode #3, map local page at excution page | ||
| Line 27: | Line 34: | ||
r2=execution page number | r2=execution page number | ||
return: r0=error code | return: r0=error code | ||
=== Get address map === | |||
opcode #4, get address map | opcode #4, get address map | ||
| Line 33: | Line 42: | ||
return: r0=error code | return: r0=error code | ||
r1=count of pages reported | r1=count of pages reported | ||
=== Declare shared pages === | |||
opcode #5, declare shared pages | opcode #5, declare shared pages | ||
| Line 39: | Line 50: | ||
r3=type to be assigned to shared pages | r3=type to be assigned to shared pages | ||
return: r0=error code | return: r0=error code | ||
=== Release shared pages (type) === | |||
opcode #6, release shared pages (type) | opcode #6, release shared pages (type) | ||
| Line 44: | Line 57: | ||
return: r0=error code | return: r0=error code | ||
also have to check their current execution map | also have to check their current execution map | ||
=== Get shared pages === | |||
opcode #7, get shared pages | opcode #7, get shared pages | ||
| Line 49: | Line 64: | ||
r2=local page number for start of shared area | r2=local page number for start of shared area | ||
return: r0=error code | return: r0=error code | ||
=== Return size of shared page group === | |||
opcode #8, return size of shared page group | opcode #8, return size of shared page group | ||
| Line 56: | Line 73: | ||
== Privileged XOPs (only available for operating system) == | == Privileged XOPs (only available for operating system) == | ||
=== Release task === | |||
opcode #9 : release task in: nil (task header at >8000) | opcode #9 : release task in: nil (task header at >8000) | ||
out: nil | out: nil | ||
=== Page get === | |||
opcode #A : page get in: r0=>000A | opcode #A : page get in: r0=>000A | ||
| Line 67: | Line 88: | ||
r1=pointer to node | r1=pointer to node | ||
r2=page number from node | r2=page number from node | ||
=== Add page to free pages in system === | |||
opcode #B : add page to free pages in system | opcode #B : add page to free pages in system | ||
| Line 72: | Line 95: | ||
r1=page number | r1=page number | ||
out: r0= error if no free nodes available | out: r0= error if no free nodes available | ||
=== Add a node to the list of free nodes === | |||
opcode #C : add a node to the list of free nodes | opcode #C : add a node to the list of free nodes | ||
| Line 77: | Line 102: | ||
r1=pointer to node | r1=pointer to node | ||
out: no errors | out: no errors | ||
=== Link a node to the specified node === | |||
opcode #D : link a node to the specified node | opcode #D : link a node to the specified node | ||
| Line 83: | Line 110: | ||
r2=pointer to node to link to | r2=pointer to node to link to | ||
out: no errors | out: no errors | ||
=== Get address map (system) === | |||
opcode #E, get address map (system) | opcode #E, get address map (system) | ||
return: R0= count of valid pages | return: R0= count of valid pages | ||
Revision as of 12:54, 11 November 2011
Memory management in MDOS is available via XOP 7.
General purpose XOPs
Return number of free pages in system
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
Claim pages into local map from 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
Return pages into free pool from local map
opcode #2, return pages into free pool from local map
pass: r1=number of pages
r2=local page address
return: r0=error code
Map local page at excution page
opcode #3, map local page at excution page
pass: r1=local page number
r2=execution page number
return: r0=error code
Get address map
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)
Release task
opcode #9 : release task in: nil (task header at >8000)
out: nil
Page get
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
Add page to free pages in system
opcode #B : add page to free pages in system
in: r0=>000B
r1=page number
out: r0= error if no free nodes available
Add a node to the list of free nodes
opcode #C : add a node to the list of free nodes
in: r0=>000C
r1=pointer to node
out: no errors
Link a node to the specified node
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
Get address map (system)
opcode #E, get address map (system)
return: R0= count of valid pages