OS-9 Assembly Code Development: Difference between revisions
Line 1: | Line 1: | ||
== Overview == | == Overview == | ||
Each process in | Each process in NitrOS-9 is allocated its own 64K address space. When run, the program object code is loaded into one memory space, and the variables and data structures are loaded into the other. This includes separate execution and data directories and std in, std out and std err for each process. In addition, NitrOS-9 keeps an separate per-process MMU table (DAT Image). So it is important to use the OS-9 calls <code>F$MapBlk</code> and <code>F$ClrBlk</code> calls to map in memory blocks with the MMU. | ||
When a new process is created, registers U, Y, DP and SP are set with U = start of data area, Y = end of data area, DP = page # of beginning page, SP = end of data area + 1. | When a new process is created, registers U, Y, DP and SP are set with U = start of data area, Y = end of data area, DP = page # of beginning page, SP = end of data area + 1. | ||
Line 56: | Line 56: | ||
|- | |- | ||
|$Cx | |$Cx | ||
| | |OS-9 System Module | ||
|Systm | |Systm | ||
| | | | ||
Line 63: | Line 63: | ||
|- | |- | ||
|$Dx | |$Dx | ||
| | |OS-9 File Manager Module | ||
|FlMgr | |FlMgr | ||
| | | | ||
Line 70: | Line 70: | ||
|- | |- | ||
|$Ex | |$Ex | ||
| | |OS-9 Device Driver Module | ||
|Drivr | |Drivr | ||
| | | | ||
Line 77: | Line 77: | ||
|- | |- | ||
|$Fx | |$Fx | ||
| | |OS-9 Device Descriptor Module | ||
|Devic | |Devic | ||
| | | | ||
Line 88: | Line 88: | ||
=== Data Modules === | === Data Modules === | ||
Here is a portion of the font module, which is a data module in | Here is a portion of the font module, which is a data module in NitrOS-9. | ||
<code> nam font</code> | <code> nam font</code> | ||
Line 121: | Line 121: | ||
== Writing Position Independent Code == | == Writing Position Independent Code == | ||
All code in NitrOS-9 must be | |||
== Accessing Variables and Data Structures == | == Accessing Variables and Data Structures == |
Revision as of 15:36, 3 June 2024
Overview
Each process in NitrOS-9 is allocated its own 64K address space. When run, the program object code is loaded into one memory space, and the variables and data structures are loaded into the other. This includes separate execution and data directories and std in, std out and std err for each process. In addition, NitrOS-9 keeps an separate per-process MMU table (DAT Image). So it is important to use the OS-9 calls F$MapBlk
and F$ClrBlk
calls to map in memory blocks with the MMU.
When a new process is created, registers U, Y, DP and SP are set with U = start of data area, Y = end of data area, DP = page # of beginning page, SP = end of data area + 1.
Program and Data Module Structure
There are 9 different types of modules in 4 possible languages:
Module Types | Language | ||||
---|---|---|---|---|---|
Code | Module Type | Name | Code | Language | |
$1x | Program Module | Prgm | $x0 | Data (non-executable) | |
$2x | Subroutine Module | Sbrtn | $x1 | 6809 Object Code | |
$3x | Multi-module | Multi | $x2 | BASIC09 I-Code | |
$4x | Data Module | Data | $x3 | PASCAL I-Code | |
$5x-$Bx | User-definable module | $x4-$xF | Reserved for Future Use | ||
$Cx | OS-9 System Module | Systm | |||
$Dx | OS-9 File Manager Module | FlMgr | |||
$Ex | OS-9 Device Driver Module | Drivr | |||
$Fx | OS-9 Device Descriptor Module | Devic |
The two most used will be Program Modules and Data Modules.
Program Modules
Data Modules
Here is a portion of the font module, which is a data module in NitrOS-9.
nam font
ttl F256 font
use defsfile
tylg set Data
atrv set ReEnt+rev
rev set $01
mod eom,name,tylg,atrv,start,0
name fcs /font/
start
L0000 fcb $00,$00,$00,$00,$00,$00,$00,$00
L0008 fcb $7C,$82,$AA,$82,$BA,$92,$82,$7C
*More data here
emod
eom equ *
end
Writing Position Independent Code
All code in NitrOS-9 must be