|   |   | 
| Line 99: | Line 99: | 
|  | |- |  | |- | 
|  | | R1 |  | | R1 | 
|  | | Execution address || Count of pages reported |  | | Pointer to buffer || Count of pages reported | 
|  | |- |  | |- | 
|  | | R2   |  | | R2   | 
		Revision as of 14:47, 11 November 2011
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 (if not 0, only 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 | Pointer to buffer | Count of pages reported | 
| R2 | Size of area for map |  | 
Declare shared pages
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 |  | 
Release shared pages (type)
Opcode: 6
|  | Input | Output | 
| R0 | Opcode (0006) | Error code | 
| R1 | Type |  | 
Also have to check their current execution map
Get shared pages
Opcode: 7
|  | Input | Output | 
| R0 | Opcode (0007) | Error code | 
| R1 | Type |  | 
| R2 | Local page number for start of shared area |  | 
Return size of shared page group
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
|  | Input | Output | 
| R0 | Opcode (0009) |  | 
Task header at >8000
Page get
Opcode: 10
|  | Input | Output | 
| R0 | Opcode (000A) | Error code | 
| R1 | Page number to get (if high byte not 0, get first available) | Pointer to node | 
| R2 | Speed flag (if not 0, only fast) | Page number from node | 
Add page to free pages in system
Opcode: 11
|  | Input | Output | 
| R0 | Opcode (000B) | Error code (if no free nodes available) | 
| R1 | Page number | Pointer to node | 
Add a node to the list of free nodes
Opcode: 12
|  | Input | Output | 
| R0 | Opcode (000C) | Error code (always 0000) | 
| R1 | Pointer to node |  | 
Link a node to the specified node
Opcode: 13
|  | Input | Output | 
| R0 | Opcode (000D) | Error code (always 0000) | 
| R1 | Pointer to node |  | 
| R2 | Pointer to node to link to |  | 
Get address map  (system)
Opcode: 14
|  | Input | Output | 
| R0 | Opcode (000E) | Count of valid pages |