IMD 1.17: 11/11/2014 11:08:28 82VKXSVRDOS B* VERSADOS/RMS68K SRC/OBJ 4.4 (NOT BOOTABLE) SN=49367 10 OF 30  SR10q82VKXSVRDOS 0420¤i-*‚Arrangement�of�registers�off�memory-mapped�I/O�base�address.*CREG†EQU„0’Control�register.SREG†EQU„0’Status�register.DREG†EQU„-4‘Data�register. L****************************************************************************#NCR0BRKƒEQU„%10000000ŠBREAK/ABORTŒ}6NCR0TXUƒEQU„%01000000ŠTx�UNDERRUNŒ}�USED�WITH�EXTERNALRxB>TxA>TxB�/�RxA>TxA>RxB>TxB*�%XXXXXX11ŠFIELD�DEFINITION!NCW2UD1ƒEQU„%00000011ŠUNDEFINED�}0NCW2BDMƒEQU„%00000010ŠBOTH�CHANNELS�DMA‡}�SYSTEM:NCW2ADMƒEQU„%00000001ŠCH.�A�DMA,�CH.�B�INT„}�CONFIGURATION/NCW2BINƒEQU„%00000000ŠBOTH�CHANNELS�INTERRUPT�}*L*****************************************************************************�%11XXXXXXŠFIELD�DEFINITION)NCW3BT8ƒEQU„%11000000ŠRx�8�BITS/CHARACTER)NCW3BT6ƒEQU„%10000000ŠRx�6�BITS/CHARACTER)NCW3BT7ƒEQU„%01000000ŠRx�7�BITS/CHARACTER)NCW3BT5ƒEQU„%00000000ŠRx�5�BITS/CHARACTER*"NCW3AUEƒEQU„%00100000ŠAUTO�ENABLES&NCW3EHUƒEQU„%00010000ŠENTER�HUNT�PHASE#NCW3CRCƒEQU„%00001000ŠRx�CRC�ENABLE0NCW3ADSƒEQU„%00000100ŠADDRESS�SEARCH�MODE�(SDLC)1NCW3SYNƒEQU„%00000010ŠSYNC�CHARACTER�LOAD�INHIBITNCW3RXEƒEQU„%00000001ŠRx�ENABLE*L*****************************************************************************�%11XXXXXXŠFIELD�DEFINITION8NCW4CLKƒEQU„%11000000ŠMASK�FOR�ISOLATING�THE�CLOCK�FIELD$NCW4C64ƒEQU„%11000000ŠX64�CLOCK�MODE$NCW4C32ƒEQU„%10000000ŠX32�CLOCK�MODE$NCW4C16ƒEQU„%01000000ŠX16�CLOCK�MODE#NCW4C01ƒEQU„%00000000ŠX1‚CLOCK�MODE*�%XX11XXXXŠFIELD�DEFINITION(NCW4EXSƒEQU„%00110000ŠEXTERNAL�SYNC�MODE/NCW4SDLƒEQU„%00100000ŠSDLC�MODE�(01111110�FLAG)+NCW4B16ƒEQU„%00010000Š16�BIT�SYNC�CHARACTER+NCW4B08ƒEQU„%00000000Š08�BIT�SYNC�CHARACTER*�%XXXX11XXŠFIELD�DEFINITION+NCW4SB2ƒEQU„%00001100Š2�STOP�BITS/CHARACTER/NCW4SBHƒEQU„%00001000Š1�1/2�STOP�BITS/CHARACTER+NCW4SB1ƒEQU„%00000100Š1�STOP�BITS/CHARACTER&NCW4SMEƒEQU„%00000000ŠSYNC�MODE�ENABLE*%NCW4PEOƒEQU„%00000010ŠPARITY�EVEN/ODD#NCW4PEEƒEQU„%00000001ŠPARITY�ENABLE*L****************************************************************************/NCW5DTRƒEQU„%10000000ŠData�Terminal�Ready�(DTR)*�%X11XXXXXŠFIELD�DEFINITION)NCW5TX8ƒEQU„%01100000ŠTx�8�BITS/CHARACTER)NCW5TX6ƒEQU„%01000000ŠTx�6�BITS/CHARACTER)NCW5TX7ƒEQU„%00100000ŠTx�7�BITS/CHARACTER)NCW5TX5ƒEQU„%00000000ŠTx�5�BITS/CHARACTER* NCW5BRKƒEQU„%00010000ŠSEND�BREAKNCW5TXEƒEQU„%00001000ŠTx�ENABLE"NCW5CRCƒEQU„%00000100ŠCRC-16/CCITT+NCW5RTSƒEQU„%00000010ŠRequest�To�Send�(RTS)#NCW5TCEƒEQU„%00000001ŠTx�CRC�ENABLE*L****************************************************************************8NCW6SYNƒEQU„%11111111ŠSYNC�BITS�7-0‡}�SDLC�ADDRESS�FIELD*L****************************************************************************9NCW7SYNƒEQU„%11111111ŠSYNC�BITS�15-8†}�01111110�SDLC�FLAGSDLCFLAG‚EQU„$7E *************************** Ending of &.NEC7201.EQ ***************************ééééééé‰PAGE************************** Beginning of &.NIO.EQ ************************** ŠLLENƒ120O*******************************************************************************O********************************************************************************.*ˆDATA�STRUCTURES�AND�EQUATES�FOR�INTERNAL�I/O**ˆMODIFICATION�HISTORY:*ˆ10/08/84‚Deleted�reference�to�IOPSMPB�secondary�map�bit.8*‰9/02/83‚Added�mag�tape�device�dependent�portion�of�DCB:*ˆ11/09/82‚Added�TNT�TASK�ID�for�HDS-400�network�terminals=*‰6/15/82‚Modified�DCB�so�that�default�configuration�is�last.6*‰4/13/82‚Initial�update�to�make�all�systems�the�same.B*‰2/23/82‚Addition�of�structures�used�in�CONFIGURE,�CHANGE�DEFAULT-*’CONFIGURATION,�and�REQUEST�STATUS�commands.<*‰9/14/81‚Revision�2.0�--�Additional�DCB�field�equates.‚R.V. *‰8/12/80*O*******************************************************************************O******************************************************************************* (IOSTIN„EQU„2’IOS�TRAP�INSTRUCTION�NUMBER(FHSTIN„EQU„3’FHS�TRAP�INSTRUCTION�NUMBER/FHSID…EQU„'.FHS'�FILE�HANDLING�SERVICES�TASK�ID1FMSID…EQU„'.FMS'�FILE�MANAGEMENT�SERVICES�TASK�ID.IOSID…EQU„'.IOS'�INPUT/OUTPUT�SERVICES�TASK�ID'IODID…EQU„'.IOD'�I/O�COMPLETION�TASK�ID(TTYID…EQU„'.TTY'�TERMINAL�DRIVER�TASK�IDYMa?iBŠDS.Bƒ1’EVENT�CODEŠDS.Lƒ1’SENDER�TASKŠDS.Lƒ1’SENDER�SESSIONEVTCOD„DS.Bƒ1’SUB-CODEŠDS.Bƒ1’RESERVEDEVTDCB„DS.Lƒ1’DCB�ADDRESSEVTLNG„EQU„*’EVENT�LENGTH *Ç!*‚FMS�I/O�EVENT�MESSAGE�STRUCTURE*Ç ŠOFFSET�0’START�WITH�TEXT�OFFSETŠDS.Bƒ1’EVENT�LENGTHŠDS.Bƒ1’EVENT�CODEŠDS.Lƒ1’SENDER�TASKŠDS.Lƒ1’SENDER�SESSIONEVTKOD„DS.Bƒ1’SUB-CODEŠDS.Bƒ1’RESERVEDEVTLUE„DS.Lƒ1’LUT�ENTRYEVTLUT„DS.Lƒ1’LUT%EVTTIN„DS.Bƒ1’TRAP�INSTRUCTION�NUMBER"EVTPRI„DS.Bƒ1’REQUESTOR'S�PRIORITY#EVTTSK„DS.Lƒ1’REQUESTOR'S�TASK�NAME(EVTSES„DS.Lƒ1’REQUESTOR'S�SESSION�NUMBEREVTUNM„DS.Wƒ1’USER�NUMBEREVTRD0„DS.Lƒ1’REQUESTOR'S�D0"EVTRA0„DS.Lƒ1’ADDRESS�OF�IOCB�(A0)EVTPST„DS.Bƒ1’PB�STATUSEVTPSZ„DS.Bƒ1’PB�LENGTHEVTLEN„EQU„*’LENGTH�OF�MESSAGE *Ç#*‚FHS�COMMAND�BIT�EQUATES�(16�BITS)*ÇFHALLOBƒEQU„7’ALLOCATEFHASGNBƒEQU„6’ASSIGN&FHCHNGBƒEQU„5’CHANGE�ACCESS�PERMISSIONFHRENMBƒEQU„4’RENAMEFHPROTBƒEQU„3’PROTECTFHCLOSBƒEQU„2’CLOSEFHDELTBƒEQU„1’DELETEFHCKPTBƒEQU„0’CHECKPOINT!FHRATTBƒEQU„7’RETRIEVE�ATTRIBUTES#FHFDENBƒEQU„6’FETCH�DIRECTORY�ENTRY$FHFDMNBƒEQU„5’FETCH�DEVICE�MNEMONICS"FHCHLUBƒEQU„4’CHANGE�LU�ASSIGNMENTFHDVOLBƒEQU„0’DEFAULT�VOLUME *Ç"*‚FHS�OPTION�BIT�EQUATES�(16�BITS)*ÇFOPOVRTB‚EQU„3’OVERWRITEFOPTRNBƒEQU„4’TRUNCATE$FOPABFBƒEQU„5’ALLOCATE�SHARED�BUFFER'FOPBEGBƒEQU„6’POSITION�AT�BEGINNING/END!FOPADRBƒEQU„11‘RETURN�PHY.ADR�BITFOPSLUBƒEQU„0’SEND/RECEIVE�LUFOPKEPBƒEQU„15‘KEEP�ASSIGNMENT **‚IOS�FUNCTION�CODE�EQUATES*IOSFIO„EQU„0’DATA�TRANSFERIOSFCM„EQU„1’COMMANDSIOSFPV„EQU„$80�PRIV.�COMMANDS *Ç"*‚IOS�OPTION�BIT�EQUATES�(16�BITS)*ÇIOPASCBƒEQU„0’ASCII/BINARYIOPWATBƒEQU„1’WAIT/PROCEED4IOPUNPBƒEQU„2’CONDITIONAL�PROCEED/UNCONDITIONAL�PROCIOPFORBƒEQU„3’FORMATTED/IMAGE*IOPBRKBƒEQU„4’EXCLUSIVE�BREAK�NOTIFICATIONIOPECHBƒEQU„5’ECHO/NO�ECHOIOPRECBƒEQU„6’RECORD/BLOCK*IOPLRNBƒEQU„7’LOGICAL�RECORD/RANDOM�RECORD(IOPNOKBƒEQU„8’NO�KEY�RETURNED/RETURN�KEY0IOPNOCBƒEQU„9’NO�COMPLETION�ADDR/COMPLETION�ADDR!IOPINFBƒEQU„10‘INPUT�FORMAT/IMAGEIOPFTRKƒEQU„12‘FORMAT�TRACK&IOPCTABƒEQU„12‘CLEAR�TYPE�AHEAD�BUFFER(IOPCDOBƒEQU„12‘CLEAR�DISCARD�OUTPUT�MODEIOPTSKBƒEQU„15‘TASK�ID�SUPPLIED *Ç#*‚ATTENTION�EVENT�MESSAGE�STRUCTURE*Ç%ŠOFFSET�0’START�WITH�PARAMETER�OFFSETŠDS.Bƒ1’EVENT�LENGTHŠDS.Bƒ1’EVENT�CODEEVADEV„DS.Lƒ1’DEVICE�MNEMONICEVASTA„DS.Wƒ1’STATUS EVALEN„EQU„* *Ç(*‚ATTENTION�STATUS�BIT�EQUATES�(16�BITS)*ÇEVATNASƒEQU„1’DEVICE�ASSIGNED *Ç *‚IOS�PARAMETER�BLOCK�EXTENSIONS*Ç*ŠOFFSET�IOSBLN�START�WITH�END�OF�IOS�BLOCK!IOSTSK„DS.Lƒ1’REQUESTOR'S�TASK�ID!IOSSES„DS.Lƒ1’REQUESTOR'S�SESSIONIOSNLN„EQU„*’TOTAL�LENGTHŠPAGE *À***********5*‚DEVICE�CONTROL�BLOCK�(DCB)�DATA�STRUCTURE•*‚D�C�B‚* *À*********** ŠOFFSET�0’START�WITH�ZERO�OFFSET#DCBPTR„DS.Lƒ1’POINTER�TO�NEXT�BLOCKDCBAID„DS.Lƒ1’ASCII�IDENTIFIER6DCBDCQ„DS.Lƒ1’ADDRESS�OF�DCQ�ENTRY�(0=NOTHING�PENDING)#DCBDID„DS.Lƒ2’DRIVER�ID�(TASK�NAME)$DCBLUT„DS.Lƒ1’ADDRESS�OF�CURRENT�LUT2DCBATT„DS.Lƒ1’ATTRIBUTES�OF�DEVICE†7/6/83�MOTOROLA DCBWCD„DS.Bƒ1’WRITE�PROTECT�CODEDCBRCD„DS.Bƒ1’READ�PROTECT�CODEDCBTMO„DS.Wƒ1’USE�FLAGDCBWNT„DS.Wƒ1’WRITE�COUNTDCBRNT„DS.Wƒ1’READ�COUNTDCBFLG„DS.Wƒ1’DEVICE�FLAGDCBCCB„DS.Lƒ1’CHANNEL�ID#DCBCDV„DS.Bƒ1’CHANNEL�DEVICE�NUMBER!DCBPRI„DS.Bƒ1’CONNECTION�PRIORITY#DCBCRN„DS.Lƒ1’CURRENT�RECORD�NUMBER8DCBIOS„DS.BƒIOSBLN�ROOM�FOR�IOCB�(EXCLUDING�EXTENSIONS!),DCBLBA„DS.Lƒ1’LOGICAL�ADDRESS�OF�PARAM�BLOCK-DCBCCF„DS.Bƒ1’CONFIGURATION�COORDINATION�FLAG'*�0�-->�DEVICE�IN�DEFAULT�CONFIGURATION2*�1�-->�DEVICE�MAY�NOT�BE�IN�DEFAULT�CONFIGURATIONDCBBCT„DS.Bƒ1’BREAK�COUNT*DCBBRK„DS.Lƒ1’ADDRESS�OF�BREAK�SERVICE�LUT#DCBSRV„DS.Lƒ1’BREAK�SERVICE�ADDRESS7DCBTSK„DS.Lƒ1ˆEVENT�CLAIMER�-->�TASK�NAME�7/6/83�IEE488�SESSION�NUMBERˆ7/6/83�IEE488@DCBSUP„DS.Lƒ1ˆADDRESS�OF�SUPERVISOR�DCB�OR�SESSION„7/6/83�IEE4880*™NUMBER�IF�THIS�IS�SUPERVISOR�DCBˆ7/6/83�IEE488ADCBSOP„DS.Lƒ1ˆSUPERVISOR/SUBORDINATE�DCB�OPEN�COUNTƒ7/6/83�IEE488-*™FOR�EVERY�SUBORDINATE�DEVICE†9/13/83�IEE488.*™THAT�IS�OPENED,�THIS�COUNT�IS…9/13/83�IEE488!*™INCREMENTED�BY�1’9/13/83�IEE488DCBRSV„DS.Lƒ1‹4�BYTESŠDS.Lƒ1‹4�BYTESŠDS.Lƒ1‹4�BYTESŠDS.Lƒ1‹4�BYTES*.*œRESERVED�BUFFER�OF�16�BYTES�FOR�FUTURE�USAGE+*œBETWEEN�THE�DEVICE�INDEPENDENT�AND�DEVICE*œDEPENDENT�INFORMATION**‚DEVICE�DEPENDENT�PORTION*+DCBDEV„EQU„*’START�DEVICE�DEPENDENT�PORTION&DCBLEN„EQU„DCBDEV+IOSREC†RECORD�LENGTH%DCBSEC„EQU„DCBDEV+IOSRSZ†DISK�SECTORS)DCBSIZ„EQU„DCBDEV+IOSRSZ†SCREEN/PAGE�SIZE&DCBTMW„EQU„DCBDEV+IOSWTO†WRITE�TIMEOUT%DCBTMR„EQU„DCBDEV+IOSRTO†READ�TIMEOUT*E* DEVICE DEPENDENT PORTION FOR TTY COMPATABILITY THAT WAS THROWN AWAY * ORIGINALLY*)DCBSBS„EQU„DCBDEV+IOSBRC†PROGRAMMING�INFO)DCBHBS„EQU„DCBDEV+IOSRTV†PROGRAMMING�INFO�OFFLINE„1�-->�ONLINEDFLGWP„EQU„1„WRITE�PROTECT¬"DFLGSC„EQU„2„DEVICE�STATUS�CHANGE¥+DFLGIN„EQU„3’DEVICE�BUSY�FOR�INITIALIZATION*DFLGCF„EQU„4’DEVICE�BUSY�FOR�CONFIGURATION(DFLGCT„EQU„5’CANCEL�TIMER�0-->NO‚1-->YES7DFLGIT„EQU„6’SET�-->�IGNORE�TIMER�EVENT�FOR�THIS�DEVICE#DFLIOEOT�EQU…7’0�-->�TASK�IS�ACTIVE#*£1�-->�EOT�TERMINATION�IN�PROGRESS*Ç*‚DCBATT�BIT�EQUATES�(16�BITS)*ÇDATRED„EQU„0’SUPPORTS�READDATWRT„EQU„1’SUPPORTS�WRITEDATBIN„EQU„2’SUPPORTS�BINARYDATRAN„EQU„3’SUPPORTS�RANDOMDATIMG„EQU„4’SUPPORTS�IMAGEDATHIO„EQU„5’SUPPORTS�HALT�I/O%DATPOS„EQU„6’SUPPORTS�POSITION�RECORDDATFMK„EQU„7’SUPPORTS�FILEMARKDATIND„EQU„8’INTERACTIVE�DEVICEDATPRT„EQU„9’PRINTER�DEVICEDATSPL„EQU„10‘SUPPORTS�SPOOLING+DATWRC„EQU„11‘SUPPORTS�WRITE�WITH�CRC�CHECK4DATSPD„EQU„12‘SUPPORTS�SPECIAL�PURPOSE�DEVICE�DRIVER,DATSHR„EQU�13�DEVICE�IS�NOT�SHARABLE¡IEEE488%DATBDV„EQU�14�BUSSABLE�DEVICE¨IEEE488 *ÄIEEE488*‹B13+B14�==>†00�=�NONEŸIEEE488$*œ01�=�NON-SHARED�BUS�DEVICEŽIEEE488%*œ10�=�SHARED�BUSSABLE�DEVICE�IEEE488)*œ11�=�NON-SHARED�BUSSABLE�DEVICE‰IEEE488 *Ç*‚DCBTMO�VALUES�(16�BITS)*Ç *ˆ0�=�NOT�ACTIVE�(OR�TIMED�OUT)¢$*ˆ+�=�ACTIVE�IN�DATA�TRANSFER�PHASEž"*ˆ-�=�ACTIVE�IN�TERMINATION�PHASE *ÇŠPAGE *À***********3*‚SYSTEM�VALUE�TABLE�(SVT)�DATA�STRUCTURE—*‚S�V�T‚* *À*********** ŠOFFSET�0’START�WITH�ZERO�OFFSET SVTSOP„DS.Lƒ1’I/O�SYSTEM�OPTIONS4SVTQST„DS.Lƒ1’START�OF�DEVICE�CONNECTION�QUEUE�SPACE/SVTQND„DS.Lƒ1’END�OF�DEVICE�CONNECT�QUEUE�SPACESVTQUE„DS.Lƒ1’FIRST�DCQ/SVTLST„DS.Lƒ1’START�OF�LOGICAL�UNIT�TABLE�SPACE-SVTLND„DS.Lƒ1’END�OF�LOGICAL�UNIT�TABLE�SPACESVTLUT„DS.Lƒ1’FIRST�TABLE�ENTRY&SVTDST„DS.Lƒ1’START�OF�DCB�TABLE�SPACE$SVTDND„DS.Lƒ1’END�OF�DCB�TABLE�SPACESVTDCB„DS.Lƒ1’FIRST�TABLE�ENTRYSVTSDCBƒDS.Bƒ1’DCB�SEMAPHORESVTSLUTƒDS.Bƒ1’LUT�SEMAPHORESVTSDCQƒDS.Bƒ1’DCQ�SEMAPHORESVTSFCBƒDS.Bƒ1’FCB�SEMAPHOREO*>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*0*SVTSID„DS.Lƒ4’I/O�SYSTEM�ID�AND�REVISION�NUMBER*SVTSTCFƒDS.Bƒ1*œSYSTEM�TASK�CORDINATION�FLAG *œBIT‡MEANING%*ž0‡0�-->�IOS�INITIALIZATION�NOT�DONE*¦1�-->�IOS�INITIALIZATION…DONE%*ž1‡0�-->�FHS�INITIALIZATION�NOT�DONE*¦1�-->�FHS�INITIALIZATION…DONE%*ž2‡0�-->�FMS�INITIALIZATION�NOT�DONE*¦1�-->�FMS�INITIALIZATION…DONESVTFUTUƒDS.Bƒ15#*œREMAINING�15�BYTES�FOR�FUTURE�USE*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<)SVTBRK„DS.Lƒ2’TASK-ID�OF�UNCLAIMED�BREAKS6SVTBSA„DS.Lƒ1’SERVICE�ADDRESS�FOR�UNCLAIMED�BREAK�TASK *Ç*‚EQUATES�FOR�SVTSOP�(32�BITS)*ÇSVOPMU„EQU„0’MULTIPLE�USERSVOPFM„EQU„1’FMS�PRESENT *À***********3*‚LOGICAL�UNIT�TABLE�(LUT)�DATA�STRUCTURE—*‚L�U�T‚* *À*********** ŠOFFSET�0’START�WITH�ZERO�OFFSET#LUTPTR„DS.Lƒ1’POINTER�TO�NEXT�TABLELUTTID„DS.Lƒ1’TASK-ID!LUTSES„DS.Lƒ1’TASK�SESSION�NUMBER$LUTMLU„DS.Bƒ1’MAXIMUM�NUMBER�OF�LUNS!LUTCAS„DS.Bƒ1’CURRENT�ASSIGNMENTSLUTUNM„DS.Wƒ1’USER�NUMBERLUTBEG„EQU„*’BEGIN�LU�ENTRIES*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSET'LUTCAP„DS.Bƒ1’CURRENT�ACCESS�PERMISSION!LUTCSF„DS.Bƒ1’CURRENT�STATUS�FLAG'LUTATT„DS.Wƒ1’ATTRIBUTES�OF�DEVICE/FILE LUTDCB„DS.Lƒ1’ADDRESS�OF�DCB/FCB!LUTSEG„EQU„*’LENGTH�OF�EACH�ENTRY *Ç*‚LUTCSF�BIT�EQUATES�(8�BITS)*ÇLUSFAC„EQU„0’ACTIVELUSFIO„EQU„1’I/O�PENDINGLUSFCP„EQU„2’CLOSE�PENDINGLUSFAS„EQU„3’ASSIGN�PENDINGLUSFCW„EQU„4’CONNECTION�WAIT*LUSEVC„EQU„5’DRIVER�EVENTS�CLAIMED�IEEE488LUSFDV„EQU„7’DEVICE�ASSIGNMENT *À***********5*‚DEVICE�CONNECT�QUEUE�(DCQ)�DATA�STRUCTURE•*‚D�C�Q‚* *À*********** ŠOFFSET�0’START�WITH�ZERO�OFFSET#DCQPTR„DS.Lƒ1’POINTER�TO�NEXT�TABLE'DCQNXT„DS.Lƒ1’POINTER�TO�NEXT�DCB�ENTRYDCQDCB„DS.Lƒ1’ADDRESS�OF�DCBDCQLUT„DS.Lƒ1’ADDRESS�OF�LUT"DCQLUE„DS.Lƒ1’ADDRESS�OF�LUN�ENTRY%DCQLAD„DS.Lƒ1’LOGICAL�ADDRESS�OF�IOCBDCQTIN„DS.Bƒ1’TRAP�INDICATORDCQRES„DS.Bƒ1’RESERVED�BYTE$DCQPLN„DS.Bƒ1’PARAMETER�BLOCK�LENGTHDCQPRI„DS.Bƒ1’PRIORITY DCQLEN„EQU„************************ Ending of &.NIO.EQ ***********************‰PAGE**************************** Beginning of &.PANEL.EQ ******************************‰FRONT�PANEL�EQUATES* ŠOFFSET�00FPDMPTST‚DS.Wƒ1’MEMORY�DUMP,�ENABLE,�SYSTEM�TESTFPTTO…DS.Wƒ1’TEST�TIME-OUTFPLEDSTƒDS.Wƒ1’LED�STATUS************************* Ending of &.PANEL.EQ *************************ééééé éqŠPAGE************************** Beginning of &.PAT.EQ ****************************ˆPERIODIC�ACTIVATION�TABLE*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLEPAT‡DS.Lƒ1’!PAT„DEBUG�TOOL0PATFHDRƒDS.Lƒ1’ADDRESS�OF�1ST�ENTRY�IN�FREE�LIST*PATHDR„DS.Lƒ1’Address�of�1st�entry�in�list9PATTSIZƒDS.Lƒ1’Size�of�Periodic�Activation�table�in�bytes =PATBABTƒDS.BƒBABBLNŽSpace�for�BAB�used�to�schedule�routine�to*¤fire�PAT�nodes $PATENTRY‚EQU„*’OFFSET�TO�FIRST�ENTRY**ˆPAT�ENTRY�DEFINITION*&ŠOFFSET�0’OFFSET�IS�FROM�ENTRY�POINTER,PATNEXTƒDS.Lƒ1’POINTER�TO�NEXT�ENTRY�IN�LISTPATOCMSK‚EQU„$0202ŽMASK�FOR�BOTH�PATOCANC�AND�PATOFINL�OPTION.*9PATBIGDELTA�EQU‚$7FFFFFFFŠBig�delta�value�for�dummy�nodes*PATDUMMYID�EQUƒ$FFFFFFFEŠID�for�dummy�nodePATDATEID�EQU„$FFFFFFFF* Macro *�Entry:‚A1…points�to�PAT�header"*‰A2…points�to�entry�to�be�removed>*�Exit:ŠNo�registers�altered,�PAT�node�pointed�at�by�A2�now�in *“free�queue.*PAT_FREE_NODE MACROŠMOVE.L�PATFHDR(A1),PATNEXT(A2)ŠMOVE.L�A2,PATFHDR(A1)ŠENDM*********************** Ending of &.PAT.EQ ***********************zA‰PAGE************************** Beginning of &.RAD.EQ **************************K*==========================================================================**ˆEQUATE�FILE�FOR�RAD1�TABLE*K*==========================================================================*'*ˆThe�RAD1�table�consists�of�4�parts�--8*’(1)‚The�"header",�which�contains�various�constants�and'*œpointers�to�other�parts�of�the�table.9*’(2)‚RAUSRLST,�which�is�a�table�of�user-RAD�combinations2*œfor�keeping�track�of�which�users�are�using�which*œRADs�and�vice�versa.6*’(3)‚RARADLST,�which�is�a�table�of�RADs�showing�which)*œchannels�are�assigned,�RAD�status,�etc.@*�and‚(4)‚RATEMP,�which�is�a�section�of�memory�to�be�used�by�the**œdriver�for�temporary�or�working�storage.*K*==========================================================================**ƒHeader�area�equates�.�.�.*4RARADTBL‚EQU„0’Start�of�table�area,�set�to�"!RAD"�as*£an�"eye-catcher".FRARADLAD‚EQU„RARADTBL+4†Offset�to�start�of�RARADLST�in�the�RAD1�table.6RARADUSD‚EQU„RARADLAD+2‰#�of�RADs�in�RARADLST�already.9RANUMRAD‚EQU„RARADUSD+1‰#�of�RADs�defined�in�this�system.RAUSRLST‚EQU„RAHDRLNG‹RAUSRLST�always�starts�immediately�after*£the�header�area./RAUUSRNO‚EQU„0’Offset�into�table�entry�for�task*£name/session�#.;RAURADID‚EQU„RAUUSRNO+8‰Offset�into�table�entry�for�RAD-ID.8RAUSTATƒEQU„RAURADID+4‰Offset�into�table�entry�for�"RAD-&*£aborted/restarted"�flag.‚(Used�to�be(*£sure�all�users�of�a�RAD�are�"informed"*£of�abort�or�restart.)7RAUEROPT‚EQU„RAUSTAT+2ŠError-notification�options�flag.;RAUERSTO‚EQU„RAUEROPT+2‰Error-notification�storage�addr�for *£error�code.;RAUERSUB‚EQU„RAUERSTO+4‰Error-notification�subroutine�addr.ƒ3Œ5RAULNG„EQU„RAUERSUB+4‰Length�of�an�entry�in�RAUSRLST.**ƒRARADLST�equates�.�.�.*)RARADLID‚EQU„0’Offset�in�entry�to�RAD-ID.>RARDSTAT‚EQU„RARADLID+4‰Offset�into�table�entry�for�RAD�status*£flag.‰PAGE****************************** Beginning of &.SCN2681.EQ ****************************** H*‚The�Signetics�SCN2681�Dual�Universal�Asynchronous�Receiver/TransmitterB* (DUART) is a single-chip communications device that provides twoG* independent full-duplex asynchronous receiver/transmitter channels inA*�a�single-package.‚Each�channel�can�be�programmed�independently. G*‚Channel�A�is�addressed�beginning�at�the�base�of�the�memory-mapped�I/OL* space and Channel B is addressed begin ning at byte 16. The mode registers,H* status, clock select, command, Rx holding and Tx holding registers areG* duplicated for each channel. The interrupt status, interrupt mask andG*�other�registers�can�be�accessed�from�just�one�channel.‚The�offsets�to-* the individual registers are defined below. ‰OFFSET„0*=*ˆArrangement�of�registers�off�memory-mapped�I/O�base�address*MREG1„EQU�0‰Mode�Register�1MREG2„EQU�0‰Mode�Register�2!SREG…EQU�2‰Status�Register�(read)(CSEL…EQU�2‰Clock�Select�Register�(write)CREG…EQU�4‰Command�Register0DREG…EQU�6‰Receiver/Transmitter�Holding�RegisterO*------------------------------------------------------------------------------5IPCR…EQU�8‰Input�Port�Change�Register�(read)‚-�A�side5ACR†EQU�8‰Auxiliary�Control�Register�(write)�-�A�side4ISR†EQU�10ˆInterrupt�Status�Register�(read)ƒ-�A�side3IMR†EQU�10ˆInterrupt�Mask�Register�(write)„-�A�side7OPSR…EQU�28ˆOutput�Port�'Set'ƒRegister�(write)�-�B�side9OPRR…EQU�30ˆOutput�Port�'Reset'�Register�(write)�-�B�side SPC 3*+*ˆMode�Register�1�field�definitions�(MREG1)* :*ˆMREG1�is�accessed�when�the�channel�mode�register�pointer-*ˆpoints�to�MREG1�which�occurs�after�a�reset. F* Number of data bits per character to be transmitted & received [1:0]*DTBPC5ƒEQU�%00000000‡5�data�bits/character*DTBPC6ƒEQU�%00000001‡6�data�bits/character*DTBPC7ƒEQU�%00000010‡7�data�bits/character*DTBPC8ƒEQU�%00000011‡8�data�bits/character * Parity type select [2]PARODDƒEQU�%00000100‡Odd‚parity¶2¿:Ç6Ï2×) PAREVNƒEQU�%00000000‡Even�parity * Parity mode select [4:3]"PARENBƒEQU�%00000000‡Enable�parity!PARFRCƒEQU�%00001000‡Force‚parityPAROFFƒEQU�%00010000‡No…parity+PARMLTƒEQU�%00011000‡Special�Mulitdrop�Mode PAGE/* Error mode for the three FIFO status bits [5]=EMBLCKƒEQU�%00100000‡Status�provided�for�all�char�since�reset1EMCHARƒEQU�%00000000‡Status�provided�char-by-char * Receiver interrupt select [6]5RXIFFFƒEQU�%01000000‡Interrupts�upon�FIFO�full�status:RXIRDYƒEQU�%00000000‡Interrupts�upon�receiver�ready�status &* Receiver Request-to-send control [7]6CRXRTSƒEQU�%10000000‡Use�RTSAN�output�for�flow�control SPC 3*+*ˆMode�Register�2�field�definitions�(MREG2)* :*ˆMREG2�is�accessed�when�the�channel�mode�register�pointer9*ˆpoints�to�MREG2�which�occurs�after�any�access�to�MREG1. 5* Stop bit length select for char lengths 6,7,8 [3:0]"SB09_16‚EQU�0�0.563�stop�bits/char"SB10_16‚EQU�1�0.625�stop�bits/char"SB11_16‚EQU�2�0.688�stop�bits/char"SB12_16‚EQU�3�0.750�stop�bits/char"SB13_16‚EQU�4�0.813�stop�bits/char"SB14_16‚EQU�5�0.875�stop�bits/char"SB15_16‚EQU�6�0.938�stop�bits/char"SB16_16‚EQU�7�1.000�stop�bits/char"SB25_16‚EQU�8�1.563�stop�bits/char"SB26_16‚EQU�9�1.625�stop�bits/char#SB27_16‚EQU�10Ž1.688�stop�bits/char#SB28_16‚EQU�11Ž1.750�stop�bits/char#SB29_16‚EQU�12Ž1.813�stop�bits/char#SB30_16‚EQU�13Ž1.875�stop�bits/char#SB31_16‚EQU�14Ž1.938�stop�bits/char#SB32_16‚EQU�15Ž2.000�stop�bits/charSB1†EQU�SB16_16‰1�stop�bit/char SB2†EQU�SB32_16‰2�stop�bits/char 5*ˆNOTE:�Add�0.5�to�values�shown�for�0-7�if�channel�is!*ˆprogrammed�for�5�bits/character * Clear-to-send control [4]9CTXCTSƒEQU�%00010000‡CTSAN�is�checked�before�transmitting )* Transmitter request-to-send control [5]>CTXRTSƒEQU�%00100000‡RTSAN�deactivated�if�transmitter�disabled * Channel mode select [7:6]*�They�are�cleared�when�the�IPCR�is�read.‚They�can�generate�an#* interrupt when programmed by ACR./DELIP0ƒEQU�4�(1)change�of�state�at�IP0�detected/DELIP1ƒEQU�5�(1)change�of�state�at�IP1�detected/DELIP2ƒEQU�6�(1)change�of�state�at�IP2�detected/DELIP3ƒEQU�7�(1)change�of�state�at�IP3�detected PAGE*;*ˆInterrupt�Status/Mask�Registers�bit�definitions�(ISR,IMR)* >* Setting a bit in the IMR causes an interrupt output when the%* correspnding bit is set in the ISR. (CLRTBEƒEQU�0�Bit�to�clear�TBE�interrupt.(CLRRCAƒEQU�1�Bit�to�clear�RCA�interrupt.(CLRBCIƒEQU�2�Bit�to�clear�BCI�interrupt.(CLRIP2ƒEQU�3�Bit�to�clear�IP2�interrupt. SPC 3*1*ˆOutput�Port�Set�and�Reset�Registers�(OPSR,OPRR)* 9* These fields are used to modify the RTS hardware lines.** To output a 'ready' signal, set RTS low.G* A write to OPSR sets RTS high: use OP0 for port A and OP1 for port B.F*�A�write�to�OPRR�sets�RTS�low:‚use�OP0�for�port�A�and�OP1�for�port�B.RTSAONƒEQU�$01RTSBONƒEQU�$02RTSAOFF‚EQU�$55RTSBOFF‚EQU�$AA*************************** Ending of &.SCN2681.EQ ***************************éé‰PAGE************************** Beginning of &.SEG.EQ ***************************/*ˆSEGMENT�DIRECTIVE�PARAMETER�BLOCK�DEFINITIONS*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLE"SGPB†EQU„*’SEGMENT�PARAMETER�BLOCK SGPBTASK‚DS.Lƒ1’TARGET�TASK�NAME(SGPBSESS‚DS.Lƒ1’TARGET�TASK�SESSION�CODE SGPBOPTƒDS.Wƒ1’DIRECTIVE�OPTIONS0SGPBATTR‚DS.Wƒ1’SEGMENT�ATTRIBUTES�(SEE�TSTSTAT)SGPBNAME‚DS.Lƒ1’SEGMENT�NAME%SGPBLA„DS.Lƒ1’SEGMENT�LOGICAL�ADDRESS%SGPBSL„DS.Lƒ1’SEGMENT�LENGTH�IN�BYTES,SGPBBUFF‚DS.Lƒ1’BUFFER�ADDRESS�USED�BY�RCVSA*SGPBL…EQU„*’SEGMENT�PARAMETER�BLOCK�LENGTH*#*„DIRECTIVE�OPTIONS�BIT�DEFINITIONS*;SGPBOATR‚EQU„15‘SEGMENT�ATTRIBUTES�GIVEN�IN�PARAMETER�BLOCK8SGPBOLAD‚EQU„14‘LOGICAL�ADDRESS�GIVEN�IN�PARAMETER�BLOCK;SGPBOPAD‚EQU„13‘EXEC�SUPPLIES�LOGICAL�ADDRESS�(=�PHYS�ADDR)0SGPBOPRM‚EQU„12‘MAKE�SHAREABLE�SEGMENT�PERMANENT:SGPBORMV‚EQU„11‘REMOVE�PERMANENT�STATUS�FROM�SHAREABLE�SEG;SGPBOLNG‚EQU„10‘USE�SEGMENT�LENGTH�GIVEN�IN�PARAMETER�BLOCK8SGPBOWAI‚EQU„10‘WAIT�IF�MEMORY�NOT�AVAILABLE�NOW�(GTSEG):SGPBOLES‚EQU„09‘WILL�SETTLE�FOR�LESS�MEMORY�THAN�REQUESTED,SGPBOPHY‚EQU„08‘ALLOCATE�AT�PHYSICAL�ADDRESS2SGPBOTYP‚EQU„07‘MEMORY�TYPE�OR�PARTITION�SPECIFIED*********************** Ending of &.SEG.EQ ***********************éééß" ‰PAGE****************************** Beginning of &.SIG2661.EQ *******************************‰TTL„SIG2661�CHIP�DESCRIPTION ŠOFFSET�0*>*‚Arrangement�of�registers�off�memory-mapped�I/O�base�address.*CREG†EQU„6’Command�register.SREG†EQU„2’Status�register.DREG†EQU„0’Data�register.MREG1…EQU„4’Mode�register�1MREG2…EQU„4’Mode�register�2 L*****************************************************************************(*‚Status�register�bit�definitionsƒ(SREG)*TXRDY…EQU„0’transmitter�readyRXRDY…EQU„1’receiver�readyDNR‡EQU„2’device�not�readyPEˆEQU„3’parity�errorDOVR†EQU„4’data�overrunFEˆEQU„5’framing�error�or�break(*£framing�error�if�data�in�read�register*£break�if�read�register�is�0DCD‡EQU„6’data�carrier�detectDSRB†EQU„7’data�set�ready**K****************************************************************************)*‚Command�register�bit�definitions‚(CREG)*TXEN†EQU„0’enable�transmitter!DTR‡EQU„1’set�data�terminal�readyRXEN†EQU„2’enable�receiverFBˆEQU„3’force�break1ERRSET„EQU„4’reset�error�flags�in�status�registerRTS‡EQU„5’request�to�sendAAˆEQU„6’async:�auto�echo�modeASˆEQU„7’asycn�mode**N*******************************************************************************)*‚Mode�register�2�bit�definitions�(MREG2)*-*ˆbaud�rate�bits�defined�elsewhere�(bits�0-3)**„%1111xxxx�field�definition*4ITCX16„EQU„%01110000Šinternal�clocks,�x16�clock�rate**O*********************************************************************************)*‚Mode�register�1�bit�definitions‚(MREG1)*:*„%XXXXXX11‚field�definition�for�mode�and�baud�rate�factor**ASY16X„EQU„%00000010Šasynchronous�16x�rate*1*„%xxxx11xx‚field�definition�for�character�length*'BIT5†EQU„%00000000Š5�bits�per�character'BIT6†EQU„%00000100Š6�bits�per�character'BIT7†EQU„%00001000Š7�bits�per�character'BIT8†EQU„%00001100Š8�bits�per�character*'*…%xx11xxxx‚field�definition‚for�parity*!PENBL…EQU„%00010000Šparity�enableèKñ (PTYPE…EQU„%00100000Šparity�type�even/odd*/*‰%11xxxxxx�field�definition�for�#�of�stop�bits*SB1‡EQU„%01000000Š1�stop�bit SB15†EQU„%10000000Š1.5�stop�bitsSB2‡EQU„%11000000Š2�stop�bits**************************** Ending of &.SIG2661.EQ ***************************ééééé é‰PAGE************************** Beginning of &.SPL.EQ ***************************5******************************************************‚SPOOLER�EQUATE�FILE-*‚CONTAINS�MACROS�FOR�FMSINT�AND�ALL�INTERNAL*‚SPOOLER�EQUATES5*******************************************************ŠMACROS�FOR�SPLFMS�(FMSINT)** SFHSCO PARAMETERS: * 1. COMMAND * 2. OPTIONS0*�3.�ADDRESS�REGISTER�(�->‚FHS�PARAMETER�BLOCK�)*>SFHSCO„MACRO‚*ŽSETS�COMMAND�AND�OPTIONS�IN�FHS�PARAMETER�BLOCKŠMOVE.L�#((\1)*$10000)+\2,(\3)ŠENDM** SIOSCO PARAMETERS: * 1. COMMAND * 2. OPTIONS0* 3. ADDRESS REGISTER ( -> IOS PARAMETER BLOCK )*>SIOSCO„MACRO‚*ŽSETS�COMMAND�AND�OPTIONS�IN�IOS�PARAMETER�BLOCKŠMOVE.L�#((\1)*$10000)+\2,(\3)ŠENDM** SFATTR PARAMETERS:1* 1. OPTIONS: FILE TYPE, OR'ED INTO OPTIONS FIELD* 2. RECORD SIZE ( 0 => VRL )/* 3. FAB AND DATA BLOCK SIZE, 2 ONE BYTE VALUES * 4. KEY SIZE0* 5. ADDRESS REGISTER ( -> FHS PARAMETER BLOCK )*9SFATTR„MACRO‚*’SETS�FILE�ATTRIBUTES�FOR�FHS�ALLOCATE�CALLŠOR.Wƒ#\1,FHSOPT(\5)…OPTIONSŠIFNEƒ\2$�MOVE.W�#\2,FHSLRL(\5)…RECORD�LENGTHŠENDCŠIFEQƒ\2�CLR.W‚FHSLRL(\5)ŠENDC<ŠMOVE.L�#(\4)*$10000+\3,FHSSIZ(\5)�KEY,�FAB,�DATA�BLOCK�SIZEŠENDM*ŠPAGE**‚SPOOLER�QUEUE�ENTRY�STRUCTURE* ŠOFFSET�0"QDEVICEƒDS.Lƒ1’DEVICE�NAME�(ASCII)/QFORMS„DS.Lƒ1’FORMS�ID�DEFAULT�=�'STND'ƒ(ASCII)QVOL†DS.Lƒ1’VOLUME�NAME“(ASCII)"QUSERN„DS.Wƒ1’USER�NUMBER‘(BINARY)"QCATLG„DS.Lƒ2’CATALOG�NAME�(ASCII)QFILEN„DS.Lƒ2’FILENAME”(ASCII)QEXT†DS.Wƒ1’EXTENSION•(ASCII)QTASKN„DS.Lƒ1’TASK�NAME“(ASCII)#QSESS…DS.Lƒ1’SESSION�NUMBER�(ASCII)!QJOBID„DS.Lƒ1’JOB�NUMBER’(BINARY)"QPRI†DS.Bƒ1’TASK�PRIORITY‘(BINARY)#QLUN†DS.Bƒ1’LUN�FOR�OUTPUT�(BINARY)QDATE…DS.Lƒ1’DATE™(BINARY)QTIME…DS.Lƒ1’TIME™(BINARY)-QSIZE…DS.Lƒ1’FILE�SIZE�-�#�OF�BLOCKS†(BINARY)QSTAT…DS.Bƒ1’STATUS—(BINARY).QCOPYS„DS.Bƒ1’#�OF�COPIES�DEFAULT�=�1…(BINARY) QLNG†EQU„***‚QSTAT�BIT�DEFINITIONS*+QSTATRDY‚EQU„0’READY�TO�OUTPUT�SPOOLER�FILEùL7 CN HQSTATACT‚EQU„1„ACTIVE-SPOOLER�FILE�ASSIGNED�AND�ALLOCATED�FOR�USER�INPUT-QSTATOUT‚EQU„2’BEING�OUTPUT�TO�SPOOLER�DEVICE4QSTATWAT‚EQU„3’MUST�WAIT�FOR�A�CONTINUE�TO�BE�ISSUED1QSTATFRM‚EQU„4’CAN'T�OUTPUT-NOT�MATCHING�FORMS�IDCQSTATIOE‚EQU„5‰IO�ERROR�ON�OUTPUT�FOUND,WAIT�FOR�CONTINUE�OR�CANCEL+QSTATCAN‚EQU„6’CANCEL�AN�ENTRY�BEING�OUTPUT7QSTATOAA‚EQU„7’BEING�OUTPUT�AND�ACTIVE(FILE�NOT�CLOSED)*?*‚ENTRY�STRUCTURE�OF�RESERVED�RECORDS�IN�THE�SPOOLER�QUEUE�FILE3*ˆ(RECORDS�0-8)�(RECORD�9�CONTAINS�LAST�JOB�NUMBER)* ŠOFFSET�0RDEV†DS.Lƒ1’DEVICE�NAME…(ASCII)RFRM†DS.Lƒ1’FORMS�ID‡(ASCII)HRSTAT…DS.L‚1�STATUS‚0=OK�TO�OUTPUT‚-1=FORMS�WAS�ISSUED,WAIT�FOR�CONTINUERLNG†EQU„*’ENTRY�LENGTH-RREC†EQU„QLNG/12ŒNUMBER�OF�ENTRIES�PER�RECORD**‚MISC�EQUATES*USER0…EQU„0’USER�NUMBER�0FOUT†EQU„3’LUN�FOR�OUTPUT�FILE DOUT†EQU„4’LUN�FOR�OUTPUT�DEVICE3BLANK…EQU„$20202020ŠBLANKS-USE�FOR�PARAMETER�BLOCKS0ENTRYLNG‚EQU„FHSNLN+EVTLEN†LENGTH�OF�1�ASQ�ENTRYCRˆEQU„$0D�CARRIAGE�RETURN�CODELFˆEQU„$0A�LINE�FEED�CODESPOOLF„EQU„$40�'@'&MYSES…EQU„1’.SPL�SESSION�NUMBER�NUMBER?BUFADR„EQU„$20000‹SEGMENT�START�ADDRESS�FOR�NON-SPOOLER�FILE�IO@BUFLNG„EQU„$A00ŠSEGMENT�LENGTH�(CHANGES�BY�SUBTASK�IF�TOO�SMALL)?REGOFF„EQU„50‹OFFSET�TO�REGISTERS�IN�START�TASK�PARAMETER�BLOCK&FOUR†EQU„4’OFFSET�OF�4�FOR�REGISTER�A1**‚SPLFLG�BIT�DEFINITIONS*9EOF‡EQU„0ŽFOUND�AN�END�OF�FILE�ON�READ�SPOOLER�QUEUE�FILE"PRNTER„EQU„1’DOING�IO�TO�A�PRINTER*NOTSPL„EQU„2’OUTPUTTING�A�NON-SPOOLER�FILE!PIOF†EQU„3’PROCEED�IO�IN �PROGRESS-IOERRF„EQU„4’IO�ERROR�FOUND�DURING�PROCEED�IO$RDYERR„EQU„5’OUTPUT�DEVICE�NOT�READY*1*‚SPLFLG1�BIT�DEFINITIONS�-�USED�BY�QUEUE�COMMAND*$OUTDEV„EQU„0’OUTPUT�MATCHING�DEVICES(OUTUSN„EQU„1’OUTPUT�MATCHING�USER�NUMBER+OUTSES„EQU„2’OUTPUT�MATCHING�SESSION�NUMBER OUTALL„EQU„3’OUTPUT�ENTIRE�QUEUE**‚BIT�DEFINITIONS�FOR�SUBTRERR*'RDERR…EQU„0’IO�ERROR�FOUND�ON�FILE�READ+WRTERR„EQU„1’IO�ERROR�FOUND�ON�DEVICE�WRITE?HDRERR„EQU„2‹IO�ERROR�FOUND�ON�DEVICE�WRITE�-�OUTPUTTING�HEADER?TERMERRƒEQU„3ŒTERMINATE�THE�SUB-TASK�AND�SET�TO�FILE�NOT�OUTPUT*A*‚SUB-TASK�EVENT�STRUCTURE�FOR�SENDING�IO�ERROR�EVENTS�TO�MONITOR* ŠOFFSET�0 IOERLNGƒDS.Bƒ1’EVENT�LENGTHƒ(12)IOERCDEƒDS.Bƒ1’EVENT�CODE„(32)+IOERMSGƒDS.Wƒ1’EVENT�MESSAGE�(SUBTERR�WORD)(IOERD0„DS.Lƒ1’CONTENTS�OF�DO�ON�IO�ERRORIOERNAMƒDS.Lƒ1’SUBTASK�NAME*%SUBTELNG‚EQU„12‘SUB-TASK�EVENT�LENGTH#SUBTECDE‚EQU„32‘SUB-TASK�EVENT�CODE*SPLECDEƒEQU„33‘.SPL�EVENT�CODE�TO�SUB-TASK*.*ˆERROR�MESSAGE�HANDLER�PARAMETR�BLOCK�OFFSETS* ŠOFFSET�0#EM_D0…DS.Lƒ1’D0�IOS/FHS�RETURN�CODE/EM_A0…DS.Lƒ1’A0�IOS/FHS�PARAMETER�BLOCK�ADDRESSEM_OPT„DS.Bƒ1’OPTIONS�FLAGEM_TLUNƒDS.Bƒ1’LDFLUN$EM_QRC„DS.Bƒ1’QUERY�RETURN�CHARACTEREM_KLUNƒDS.Bƒ1’CDFLUN(EM_SPA„DS.Lƒ1’START�ADDRESS�OF�USER�TEXT&EM_EPA„DS.Lƒ1’END�ADDRESS�OF�USER�TEXTŠPAGE*CMNˆEQU„$FFFFFF00ƒUSED�FOR�MOVE.L�$80-$FF�TO�GEN�2�BYTE�INSTRUCTIONS*%*‚SPLOOLER�QUEUE�ENTRY�RECORD�EQUATES*+LINEBL„EQU„QLNG�RECORD'S�LINE�BUFFER�LENGTHKEYSIZ„EQU„0’NULL�KEYS#VRLFIL„EQU„QLNG�FIXED�RECORD�LENGTH'MXRECL„EQU„LINEBL�MAXIMUM�RECORD�LENGTH**‚FILE�NAME�EQUATES*4FILNML„EQU„24‘FULLY�QUALIFIED�FILE�NAME�FIELD�LENGTH**‚DATA�BLOCK�EQUATES*BDEFSIZ„EQU„$108ˆ1�SECTOR�FAB/8�SECTOR�DATA�BLK(DEFAULT�ALLOCATION)$DBMAX…EQU„20‘MAXIMUM�DATA�BLOCK�SIZE*:*‚FMS�LOGICAL�ADDRESSES�FOR�SEGMENTS�TO�BE�USED�AS�BUFFERS*IFMSDBA„EQU„$10000�LOGICAL�BUFFER�START�FOR�FILE�DATA�BLOCK�(SHARED�W/FMS)NFMSSRA‚EQU�FMSDBA+DBMAX*$100�BUFFER�START�FOR�SOURCE�FILE�DB�OR�EXTRACT�BUFFER**‚DEFINE�DATA�LAYOUTS*:*‚********************************************************;*‚FMSINT�PARAMETER�BLOCK�(USED�BETWEEN�FMSINT�AND�SPOOLER)::*‚*********************************************************1ŠOFFSET�0’POINTED�TO�BY�A3�(A0�ON�CALL�TO�FMSINT)*FMSTAT„DS.Bƒ1’STATUSFMSCMD„DS.Bƒ1’COMMANDFMSREC„DS.Lƒ1’LRN7FMSBUF„DS.Lƒ1’FWA�OF�LINE�BUFFER,�POINTER�TO�FILE�NAMES$FMSRECNƒDS.Wƒ1’#�OF�RECORDS�AFFECTED*FMSEFS„DS.Bƒ1’FILE�STATUS*=EFSCHG„EQU„1�FILE�STATUS�CHANGED�(EDIT�FILE�.NE.�OUTPUT�FILE)* FMSOFS„DS.Bƒ1’OUTPUT�FILE�STATUS*&OFSDEL„EQU„1’OUTPUT�FILE�STATUS�DELETE**!*‚********************************‚FILENAME�PARAMETERS!*‚********************************)ŠOFFSET�0’POINTED�TO�BY�FMSBUF�IN�OPENCMD*FLNM1…DS.BƒFILNML�FULLY�QUALIFIED�FILENAMEŠDS.Wƒ1’RESERVEDŠDS.Wƒ1’READ/WRITE�CODES:OFSTAT„DS.Bƒ1ŽOUTPUT�FILE�STATUS„0=FILENAME1�IS�FOR�OUTPUTŠDS.Wƒ1’READ/WRITE�CODESŠPAGE**‚***************************‚MAP�FOR�FMSINT�SCRATCH�PAD*‚***************************(ŠOFFSET�0’POINTED�TO�BY�A6�DURING�FMSINT**‚MAP�FOR�UNINITIALIZED�DATA*EOFLRN„DS.Lƒ1’FILE'S�LAST�LRNEFLUN…DS.Bƒ1’FILE�LUNEFFLG…DS.Bƒ1’FILE�FLAG'* EFFLG = 0 => 'FILENAME1' IS EDIT FILE**LRECBA„DS.Lƒ1’LAST�RECORD'S�BUFFER�ADDRESS*%OUTRCZ„DS.Wƒ1’OUTPUT�FILE�RECORD�SIZE"OUTKYZ„DS.Bƒ1’OUTPUT�FILE�KEY�SIZE"SRCKYZ„DS.Bƒ1’SOURCE�FILE�KEY�SIZE'SRCRCZ„DS.Wƒ1’SOURCE�FILE�RECORD�LENGTHSRCDBE„DS.Lƒ1’BUFFER�END SRCDBL„DS.Lƒ1’BUFFER�LOGICAL�END*?DATASGLƒEQU„*ŒEND�OF�UNINITIALIZED�DATA�(ZEROED�OUT�BY�OPENCMD)**‚MAP�FOR�INITIALIZED�DATA*.SRCDBS„DS.Lƒ1’SOURCE�FILE�LOGICAL�BUFFER�START*;LRECRD„DS.Lƒ1�LRN�OF�LAST�RECORD�READ(-1�IF�NONE�AVAILABLE)*5STKPTR„DS.Lƒ1’STACK�POINTER�FOR�ABORT�FROM�SUBROUTINE****‡FMSINT�COMMAND�EQUATES*#OPENCMDƒEQU„1’FMS-OPEN�FILE�COMMAND#RDCMD…EQU„2’FMS-READ�RECORD�COMMAND&DELCMD„EQU„3’FMS-DELETE�RECORD�COMMAND(INSRTCMD‚EQU„4’FMS-INSERT�RECORD�COMMAND(REPLCMDƒ  EQU„5’FMS-REPLACE�RECORD�COMMANDŠPAGE*.*ˆOFFSETS�USED�BY�A�SPAWNED�SUB-TASK�DOING�THE*ˆACTUAL�SPOOLER�OUTPUT* ŠOFFSET�0 DATAST„EQU„*SCRATCHS‚DS.Bƒ154�SCRATCH�AREAŠDS.Bƒ200�STACK STACK…EQU„*&FHSPBS„DS.BƒFHSNLN�FHS�PARAMETER�BLOCK&IOSPBS„DS.BƒIOSBLN�IOS�PARAMETER�BLOCK#SPLQNS„DS.Lƒ2’TASK�NAME�AND�SESSIONSPLFLGSƒDS.Bƒ2’FLAGSSUBTERRƒDS.Wƒ1’ERROR�FLAGSCURRECSƒDS.Lƒ1’CURRENT�RECORD)QEVTS…DS.BƒENTRYLNG‹EVENT�PARAMETER�BLOCK(QBUFS…DS.BƒQLNG�QUEUE�ENRTY�BEING�OUTPUT BUFEND„DS.Lƒ1’BUFFER�END�ADDRESS)SBUFSA„DS.Lƒ1’SHARED�BUFFER�START�ADDRESS'SBUFEA„DS.Lƒ1’SHARED�BUFFER�END�ADDRESS/CURPT…DS.Lƒ1’CURRENT�POINTER�INTO�SHARED�BUFFERSAVLNG„DS.Lƒ1’BUFFER�SIZEFOPT†DS.Wƒ1’OUTPUT�FILETYPE1BUFSTRTƒDS.Lƒ1’NON-SPOOLER�FILE�DATA�AREA�ADDRESS DATALNGƒEQU„************************ Ending of &.SPL.EQ ***********************éééééé‰PAGE*************************** Beginning of &.SRVR.EQ *****************************‰SERVER�EQUATES*!*‰TYPE�7�MESSAGE�(SERVER�REQUEST)* ŠOFFSET�0TYP7SIZE‚DS.Bƒ1’MESSAGE�LENGTH'TYP7CODE‚DS.Bƒ1’MESSAGE�TYPE�CODE�($07)ATYP7TRAP‚DS.Bƒ1ŒTRAP�NUMBER�(BIT�7=SYS�TSK;6=TERM�MSG;5=LAST�TSK)TYP7PRIO‚DS.Bƒ1’PRIORITYTYP7TASK‚DS.Lƒ1’TASK�NAMETYP7SESS‚DS.Lƒ1’SESSIONTYP7USER‚DS.Wƒ1’USER�NUMBERTYP7D0„DS.Lƒ1’REQUESTOR'S�D0TYP7A0„DS.Lƒ1’REQUESTOR'S�A0&TYP7PBST‚DS.Bƒ1’PARAMETER�BLOCK�STATUS$TYP7PBSZ‚DS.Bƒ1’PARAMETER�BLOCK�SIZE'TYP7PBLK‚EQU„*’START�OF�PARAMETER�BLOCK**ˆPARAMETER�BLOCK�STATUS�CODES**T7STPMOV‚EQU„0’TOTAL�PARAMETER�BLOCK�MOVED,T7STPART‚EQU„1’PART�OF�PARAMETER�BLOCK�MOVED*T7STPADR‚EQU„2’BAD�PARAMETER�BLOCK�ADDRESS,T7STNORQ‚EQU„3’PARAMETER�BLOCK�NOT�REQUESTED**…BITS�SET�IN�TYP7TRAP�FIELD*2TYP7TSYS‚EQU„7’TASK�SENDING�MESSAGE�IS�SYSTEM�TASK-TYP7TTRM‚EQU„6’MESSAGE�IS�TERMINATION�MESSAGE+TYP7TLST‚EQU„5’TASK�IS�LAST�TASK�IN�SESSION7TYP7TRTT‚EQU„4’TASK�SENDING�MESSAGE�IS�A�REAL�TIME�TASK*"*�OPTIONS�AVAILABLE�ON�ACKNOWLEDGE*-TACKOSCC‚EQU„14‘SET�CONDITION�CODES�ON�RETURN TACKOSD0‚EQU„13‘DET�D0�ON�RETURN TACKOSA0‚EQU„12‘SET�A0�ON�RETURNTACKORDY‚EQU„11‘READY�THE�TASK%TACKOWTƒEQU„10‘PUT�TASK�IN�WAIT�STATETACKOSPD‚EQU„9’SUSPEND�THE�TASK,TACKOTRM‚EQU„8’SPEC�RESPONSE�TO�TERM�REQUEST************************ Ending of &.SRVR.EQ ************************  éé"1‰PAGE************************** Beginning of &.STR.EQ ************************** ŠLLENƒ120**†GENERAL�EQUATES*"TRMODE„EQU„15‘TRACE�MODE�BIT�IN�SR'SRMODE„EQU„13‘SUPERVISER�MODE�BIT�IN�SRBMULTPROC‚EQU„0ŠCOND�ASSEMBLY�FLAG�(MULTIPLE�PROCESSORS)�1=ON�0=OFFASHARMEMƒEQU„1ŠCOND�ASSEMBLY�FLAG�(MEMORY�SHARED�BY�MULTIPLE�PROC)CWAITMEMƒEQU„1ˆCOND�ASSEMBLY�FLAG�(WAIT�FOR�MEMORY�OPTION�AVAILABLE):EXECPRIO‚EQU„240�PRIORITY�SET�WHEN�EXEC�ROUTINES�RESTARTED6HIBIT…EQU„15‘HIGH�ORDER�BIT�NUMBER�-�USED�IN�BIT�TESTS**ŠSECTION�NUMBERS�FOR�LEVELS* LVLBASEƒEQU„2LEVEL00ƒEQU„LVLBASE+0LEVEL01ƒEQU„LVLBASE+1LEVEL02ƒEQU„LVLBASE+2LEVEL03ƒEQU„LVLBASE+3LEVEL04ƒEQU„LVLBASE+4LEVEL05ƒEQU„LVLBASE+5PATCHESƒEQU„15*(*†TRACE�FLAGS�-�SET�IN�TRACFLAG�(SYSPAR)*#TRCFTRP1‚EQU„15‘SET�TO�TRACE�TRAP�1%TRCFIO„EQU„14‘SET�TO�TRACE�INTERRUPTS-TRCFTIMR‚EQU„13‘SET�TO�TRACE�TIMER�INTERRUPTS.TRCFTRAP‚EQU„12‘SET�TO�TRACE�USER�TRAPS�(2-15)'TRCFEXCP‚EQU„11‘SET�TO�TRACE�EXCEPTIONS'TRCFDSPT‚EQU„10‘SET�TO�TRACE�DISPATCHES2TRCFUIOƒEQU„9’SET�TO�TRACE�USER�CLAIMED�INTERRUPTS.TRCFMMUƒEQU„8’SET�TO�TRACE�RETURN�FROM�LOADMMU/TRCFSINT‚EQU„7’SET�TO�TRACE�SIMULATED�INTERRUPT.TRCFSYSF‚EQU„6’SET�TO�TRACE�SYSFAIL�INTERRUPTSŠPAGE**ˆTRAP�1�EQUATES*T10‡EQU„0’NO�DIRECTIVET1GTSEGƒEQU„1’ALLOCATE�SEGMENT T1DESEGƒEQU„2’DEALLOCATE�SEGMENTT1TRSEGƒEQU„3’TRANSFER�SEGMENT'T1ATTSEG‚EQU„4’ATTACH�SHAREABLE�SEGMENT*T1SHRSEG‚EQU„5’GRANT�SHARED�SEGMENT�ACCESS'T1MOVELL‚EQU„6’MOVE�DATA�BETWEEN�SPACES(T1DCLSHR‚EQU„7’DECLARE�SEGMENT�SHAREABLE)T1SNAPTRAC�EQUƒ8’MOVE�TRACE�TABLE�TO�USER(T1RCVSAƒEQU„9’RECEIVE�SEGMENT�ATTRIBUTEST1GTTIDƒEQU„10‘GET�TASK�IDT1CRTCBƒEQU„11‘CREATE�TCBT1GTTNAME�EQU„12‘GET�TASKNAMET1STARTƒEQU„13‘START�TASK T1ABORTƒEQU„14‘ABORT�TASK�(SELF)#T1TERM„EQU„15‘TERMINATE�TASK�(SELF)(T1TERMTƒEQU„16‘TERMINATE�TASK�(NOT�SELF)#T1SUSPND‚EQU„17‘SUSPEND�TASK�(SELF)%T1RESUME‚EQU„18‘RESUME�SUSPENDED�TASK)T1WAIT„EQU„19‘TASK�BECOMES�BLOCKED�(SELF)+?4@<3D™L„T-%T1WAKEUP‚EQU„20‘WAKEUP�A�WAITING�TASK0T1DELAYƒEQU„21‘DELAY�SOME�NUMBER�OF�MILLISECONDS$T1RELINQ‚EQU„22‘RELINQUISH�EXECUTION'T1TSKATTR�EQU„23‘RETURN�TASK�ATTRIBUTES$T1SETPRI‚EQU„24‘SET�CURRENT�PRIORITYT1STOP„EQU„25‘STOP�RUNNING�TASK4T1EXPVCT‚EQU„26‘SAVE�TASK'S�EXCEPTION�VECTOR�ADDRESS/T1TRPVCT‚EQU„27‘SAVE�TASK'S�TRAP�VECTOR�ADDRESS)T1TSKINFO�EQU„28‘MOVE�TASK�INFO�TO�CALLER+T1RQSTPA‚EQU„29‘REQUEST�PERIODIC�ACTIVATION'T1DELAYW‚EQU„30‘DELAY�WITH�WAIT�OPTIONST1GTASQƒEQU„31‘ALLOCATE�AN�ASQT1DEASQƒEQU„32‘DEALLOCATE�ASQT1SETASQ‚EQU„33‘SET�ASQ�STATUS#T1RDEVNT‚EQU„34‘READ�EVENT�FROM�ASQ!T1QEVNTƒEQU„35‘QUEUE�EVENT�TO�ASQT1WTEVNT‚EQU„36‘WAIT�FOR�EVENT!T1RTEVNT‚EQU„37‘RETURN�FROM�EVENTT1GTEVNT‚EQU„38 T139†EQU„39 T140†EQU„40"T1ATSEMƒEQU„41‘ATTACH�TO�SEMAPHORE T1WTSEMƒEQU„42‘WAIT�ON�SEMAPHORET1SGSEMƒEQU„43‘SIGNAL�SEMAPHORET1DESEMƒEQU„44‘DETACH�SEMAPHORET1CRSEMƒEQU„45‘CREATE�SEMAPHORE3T1DESEMA‚EQU„46‘DETACH�ALL�SEMAPHORES�FOR�THIS�TASK T147†EQU„47 T148†EQU„48 T149†E  QU„49 T150†EQU„50.T1SERVER‚EQU„51‘ESTABLISH�SERVER�FOR�USER�TRAP+T1DSERVE‚EQU„52‘DETACH�FROM�SERVER�FUNCTION.T1DERQST‚EQU„53‘SET�USER/SERVER�REQUEST�STATUS+T1AKRQST‚EQU„54‘ACKNOWLEDGE�SERVICE�REQUEST T155†EQU„55 T156†EQU„56 T157†EQU„57 T1CDIR„EQU„58 T159†EQU„59T1CMR…EQU„60‘CHANNEL�REQUEST1T1CISR„EQU„61‘CLAIM�VECTOR�-�INTRRUPT�SERVICE�RTN)T1SINT„EQU„62‘SIMULATE�USER�I/O�INTERRUPT T163†EQU„63*T1EXMONƒEQU„64‘ATTACH�TO�EXCEPTION�MONITOR-T1DEXMON‚EQU„65‘DETACH�FROM�EXCEPTION�MONITOR*T1EXMMSK‚EQU„66‘SET�EXCEPTION�MONITOR�MASK"T1RSTATE‚EQU„67‘RECEIVE�TASK�STATET1PSTATE‚EQU„68‘PUT�TASK�STATE0T1REXMON‚EQU„69‘EXECUTE�TASK�UNDER�EXMON�CONTROL T170†EQU„70 T171†EQU„71T1MOVEPL‚EQU„72!T1STDTIM‚EQU„73‘SET�DATE�AND�TIME!T1GTDTIM‚EQU„74‘GET�DATE�AND�TIME T1FLUSHC‚EQU„75‘FLUSH�USER�CACHEŠPAGE**ˆTRAP�0�EQUATES*T0P‡EQU„1’SEMAPHORE�P�(WAIT)T0V‡EQU„2’SEMAPHORE�V�(SIGNAL) T0READYƒEQU„3’TASK�TO�READY�LIST%T0PAGALƒEQU„4’ALLOCATE�PHYSICAL�PAGES T0PGFR„EQU„5’FREE�PHYSICAL�PAGEST0GETTCB‚EQU„6’SEARCH�TCB�LIST'T0FNDSEG‚EQU„7’FIND�SEGMENT�NAME�IN�TST2T0LOGPHY‚EQU„8’LOGICAL�TO�PHYSICAL�ADDRESS�CONVERT'T0FNDGSG‚EQU„9’FIND�SEGMENT�NAME�IN�GST5T0QEVNTN‚EQU„11‘PLACE�EVENT�IN�ASQ�-�ARG�IS�TASK�NAME2T0FNDSEM‚EQU„12‘FIND�ENTRY�IN�USER�SEMAPHORE�TABLE6T0GTXTCB‚EQU„13‘GET�TCB�USING�SESSION�PROVIDED�IN�CALL5T0PAUSEƒEQU„14‘PAUSE�WHILE�WAITING�FOR�IO�TO�COMPLETE.T0EXABRT‚EQU„21‘ABORT�USER�TASK�FROM�EXEC�MODE*T0WAKEUP‚EQU„22‘WAKEUP�TASK�FROM�EXEC�MODE7T0QEVNTT‚EQU„23‘PLACE�EVENT�IN�ASQ�-�ARG�IS�TCB�ADDRESST0SCHEDƒEQU„36�SCHEDULE�A�ROUTINE�FOR�EXECUTION�IN�BACKGROUND.1T0GUARDƒEQU„37‘CALL�A�SUBROUTINE�IN�GUARDED�MODE.*8*„THE�FOLLOWING�EQU'S�DEFINE�ENTRIES�TO�SUBROUTINES�ONLY0*ˆTRAP�0�ENTRIES�FOR�EXTERNAL�CALLS�DO�NOT�EXIST*5T0RYEXT1‚EQU„3’READY�ROUTINE�ENTRY�-�FROM�TRAP�1�EXIT0T0RYEXIR‚EQU„3’READY�ROUTINE�ENTRY�-�FROM�EXITIR�'!TCB')�then�do;*�then�return�(task�not�found);*ˆend;*GET_TARGET_TCB MACROŠMOVE.L�(A4),D0 ŠBEQ.S‚TCB1\@ ŠMOVE.L�D0,A5TTB_01:ŠCMP.L‚#'!TCB',(A5)TTE_01: ŠBEQ.S‚TCB2\@ ŠEXITƒRTCDTASK   TCB1\@: ŠMOVE.L�A6,A5 TCB2\@:ŠENDM*********************** Ending of &.STR.EQ ***********************ééé‰PAGE*************************** Beginning of &.TACK.EQ *****************************‰SERVER�ACKNOWLEDGE�EQUATES*"*‰OPTIONS�AVAILABLE�ON�ACKNOWLEDGE*-TACKOSCC‚EQU„14‘SET�CONDITION�CODES�ON�RETURN TACKOSD0‚EQU„13‘SET�D0�ON�RETURN TACKOSA0‚EQU„12‘SET�A0�ON�RETURNTACKORDY‚EQU„11‘READY�THE�TASK%TACKOWTƒEQU„10‘PUT�TASK�IN�WAIT�STATETACKOSPD‚EQU„9’SUSPEND�THE�TASK,TACKOTRM‚EQU„8’SPEC�RESPONSE�TO�TERM�REQUEST************************ Ending of &.TACK.EQ ************************ééééé\‰PAGE************************** Beginning of &.TCB.EQ ****************************ˆTASK�CONTROL�BLOCK**2*†USE�ASƒNAME(AX)‚WHERE�AX=ADDRESS�OF�START�OF�TCB1*‰WHERE‚AX�IS�THE�ADDRESS�OF�THE�START�OF�THE�TCB"*‰AND�NAME�IS�ONE�OF�THE�FOLLOWING*ŠOFFSET�0’START�AT�ZERO"TCB‡DS.Lƒ1’'!TCB'‚DUMP�EYE�CATCHER#TCBALL„DS.Lƒ1’LINK�FOR�ALL�TCB�LIST,TCBGROUP‚DS.Lƒ1’LINK�FOR�TCB-THIS-GROUP�LIST#TCBREADY‚DS.Lƒ1’LINK�FOR�READY�LISTTCBNAMEƒDS.Lƒ1’4-BYTE�TASK�NAMETCBSESSN‚DS.Lƒ1’SESSION�CODE-TCBMON„DS.Lƒ2’MONITOR�TASKNAME�+�SESSION�CODE+TCBSEM„DS.Lƒ1’LINK�TO�NEXT�SEMAPHORE�WAITER$TCBCPRIƒDS.Bƒ1’CURRENT�TASK�PRIORITY"TCBLPRIƒDS.Bƒ1’TASK�LIMIT�PRIORITY8TCBRPRIƒDS.Bƒ1’PRIORITY�USED�TO�ENTER�TASK�IN�READY�LIST'TCBIOCNT‚DS.Bƒ1’COUNT�  OF�PENDING�INPUTSTCBATTRƒDS.Wƒ1’TASK�ATTRIBUTES=TCBATTIƒEQU„TCBATTR+1Š2ND�BYTE�OF�ATTRIBUTES�(INTERNAL�FLAGS)TCBABORT‚DS.Wƒ1’ABORT�CODE"TCBSTATE‚DS.Lƒ1’CURRENT�TASK�STATE.TCBSTAT2‚EQU„TCBSTATE+1‰2ND�BYTE�OF�STATE�WORDTCBTSTSM‚DS.Wƒ3’TST�SEMAPHORE+TCBTST„DS.Lƒ1’POINTER�TO�TASK�SEGMENT�TABLETCBASQSM‚DS.Wƒ3’ASQ�SEMAPHORETCBASQ„DS.Lƒ1’POINTER�TO�ASQ1TCBCHANƒDS.Lƒ1’LINK�TO�NEXT�CHANNEL�CONTROL�BLOCK0TCBEVECT‚DS.Lƒ1’ADDRESS�OF�TASK�EXCEPTION�VECTOR+TCBTVECT‚DS.Lƒ1’ADDRESS�OF�TASK�TRAP�VECTOR*ŠDS.Lƒ1’RESERVED�FOR�FUTURE�USE6TCBNAU„DS.Lƒ1’ADDRESS�OF�NAT�ENTRY�IF�THIS�TASK�IS�NAU;TCBDLAYƒDS.Lƒ1‘ADDRESS�OF�DELAY�ENTRY�IN�PERIODIC�ACT�TABLE(ŠDS.Wƒ1’SAVE�UPPER�1/2�OF�D0�ON�TRAP�1'S/TCBISRSƒDS.Wƒ1’ISR�ERROR�CODE�-�SAVE�FOR�WAKEUPŠDS.Lƒ3’RESERVED�FOR�FUTURE�USE(TCBENTRY‚DS.Lƒ1’TASK�INITIAL�ENTRY�POINT/TCBUSERƒDS.Wƒ1’USER�NUMBER�ASSOCIATED�WITH�TASKTCBSSP„DS.Bƒ1’EXEC�STACK�DEPTH6TCBUTRPƒDS.Bƒ1’USER�TRAP�NUMBER�-�SET�WHEN�TRAP�OCCURS* *†SAVE�AREAS*TCBXREGS‚DS.Lƒ8’EXEC�REGISTERSTCBXA0„DS.Lƒ1’EXEX�REGISTER�A0ŠDS.Lƒ6TCBSAFEƒEQU„*’EXEC�REGISTERS8TCBATSKƒDS.Lƒ1’TASK�NAME�OF�TASK�THAT�CAUSED�TERMINATION6TCBASESƒDS.Lƒ1’SESSION�OF�TASK�THAT�CAUSED�TERMINATION;TCBBERRƒDS.Lƒ2‘INFO�PLACED�ON�STACK�BY�BUS�OR�ADDRESS�ERRORe:nBv ŠDS.Bƒ$100-*TCBSTKA6‚EQU„*-(4+2+4+2)TCBSTKSR‚EQU„*-(2+4+2)TCBSTKPC‚EQU„*-(4+2)TCBSTKVR‚EQU„*-(2)TCBROOMƒEQU„$100-TCBSAFE*TCBD0…DS.Lƒ1’USER'S�D0TCBD1…DS.Lƒ7’USER'S�D1�THRU�D7TCBA0…DS.Lƒ1’USER'S�A0TCBA1…DS.Lƒ5’USER'S�A1�THRU�A5TCBA6…DS.Lƒ1’USER'S�A6TCBUSP„DS.Lƒ1’USER'S�A7 #TCBSR…DS.Wƒ1’USER'S�STATUS�REGISTER(TCBCC…EQU„TCBSR+1ŒUSER'S�CONDITION�CODES#TCBPC…DS.Lƒ1’USER'S�PROGRAM�COUNTERTCBPCLOƒEQU„TCBPC+2+TCBVOR„DS.Wƒ1’USER'S�VOR�(OR�JUNK�ON�68000)TCBRTCDƒDS.Wƒ1ŠDS.Wƒ1ŠDS.Lƒ1ŠDS.Lƒ4)TSTBEGIN‚EQU„*’OFFSET�TO�BEGINNING�OF�TST ŠDS.Bƒ$200-$20-***‡EXCEPTION�MONITOR�PARAMETERS*)TCBEXM„DS.Lƒ1’EXCEPTION�MONITOR�TASK�NAME(TCBEXMSƒDS.Lƒ1’EXCEPTION�MONITOR�SESSION&TCBEMMSK‚DS.Lƒ1’EXCEPTION�MONITOR�MASK,TCBEVMSK‚DS.Lƒ1’EXCEPTION�MONITOR�VALUE�MASK0TCBEVLOC‚DS.Lƒ1’EXCEPTION�MONITOR�VALUE�LOCATION'TCBEVALU‚DS.Lƒ1’EXCEPTION�MONITOR�VALUE:TCBECNTƒDS.Lƒ1’EXCEPTION�MONITOR�MAX�COUNT�OF�INSTRUCTIONSŠDS.Lƒ1* **‰TCBATTR�BIT�DEFINITIONS*TSKASYST‚EQU„15‘SYSTEM�TASK'TSKAMRES‚EQU„14‘TASK�IS�MEMORY�RESIDENT@TSKACRIT‚EQU„13ŒTASK�IS�CRITICAL�TO�OS�-�CRASH�SYSTEM�IF�ABORTED,TSKADUMP‚EQU„12�DUMP�TASK�TO�DISK�IF�ABORTED=TSKARELO‚EQU„11�TASK�IS�RELOCATEABLE�(NO�MMU)�-�CONVERT�ENTRY.TSKIUSEM‚EQU„8’TASK�HAS�CREATED�USER�SEMAPHORE'TSKARTIM‚EQU„7’TASK�IS�A�REAL�TIME�TASK2TSKIEXMƒEQU„6’TASK�CONTROLLED�BY�EXCEPTION�MONITOR9TSKIEXMT‚EQU„5’TASK�IS�EXCEPTION�MONITOR�FOR�ANOTHER�TASK,TSKIEVCT‚EQU„4’TASK�HAS�OWN�EXCEPTION�VECTOR'TSKITVCT‚EQU„3’TASK�HAS�OWN�TRAP�VECTOR>TSKILAST‚EQU„2ŽTASK�IS�LAST�TASK�IN�SESSION�(SET�ONLY�BY�TERM)TSKIABRT‚EQU„1’TASK�WAS�ABORTED+TSKIUVCT‚EQU„0’TASK�HAS�CLAIMED�USER�VECTOR**‰TCBSTATE�BIT�DEFINITIONS*TSKSDORM‚EQU„15‘TASK�IS�DORMANTTSKSBLCK‚EQU„14‘TASK�IS�BLOCKED1TSKSSMWT‚EQU„13‘TASK�IS�BLOCKED�ON�EXEC�SEMAPHORE)TSKSEVWT‚EQU„12‘TASK�IS�WAITING�FOR�EVENT?TSKSAKWT‚EQU„11�TASK�IS�WAITING�FOR�SERVICE�REQ�ACKNOWLEDGEMENT6TSKSWTEM‚EQU„10‘TASK�IS�WAITING�FOR�COMMAND�FROM�EXMON TSKSSUSP‚EQU„9’TASK�IS�SUSPENDED*+TSK2TRMP‚EQU„7’TASK�HAS�PENDING�TERMINATION'TSK2RTEX‚EQU„6’TASK�WILL�RETURN�TO�EXEC%TSK2EVWK‚EQU„5’TASK�IS�HEADED�FOR�ASR$TSK2NRDY‚EQU„4’TASK�IS�ON�READY�LIST&TSK2WKWT‚EQU„3’TASK�HAS�PENDING�WAKEUP@TSK2ACK2‚EQU„2ŒTERM�MESSAGE�TO�SERVER�SENT�WHILE�ACK�OUTSTANDING*/TSKSWMSK‚EQU„$FF00ŽMASK�OF�ALL�TASK�WAIT�STATES**…TCBEMMSK�BIT�DEFINITIONS*"TEMTRAP1‚EQU„1’TRAP�1�IS�MONITORED&TEMBUSER‚EQU„16‘BUS�ERROR�IS�MONITORED*TEMADDER‚EQU„17‘ADDRESS�ERROR�IS�M  ONITORED0TEMILLEG‚EQU„18‘ILLEGAL�INSTRUCTION�IS�MONITORED'TEMZDIVƒEQU„19‘ZERO�DIVIDE�IS�MONITORED*TEMCHK„EQU„20‘CHK�INSTRUCTION�IS�MONITORED.TEMTRAPV‚EQU„21‘TRAPV�INSTRUCTION�IS�MONITORED/TEMPRIVƒEQU„22‘PRIVILEGE�VIOLATION�IS�MONITORED&TEML1010‚EQU„23‘LINE�1010�IS�MONITORED&TEML1111‚EQU„24‘LINE�1111�IS�MONITORED*-TEMMCNTƒEQU„27‘MAX�INSTRUCTION�COUNT�SUPPLIED=TEMTRACƒEQU„28ŽSINGLE�INSTRUCTION�TRACE�REQUESTED�(IF�VCHG=0)1TEMVEQUƒEQU„28‘VALUE�=�TEST�REQUESTED�(IF�VCHG=1)*TEMVCHGƒEQU„29‘VALUE�CHANGE�TEST�REQUESTED*********************** Ending of &.TCB.EQ ***********************ééé‰PAGE****************************** Beginning of &.TERMCCB.EQ ******************************%*ˆ7/9/84…added�BAB�area�for�terminals*(*‰NOTES�ON�THE�RECEIVE�&�TRANSMIT�QUEUES*@*‰These�circular�queues�are�contained�in�the�CCB�at�the�very�top>*‰of�the�device-dependent�portion.‚The�receive�queue�is�just�aA*‰type-ahead�buffer;�the�transmit�queue�is�used�to�hold�char's�to0*‰be�transmitted�which�are�not�in�a�user�buffer.*J***************************************************************************H*‚Tailor�the�following�equates�to�change�the�sizes�of�the�queues�and�theF*‚thresholds�at�which�action�is�taken�to�suspend/restore�transmissions8*‚from�the�device.‚The�following�inequalities�must�hold:*@*‰7‚<=‚TQ_MAX‚<=�128„(7�comes�from�XON,BS,SP,BS,BS,SP,BS�queued,>*�which�can�happen�if�a�BS�causes�a�control�char�to�be�erased)*#*‰0‚<=‚NUF_ROOM‚<‚NEAR_FUL‚<‚RQ_MAX**3*’<--------------ƒ<---queues�fill/empty�this�way---*O* /-------------- ----------------- ----------------------------------- ------/+*‚device-indep.�|„TRANSMIT…|ŒRECEIVE�|‚rest&*ƒpart�of�CCB‚|…QUEUE‡|�QUEUE‘|�of�CCBO* /-------------- ----------------- ----------------------------------- ------/**�|‘|£|9*�|<---�TQ_MAX�---->|<-----------�RQ_MAX�-------------->| *�|‘|�|…|!*¢|<-------�NEAR_FUL�---------->|*¢|™|ƒ|*¢|<-----�NUF_ROOM�-------->|*¢|™|*6TQ_MAX„EQU„16�Size�of�transmit�queue�in�bytes.‚Be�wary#*§of�increasing�this�size,�since�it#*§could�push�RQ�past�$7F,�making�it"*§impossible�to�use�the�addressing*§mode�RQ(A5,Dn)..RQ_MAX„EQU„224�Size�of�receive�queue�in�bytes.BNEAR_FUL‚EQU„RQ_MAX-10‰When�the�addition�of�a�char�makes�the�queue'*§this�full,�the�driver�will�attempt�to&*§suspend�the�device's�transmission�by*§lowering�DTR�or�sending�XOFF.ANUF_ROOM‚EQU„RQ_MAX-20‰When�the�removal�of�a�char�makes�the�queue$*§this�full,�the�driver�releases�the$*§suspended�device�by�raising�DTR�or*§sending�XON.**~8‡&�/—7Ÿ6§9¯3·8¿9Ç9Ï$I*‚The�transmit�queue�is�only�dealt�with�from�within�the�background,�so�itJ*‚is�completely�safe�from�any�problems�which�might�be�caused�by�the�driver3*‚taking�an�interrupt�while�dealing�with�the�queue.I*‚The�receive�queue,�however,�is�added�to�from�o  utside�the�background�(inK*‚the�RCA�routine).‚This�does�not�cause�any�problems�with�the�RECV�routine,H*‚which�takes�characters�out�of�the�receive�queue,�primarily�because�theF*‚former�uses�the�PUT�pointer�and�the�latter�uses�the�GET�pointer,�andI*‚neither�cares�about�the�other�pointer.‚The�code�that�clears�the�receiveE*‚queue�could�potentially�cause�a�problem,�though,�so�it�is�done�withC*‚interrupts�INHIBITed.‚As�long�as�the�two�contenders�only�run�withB*‚interrupts�INHIBITed,�they�can�never�interfere�with�one�another.ŠPAGE*B*‚Equates�for�ERR_CODE�field�in�CCB.‚We�use�the�IOS�status�values.*>PAR_FRAM�EQU‡ISTACSMŠParity�or�framing�error�on�received�char.=OVERRUN‚EQU‡ISTADO‹Either�the�device's�internal�buffer�or�the *§receive�queue�was�overwritten. F*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *ˆ7/9/84‚BWN6*ˆWe�are�taking�this�stuff�out�and�replacing�it�by�the@*ˆBAB�area�offsets�so�we�can�use�the�exec's�background�routines.*C*‚Equates�for�bit�numbers�in�the�WORK�field�in�the�CCB.‚Each�bit�is@*‚a�flag�indicating�the�presence�of�work�for�a�given�part�of�theE*‚background.‚If�the�bit�is�1,�there�is�work;�if�0,�there�is�no�work.*/**W_XMIT„EQU„15‘Routine�to�transmit�characters..**W_RECV„EQU„14‘Routine�to�receive‚characters.5**W_BREAKƒEQU„13‘Routine�to�handle�an�incoming�break.7**W_DSR…EQU„12‘Routine�to�handle�a�DSR�line�transition.0**W_HALT„EQU„11‘Routine�to�halt�outstanding�I/O.;**W_CONFIGURE�EQU‚10‘Routine�to�finish�a�configure�request.5**W_BLOCKƒEQU„9’Routine�to�stop�us�from�transmitting.8**W_UNBLOCK�EQU„8’Routine�to�allow�us�to�transmit�again.;**W_STOP_IT�EQU„7’Routine�to�stop�the�device�from�xmitting.<**W_BEG_BREAK�EQU‚6’Routine�to�start�sending�a�break�signal.;**W_END_BREAK�EQU‚5’Routine�to�stop‚sending�a�break�signal.)**W_EVENTƒEQU„4’Routine�to�send�an�event.1**W_DCD…EQU„3’Routine�to�handle�a�DCD�transition.8**W_INIT„EQU„2’Routine�to�do�RESET�and�SETUP�(for�init). *L*‚Equates�for�bit�numbers�in�the�SPECIAL�byte�in�the�CCB.‚Each�bit�is�a�flagN*‚indicating�that�control�belongs�to�a�particular�high-priority�routine�withinM*‚the�transmit�function.‚When�setting�one�of�these�bits�you�should�be�sure�toM*‚change�the�transmit�state�to�SPECIAL;�if�it�wasn't�already�special�you�haveL*‚to�save�the�old�transmit�state�in�OLD_XMIT_ST.‚If�one�of�these�bits�is�a�13*‚then�that�routine�has�control;�if�0,�it�does�not.*-SPEC_BREAK‚EQU�7•Transmitting�a�break�signal.*SPEC_XOFFƒEQU�6•Transmitting�an�XOFF�char.(SPEC_XON„EQU�5•Transmitting�an�XON‚char.+SPEC_BLOCK‚EQU�4•Blocked�from�transmitting.+SPEC_NUL„EQU�3•Transmitting�NUL�characters.6SPEC_QUEUE‚EQU�2•Transmitting�from�the�transmit�queue.ŠPAGE*H*‚Equates�for�menu�items.‚Recall�that�the�MENU�field�in�the�CCB�has�roomH*‚for�4�1-byte�menu�items.‚The�values�have�a�special�correspondence�withE*‚the�process�states�which�is�used�in�dispatching--do�not�disrupt�it.*1M_DOWN„EQU„-4‘Channel�down�(unrecoverable�error).4M_INACTƒEQU„0’Channel�inactive�(no�I/O�in�progress). -M_IMGWRT‚EQU„4’Image�write�from�write�buffer.1M_FRMWRT‚EQU„8’Formatted�write�from�write�buffer.0M_CANCEL‚EQU„$C‘Cancel�char's�input�from�screen.*M_REPRNT‚EQU„$10�Reprint�from�read�buffer./M_BREAKƒEQU„$14�Wait�for�break�timer�to�expire. ,M_IMGRDƒEQU„$34�Image�read�into�read�buffer.0M_FRMRDƒEQU„$38�Formatted�read�into�read�buffer. 1M_END…EQU„$70�End�of�menu--send�completion�event. 6MHI_XMIT‚EQU„$2F�Ceiling�for�transmit-type�menu�items.3MLO_RECV‚EQU„$30�Floorƒfor�receive-type‚menu�items.5MHI_RECV‚EQU„$3F�Ceiling�for�receive-type‚menu�items.  *D*‚Equates�for�process�states.‚The�values�go�by�four's�so�they�can�beB*‚used�with�branch�tables:‚JMP�TBL(PC,D0.W)�where�D0�is�the�state.$*¤----------------------------------&*£|�Processes�which�assume�the�state�|$*¤----------------------------------*¤Transmit‚Receive„ES‡DSR*¤________‚_______„___…_____S_IDLE„EQU„0šX‰XˆXˆ.S_IMAGEƒEQU„4šX‰Xˆ.ˆ.S_FORM„EQU„8šX‰Xˆ.ˆ.S_CANCEL‚EQU  „$C™X‰.ˆ.ˆ.S_REPRNT‚EQU„$10˜X‰.ˆ.ˆ.S_SPECIAL�EQU„$14˜X‰.ˆ.ˆ.S_REPORT‚EQU„$60˜.‰.ˆXˆ.S_WT4RDY‚EQU„$70˜.‰.ˆ.ˆXS_WT4UNR‚EQU„$74˜.‰.ˆ.ˆXŠPAGEJ***************************************************************************6*‰DEVICE-DEPENDENT�PORTION�OF�CCB�FOR�TERMINAL�DRIVERS*=*‰This�defines�that�portion�of�the�channel�control�block�that>*‰is�reserved�for�use�by�the�individual�driver.‚The�CCB�is�512C*‰bytes�long,�and�everything�before�CCBDDP�is�defined�in�EQUCCB.SA.*A*‰Note�that�virtually�everywhere�in�this�driver,�A5�is�maintained=*‰as�a�pointer�to�the�beginning�of�the�CCB.‚Hence�the�definedA*‰labels�may�be�used�to�access�fields�in�the�CCB�without�worrying4*‰about�loading�the�address�of�the�CCB.‚For�example,*ŒMOVE.LƒIOCB_ADR(A5),A0)*‰is�valid�almost�anywhere�in�the�driver.*J************************************************************************** 7ŠOFFSET‚CCBDDPŒStart�definition�at�the�beginning�of�the&*£device-dependent�portion�of�the�CCB. *L*‚First�come�the�queues.‚These�should�always�come�first�since�the�addressingL*‚mode�DISPLACEMENT(A5,Rn)�is�used�to�get�to�the�queues�and�DISPLACEMENT�mayJ*‚never�be�larger�than�$7F.‚Note�that�the�labels�TQ�and�RQ�are�back�a�byteG*‚from�the�actual�queues;�this�was�done�intentionally�to�allow�speedier *‚enqueue�and�dequeue�sequences.* TQˆEQU„*-14ŠDS.BƒTQ_MAX�Reserve�storage�for�the�transmit�queue. RQˆEQU„*-13ŠDS.BƒRQ_MAX�Reserve�storage�for�the�receive�queue. >�RESERVE.4�STAK_PTR‘Stack�pointer�is�saved�here�during�command&*§processing�so�that�processing�can�be(*§aborted�in�the�middle�of�a�subroutine.'*§That�is,�the�common�exit�code�for�the#*§command�service�tour�restores�the&*§stack�pointer�from�here�before�exit. =�RESERVE.4�IOCB_ADR‘Physical�address�of�IOCB.‚Saved�when�IOCB#*§is�received�so�that�status�may�be&*§updated�when�processing�is�complete. =�RESERVE.4�TCB_ADDR‘Address�of�TCB�of�buffer�owner.‚If�bit�15'*§of�IOCB�options�field�is�set,�this�is'*§not�the�same�as�the�IOCB�owner.‚Saved)*§so�that�TCBIOCNT�field�can�be�accessed. :�RESERVE.4�DCB_ADDR‘Address�of�DCB�for�this�channel.‚Taken'*§from�the�INITIATE�I/O�parameter�block"*§and�used�in�accessing�the�DCB�to)*§change�the�default�configuration�and�to&*§set�configuration�coordination�flag. <�RESERVE.4�CSB_ADDR‘Address�of�CSB�for�a�CONFIGURE�or�CHANGE*§DEFAULT�CONFIGURATION�call. E�RESERVE.IOSTLN-IOSATW�CNFG‰Configuration�data.‚It�is�this�copy�which(*§is�changed�via�the�CONFIGURE�command�&(*§determines�the�driver's�behavior.‚Note'*§that�only�the�attributes�&�parameters'*§are�saved�here--the�status�fields�and*§masks�are�not. �RESERVE.4�CHAR_CNT‘Count�of�the�#�of�char's�on�the�screen�due%*§to�a�formatted�read.‚Used�to�deter-&*§mine�the�#�of����to�send*§for�a�CANCEL�LINE�func  tion. =�RESERVE.4�COLUMN“Count�of�the�#�of�printable�($20-$FF)�chars(*§sent�during�a�formatted�write.‚Used�to&*§determine�whether�we�should�skip�the *§end-of-line�string�at�the�end. ;�RESERVE.4�XFER_LEN‘Number�of�bytes�transferred�during�I/O.%*§Set�when�the�significant�part�of�an'*§I/O�operation�is�completed�(the�WRITE#*§portion�of�OUTPUT�W/�INPUT�is�not%*§significant).‚Eventually�this�field%*§is�used�to�update�the�IOCB's�LENGTH*§OF�DATA�TRANSFER�field. ;**�RESERVE.2�WORK•This�field�is�a�collection�of�1-bit�flags(*§each�of�which�indicates�whether�or�not%*§a�particular�part�of�the�background%*§has�work�to�do.‚Only�when�this�byte$*§is�$00�has�all�the�background�work%*§been�completed.‚See�the�equates�for*§bits�in�this�field�later�on. <�RESERVE.1�NUL_CNT’Used�by�transmit�process�to�keep�track�of)*§#�of�NUL's�left�to�send�after�CR�or�LF.%*§Initialized�to�the�configured�value#*§when�a�CR�or�LF�is�sent,�and�then*§counts�down�to�0. 5�RESERVE.1�BOARD”Board�type�(see�equates�later).‚This%*§field�is�derived�from�2�bits�in�the*§the�channel�type�field�during*§initialization. ;�RESERVE.1�TC_MASK’Terminator-class�don't-care�mask.‚In�the&*§test�to�see�whether�an�incoming�char&*§is�in�the�terminator�class,�the�char%*§is�ANDed�with�this�mask�before�com-*§parison�with�the�match�value. :�RESERVE.1�TC_VALUE‘Terminator-class�match�value.‚If�after'*§ANDing�with�the�mask�above,�an�incom-'*§ing�char�matches�this�value,�the�char*§is�a�terminator. 5�RESERVE.1�CHAR_MSK‘Character�mask.‚This�value�is�set$*§according�to�the�configuration�to:$*¨$7F‚if�configured�for�7�bits/char;$*¨$FF‚if�configured�for�8�bits/char.(*§This�value�is�ANDed�with�each�incoming'*§char�to�strip�parity�from�the�byte�if*§7�bits/char�is�used.$*§NOTE:‚before�initial�configuration"*§by�IOS,�this�byte�is�$00�and�the&*§attribute�bit�IOAPNUL�is�0,�ensuring%*§that�no�characters�received�are�put*§in�the�receive�queue. ?�RESERVE.1�NONINTERRUPT�This�byte,�initially�0,�is�set�whenever)*§we�enter�the�background�from�other�than'*§interrupt�level,�and�is�reset�when�we *§return.‚Hence�it�may�be�tested'*§(by�the�Q_EVENT�routine)�to�determine(*§whether�we�are�currently�processing�an*§interrupt�($00)�or�not�($FF). ;�RESERVE.1�DOWN_ERR‘This�byte,�initially�0,�is�changed�to�a%*§nonzero�value�if�the�driver�decides%*§for�some�reason�that�the�channel�is)*§not�operational�(e.g.,�the�device�fails'*§its�self-test).‚When�this�byte�is�not%*§0,�it�is�returned�as�the�status�for*§any�request�received. <�RESERVE.1�SPECIAL’This�byte�is�a�collection�of�1-bit�flags,(*§each�of�which�indicates�whether�or�not%*§a�particular�special�section�of�the(*§background�transmit�code�needs�to�run.'*§The�reason�these�particular�functions)*§are�considered�special�is�that�they�are'*§high-priority,�and�they�interrupt�the%*§normal�transmit�processing.‚See�the'*§equates�for�bits�in�this�field�later. <�RESERVE.1�OLD_XMIT_STŽWhen�the�transmitter�goes�from�normal'*§processing�to�special�processing,�the'*§normal�processing�state�is�saved�here*§so�it�can�be�restored�later.  *F*‚The�following�space�is�multi-purpose.‚During�I/O�it�holds�6�longwordI*‚pointers�to�describe�the�read�and�write�buffers.‚Because�we�do�not�sendI*‚events�in�the�middle�of�doing�I/O,�events�are�also�built�in�this�space.E*‚There�are�separate�spaces�for�regular�and�unsolicited�events�(breakI*‚detected�while�not�doing�I/O),�since�breaks�can�occur�at�any�time,�evenI*‚while�preparing�other�events.‚Most�events�are�10�bytes,�but�unsolicitedJ*‚events�are�12�bytes.‚Either�can�be�an�extra�4�bytes�if�a�service�address*‚is�specified.*A�RESERVE.4+10+4+12�BUF_ADRS‰Reserve�enough�space�for�both�events. .EVENT…EQU„BUF_ADRS+4‰Here's�the�regular�event.5UNS_EVNT‚EQU„EVENT+10+4‰Here's�the�unsolicited�event. '�char%*§should�be�sent�before�anything�else *§to�enclose�deleted�characters. A�RESERVE.1�WAIT_TQ‹Set�by�the�receive�process�when�it�has�work�to)*§do�but�can't�do�it�because�the�transmit%*§queue�is�too�full.‚Checked�when�the&*§transmit�process�idles�to�see�if�the#*§receive�process�should�be�given�a#*§chance�to�run�(since�the�transmit$*§queue�is�empty�if�transmit�idles). B�RESERVE.1�TR_MODE‹Set�if�the�default�configuration�indicates�that'*§we�are�in�transparent�mode.‚This�flag)*§will�control�what�we�do�when�characters$*§are�received,�etc.‚NOTE:‚it�is�not$*§possible�to�come�up�in�transparent(*§mode;�a�CHANGE�DEFAULTS�cmd�is�needed.  *G*‚Process�states.‚Note�that�transmit�and�receive�states�are�word�valuesJ*‚so�they�can�be�readily�put�in�a�data�register�and�used�in�the�addressing*‚mode�TABLE(PC,Dx)�for�a�jump.* *�RESERVE.2�XMIT_ST’Transmit�process�state.)�RESERVE.2�RECV_ST’Receive�process�state.  *'*‚Pointers�for�receive�and�echo�queues.E*‚Note�that�RQ_GET�and�RQ_PUT�start�at�#RQ_MAX�and�get�smaller.‚AfterE*‚#1�they�go�to�#RQ_MAX�again�to�form�a�circular�queue�of�characters.E*‚Similarly,�TQ_GET�and�TQ_PUT�go�from�#TQ_MAX�down�to�#1�and�back�to#*‚#TQ_MAX�to�form�a�circular�queue.* @�RESERVE.2�RQ_GET‹Offset�into�receive�queue�of�next�byte�to�get.@�RESERVE.2�RQ_PUT‹Offset�into�receive�queue�of�next�byte�to�put.7�RESERVE.2�RQ_CNT‹Contains�#�of�bytes�in�receive�queue. A�RESERVE.2�TQ_GET‹Offset�into�transmit�queue�of�next�byte�to�get.A�RESERVE.2�TQ_PUT‹Offset�into�transmit�queue�of�next�byte�to�put.8�RESERVE.2�TQ_CNT‹Contains�#�of�bytes�in�transmit�queue.  *E*‚Receive�error�info.‚This�info�is�set�when�the�condition�occurs,�butG*‚is�not�used�until�the�receive�process�goes�to�get�the�associated�char*‚from�the�receive�queue.* <�RESERVE.2�ERR_PTR’If�>�0,�offset�into�receive�queue�of�byte(*§associated�with�receive�error�(copy�of!*§RQ_PUT�when�error�is�detected).*§If�=�0,�there�is�no�error. <�RESERVE.1�ERR_CODE’Nature�of�receive�error.‚Only�meaningful*§if�ERR_PTR�>�0. ;�RESERVE.4�ADRSIDEA‘Address�of�the�A�side�control�register.&*§Although�we�already�have�the�address'*§of�the�control�register�for�whichever&*§port�we're�using�in�CCBCHB,�we�some-#*§times�have�to�issue�commands�to�a&*§specif ic�side�(e.g.,�the�EOI�command#*§always�goes�to�side�A).‚For�those&*§occasions,�this�address�will�get�you%*§to�the�side�A�control�register,�and&*§this�address�+�4�will�get�you�to�the*§side�B�control�register.<�RESERVE.1�AUTO_BAUD�If�this�flag�is�nonzero�(true),�then�we'*§are�in�the�process�of�doing�auto�baud*§rate�detection. ;�RESERVE.1�FLUSHING‘If�this�flag�is�nonzero�(true),�then�we$*§are�in�the�process�of�flushing�the(*§receiver�during�auto�baud�rate�detect.&*§This�flag�will�stay�true�for�a�timed#*§interval�to�ensure�that�pieces�of$*§char's�are�not�seen�as�new�char's.*%%%%%%%%%%%%%%%%‚BWN�7/9/84**:�RESERVE.4�SCHED_EP’Here�we�save�the�address�of�the�exec's$*¦scheduler�entry�point�that�we�find#*¦using�the�ENTRY�Trap�#0�directive*¦during�initialization.***ˆBackground�activation�area.**’+-----+----+----+----+*ˆBAB�Link‚|…|„|„|„|*’+-----+----+----+----+*ˆBAB�Addr‚|…|„|„|„|*’+-----+----+----+----+ *ˆBAB�Useƒ|…|*’+-----+----+----+*ˆReserved‚|…|„|„|*’+-----+----+----+*BAB_AREA�EQU‡*4�RESERVE.12‰XMIT_BAB‹Routine�to�transmit�characters.3�RESERVE.12‰RECV_BAB‹Routine�to�receive‚characters.:�RESERVE.12‰BREAK_BABŠRoutine�to�handle�an�incoming�break.5*RESERVE.12‰HALT_BAB‹Routine�to�halt�outstanding�I/O.<*RESERVE.12‰CONFG_BABŠRoutine�to�finish�a�configure�request.;�RESERVE.12‰BLOCK_BABŠRoutine�to�stop�us�from�transmitting.<�RESERVE.12‰UNBLK_BABŠRoutine�to�allow�us�to�transmit�again.=�RESERVE.12‰STOP_BAB‹Routine�to�stop�the�device�from�xmitting>�RESERVE.12‰B_BRK_BABŠRoutine�to�start�sending�a�break�signal.=�RESERVE.12‰E_BRK_BABŠRoutine�to�stop‚sending�a�break�signal./*RESERVE.12‰EVENT_BABŠRoutine�to�send�an�event.=*RESERVE.12‰INIT_BAB‹Routine�to�do�RESET�and�SETUP�(for�init)*%%%%%%%%%%%%%%%%%%%%%%%%*9*‚The�following�5�fields�are�set�up�during�initialization&*‚using�entries�in�the�TCHTYPE�module.*7�RESERVE.1�DRV_CODE‘Driver�code�which�is�returned�for�a*§status�call.8�RESERVE.2�REC_ATT’Mask�of�attributes�recognized�by�this *¦driver.8�RESERVE.2�REC_PAR’Mask�of�parameters�recognized�by�this *¦driver.**%%%%%%%%‚BWN‚9/11/84.�RESERVE.4�REC_BAUD‘Recognized�baud�rates�mask**£Each�bit�in�this�32�bit�mask�corresponds#*£to�a�baud�rate�code�of�$0�to�$1F.-*£The�value�in�this�entry�comes�from�TCHTYPE.*%%%%%%%%%%%%%%%%%�RESERVE.4�DRV_ADDR‘Address�of�driver**%%%%%%%%%%‚bwn‚8/16/84*E*‚This�process�state�is�cleared�in�TERM_INIT�and�set�in�TERM_COMMAND.*‚It�is�tested�in�BREAK.B*‚When�it�is�set,�it�is�OK�to�report�breaks�because�someone�is�out*‚there.*"�RESERVE.1�ES_ST”ES‚process�state.**4TERMDDP‚EQU‡*�This�marks�the�beginning�of�the�device#*£dependent�part�of�the�CCB�that�is!*£unique�for�a�particular�driver.*************************** Ending of &.TERMCCB.EQ ***************************ééé‰PAGE******************************* Beginning of &.TERMINAL.EQ ******************************* *,* EQUATES FOR SOME SPECIAL ASCII CHARACTERS.*'NUL†EQU‡$00‡Null�char.‚Usually�ignored..BEL†EQU‡$07‡Bell�char.‚Rings�bell�on�terminal.BS ‡EQU‡$08‡Backspace�char.6LF‡EQU‡$0A‡Line�feed�char.‚Causes�cursor�to�move�down.=CR‡EQU‡$0D†Carriage�return�char.‚Moves�cursor�to�left�margin.SPACE„EQU‡$20‡Space�char.$L_ARROW‚EQU‡$3C‡Left‚arrow�char�'<'.%R_ARROW‚EQU‡$3E‡Right�arrow�char�'>'.#BKSLASH‚EQU‡$5C‡Backslash�char�'\'.'CARET„EQU‡$5E‡Uparrow�(caret)�char�'^'.8DEL†EQU‡$7F‡Delete�char�(also�called�'rubout').‚Like�BS. $HI_CTLƒEQU‡$1F‡Highest�control�char. IBS_SP_BS�EQU�BS<<24+SPACE<<16+BS<<8‚Backspace,�space,�backspace�all�left-*§justified�in�32�bits. *)*‚Equates�for�baud�rate�generator�values.* BAU50…EQU„0 BAU75…EQU„1 BAU110„EQU„2BAU134_5‚EQU„3 BAU150„EQU„4 BAU300„EQU„5 BAU600„EQU„6 BAU1200ƒEQU„7 BAU1800ƒEQU„8 BAU2000ƒEQU„9BAU2400ƒEQU„10BAU3600ƒEQU„11BAU4800ƒEQU„12BAU7200ƒEQU„13BAU9600ƒEQU„14BAU19200‚EQU„15 **‚Miscellaneous�equates.**IOEVCD„EQU„1’Event�code�we�will�use�(I/O).;BRK_LENƒEQU„300�#�of�milliseconds�to�maintain�break�signal. ŠPAGEK*****************************************************************************‰EQUATES�FOR�TRANSPARENT�MODE*K*************************************************************************** *F*‚Equates�describing�the�part�of�the�CSB�used�when�setting�TRANSPARENTH*‚MODE.‚We�pass�the�driver�the�address�of�our�branch�table�and�he�passesI*‚us�back�the�address�of�his�branch�table,�the�value�we�should�have�in�A5G*‚when�we�call�him,�and�the�SR�that�we�should�use.‚Actually,�we�may�useG*‚a�different�SR�as�long�as�the�supervisor�bit�is�set�and�the�interrupt9*‚level�is�not�lower�than�the�one�in�the�SR�he�passes�us.*7ŠOFFSET�IOSTTM�This�stuff�will�be�in�the�CSB�at�IOSTTM.9IOSTMU„DS.Bƒ4’Here�the�user�will�store,�before�making�the&*§CHANGE�DEFAULTS�call,�the�address�of×Eà*§his�table�of�branches. 7ŠOFFSET�IOSTTM�This�stuff�will�be�in�the�CSB�at�IOSTTM.9IOSTMD„DS.Bƒ4’the�addr�of�the�driver's�table�of�branches;/IOSTMA„DS.Bƒ4’the�value�the�driver�wants�in�A5;5IOSTMS„DS.Bƒ2’the�SR�with�the�MINIMUM�interrupt�level*§set. 5ŠOFFSET�0ŽThis�defines�the�user's�TM�interface�table.!*ŸWe�JSR�to�the�given�entry�when:#TM_RCA„DS.Bƒ4’...we�receive�a�char.7TM_TBE„DS.Bƒ4’...we�become�capable�of�another�transmit.2TM_BRK_RECV�DS.B�4’...we�detect�an�incoming�break.�THEN.Sˆ�RTE—then�return�to�user;�ENDI�XREF.S�COMINT_PERTURB �IFC„'\0',''0�BRA.L‚COMINT_PERTURB…else�go�to�comint_perturb;�ENDC �IFNCƒ'\0',''0�B\0.L‚COMINT_PERTURB…else�go�to�comint_perturb;�ENDCŠENDCŠIFC„'\1','PREEMPT'�XREF.S�PREEMPT �IFC„'\0',''�BRA.L‚PREEMPT�ENDC �IFNCƒ'\0',''�B\0.L‚PREEMPT�ENDCŠENDCŠIFC„'\1','DISPATCH'�XREF.S�DISPATCH �IFC„'\0',''�BRA.L‚DISPATCH�ENDC �IFNCƒ'\0',''�B\0.L‚DISPATCH�ENDCŠENDCŠIFC„'\1','RTCDDIRN'�XREF.S�ERROR_01 �IFC„'\0',''�BRA.L‚ERROR_01�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_01�ENDCŠENDCŠIFC„'\1','RTCDPBLK'�XREF.S�ERROR_02 �IFC„'\0',''�BRA.L‚ERROR_02�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_02�ENDCŠENDCŠIFC„'\1','RTCDTASK'�XREF.S�ERROR_03 �IFC„'\0',''�BRA.L‚ERROR_03�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_03�ENDCŠENDCŠIFC„'\1','RTCDNTBL'�XREF.S�ERROR_04 �IFC„'\0',''�BRA.L‚ERROR_04�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_04�ENDCŠENDCŠIFC„'\1','RTCDTFUL'�XREF.S�ERROR_05 �IFC„'\0',''�BRA.L‚ERROR_05�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_05�ENDCŠENDCŠIFC„'\1','RTCDDPRQ'�XREF.S�ERROR_06 �IFC„'\0',''�BRA.L‚ERROR_06�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_06�ENDCŠENDCŠIFC„'\1','RTCDNFND'�XREF.S�ERROR_07 �IFC„'\0',''�BRA.L‚ERROR_07�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_07�ENDCŠENDCŠIFC„'\1','RTCDNMEM'�XREF.S�ERROR_08 �IFC„'\0',''�BRA.L‚ERROR_08�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_08�ENDCŠENDCŠIFC„'\1','RTCDALOW'�XREF.S�ERROR_09 �IFC„'\0',''�BRA.L‚ERROR_09�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_09�ENDCŠENDCŠIFC„'\1','RTCDSTAT'�XREF.S�ERROR_10 �IFC„'\0',''�BRA.L‚ERROR_10�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_10�ENDCŠENDCŠIFC„'\1','RTCDLGCF'�XREF.S�ERROR_11 �IFC„'\0',''�BRA.L‚ERROR_11�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_11�ENDCŠENDCŠIFC„'\1','RTCDADR 1'�XREF.S�ERROR_12 �IFC„'\0',''�BRA.L‚ERROR_12�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_12�ENDCŠENDCŠIFC„'\1','RTCDADR2'�XREF.S�ERROR_13 �IFC„'\0',''�BRA.L‚ERROR_13�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_13�ENDCŠENDCŠIFC„'\1','RTCDENAB'�XREF.S�ERROR_14 �IFC„'\0',''�BRA.L‚ERROR_14�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_14�ENDCŠENDCŠIFC„'\1','RTCDOPT'�XREF.S�ERROR_15 �IFC„'\0',''�BRA.L‚ERROR_15�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_15�ENDCŠENDCŠIFC„'\1','RTCDPCNT'�XREF.S�ERROR_16 �IFC„'\0',''�BRA.L‚ERROR_16�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_16�ENDCŠENDCŠNOLISTŠOPT„CLŠLISTŠENDM*************************** Ending of &.TR1RTCD.EQ ***************************' TRACE EQ''qqTST EQ00:qqUDR EQ99qqUPLOADS MCBB/qqUSM EQccàqqUST EQ„„!qqUTILITY MC��&qqVME316 EQ¶¶$qqQIO MC¿¿Baqq‰PAGE**************************** Beginning of &.TRACE.EQ ***************************** *‡TRACE�TABLE*$*‡TRACE�TABLE�HEADER�-�FIRST�8�BYTES* ŠOFFSET�0 TRCTBL„EQU„*!TRCPTR„DS.Lƒ1’TABLE�ENTRY�POINTERTRCLNG„DS.Lƒ1’TABLE�LENGTHTRCENTRS‚DS.Lƒ1’TRACE�ENTRIES**ˆTRACE�ENTRIES�DEFINITIONS*ˆ20�BYTES�FOR�EACH�ENTRY%*ˆONE�20�BYTE�SET�FOR�EACH�TRACE�CALL* ŠOFFSET�0TRCCODEƒDS.Wƒ1’TRACE�CODETRCSR…DS.Wƒ1’STATUS�REGISTERTRCPC…DS.Lƒ1’PROGRAM�COUNTERTRCA0…DS.Lƒ1’A0TRCA6…DS.Lƒ1’A6TRCD0…DS.Lƒ1’D0"TRCTIMEƒDS.Lƒ1’TIME�(IN�MILLISECS)TRCTIM2ƒDS.Wƒ1’TIME�(MICROSECS)TRCENTSZ‚EQU„************************** Ending of &.TRACE.EQ *************************ééééé  ‰PAGE************************** Beginning of &.TST.EQ ****************************„TASK�SEGMENT�TABLE*ˆCONTAINS‚PREAMBLE#*’MEMORY�MANAGMENT�LOAD�INFORMATION*’SEGMENT�ATTRIBUTE�BLOCK*)SEGMENTS‚EQU„4’NUMBER�OF�SEGMENTS�ALLOWED*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLE*TST‡DS.Lƒ1’!TST�DEBUG�TOOL"TSTNSEGS‚DS.Bƒ1’NUMBER�OF�SEGMENTS5TSTCSEGS‚DS.Bƒ1’NUMBER�OF�SEGMENTS�CURRENTLY�EXISTING*TSTLMMUƒDS.Wƒ1’INDEX�TO�LAST�MMU�LOAD�LINE4TSTLATTR‚DS.Wƒ1’INDEX�TO�LAST�SEGMENT�ATTRIBUTE�LINETSTSTATƒDS.Wƒ1’MMU�STATUS+TSTMMU„DS.Wƒ4*SEGMENTS‰MMU�LOAD�INFORMATION/TSTATTRƒDS.Wƒ4*SEGMENTS‰SEGMENT�ATTRIBUTE�BLOCK8TSTWTSKƒDS.Lƒ1’NAME�OF�TASK�WITH�WINDOW�TO�ADDRESS�SPACE%TSTLEN„EQU„*’LENGTH�OF�TASK�SEG�TABLE**‰TSTATTR�FIELDS*(TSTANAME‚EQU„TSTATTR-TSTMMU…SEGMENT�NAME5TSTAATTR‚EQU„TSTATTR-TSTMMU+4ƒSEGMENT�ATTRIBUTE�FIELD2TSTAR1„EQU„TSTATTR-TSTMMU+6ƒMEMORY�TYPE�DESCRIPTOR/TSTAUCNT‚EQU„TSTATTR-TSTMMU+7ƒSEGMENT�USE�COUNT**‰TSTSTAT�FIELDS*9TSTASN„EQU„TSTSTATŒADDRESS�SPACE�NUMBER�FOR�TASK�(1�BYTE)*.*‰SEGMENT�ATTRIBUTE�BIT�DEFINITIONS�(TSTATTRF)*$SEGAUSED‚EQU„15‘SEGMENT�ENTRY�IN�USE#SEGAROMƒEQU„14‘SEGMENT�IS�READ�ONLY/SEGASHRƒEQU„13‘SEGMENT�IS�SHARED�WITHIN�SESSION!SEGAGLBL‚EQU„12‘SEGMENT�IS�GLOBAL1SEGAMMIO‚EQU„11‘SEGMENT�IS�MEMORY�MAPPED�IO�SPACE'SEGAPROM‚EQU„10‘SEGMENT�IS�PHYSICAL�ROM**‰TSTMMU�FIELDS*TSTLB…EQU„0’LOGICAL�BEGINTSTLE…EQU„2’LOGICAL�ENDTSTPO…EQU„4’PHYSICAL�OFFSET/TSTCTL„EQU„6’CONTROL�(NULL�BYTE�+�CONTROL�BYTE)**‰MMU�CONTROL�REGISTER�VALUES*!RAMCTL„EQU„$01�READ/WRITE�SEGMENT ROMCTL„EQU„$03�READ�ONLY‚SEGMENT*********************** Ending of &.TST.EQ ***********************é(;‰PAGE************************** Beginning of &.UDR.EQ ***************************%*ˆUSER�DEFINED�DIRECTIVE�TABLE�HEADER*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLEUDR‡DS.Lƒ1’!UDR„DEBUG�TOOL(UDRCNT„DS.Wƒ1’NUMBER�OF�ENTRIES�IN�TABLE"UDRENTRY‚EQU„*’OFFSET�TO�1ST�ENTRY**ˆUDR�ENTRY�DEFINITION*&ŠOFFSET�0’OFFSET�IS�FROM�ENTRY�POINTER1UDRSESSƒDS.Lƒ1’SESSION�OF�TASK�THAT�CREATED�ENTRYUDROPT„DS.Bƒ1’OPTIONSUDREXITƒDS.Bƒ1’EXIT�NUMBER&UDRADDRƒDS.Lƒ1’DIRECTIVE�ENTRY�ADDRESSUDRESIZƒEQU„*’ENTRY�LENGTH**ˆUDR�OPTIONS�-�SET�IN�UDROPT*'UDROGLBL‚EQU„4’IF�SET�-�ENTRY�IS�GLOBAL*********************** Ending of &.UDR.EQ ***********************éééé é1‰PAGE****************************** Beginning of &.UPLOADS.MC ****************************** FHSPB„MACRO‰OPTƒNOCL,NOMEX,A<*ˆThis�macro�defines�an�FHS�parameter�block�in�storage.�Some?*ˆof�the�more�often�supplied�fields�are�accepted�as�parameters.*'*ˆ#1‚=�PARM�BLOCK�PREFIX�(3�BYTES�MAX).5*ˆ#2‚=�LOGICAL�UNIT�NUMBER�(5=TERMIN,6=TERMOUT,7=#PR)*ˆ#3‚=�VOLUME�ID*ˆ#4‚=�USER�ID*ˆ#5‚=�CATALOG*ˆ#6‚=�FILE�NAME*ˆ#7‚=�EXTENTION *ˆ#8‚=�LRECL*ˆ#9‚=�BLKSIZE*ˆ#A‚=�OPTIONS*ˆ#B‚=�SHARED�SEGMENT�OPTION&*ˆ#C‚=�SHARED�SEGMENT�STARTING�ADDRESS‰OPT‡MEX,NOCL,A SPC 2)\1FHSPB‚DS.L†0‰"\1"�-FHS-�PARAMETER�BLOCK\1CODEƒDCB.B…1,0‡Code\1CMD„DCB.B…1,0‡Command ‰IFC‡'\A',''\1OPT„DC.W†0‰Options‰ENDC ‰IFNC†'\A',''\1OPT„DC.W†\AˆOptions‰ENDC \1STATƒDC.B†0‰Status�upon�return ‰IFC‡'\2',''\1LU…DC.B†0‰Logical�unit‰ENDC ‰IFNC†'\2',''\1LU…DC.B†\2ˆLogical�unit‰ENDC ‰IFC‡'\3',''\1VOL„DCB.B…4,0‡Volume�ID‰ENDC ‰IFNC†'\3',''\1VOL„DC.B†'\3'†Volume�ID‰ENDC ‰IFC‡'\4',''\1USERƒDCB.B…2,0‡User�ID‰ENDC ‰IFNC†'\4',''\1USERƒDC.W†\4ˆUser�ID‰ENDC ‰IFC‡'\5',''\1CAT„DCB.B…8,'ˆ'�Catalog‰ENDC ‰IFNC†'\5',''\1CAT„DC.B†'\5'†Catalog‰ENDC ‰IFC‡'\6',''\1FILEƒDCB.B…8,'ˆ'�File�name‰ENDC ‰IFNC†'\6',''\1FILEƒDC.B†'\6'†File�name‰ENDC ‰IFC‡'\7',''\1EXT„DCB.B…2,'‚'„Extention‰ENDC ‰IFNC†'\7',''\1EXT„DC.B†'\7'†Extention‰ENDC‰DC.B†$0,$0…-Reserved-\1WRCDƒDC.B†$0ˆWrite�code\1RECDƒDC.B†$0ˆRead‚code ‰IFC‡'\8',''\1LRECL‚DCB.B…2,0‡Record�length‰ENDC ‰IFNC†'\8',''\1LRECL‚DC.W†\8ˆRecord�length‰ENDC ‰IFC‡'\9',''\1BLKSZ‚DCB.B…4,0‡Block�size‰ENDC ‰IFNC†'\9',''\1BLKSZ‚DC.L†\9ˆBlock�size‰ENDC‰IFC‡'\B','SS=YES'/\1SS1ST‚DC.L†\CˆShared�segment�STARTING�address,\1SSEND‚DC.L†0‰Shared�segment�ENDINGƒaddress"\1SSNAM‚DC.L†0‰Shared�segment�NAME‰ENDC‰ENDM   IOSPB„MACRO‰OPTƒNOCL,NOMEX,A<*ˆThis�macro�defines�an�IOS�parameter�block�in�storage.�Some:`C_KcS?*ˆof�the�more�often�sullpied�fields�are�accepted�as�parameters.*'*ˆ#1‚=�PARM�BLOCK�PREFIX�(3�BYTES�MAX).*ˆ#2‚=�LOGICAL�UNIT�NUMBER*ˆ#3‚=�OPTIONS*ˆ#4‚=�RECORD�NUMBER*ˆ#5‚=�START�OF�BUFFER*ˆ#6‚=�ENDƒOF�BUFFER‰OPT‡MEX,NOCL,A SPC 2)\1IOSPB‚DS.L†0‰"\1"�-IOS-�PARAMETER�BLOCK\1IOCOD‚DCB.B…1,0‡Code\1FUNCD‚DCB.B…1,0‡Function�code ‰IFC‡'\3',''\1IOOPT‚DCB.B…2,0‡Options‰ENDC ‰IFNC†'\3',''\1IOOPT‚DC.W†\3ˆOptions‰ENDC$\1IOSTA‚DCB.B…1,0‡Status�upon�return ‰IFC‡'\2',''\1IOLUƒDCB.B…1,0‡Logical�unit‰ENDC ‰IFNC†'\2',''\1IOLUƒDC.B†\2ˆLogical�unit‰ENDC‰DC.W†0‰-Reserved- ‰IFC‡'\4',''\1IORNO‚DCB.B…4,0‡Record�number‰ENDC ‰IFNC†'\4',''\1IORNO‚DC.L†\4ˆRecord�number‰ENDC ‰IFC‡'\5',''!\1IOSOB‚DCB.B…4,0‡Start�of�buffer‰ENDC ‰IFNC†'\5',''#\1IOSOB‚DC.L†\5-PBA„Start�of�buffer‰ENDC ‰IFC‡'\6',''\1IOEOB‚DCB.B…4,0‡End�of�buffer‰ENDC ‰IFNC†'\6',''!\1IOEOB‚DC.L†\6-PBA„End�of�buffer‰ENDC&\1IOSLL‚DC.L†0‰Length�of�data�transfer ‰IFC‡'\7',''!\1IOCAD‚DC.L†0‰Completion�address‰ENDC ‰IFNC†'\7',''&\1IOCAD‚DC.L†\7-PBA„Completion�address‰ENDC‰ENDM    REGS…MACRO‰OPT�NOCL,NOMEX,A9*********************************************************5*‚The�PREFIX�for�the�register�labe ls�is�provided�by„*7*‚appending�the�CHARACTER�to�the�"REGS"�macro�name...‚**·*3*‚A�description�can�be�provided�as�a�parameter...†**·* *‚Example:­**�REGS.E‚Ž**·*9*********************************************************‰OPT�NOCL,MEX,A#\0AREAƒDS.L†0‰Register�save�area�\1*‡-Data�registers-\0D0…DC.L†0‰D0\0D1…DC.L†0‰D1\0D2…DC.L†0‰D2\0D3…DC.L†0‰D3\0D4…DC.L†0‰D4\0D5…DC.L†0‰D5\0D6…DC.L†0‰D6\0D7…DC.L†0‰D7*‡-Address�registers-\0A0…DC.L†0‰A0\0A1…DC.L†0‰A1\0A2…DC.L†0‰A2\0A3…DC.L†0‰A3\0A4…DC.L†0‰A4\0A5…DC.L†0‰A5\0A6…DC.L†0‰A6\0A7…DC.L†0‰A7‰ENDM  ALLOCATE MACRO8‰LEA‡\1FHSPB(PC),A0†>..A0�=�address�of�\1�FHS�parm�block1‰MOVE.W„#$0080,(A0)‰>..Build�FHS�ALLOCATE�command&‰TRAP†#3’>..Issue�the�ALLOCATE�command SPC 1‰ENDM   ASSIGNƒMACRO8‰LEA‡\1FHSPB(PC),A0†>..A0�=�address�of�\1�FHS�parm�block/‰MOVE.W„#$0040,(A0)‰>..Build�FHS�ASSIGN�command$‰TRAP†#3’>..Issue�the�ASSIGN�command SPC 1‰ENDM    GET†MACRO8‰LEA‡\1IOSPB(PC),A0†>..A0�=�address�of�\1�IOS�parm�block-‰MOVE.W„#$0001,(A0)‰>..Build�IOS�READ�command"‰TRAP†#2’>..Issue�the�READ�command SPC 1‰ENDM PUT†MACRO8‰LEA‡\1IOSPB(PC),A0†>..A0�=�address�of�\1�IOS�parm�block.‰MOVE.W„#$0002,(A0)‰>..Build�IOS�WRITE�command#‰TRAP†#2’>..Issue�the�WRITE�command SPC 1‰ENDM  UPDATEƒMACRO8‰LEA‡\1IOSPB(PC),A0†>..A0�=�address�of�\1�IOS�parm�block/‰MOVE.W„#$0008,(A0)‰>..Build�IOS�UPDATE�command$‰TRAP†#2’>..Issue�the�UPDATE�command SPC 1‰ENDM  CLOSE„MACRO8‰LEA‡\1FHSPB(PC),A0†>..A0�=�address�of�\1�FHS�parm�block.‰MOVE.W„#$0004,(A0)‰>..Build�FHS�WRITE�command#‰TRAP†#3’>..Issue�the�CLOSE�command SPC 1‰ENDM   ISIT…MACRO ‰IFC‡'\0','':‰MOVE.W„\1-PBA(A4),D0‡>..D0�=�Data�to�be�compared�(ARG#�1)&‰CMP.W…\2-PBA(A4),D0‡>..ARG#2�vs�ARG#1‰ENDC ‰IFNC†'\0','';‰MOVE.\0ƒ\1-PBA(A4),D0‡>..D0�=�Data�to�be�compared�(ARG#�1)'‰CMP.\0„\2-PBA(A4),D0‡>..ARG#2�vs�ARG#1‰ENDC SPC 1‰ENDM   XFER…MACRO‰IFNC†'\3','D0'4‰MOVE.L„\3-1,D0�>..D0�=�The�number�of�".\0"�to�move.‰ENDC‰IFNC†'\1','(A0)'%‰LEA‡\1(PC),A0�>..A0�=�"FROM"�address‰ENDC‰IFNC†'\2','(A1)'#‰LEA‡\2(PC),A1�>..A1�=�"TO"ƒaddress‰ENDC ‰IFC‡'\0',''*XFER\@ƒMOVE.W„(A0)+,(A1)+‰>..Move�one�".W"‰ENDC ‰IFNC†'\0','',XFER\@ƒMOVE.\0ƒ(A0)+,(A1)+‰>..Move�one�".\0"‰ENDC‰DBRA†D0,XFER\@‹>..Done? SPC 1‰ENDM    PASSLU6‚MACRO5‰LEA‡LU6\@(PC),A0ˆ>..Load�register�A0�with�PB�address%‰TRAP†#3’>.."Receive"�logical�unit�#6&‰BRA‡CON\@�>..Branch�around�parm�block SPC 1,LU6\@„DSˆ0“>..Logical�unit�modify�parm�block)‰DC.W†$0110,$8001,$0006,$0600,'SYMB','\1' SPC 2CON\@„DSˆ0“>..Continue‰ENDM  TAB†MACRO ‰IFC‡'\0','0' * LS-Nibble=* .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F . MS-Nibble*‰ENDC7* \1 \2 \3 \4 \5 \6 \7 \8 \9 \A \B \C \D \E \F \G . .\00‰DC.L†$\1\2\3\4,$\5\6\7\8,$\9\A\B\C,$\D\E\F\Gƒ\0 ‰IFC‡'\0','F'*=* .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F . MS-Nibble * LS-Nibble‰ENDC‰ENDM*************************** Ending of &.UPLOADS.MC ***************************ééé ééé‰PAGE************************** Beginning of &.USM.EQ *************************** *ˆ**�EQUATES* ŠOFFSET�0STTTID„DS.Lƒ1’TERMINAL�I.D.STTSES„DS.Lƒ1’SESSION�NO.%STTINC„EQU„*-STTTID‹LENGTH�OF�ENTRIES ŠOFFSET�0BATSTATƒDS.Wƒ1’STATUSBATUSRNO‚DS.Wƒ1’USER�NO.BATSES„DS.Lƒ1’SESSION�NUMBER**‚DEFAULT�VALUES*$SYSVOL„EQU„'„'�SYSTEM�VOLUME�DEFAULT!DFLTUNOƒEQU„0’DEFAULT�USER�NUMBER DFLTCAT1‚EQU„'„'�DEFAULT�CATALOG DFLTCAT2‚EQU„'„'�DEFAULT�CATALOG*)EETPNAMƒEQU„'&EET'�EET�TASK�AND�PSCT�NAME(EETDNAMƒEQU„'.EET'�EET�DATA�SEGMENT�NAME)SCTPNAMƒEQU„'&SCT'�SCT�TASK�AND�PSCT�NAME(SCTDNAMƒEQU„'.SCT'�SCT�DATA�SEGMENT�NAME-BCTPNAMƒEQU„'&BCT'�BATCH�CONTROL�SESSION�TASK)EETSESNO‚EQU„2’SESSION�NUMBER�OF�EET�TASK#STKLEN„EQU„150�EET/SCT�STACK�LENGTH0TIBASG„EQU„25‘TERMINAL�ASSIGNED�(FHS�EQUATE)�BITCENTURYƒEQU„1900IYEAR…EQU„80‘INITIAL�YEAR*'SCTINBLƒEQU„160�CDF�INPUT�BUFFER�LENGTH4SCTLUN„EQU„0’LUN�FOR�SCT�INTERACTIVE�TERMINAL�DIALOG1MAXTSKNO‚EQU„8’MAX�NO.�ASQ�ENTRIES�QUEUED�FOR�SCT-MAXVNTLN‚EQU„26‘MAX�LENGTH�OF�SCT'S�ASQ�ENTRY+XOFF†EQU„$5E�UP�ARROW�(HALT�TERMINAL�INPUT)'NOSUB…EQU„$7E�NO�SUBSTITUTION�CHARACTER)IPRISCTƒEQU„128�INITIAL�PRIORITY�SCT�TASK'LPRISCTƒEQU„255�LIMIT�PRIORITY�SCT�TASK(IPRIBCTƒEQU„64‘INITIAL�PRIORITY�BCT�TASK'LPRIBCTƒEQU„127�LIMIT�PRIORITY�BCT�TASK**ˆSESSION�OPTION�BITS�(D7)*?BTCDFILE‚EQU„31�1=>CMD�FILE�0=>CMD�DEVICE�(PROMPT/INPUT�SCTLUN)%BTLDFILE‚EQU„30‘1=>LDF�FILE�0=>DEVICE*BTREAD5ƒEQU„29‘1=READ�LUN�5,�0=>READ�LUN�0;BTSUBPOS‚EQU„28‘1=>POSITIONAL�ARGUMENT�SUBSTITUTION,�0=>TAG'BTDTIMEƒEQU„27‘1=>REQUEST�DATE�AND�TIME:BTREREAD‚EQU„26‘1=>RE-READ�THE�CURRENT�RECORD,0=>READ�NEXTUNSOLICITED�BREAK�SINCE�LAST�COMMAND�INPUTBTBATCHƒEQU„24‘1=>BATCH�MODE3BTBATACK‚EQU„23‘1=>RESPONSE�TO�QUEUE�BATCH�RECEIVED#BTBATNAK‚EQU„22‘1=>BATCH�QUEUE�FULL&BTCMDABT‚EQU„21‘1=>CHAIN�ABORT�COMMAND%BTSUBSER‚EQU„20‘1=>SUBSTITUTION�ERROR+BTENDSKP‚EQU„19‘1=>�READ�UNTIL�/ENDIF�FOUND[<d-lBt6ABTFORSKP‚EQU„18‹1=>�READ�UNTIL�/ENDFOR�FOUND�(USED�WITH�BTENDSKP)&BTARGNOE‚EQU„17‘1=>�TOO�MANY�ARGUMENTS*‰EQU„16ˆNOT�ASSIGNED* *ˆ**�SYSTEM�OPTION�BITS�(SYSOPT)*ASOSYSMSG‚EQU„1‹1=>INVOKE�PRIV.UPSYSTEM.NW�CHAIN�FILE�ON�SESSION�1/SOBATOLY‚EQU„0’1=>BATCH�MODE�ONLY�LIST�IN�FORCE2********* FOLLOWING CLEARED EACH COMMAND *********ABTSLASHƒEQU„7Š1=CHAIN�CONDTIONAL�(INHIBIT�SUBSITUTION�ERROR�MSGS)BTEOF…EQU„6’1=>EOF�ENCOUNTERD%BTCHNABT‚EQU„5’1=>ABORT�IF�CHAIN�MODESUBSTITUTION�PERFORMED,�0=>NO�SUBSTITUTION'BTMSGI„EQU„3’1=>INHIBIT�TRAP�1�MESSAGES5BTLODGOƒEQU„2’1=>LOAD�ONLY�(NO�START)�0=>LOAD�&�STARTBTATSIGN‚EQU„1’1=>"@"�COMMAND(BTECHO„EQU„0’1=>�INPUT�WAS�ECHOED�TO�LDF*O******************************************************************************* *ˆSHAREOPT:�OPTIONS�A-O�BIT�MASK3*ˆ.ARG�SEGMENT�(LOCALLY/SESSION�SHARED�SEGMENT)+$FEO*******************************************************************************2********* FOLLOWING SET BY 'OPT' COMMAND ******* **5BTCHNOVR‚EQU„15‘O:1=>�OVERIDE�BTCHNABT�(IGNORE�ERROR)ABTNOECHO‚EQU„14‹N:1=>NO�ECHO�OF�CDF,�OR�RESULTS�OF�ARG,DEF,OR�OPT9BTPRTSKP‚EQU„13‘M:1=>PRINT�CHAIN�CONDITIONALS�DURING�SKIP5BTPRTIFƒEQU„12‘L:1=>�PRINT�CHAIN�CONDITIONAL�COMMANDSDBTNOLOHI‚EQU„11ˆK:1=>INHIBIT�TRANSLATING�LOWER�TO�UPPER�CASE�ON�READ?BTOPTJ„EQU„10‹J:1=>�INHIBIT�SBARG�ECHO�INPUT�LINE�IN�CHAIN�MODE)BTABTDMP‚EQU„9’I:1=>�ABORT�DUMP�REQUESTED9BTBRKSTP‚EQU„8’H:1=>STOP�ALL�TASKS�ON�BREAK,�0=>TERMINATEBTOPTG„EQU„7’G:NOT�ASSIGNEDBTOPTF„EQU„6’F:NOT�ASSIGNEDBTOPTE„EQU„5’E:NOT�ASSIGNED@BTOPTD„EQU„4ŠD:1=>�ONLY�DEFAULT�TASK�TERMINATED/STOPPED�ON�BREAKBTOPTC„EQU„3’C:NOT�ASSIGNED&BTBELL„EQU„2’B:1=>�RING�BELL�ON�PROMPT,BTOPTA„EQU„1’A:1=>�ABORT�CHAIN�FILE�IF�RA<>0O********************************************************************************(LDRDIR„EQU„1’TRAP�4�-�FUNCTION�1:�LOADER*+*‚LOADER�RETURN�CONDITIONS�TO�WAITING�TASK:#*‚Z�=�1,�D0�=�0�=>�LOAD�SUCCESSFULL#*†0,�D0�=�ERROR�CODE�=>�LOAD�FAILED7*‚A0�->�PARAMETER�BLOCK,�TCB�NOW�AS�ALLOCATED�BY�LOADER* *‚ABORT�CODES)ABTBRK„EQU„$E0000000ŠDIAGNOSTIC�FOR�BREAK1ABTNOBRK‚EQU„$FFFF0000ŠDIAGNOSTIC�ABORT�NOT�BREAK(ABRTREQƒEQU„$8006ŽTERMINAL�ABORT�REQUEST0AABRTREQ‚EQU„'8006'�ASCII�TERMINAL�ABORT�REQUEST"ABTNOMEM‚EQU„$8008ŽNO�MEMORY�SPACE"BRKABRTƒEQU„$8009ŽBREAK�ABORT�CODEEETDIAGN‚EQU„$FFFF0000 EETCODEƒEQU„$8002ŽABORTED�BY�EET* *ˆ**�EQUATES�FOR�SECURITY�OPTION*PWVOL…EQU„'„'�PASSWORD�VOLUME PWUSR…EQU„0’PASSWORD�USER�NUMBER"PWCAT1„EQU„'PRIV'�PASSWORD�CATALOGPWCAT2„EQU„'„'�CATALOG�2PWFIL1„EQU„'ACCO'�FILE�NAMEPWFIL2„EQU„'UNT�'�FILE�2PWEXT…EQU„'PW'�PASSWORD�EXTENT PWPROT„EQU„$00FFŽOWNER�READ�ONLY!PWRECL„EQU„16‘TOTAL�RECORD�LENGTHPWKSIZ„EQU„4’KEY�SIZEPWFBLK„EQU„0’FAB,BLOCK*"*ˆ**�EQUATES�FOR�ACCOUNTING�OPTION* OWRECL„EQU„64OWEXT…EQU„'OW'OWKSIZ„EQU„4’KEY�SIZE'OWDEPTSƒEQU„4’START�OF�DEPARTMENT�FIELD$OWDEPTCƒEQU„8’DEPARTMENT�FIELD�COUNT"OWNAMESƒEQU„12‘START�OF�NAME�FIELDOWNAMECƒEQU„20‘NAME�FIELD�COUNT+OWLLOFFS‚EQU„32‘START�OF�LAST�LOG�OFF�FIELD'OWLLOFFC‚EQU„8’LAST�LOG�OFF�FIELD�COUNT-OWCTIMSƒEQU„40‘START�OF�CUMULATIVE�TIME�FIELD)OWCTIMCƒEQU„8’CUMULATIVE�TIME�FIELD�COUNT+OWSCNTSƒEQU„48‘START�OF�SESSION�COUNT�FIELD(OWSCNTCƒEQU„4’SESSTION�COUNT�FIELD�COUNT#OWRESTSƒEQU„52‘START�OF�RESET�FIELDOWRESTCƒEQU„8’RESET�FIELD�COUNT***<*ˆERROR�MESSGE�HANDLER�EQUATES�FOR�NON-TRAP�RELATED�MESSAGES**’AS�OF�9/1/81**'EM_STRTS‚EQU„$300�START�SESSION�MESSAGE%EM_ENDSS‚EQU„$301�END�SESSION�MESSAGEEM_BREAK‚EQU„$302�BREAK"EM_DFMSG‚EQU„$303�DEFAULTS�MESSAGE!EM_OPTMS‚EQU„$304�OPTIONS�MESSAGEEM_RETRN‚EQU„$305�LEFT�MARGIN(EM_PLUG1‚EQU„$306�DISPLAY�FROM�PLUG�POOLEM_LODED‚EQU„$307�TASK�LOADED,EM_LODEB‚EQU„$308�TASK�LOADED�BINARY�SESSIONEM_STOPƒEQU„$309�TASK�STOPPED-EM_STOPB‚EQU„$30A�TASK�STOPPED�BINARY�SESSIONEM_CONTƒEQU„$30B�TASK�CONTINUED/EM_CONTB‚EQU„$30C�TASK�CONTINUED�BINARY�SESSION!EM_TERMD‚EQU„$30D�TASK�TERMINATED0EM_FINIB‚EQU„$30E�TASK�TERMINATED�BINARY�SESSION!EM_TERMT‚EQU„$30F�TASK�TERMINATED-EM_TERMB‚EQU„$310�TASK�ABORTED�BINARY�SESSIONEM_REJCT‚EQU„$311�LOGON�REJECT$EM_ARGXƒEQU„$312�"<"NOT�EQUAL�TO�">"!EM_CTION‚EQU„$313�CAUTION:USER=�0&EM_PRIVƒEQU„$314�PRIVELEGED�USER�ERROR"EM_CMDXƒEQU„$315�COMMAND�NOT�FOUND!EM_VOLXƒEQU„$316�VOLUME�NOT�FOUND$EM_ARGNO‚EQU„$317�TOO�MANY�ARGUMENTS EM_NTASK‚EQU„$318�TASK�NOT�FOUND+EM_NONOƒEQU„$319�TASKNAME�INVALID/PROTECTED"EM_LUNER‚EQU„$31A�LUN�NOT�ASSIGNED*EM_NCONT‚EQU„$31B�TASK�CAN�NOT�BE�CONINUED$EM_ALSTR‚EQU„$31C�START�INDIVIDUALLY$EM_NESTƒEQU„$31D�NESTING�LEVEL�ERROR*EM_NROOM‚EQU„$31E�RETURN�STACK�SPACE�ERROR)EM_NDEVƒEQU„$31F�DEVICE�NOT�ALLOWED�ERROR*EM_IFLEV‚EQU„$320�IF�LEVEL�EXECEEDED�ERROR!EM_ENDIF‚EQU„$321�TOO�MANY�ENDIFS&EM_SYNTX‚EQU„$322�CHAIN�COMMAND�SYNTAX)EM_REGXƒEQU„$323�DISPLAY�PSUEDO�REGISTERS#EM_NOBAT‚EQU„$324�BATCH�NOT�ALLOWED"EM_NSELF‚EQU„$325�SELF�NOT�ALLOWED%EM_BASER‚EQU„$326�BATCH�SESSION�ERROR)EM_BASES‚EQU„$327�BATCH�SESSION�NOT�FOUND$EM_BANUM‚EQU„$328�USER�NO.�NOT�FOUND +EM_NOTBA‚EQU„$329�NOT�ALLOWED�IN�BATCH�MODE*EM_QBATC‚EQU„$32A�BATCH�JOB�QUEUED�MESSAGE"EM_QRUNƒEQU„$32B�BATCH�JOB�RUNNING EM_QDONE‚EQU„$32C�BATCH�JOB�DONE"EM_QFULL‚EQU„$32D�BATCH�QUEUE�FULL%EM_BABRT‚EQU„$32E�BATCH�JOB�CANCELLED"EM_NOREC‚EQU„$32F�RECORD�NOT�FOUND$EM_NONUM‚EQU„$330�USER�NO.�NOT�FOUND"EM_NUSER‚EQU„$331�INVALID�USER�NO.#EM_NCHAN‚EQU„$332�NOT�IN�CHAIN�MODE"EM_VSIZE‚EQU„$333�VALUE�SIZE�ERROR!EM_FILNA‚EQU„$334�FILE�DESCRIPTOREM_NOCHG‚EQU„$335�NO�CHANGE EM_DFLTV‚EQU„$336�DEFAULT�VOLUMEEM_OPTER‚EQU„$337�OPTION%EM_BONLY‚EQU„$338�NOT�ALLOWED�ON�LINEEM_INVLU‚EQU„$339�INVALID�LUN%EM_FDMIS‚EQU„$33A�FILE/DEVICE�MISSING#EM_PRMIT‚EQU„$33B�ACCESS�PERMISSION!EM_RVRSE‚EQU„$33C�VALUES�REVERSED EM_PTASK‚EQU„$33D�PROTECTED�TASK EM_CMDER‚EQU„$33E�COMMAND�SYNTAX%EM_FLDSZ‚EQU„$33F�FIELD�SIZE�EXCEEDED'EM_NFILE‚EQU„$340�FILE�WAS�NOT�ASSIGNED,EM_NOCVT‚EQU„$341�NUMERICAL�CONVERSION�ERROR*********************** Ending of &.USM.EQ ***********************‰PAGE************************** Beginning of &.UST.EQ ****************************ˆUSER�SEMAPHORE�TABLE* ŠOFFSET�0UST‡DS.Lƒ1’!UST„DEBUG�TOOL)USTNEXTƒDS.Lƒ1’LINK�TO�NEXT�TABLE�SEGMENT*USTNSEGƒDS.Wƒ1’NUMBER�OF�SEGMENTS�IN�TABLE.USTNPAGE‚DS.Wƒ1’NUMBER�OF�PAGES�-�THIS�SEGMENT$USTMENTƒDS.Wƒ1’MAX�NUMBER�OF�ENTRIES(USTCENTƒDS.Wƒ1’CURRENT�NUMBER�OF�ENTRIES%USTFENTƒDS.Lƒ1’ADDRESS�OF�FIRST�ENTRY$USTENTRY‚EQU„*’OFFSET�TO�FIRST�ENTRY**ˆUST�ENTRY�DEFINITION* ŠOFFSET�0&USTTNAME‚DS.Lƒ1’ORIGINATOR'S�TASK�NAME+USTSESSN‚DS.Lƒ1’ORIGINATOR'S�SESSION�NUMBERUSTSNAME‚DS.Lƒ1’SEMAPHORE�NAME:USTUCNTƒDS.Wƒ1’#�USERS�OF�SEMAPHORE�OR�-1�IF�POINTER�ENTRY:USTXCNTƒDS.Bƒ1’INITIAL�COUNT�OR�COUNT�OF�WAITS�AND�SIGNALS(USTTYPEƒDS.Bƒ1’SEMAPHORE�TYPE�(1,2�OR�3)USTSEM„DS.Wƒ3’SEMAPHORE ŠOFFSET�*-6*USTSPTRƒDS.Lƒ1’POINTER�TO�ACTUAL�SEMAPHOREŠDS.Wƒ1’UNUSEDUSTEL…EQU„*’ENTRY�LENGTH*********************** Ending of &.UST.EQ ***********************éééé|"‰PAGE****************************** Beginning of &.UTILITY.MC ******************************O*******************************************************************************O**********************************************************************************É***/***�UTILITY.MC�--�MACROS�OF�GENERAL�UTILITY’******É***5***†ENVIRONMENT:‚In�68000�assembly�language�code.•******É***@***†FUNCTION:‚These�macros�are�of�a�general�nature.‚They�are‰***A***‰intended�to�be�a�collection�of�tools�useful�in�any�appli-‡******‰cation.¹******É******†NOTES:½******É***O*******************************************************************************O******************************************************************************* *,*‚ Revision�history�(add�new�changes�to�top).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------'*†1/�6/83‚Steve�FranckƒInitial�writing.*ŠPAGE*.*‚Macros�to�push�and�pop�using�the�stack�(A7).*‚e.g.,„PUSH.B�#'*'ƒorƒPOP.L�D0* PUSH†MACROŠMOVE.\0�\1,-(A7)ŠENDM POP‡MACROŠMOVE.\0�(A7)+,\1ŠENDM *A*‚Macros�to�save�and�restore�registers�using�the�stack,�as�at�theG*‚beginning�of�a�subroutine.‚Valid�sizes�are�.L�and�.W;�defaults�to�.L.'*‚SAVE�pushes�registers�onto�the�stack.I*‚RENEW�gets�registers�from�the�stack�without�changing�the�stack�pointer.'*‚RESTORE�pops�registers�off�the�stack.%*‚e.g.,„SAVE�D0-D3/A1…RESTORE.W�D3-D5* SAVE†MACRO ŠIFC„'\0',''ŠMOVEM.L�\1,-(A7)ŠMEXITŠENDCŠMOVEM.\0�\1,-(A7)ŠENDM RENEW…MACRO ŠIFC„'\0',''ŠMOVEM.L�(A7),\1ŠMEXITŠENDCŠMOVEM.\0�(A7),\1ŠENDM RESTOREƒMACRO ŠIFC„'\0',''ŠMOVEM.L�(A7)+,\1ŠMEXITŠENDCŠMOVEM.\0�(A7)+,\1ŠENDM *A*‚Macro�to�reserve�storage�in�an�offset�block.‚Invoke�as�follows:*ŒRESERVE.<#�of�bytes>‚