opt -l ttl OS-9 System Symbol Definitions pag ************************************************************ * * System Service Request Code Definitions * ORG 0 LEVEL equ 1 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 ORG $28 Beginning of System Reserved Calls 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 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 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 pag ************************************************************ * * 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 ************************************************************ * * 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) ttl Structure Formats pag ************************************************************ * * 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 * * 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 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 * * 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 * * CRC Result Constant * CRCCon1 equ $80 CRCCon23 equ $0FE3 pag ************************************************************ * * 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 * 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 rmb 1 E$MNF rmb 1 Module Not Found rmb 1 E$DelSP rmb 1 Deleting Stack Pointer memory E$IPrcID rmb 1 Illegal Process ID 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 Ram Available E$BPrcID rmb 1 Bad Process ID 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 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 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 page ************************************************************ * * 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 . opt l opt -l ttl Direct Page Definitions page ************************************************************ * * Direct Page Variable Definitions * org $20 reserve first 32 bytes D.FMBM rmb 4 Free memory bit map pointers D.MLIM rmb 2 Memory limit D.ModDir rmb 4 Module directory D.Init rmb 2 Rom base address D.SWI3 rmb 2 Swi3 vector D.SWI2 rmb 2 Swi2 vector D.FIRQ rmb 2 Firq vector D.IRQ rmb 2 Irq vector D.SWI rmb 2 Swi vector D.NMI rmb 2 Nmi vector D.SvcIRQ rmb 2 Interrupt service entry D.Poll rmb 2 Interrupt polling routine D.UsrIRQ rmb 2 User irq routine D.SysIRQ rmb 2 System irq routine D.UsrSvc rmb 2 User service request routine D.SysSvc rmb 2 System service request routine 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 D.PrcDBT rmb 2 Process descriptor block address D.Proc rmb 2 Process descriptor address D.AProcQ rmb 2 Active process queue D.WProcQ rmb 2 Waiting process queue D.SProcQ rmb 2 Sleeping process queue D.Time equ . 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.TSec rmb 1 Ticks / second D.TSlice rmb 1 Ticks / time-slice D.IOML rmb 2 I/O mgr free memory low bound D.IOMH rmb 2 I/O mgr free memory hi bound D.DevTbl rmb 2 Device driver table addr D.PolTbl rmb 2 Irq polling table addr D.PthDBT rmb 2 Path descriptor block table addr D.BTLO rmb 2 Bootstrap low address D.BTHI rmb 2 Bootstrap hi address D.DMAReq rmb 1 DMA in use flag D.AltIRQ rmb 2 Alternate IRQ vector (CC) D.KbdSta rmb 2 Keyboard scanner static storage (CC) D.DskTmr rmb 2 Disk Motor Timer (CC) D.CBStrt rmb 16 Reserved for CC warmstart ($71) D.Clock rmb 2 Address of Clock Tick Routine (CC) * 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 page ************************************************************ * * Process Descriptor Definitions * 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 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$DIO rmb DefIOSiz default I/O ptrs P$PATH rmb NumPaths I/O path table P$Signal rmb 1 Signal Code P$SigVec rmb 2 Signal Intercept Vector P$SigDat rmb 2 Signal Intercept Data Address 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 page ************************************************************ * * OS-9 Level I Definitions * * Definition of Level I V1.1 symbols * renamed under Level I V1.2 * F$UNLK equ F$Unlink Unlink Module F$CHAN equ F$Chain Chain process to new module F$SLEP equ F$Sleep Process Sleep F$SPRI equ F$SPrior set process priority F$PNAM equ F$PrsNam Parse Name F$CNAM equ F$CmpNam Compare Two Names F$SBIT equ F$SchBit Search Bit Map F$ABIT equ F$AllBit Allocate Bit Map F$DBIT equ F$DelBit Deallocate Bit Map F$STIM equ F$STime set current time F$SRQM equ F$SRqMem System Memory Request F$SRTM equ F$SRtMem System Memory Return F$APRC equ F$AProc enter active process queue F$NPRC equ F$NProc start next active process F$VMOD equ F$VModul Validate module F$F64 equ F$Find64 Find process/path descriptor F$A64 equ F$ALL64 allocate process/path descriptor F$R64 equ F$Ret64 return process/path descriptor F$IODL equ F$IODel delete i/o module I$ATCH equ I$Attach device to system I$DTCH equ I$Detach device from system I$CREA equ I$Create create new file I$MDIR equ I$MakDir make directory file I$CDIR equ I$ChgDir change default directory I$DLET equ I$Delete delete a file I$WRIT equ I$Write write data I$RDLN equ I$ReadLn read line I$WRLN equ I$WritLn write line I$GSTT equ I$GetStt get status I$SSTT equ I$SetStt set status I$CLOS equ I$Close close path S$ABT equ S$Abort Keyboard abort signal S$INTR equ S$Intrpt Keyboard interrupt signal COBOL equ CblCode COBOL module type SS.RST equ SS.Reset Reset Device SS.WTK equ SS.WTrk Write Track SS.SIZ equ SS.Size File size SS.FEE equ SS.Feed Form feed SS.DCM equ SS.Dcmd Hard disk command M$STAK equ M$Mem Module Stack Requirement P$PCNT equ P$PagCnt Memory page count P$PRIO equ P$Prior Priority P$STAT equ P$State Process state P$QUEU equ P$Queue Queue link (process ptr) P$PMOD equ P$PModul Primary module ptr P$SIGN equ P$Signal Process Signal P$SIGV equ P$SigVec Signal intercept vector P$SIGD equ P$SigDat Signal intercept data address E$PTHF equ E$PthFul path table full E$IID equ E$BMID Illegal module ID block E$DIRF equ E$DirFul Module directory full E$MEMF equ E$MemFul Memory full E$USVC equ E$UnkSvc Unknown Service Request error E$MODB equ E$ModBsy Module busy E$RNAM rmb E$EOF+1 returning non-allocated memory E$BBND equ E$BPAddr Bad page address E$BPN equ E$BPNam bad path name E$LNEM equ E$MNF Module not found E$DESP equ E$DelSP deleting stack ptr memory E$IPID equ E$IPrcID illegal process ID E$ISC equ E$IPrcID+1 E$NOCH equ E$NoChld No children E$PRCF equ E$PrcFul Process table full E$KMOD equ E$KwnMod Known module E$BCRC equ E$BMCRC Bad module CRC E$USP equ E$USigP unprocessed signal pending E$IFKP equ E$IForkP illegal fork parameter E$RD equ E$Read Read error E$WR equ E$Write Write error E$NRDY equ E$NotRdy Device Not Ready REVMSK equ Revsmask INISTR equ InitStr TYPMSK equ TypeMask LANMSK equ LangMask IRQM equ IRQMask FIRQM equ FIRQMask NPATHS equ NumPaths SYSTAT equ SysState TSLEEP equ TimSleep *************** * * Defs of Level I V1.1 renamed under V1.2 * D.MODD equ D.ModDir Module directory ptr D.BASE equ D.Init ROM base address D.ISVC equ D.SvcIRQ Interrupt service entry D.UIRQ equ D.UsrIRQ User IRQ routine D.SIRQ equ D.SysIRQ System IRQ routine D.UREQ equ D.UsrSVC User service request routine D.SREQ equ D.SysSVC System service request routine D.USVC equ D.UsrDis User svc dispatch table D.SSVC equ D.SysDis System svc dispatch table D.SLIC equ D.Slice Process time slice count D.PRDB equ D.PrcDBT Process Descriptor Block table D.APRQ equ D.AProcQ Active process queue ptr D.WPRQ equ D.WProcQ Waiting process queue D.SPRQ equ D.SProcQ Sleeping process queue ptr D.MNTH equ D.Month D.TIC equ D.Tick D.TSLC equ D.TSlice Ticks / Time-slice opt l