IMD 1.17: 11/11/2014 14:40:57 82VKXBVERDOS C* VERSADOS/RMS68K OBJECT 4.4 SN=48634 (EQUATE FILES) 11 OF 22  BT11\82VKXBVERDOS 0420¿=-'.#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�ofE( *§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','RTCDADR1'�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 ***************************‰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 *************************éé éééc ‰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 ***********************él;‰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 *********************** éééééu‰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)\1IO SPB‚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�labels�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Ÿ<¨-°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 ***********************éééé À"‰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>‚