GeneveOS Memory Management Functions
Memory management in MDOS is available via XOP 7.
General purpose XOPs
Return number of free pages in system
Opcode: 0
| Input | Output | |
|---|---|---|
| R0 | Opcode (0000) | Error code (always 0) | 
| R1 | Number of free pages | |
| R2 | Number of fast free pages | 
Claim pages into local map from free pages
Opcode: 1
| Input | Output | |
|---|---|---|
| R0 | Opcode (0001) | Error code | 
| R1 | Number of pages | Number of pages actually fetched to complete map as required | 
| R2 | Local page address | Number of fast pages fetched | 
| R3 | Speed flag (0 is slow, else fast) | 
Return pages into free pool from local map
Opcode: 2
| Input | Output | |
|---|---|---|
| R0 | Opcode (0002) | Error code | 
| R1 | Number of pages | |
| R2 | Local page address | 
Map local page at excution page
Opcode: 3
| Input | Output | |
|---|---|---|
| R0 | Opcode (0003) | Error code | 
| R1 | Local page number | |
| R2 | Execution page number | 
Get address map
Opcode: 4
| Input | Output | |
|---|---|---|
| R0 | Opcode (0004) | Error code | 
| R1 | Execution address | Count of pages reported | 
| R2 | Size of area for map | 
Opcode: 5
| Input | Output | |
|---|---|---|
| R0 | Opcode (0005) | Error code | 
| R1 | Number of pages to declare as shared | |
| R2 | Local page address | |
| R3 | Type to be assigned to shared pages | 
Opcode: 6
| Input | Output | |
|---|---|---|
| R0 | Opcode (0006) | Error code | 
| R1 | Type | 
Also have to check their current execution map
Opcode: 7
| Input | Output | |
|---|---|---|
| R0 | Opcode (0007) | Error code | 
| R1 | Type | |
| R2 | Local page number for start of shared area | 
Opcode: 8
| Input | Output | |
|---|---|---|
| R0 | Opcode (0008) | Error code | 
| R1 | Type | 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