Mercurial > hg > Members > kono > nitros9-code
diff defs/os9defs @ 0:6641a883d6b0
Initial revision
author | boisy |
---|---|
date | Thu, 04 Apr 2002 16:34:12 +0000 |
parents | |
children | 821d6fef9375 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/defs/os9defs Thu Apr 04 16:34:12 2002 +0000 @@ -0,0 +1,901 @@ + nam OS9Defs + ttl OS-9 Level 1 & 2 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 +* 98/10/03 Consoldated Level 1/Level 2 os9defs BGP + + pag +***************************************** +* 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 + + ifeq Level-1 + + rmb 3 + + else + +* Level 2 system calls +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 + + endc + + 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 + rmb 16 Reserved for user definition + + pag +************************************** +* 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 + + pag +********************************** +* 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 + + ifgt Level-1 + +* Level 2 Windowing +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 + rmb 2 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 + + endc + + ttl Direct Page Definitions + pag + +********************************** +* Direct Page Variable Definitions +* + org $20 + + ifeq Level-1 + +* Level 1 DP vars +D.FMBM rmb 4 Free memory bit map pointers +D.MLIM rmb 2 Memory limit $24 +D.ModDir rmb 4 Module directory $26 +D.Init rmb 2 Rom base address $2A +D.SWI3 rmb 2 Swi3 vector $2C +D.SWI2 rmb 2 Swi2 vector $2E +D.FIRQ rmb 2 Firq vector $30 +D.IRQ rmb 2 Irq vector $32 +D.SWI rmb 2 Swi vector $34 +D.NMI rmb 2 Nmi vector $36 +D.SvcIRQ rmb 2 Interrupt service entry $38 +D.Poll rmb 2 Interrupt polling routine $3A +D.UsrIRQ rmb 2 User irq routine $3C +D.SysIRQ rmb 2 System irq routine $3E +D.UsrSvc rmb 2 User service request routine $40 +D.SysSvc rmb 2 System service request routine $42 +D.UsrDis rmb 2 User service request dispatch table +D.SysDis rmb 2 System service reuest dispatch table +D.Slice rmb 1 Process time slice count $48 +D.PrcDBT rmb 2 Process descriptor block address $49 +D.Proc rmb 2 Process descriptor address $4B +D.AProcQ rmb 2 Active process queue $4D +D.WProcQ rmb 2 Waiting process queue $4F +D.SProcQ rmb 2 Sleeping process queue $51 +D.Time equ . Time +D.Year rmb 1 $53 +D.Month rmb 1 $54 +D.Day rmb 1 $55 +D.Hour rmb 1 $56 +D.Min rmb 1 $57 +D.Sec rmb 1 $58 +D.Tick rmb 1 $59 +D.TSec rmb 1 Ticks / second $5A +D.TSlice rmb 1 Ticks / time-slice $5B +D.IOML rmb 2 I/O mgr free memory low bound $5C +D.IOMH rmb 2 I/O mgr free memory hi bound $5E +D.DevTbl rmb 2 Device driver table addr $60 +D.PolTbl rmb 2 Irq polling table addr $62 +D.PthDBT rmb 2 Path descriptor block table addr $64 +D.BTLO rmb 2 Bootstrap low address $66 +D.BTHI rmb 2 Bootstrap hi address $68 +D.DMAReq rmb 1 DMA in use flag $6A +D.AltIRQ rmb 2 Alternate IRQ vector (CC) $6B +D.KbdSta rmb 2 Keyboard scanner static storage (CC) $6D +D.DskTmr rmb 2 Disk Motor Timer (CC) $6F +D.CBStrt rmb 16 reserved for CC warmstart ($71) +D.Clock rmb 2 Address of Clock Tick Routine (CC) $81 +D.Boot rmb 1 Bootstrap attempted flag +D.URtoSs rmb 2 address of user to system routine (VIRQ) $84 +D.CLTB rmb 2 Pointer to clock interrupt table (VIRQ) $86 + +* TABLE SIZES +BMAPSZ equ 32 BIT MAP SIZE +SVCTNM equ 2 NUMBER OF SERVICE REQUEST TABLES +SVCTSZ equ (256-BMAPSZ)/SVCTNM-2 SERVICE REQUEST TABLE SIZE + + else + +* Level 2 DP vars +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 + + endc + + ifgt Level-1 + +******** +* CoCo 3 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 + + endc + + ttl Structure Formats + pag +************************************ +* 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 + + pag +************************** +* 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 + + ifeq Level-1 + +DT.NFM equ 3 + + else + +DT.SBF equ 3 +DT.NFM equ 4 Network File Manager + + endc + +********************* +* CRC Result Constant +* +CRCCon1 equ $80 +CRCCon23 equ $0FE3 + + ttl Process Information + pag +******************************** +* Process Descriptor Definitions +* + ifeq Level-1 + +* Level 1 process descriptor defs +DefIOSiz equ 12 +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$CHAP rmb 1 process chapter number +P$ADDR rmb 1 user address beginning page number +P$PagCnt rmb 1 Memory Page Count +P$User rmb 2 User Index $09 +P$Prior rmb 1 Priority $0B +P$Age rmb 1 Age $0C +P$State rmb 1 Status $0D +P$Queue rmb 2 Queue Link (Process ptr) $0E +P$IOQP rmb 1 Previous I/O Queue Link (Process ID) $10 +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 $18 +P$DIO rmb DefIOSiz default I/O ptrs $1A +P$PATH rmb NumPaths I/O path table $26 +P$Signal rmb 1 Signal Code $36 +P$SigVec rmb 2 Signal Intercept Vector +P$SigDat rmb 2 Signal Intercept Data Address +P$NIO rmb 4 additional dio pointers for net + rmb $40-. unused +P$Size equ . Size of Process Descriptor + +* +* Process State Flags +* +SysState equ %10000000 +TimSleep equ %01000000 +TimOut equ %00100000 +ImgChg equ %00010000 +Condem equ %00000010 +Dead equ %00000001 + + else + +* Level 2 process descriptor defs +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) + 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 + + endc + + ttl OS-9 I/O Symbolic Definitions + pag +************************* +* 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 +* +* +* System Dependent Error Codes +* + + ifgt Level-1 + +* Level 2 windowing 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 + + endc + +* +* 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 +