view CoCoOS9/defs/os9defs.l2v3 @ 31:bd2b07db8917 cocoos9lv2v3

CoCoOS9 version
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Jul 2018 15:16:13 +0900
parents
children
line wrap: on
line source

         nam   os9defs                 
         ttl   OS-9 Level 2 V3 System Symbol Definitions

*****************
* Edition History
*
* Date     Changes Made                                                 by
* -------- ------------------------------------------------------------ ---
* 85/08/29 Fixed DT.SBF/NFM values to 3/4                               Kmz
* 85/09/01 Added SS.FDInf, SS.Attr to accept 68K request thru NET       Kmz
* 85/09/03 Eliminated E$BPrcID, made Error #238
*          become E$DNE for 68000 compatability                     Kmz/rfd
* 86/04/15 F$AlHRam System call added for COCO                          MGH
* 86/09/08 F$Alarm for COCO Clock Module                                MGH
* 86/09/17 SS.Tone For COCO                                             MGH
* 86/09/23 Added F$NMLink and F$NMLoad for COCO                         MGH
* 86/09/30 added Reserved User $70 to $7f in sytem calls                MGH
* 86/09/30 Created Color Computer 3 Version of OS9Defs                  MGH
* 88/12/13 Added Module Table Offsets                               KKD/BRI
* 88/12/22 Added process accounting to process descriptor               BRI
* 98/09/18 Expanded Init module to include more info                    BGP
* 98/10/10 Added L2V3 specific setstat/getstat codes                    BGP
* 98/10/15 Added definitions from Bruce Isted's Eliminator software     BGP
* 98/10/26 Added Basic09 error definitions                              BGP

         page  
*****************************************
* System Service Request Code Definitions
*
         org   0
F$Link   rmb   1          Link to Module
F$Load   rmb   1          Load Module from File
F$UnLink rmb   1          Unlink Module
F$Fork   rmb   1          Start New Process
F$Wait   rmb   1          Wait for Child Process to Die
F$Chain  rmb   1          Chain Process to New Module
F$Exit   rmb   1          Terminate Process
F$Mem    rmb   1          Set Memory Size
F$Send   rmb   1          Send Signal to Process
F$Icpt   rmb   1          Set Signal Intercept
F$Sleep  rmb   1          Suspend Process
F$SSpd   rmb   1          Suspend Process
F$ID     rmb   1          Return Process ID
F$SPrior rmb   1          Set Process Priority
F$SSWI   rmb   1          Set Software Interrupt
F$PErr   rmb   1          Print Error
F$PrsNam rmb   1          Parse Pathlist Name
F$CmpNam rmb   1          Compare Two Names
F$SchBit rmb   1          Search Bit Map
F$AllBit rmb   1          Allocate in Bit Map
F$DelBit rmb   1          Deallocate in Bit Map
F$Time   rmb   1          Get Current Time
F$STime  rmb   1          Set Current Time
F$CRC    rmb   1          Generate CRC
F$GPrDsc rmb   1          get Process Descriptor copy
F$GBlkMp rmb   1          get System Block Map copy
F$GModDr rmb   1          get Module Directory copy
F$CpyMem rmb   1          Copy External Memory
F$SUser  rmb   1          Set User ID number
F$UnLoad rmb   1          Unlink Module by name
F$Alarm  rmb   1          Color Computer Alarm Call
         rmb   2          reserved - For overlap of other systems
F$NMLink rmb   1          Color Computer NonMapping Link
F$NMLoad rmb   1          Color Computer NonMapping Load
         org   $25
F$TPS    rmb   1          Return System's Ticks Per Second
F$TimAlm rmb   1
         org   $27        Beginning of System Reserved Calls
F$VIRQ   rmb   1          Install/Delete Virtual IRQ
F$SRqMem rmb   1          System Memory Request
F$SRtMem rmb   1          System Memory Return
F$IRQ    rmb   1          Enter IRQ Polling Table
F$IOQu   rmb   1          Enter I/O Queue
F$AProc  rmb   1          Enter Active Process Queue
F$NProc  rmb   1          Start Next Process
F$VModul rmb   1          Validate Module
F$Find64 rmb   1          Find Process/Path Descriptor
F$All64  rmb   1          Allocate Process/Path Descriptor
F$Ret64  rmb   1          Return Process/Path Descriptor
F$SSvc   rmb   1          Service Request Table Initialization
F$IODel  rmb   1          Delete I/O Module
F$SLink  rmb   1          System Link
F$Boot   rmb   1          Bootstrap System
F$BtMem  rmb   1          Bootstrap Memory Request
F$GProcP rmb   1          Get Process ptr
F$Move   rmb   1          Move Data (low bound first)
F$AllRAM rmb   1          Allocate RAM blocks
F$AllImg rmb   1          Allocate Image RAM blocks
F$DelImg rmb   1          Deallocate Image RAM blocks
F$SetImg rmb   1          Set Process DAT Image
F$FreeLB rmb   1          Get Free Low Block
F$FreeHB rmb   1          Get Free High Block
F$AllTsk rmb   1          Allocate Process Task number
F$DelTsk rmb   1          Deallocate Process Task number
F$SetTsk rmb   1          Set Process Task DAT registers
F$ResTsk rmb   1          Reserve Task number
F$RelTsk rmb   1          Release Task number
F$DATLog rmb   1          Convert DAT Block/Offset to Logical
F$DATTmp rmb   1          Make temporary DAT image (Obsolete)
F$LDAXY  rmb   1          Load A [X,[Y]]
F$LDAXYP rmb   1          Load A [X+,[Y]]
F$LDDDXY rmb   1          Load D [D+X,[Y]]
F$LDABX  rmb   1          Load A from 0,X in task B
F$STABX  rmb   1          Store A at 0,X in task B
F$AllPrc rmb   1          Allocate Process Descriptor
F$DelPrc rmb   1          Deallocate Process Descriptor
F$ELink  rmb   1          Link using Module Directory Entry
F$FModul rmb   1          Find Module Directory Entry
F$MapBlk rmb   1          Map Specific Block
F$ClrBlk rmb   1          Clear Specific Block
F$DelRAM rmb   1          Deallocate RAM blocks
F$GCMDir rmb   1          Pack module directory
F$AlHRam rmb   1          Allocate HIGH RAM Blocks
*
* Numbers $70 through $7F are reserved for user definitions
*
         org   $70
F$RegDmp rmb   1
F$NVRAM rmb    1

         rmb   $80-.      Reserved for user definition

         page  
**************************************
* I/O Service Request Code Definitions
*
         org   $80
I$Attach rmb   1          Attach I/O Device
I$Detach rmb   1          Detach I/O Device
I$Dup    rmb   1          Duplicate Path
I$Create rmb   1          Create New File
I$Open   rmb   1          Open Existing File
I$MakDir rmb   1          Make Directory File
I$ChgDir rmb   1          Change Default Directory
I$Delete rmb   1          Delete File
I$Seek   rmb   1          Change Current Position
I$Read   rmb   1          Read Data
I$Write  rmb   1          Write Data
I$ReadLn rmb   1          Read Line of ASCII Data
I$WritLn rmb   1          Write Line of ASCII Data
I$GetStt rmb   1          Get Path Status
I$SetStt rmb   1          Set Path Status
I$Close  rmb   1          Close Path
I$DeletX rmb   1          Delete from current exec dir

*******************
* File Access Modes
*
READ.    equ   %00000001
WRITE.   equ   %00000010
UPDAT.   equ   READ.+WRITE.
EXEC.    equ   %00000100
PREAD.   equ   %00001000
PWRIT.   equ   %00010000
PEXEC.   equ   %00100000
SHARE.   equ   %01000000
DIR.     equ   %10000000
ISIZ.    equ   %00100000

**************
* Signal Codes
*
         org   0
S$Kill   rmb   1          Non-Interceptable Abort
S$Wake   rmb   1          Wake-up Sleeping Process
S$Abort  rmb   1          Keyboard Abort
S$Intrpt rmb   1          Keyboard Interrupt
S$Window rmb   1          Window Change
S$Alarm  rmb   1

         page  
**********************************
* Status Codes for GetStat/PutStat
*
         org   0
SS.Opt   rmb   1          Read/Write PD Options
SS.Ready rmb   1          Check for Device Ready
SS.Size  rmb   1          Read/Write File Size
SS.Reset rmb   1          Device Restore
SS.WTrk  rmb   1          Device Write Track
SS.Pos   rmb   1          Get File Current Position
SS.EOF   rmb   1          Test for End of File
SS.Link  rmb   1          Link to Status routines
SS.ULink rmb   1          Unlink Status routines
SS.Feed  rmb   1          issue form feed
SS.Frz   rmb   1          Freeze DD. information
SS.SPT   rmb   1          Set DD.TKS to given value
SS.SQD   rmb   1          Sequence down hard disk
SS.DCmd  rmb   1          Send direct command to disk
SS.DevNm rmb   1          Return Device name (32-bytes at [X])
SS.FD    rmb   1          Return File Descriptor (Y-bytes at [X])
SS.Ticks rmb   1          Set Lockout honor duration
SS.Lock  rmb   1          Lock/Release record
SS.DStat rmb   1          Return Display Status (CoCo)
SS.Joy   rmb   1          Return Joystick Value (CoCo)
SS.BlkRd rmb   1          Block Read
SS.BlkWr rmb   1          Block Write
SS.Reten rmb   1          Retension cycle
SS.WFM   rmb   1          Write File Mark
SS.RFM   rmb   1          Read past File Mark
SS.ELog  rmb   1          Read Error Log
SS.SSig  rmb   1          Send signal on data ready
SS.Relea rmb   1          Release device
SS.AlfaS rmb   1          Return Alfa Display Status (CoCo, SCF/GetStat)
SS.Attr  equ   SS.AlfaS   to serve 68K/RBF/SetStat only, thru NET
SS.Break rmb   1          Send break signal out acia
SS.RsBit rmb   1          Reserve bitmap sector (do not allocate in) LSB(X)=sct#
         rmb   1          reserved
SS.FDInf equ   $20        to serve 68K/RBF/GetStat only, thru NET
         rmb   4          reserve $20-$23 for Japanese version (Hoshi)
SS.SetMF rmb   1          reserve $24 for Gimix G68 (Flex compatability?)
SS.Cursr rmb   1          Cursor information for COCO
SS.ScSiz rmb   1          Return screen size for COCO
SS.KySns rmb   1          Getstat/Putstat for COCO keyboard
SS.ComSt rmb   1          Getstat/Putstat for Baud/Parity
SS.Open  rmb   1          Putstat to tell driver a path was opened
SS.Close rmb   1          Putstat to tell driver a path was closed
SS.HngUp rmb   1          Putstat to tell driver to hangup phone
* System Specific and User defined codes above $80
         org   $80
SS.AAGBf rmb   1          Putstat to Allocate Additional Graphic Buffer
SS.SLGBf rmb   1          Putstat to Select a different Graphic Buuffer
SS.Mount rmb   1          Network 4 Mount Setstat
SS.RdNet rmb   1          Read Raw Sector from Network 4 Omnidrive
SS.MpGPB rmb   1          Putstat to request a Get/Put Buffer be mapped in workspace
SS.Slots rmb   1          Network 4 slots? getstat
SS.WnSet rmb   1          Set up High Level Windowing Information
SS.MnSel rmb   1          Request High level Menu Handler take determine next event
SS.SBar  rmb   1          Putstat to set position block on Window scroll bars
SS.Mouse rmb   1          Return Mouse information packet (COCO)
SS.MsSig rmb   1          Putstat to tell driver to send signal on mouse event
SS.AScrn rmb   1          Allocate a screen for application poking
SS.DScrn rmb   1          Display a screen allocated by SS.AScrn
SS.FScrn rmb   1          Free a screen allocated by SS.AScrn
SS.PScrn rmb   1          Polymorph Screen into different screen type
SS.MScrn rmb   1          Map/unmap screen into process address space (L2V3)
         rmb   1          Reserved
SS.Palet rmb   1          Return palette information
SS.Montr rmb   1          Get and Set Monitor Type
SS.ScTyp rmb   1          Get screen type information
SS.GIP   rmb   1          Global Input Parameters (SetStat)
SS.UMBar rmb   1          update menu bar (SetStat)
SS.FBRgs rmb   1          return color registers (GetStat)
SS.DfPal rmb   1          set/return default palette registers (Getstat/Setstat)
SS.Tone  rmb   1          Generate a tone using 6 bit sound

SS.GIP2  rmb   1          Global Input Params #2 (L2V3)
SS.AnPal rmb   1          Animate palettes (L2V3)
SS.FndBf rmb   1          Find named buffer (L2V3)
SS.CDSta equ   SS.GIP2    XACIA
SS.CDSig equ   SS.AnPal   XACIA
SS.CDRel equ   SS.FndBf   XACIA



         ttl   Direct Page Definitions 
         page  

**********************************
* Direct Page Variable Definitions
*
         org   $00
D.WDAddr rmb   2
D.WDBtDr rmb   1
         org   $20
D.Tasks  rmb   2          Task User Table
D.TmpDAT rmb   2          Temporary DAT Image stack
D.Init   rmb   2          Initialization Module ptr
D.Poll   rmb   2          Interrupt Polling Routine ptr
D.Time   equ   .          System Time
D.Year   rmb   1
D.Month  rmb   1
D.Day    rmb   1
D.Hour   rmb   1
D.Min    rmb   1
D.Sec    rmb   1
D.Tick   rmb   1
D.Slice  rmb   1          current slice remaining
D.TSlice rmb   1          Ticks per Slice
D.Boot   rmb   1          Bootstrap attempted flag
D.MotOn  rmb   1          Floppy Disk Motor-On time out
D.ErrCod rmb   1          Reset Error Code
D.Daywk  rmb   1          day of week, com-trol clock
D.TkCnt  rmb   1          Tick Counter
D.BtPtr  rmb   2          Address of Boot in System Address space
D.BtSz   rmb   2          Size of Boot
         org   $40
D.BlkMap rmb   4          Memory Block Map ptr
D.ModDir rmb   4          Module Directory ptrs
D.PrcDBT rmb   2          Process Descriptor Block Table ptr
D.SysPrc rmb   2          System Process Descriptor ptr
D.SysDAT rmb   2          System DAT Image ptr
D.SysMem rmb   2          System Memory Map ptr
D.Proc   rmb   2          Current Process ptr
D.AProcQ rmb   2          Active Process Queue
D.WProcQ rmb   2          Waiting Process Queue
D.SProcQ rmb   2          Sleeping Process Queue
D.ModEnd rmb   2          Module Directory end ptr
D.ModDAT rmb   2          Module Dir DAT image end ptr
D.CldRes rmb   2          Cold Restart vector
         org   $6B
D.Crash  rmb   6          Pointer to CC Crash Routine
D.CBStrt rmb   $B         Reserved for CC warmstart ($71)
         org   $80
D.DevTbl rmb   2          I/O Device Table
D.PolTbl rmb   2          I/O Polling Table
         rmb   4          reserved
D.PthDBT rmb   2          Path Descriptor Block Table ptr
D.DMAReq rmb   1          DMA Request flag

********
* COCO STUFF COMES NEXT
* This area is used for the CoCo Hardware Registers
*
         org   $90
D.HINIT  rmb   1          GIME INIT0 register (hardware setup $FF90)
D.TINIT  rmb   1          GIME INIT1 register (timer/task register $FF91)
D.IRQER  rmb   1          Interrupt enable regsiter ($FF92)
D.FRQER  rmb   1          Fast Interrupt enable register ($FF93)
D.TIMMS  rmb   1          Timer most significant nibble ($FF94)
D.TIMLS  rmb   1          Timer least significant byte ($FF95)
D.RESV1  rmb   1          reserved register ($FF96)
D.RESV2  rmb   1          reserved register ($FF97)
D.VIDMD  rmb   1          video mode register ($FF98)
D.VIDRS  rmb   1          video resolution register ($FF99)
D.BORDR  rmb   1          border register ($FF9A)
D.RESV3  rmb   1          reserved register ($FF9B)
D.VOFF2  rmb   1          vertical scroll/offset 2 register ($FF9C)
D.VOFF1  rmb   1          vertical offset 1 register ($FF9D)
D.VOFF0  rmb   1          vertical offset 0 register ($FF9E)
D.HOFF0  rmb   1          horizontal offset 0 register ($FF9F)
D.Speed  rmb   1          Speed of COCO CPU 0=slow,1=fast
D.TskIPt rmb   2          Task image Pointer table (CC)
D.MemSz  rmb   1          128/512K memory flag (CC)
D.SSTskN rmb   1          System State Task Number (COCO)
D.CCMem  rmb   2          Pointer to beginning of CC Memory
D.CCStk  rmb   2          Pointer to top of CC Memory
D.Flip0  rmb   2          Change to Task 0
D.Flip1  rmb   2          Change to reserved Task 1
D.VIRQ   rmb   2          VIRQ Polling routine
D.IRQS   rmb   1          IRQ shadow register (CC Temporary)
D.CLTb   rmb   2          VIRQ Table address
D.AltIRQ rmb   2          Alternate IRQ Vector (CC)
D.GPoll  rmb   2          CC GIME IRQ enable/disable toggle
D.Clock2 rmb   2          CC Clock2 entry address
         org   $C0
D.SysSvc rmb   2          System Service Routine entry
D.SysDis rmb   2          System Service Dispatch Table ptr
D.SysIRQ rmb   2          System IRQ Routine entry
D.UsrSvc rmb   2          User Service Routine entry
D.UsrDis rmb   2          User Service Dispatch Table ptr
D.UsrIRQ rmb   2          User IRQ Routine entry
D.SysStk rmb   2          System stack
D.SvcIRQ rmb   2          In-System IRQ service
D.SysTsk rmb   1          System Task number
         org   $E0
D.Clock  rmb   2
D.XSWI3  rmb   2
D.XSWI2  rmb   2
D.XFIRQ  rmb   2
D.XIRQ   rmb   2
D.XSWI   rmb   2
D.XNMI   rmb   2
D.ErrRst rmb   2
         org   $F2
D.SWI3   rmb   2
D.SWI2   rmb   2
D.FIRQ   rmb   2
D.IRQ    rmb   2
D.SWI    rmb   2
D.NMI    rmb   2

**************************
* Level II Block Map flags
*
NotRAM   equ   %10000000  Block Not RAM flag
ModBlock equ   %00000010  Module in Block
RAMinUse equ   %00000001  RAM Block in use flag
*
* Service Dispatch Table special entries
*
IOEntry  equ   254

         ttl   Structure Formats       
         page  
************************************
* Module Directory Entry Definitions
*
         org   0
MD$MPDAT rmb   2          Module DAT Image ptr
MD$MBSiz rmb   2          Memory Block size
MD$MPtr  rmb   2          Module ptr
MD$Link  rmb   2          Module Link count
MD$ESize equ   .          Module Directory Entry size

********************
* Module Definitions
*
* Universal Module Offsets
*
         org   0
M$ID     rmb   2          ID Code
M$Size   rmb   2          Module Size
M$Name   rmb   2          Module Name
M$Type   rmb   1          Type / Language
M$Revs   rmb   1          Attributes / Revision Level
M$Parity rmb   1          Header Parity
M$IDSize equ   .          Module ID Size
*
* Type-Dependent Module Offsets
*
* System, File Manager, Device Driver, Program Module
*
M$Exec   rmb   2          Execution Entry Offset
*
* Device Driver, Program Module
*
M$Mem    rmb   2          Stack Requirement
*
* Device Driver, Device Descriptor Module
*
M$Mode   rmb   1          Device Driver Mode Capabilities
*
* Device Descriptor Module
*
         org   M$IDSize
M$FMgr   rmb   2          File Manager Name Offset
M$PDev   rmb   2          Device Driver Name Offset
         rmb   1          M$Mode (defined above)
M$Port   rmb   3          Port Address
M$Opt    rmb   1          Device Default Options
M$DTyp   rmb   1          Device Type
IT.DTP   equ   M$DTyp     Descriptor type offset
*
* Configuration Module Entry Offsets
*
         org   M$IDSize
MaxMem   rmb   3          Maximum Free Memory
PollCnt  rmb   1          Entries in Interrupt Polling Table
DevCnt   rmb   1          Entries in Device Table
InitStr  rmb   2          Initial Module Name
SysStr   rmb   2          System Device Name
StdStr   rmb   2          Standard I/O Pathlist
BootStr  rmb   2          Bootstrap Module name
ProtFlag rmb   1          Write protect enable flag
OSLevel  rmb   1          OS level
OSVer    rmb   1          OS version
OSMajor  rmb   1          OS major
OSMinor  rmb   1          OS minor
Compat1  rmb   1          compatibility byte

* -- CC3IO area -- *
MonType  rmb   1          Monitor type (0=CMP,1=RGB,2=MONO)
KeyRptS  rmb   1          Key repeat start constant
KeyRptD  rmb   1          Key repeat delay constant

* Compatiblity byte definitions
CRCOn    equ   %00000001  CRC checking on if set, off if clear

         page  
**************************
* Module Field Definitions
*
* ID Field
*
M$ID1    equ   $87        Module ID code byte one
M$ID2    equ   $CD        Module ID code byte two
M$ID12   equ   M$ID1*256+M$ID2
*
* Module Type / Language byte
*
* Field Masks
*
TypeMask equ   %11110000  Type Field
LangMask equ   %00001111  Language Field
*
* Type Values
*
Devic    equ   $F0        Device Descriptor Module
Drivr    equ   $E0        Physical Device Driver
FlMgr    equ   $D0        File Manager
Systm    equ   $C0        System Module
Data     equ   $40        Data Module
Multi    equ   $30        Multi-Module
Sbrtn    equ   $20        Subroutine Module
Prgrm    equ   $10        Program Module
*
* Language Values
*
Objct    equ   1          6809 Object Code Module
ICode    equ   2          Basic09 I-code
PCode    equ   3          Pascal P-code
CCode    equ   4          C I-code
CblCode  equ   5          Cobol I-code
FrtnCode equ   6          Fortran I-code
*
* Module Attributes / Revision byte
*
* Field Masks
*
AttrMask equ   %11110000  Attributes Field
RevsMask equ   %00001111  Revision Level Field
*
* Attribute Flags
*
ReEnt    equ   %10000000  Re-Entrant Module
Modprot  equ   %01000000  Gimix Module protect bit (0=protected, 1=write enable)

********************
* Device Type Values
*
DT.SCF   equ   0          Sequential Character File Type
DT.RBF   equ   1          Random Block File Type
DT.Pipe  equ   2          Pipe File Type
DT.SBF   equ   3
DT.NFM   equ   4          Network File Manager

*********************
* CRC Result Constant
*
CRCCon1  equ   $80
CRCCon23 equ   $0FE3

         ttl   Process Information     
         page  
********************************
* Process Descriptor Definitions
*
DefIOSiz equ   16         Default I/O Data Length
NefIOSiz equ   12         On-Net Default I/O Data Length
NumPaths equ   16         Number of Local Paths

         org   0
P$ID     rmb   1          Process ID
P$PID    rmb   1          Parent's ID
P$SID    rmb   1          Sibling's ID
P$CID    rmb   1          Child's ID
P$SP     rmb   2          Stack ptr
P$Task   rmb   1          Task Number
P$PagCnt rmb   1          Memory Page Count
P$User   rmb   2          User Index
P$Prior  rmb   1          Priority
P$Age    rmb   1          Age
P$State  rmb   1          Status
P$Queue  rmb   2          Queue Link (Process ptr)
P$IOQP   rmb   1          Previous I/O Queue Link (Process ID)
P$IOQN   rmb   1          Next I/O Queue Link (Process ID)
P$PModul rmb   2          Primary Module
P$SWI    rmb   2          SWI Entry Point
P$SWI2   rmb   2          SWI2 Entry Point
P$SWI3   rmb   2          SWI3 Entry Point
P$Signal rmb   1          Signal Code
P$SigVec rmb   2          Signal Intercept Vector
P$SigDat rmb   2          Signal Intercept Data Address
P$DeadLk rmb   1          Dominant proc ID if I/O locked
         rmb   $20-.      unused
P$DIO    rmb   DefIOSiz   Default I/O ptrs
P$Path   rmb   NumPaths   I/O Path Table
P$DATImg rmb   64         DAT Image
P$Links  rmb   32         Block Link counts
P$NIO    rmb   6*2        additional DIO ptrs for net, compatible  with 68k
P$SelP   rmb   1          Selected Path for COCO Windows (Default 0)
P$UTicks rmb   4          proc User Tick counter
P$STicks rmb   4          proc System Tick counter
P$FCalls rmb   4          proc F$ call counter
P$ICalls rmb   4          proc I$ call counter
P$DatBeg rmb   3          proc Date of creation (Y/M/D)
P$TimBeg rmb   3          proc Time of creation (H/M/S)
P$Alarm  rmb   6
         rmb   $200-.     Local stack
P$Stack  equ   .          Top of Stack
P$Size   equ   .          Size of Process Descriptor

*
* Process State Flags
*
SysState equ   %10000000
TimSleep equ   %01000000
TimOut   equ   %00100000
ImgChg   equ   %00010000
Suspend  equ   %00001000
Condem   equ   %00000010
Dead     equ   %00000001

         ttl   OS-9 I/O Symbolic Definitions
         page  
*************************
* Path Descriptor Offsets
*
         org   0
PD.PD    rmb   1          Path Number
PD.MOD   rmb   1          Mode (Read/Write/Update)
PD.CNT   rmb   1          Number of Open Images
PD.DEV   rmb   2          Device Table Entry Address
PD.CPR   rmb   1          Current Process
PD.RGS   rmb   2          Caller's Register Stack
PD.BUF   rmb   2          Buffer Address
PD.FST   rmb   32-.       File Manager's Storage
PD.OPT   equ   .          PD GetSts(0) Options
PD.DTP   rmb   1          Device Type
         rmb   64-.       Path options
PDSIZE   equ   .

*
* Pathlist Special Symbols
*
PDELIM   equ   '/         Pathlist Name Separator
PDIR     equ   '.         Directory
PENTIR   equ   '@         Entire Device
         page  
****************************
* File Manager Entry Offsets
*
         org   0
FMCREA   rmb   3          Create (Open New) File
FMOPEN   rmb   3          Open File
FMMDIR   rmb   3          Make Directory
FMCDIR   rmb   3          Change Directory
FMDLET   rmb   3          Delete File
FMSEEK   rmb   3          Position File
FMREAD   rmb   3          Read from File
FMWRIT   rmb   3          Write to File
FMRDLN   rmb   3          ReadLn
FMWRLN   rmb   3          WritLn
FMGSTA   rmb   3          Get File Status
FMSSTA   rmb   3          Set File Status
FMCLOS   rmb   3          Close File

*****************************
* Device Driver Entry Offsets
*
         org   0
D$INIT   rmb   3          Device Initialization
D$READ   rmb   3          Read from Device
D$WRIT   rmb   3          Write to Device
D$GSTA   rmb   3          Get Device Status
D$PSTA   rmb   3          Put Device Status
D$TERM   rmb   3          Device Termination

*********************
* Device Table Format
*
         org   0
V$DRIV   rmb   2          Device Driver module
V$STAT   rmb   2          Device Driver Static storage
V$DESC   rmb   2          Device Descriptor module
V$FMGR   rmb   2          File Manager module
V$USRS   rmb   1          use count
DEVSIZ   equ   .

*******************************
* Device Static Storage Offsets
*
         org   0
V.PAGE   rmb   1          Port Extended Address
V.PORT   rmb   2          Device 'Base' Port Address
V.LPRC   rmb   1          Last Active Process ID
V.BUSY   rmb   1          Active Process ID (0=UnBusy)
V.WAKE   rmb   1          Active PD if Driver MUST Wake-up
V.USER   equ   .          Driver Allocation Origin

********************************
* Interrupt Polling Table Format
*
         org   0
Q$POLL   rmb   2          Absolute Polling Address
Q$FLIP   rmb   1          Flip (EOR) Byte ..normally Zero
Q$MASK   rmb   1          Polling Mask (after Flip)
Q$SERV   rmb   2          Absolute Service routine Address
Q$STAT   rmb   2          Static Storage Address
Q$PRTY   rmb   1          Priority (Low Numbers=Top Priority)
POLSIZ   equ   .

********************
* VIRQ packet format
*
         org   0
Vi.Cnt   rmb   2          count down counter
Vi.Rst   rmb   2          reset value for counter
Vi.Stat  rmb   1          status byte

Vi.IFlag equ   %00000001  status byte virq flag

         page  
*************************************
* Machine Characteristics Definitions
*
R$CC     equ   0          Condition Codes register
R$A      equ   1          A Accumulator
R$B      equ   2          B Accumulator
R$D      equ   R$A        Combined A:B Accumulator
R$DP     equ   3          Direct Page register
R$X      equ   4          X Index register
R$Y      equ   6          Y Index register
R$U      equ   8          User Stack register
R$PC     equ   10         Program Counter register
R$Size   equ   12         Total register package size

Entire   equ   %10000000  Full Register Stack flag
FIRQMask equ   %01000000  Fast-Interrupt Mask bit
HalfCrry equ   %00100000  Half Carry flag
IRQMask  equ   %00010000  Interrupt Mask bit
Negative equ   %00001000  Negative flag
Zero     equ   %00000100  Zero flag
TwosOvfl equ   %00000010  Two's Comp Overflow flag
Carry    equ   %00000001  Carry bit
IntMasks equ   IRQMask+FIRQMask
Sign     equ   %10000000  sign bit

true     equ   1          useful name
false    equ   0          useful name

         ttl   Error Code Definitions  
         pag   
************************
* Error Code Definitions
*
*
* Basic09 Error Codes
*
         org   10
E$UnkSym rmb   1 Unknown symbol
E$ExcVrb rmb   1 Excessive verbage
E$IllStC rmb   1 Illegal statement construction
E$ICOvf  rmb   1 I-code overflow
E$IChRef rmb   1 Illegal channel reference
E$IllMod rmb   1 Illegal mode
E$IllNum rmb   1 Illegal number
E$IllPrf rmb   1 Illegal prefix
E$IllOpd rmb   1 Illegal operand
E$IllOpr rmb   1 Illegal operator
E$IllRFN rmb   1 Illegal record field name
E$IllDim rmb   1 Illegal dimension
E$IllLit rmb   1 Illegal literal
E$IllRet rmb   1 Illegal relational
E$IllSfx rmb   1 Illegal type suffix
E$DimLrg rmb   1 Dimension too large
E$LinLrg rmb   1 Line number too large
E$NoAssg rmb   1 Missing assignment statement
E$NoPath rmb   1 Missing path number
E$NoComa rmb   1 Missing coma
E$NoDim  rmb   1 Missing dimension
E$NoDO   rmb   1 Missing DO statement
E$MFull  rmb   1 Memory full
E$NoGoto rmb   1 Missing GOTO
E$NoLPar rmb   1 Missing left parenthesis
E$NoLRef rmb   1 Missing line reference
E$NoOprd rmb   1 Missing operand
E$NoRPar rmb   1 Missing right parenthesis
E$NoTHEN rmb   1 Missing THEN statement
E$NoTO   rmb   1 Missing TO statement
E$NoVRef rmb   1 Missing variable reference
E$EndQou rmb   1 Missing end quote
E$SubLrg rmb   1 Too many subscripts
E$UnkPrc rmb   1 Unknown procedure
E$MulPrc rmb   1 Multiply defined procedure
E$DivZer rmb   1 Divice by zero
E$TypMis rmb   1 Operand type mismatch
E$StrOvf rmb   1 String stack overflow
E$NoRout rmb   1 Unimplemented routine
E$UndVar rmb   1 Undefined variable
E$FltOvf rmb   1 Floating Overflow
E$LnComp rmb   1 Line with compiler error
E$ValRng rmb   1 Value out of range for destination
E$SubOvf rmb   1 Subroutine stack overflow
E$SubUnd rmb   1 Subroutine stack underflow
E$SubRng rmb   1 Subscript out of range
E$ParmEr rmb   1 Paraemter error
E$SysOvf rmb   1 System stack overflow
E$IOMism rmb   1 I/O type mismatch
E$IONum  rmb   1 I/O numeric input format bad
E$IOConv rmb   1 I/O conversion: number out of range
E$IllInp rmb   1 Illegal input format
E$IOFRpt rmb   1 I/O format repeat error
E$IOFSyn rmb   1 I/O format syntax error
E$IllPNm rmb   1 Illegal path number
E$WrSub  rmb   1 Wrong number of subscripts
E$NonRcO rmb   1 Non-record type operand
E$IllA   rmb   1 Illegal argument
E$IllCnt rmb   1 Illegal control structure
E$UnmCnt rmb   1 Unmatched control structure
E$IllFOR rmb   1 Illegal FOR variable
E$IllExp rmb   1 Illegal expression type
E$IllDec rmb   1 Illegal declarative statement
E$ArrOvf rmb   1 Array size overflow
E$UndLin rmb   1 Undefined line number
E$MltLin rmb   1 Multiply defined line number
E$MltVar rmb   1 Multiply defined variable
E$IllIVr rmb   1 Illegal input variable
E$SeekRg rmb   1 Seek out of range
E$NoData rmb   1 Missing data statement
*
* System Dependent Error Codes
*
         org   186
E$StkOvf rmb   1          Stack overflow
E$IllArg rmb   1          Illegal argument
         rmb   1          reserved
E$ICoord rmb   1          Illegal coordinates
E$Bug    rmb   1          Bug (should never be returned)
E$BufSiz rmb   1          Buffer size is too small
E$IllCmd rmb   1          Illegal command
E$TblFul rmb   1          Screen or window table is full
E$BadBuf rmb   1          Bad/Undefined buffer number
E$IWDef  rmb   1          Illegal window definition
E$WUndef rmb   1          Window undefined
*
* Standard OS-9 Error Codes
*
         org   200
E$PthFul rmb   1          Path Table full
E$BPNum  rmb   1          Bad Path Number
E$Poll   rmb   1          Polling Table Full
E$BMode  rmb   1          Bad Mode
E$DevOvf rmb   1          Device Table Overflow
E$BMID   rmb   1          Bad Module ID
E$DirFul rmb   1          Module Directory Full
E$MemFul rmb   1          Process Memory Full
E$UnkSvc rmb   1          Unknown Service Code
E$ModBsy rmb   1          Module Busy
E$BPAddr rmb   1          Bad Page Address
E$EOF    rmb   1          End of File
         rmb   1
E$NES    rmb   1          Non-Existing Segment
E$FNA    rmb   1          File Not Accesible
E$BPNam  rmb   1          Bad Path Name
E$PNNF   rmb   1          Path Name Not Found
E$SLF    rmb   1          Segment List Full
E$CEF    rmb   1          Creating Existing File
E$IBA    rmb   1          Illegal Block Address
E$HangUp rmb   1          Carrier Detect Lost
E$MNF    rmb   1          Module Not Found
         rmb   1
E$DelSP  rmb   1          Deleting Stack Pointer memory
E$IPrcID rmb   1          Illegal Process ID
E$BPrcID equ   E$IPrcID   Bad Process ID (formerly #238)
         rmb   1
E$NoChld rmb   1          No Children
E$ISWI   rmb   1          Illegal SWI code
E$PrcAbt rmb   1          Process Aborted
E$PrcFul rmb   1          Process Table Full
E$IForkP rmb   1          Illegal Fork Parameter
E$KwnMod rmb   1          Known Module
E$BMCRC  rmb   1          Bad Module CRC
E$USigP  rmb   1          Unprocessed Signal Pending
E$NEMod  rmb   1          Non Existing Module
E$BNam   rmb   1          Bad Name
E$BMHP   rmb   1          (bad module header parity)
E$NoRam  rmb   1          No (System) Ram Available
E$DNE    rmb   1          Directory not empty
E$NoTask rmb   1          No available Task number
         rmb   $F0-.      reserved
E$Unit   rmb   1          Illegal Unit (drive)
E$Sect   rmb   1          Bad SECTor number
E$WP     rmb   1          Write Protect
E$CRC    rmb   1          Bad Check Sum
E$Read   rmb   1          Read Error
E$Write  rmb   1          Write Error
E$NotRdy rmb   1          Device Not Ready
E$Seek   rmb   1          Seek Error
E$Full   rmb   1          Media Full
E$BTyp   rmb   1          Bad Type (incompatable) media
E$DevBsy rmb   1          Device Busy
E$DIDC   rmb   1          Disk ID Change
E$Lock   rmb   1          Record is busy (locked out)
E$Share  rmb   1          Non-sharable file busy
E$DeadLk rmb   1          I/O Deadlock error