IMD 1.17: 25/11/2014 12:15:01 82VKXBVERDOS D* BT11:0 68K VERSADOS/RMS68K OBJECT 4.5 (EQUATE FILES) (DS,DD 96 tpi 5.1/4" DISK) REVISED: 04/22/86 DISK 11 OF 24  BT11 82VKXBVERDOS 0420±b-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 &.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�BLOCK*£ALSO�REQUEST�IS�FOR�MMIO8SGPBOLAD‚EQU„14‘LOGICAL�ADDRESS�GIVEN�IN�PARAMETER�BLOCK#*£(RCVSA�AND�TFRSEG�DIRECTIVES�ONLY+SGPBOROM‚EQU„14‘REQUEST�IS�FOR�PHYSICAL�ROM,*£(SET�IN�SEGALOC�FOR�CALL�TO�PAGEALOC�ONLY);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 *********************** NNR&‰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[Kd (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 ***************************NN NNNN‰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�FILElLu7}C…N�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�E QUATES*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' I S 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�ADDRESSBOPTFLGSƒDS.Bƒ1‰Option�flag�after�parsing�the�command�line�(101885)'FF_FLAGS‚DS.Bƒ1’Form�Feed�flag”(101885)&*£$00�-�Do�a�form�feed�at�the‡(101885) *©beginning�of�the�file‡(101885),*£$FF�-�Don't�do�a�form�feed�at�the�(101885) *©beginning�of�the�file‡(101885) DATALNGƒEQU„************************ Ending of &.SPL.EQ ***********************NNNNN‰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 ************************NN•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)ž?§:¯&·¿xÇ™ÏZ%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„383T1RESVCT‚EQU„39‘SAVE�TASK'S�RESERVED�VECTOR�ADDRESS#T1CRXTCB‚EQU„40‘CREATE�EXTENDED�TCB"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*T1ABORTC‚EQU„49‘ABORT�CRITICAL�TASK�(SELF) 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�INTERRUPT3T1XEXMSK‚EQU„63‘SET�EXTENDED�EXCEPTION�MONITOR�MASK*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"T1XPSTAT‚EQU„70‘PUT�EXTENDED�STATE&T1XRSTAT‚EQU„71‘RECEIVE�EXTENDED�STATET1MOVEPL‚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.3T0CINTZƒEQU„38‘EXIT�INTERRUPT�ROUTINE�THRU�COMINTZ.8T0FRBLKƒEQU„39‘FREE�BLOCK�OF�MEMORY�USING�BUDDY�BUFFERS.7T0ADDSEG‚EQU„40‘ADD�SEGMENT�TO�TRANSLATION�TREE�FOR�THE'*£MMB851�OR�M68851�-�FOR�EXEC�USE�ONLY!8T0ADDMMIO�EQU„41‘ADD�SEGMENT�TO�TRANSLATION�TREE�FOR�THE,*£MMB851�WITH�START�&�END�ADDRESSES�IN�REGS-*£FOR�EXEC�USE�ONLY!1T0DRIVKILL�EQUƒ42‘CRASH�THE�SYSTEM�FROM�A�DRIVER.:T0EXECKILL�EQUƒ43‘CRASH�THE�SYSTEM�FROM�THE�EXEC�-�FOR�USE**£BY�EXEC�CODE�THAT�DOESN'T�LINK�AT�RMSGEN *£TIME�ONLY!N7T0CRXTCB�EQU…44‘CREATE�EXTENDED�TCB�IF�COPROCESSOR�USED*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�ROU TINE�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 TA CKOSA0‚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 ************************NNNNN׉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�LISTJ*=========================================================================*ˆUSED�TO�BE�TCBGROUP4TCBXTCBƒDS.Lƒ1’LINK�FOR�EXTENDED�TCB�FOR�COPROCESSORJ*=========================================================================#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�WORD+TCBTST„DS.Lƒ1’POINTER�TO�TASK�SEGMENT�TABLETCBASQSM‚DS.Wƒ3’ASQ�SEMAPHORETCBASQ„DS.Lƒ1’POINTER�TO�ASQ***‡EXCEPTION�MONITOR�PARAMETERS*J*========================================================================="*ˆMOVED�HERE�FROM�2ND�PAGE�OF�TCB. )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�INSTRUCTIONSJ*========================================================================= J*=========================================================================2TCBCXMSK‚DS.Lƒ1’COPROCESSOR�EXCEPTION�MONITOR�MASK ŠDS.Wƒ1’RESERVED�FOR�FUTURE�USE à8é?ñ2ù!J*=========================================================================;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ƒ1’RESERVED�FOR�FUTURE�USEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> *‰DS.Lƒ1’RESERVED�FOR�FUTURE�USE9TCBMID„DS.Lƒ1’POINTER�TO�6-WORDS�OF�MID-INSTR�STACK�FRAMEO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<(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’EXEC�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�ERROR Š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.Bƒ2’ERROR�CODE�-�USED�ONLY�BY�DESEM**TCBTSTSM‚DS.Wƒ3’TST�SEMAPHORE1TCBCHANƒ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�VECTORH*=======================================================================3TCBCVECT‚DS.Lƒ1’ADDRESS�OF�COPROCESSOR�VECTOR�TABLEH*=======================================================================  )TSTBEGIN‚EQU„*’OFFSET�TO�BEGINNING�OF�TST ŠDS.Bƒ$200-* *  *‰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�ENTRYL*===========================================================================/TSKICVCT‚EQU„9’TASK�HAS�OWN�COPROCESSOR�VECTORSL*===========================================================================.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�MONITORED0TEMILLEG‚EQU„18‘ILLEGAL�INSTRUCTION�IS�MONITORED'TEMZDI Vƒ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 J*=========================================================================#*ƒNEW�-�GRABBED�THIS�FROM�SYSGEN.SA** MINI TCB FORMAT* ŠOFFSET�0MTCB†DS.Bƒ4’!TCBMTCBNAME‚DS.Bƒ4’TASK�NAMEMTCBSESSN�DS.Bƒ4’TASK�SESSION MTCBMONƒDS.Bƒ4’MONITOR�TASK�NAMEŠDS.Bƒ4’MONITOR�TASK�SESSIONMTCBUSER‚DS.Bƒ2’USER�NUMBERMTCBLPRI‚DS.Bƒ1’PRIORITY#MTCBCFLG‚DS.Bƒ1’COPROCESSOR_ID�FLAGMTCBSTATE�DS.Bƒ2’STATEMTCBATTR‚DS.Bƒ2’ATTRIBUTESMTCBENTRY�DS.Bƒ4’ENTRY�ADDRESSMTSTMMUƒDS.Bƒ128�TST�MMU�INFO(MTSTMSZƒEQU„*-MTSTMMUŠ#BYTES�IN�MMU�INFOMTSTATTR‚DS.Bƒ16‘TST�ATTRIBUTES+MTSTATSZ‚EQU„*-MTSTATTR‰#BYTES�IN�ATTR�INFOMTCBLN„EQU„*’LENGTH�OF�MINI-TCBJ*========================================================================= *********************** Ending of &.TCB.EQ ***********************NNN‰PAGE****************************** Beginning of &.TERMCCB.EQ ******************************%*ˆ7/9/84…added�BAB�area�for�terminals>*ˆ3/6/86…modified�NEAR_FUL�to�RQ_MAX-20,�NUF_ROOM�to�RQ_MAX-40NNNNNN N 3#"6*62:B2J2R8Z4b *(*‰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-20‰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-40‰When�the�removal�of�a�char�makes�the�queue$*§this�full,�the�driver�releases�the$*§suspended�device�by�raising�DTR�or*§sending�XON.ŠPAGE*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�outside�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.N  NN*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.*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.N$*¤----------------------------------&*£|�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�in  tentionally�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.ŠPAGEE�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�function. =�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.‰PAGENNN  NN<�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�ifNNNN*§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.ŠPAGE<�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.*ŠPAGE@�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&*§specific�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.* :�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.‰PAGE**ˆ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.;�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.N*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. .�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 *E*‚This�process�state�is�cleared�in�TERM_INIT�and�set�in�TERM_COMMAND.*‚It�is�tested�in�BREAK.I*‚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 ***************************NN  NN‰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�ofjEs*§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.>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*>*ˆHere�are�some�notes�about�saving�the�state�of�a�coprocessor:?*ˆThe�save_state�macro�has�an�entry�for�coprocessors.‚It�allows?*ˆmore�than�one�coprocessor�(any�type)�to�be�attached�to�a�task=*ˆat�one�time,�therefore,�there�may�be�a�linked�list�of�XTCBs<*ˆattached�to�a�TCB�at�one�time.‚Now,�when�the�68020�makes�a?*ˆtask�switch�while�a�coprocessor�instruction�is�executing,�theD*ˆstack�frame�may�be�4-words�(normal)�or�10-words�(mid-instruction).;*ˆWhen�the�mid-instruction�one�occurs,�we�must�save�off�the�<¦?®w¶�¾#D*ˆadditional�6-words�somewhere,�and�there's�no�more�room�in�the�TCB.@*ˆSo�we�save�them�off�in�the�firxt�XTCB�in�the�link�list.�Now�by@*ˆchance�if�there's�more�than�one�XTCB,�we�may�not�be�saving�theD*ˆ6-words�in�the�XTCB�for�the�coprocessor�which�was�mid-instruction,@*ˆbut�that�doesn't�matter,�and�that's�why�I'm�telling�the�story.*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< SAVE_STATE MACROŠNOLIST ŠOPT„NOCLŠLISTŠIFC„'\1','L1_PART'"�MOVE.L�A6,-  (A7)‹save�A6�on�stack. �MOVE.L�RUNNER,A6ŠA6�<==�runner.=�MOVEM.L�D0-D7/A0-A5,TCBD0(A6)�save�rest�of�registers�in�TCB.ŠENDCŠIFC„'\1','L1_FULL'3�MOVEM.L�(A7),A0/A2-A3…get�(A6,�SR,�PC)�from�stack;�MOVE.L�USP,A1�get�USP;7�MOVEM.L�A0-A3,TCBA6(A6)ƒsave�(A6,�USP,�SR,�PC)�in�tcb;ŠENDCŠIFC„'\1','EXCEPTION'$�MOVE.L�(SP),-(SP)‰make�room�for�A6."�MOVE.L�A6,4(SP)‹save�A6�on�stack. �MOVE.L�RUNNER,A6ŠA6�<==�runner.=�MOVEM.L�D0-D7/A0-A5,TCBD0(A6)�save�rest�of�registers�in�TCB.ŠENDCŠIFC„'\1','COPROCESSOR'L*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> �OPT„P=68020*�MOVE.L�TCBXTCB(A6),A0…A0�<==�XTCB�address@�BFEXTU‚TCBVOR(A6){0:4},D0�Use�bit-field�to�check�for�mid-instr.9�CMP.Bƒ#9,D0ˆCompare�RTE�frame�format�code�for�mid-instr./�IF��THEN.SŒIf�mid-instr�RTE�frame,�then...2ŽMOVE.L�A0,TCBMID(A6)…Save�XTCB�address�in�the�TCB=ŽMOVEM.L�12(A7),A1/A2/A3‚Move�last�6-words�of�mid-instr�to...'ŽMOVEM.L�A1/A2/A3,XTCBMID(A0)�the�XTCB.�ENDIL*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<5\@‹MOVE.L�XTCB_SAV(A0),A2„A2�<==�save�routine�address�JSR„(A2)�execute�save�routine2�MOVE.L�XTCB_PTR(A0),D0„D0�is�address�of�next�XTCB#�BEQ.S‚A\@�will�be�zero�if�last�one�MOVE.L�D0,A0ŽA0�<==�next�XTCB�BRA„\@‘go�save�it.A\@ŠENDCŠNOLISTŠOPT„CLŠLISTŠENDM **ˆHere�is�the�put_state�macro* PUT_STATE MACROŠNOLIST ŠOPT„NOCLŠLISTŠIFC„'\1','COPROCESSOR'#�MOVEM.L�A0-A2,-(A7)‡Save�registers*�MOVE.L�TCBXTCB(A6),A0…A0�<==�XTCB�address8\@‹MOVE.L�XTCB_RST(A0),A2„A2�<==�restore�routine�address!�JSR„(A2)�execute�restore�routine;�TST.L‚XTCB_PTR(A0)‡Is�there�another�XTCB�in�the�link�list?+�BEQ.S‚B\@�Pointer�will�be�zero�if�last�one(�MOVE.L�XTCB_PTR(A0),A0„A0�<==�next�XTCB�BRA„\@‘go�restore�it.B\@&�MOVEM.L�(A7)+,A0-A2‡Restore�registersŠENDCŠNOLISTŠOPT�CLŠLISTŠENDM **ˆHere�is�the�exit�macro.* EXIT†MACROŠNOLIST ŠOPT„NOCLŠLISTŠIFC„'\1','SUB'�XREFƒEXIT_SUB �IFC„'\0',''�BRA.L‚EXIT_SUB�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_SUB�ENDCŠENDCŠIFC„'\1','D0_SUB'�XREFƒEXIT_D0SUB �IFC„'\0',''�BRA.L‚EXIT_D0SUB�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_D0SUB�ENDCŠENDCŠIFC„'\1','POSTEMPT'�XREFƒEXIT_POST �IFC„'\0',''�BRA.L‚EXIT_POST�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_POST�ENDCŠENDCŠIFC„'\1','TERM'�XREFƒEXIT_TERM �IFC„'\0',''�BRA.L‚EXIT_TERM�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_TERM�ENDCŠENDCŠIFC„'\1','ASR'�XREFƒEXIT_ASR �IFC„'\0',''�BRA.L‚EXIT_ASR�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_ASR�ENDCŠENDCŠIFC„'\1','D0_ASR'�XREFƒEXIT_D0ASR �IFC„'\0',''�BRA.L‚EXIT_D0ASR�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_D0ASR�ENDCŠENDCŠIFC„'\1','ERROR'�XREFƒEXIT_ERR �IFC„'\0',''�BRA.L‚EXIT_ERR�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_ERR�ENDCŠENDCŠIFC„'\1','TRAPERR'�XREFƒEXIT_TRAPERR �IFC„'\0',''�BRA.L‚EXIT_TRAPERR�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_TRAPERR�ENDCŠENDCŠIFC„'\1','EXCEPT'�XREFƒEXIT_EXCEPT �IFC„'\0',''�BRA.L‚EXIT_EXCEPT�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_EXCEPT�ENDCŠENDCŠIFC„'\1','INTERRUPT'1�ORI.W‚#$0700,SRŠfreeze�(perturbation�detectors);�XREF.S�PERTURB_FLAGS2�TST.W‚PERTURB_FLAGS†if�(no�perturbation�detected)�IF…�THEN.Sˆ�RTE—then�return�to�user;�ENDI�XREFƒ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ƒPREEMPT �IFC„'\0',''�BRA.L‚PREEMPT�ENDC �IFNCƒ'\0',''�B\0.L‚PREEMPT�ENDCŠENDCŠIFC„'\1','DISPATCH'�XREFƒDISPATCH �IFC„'\0',''�BRA.L‚DISPATCH�ENDC �IFNCƒ'\0',''�B\0.L‚DISPATCH�ENDCŠENDCŠIFC„'\1','COPROC'�XREFƒEXIT_COPROC �IFC„'\0',''�BRA.L‚EXIT_COPROC�ENDC �IFNCƒ'\0',''�B\0.L‚EXIT_COPROC�ENDCŠENDCŠIFC„'\1','RTCDDIRN'�XREFƒERROR_01 �IFC„'\0',''�BRA.L‚ERROR_01�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_01�ENDCŠEND CŠIFC„'\1','RTCDPBLK'�XREFƒERROR_02 �IFC„'\0',''�BRA.L‚ERROR_02�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_02�ENDCŠENDCŠIFC„'\1','RTCDTASK'�XREFƒERROR_03 �IFC„'\0',''�BRA.L‚ERROR_03�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_03�ENDCŠENDCŠIFC„'\1','RTCDNTBL'�XREFƒERROR_04 �IFC„'\0',''�BRA.L‚ERROR_04�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_04�ENDCŠENDCŠIFC„'\1','RTCDTFUL'�XREFƒERROR_05 �IFC„'\0',''�BRA.L‚ERROR_05�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_05�ENDCŠENDCŠIFC„'\1','RTCDDPRQ'�XREFƒERROR_06 �IFC„'\0',''�BRA.L‚ERROR_06�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_06�ENDCŠENDCŠIFC„'\1','RTCDNFND'�XREFƒERROR_07 �IFC„'\0',''�BRA.L‚ERROR_07�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_07�ENDCŠENDCŠIFC„'\1','RTCDNMEM'�XREFƒERROR_08 �IFC„'\0',''�BRA.L‚ERROR_08�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_08�ENDCŠENDCŠIFC„'\1','RTCDALOW'�XREFƒERROR_09 �IFC„'\0',''�BRA.L‚ERROR_09�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_09�ENDCŠENDCŠIFC„'\1','RTCDSTAT'�XREFƒERROR_10 �IFC„'\0',''�BRA.L‚ERROR_10�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_10�ENDCŠENDCŠIFC„'\1','RTCDLGCF'�XREFƒERROR_11 �IFC„'\0',''�BRA.L‚ERROR_11�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_11�ENDCŠENDCŠIFC„'\1','RTCDADR1'�XREFƒERROR_12 �IFC„'\0',''�BRA.L‚ERROR_12�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_12�ENDCŠENDCŠIFC„'\1','RTCDADR2'�XREFƒERROR_13 �IFC„'\0',''�BRA.L‚ERROR_13�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_13�ENDCŠENDCŠIFC„'\1','RTCDENAB'�XREFƒERROR_14 �IFC„'\0',''�BRA.L‚ERROR_14�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_14�ENDCŠENDCŠIFC„'\1','RTCDOPT'�XREFƒERROR_15 �IFC„'\0',''�BRA.L‚ERROR_15�ENDC �IFNCƒ'\0',''�B\0.L‚ERROR_15�ENDCŠENDCŠIFC„'\1','RTCDPCNT'�XREFƒ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 ***************************NNNNNN‰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’A0 TRCA6…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 *************************NNNNNÆ ‰PAGE***************************** Beginning of &.TRAP15.MC ***************************** ŠLLENƒ120O*******************************************************************************;***„TRAP15.MC�-�Macro�to�simulate�the�TRAP�#15�instruction.***É***E***„FUNCTION:„Contains�the�TRAP15�macro�which�simulates�a�TRAP�#15…**;***‘call�to�a�firmware�debugger.‚This�could�be�used�when„**=***‘you�need�to�do�a�TRAP�#15�call�to�a�different�addressƒ***!***‘than�in�the�vector�table.Ÿ******É******‘NOTES:²******É***O******************************************************************************* E*ˆMacro�to�simulate�a�TRAP�#15�-�needs�arguments�for�TRAP�#15�routine6*ˆaddress,�and�address�of�DC.W�to�point�stacked�PC�at. TRAP15ƒMACRO ‰OPT…NOCL:*ˆ68010�and�68020�stack�an�extra�word�on�TRAP�instruction.‰IFNE„CHIPTYPE-680002‹MOVE.Wƒ#$BC,-(A7)‰Push�VOR�for�TRAP�#15�on�stack.‰ENDC$‰PEAƒ\2–68000�TRAP�#15�stacks�PC�and‰MOVE.W‚SR,-(A7)ŽSR.)‰MOVE.L‚\1,-(A7)ŽTRAP�#15�routine�address&‰RTS›Pull�the�TRAP�#15�address�off�the*¦stack�and�go�there.‰NOLIST‰OPT‚CL‰LIST‰ENDM**†GENERAL�EQUATES************************ Ending of &.TRAP15.MC ***********************NNNÏ( ‰PAGE************************** Beginning of &.TST.EQ ***************************%*~~~~~~~~~~~~~~~~~~~~~~~‚BAW�10/21/84+*‚ADDRTYP�USED�IN�CONDITIONAL�ASSEMBLIES�IN*‚SEGDEAL,�LOADMMU,�...* ADDR32ƒEQU‡0 ADDR24ƒEQU‡1ADDRTYP‚EQU‡ADDR32*~~~~~~~~~~~~~~~~~~~~~~~~~~~**„TASK�SEGMENT�TABLE*ˆCONTAINS‚PREAMBLE#*’MEMORY�MANAGMENT�LOAD�INFORMATION*’SEGMENT�ATTRIBUTE�BLOCK*)SEGMENTS‚EQU„8’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�EXISTING4TSTASN„DS.Wƒ1’ADDRESS�SPACE�NUMBER�FOR�TASK�(1�BYTE)+TSTMMU„DS.Wƒ8*SEGMENTS‰MMU�LOAD�INFORMATIONTSTMENDƒEQU„*’END�OF�TSTMMU-TSTATTRƒDS.WƒSEGMENTS‹SEGMENT�ATTRIBUTE�BLOCKTSTAENDƒEQU„*’END�OF�TSTATTR#TSTPMMUƒDS.Wƒ4’Root�pointer�to�PMMU%TSTLEN„EQU„*’LENGTH�OF�TASK�SEG�TABLE**‰TSTATTR�FIELDS*&TSTAATTR‚EQU„0’SEGMENT�ATTRIBUTE�FIELD+TSTCTL„EQU„1’CONTROL�INFORMATION�1=R/W,3=RO-TSTALENƒEQU„2’LENGTH�OF�EACH�ATTRIBUTES�ENTRY**‰TSTPMMU�FIELDS*-TSTSTATƒEQU„TSTASN�RARELY�USED�LABEL�=�TSTASN*.*‰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*TSTANAME‚EQU„0’SEGMENT�NAMETSTLB…EQU„4’LOGICAL�BEGINTSTLE…EQU„8’LOGICAL�ENDTSTPO…EQU„12‘PHYSICAL�OFFSET'TSTMLENƒEQU„16‘LENGTH�OF�EACH�MMU�ENTRY**‰MMU�CONTROL�REGISTER�VALUES*!RAMCTL„EQU„$01�READ/WRITE�SEGMENT ROMCTL„EQU„$03�READ�ONLY‚SEGMENT*********************** Ending of &.TST.EQ ***********************ØE‰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 ***********************NNNN Ná‰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?*ˆ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 ***************************NNN NNN' USM EQà  $UST EQ88!  $UTILITY MCAA&  $VME316 EQjj$  $QIO MCssBa  $‰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„17‘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<- B(6 ABTFORSKP‚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 ***********************NNNN 0"‰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>‚