OS-9 Assembly Code Development: Difference between revisions

From F256 Foenix
Jump to navigationJump to search
Line 1: Line 1:
== Overview ==
== Overview ==
Each process in NitrOS9 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, NitrOS9 keeps an separate per-process MMU table (DAT Image).  So it is important to use the OS9 calls <code>F$MapBlk</code> and <code>F$ClrBlk</code> calls to map in memory blocks with the MMU.   
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
|OS9 System Module
|OS-9 System Module
|Systm
|Systm
|
|
Line 63: Line 63:
|-
|-
|$Dx
|$Dx
|OS9 File Manager Module
|OS-9 File Manager Module
|FlMgr
|FlMgr
|
|
Line 70: Line 70:
|-
|-
|$Ex
|$Ex
|OS9 Device Driver Module
|OS-9 Device Driver Module
|Drivr
|Drivr
|
|
Line 77: Line 77:
|-
|-
|$Fx
|$Fx
|OS9 Device Descriptor Module
|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 NitrOS9.
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

Accessing Variables and Data Structures

Accessing Table Data with PCR