Difference between revisions of "GeneveOS Memory Management Functions"

From Ninerpedia
Jump to navigation Jump to search
Line 189: Line 189:
=== Release task ===
=== Release task ===


opcode #9 : release task    in: nil        (task header at >8000)
'''Opcode: 9'''
                            out: nil
 
{| class="plaincr"
|-
|
! Input !! Output
|-
| R0
| Opcode (0009) ||
|-
|}
 
Task header at >8000


=== Page get ===
=== Page get ===


opcode #A : page get  in:  r0=>000A
'''Opcode: 10'''
                            r1=page number to get,
 
                                if r1h <> 0, get first available
{| class="plaincr"
                            r2=speed flag   <>0 means fast
|-
                      out:  r0=error code
|
                            r1=pointer to node
! Input !! Output
                            r2=page number from node
|-
| R0
| Opcode (000A) || Error code
|-
| R1
| Page number to get (if high byte not 0, get first available) || Pointer to node
|-
| R2
| Speed flag (0 is slow, else fast) || Page number from node
|-
|}


=== Add page to free pages in system ===
=== Add page to free pages in system ===


opcode #B : add page to free pages in system
'''Opcode: 11'''
              in:      r0=>000B
 
                        r1=page number
{| class="plaincr"
              out:      r0= error if no free nodes available
|-
|
! 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 ===
=== Add a node to the list of free nodes ===


opcode #C : add a node to the list of free nodes
'''Opcode: 12'''
              in:      r0=>000C
 
                        r1=pointer to node
{| class="plaincr"
              out:  no errors
|-
|
! Input !! Output
|-
| R0
| Opcode (000C) || Error code (always 0000)
|-
| R1
| Pointer to node ||
|-
|}


=== Link a node to the specified node ===
=== Link a node to the specified node ===


opcode #D : link a node to the specified node
'''Opcode: 13'''
              in:      r0=>000D
 
                        r1=pointer to node
{| class="plaincr"
                        r2=pointer to node to link to
|-
              out:  no errors
|
! Input !! Output
|-
| R0
| Opcode (000D) || Error code (always 0000)
|-
| R1
| Pointer to node ||
|-
| R2
| Pointer to node to link to ||
|-
|}


=== Get address map  (system) ===
=== Get address map  (system) ===


opcode #E, get address map  (system)
'''Opcode: 14'''
      return:          R0= count of valid pages
 
{| class="plaincr"
|-
|
! Input !! Output
|-
| R0
| Opcode (000E) || Count of valid pages
|-
|}


[[Category:Geneve]]
[[Category:Geneve]]
[[Category:MDOS]]
[[Category:MDOS]]
[[Category:Programming]]
[[Category:Programming]]

Revision as of 14:28, 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 (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

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 (0 is slow, else 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