IMD 1.17: 11/11/2014 12:13:15 82VKXSVRDOS B* VERSADOS/RMS68K SRC/OBJ 4.4 (NOT BOOTABLE) SN=49367 29 OF 30  SR29q82VKXSVRDOS 0420§`-rrINET LOELrrLOADV2 LO’ rrNETV2B SY€rr$INET†IDNTƒ3,0InitializationandNTS***ˆCOPYRIGHTED1982,1983BYMOTOROLA,INC.*E* 06/13/83 The appropriate CHIPTYPE module, either M68000.CHIPTYPE.SA=*„orM68010.CHIPTYPE.SAmustbeincludedviaconcatenationon?*„the'=ASM'commandlinetosettheassemblermodeforM68000@*„orM68010andtosettheCHIPTYPEequateto68000or68010for#*„conditionassembliesthatfollow.A*„TwoversionsofINETmay,therefore,exist,onefortheMC68000=*„MPU,andtheotherfortheMC68010.‚The'.RO'filescreatedA*„shouldbenamedM68000.INET.ROandM68010.INET.ROrespectively.*E*„ThisadditionallowsconditionalcodesectionsbothdirectlywithinC*„thisfile,andalsowithinmacroswhichareINCLUDEd,togenerateC*„codeaccordingtothetargetprocessor.‚Specifically,theMC68010F*„doesnotallowthe"MOVESR,-(A7)"instructioninusermode.‚Rather,D*„the"MOVECCR,-(A7)"instructionmustbeused.‚Unfortunately,thisC*„latterinstructiondoesnotexistonthe68000,andsotheformerA*„mustbeassembled.‚Choosing"MOVESR,-(A7)"or"MOVECCR,-(A7)"C*„iscontrolledbytheCHIPTYPEsymbol,whosevalueiseither68000 *„or68010.*@*„TheNOPROCmacro(from0.INET.EQ)usesthismacrotodetermine=*„howtheconditioncodevaluesaretobesavedonthestack.*F*v******************************************************************** * INETEX Task*Ä*,*„InitializationTaskforNetworkServices˜**Ä*F*1.‚GetDataSegment'DATA'forstagingparameterspriortoinserting$*‡inSYSPAR.‚Clearthedatasegment.B*‡Ifthenetworkisalreadyup,issueamessageandthengoto15.**?*2.‚CreateSSCT(SystemServiceControlTask).‚Itwillconsist8*‡ofthesegmentSSCTandcontainthefollowingmodules:)*ŠNTS.SSCT.ROˆSystemservicecontroltask**ŠNTS.NWCT.ROˆNetworkservicecontroltask!*Š0.&.EDT.RO‰EditDevice/Filename0*Š0.&.COD.RO‰Characterclassificationcodetable%*ŠTEST.OUTTERMS.ROƒOutputtoterminal;*ŠNTS.NTSSERV.RO…Subroutine-Interfacetonetworkservices,(D0?8D@>H>PGXA`<h *†Entrypoint=SSCT.*@*3.‚CreateNWCT(Networkcontroltask).‚Italsoconsistsofthe#*‡segmentSSCT.‚Entrypoint=NWCT.**4.‚Releasethesegment'SSCT'*B*5.‚GetthestationIDviaGETSTAsubroutinecallandsavetheID *‡inXSTATIONof'DATA'segment.*G*6.‚CalculateSizeofNetworkNameTableandLogicalConnectionTable.;*‡Savecalculatedsizeindatasegmentassizeofdataarea *‡forSTRTSN.*C*7.‚Allocateandclear'.NTW'segmentaccordingtosizecalculated *‡instep4.*A*8.‚BuildNetworkNameTableandLogicalConnectTablein'.NTW'4*‡segmentviaNTBLDTBentrypointinNTBLDTBmodule.*A*9.‚ConfigureTRAP#1(code=-1)directivetodothefollowing:*;*‡A.Remove'.NTW'segmentand'SDLC'segmentfromINETEX's:*Œtasksegmenttable.‚Thesesegmentswillnotbereclaimed'*ŒbythesystemwhenINETEXterminates.*;*‡B.SavepointerstotablesinSYSPARarea.‚Thesepointers6*Œareintheformer'.NTW'segment.‚Thepointerssaved*Œare:*NNTBEG‚-NetworkNametable *NATBEG‚-NetworkAddresstable#*LCTBEG‚-LogicalConnectiontable&*DBUFSZ‚-Sizeofdataareainbuffer*8*‡C.SaveTCBaddressesofSSCTandNWCTinNATandLCT.*-* 10. Configure TRAP #1 directives -2 and -3.*:* 11. Inovke the TRAP #1 directive configured (code = -1).*1* 12. Disable the TRAP #1 directive just invoked.*3* 13. Start the SSCT (System Service Control Task).*,* 14. Start the NWCT (Network Control Task).** 15. Terminate.F*^***********************************************************************‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.TCB.EQ*‰INCLUDE9995.NTS.NNT.EQ*‰INCLUDE9995.NTS.NAT.EQ*‰INCLUDE9995.NTS.LCT.EQ!*‰INCLUDE9995.SDLCPRI.TEMPLTS.EQ*‰INCLUDE9995.NTS.TR1X.EQ*‰LIST*‰INCLUDE9995.INET.INET.EQŠNOLISTŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.NTS.NNT.EQŠINCLUDE9995.NTS.NAT.EQŠINCLUDE9995.NTS.LCT.EQ ŠINCLUDE9995.SDLCPRI.TEMPLTS.EQŠINCLUDE9995.NTS.TR1X.EQŠLISTŠINCLUDE9995.INET.INET.EQ ŠTTL„INET.SAŒNetworkInitializerŠPAGE ŠSECTION8B‰EQU„**ŠOPT„PCS)ŠXREFƒSYSTYPEŒSatisfiedinIDLCPsegINET,ŠXREFƒGETSTASatisfiedinGETSTA.ROsegINET,ŠXREFƒMAXLNAUŒSatisfiedinINETP.ROsegINET,ŠXREFƒMAXNAMEŒSatisfiedinINETP.ROsegINET,ŠXREFƒMAXCONNŒSatisfiedinINETP.ROsegINET+ŠXREFƒSZDBUFSatisfiedinIBUFQ.ROsegINET.ŠXREFƒBEGSDLCŒSatisfiedinBEGSDLC.ROsegSDLC*ŠXREFƒNWTESTAD‹SatisfiedinINET.NWTEST.RO#ŠXREFƒNWPSEGSatisfiedinSYSPAR.RO#ŠXREFƒNWTSEGSatisfiedinSYSPAR.RO,ŠXREFƒOUTTERMS‹SatisfiedinINET.OUTTERMS.RO(ŠXREFƒSSCTSatisfiedinSSCT.ROsegSSCT(ŠXREFƒNWCTSatisfiedinNWCT.ROsegSSCT.ŠXREFƒDLCBLDCB‹SatisfiedinISSDLC.ROsegINET/ŠXREFƒSBINFRBF‹SatisfiedinIBUFMGT.ROsegINET.ŠXREFƒNTBLDTBŒSatisfiedinNTBLDTB.ROsegINET-ŠXREFƒSTRTADRŒSatisfiedinSRSNEX.ROsegINET-ŠXREFƒDLNKRQDŒSatisfiedinSRSNV2.ROsegINET,ŠXREFƒNTSREQSatisfiedinNTSREQ.ROsegSDLC/ŠXREFƒTRASCANŒSatisfiedinTRANSSCN.ROsegSSCT+ŠXREFƒMAXSECSatisfiedinIDLCP.ROsegINET+ŠXREFƒNUMBUFSatisfiedinIBUFQ.ROsegINET+ŠXREFƒFQULWMSatisfiedinIBUFQ.ROsegINET*SSCSESSN‚DC.LƒSSCSESSNWCSESSN‚DC.LƒNWCSESS*-* Dynamically stuff certain Parameter Blocks. ININET„EQU„*&ŠERQ.GTSEGGETDPB(PC)†Getdatasegment#ŠBEQ.S‚ININ2ŽBranchifgoodsegmentŠERRMESG%GETDPB„DC.Lƒ0,0Task,Session(0=Self) ŠDC.Wƒ$2000,0ŒLogical=PhysicalŠDC.Lƒ'DATA',0‹SegmentnameŠDC.LƒDATAENDŒLength** Clear DATA Segment*CLEAR…CLR.L‚(A0)+ŽClear4bytesŠCMP.L‚A0,A1Žatendyet?ŠBGT„CLEARŽbranchinNOŠRTS*6ININ2…MOVE.LA0,A6ŽStartofDATAsegment(A6=basereg)#ŠLEA„STACK(A6),A7‡SetStackPointerŠMOVE.LA7,A0ŽClearabovestack'ŠLEA„DATAEND(A6),A1…EndofDATAsegmentŠBSR„CLEARŽClearentiresegmentŠPAGE*#* See if the network is already up..ŠMOVE.W#NWTEST,CDIRPB(A6)Directive#inP.B.(ŠLEA„NWTESTAD(PC),A0„Startofdirective.%ŠMOVE.LA0,CDIRPBE(A6)…PutitinP.B.)ŠERQ.CDIRCDIRPB(A6)‡Configuredirective. ŠBEQ.S‚ININ2.5ŠERRMESG*+* Invoke directive that we just configured.ININ2.5ƒMOVE.L#NWTEST,D0ŠTRAPƒ#1ŠIFEQƒCHIPTYPE-680006ŒMOVE.WSR,-(A7)‹Savestatusregisterforlatercheck.ŠENDCŠIFEQƒCHIPTYPE-680107ŒMOVE.WCCR,-(A7)ŠSavestatusregisterforlatercheck.ŠENDC-* Deconfigure directive that we just invoked.7ŠBSETƒ#5,CDIRPBO+1(A6)ƒSetoptiontodisabledirective.ŠERQ.CDIRCDIRPB(A6)*<ŠMOVE.W(A7)+,CCRŠResetconditioncodestodirectiveresults,ŠBEQ.S‚NETNOTUP‹Branchifnetworkisnotup.*----v2ŠNOPROC.ININ2.7LINKONLYƒDon'tprocessif'INETV2'5ŠMSGOUT ŠBRA„DONE*----^ININ2.7ƒERRMESG*NETNOTUP‚EQU„*9ŠBCLRƒ#5,CDIRPBO+1(A6)ƒClearoptiontodisabledirective.ŠPAGE*----v0ŠNOPROC.ININ4LINKONLY…Don'tprocessif'INETV2'*(* Create the System Service Control Task*8ŠERQ.RCVSARCVSAPB(PC)…GetsegmentaddrforSSCTsegment"ŠBEQ.S‚ININ3ŽBranchifgoodreturnŠERRMESG8RCVSAPBƒDC.Lƒ0,0RCVSAparamblock-task,session(self)2ŠDC.Wƒ$2000,0Œoption-returnstartaddrinA0,attrŠDC.LƒSSCTASKŒSegmentname*-ININ3…MOVE.LA0,A1ŽSavesegmentstartaddress1ŠERQ.DCLSHRDCLSHPB(PC)„Declaresegmentshareable#ŠBEQ.S‚ININ3ABranchifgoodreturnŠERRMESG*9ININ3A„MOVE.L#SSCTASK,CRTCBPB(A6)TasknameofSSCTtask3ŠMOVE.LSSCSESSN,CRTCBPB+4(A6)SessionofSSCTtaskDŠMOVE.W#$B800,CRTCBPBA(A6)Attr-systtask,memdump,positionindepdt)ŠMOVE.W#$7F7F,CRTCBPBP(A6)Taskpriority%ŠMOVE.LA1,CRTCBPBE(A6)„Entryaddress0ŠERQ.CRTCBCRTCBPB(A6)…CreateTaskControlBlock#ŠBEQ.S‚ININ3BBranchifgoodreturnŠERRMESG*#* Share procedure segment with SSCT*8ININ3B„STACKPBSHRSG1PB,16‡Move'Shareseg'P.B.toROM'ŠMOVE.LSSCSESSN(PC),A20ŠMOVE.LA2,4(A0)‹Plugincorrectsessionnumber.'ŠERQ.SHRSEG,ŽGivethesegmenttoSSCT.ŠUSTACKPB16Restorethestack#ŠBEQ.S‚ININ3CBranchifgoodreturnŠERRMESG** Create Network Control Task**9ININ3C„MOVE.L#NWCTASK,CRTCBPB(A6)TasknameofNWCTtask3ŠMOVE.LNWCSESSN,CRTCBPB+4(A6)SessionofNWCTtask#ŠADD.L‚#NWCT-SSCT,A1†AddNWCTentry%ŠMOVE.LA1,CRTCBPBE(A6)„Entryaddress0ŠERQ.CRTCBCRTCBPB(A6)…CreateTaskControlBlock#ŠBEQ.S‚ININ3FBranchifgoodreturnŠERRMESG*#* Share procedure segment with NWCT*7ININ3F„STACKPBSHRSG2PB,16‡Move'Shareseg'P.B.toROMŠMOVE.LNWCSESSN(PC),A20ŠMOVE.LA2,4(A0)‹Plugincorrectsessionnumber.'ŠERQ.SHRSEG,ŽGivethesegmenttoNWCT.ŠUSTACKPB16Restorestack.#ŠBEQ.S‚ININ3GBranchifgoodreturnŠERRMESG*;ININ3G„ERQ.DESEGDESEGPB(PC)…ININETnolongerneedssegment"ŠBEQ.S‚ININ4ŽBranchifgoodreturnŠERRMESG*#DCLSHPBƒDC.Lƒ0,0DCLSHRparamblock%ŠDC.Wƒ$8000Žoption(attributesgiven)/ŠDC.Wƒ$6000Žattr(readonly,locallyshareable)ŠDC.LƒSSCTASKŒSegmentname*BSHRSG1PB‚DC.LƒSSCTASK,0ŠSHRSEGparamblock-task,sessisdynamic)ŠDC.Wƒ$2000Žoption(logicaladdr=physical)$ŠDC.Wƒ$2000Žattr(locallyshareable)ŠDC.LƒSSCTASKŒSegmentname*BSHRSG2PB‚DC.LƒNWCTASK,0ŠSHRSEGparamblock-task,sessisdynamic)ŠDC.Wƒ$2000Žoption(logicaladdr=physical)$ŠDC.Wƒ$2000Žattr(locallyshareable)ŠDC.LƒSSCTASKŒSegmentname*1DESEGPBƒDC.Lƒ0,0DESEGparamblock-taskisself ŠDC.Wƒ0,0optionsandattributesŠDC.LƒSSCTASKŒSegmentnameŠPAGE*----^ ININ4…EQU„**7* Get station ID and save in XSTATION of 'DATA' segment ŠBSR„GETSTA2ŠBEQ.S‚ININ6ŽBranchifstationsuccessfullygottenŠERRMESGININ6…MOVE.BD1,XSTATION(A6)*----v3ŠNOPROC.ININ6.5LINKMAINƒDonotprocessif'INETEX'*@* Calculate Size of Primary and Secondary Station Control Blocks*7ŠMOVE.L#SDPLNG+255,D0…PrimaryStationControlBlksizeŠCLR.B‚D0‘Even#pages6ŠMOVE.LD0,XSDPRSZ(A6)…SavePrimaryControlBlocksize5ŠMOVE.L#SDSLNG,D1‰SecondaryStationControlBlksize+ŠMULUƒMAXSEC(PC),D1†*numberofsecondaries'ŠBEQ.S‚ININ6.5ŒBranchifNOsecondaries<ŠMOVE.LD0,XSDSCBG(A6)…OffsettostartofSecControlBlocks/ŠADD.L‚#256,D1ŒMakesureendisonpageboundryŠCLR.B‚D1‘Even#pages 8ŠMOVE.LD1,XSDSCSZ(A6)…SaveSecondaryControlBlockSize&ŠADD.L‚D1,D0ŽAddtototalsegmentsize*----^ ININ6.5ƒEQU„**----v0ŠNOPROC.ININ8LINKONLY…Don'tprocessif'INETV2'C* Calculate Size of Network Name Table and Logical Connection Table*,ŠMOVE.LD0,XNNTBG(A6)†OffsettostartofNNT*ŠMOVE.WMAXNAME(PC),D1…Max#NetworkNames1ŠMULUƒ#NNTESIZ,D1ˆ*NetworkNameTableentrysize0ŠADD.L‚#NNTENTRY+255,D1ƒ+NNTHeadersize+pageŠCLR.B‚D1‘Even#‚pages#ŠMOVE.LD1,XNNTSZ(A6)†SaveNNTsize&ŠADD.L‚D1,D0ŽAddtototalsegmentsize*,ŠMOVE.LD0,XNATBG(A6)†OffsettostartofNAT(ŠMOVE.WMAXLNAU(PC),D1…Max#localNAU's4ŠMULUƒ#NATESIZ,D1ˆ*NetworkAddressTableentrysize0ŠADD.L‚#NATENTRY+255,D1ƒ+NATHeadersize+pageŠCLR.B‚D1‘Even#‚pages#ŠMOVE.LD1,XNATSZ(A6)†SaveNATsize&ŠADD.L‚D1,D0ŽAddtototalsegmentsize*,ŠMOVE.LD0,XLCTBG(A6)†OffsettostartofLCT0ŠMOVE.WMAXCONN(PC),D1…Max#LogicalConnections"ŠMULUƒ#LCTESIZ,D1ˆ*LCTentrysize+ŠADD.L‚#LCTENTRY+255,D1ƒ+LCTHeader+pageŠCLR.B‚D1‘Even#pages#ŠMOVE.LD1,XLCTSZ(A6)†SaveLCTsize&ŠADD.L‚D1,D0ŽAddtototalsegmentsize*----^ ININ8…EQU„*ŠPAGE*"* Calculate free buffer queue size**----v2ŠNOPROC.ININ10LINKMAIN„Donotprocessif'INETEX'ŠMOVE.LD0,XFBQBG(A6)*----^ ININ10„EQU„*1ŠMOVE.L#1,D1ŽMakesuredataareaiseven#words5ŠADD.W‚SZDBUF(PC),D1†SizeofdataareaineachbufferŠBCLRƒ#0,D1ŽEvenwordboundry8ŠMOVE.WD1,XFBQDSZ(A6)…SavesizeofdataareaforSTRTSN**----v2ŠNOPROC.ININ11LINKMAIN„Donotprocessif'INETEX'8ŠADD.L‚#SDDLNG,D1‰SizeofHeaderattachedtoeachbuffer'ŠMULUƒNUMBUF(PC),D1†*Numberofbuffers3ŠADD.L‚#255,D1ŒMakesuretotalsizeiseven#pagesŠCLR.B‚D1‘Even#pages,ŠMOVE.LD1,XFBQSZ(A6)†SaveBufferQueuesize&ŠADD.L‚D1,D0ŽAddtototalsegmentsize0ŠMOVE.WNUMBUF(PC),XFQBCNT(A6)Numberofbuffers7ŠMOVE.WFQULWM(PC),XFQLWM(A6)Saveminimumbuffercount*----^ ININ11„EQU„*** Allocate .NTW Segment*>ŠMOVE.W#$2000,GETSPBO(A6)Option(Logicaladdr=Physicaladdr)(ŠMOVE.L#'.NTW',GETSPBN(A6)Segmentname%ŠMOVE.LD0,GETSPBL(A6)…Segmentlength&ŠERQ.GTSEGGETSPB(A6)†Get.NTWsegment$ŠBEQ.S‚ININ12BranchifgoodsegmentŠERRMESG*1* Add Segment Address to each Begin Block address*,ININ12„MOVE.LA0,A5ŽStartingAddressof.NTW&ŠMOVE.LA0,D0ŽStartingAddressof.NTW*----v1ŠNOPROC.ININ12.3LINKONLY‚Don'tprocessifINETV2'ŠADD.L‚D0,XNNTBG(A6)†NetworkNameTable*ŠADD.L‚D0,XNATBG(A6)†NetworkAddressTable-ŠADD.L‚D0,XLCTBG(A6)†LogicalConnectionTable*----^ININ12.3‚EQU„**----v4ŠNOPROC.ININ12.5LINKMAIN‚Donotprocessif'INETEX'3ŠADD.L‚D0,XSDPRBG(A6)…PrimaryStationControlBlock5ŠADD.L‚D0,XSDSCBG(A6)…SecondaryStationControlBlock&ŠADD.L‚D0,XFBQBG(A6)†FreeBufferQueueININ12.5‚EQU„**----^** Clear .NTW Segment*#ŠMOVE.LGETSPBL(A6),A1…SegmentsizeŠADD.L‚A0,A1Ž+Start=endŠBSR„CLEARŽClearsegment8ŠERQ.RCVSARCVSSPB(PC)…GetsegmentaddrforSDLCsegment#ŠBEQ.S‚ININ18BranchifgoodreturnŠERRMESG8RCVSSPBƒDC.Lƒ0,0RCVSAparamblock-task,session(self)2ŠDC.Wƒ$2000,0Œoption-returnstartaddrinA0,attrŠDC.Lƒ'SDLC'Segmentname*3ININ18„MOVE.LA0,XBEGSDLC(A6)„Savestartofsegment*----v4ŠNOPROC.ININ18.5LINKMAIN‚Donotprocessif'INETEX'*,* Build Primary and Secondary Control Blocks*ŠBSR„DLCBLDCB‹Gobuildthem** Build Free Buffer Queue*5ŠMOVE.LXFBQBG(A6),A0†AddressofStartofBufferPoolŠMOVE.LA0,A1Ž*ŠADD.L‚XFBQSZ(A6),A1†**ŠSUB.L‚#1,A1ŽAddressofEndofBufferPoolŠBSR.L‚SBINFRBF‹*ŠMOVE.WD1,XFQBCNT(A6)…**----^ININ18.5‚EQU„**----v1ŠNOPROC.ININ19LINKONLY„Don'tprocessif'INETV2'*4* Build Network Name Table and Logical Connect Table*ŠBSR„NTBLDTBŒGobuildthem*----^ ININ19„EQU„*ŠPAGE*'* Configure New TRAP #1 Exec Directives**ˆDirectiveƒFunction<*ˆ---------ƒ------------------------------------------------8*‰NWINET…NetworkStartup--Willsavepointerstotables 0*”andbufferqueue,deletethe.NTWsegmentfrom1*”ININET'ssegmenttable,andcallSDLC'sStartup *”routine.**3ŠMOVE.L#SSCTASK,XSSCTSK(A6)TasknameofSSCTtask1ŠMOVE.LSSCSESSN,XSSCSES(A6)SessionofSSCTtask3ŠMOVE.L#NWCTASK,XNWCTSK(A6)TasknameofNWCTtask1ŠMOVE.LNWCSESSN,XNWCSES(A6)SessionofNWCTtask*9ŠMOVE.W#NWINET,CDIRPB(A6)Putdirective#inparamblock+ŠLEA„STRTADR(PC),A0…DirectiveENTRYaddress,ŠMOVE.LA0,CDIRPBE(A6)…Putitinparamblock(ŠERQ.CDIRCDIRPB(A6)‡Configuredirective ŠBEQ.S‚ININ28ŠERRMESG ININ28„EQU„**----v=ŠNOPROC.ININ29NOLINK,LINKALL,LINKMAINProcessonlyifINETV2*#* Execute Network Startup directive*ŠMOVE.L#NWINET,D0‰Directive#ŠTRAPƒ#1‘Godothestartup%ŠBEQ.S‚ININ28.5‹BranchifgoodreturnŠERRMESG*6* Disable the Startup directive -- won't need it again*>ININ28.5‚BSETƒ#5,CDIRPBO+1(A6)ƒSetoptiontodisabledirective9ŠMOVE.W#NWINET,CDIRPB(A6)Putdirective#inparamblock&ŠERQ.CDIRCDIRPB(A6)‡DisabledirectiveŠPAGE?***************************************************************:* This directive calls a routine that runs in a continuous;* loop looking at V2RQHD (VM02 Request Queue). When an item=* appears in the queue, it pulls it off, examines the command** and calls the appropriate SCLC function.**‰Command“Function*‹NTWCACKR($A1)ŒSBUSRACK*‹NTWFLUSH($A2)ŒSBSDLCFL*‹QUSBRQƒ($01)ŒSDLCQUSB*5*****************************************************/DLKREQ„EQU„-1‘Userconfigureddirectivenumber.** Configure a directive.*7ŠMOVE.W#DLKREQ,CDIRPB(A6)PutdirectivenumberinP.B.,ŠLEA„DLNKRQD(PC),A0…Directiveentryaddress.1ŠMOVE.LA0,CDIRPBE(A6)…Putitinparameterblock.2ŠCLR.W‚CDIRPBO(A6)ˆSetoptiontodisabledirective7ŠLEA„CDIRPB(A6),A0†Configuredirectiveparameterblock.ŠMOVE.L#CDIR,D0ŠTRAPƒ#1‘Configuredirective ŠBEQ.S‚OK1ŠERRMESG** Invoke the directive.OK1‡MOVE.L#DLKREQ,D0ŠTRAPƒ#1*----^ ININ29„EQU„**----v/ŠNOPROC.DONELINKONLY†Don'tprocessif'INETV2'**ˆDirectiveƒFunction<*ˆ---------ƒ------------------------------------------------)*‰NWRQST…NetworkServicesRequestHandler.*”RespondstoTRAP#1'sfromapplicationtasks**9ŠMOVE.W#NWRQST,CDIRPB(A6)Putdirective#inparamblock-ŠMOVE.LXBEGSDLC(A6),A0„StartofSDLCsegment1ŠADD.L‚#NTSREQ-BEGSDLC,A0DirectiveENTRYaddress,ŠMOVE.LA0,CDIRPBE(A6)…Putitinparamblock2ŠBSETƒ#4,CDIRPBO+1(A6)ƒSetoption-usebyanybody(ŠERQ.CDIRCDIRPB(A6)‡Configuredirective)ŠBEQ.S‚ININ32BranchifsuccessfulreturnŠERRMESG**ˆDirectiveƒFunction<*ˆ---------ƒ------------------------------------------------=*‰NWTSCN…ScanUSERqueuetomovedatareceivedtodestination$*”Check'wait-for-buffers'Q-retry**?ININ32„MOVE.W#NWTSCN,CDIRPB(A6)Putdirective#inparamblock-ŠMOVE.LXBEGSDLC(A6),A0„StartofSDLCsegment2ŠADD.L‚#TRASCAN-BEGSDLC,A0Directiveentryaddress,ŠMOVE.LA0,CDIRPBE(A6)…Putitinparamblock9ŠBCLRƒ#4,CDIRPBO+1(A6)ƒSetoption-usebythissessonly(ŠERQ.CDIRCDIRPB(A6)‡Configuredirective)ŠBEQ.S‚ININ36BranchifsuccessfulreturnŠERRMESG*#*ˆExecuteNetworkStartupdirective*$ININ36„MOVE.L#NWINET,D0‰Directive#ŠTRAPƒ#1‘Godothestartup#ŠBEQ.S‚ININ40BranchifgoodreturnŠERRMESG*6* Disable the Startup directive -- won't need it again**ofVM02orVMES10.‚ThedifferentassemblesarecontrolledbyB* concatenating either VM02.STRSDLC.SA or VMES10.STRSDLC.SA to the)* assembly of this module (&.STRSDLC.SA).** Two variables areL*usedtocontrolconditionallyassembledsectionsherein.‚ThesymbolTYPEBDK*determineswhetherthetargetsystemisaVM02oraVME/10.‚TYPEBDmaybeI*either02(forVM02),or10(forVME/10).‚Additionally,sinceoneitherN* board, the specific vector number is still a function of hardware strapping,I* the second variable, VEC7201, designates (for the VM02) where in memoryJ* the vector number exists, or (for the VME/10) what the vector number is.8* This variable is XREF'ed and satisfied at sysgen time.*^*‰IFNE†TYPEBD-02‹IFNE†TYPEBD-10‚SYSFAILƒ=0ŒO/SnotinterruptedwhenSYSFAILassertedonbus. ‚CACHEF„=0 ‚ROMSADDR‚=0 ‚ROMEADDR‚=0)‚LINKLS„="&.SYSGEN.TF"Linklistingfile ‚SUBSˆ9998.VM02.INITIO1.AG2‚ASM‰VM02.INITIO1.AG,&.INITIO1.RO,SYSGEN.TF;RMZ=70‚=COPY‡SYSGEN.TF,SYSASM.LS;A ‚SUBSˆ&.INITIO1.LG‚LINKˆ&.INITIO1.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚SUBSˆ9998.&.INITDAT.AG,‚ASM‰&.INITDAT.AG,&.INITDAT.RO,&.SYSGEN.TF;R ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚SUBSˆNETVM02.INT.LG‚LINKˆNETVM02.INT.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚END‰INTV2 ‚MSG‰@‚MSG‰***********************************************************‚MSG‰*ŠENDƒOF‚SYSGEN—*@‚MSG‰***********************************************************‚MSG‰*¹*3‚MSG‰*„WENOWHAVEASYSTEMFILECALLEDƒNETV2B.SY‰*‚MSG‰*¹*@‚MSG‰*********************************************************** éé‚*********************‚*FILE=LINKALL.CD‚*‚*********************‚SYSTYPE‚="LINKALL"‚*éééééé骂*********************‚*FILE=LINKMAIN.CD*‚*********************‚SYSTYPE‚="LINKMAIN"‚*éééé éé鳂*********************‚*FILE=LINKONLY.CD*‚*********************‚SYSTYPE‚="LINKONLY"‚*éééééé鼂******************‚*FILENETEXG.CD*‚******************,‚V2OFF…=$FC0000†VM02Memoryoffset(onbus)+‚V2SYSP„=$1500ˆVM02SYSPAR.AGareaaddress‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚*‚*‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*:‚MSG‰*†LinkLOADV2Task---LOADV2.LO‚(BootsVM02board)*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.LOADV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚ConfigurationParameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚* ;‚*‹TheparameterMAXSECshouldbeequaltotwicethenumber'‚*‹ofHDS400sthatyouwantconfigured.‚*+‚MAXSEC„=8ŒMaximum#ofsecondarystations#‚DLBR†=57600ˆDataLink'sBaudRate)‚FSSTN…=1ŒFirstSecondaryStationNumber&‚SSINC…=1ŒSecondaryStationINCrement!‚TXRTRY„=20‹TransmitRetryCount‚RCRTRY„=4ŒReceiveRetryCount,‚MXOBF…=7ŒMaximumNumberofOutboundFrames,‚RCTOV…=8ŒReceiveTimeoutValue(1=50Msec)$‚RTRDLY„=15‹RetryDelay(1=50Msec)%‚TXDLY…=0ŒTransmitDelay(1=50Msec)/‚PFDLY…=200ŠPollPoweredOffDelay(1=50Msec),‚PNDLY…=1ŒPollPoweredOnDelay(1=50Msec)‚TXPDS…=2Œ#ofTransmitPads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*2‚MSG‰*†NetworkServicesConfigurationParametersŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰&‚MAXLNAUƒ=10‹Maximum#oflocalNAU's=‚MAXNAMEƒ=30‹Maximum#ofNetworkNames(ifprimary-maxin ‚*˜network).‚MAXCONNƒ=20‹Maximum#ofLogicalConnections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰Å>Î@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†BufferQueueConfigurationParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚NUMBUF„=50‹#Buffersinqueue4‚SZDBUF„=256ŠSizeofdatablockcontainedinbuffer,‚FQULWM„=7ŒFreeQueueUser'sLowWaterMark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*-‚MSG‰*†LinkInitializationTask---INET.LO*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.INET.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚END‰ééééé‚*********************‚*FILE=NOLINK.CDƒ*‚*********************‚SYSTYPE‚="NOLINK"‚*é ééééééÖ‚******************‚*FILE=NOLINK.CD*‚******************,‚V2OFF…=$FC0000†VM02Memoryoffset(onbus)+‚V2SYSP„=$1500ˆVM02SYSPAR.AGareaaddress‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;AB‚MSG‰*************************************************************‚MSG‰*»*&‚MSG‰*†SDLC‚ConfigurationParameters—*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰+‚MAXSEC„=3ŒMaximum#ofsecondarystations#‚DLBR†=57600ˆDataLink'sBaudRate)‚FSSTN…=1ŒFirstSecondaryStationNumber&‚SSINC…=1ŒSecondaryStationINCrement ‚TXRTRY„=8ŒTransmitRetryCount‚RCRTRY„=4ŒReceiveRetryCount,‚MXOBF…=7ŒMaximumNumberofOutboundFrames,‚RCTOV…=4ŒReceiveTimeoutValue(1=50Msec)$‚RTRDLY„=15‹RetryDelay(1=50Msec)%‚TXDLY…=0ŒTransmitDelay(1=50Msec)/‚PFDLY…=200ŠPollPoweredOffDelay(1=50Msec),‚PNDLY…=1ŒPollPoweredOnDelay(1=50Msec)‚TXPDS…=2Œ#ofTransmitPads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰B‚MSG‰*************************************************************‚MSG‰*»*2‚MSG‰*†NetworkServicesConfigurationParametersŒ*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰&‚MAXLNAUƒ=20‹Maximum#oflocalNAU's=‚MAXNAMEƒ=30‹Maximum#ofNetworkNames(ifprimary-maxin ‚*˜network).‚MAXCONNƒ=20‹Maximum#ofLogicalConnections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰B‚MSG‰*************************************************************‚MSG‰*»*.‚MSG‰*†BufferQueueConfigurationParameters*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰‚NUMBUF„=50‹#Buffersinqueue4‚SZDBUF„=256ŠSizeofdatablockcontainedinbuffer,‚FQULWM„=7ŒFreeQueueUser'sLowWaterMark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰ß:è B‚MSG‰*************************************************************‚MSG‰*»*-‚MSG‰*†LinkInitializationTask---INET.LO‘*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰?‚V2G1IR1ƒ=$1FFE2‡*Group2,IRQ1VectorNumberAddress(Word)?‚V2G1IR2ƒ=$1FFE4‡*Group2,IRQ2VectorNumberAddress(Word)?‚V2G1IR3ƒ=$1FFE6‡*Group2,IRQ3VectorNumberAddress(Word)?‚V2G1IR4ƒ=$1FFE8‡*Group2,IRQ4VectorNumberAddress(Word)?‚V2G1IR5ƒ=$1FFEA‡*Group2,IRQ5VectorNumberAddress(Word)?‚V2G1IR6ƒ=$1FFEC‡*Group2,IRQ6VectorNumberAddress(Word)‚SUBSˆVM02.VEC7201.AG0‚ASM‰VM02.VEC7201.AG,VM02.VEC7201.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚LINKˆGEN.INETNOL.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚ENDéééé‚*********************‚*FILE=PRIMARY.CD‚*‚*********************‚STATION‚="PRIMARY"‚*ééééééé ð‚********************‚*FILE=SPAR1300.CD*‚********************‚*OldfilenamewasSYSPARSE‚*ƒRunsonaVM02systemwithNETBUG(firmwaretohandledownloading)@‚***************************************************************8‚*SYSPARparameters-VM02systemactingasSDLClink‰*@‚***************************************************************3‚RMS0LO„=$1700ˆRMSbootheader(Seg0lowaddress)‚STACK…=$1500L‚STARTRMS‚=\RMS0LO+$100‚BeginningofRMScode-(Onesectoraboveboothdr)‚=DELˆ&.SYSPAR.RO(‚=COPY‡9999.C13O15.SYSPAR.RO,&.SYSPAR.RO éééééù‚*******************‚*FILE=SPAR400.CD*‚*******************‚*OldfilenamewasSYSPAR#‚*ƒRunsonanormalEXORmacssystem@‚***************************************************************(‚*SYSPARparameters-EXORmacssystem™*@‚***************************************************************‚=DELˆ&.SYSPAR.RO&‚=COPY‡9999.C4O9.SYSPAR.RO,&.SYSPAR.RO éééé éé ‚*******************‚*FILE=SPAR800.CD*‚*******************‚*OldfilenamewasSYSPARV4‚*ƒRunsonaVM02systemwithouttheNETBUGfirmware@‚***************************************************************>‚*SYSPARparameters-VM02systemactingasphoneyEXORmacsƒ*@‚***************************************************************‚=DELˆ&.SYSPAR.RO&‚=COPY‡9999.C8OC.SYSPAR.RO,&.SYSPAR.RO éééééé  =OPT K,-N=/*********************=/*SYSGEN.CF‰*ƒMnemonic=\1=/*********************=USE :.&=OPT N=OPT O$=/* Options used in this chain file:?=/*‡J-InhibitSBARGechoingofcommandsreadfromchainfile.3=/*‡K-Inhibittranslationoflowertouppercase.,=/*‡N-Inhibitechoofchainfilecommands.A=/*‡O-Overrideschainfileabortwhenutilityerrorterminates.=/*=/*==/*Insuretwoarguments.‚Secondargumentdefaultsto'#NULL'=/*=/RX=\0 =/IF RX = 0 ƒ=ARGNOARGƒ=/RX=\0=/ENDIF =/IF RX = 1ƒ=ARG\1,#NULLƒ=/RX=\0=/ENDIF =/IF RX > 2ƒ=ARG‚NOARG,#NULL=/ENDIF=/*$=/* See if we have a valid mnemonic.2=/*ƒIfnotavalidmnemonic,putouthelpmessage.=/RX=0=/IFEQ "HDS4PRI"\1ƒ=/RX=1=/ENDIF"=/IFEQ "EXOR/SINGLE/UTIL/NOLINK"\1ƒ=/RX=1=/ENDIF"=/IFEQ "VM02/SINGLE/UTIL/NOLINK"\1ƒ=/RX=1=/ENDIF=/IFEQ "EXOR/MULTI/UTIL/HDS"\1ƒ=/RX=1=/ENDIF=/IFEQ "EXOR/MULTI/LINK/HDS"\1ƒ=/RX=1=/ENDIF=/* =/IF RX=0ƒ=OPT-Nƒ=/*‘*  **HELPMESSAGE***ƒ=/*7ƒ=/*Noargumentoraninvalidargumentwasspecified-=ƒ=/*ƒThischainfilemustberestartedwithavalidargument.3ƒ=/*ƒAdescriptionofthecallingsequencefollows.<ƒ=/*ƒTypetocontinueafteraframehasbeendisplayed.ƒ=/*ƒ=/*Callingsequence:ƒ=/*ƒ=SYSGEN.CFarg1,arg2ƒ=/*ƒ=/*†arg1†=Mnemonicƒ=/*†arg2†=Outputfile/deviceDƒ=/*ƒArg1isoptional.‚Ifnotspecified,ahelpmessagewillappear.Aƒ=/*ƒArg2willtypicallybe'#NULL'or'#PR'-defaultsto#NULL.ƒ=/&ƒ=/*1ƒ=/*SYSGEN.CFwillperformthesysgenassociated!ƒ=/*„withthespecifiedmnemonic.ƒ=/*2ƒ=/*Themnemonic(arg1)isofthefollowingform:4ƒ=/*„system/processormode/outputtype/qualificationƒ=/*'ƒ=/*Example:‚arg1=EXOR/MULTI/UTIL/HDSƒ=/*5ƒ=/*Thiswouldgenjusttheutilities(LOADV2.LOand)ƒ=/*INET.LOtorunonanEXORmacssystem/ƒ=/*inthemulti-processormode(VM02boardin5ƒ=/*thesamechassistoperformlink).‚ThequalifierN.%3->5C=6ƒ=/*oftestwoulddistinguishitasaparticulartest6ƒ=/*configuration.ThesystemwouldbeforanHDS400.ƒ=/&ƒ=/*ƒ=/*LegalMnemonics:ƒ=/*†"HDS4PRI"7ƒ=/*ŠPreparetheSDLCHDS-400primarystationsoftware.:ƒ=/*ŠFouruser-initiatedstepsarerequired.‚One,runthis;ƒ=/*Šchainfilewith"HDS4PRI"option.‚Itwillgeneratethe<ƒ=/*ŠproperSDLCobjectfilefortheHDS-400primarystation3ƒ=/*Šenvironment.‚Two,runtheSYSGEN.CFchainfile/ƒ=/*ŠwithoptionEXOR/MULTI/LINK/HDSwhichwill;ƒ=/*ŠcreatetheVM02loadimagefileNETV2B.SY.‚Three,copy<ƒ=/*Šthisloadimagefiletouser0,NOCATALOGNAME,ofthe=ƒ=/*ŠHDS-400hostingsystem.‚Four,re-IPLtheHDS-400hosting=ƒ=/*Šsystem(loadsthenewNETV2B.SYmoduleintotheVM02andƒ=/*Šbeginsexecution).ƒ=/*Stationtypeˆ=primaryƒ=/*MPUtypeŒ=68000ƒ=/*Residentboardtype=VM02ƒ=/&ƒ=/*†"EXOR/SINGLE/UTIL/NOLINK"<ƒ=/*ŠRunsinanEXORmacssystemwithnoSDLClink.Taskscan=ƒ=/*Šcommunicatewitheachothervianetworkservicesrequest;ƒ=/*Šhowever.‚Thisoptionwillproducethefollowingfiles:1ƒ=/*ŒINET.LO‡-Initializationutilitytobringupƒ=/*žnetworkservices.ƒ=/&ƒ=/*†"VM02/SINGLE/UTIL/NOLINK"8ƒ=/*ŠRunsinanVM02systemwithnoSDLClink.Taskscan=ƒ=/*Šcommunicatewitheachothervianetworkservicesrequest;ƒ=/*Šhowever.‚Thisoptionwillproducethefollowingfiles:1ƒ=/*ŒINET.LO‡-Initializationutilitytobringupƒ=/*žnetworkservices.ƒ=/*ƒ=/&ƒ=/*†"EXOR/MULTI/UTIL/HDS"3ƒ=/*ŠRunsonanEXORmacssystemasprimarystation.;ƒ=/*ŠThesystemisassumedtohaveaVM02boardinthesame>ƒ=/*ŠchassistoperformtheSDLClink.‚Thesysgenwouldbefor>ƒ=/*ŠanHDS400.‚Thisoptionwouldproducethefollowingfiles:<ƒ=/*ŒLOADV2.LOƒ-LoadstheVM02withtheSDLClinksoftware.;ƒ=/*ŒINET.LO…-InitializesnetworkservicesontheEXORmacs ƒ=/*œboard.>ƒ=/*ŠNotethattheparameter'MAXSEC'thatappearsinthefile9ƒ=/*ŠNETEXG.CDshouldbesetequaltotwicethenumberof-ƒ=/*ŠHDS400systemsthatyouwantconfigured.=ƒ=/*ŠTheEXORmacssysgencommandfile9998.EXORMACS.SYSCMD.CD=ƒ=/*Šshouldhave'NOTNT'setequalto5inordertoconfigureƒ=/*ŠforHDS400.ƒ=/&ƒ=/*†"EXOR/MULTI/LINK/HDS">ƒ=/*ŠRunsonanEXORmacssystemontheon-boardVM02.‚Contains?ƒ=/*Šthe‚SDLClinksoftware.‚ThesysgenwouldbeforanHDS400.3ƒ=/*ŠThisoptionwouldproducethefollowingfiles.5ƒ=/*ŒNETV2B.SY‚-Bootfilefortheon-boardVM02thatƒ=/*handlestheSDLClink.>ƒ=/*ŠNotethattheparameter'MAXSEC'thatappearsinthefile9ƒ=/*ŠEMLINK.CDshouldbesetequaltotwicethenumberof-ƒ=/*ŠHDS400systemsthatyouwantconfigured.=ƒ=/*ŠTheEXORmacssysgencommandfile9998.EXORMACS.SYSCMD.CD=ƒ=/*Šshouldhave'NOTNT'setequ  alto5inordertoconfigureƒ=/*ŠforHDS400.ƒ=/&ƒ=NOARGƒ=@END=/ENDIF=/*F=/* There are three possible flavors of SYSPAR depending on the systemC=/*ƒwearerunningon.‚AnappropriateversionofaSPARxxxx.CDfileC=/*ƒismergedintothesysgencommandfilepriortothesysgen.‚TheE=/*ƒfilenamedependsonthelocationofCRASHSAVinthesystemweare1=/*ƒperformingthesysgenfor.‚Thefilenamesare:=/*<=/*Œ&.SPAR400.CDƒ-RunsandanEXORmacsboardinanEXORmacs=/*›chassis.‚CRASHSAVat$400.=/*8=/*Œ&.SPAR1300.CD‚-RunsonaVM02boardwiththeNETbug+=/*›(download)firmware.‚CRASHSAVat$1300.=/*:=/*Œ&.SPAR800.CDƒ-RunsonaVM02boardwithouttheNETbug*=/*›(download)firmware.‚CRASHSAVat$800.=/*=/*=/*F=/*Therearetwopossibilitiesforstationtype.‚TheappropriatefileC=/*ƒismergedintotheSYSGENcommandfilepriortoperformingthe=/*ƒsysgen.‚Thefilenamesare:=/*,=/*Œ&.PRIMARY.CDƒ-Runsonaprimarysystem.=/*-=/*Œ&.SECOND.CD„-Runsonasecondarysystem.=/*=/*I=/*Therearefourpossiblelinkoptionsasexplainedbelow.‚AparticularF=/*ƒoptionisselectedbymergingtheafilewiththesamenameastheF=/*ƒoptionandextensionof'CD'intothesysgencommandfilepriorto=/*ƒthesysgen.=/*:=/*ŒLINKMAIN-‚Mainboardinamulti-processormode.‚Other#=/*šboardinchassisperformslink.2=/*ŒLINKONLY-‚Linkboardinmulti-processormode.<=/*ŒLINKALL‚-‚VMboardandVME/10systeminsingleprocessor!=/*˜modehandlingtheirownlink.>=/*ŒNOLINKƒ-‚Networkserviceswithnolinktoanotherstation.=/*D=/* Cross reference with major '.CD' files and associated link files=/*%=/*„&.NETEXG.CD•"EXOR/MULTI/UTIL/HDS"=/*‡GEN.LOADV2.LG=/*Š&.LOADV2.LO=/*‡GEN.INET.LG =/*Š&.INET.LO=/*%=/*„&.EMLINK.CD•"EXOR/MULTI/LINK/HDS"=/*‡GEN.INETV2.LG=/*ŠVM02.INET.LO=/*‡NETVM02.INT.LG=/*ŠBootfileNETV2B.SY=/*B=/*„&.NOLNK.CDŠ"EXOR/SINGLE/UTIL/NOLINK""VM02/SINGLE/UTIL/NOLINK"=/*‡GEN.INETNOL.LG=/*Š&.INETNOL.LO=/*!=/*‚Loadmodulefileexplanation:=/*‡&.LOADV2.LO==/*‹CodewhichrunsonanEXORmacssystemandloadsNETV2B.SY1=/*‹intoaVM02whichisintheEXORmacschassis.=/*‡xx.INET.LO;=/*‹Taskwhichinitializednetworkservices.‚Maybepartof>=/*‹abootfile(NETV2B.SY)whichisdownloadedtoasecondary!=/*‹systemorastandalonetask.=/*‡&.NETV2B.SY9=/*‹Filewhichisdownloadedtoaremotesystem.‚Includes4=/*‹RMSandnetworkinitializationtask(xx.INET.LO)=/* =/IF RX=1ƒ=DEL&.S.LS/&.SYSASM.LS=/ENDIF=/RX=0F=/*-------------------------------------------------------------------F=/*------------------------------------------------------------------- =OPT -K,NE=/* Preliminary sysgens to configure SDLC secondary station software.<=/*ƒInstructionsforuseappearinthesubroutinechainfile.;=/*ƒLegalnmenonicsare:‚"HDS4PRI"‚-HDS400primarysystem.=/*=/IFEQ "HDS4PRI"\1ƒ=SYSGENSDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF(ƒ=COPYSDLC.HDS4PRI.RO,SDLC.SDLCPRI.RO;YHƒ=/*SDLC.HDS4PRI.ROisnowreadyforuseastheHDS-400primarystation1ƒ=/*driver.‚SDLC.SDLCPRI.ROisaduplicatecopy.=/ENDIFF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------"=/IFEQ "EXOR/SINGLE/UTIL/NOLINK"\1ƒ=OPT-NHƒ=SYSGEN&.SPAR400.CD/&.PRIMARY.CD/&.NOLINK.CD/&.NOLNK.CD,/&.B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF$ƒ=/*Createdfilesare:&.INETNOL.LO=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------"=/IFEQ "VM02/SINGLE/UTIL/NOLINK"\1ƒ=OPT-NFƒ=SYSGEN&.SPAR800.CD/&.PRIMARY.CD/&.NOLINK.CD/&.NOLNK.CD,/B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF$ƒ=/*Createdfilesare:&.INETNO  L.LOƒ=OPTN=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "EXOR/MULTI/UTIL/HDS"\1ƒ=OPT-NKƒ=SYSGEN&.SPAR400.CD/&.PRIMARY.CD/&.LINKMAIN.CD/&.NETEXG.CD,/&.B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF-ƒ=/*Createdfilesare:‚&.LOADV2.LO,&.INET.LO=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "EXOR/MULTI/LINK/HDS"\1ƒ=OPT-N@ƒ=/*NeedtohaveM6840.M6840.EQforassemblyofVM02.INITIO1.AG,ƒ=COPY9999.M6840.M6840.EQ,.M6840.M6840.EQ;Y$ƒ=COPY9998.&.MTYPE.SI,.&.MTYPE.SI;Y(ƒ=COPY9998.&.INITIO1.LG,.&.INITIO1.LG;Y,ƒ=COPY9999.M68XXX.INIT.RO,.M68XXX.INIT.RO;Y(ƒ=COPYSDLC.HDS4PRI.RO,SDLC.SDLCPRI.RO;YN=SYSGEN &.SPAR1300.CD/&.PRIMARY.CD/&.LINKONLY.CD/&.EMLINK.CD,/NETV2B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF#ƒ=/*Createdfilesare:&.NETV2B.SY=/ENDIF=/*F=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=OPT -N =/IF RX=1ƒ=/*,ƒ=/*Copylistingfiletooutputfile/deviceƒ=/IFEQ"#NULL"\2ƒ=/ELSE‡=DEL&.SGLIST.LS‡=LIST&.S.LS,&.SGLIST.LS;H ‡SYSGEN:‚"\1" ‡=COPY&.SYSASM.LS,&.SGLIST.LS;A‡=COPY&.SGLIST.LS,\2;Y"‡=/*Listinghasbeenroutedto\2ƒ=/ENDIF=/ENDIFF=/*-------------------------------------------------------------------=OPT O=ENDééééééINET ˜?ÿÿÿÿÿÀSDLC!€SSCT!ÀINET? ÿÿÿÿ !>?Kÿÿ`þa@×Ns@ç/ |"x LJ¸ HfÿýFï|Jé kòfÿýSi n kF|B© p&i —ü€×ø HÓfÿý#S © gÿýFïB“B«B«B« "_FßNuRi fÿý© gÿýFïB/&|ÿÿÿÿ"_FßNua@×Ns@ç|/ "x LFï|Jé kòfÿý0) °i oPSi nk@B© p i ‘ü€Ñø HÐfÿý#P © gÿýFïBB¨B¨B¨ "_FßNuRi fÿý© gÿýFïB/ |ÿÿÿÿ"_FßNua@×Ns@çB/BgB§JAoÿý`aÿNf| —.ˆRoQÉÿê| _2n |ÿÿÿÿFßNua@×Ns@ç/ ±ügÿý"x LBFï|Jé kòfÿý © gÿý‘ø HÑü€#H J© pfJi fÿý‘ü€#H pRi oÿý© gÿýFï"_ |  ÿÿÿÿFßNua@×Ns  @J€g aÿt`ò |ÿÿÿÿNua@×Ns@ç±ügÿýJ¸ Hgaª|FßNuB€( "x $"iD ÿg°gÓüXJfò|FßNuBhB( B( Bi|$iJ©fEé#H$ˆBiF×a¢| |ÿÿÿÿFßNua@×Ns@ç gÿý"x LBF×|Jé kôfÿý ) g@$@Õø H‘ø H$ˆ#H © gÿýF× 8 ,g @pÀü&Að hpN@ |ÿÿÿÿFßNu‘ø H#H Ñü€#H © gÿýF×`¼a@×Ns@ç|"x LF×|Jé kôfÿý ) €J€g, @Ñø HJfB© Ðfÿý#P © gÿýF×BFßNu© gÿýF× |ÿÿÿÿB/FßNu.,<¡aüäg <ÿT—` 1GFa Nu.,<¢`Ú|a NuB‡,<£`Æ/ "y LB‘ù HJé DkúCé D €J€g"@Óù H fô"ˆ"y L© D` /×"Ÿ‘"_NuNuJ¹ @kŽz, n6pN@` Nq=|HNs(FB,B,B€g$f ˜ gm op`".Tfp`&AAúLåˆÑðNJg,@ þgÿÿg ÿNqì=@H,g Na ªNsù @?|Ns(pÚ’²Ì"¨xÖ*y (B€-=@éHè c^ @ e@@00=@B€ y LJ( Cg<PìNu0,@}ÿgpNuì f J®TgpNu*y (aÄg fÖ* f"*gȲ®TgÖ`Àa, -fp Nu$@Bj %l5lm Bª&nT fVê "y , )fp Nu&@‰€€ü& @ÿnè@ j |'J'NBkB«B«B«B«"k +gê * g2aBft3i&Hç0$HaÎLß %L)Kê * g6`"ê ëì%K-KTª g*y ,+S&­+K*y (+R$­+JB€Nu0,@À°lgpNu*,,, n6pN@`Nqp Nu ¬kò+ ftJ+ fë$ka’+g*+ fìAëa^f B¬!Lë B€Nu*y ($ka:fî3i&$HaÊ&nTëë `¶aúB€Nu0,@€°lgpNu|a €ìNu0,@À°lgpNu(,:,aúf*-f”- fpNu!m y 0*¨!M*y (a\g @fØ* fpNu<<ÿÿJ+ fp Nu<* y 0J¨fp Nu$ka`fô3F&$H?að<&nTaØí;F+L$B€Nu/ *y ($ka&g*_Nu$H W3h&)aª&nT*_­í +@@RfR`ð@ìB€Nu0,@„°lgpNu faÄgNu(,:,aÒfð|!arJ«f/ IëaBB«"(_ìNu0,@€°lgpNu +g*@|!a0gìNu|!aÚföJ«gÉJIë|!aòB«IëaæB«"ÉJ$kB«B«"F«ë B«B®TafB€ìNu0,@‘°lgpNu Ng Aì pN@``*,,, h6pN@` Nqp NupNu, fFa¶fÀ- fp - g B†-a2 NuAí2a†f–B¬!Lí6a¬B€NuKë -g*@JmHgòAí2aTfÿdB¬!L`ÊAëa>fÿNB¬!LB€Nu0,@€°lgpNuJ,g4afò/ |Ií2a´­6­ 6­ 6B­8(_ìB€Nu/ |Iëa†B«"`â0,@é°lgpNu Ng Aì pN@``*,,, h6pN@`Nqp NuJ¬oöaŽfÆ- fp - g B†-a NuAía^fœB¬!Lía B€NupAì o, ~n&QÈÿð",4,Eí g$@²ªfô´jfîpNupNuB€Nuaõg <ÿNuCèB‘¼ ÑÑ||Bi|#B)BiB(1|(-G #|.NTS #Té3l#j3j3j j #l 3l$3l&B€NuAí< g @`øB’ Ší6* fgRmHB€Nu*y ,B€S€Àü&Gõ+gB€Nup NuKë M -g*@¾- fð¼-fêB€NupNuKë, -g *@²-fòB€NupNuKë -g M*@¸­ fðºmfêB€NupNu *g&"@*y ,Aí g°‰g @`ôBi ‘"­+I*y (2* Cí I fNu"@²i fðB© ‘"­+I`â- fV-fN y 0»Èeÿÿ Ш €J»Àbÿÿ y 0Aë (g °g @`ò!m y 0*¨!MKøNuB€"(g A¹Èfôp`ðJ€Nu2* *y (Aí g @²h fôè `ìNu2* *y (Aí g @²h fô¨ `ìNu2* *y (Aí g @²h fôè ¨ ¨ `àNu y 0J¨gÿÿ*h»Èeÿÿ Ш €J»Àbÿÿ!U MCèJBX³Ènú*«;k +l ;lAë (g @`ö!MNu gÿÿ !TCBfÿÿ(-f HçppN@LßNu-f - g BmBm4`Bmí F- g y 0Aèÿô (g°g @`ò!mBm6Bm -<- f>ÑRmgú+l0í |B)Bi, g éí XˆY€XG3m\ˆ]€°­0mÑ -0­ Þ@"m,"ä‰$B` ÙQÉÿü`ÙQÊÿüÑ­,‘­0J’g/a¸$_-gÿ8`4- ga€`Bì­  Uaöˆ­+l gí- ga4`ìa\`þ6aT(_Nu- f4 fî+l,+l0X­,Y­0B€08 U@"Ò¬ƒÀfr;A*aèÈg nþxí $H“m*- f|"li B- J-fi Bm( ) f 2)Aóÿ;A( -0Aê.‡ nB‡-(Á¾x b ÁA`þ¬í B‡>8  € A`þm AêB€08 B‡BjB* 2-(g0ÁT‡U€°­0mþ` -0èÿþB* `þNGíB¬ +g&@`ö'LNu&x 0B­Gëÿô +g&@`ö'MNu5G-f| BjB* m -gG ¾- f / av*_Nu JaèbfNup N@/ -6gÆ-6g¼(m8- 6g<$m8 ¾jg€`ÿÿaÐJ€oâ0< m@&-D(¶€l(„™­DÙ¬,äŽD` ÙQÎÿü`ÙQÌÿüJ€g|fí 6+H@g,­ 6­ 6a¨ì Uaó­ 6ga `þ> Jaåð`þ4(_Nu/$m< JaýNu/ « g +f ë `ë AëaðúB¬!L(_$@"L'jg*ë `"/ « gÊ +gÄ$L"@'igë  kz,) h6pN@`Nqé|  k(Iañ€(J`° F*x , ª!j!j !j éê k(IañJpÀü&Aõ h(Jañ6(_Nu&nT + g=|HNs 9 - gÌNsHçôJjgfJjf^CêJk°B€)S€Àü&*x ,GõJ«g+f+ g0 Jaã `p)áH+ )áIKë$-g*B°mfð²mfê- fÄg )fžaí`-6f +"g+@8 @'h"B¨í6aúÞLß/NuHçôCêpÀü&*x ,Gõ*k *— gJjf¦* * Aí< g @²( fô´( fî`ÿ:B Ší6* fgRmH`ÿj Jaâ"­ g,/ (m$ìì+l$gí  UaîòaöÊ(_`ÿT"<ÿ`"<ÿ`"<ÿ*x (Cêp1² QÈÿø3A B‘¼ ÑÑ||Bi|#B)BiBjBª5|4-G `þ2"$ & (Aú0<NAg.H瀀 |`6 DATAB˜³ÈnúNu,HOî€ OCîaêHîŠB®¢~Aî¦1|ÿÿCè"!IB¨Aè^QÏÿèaà~Aî1|ÿÿCè"!IB¨AèJQÏÿè~AîF1|ÿÿB¨Aè"QÏÿðpýNAIî„*L -g (@,gì+lB¬&lkJ,fž f|ÿÿ`Ä   gH瀀 |`H&l ÿÿgp Aú(Cú4°gAè³ÈnôH瀀 |` (Nû.NTS2.SSCr)m+L`ÿZaô |d0<NA`ÿ>€ oH瀀 |`ÂAú åˆÑðüNФ¤¤šš¤€ oH瀀 |`‚Aú åˆÑðüNÐŠŠŠØØŠ&L€ oH瀀 |`@Aú åˆÑðüNÐ"""öÿÿþÐÿÿþÐ+°+gtadfÿ "úÿ0< I0ÛQÈÿü|ÿÿal`þVaºfþæ0< J4ÛQÈÿü|ÿÿ(HB,aNajgeô`”g |ÿÿ`þ ƒgðÔ&L`Œalfþ˜0< J"K4ÙQÈÿü!k !k!k !k|ÿÿ(HB,aæageô`,g |ÿÿ`ý°a€`ý¨ÔfýÔJ,gýÌ`ÿ LCîÎ$I$üSSCT$ü P.B$ü. ER4üR $:ÖÂraÜÂraÔÂraÌÂraÄÂra¼Âra´Âra¬`DCúbEú "<Ca$:†EîÎ$Â$Â$ Kra‚Âr azAèÂrapÂrajÂr adü ¼ CîÎ" ’‰RaÐ|ÿÿ`üÔSSCT Error- Code STS BCT R E C # R TH RH Data èaaSAfîNu o^0ÀNu0<NA~Aî¦ (ÿÿf ¼B(1|Bh!|<aaTAè^QÏÿÒNuCî„ )g"@`öB¨#HNu~Eî *ÿÿf Bj"jB€NuEêJQÏÿæpÿNupJ.™f)@¼ Bª%|( JažaäNu/Jg ÿgDü`/ |è0<NA _DüLßNu~EîF *ÿÿfBjB€NuEê"QÏÿêpÿNuAú0<NAg.H瀀 |`è DATA2B˜³ÈnúNu,HOî@ OCî2aêHî~¾Aîž~B0pQÏÿúB®æ~Aîê1|ÿÿCè"!IB¨Aè2QÏÿèa œ~Aî|ÿÿCè"!IB¨AèJQÏÿèAî(¼Aîú¼Cî!I!|~AÖCè"!I!|B¨AèJQÏÿæ~CAîÚCú ÙQÏÿü`”@ ÿÿ NETLOAD SA`@ ÿÿ SY`A IîÈ*L -gJ(@,gî+lB¬ gT gâ g  g ,`¦)m+L`´a B`°a < |,0<NA`˜|ÿÿ`à |™0<NAJ,fÿÿ&l ,lî+ a þ0+@ðÿ @€f˜|ÿÿB++ a ægB€+ Aîž°`€B€+ Aîž0gÿÿ jhCì2 ,€Ѫx0ÙU€núCê| jh",ÒˆÓüÿ²‰d ,€Ѫh`ÿ"Aê(0¼1|`I!I“üÿ!I NBgˆB/(JCú(EúNa FAÔ0¼NC0¼NC a¦$La @`þÐUPLOAD ABORTED (DISK I/O ERROR) - STATION $UPLOAD ABORTED (RIM RECEIVED) - STATION $R¨Aê|"HÓü³Áb0Ù`ø%Hh+gþT/ (JCúEú$a œ$_`UPLOAD FINISHED - STATION $AÒ0¼NCB€a ‚`þ+ gH gžažfýì|ÿÿB©BiBi 3k + g0 Sg@ —g$ “gJ`ýÀ|ÿÿ+ a fý®B*g`ý¦|“ %|ab`ý|S %|aL`ýz¼¡@ a@aPfö`ýd|ÿÿ+ a¦fJJ*ggS*gfýF+ Aîž0g (JCúþŽEúþ²a €AÔ0¼NC0¼NC$L`AÒ0¼NCava¨fýk ¼¢aÆaÖg |ÿÿ`üä+ aâfüØ(JatgB,f`üÈB©BiBi 3k | %|êal|g+ a’ga^$Lað`ü€Aî|PHç0ab)JlLß J€jJCúEúCa è$LaÀ`üPSYNTAX ERROR IN NETLOAD.SA FILE - DOWNLOAD ABORTED J¬lgä)|ÿÿÿÿp)|ÿÿÿÿtHç0$llað @gTfT Df&oB€+ Aîžðfð`Ì Lf ƒÿÿÿ)Cp`º Nfƒÿƒÿÿÿ)Ct`¢Lß `Lß `ÿ,B€+ Aîž0gL ¬ÿÿÿÿpg@ ¬ÿÿÿÿtg4ð°pJAîÚNA .Úa0a-@âCì "üULODB€+ aú.äa˜Cì2üDU.åaˆ .Þ€üê`€ÿÿ€ü<$€ÿajHB0ab8¼AÔNC ,t€ÿàˆ)@$9|8¼ÀB(NCga”B+ Aîž°`|Aì|)HhB¬xB¬0Cì|B©Bi3k | |€|#lt#lpEìD%I%|a(CúEú!a¦`úJUPLOAD BEGUN - STATION $B€Aîž+ °ðCì|B©BiBi 3k | B€+ aøgaÄ$LaV`ùæAî/MÔ)| )| )| )| a Ö,_AÔNCga‚$La`ù¤$LaDg a\$La`ù!|Cê||€|AêŒ#h8#h<#h3|'#h8EêD%I%|"a`ù>, .gJ4k`ÊÀ6<ÿþ` ƒ€g ƒ'cÀ` =C ` À`À4<aX6< Gî at4<aD n& f| 6< GîaR4<a" (g6<Gîa84<a (fœBBBC4kJ )gg> Pn8AéK†AB`Ø4Bÿg BnÀ BcÀ=C `HÀÀÀBÿ BcÀ`,Rˆ6<Gîa¬4<a|$< Gî &Â&Â&Â&Â6ÂBn $B|gÀ$fÀ fÀ fÀ fÀ fÀ4B|gÀg :f€J€Lß<NuJ€jÀX`’QBgQBÀ`ÀBgÀNu4HB€€»Èg64k.f(f @À`< *fÀÁSCn΀€`$HB´CfÀ`< (*ÿþf<*`ÂSCnúNuNq/ &HIúòB€B"@$@JFf <@@@(_Nua¬J€j €€`šR‹·Èf€@ ;g6  g0a°"H&HazJ€j€€`j ,f€`äR‹·Èf "|€@  g> ;g€  `6$H&HaVk nö€€€`  g ,gâ`êR‹·Èf $|€@(_Nua k0fö #gð€ NuSF4NuJFfò€ÀNu  gNuaê`ôNqHçB€BIúæ ,gø4k6 -fÀ`æg0ƒgÁ` =fRŠa`  f@` Lß NuBƒ:< &J $gN4gˆ`&4k&gã‹/å‹ÖŸÖSEnÞ‚4jø  f"+ÿþNu:<4käfgÌ_郆SEnÜ`ºNq€€€@@ P€@  €@ Aú0<NAg.H瀀 |`Ø DATAfB˜³ÈnúNu,HOî€ OCîfaê=|ÿÿ´Aú R-H¸Aî´0<:NAgH瀀 |`‚pÿNA@çî·Aî´0<:NADßgrHzb@ç/:mLßgNwDßX`.Please kill network first - then initialize Hç`CúÿÌEúÿôa bLß`úH瀀 |`ö®·Hz @ç/:õLßgNwDßXAú0< NAgH瀀 |`º SSCT"HAú0<NAgH瀀 |`Ž-|SSCT˜-zþŠœ=|¸¬=|ª-I®Aî˜0< NAgH瀀 |`VŸüp O/ EúÊ0ÚQÈÿü$_ O$zþ@!J0<NAßügH瀀 |`-|NWCT˜-zþœÓüJ-I®Aî˜0< NAgH瀀 |`æŸüp O/ Eúj0ÚQÈÿü$_ O$zýÔ!J0<NAßügH瀀 | `¨AúH0<NAgNH瀀 | `Ž€`SSCTSSCT SSCTNWCT SSCTSSCTa LgH瀀 | `:AHz@@ç/:;LßgNwDßX <_B-@ rXÂúg-@$B  -A(ÐHzh@ç/:ùLßgNwDßX-@,2:ØÂüB-A0Ð-@42:¼Âü&B-A8Ð-@<2:¦ÂüJB-A@ÐHz@ç/:LßgNwDßX-@DrÒzŽ=ALHz>@ç/:aLßgNwDßXÂú^ÿB-AHÐ=zLN=zJP=| ˆ-|.NTWŒ-@”Aî€0<NAgH瀀 | `ð*H Hz&@ç/:ñLßgNwDßXÑ®,Ñ®4Ñ®-|SSCTR-zû V-|NWCTZ-zû^=|ÿÿ´Aú4-H¸Aî´0<:NAgH瀀 |`ÌHzr@ç/:Ñ LßgNwDßXpÿNAgH瀀 |`œî·=|ÿÿ´Aî´0<:NA=|ÿÿ´Aú -H¸Bn¶Aî´p:NAgH瀀 |`\pÿNAHzJ@ç/:]LßgNwDßX=|ÿþ´ nbÑüP-H¸î·Aî´0<:NAgH瀀 |`=|ÿý´ nbÑü\-H¸®·Aî´0<:NAgH瀀 |`ÔpÿNAgH瀀 |`Àî·=|ÿÿ´Aî´0<:NA-|€ -|SSCT-zùž-|Aî NC-|SSCT¼-zù‚À=| ÄnÑ-|SSCTî-zùhúAî¼0< NA-|NWCT-zùT-|Aî NC-|NWCT¼-zù8À-|NWCTî-zù*ú-z*ÒAî¼0< NA‘È€0<NA0<NA áÈ2(n,(¼!NNT)n0 nAìCì" Ò¬  ‰ IC貉nô(n4(¼!NAT)n8 AìCì" Ò¬  ‰ ICè&²‰nô(n<(¼!LCT)n@ AìCì" Ò¬  ‰ ICèJ²‰nô*( ¡f a·(0a¹P`¬ ¢f a·2a¹b`š £f a·Ba¹d`ˆ fa·`ÿ|a¶ê`ÿtB@09 4€y 6€y 8€y :=@HNs!MAILüMAILB:û gJJ¹ Lf9÷?²`2/Aúÿ¬pNAf$ 9ü"€ÿÿÿ €RUNfÿAúÿžpNA _NuAÖ!I !J0¼1|1|B¨Bh B¨NBNuLOADôÿÿÿÿÿ€SEG0 ÿÿÿÿ ÿÿ@ ÿÿ NETLOAD SA`@ ÿÿ SA`A!VM02Waiting for VM board to become ready VM board now ready - proceeding OúýŠMúýAúþ^Cúþ©Hî¸Aúþ Cúÿ›HîAî„0¼@NCgazAî¬NBganAî„0¼NC/Múý¢AúþaÎ,_€ÿ€üg <aBAúý‚NCga6AúýžNBga*Kúþ2-m€"-<à‰á‰Ò­8-A<-|ü8pAúýŠNAgaú(|Ùüü ”WAITgCúþîEúÿAúýHè NBAøˆpNA`ÚAúüìJ¨ gCúþìEúÿHè NBAúý <üЭ8!@ :ý0кý0S€!@!|NBga~=|ÿÿ@Aú”-HDAúýp:NAgadpÿNAga\îC=|ÿÿ@Aúüîp:NA(|Ùüü)zü)|9|' (¼REDYAødp" RUNgNA`ì‘È€0<NAHîHpAúüžNDLúü–H瀀0<NA#üü H#üü L <€ ѹ LNs  Hç8 .gJ4k`ÊÀ6<ÿþ` ƒ€g ƒ'cÀ` =C ` À`À4<aX6< Gî at4<aD n& f| 6< GîaR4<a" (g6<Gîa84<a (fœBBBC4kJ )gg> Pn8AéK†AB`Ø4Bÿg BnÀ BcÀ=C `HÀÀÀBÿ BcÀ`,Rˆ6<Gîa¬4<a|$< Gî &Â&Â&Â&Â6ÂBn $B|gÀ$fÀ fÀ fÀ fÀ fÀ4B|gÀg :f€J€Lß<NuJ€jÀX`’QBgQBÀ`ÀBgÀNu4HB€€»Èg64k.f(f @À`< *fÀÁSCn΀€`$HB´CfÀ`< (*ÿþf<*`ÂSCnúNuNq€€€@@ P€@  €@NETVNET0€ÿÿÿÿ–ÿÿaxa:t`,N¹%dDUMY"x,|$iµüfa 8`J#R|øÿB’Bª%|ÿÿÿBª GúÿÊ%KBj%|ÿÿÿþ5|øÿ|&i “gGÓ`ô&Š|øÿNs!VCTÖ¼¾À Ò Ê %d'€'² (f!(ü"P0%´Ž%d‘’“%d”cä•/ @ç|JèfB"x "ˆ!È PøFß"_NuJøfDHçÿþAø@ç| g$"@ ‘f!È |øÿ$iQéN’Aø| fÜQøQøFßLßÿNuPøNQøJ8f¤NuNuNu@ç*j-,g|$©#JF×`tª>*g4gRjÇ fX g­,fí-`­ ,g` B­X­,AÕa f|$©#JF×`$* |a ¢F×FßNuHçAp@ç|a –$8>&68@FßHC(HD4<  g 4<8***HB g2Hçz,* m6a"`NqLß8`Lßp&*HC6‚€4*AÕaðNqLß‚R`ÿX?5|$* *g |a þ` |$©#J"*0<@ÂÄjFÂ&jNÓ84gaLî`*_a ¶ _N`Lßÿ\|JxfNsj?_f aþJ8fNs?_'fö/,x Hî?ÿL× NiHî8`ö@ç8 4gaäî HçÿþNi/ /9d oF,hHV/(@À@ÿ?"h 0P*n6` & fÿr\,_( „!TCBga ÎJ@gÿJ @f AÖa?`ÿ: @fÿ2Jf&HC4<HBAÖa°Nq`ÿHBHA(&64< ‚HB4`àâˆ&T(,_" !TCBga jCð=C^AÖa>¨J®@gþÖ$< ÿÿHCHD6`¤-@L× NiHî8AÖa È.x|øÿMø|"N ) gì,@.,fð#n ®-!Î /.D/.@Qø1øHFpàÀ.-fh|øÿ*n6a  n<€™AÖa®Ü‡(F9n@ÿú)nBÿü-'fLîÿHìÿÿ¾Lî0Hìÿî -/@-@B`ÿ*n6a n, ,"0<2 gB@2g<,*.,(>,°H@0,²H@"@J²f -@g4&@4+HC6+HCAòa*J²gHç@(AÕa Â`Lß ra¶,sf`žLß,sò Rrì ,NuÇ1G*è)!|EXEC°!| ´<(,Æ1F.½Èg$F-ÿ† g†1F,|ð& fa¾Nu1F,X`5Fa aaaaaaaaaa a aaaaNq?/_'g/ g*8]…šNh,œ… n6aV`Nq`"(F CN`&8UC _8ß¿Ãfú/?,ÿú/<<`B† m n _-_¸-_¼/.)g".èg a nbJf\ nCø˜ 1pfÊaü8`rJFf:AÖaý6 HzýŽŸ`ú P` €ž`ú ~$.èffffNLî?ÿ,_` z,.ð n6az`Nq`&~ F&(.ô·„f È®ìg-Cô`"R‡È®ìgg°Rnø .ø°nøb ~aN`˜./,x ½üg0/ f(.)g .è8gîè,_"¯PøNs,_"/86Nua‚$< 4.&.(.8áL<Aîàa¢`®)Lîÿt®-@&Nuî ,X`ùJ .`p|Jxf Lî?þ,_Nsjùaö J8gè`ùB®L× NiHî8`ùp`Np`Jp`Fp`Bp`>p`:p`6p`2p `.p `*p `&p `"p `p`p`p`=@=|çG` H@0<.H@ xQˆYˆ.H|`ÿV@çHç0x "x,JAkj fah|&)fFïT¯`Ø`J$C#RFïBª€%@ %H%BBjgêáIAøÿ5A$|aœFï`Œa`†Hç8Eé&J|$S ªf"´ªf&’(R(,Ù¸NÙ¸J¸JFï0`:&J&g2$C ªf ´ªf&’(R¸üg(*Ù¬Fï0` `&J&`Ì`$©#JLßNuLß FßNu&i"’¸Nl!ÂNÓ¸J¸JD'A$‹#J`&(S’¬m &L(S’¬`ô%lÓªD)A$“&ŠNu/)µßfa`a&Nu#R$©#J$i *ѸNѸJ¸JNu&’$©#J *$SѪNu#R&i +ѸNѸJ¸JNuHøÿÿ@ø!×Ni!ÉH!øL"x:3|•3|µ3| 3|°|`ÞNuNsNu|ð%ax`ö„Høÿÿ1×!ï|LøÿÿNs@ç|JÐkü0ãHâ@S@0€kFßNua:U.raFßAÖa`ö6î ,B® (f!NNu*@ - fø+N NuHç .&|ð&î-HîÿtNl-L< 8Kï €Pn@rIî™ÀäHd8Ý`(ÝQÈÿüLß0Nuaþì@ç|JÐkü0ãHâ@R@o0€FßNu/ "h!i €0€B© © ,"_FßNu/ xBB@ç| 0àIDAÒxXäIÒ¸J’¸N’¸RFß _NupðÀ($@&`h$&@ç|è-f6Hç@ Eø(&"* g ʰ*&còÊ!A %H $x °*&cPøLßFßNuJ¸vf|Hçÿþ!ÏvFï<.xv|9÷0 À÷0.xvLßÿÿB¸vNsRx^ xd^k$/ "x:3|3|53|.3|>"_Bx^NsHçÀÀ x:| xB(( B28V“¸Nn"x,AéCú1º& 4ùØùØ@ @@ (@ (@ ²@ :ÈùØùØùØùØ@'^! DÀxùØùØùØ@ ‚)f2ŒÀ @ÚùØÀ!èÀèÀ !ÌÀ %¢À "ÜÀ #hùØùØ@–@(Ì@"¼à84gašÿ.)g".èg~a÷öå@kN @,bDGúþž$3g2*HE…ÿ, n6a¬`Nq`øT(FgAÔaò``øD*HNó `ø2$x($ gôä@D@°jnêS@Àü EòJªgÚ4*‚f"²®fÈ-W8BnH?Hz @ç$jNÒ0.Hfø20g÷ž @fAÖaûš`÷¶"( Pa^` T—Nu !TCBfô*H(m@ gê ᘀÿgÞ@ç|2,$0{Nû€0000>>>>00008Š8Ê8ª8ö8T8ZFßT¯NuFßaù€af``ê¬%FßaNu l` l 9A$Fßaà"HA fa²AÕaúÈNua``ž9A$Fßa€aÐNuaú``ÿ~9A$Fßa^a°Nu9A$Fß l aV"HA faDa„Nu9A$Fß l a*"HA faaXNug"2HA)A`6‚g "2HA)A`)l`‚gY@‚4&(*,. "JåHNûú`|NqNqNq ‚`~NqNq ‚/`hNqHÐ `lNqHÐ /`VHÐ`\NqHÐ/`FHÐ<`LNqHÐKøIøB§$I"xfFJQk$¶1@f&i OJg·Øg`öHSAëa÷ºa”Cé QÿÿfÎB„J—g| g4´¬o  g($,aœ‚)aØ®- K gT¯Lß88Nu g@î-|ð&Aí-H”@ç|0ãHâ@S@lü0€a÷pFßAÖaø^a‚`íR„R„`œ g*$@ g**º‚m´¬nº¬m` º¬o(J*K fÖNu•¬Õ¬ *,áGôXf*, $T ,g"@Û© "Šg%INu*ŠgúBªNua÷ nw&Nu"_ g @Aèa÷H`ðNÑ g®JQk iµèlž`µél”µém˜fÿ@JQk’*iHUAíaöT gþâáŠ&J×ÂàŠ(@°ŠnþÒ ,áˆÐŒ°Šn fè`þ¾°‹gþzn gþ®Šàˆ$`þf&”g"T#K(‹'L'l B¬ ‹àˆ'@‘¬`þHç $nLß0T—Nu$H"x ÿÿg *iµílµémÜJQkÞá‰Òв­bÎ` Cé QÿÿfÐ`ÀCøAíaõv&g C±Ál"H&fô g )áˆÐ‰µÀm¬%B f -àˆ%@ $ƒ%If*Š`$"Š ‰àˆ©#@ f *Ñ©#j "’$IJƒg$"C#JJª f )Ѫ%i $‘g"R#J- ð"x²f(i, g Aìaõn`îCé QÿÿfÜAíaõZLß0NuT—`îHçÀ@ç&x0|*S»ëfKëIí&ŒFß+@+H+N (o:”T¯;o+o Uïÿb+o aõ8+A2<ù’àHF@@ÀüúÒ@;ALß8NuBƒB€"x gbEé0)gP—ËJj f ·üf$&J` ±êf´’gB* g f4 f& ÕüS@fÄJƒf"0) K·üf J°i m‘ÈR€T—Nu JNu CNuB€*g B…:(0P$f `¾°P g Q… E læ*T—NuB‚BƒB"x$( gd4)´i gRB(pJq fJƒf:& „g04)`*±üg±ñf$lµñf$lµñg"Jq k"€SDf²T—JƒfB€B‚Nu Nu qNu gJg` N".Nu gô"(g.(f".°®f²®gÖ x±üg°¨f²¨g* h`æJf @Hz?)gB,,Jm g.¼•f*­ Jm f0-@ fB2- m aù&`aî|ÛüSGfÂNu>, fz,, n6aüx`Nq`ìH$F,g z,, m6aüX` ` JEgJ0Ðf`ì ., m6aúÖ``ìB€00P, f:ÐpPáˆ%@B€$°P 5pP$ª00Páˆ%@B€00Páˆÿ%@ `ë^áˆ-@ `ëT»Îg-,f `ë¤`ëŒ`ëŒ., m6aú\`îJ…gæ0, 2,A'ÿg f  gÁÁÁ B‡,,g  gB† ff-)f ¸fÁ.8xΆެÞ¸xθ|à"FffAørfRˆ-(fTˆHG>G‡ÿ?HG Gaõ&`(TS€g`êº`êº2f"AÓa÷f`aì¼`ê¬&H.*ág, "F m6aú¾`Ê`ÈJ0PfÂ!¬ P 0, @Oÿ gÀ1€P$1¼Pg1¼P àˆ1€PЇS€1€P ‰àˆ1€PP&ðP$R(-K gá-G$½Íf *n6aì^*NT`éª., 8,(M¹Îg ,,f `éðNh)H<*l6AÕaø¬``éÎJ¬@g ,<àˆ°uPe °uPb`éºa`éX05P$@0g@$,25P$ uP a÷ì`aë¨<(SFÜuP;†PSh B†<(  g†1F JFf.05P$@ f$B€05PÐuPáˆB25P’uPR @aõú`aëPBuPaëˆBµP BµP$BµPBuPS-Nu*Na*n6aëb`è²»Îgéa`è¦$-2, l a÷D``èä`èØ`èì`èÔ&H$m6.+AÒa÷ `êJ…gÞB…:+á, gº¬d`èÌ*,…ÿB$,,B, g,+ AÒaø¾` `žJ…faê’J0Pf%«P B2P' àŽ5†PàŠÜBSF5†PD€Ð« àˆ5€P5¼P+g5¼P5«P$òP$R*Rk -k  NuB‚,"xhJ1 oè"Bƒ,g Co`çüá‹à Hz@çåŠ B/?85gaõ¸îNs85gaõ¨Ý`çj&M*n6., AÕaö†``ç¨J®@gNh àˆ°uPe°uPcç–·Îgçx"E$L.* k6aöP`J…f`çf`çf* ,**fB†<5P* gÜuPáŽB€05PuP$R@*áa÷n` `J…faéB`ç2J0Pfö"( à‰ÔA1P1‚P’u@DAÒu@1P!µ@ P 1µ@&P&65@$*gƒ* gÃÃ1ƒP$1¼Pg1¼PBu@ÉEaéËDBµ@ Bµ@$Bµ@Bu@S-R(20PÒpPá‰-A  g$$.´«g pP "(KaôÈ`aè„&L$+ ‚`æ,,`&"-6g*,,, Aaö‚`` J…gJ0Pf`æD..)g , g @ !TCBg` Aì aõ¤``æ N.(f ((g`åø"(6g*,,, Aaö`` J…gJ0Pf`åâHzÿ”?,--gGÿg­-g- ,gSs­-f­ ,Ss3g³ gAóaègl A g+l  g+l  g- ,fAÕaè\`äV g í,`äF gØí ,`ä6J­@fä~B‚,gfäŽB‡, g*,, m6aô`Nq`ä`fädB†&, $‚0¶‚l&ƒÿà‹HC8pHC Caîz``ä ¼!ASQ!l!F Gè,!K!K!K 1G(áŠÔˆX‡”‡!BBƒ,481B&;01B$Bh*+H@`ãh $L(m@ gb.)g@"j B€ cPr fY fP@R@€°l(b0@ç|4,$6{ (Nû°$z,* n6aó`Nq`ã`"F`ª`ã8`ãd0000<<<<00006‚6¨6Æ6ê6\6bFß`ã&Fßaå aÈa`Fß`âì¬%FßaÖ`â l` l B9B$FßaàAÕaæp`âja‚a¼``¸9B$Fßa€ar`âD9B$Fß l a†aT`â&a>az``ÿv9B$Fßa`aã”Nu*N(n@ g@ç|4,$4{ Nû `áJ<fˆ<fˆ6666666600000000Fßaã &\e&\R€HÔ`ÖÂ&L- ,g×zJaÿœ(FCí0<"ÜQÈÿü+mt+m ”+\B0-è+\è-èø-è@A--gÖj+lÿîô;lÿúø+lÿöú`ÖTAÖaÚD`Ör­ ,gÖ AÕaÚB`Ö6&L- ,gÖŠzaÿ(F--f­@`­ø+lð+lô+l ì+løBmø-è8-èJgF--fí@`íø.-èg&z,-ð m6aæ>`Nq`Ö†(Ff+Tô­ ,0-,@ÿfAÕaÙ‚`Õ|@ç$, 6,|B„g (,nFß`ÕÔB… g *,fÆaÙCÀg*B†6, gƒg´lJ„gÔ„`ô‚&\`6,$Ô„"x,Eé|&J$S gλêfð*fèJ†kºªfÞ&’ R±éf (ѸNѸJ¸J` *ѨF×J†f2%M„%D %lBj%EÃ5C”|aÖBF×`‚RFCf* g0êªêB‚Hç~|aÖ FïLß~J†kÿF`@|$©#JF×J†kÿ0`*J†f| )g $@#RF×`ÿ`Fß`ÔXSFnFß`ÔVFß`Óü&Lz`aüà(FCí0<(ÙQÈÿü(íB8í@ -è€ÿÿÿ(À(í,0-è@ø8À(íð(íô(íì(íø--gÓ¨)môÿØ9møÿä)múÿà`Ó’*N"(n@ g<,'f8Nj~,'f‡<.)f&*, n6aãè`Nq><€™AÖaÏF`ÓŽ`Ó–&F`&J ‡oLÛ}Hî}LÛ|Hî| .‰0@ÿ/gÀ?@/[ÔÇNb@ç|4,$4{ Nû <d”d<|”|0606060600000000FßaÕ(Fß`Ò¬FßgÒ¢)l"lJ)j)iaô¸`Ò¶g B9B$Fß`Òlg B9B$Fß`ÒTFßgÒJ l aòÂaôn`Òl>,.(f‡J”gz, n6aâ°`Nq`Ò€J®@gÒX,‚Eø˜J2 fÒJ¼  Eø¨Äü%Ž %® 5¼ B² %” Br 5‡ 2` ò `Ѽ.(f -(fÒ,°-%cB® m%#`Ñò@$@&`цBG`><&,"x$0àH°i lF(¸±0f>Jq0 g8 10f ¾10g.‡0Jq0 j&10JGg Añ0aÔ`Ñ2Añ0aÔ°`Ñ&`Ñv`Ñz,*H"x0 g i‘É*$ n6aá`Nq`Ñ`$F&äŠS‚$ÙQÊÿü$F(M"x0&Q—ÉÙË$ÌÛÃ$Í`ÐÒ.(f`Ñ"@ç2<€tÿaÑhNqLÜ.<&\¾„b˜‡Rƒ`ö|!Ã>&8J–¸N–¸R–„׸R¸RaFß`Ð|"8R’¸JÒ¸N&\"ABtÿAúaÑ`aÒÂNu@ç|R¸>¸&\RaÀFßNs . €Kª{ûfÐfJnpg x:(fÐR xUˆ, z n6aà”`Nq`Ð8*FLîÿN•,x *n6aÒ’`Ïâî ,`ÐJ”f@",g.(f".*y»üg(²­f-(f ½Ígí-g:*m`ØAÔaßz`B® `ÏÈ*H½Íg-(g .(f`ÏÆí-fϰ0,gÀí);@*;m,.-m +n°+n´­ ,­-­ ,g2 m”@ç|JÐküCèÿâJ© g»é g"i `î#m RPFßm-ÿ,|ð&­ ,gí-@ç|­-g < @ ( g °fô!m AÕaÒ°Fß`΢î)=H*fî*.(g. (gL× NiHî8aÐà.-g`$.)fÎ=H*=n,.î--n°-n´(N"x,Eé&J@ç| g$@¹êfaÐ*`&J `êFß,)gaàb ,Tg @B¨!x<!È<&,(,ì)"x)-f2¸©f¬),)g) ,g¶©àf¸©äf ><@AÑaɤ"i f¾,)gaòòNqaõŽ,)gaôÖ~Cø˜Eø¨"Âü 1pf2g/aÈ.., ,gaÐR‡ ‡oÄaëæaà²J¬gH4<HB4,&,8,HD8,°*,²<,¶HF<<.,*>,,)g<<$LAìaÕfNq(JCø )g¹Àg"@`ò#laÏ‚B¸ rAÔaÙÚ`L× NiHî8aÏ$`ÌÜ-mp =m("--gÌš`ÌöIëÿþ6<€a&NuT—Nu&LLìpHF>,6.(Ba ``Ìø`ÌfAÓaÜL``pT—NuB€8qH@0< @aÖø`pT—Nu*H4<B˜QÊÿü+S +fgJ€f `<.p .;Fp+@aÚ€fDÿ;D(+El+EB;|„FHD0àHgfJg¸.%c.%D%°c@$@&*¼!TCB|€,;|:;|0$MÕü`+J6$¼!TST|5|$5|D x -"-±üg"°¨f²¨g h`ærAÕaØ^NqpT—NuaÍî`pT—Nu+x!ÍNufg2 .".` ", , g.(g Jg` .".+@+ANu.(gË<*<,, n6aÛ^`Nq`Ë.,gË0&Fp&ÝQÈÿü`Ê®@ç, gzR` ,gz,. n6aÛ`NqFß`ÊÀJ”f6".*y»üg,²­f-(f-,g-.fB*m`ÔAÔaÚ,` B® Fß`Êx*H½Íg-(g.(fFß`Êt-,f Fß`ÊZ-m -.fX>,aþÌ+mlB<-(F€g@z,-B m6aÚf`NqFß`Ê4+FB:(0P$g00PÑpPÑpPBpPQ… E làBm., gGìLÛÿHíÿLÛHí |­,0-,@ßfF×AÕaÍfFß`É^@çJ”f8".*x»üg0²­f-(f½Íg--fí,gJ*m`ÐAÔaÙ` B® Fß`ÉR*H--fì½Íg-(g.(fFß`ÉFí,gFß`É,;m,.-m |­-gCø I"h ³üg ³Ífî!i Fß`È¢|®-fî,|øÿ`Ȱ|øÿAÖaÌ€0.^gÈvBn^`Èü-n Hî)`È^-n Lî)`ÈN Ma`ÈF@ç|¨,f è-FßNu (Xg"Hçp$@"x,GéµÓg&S`øaÊB¨XLßFß0(^g1|1@|ABh^aËèNu*N(n@ g(,'f$@ç|.-f 4,$4{ Nû Fß`Dz`Çö`ÇþN6z6N6z60606060600000000FßaÉäî , 9B$Fß`Ç„9B$Fß)l"lJ)j)iaé^`ÇX9B$Fß l aç”aé@`Ç:..)f,fz n6a׆`Nq`Ç. F$H"*f`ÇDAøŒAøŒaɰGø"SJ“g²©gØGé`ì f¾.)f, n6B…*çEa×&`Nq` B€* e c @dpËa„r Âj A fp ar"xhJ1gj´*fª *ÿg Jª fpÇaH *b *dpÌa4GêB…*g0 opÎaS…ç2*²sPdpÏa ²sPd pÏa``\Q…lâp Àjf" * @fRˆHy]6? *(SJ“fp a¦Gì°¬fì*,Ig°,(gp a† ¬g(l`ð"SJ“gGé`ô j p(R@ @Hç€8aÏö` LßpaÿJLß"HíˆB˜S€nú*g)I&‰"¼!CCB*giHLê?Hé?))àáˆ3@B@3@@GêIép)+g(Û(ÛS`öB€*åˆ#@D&j ×Ó#K )ÿf#|bæ*géI*géH`R*fbB€*&xhJ3g:(iD &TGëÿ¶*` &lJ¬g +*²n(K`ê¹Àg #K)I`#K&iD3|N¹J#|cšLIéJ&ŒB€* xh¼ÿ iÑè*I/N,_`‚`jp aøp aôpað gFo opÁaÜ n6B€S&@B… f )e: )c )€e* )b".)f;°g,aÔ ` Nq`š×ËGû°ÖÓNÓÿþ Ê Øî *aºf² © ©HfV")D(A&TGëÿ¶ `&lJ¬faŤ°‹g(K`ê¹Áf$J«g&(k9|N¹J)|cšLIìJ&kD&Œ` )k`B)(&iDHzºÐ&Ÿ&xhB3Iø &TJ”faÅD°‹gIë`ì(«AøŒaÆD IraÏÊ`@aÅpaz&Iaø"Kfpal)Hgp‚a`)IgpƒaT)Ig .(gþ€)Igp a6 )c )c )€e )c*g< * d pÆa¢`žj :#j `Á< )AîDJg"P°©gAé `îF€NuXBAøŒaÄ `Á AøŒaÃú`Àp,m4B€-9f NpN@`F|q|ptAíp!­< g ­€pX‚€ ­8 T‚´-:cm:pLí<pažNuHç`CípB€ m"-+g|00J)fFÄ)fCéS`â0))gJ0`(©0-&ЈfS€ˆ$J0U@løB0 UBlø@À@FÀ-Hg Hç:aÿ Lß\øLß|NuLß|ÿþNuHç m4pN@`Lßx`LßxNu84g @ça͆îFßHç€Ä*oKíÿ°"m/ N‘*_e -g*@`êLß#X|JxfNs`· 85gaÍ>îHç€Ä 8g*@ m ( g / @çN°Fß*_ -`àLß#|JxfNs`¶Ö`þa@×Ns@ç/ |"xLJ¸HfÿýFï|JékòfÿýSin kF|B©p&i—ü€×øHÓfÿý#S©gÿýFïB“B«B«B« "_FßNuRifÿý©gÿýFïB/&|ÿÿÿÿ"_FßNua@×Ns@ç|/ "xLFï|Jékòfÿý0)°ioPSink@B©p i‘ü€ÑøHÐfÿý#P©gÿýFïBB¨B¨B¨ "_FßNuRifÿý©gÿýFïB/ |ÿÿÿÿ"_FßNua@×Ns@çB/BgB§JAoÿý`aÿNf| —.ˆRoQÉÿê| _2n |ÿÿÿÿFßNua@×Ns@ç/ ±ügÿý"xLBFï|Jékòfÿý ©gÿý‘øHÑü€#HJ©pfJifÿý‘ü€#HpRioÿý©gÿýFï"_ |ÿÿÿÿFßNua@×Ns  @J€g aÿt`ò |ÿÿÿÿNua@×Ns@ç±ügÿýJ¸HgaR|FßNuB€( "x$"iD ÿg°gÓüXJfò|FßNuBhB( B( Bi|$iJ©fEé#H$ˆBiF×a| |ÿÿÿÿFßNua@×Ns@ç gÿý"xLBF×|Jékôfÿý ) g@$@ÕøH‘øH$ˆ#H ©gÿýF× 8,g @pÀü&Að hpN@ |ÿÿÿÿFßNu‘øH#H Ñü€#H©gÿýF×`¼a@×Ns@ç|"xLF×|Jékôfÿý )€J€g, @ÑøHJfB© Ðfÿý#P©gÿýF×BFßNu©gÿýF× |ÿÿÿÿB/FßNu9÷f )Ofp$qNÒ$o/iT"iX)ÿÿgäH€LßNu**SDLC**PRIMARY 68000 VM02 09/07/83ü÷ü÷ü÷ü÷ü÷ü÷ü ÷ü÷ü~÷ü÷üà÷Aú’"|22<@$Hzÿþ$Ÿ%HQi% Bj ±ügh h hh`Bª $_±ügB©aû\ I"y$ )OfR±é0fL )PfDü÷ü÷ü÷Hçàþ,y$Lî RlL$mHaDEø&J|ÿ` Š` /û/NsHç€`B@ü÷9÷"y$$qNÒ9÷g> @f ü(÷`& @f ü÷` @fJ9÷`ü0÷ü8÷B@ü÷9÷9÷g "y$$qNÒLßNs|ORlH|ü÷ü÷ü÷üë÷9÷fTAú+HAúè*ˆHí LßHç€``ÿ|9÷ü÷ü8÷f`ÿ\LßHçàþ,y$Lî ü÷ü÷Jlgb2lAú&*ˆAúT+HHí LßHç€`ü÷`ÿSi&mü÷ü8÷`þìü8÷LßHçàþ,y$Lî RlJ+  g`+ €,"f8ñ€,#T,#,#R,$,$J“g²,g S( fï` f|P@ Aú¦*ˆAú„+HEë+  g2k`2|Hí RlN°+ g ÿgJü/ a e6Hzÿþ$Ÿ%KTl% l$ k k k kB*$_ü€÷ë ÷üÀ÷LßHç€``ý¶9÷f†$i,ê ÷* fEú`Eú¾"ŠEúN#Jü8÷`ýt$i,ê÷Eú"Šü8÷`ýV$i,ê÷Eúz"Šü8÷`ý89÷fg`Bü÷$i0RjT$i,| ü÷ü8÷LßHçàþ*y$Lí8,`¨ü÷ü8÷`üÎSi&m$i(Ú÷#J(`Eú "ŠEú#Jü(÷ü8÷`ü–9÷ gÿ^Eú´#Jü÷ü8÷Eú"Š`üfLßHçàþ,y$Lî + fü8÷&S fýRlR`ºü÷Aú*ˆü8÷LßHç€``üü÷Eú"Šü8÷`ûöü8÷LßHçàþ,y$Lî RlP`”9÷ü÷ü8÷$i0RjVgÀ`ûª`ÿÿ|ORl(Aú¤+HAú@+HAú.+H &mHEë"|2mL7IlB+ Hí ;|ÿÿ\|ü÷Ô÷ü÷ü÷ü÷üý÷ü÷ü€÷ü ÷üP÷aXLßHç€``úö9÷ü÷ü8÷`úÜ9÷fgFü÷ü8÷`ú¶ü÷ü8÷LßHçàþ,y$Lî |€ Rl0`²ü÷ü8÷LßHçàþ,y$Lî |€ Rl2`n$i,y÷ ü8÷* $i0°g ÿfÿ†Eú#JEúÿD#J`ú$i,y÷ * fEú`EúJ#Jü8÷`ùèy÷\Eú#Jü8÷`ùÌy÷]Eú#Jü8÷`ù°Si&m$i(ù÷#J(`Eú#J9÷ü8÷`ù€$i,| 9÷$i0Rj4ü8÷`ù\9÷LßHçàþ,y$Lî ü÷9÷ü0÷ü`÷ü8÷/ ae6Hzÿþ$Ÿ%KTl% k k k k k @$_gg | Rl6g | Rl8 + gêJ+ g + f¸J,f°0 R@‘k kÿÿf| Rl:`¤+ fP0-\°kf -Pf | Rl<`+ éà°,"g|@ Rl>+ gH`r, ",à"+ g`Z Kað†gjN Kaò`D ‹lBkB+ RlB`RlDJ,gS,g$|ÕË"|2mL7IB+ Hí Aúý`+HAúü´+H;|ÿÿ\Rl@ü÷üý÷aÜLßHç€``÷zü8÷ü÷ü÷|ORlL&l$mHaEøB,`.`û˜ü÷ü÷|O+ fU,#,#S,$J¬g2J+g÷.S+f÷&|"K$Ka–&ICìµÑg"Q`ø"‹f÷&mH`ôæ|RlF` | Rl.ü÷ü÷ü÷üà÷Rl*a &l$mH|OFü%B, * f*` * f*` *S f** g @g g` B,|% -Pf|ÿ *— f*"Ja¶$IaÀ` B€* ï f"Ja–$I gÒ`ÿÂ@ f |%`Ø gÐ gÈgÈ g4 -Pf* + f *s f|%B,"B,#`„``d +“ f *s f|%B,"B,#`\``< +S f *s f |%`<`` +¿ g +ó f*+ °* f"Ka²)I"Ja´$Ia¾```â`äJjfÖB€BB‚* ê,#â ,$g·üg+ f + â Ò²gSSk’`îB* è A# gB€+ ï gBf˜J,$gø°°f(*  fF"Jaò$I fþ. -PfÈ`,"K+ gaÐ&IB,$`®` aÀ&IS,$`ˆ|ÿ g”B+ ï f"K+ faŽ&I`Øa†&I`h"K,$·ügX+ fJgLSJ+g4S+f."K|+ g aRB,$`$+ fS,$a<&I`°B+ + f&S` &I)K g‚* g @g g|ÿJ*f6`L* ï g& *S g * g * g *— gf"J* faº$I`a²$Ia¼`"Ka˜)Ia¬ ,f ¬f9l`9l `|% ¬f9l `9l L`ðvAúð B€0,gÀü22@2<$@ç/:WLßgNwDßXÂúTÿB-AHÐ=zBN=z@P=| ˆ-|.NTWŒ-@”Aî€0<NAgH瀀 | `ð*H Hz&@ç/:çLßgNwDßXÑ®,Ñ®4Ñ®( ¡f aÞº0aáÈ`¬ ¢f aÞ¨2aãN`š £f aÞ–Baá¬`ˆ faß"`ÿ|aÞ|`ÿtB@094€y6€y8€y:=@HNs:üÅgNu&lAú pN@` `ÔHDIO*H0<"m6Eé " ¼!UDRáŠ]‚„ü 1BB¸0$:Ìg2 BpN@`aê!È0aEè ŠáŠQ‚„üÄüÔŠ!B1úž4!ü˜aJ¸fœB¸GúÚCë <€pN@`ad4+;B,g +x !ÍEëpBJjgREêQÈÿòGë(m6AIì p(ÛQÈÿü “!TCBg†aê.x2<ÀaD/:ÄNuHVMù,¯@î|MîHÖ?ÿ-_8-O<2<¢a`ø,áŽ,FÝÈB†-½ÈnúNu0<`0<F虀2<é™"x:Cé2A022€@02€Nua&a°‹fa†a†°faÿ|Cí!ÉaÌazNuB€Aúb°Pgaÿ^B‡EЇ Eê Rÿÿfð‡#à*(B(:亄c*„ÿBKúû‹" B*AMúO,Bœ°º´f†` (<•B*DB†º„baþöNu hÿÿ g2a8 ÿfaX`"aúJga.`aF°ŠfCéÿö`aÂa`Æ3|ÿÿ Nu~Aè Cé ((„ÿB*(B*DB†º„baþŠNu•ÊBB‚BƒIÕKõhHz"?$|x4YÕÀv5SƒfúS„fð$@Õüð#ÊP4¼ Ð#üTNu‹‹f ÷ ÿÿ' INET GETSTA AF**rrGETSTA SA33 brrIPSDLC AFDDrrIPSDLC SAMM6rrLOADV2 AFVVrrLOADV2 SA__'brrNTBLDTB AFˆˆrrNTBLDTB SA‘‘ ÿrrNWTEST AFººrrNWTEST SAÃÃrrOUTTERMSAFÌÌrrOUTTERMSSAÕÕrrSRSN SAÞÞ&9rrGETSTA ROrrIPSDLC ROrrLOADV2 ROrrNTBLDTB RO""rrNWTEST RO++rrOUTTERMSRO44rr=/*=/*†INET.GETSTA.AF=/*0=/* Chain file to assemble Get Station ID module=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to INET.GETSTA.LS=/*=/IFC \1ƒ=ARGINET.GETSTA.LS=/ENDIF=/*+=ASM INET.GETSTA.SA,INET.GETSTA.RO,\1;RZ=60=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*}=/*=ENDéééé éé"GETSTA„IDNTƒ1,1GetstationIDH*v*********************************************************************** GETSTA module(*ƒReturnsstationIDtorequestorinD1.*,*‹IF'STATION'parameterinIDLCPmodule=0*‹THEN*ŽstationID=0*‹ELSE-*ŽIF'SYSPOFF'parameterinSYSPARmodule=0:*ŽTHEN‚{ThismustbeaVM02boardperformingitsownlink}1*”ReadhardwareregistertodeterminestationID.3*ŽELSE‚{ThismustbeaVM02boardthatisdepending6*•onanotherVM02boardinthesamechassistoperform *•thelink.}/*”ReadthemailboxtodeterminethestationID.*I*^*********************************************************************** ŠSECTION8 ŠXDEFƒGETSTA#ŠXREFƒSTATIONŒSatisfiedinIDLCP.RO%ŠXREFƒSYSPOFFŒSatisfiedinSYSPOFF.RO!ŠXREFƒV2OFFŽSatisfiedinV2OFF.RO**‰NOLIST*‰INCLUDE9995.&.TR1.EQ*‰LISTŠNOLISTŠINCLUDE9995.&.TR1.EQŠLIST*-MAILBOXƒEQU„$800VM02relativeMailboxoffsetRUN‡EQU„$52554E00** Get segment parameter blockGETSPB„DC.Lƒ0’Taskname-meŠDC.Lƒ0’Sessionname-me7ŠDC.Wƒ1<<13!1<<8‰Options:log=phys,physaddrspecified%ŠDC.Wƒ1<<11ŽAttributes:memorymappedŠDC.Bƒ'MAIL'Segmentname)SEGADR„DC.LƒMAILBOX+V2OFF†SegmentaddressSEGLGH„DC.Lƒ$100Segmentlength*"* Release segment parameter block.RELSPB„DC.Lƒ0’Taskname-meŠDC.Lƒ0’SessionN/AŠDC.Wƒ0’OptionsŠDC.Wƒ0’SegmentattributesN/AŠDC.Bƒ'MAIL'SegmentnameŠDC.Lƒ0’LogicaladdressN/AŠDC.Lƒ0’SegmentlengthN/AE*-------------------------------------------------------------------- GETSTA„EQU„*!ŠCLR.L‚D1‘Assumeprimary(ID=0)%ŠMOVE.BSTATION(PC),D1…Wereweright?,ŠBEQ.S‚EXITBranchifyes-returntocaller*#* We must be on a secondary station7ŠTST.L‚SYSPOFFŒDowehaveanotherVM02performinglink?ŠBNE.S‚GET100Branchifyes*E*WeareonaVM02performingourownlink.‚Readhardwareregisterto*ƒdeterminestationID.ŠMOVE.B$F70018,D1'ŠAND.L‚#$3F,D1ŒMasktojuststationid.0ŠCMP.L‚D1,D1ŽSetequalconditioncodesforexit.+B4! ŠBRA.S‚EXIT*D* We are on either an EXORmacs or a VM02 system and we are dependingE*ƒuponanotherVM02systemtoperformourlink.‚WemustgetasegmentC*ƒcontainingthemailbox,readthemailboxtodeterminethestation*ƒID,andfreethesegment. GET100„EQU„*ŠMOVE.LA0,-(A7)*0* Get a segment which includes the VM02 mailbox.ŠLEA„GETSPB(PC),A0ŠMOVE.L#GTSEG,D0ŠTRAPƒ#12ŠBNE.S‚EXITAŽTakeerrorexitifcan'tgetsegment.*A* Insure that mailbox has 'RUN' in it - isolate station ID in D1.*ŠMOVE.LMAILBOX+V2OFF,D0‚Readthemailbox. ŠMOVE.LD0,D1=ŠAND.L‚#$FFFFFF00,D0†Insurethat'RUN'isin1stthreechars.ŠCMP.L‚#RUN,D0+ŠBNE.S‚EXITAŽErrorexitif'RUN'notthere.1ŠAND.L‚#$000000FF,D1†MaskofftojuststationID.** Release the segment.ŠLEA„RELSPB(PC),A0ŠMOVE.L#DESEG,D0ŠTRAPƒ#1*EXITA…MOVE.L(A7)+,A0** Return to caller.EXIT†RTSŠEND éééé=/*=/*†INET.IPSDLC.AF=/*D=/* Chain file to assemble module to Initialize SDLC primary station=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to INET.IPSDLC.LS=/*=/IFC \1ƒ=ARGINET.IPSDLC.LS=/ENDIF=/*+=ASM INET.IPSDLC.SA,INET.IPSDLC.RO,\1;RZ=80=/*{ Included files are:=/*ƒ9995.INET.INET.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*}=/*=ENDéééééé<.ISDLC„IDNT†1,0ƒInitializeSDLCprimarystation‰INCLUDE9995.INET.INET.EQ ‰INCLUDE9995.SDLCPRI.TEMPLTS.EQ‰PAGE ‰SECTIONƒ8*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*+*„InitializeSynchronousDataLinkTables™**Ä*F***********************************************************************‰XDEF†DLCBLDCB*$‰XREF†MAXSEC,DLBR,FSSTN,SSINC,TXRTRY1‰XREF†RCRTRY,MXOBF,RCTOV,RTRDLY,TXDLY,PFDLY,PNDLY‰XREF†SZDBUF,TXPDS*DLCBLDCBEQU‡**+*ˆInitializetheSDLCPrimaryControlBlock*7‰MOVE.L„XSDPRBG(A6),A5AddressofPrimaryControlBlock7‰MOVE.L„XSDSCBG(A6),SDPFSEC(A5)Addressof1stS.C.B.2‰MOVE.W„DLBR(PC),SDPBAUD(A5)DataLink'sBaudRate3‰MOVE.W„SZDB UF(PC),SDPRLG(A5)SizeofaDataBuffer*.*ˆInitializetheSDLCSecondaryControlBlocks*,‰MOVE.B„FSSTN(PC),D0ˆ1stSecondaryStation#2‰MOVE.W„MAXSEC(PC),D1‡NumberofSecondaryStations,‰MOVE.L„SDPFSEC(A5),A4†Addressof1stS.C.B.*0DLCBSEC‚MOVE.B„D0,SDSSEC(A4)‡SecondaryStation#0‰MOVE.B„TXRTRY(PC),SDSSRT(A4)#TransmitRetries/‰MOVE.B„RCRTRY(PC),SDSRRT(A4)#ReceiveRetries9‰MOVE.B„MXOBF(PC),SDSMXF(A4)‚Maximum#ofOutboundFrames-‰MOVE.W„RCTOV(PC),SDSTOC(A4)‚ReceiveTimeOut)‰MOVE.W„RTRDLY(PC),SDSTRT(A4)RetryDelay+‰MOVE.W„TXDLY(PC),SDSTTX(A4)‚TransmitDelay3‰MOVE.W„PFDLY(PC),SDSTPF(A4)‚PollPoweredOffDelay2‰MOVE.W„PNDLY(PC),SDSTPN(A4)‚PollPoweredOnDelay6‰MOVE.B„TXPDS(PC),SDSTPD+1(A4)NumberofTransmitPads‰CLR.B…SDSTPD(A4)Œ*;‰MOVE.B„#SDSCRDM,SDSCST(A4)ƒCurrentStateofThisSecondary*/‰ADD.B…SSINC(PC),D0ˆIncrementtoNextStation#‰ADD.L…#SDSLNG,A4Š**‰SUB.B…#1,D1AllSecondaries'Initialized?‰BGT.S…DLCBSEC**‰RTS›AllInitialized,Return‰ENDéE7=/*=/*†INET.LOADV2.AF=/*3=/* Chain file to assemble module to Load VM02 task=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to INET.LOADV2.LS=/*=/IFC \1ƒ=ARGINET.LOADV2.LS=/ENDIF=/*+=ASM INET.LOADV2.SA,INET.LOADV2.RO,\1;RZ=80=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.NTS.LIB.EQ=/*}=/*=ENDééééééNLOADV2„IDNTƒ1,0LoadVM02TaskŠTTL„LOADV2.SAŠLoadVM02*$* COPYRIGHTED 1982 BY MOTOROLA, INC.*K*v************************************************************************** LOADV2 Task.>*„BootsVM02board.‚ForuseinEXORMmacssystemrunning witha**„VM02board.‚RunsontheEXORmacssystem.*A*„1.‚AssignNETLOAD.SAwithsystemdefaultvolumeandusernumber*Šandcatalogofblanks.*@*„2.‚ReadthefirstrecordfromNETLOAD.SA.‚Thisrecordcontains9*Šthefilenameofa'.SY'filetoloadintoVM02.‚Assign*Šthe'.SY'file.*C*„3.‚Readtheloaderinformationblocktofindoutstartingaddress *Šandlength.*3*„4.‚Waitfor"WAIT"toappearintheVM02mailbox.*D*„5.‚Readinthe'.SY'fileintolocationspecifiedbyloaderinfor-&*Šmationblockplusanoffset(V2OFF).*.*„6.‚InitializesomeoftheSYSPARparameters:"*ŠMEMOFF‚-MemoryoffsetforVM02.#*ŠSYSPOFF-SYSPARoffsetforVM02.*A*„7.‚Puttransferaddressat$804,A7valueat$800,andSRvalue *Šat$80C.*!*„8.‚Put"REDY"atlocation$800.*1*„9.‚Delayuntil"RUN"isfoundatlocation$800.**„10.Terminate.H*^***********************************************************************)ŠXREFƒEDITFILE‹Satisfiedin0.&.UTILIB.RO*"ŠXREFƒV2OFFŽSatisfiedinILOADP.RO ŠXREFƒV2SYSP*#ŠXREFƒSYSPARSatisfiedinSYSPAR.RO ŠXREFƒMEMOFF ŠXREFƒSYSPOFF** Linked during SYSGEN**‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.IOE.EQ*‰INCLUDE9995.NTS.LIB.EQŠNOLISTŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.&.IOE.EQŠINCLUDE9995.NTS.LIB.EQŠLIST ŠSECTION0*B‰EQU„*’Programbaseaddress. ŠDS.Lƒ$20 STACK…EQU„*** Misc equates,V2STACKƒEQU„$800VM02initialstackpointer.8V2STATUS‚EQU„$2700ŽVM02status=supervisor,interrupt7 MAILBOXƒEQU„$800MailboxaddressSYSPARIƒEQU„-1*ŠOFFSET0’OffsetsfrommailboxŠDS.Lƒ1’Mailboxitself!V2GO†DS.Lƒ1’VM02exectionaddressV2A7†DS.Lƒ1’VM02stackaddress V2SR†DS.Wƒ1’VM02statusregister ŠSECTION0*WM`FhMp?xD* Temporary holding areas&V2ENTRYƒDS.Lƒ1’VM02executionaddress.*$*ˆFHS&IOSBlocksBasicInformation*&NETLUN„SET„3’LUNFor"NETLOAD.SA"File'LOADLUNƒSET„4’LUNFor"???????.SY"File*NETSFHSƒDC.WƒFHASGNAssign,ŠDC.WƒFOPPR+FOPISK‡Options=publicread,keyedŠDC.WƒNETLUNStatus/lunŠDC.Bƒ'„'Systemdefaultvolume#ŠDC.Wƒ-1‘SystemdefaultusernumberŠDC.Bƒ'ˆ'‰BlankcatalogdefaultŠDC.Bƒ'NETLOAD'‰FilenameŠDC.Bƒ'SA'ExtensionŠDC.Wƒ0’Reserved-mustbe0ŠDS.Bƒ8’Filler*!NETSIOSƒDC.WƒIOREADReadfunction"ŠDC.WƒIOPRANRandomrecordoptionsŠDC.WƒNETLUNStatus/lunŠDC.Wƒ0’Reserved-mustbe0ŠDC.Lƒ0’RandomrecordnumberŠDS.Lƒ4’FilltoendofP.B.*MSGIOS„DC.WƒIOWRITWriteŠDC.WƒIOPIMGImagemode(ŠDC.WƒLDFLUNLogginglogicalunitnumberŠDC.Wƒ0’Reserved-mustbe0ŠDS.Lƒ5’FilltoendofP.B.*LOADFHSƒDC.WƒFHASGNassign1ŠDC.WƒFOPPR+FOPCON‡options=publicread,contiguousŠDC.WƒLOADLUNŒstatus/lunŠDC.Bƒ'„'Systemdefaultvolume#ŠDC.Wƒ-1‘SystemdefaultusernumberŠDC.Bƒ'ˆ'‰Blankcatalogdefault'ŠDC.Bƒ'ˆ'‰Filename-dynamicallyfilledŠDC.Bƒ'SA'DefaultextensionŠDC.Wƒ0’Reserved-mustbe0ŠDS.Bƒ8’Filler*JIOPT†SETIOPBIN+IOPWAT+IOPNOC+IOPBLK+IOPRANBinary,wait,nocompladrblock!LOADIOSƒDC.WƒIOREADReadfunctionŠDC.WƒIOPTOptionsŠDC.WƒLOADLUNŒStatus/lunŠDC.Wƒ0’Reserved-mustbe0ŠDC.Lƒ0’RandomrecordnumberŠDS.Lƒ4’FilltoendofP.B.** Get Segment parameter blockGTSEGPBƒDC.Lƒ0’Taskname-meŠDC.Lƒ0’Sessionname-me8ŠDC.Wƒ1<<13!1<<8‰Options:log=phys,physaddrspecified.&ŠDC.Wƒ1<<11ŽAttributes:memorymapped.ŠDC.Bƒ'VM02'Segmentname.SEGADR„DC.Lƒ0’Segmentaddress.SEGLGH„DC.Lƒ0’Segmentlength.*&* Configure Directive parameter block.0CDIRPB„DS.Wƒ1’CDIRParameterBlock-directive#CDIRPBOƒDS.Wƒ1’OptionsCDIRPBEƒDS.Lƒ1’Entryaddress.*'* Error message handler parameter blockERRPB…DS.Lƒ2’ContainsD0ŠDC.Bƒ0’Options'ŠDC.BƒLDFLUNScreenlogicalunitnumberŠDC.Bƒ0’Queryreturncharacter ŠDC.BƒCDFLUNKeyboardLUN*ŠDC.Lƒ0’Beginningoftextplugpool(none)"ŠDC.Lƒ0’Endofusertextplugpool*0NETSBUFƒDS.Bƒ80‘BufferforreadingNETLOADfile.NETSBEND‚EQU„*-1*:LOADBUFƒDS.Bƒ256Bufferforreadingblocksfrom'SY'file.LOADBEND‚EQU„*-1*9MSG1S…DC.Bƒ'WaitingforVMboardtobecomeready',$0D,$0A MSG1E…EQU„*-1ŠDS…0*4MSG2S…DC.Bƒ'VMboardnowready-proceeding',$0D,$0A MSG2E…EQU„*-1ŠDS…0ŠPAGE9*-------------------------------------------------------- LOADV2„EQU„*ŠLEA„STACK(PC),A7"ŠLEA„B(PC),A6‹Programbaseaddress*3* Initialize buffer pointers in I/O parameter blockŠLEA„NETSBUF(PC),A0ŠLEA„NETSBEND(PC),A1#ŠMOVEM.LA0-A1,NETSIOS+IOSSAD-B(A6)*ŠLEA„LOADBUF(PC),A0ŠLEA„LOADBEND(PC),A1#ŠMOVEM.LA0-A1,LOADIOS+IOSSAD-B(A6)*6* Assign NETLOAD.SA and read first record into NETSBUF0ŠLEA„NETSFHS-B(A6),A0ƒOpenthe"NETLOAD.SA"FileŠMOVE.W#FHASGN,FHSCMD(A0)ŠFHSCALL ŠBEQ.S‚OK1Branchongoodassign ŠBSR„ERROR OK1‡EQU„*4ŠLEA„NETSIOS-B(A6),A0ƒAddressofIOSParameterBlockŠIOSCALL ŠBEQ.S‚OK1.5ŽBranchongoodread ŠBSR„ERROR OK1.5…EQU„*1ŠLEA„NETSFHS-B(A6),A0ƒClosethe"NETLOAD.SA"FileŠMOVE.W#FHCLOS,FHSCMD(A0)ŠFHSCALL*D* Assign the file that was specified on the first record of NETSBUF.ŠMOVE.LA6,-(A7)/ŠLEA„LOADFHS(PC),A6…FHSparameterblockaddress8ŠLEA„NETSBUF(PC),A0…Locationofpartiallyqualfilename ŠBSR„EDITFILEŠMOVE.L(A7)+,A6ŠAND.L‚#$FF8008FC,D0ŠBEQ.S‚OK2Branchifnoerror.(ŠMOVE.L#EM_NVE,D0‰Invalidentrymessage ŠBSR„ERROR OK2‡EQU„*ŠLEA„LOADFHS(PC),A0ŠTRAPƒ#3‘Assignthefile. ŠBEQ.S‚OK2.5ŽBranchifnoerror.ŠBSR„ERRORŽGotoerrorhangup. OK2.5…EQU„**F* Read the loader information block for the newly assigned '.SY' file.ŠLEA„LOADIOS(PC),A0ŠTRAPƒ#2‘ReadtheLIBŠBEQ.S‚OK3Branchifnoerror ŠBSR„ERROR OK3‡EQU„**-* Save transfer address as it appears in LIB.ŠLEA„LOADBUF(PC),A5 ŠMOVE.LLIBENT(A5),V2ENTRY-B(A6)*5* Calculate number of sectors to read for loading V2.ŠMOVE.LLIBSLEN(A5),D1,ŠLSR.L‚#8,D1ŽD1=numberofsectorstoread.*B* Grab a segment in VM02 memory big enough to read boot file into..ŠLSL.L‚#8,D1ŽD1=numberbytesinloadmodule.>ŠADD.L‚LIBSLSA(A5),D1…AddinunbiasedVM02relativeloadaddr.9ŠMOVE.LD1,SEGLGH-B(A6)„SaveaslengthofsegmentinP.B.@ŠMOVE.L#V2OFF,SEGADR-B(A6)SaveasbaseaddrofsegmentinP.B.ŠMOVE.L#GTSEG,D0ŠLEA„GTSEGPB(PC),A0ŠTRAPƒ#1‘Getthesegment.%ŠBEQ.S‚OK3.5ŽBranchifsegmentgotok ŠBSR„ERROR OK3.5…EQU„**+* Wait for "WAIT" to appear in VM02 mailboxŠMOVE.L#MAILBOX,A4%ŠADD.L‚#V2OFF,A4ŠBiasbyVM02offset.CHKWAITƒCMP.L‚#'WAIT',(A4))ŠBEQ.S‚MOVEITBranchifoktomoveinnow*8* Output message: 'Waiting for VM board to become ready'ŠLEA„MSG1S(PC),A1ŠLEA„MSG1E(PC),A2ŠLEA„MSGIOS(PC),A0ŠMOVEM.LA1-A2,IOSSAD(A0)ŠTRAPƒ#2ŠLEA„5000,A0Œ5secdelaytoA0ŠMOVE.L#DELAY,D0ŠTRAPƒ#1‘DelayandgotryagainŠBRA.S‚CHKWAIT MOVEIT„EQU„**@* If we had to wait for the VM board to become ready then output,*ƒmessage:'VMboardnowready-proceeding'ŠLEA„MSGIOS(PC),A0ŠTST.L‚IOSSAD(A0)(ŠBEQ.S‚MOVEIT2ŒBranchifweneverwaitedŠLEA„MSG2S(PC),A1ŠLEA„MSG2E(PC),A2ŠMOVEM.LA1-A2,IOSSAD(A0)ŠTRAPƒ#2‘Outputthemessage.*=* Initialize load address, and read sectors into VM02 memory.:MOVEIT2ƒLEA„LOADIOS(PC),A0…AddressofreadparameterblockŠMOVE.L#V2OFF,D0ŠVM02offset..ŠADD.L‚LIBSLSA(A5),D0…AddloadoffsetfromLIB*ŠMOVE.LD0,IOSSAD(A0)†Setstartingaddress.ŠMOVE.LSEGADR(PC),D0†Baseaddressofsegment.ŠADD.L‚SEGLGH(PC),D0ŠSUB.L‚#1,D0ŽEndingaddressŠMOVE.LD0,IOSEAD(A0).ŠMOVE.L#1,IOSRRN(A0)†Setrandomrecordnumber(ŠTRAPƒ#2‘ReadthefileintoVM02memory.ŠBEQ.S‚OK4Branchifnoerror. ŠBSR.S‚ERROR OK4‡EQU„**4* Initialize some of the stuff in SYSPAR thru a user*ƒdefineddirective.:ŠMOVE.W#SYSPARI,CDIRPB-B(A6)PutdirectivenumberinP.B.,ŠLEA„STRTADR(PC),A0…Directiveentryaddress.3ŠMOVE.LA0,CDIRPBE-B(A6)ƒPutitinparameterblock. ŠLEA„CDIRPB(PC),A0ŠMOVE.L#CDIR,D0ŠTRAPƒ#1‘Configuredirective!ŠBEQ.S‚OK5Branchifconfigureok ŠBSR.S‚ERROR OK5‡EQU„**0* Now invoke the directive that we just created.%ŠMOVE.L#SYSPARI,D0ˆDirectivenumber.ŠTRAPƒ#1‘GostuffSYSPAR.!ŠBEQ.S‚OK6Branchongoodreturn. ŠBSR.S‚ERROR OK6‡EQU„*** Disable the directive.6ŠBSETƒ#5,CDIRPBO+1-B(A6)SetoptiontodisableinP.B.<ŠMOVE.W#SYSPARI,CDIRPB-B(A6)PutdirectivenumberintoP.B.%ŠLEA„CDIRPB(PC),A0†Disabledirective.ŠMOVE.L#CDIR,D0ŠTRAPƒ#1*I* Put transfer address at $804, A7 value at $808, and SR value at $80C of*ƒVM02memory.ŠMOVE.L#MAILBOX,A4ŠADD.L‚#V2OFF,A43ŠMOVE.LV2ENTRY(PC),V2GO(A4)Plugtransferaddress.-ŠMOVE.L#V2STACK,V2A7(A4)‚Plugstackaddress.6ŠMOVE.W#V2STATUS,V2SR(A4)Plugstatusregistervalue.*D* Put "REDY" into mailbox and delay until "RUN " appears in mailbox.ŠMOVE.L#'REDY',(A4)*ŠLEA„100,A0100msdelaytoD00CHKWAIT2‚MOVE.L#DELAY,D0ŠDelaydirectivenumber(ŠMOVE.L(A4),D1ŒWaittillitsays'RUNx'*ŠAND.B‚#0,D1ŽNullthelowordercharacter.ŠCMP.L‚#'RUN',D1%ŠBEQ.S‚DUNBranchifoktoterminate.ŠTRAPƒ#1ŠBRA.S‚CHKWAIT2 DUN‡EQU„** * Terminate ŠERQ.TERM** Error termination hangups.;ERROR…MOVEM.LD0/A0,ERRPB-B(A6)SaveregsinerrormsgP.B.)ŠMOVE.L#2,D0ŽCodeforerrormessagecallŠLEA„ERRPB(PC),A0ŠTRAPƒ#4*ŠMOVEM.LERRPB(PC),A0/D0ƒRestoreregisters7ŠMOVEM.LD0/A0,-(A7)‡Saveregistersonstackfordebug. ŠERQ.ABORTŠPAGE%*************************************%* Code for user configured directive.*ƒStuffsthingsintoSYSPAR.* STRTADRƒEQU„*1ŠMOVE.L#V2OFF,MEMOFF†MemoryoffsetforV2board.2ŠMOVE.L#V2OFF,SYSPOFF…SYSPARoffsetforV2board."ŠMOVE.L#V2SYSP,D0‰SYSPARonVM02.%ŠSUB.L‚#SYSPAR,D0‰SYSPARonEXORmacs.'ŠADD.L‚D0,SYSPOFF‰AdjustSYSPARoffset.ŠRTE*PATCH…DS.Bƒ50‘Patcharea ŠEND„LOADV2=/*=/*†INET.NTBLDTB.AF=/*<=/* Chain file to assemble module to build NNT, NAT, and LCT=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to INET.NTBLDTB.LS=/*=/IFC \1ƒ=ARGINET.NTBLDTB.LS=/ENDIF=/*-=ASM INET.NTBLDTB.SA,INET.NTBLDTB.RO,\1;RZ=60=/*{ Included files are:=/*ƒ9995.NTS.NNT.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.INET.INET.EQ=/*ƒ9995.&.TR1.EQ=/*}=/*=ENDéééééé €'NTBLDTB‚IDNT†1,0…BUILDNNT,NATandLCT*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*?*ˆSubroutinetobuildNetworkNameTable,NetworkAddressTable*˜andLogicalConnectionTable*ŽforNetworkServices**ˆEntryRegisters:*’A6=PointertoDATAsegment'*’A5=Pointerto.NTWsegment‚(tables)*‰INCLUDEƒ9995.NTS.NNT.EQ‰INCLUDEƒ9995.NTS.NAT.EQ‰INCLUDEƒ9995.NTS.LCT.EQ‰INCLUDEƒ9995.INET.INET.EQ‰INCLUDEƒ9995.&.TR1.EQ*‰PAGE ‰SECTIONƒ8‰OPT‡PCS*‰XREF†MAXSEC,FSSTN,SSINC ‰XDEF†NTBLDTB**ˆBuildNetworkNameTable*)NTBLDTB‚MOVE.L„XNNTBG(A6),A4‡StartofNNT"‰MOVE.L„#'!NNT',NNT(A4)…Eyecatcher)‰MOVE.L„XNNTSZ(A6),NNTTSIZ(A4)tablesize+‰MOVE.B„XSTATION(A6),NNTHSID(A4)StationID*.*ˆPutallentriesinNNTFHDR(freeentry)list'‰LEA‡NNTFHDR-NNTNEXT(A4),A0‚Listheader ‰LEA‡NNTENTRY(A4),A1…Firstentry‰MOVE.L„A4,D1Startoftable"‰ADD.L…NNTTSIZ(A4),D1†+size=end7‰SUB.L…#NNTENTRY,D1ˆend-entrysize=lastentrystart=NTBNNT2‚MOVE.L„A1,NNTNEXT(A0)†Savenextentryaddrincurrent.‰MOVE.L„A1,A0nextentrybecomescurrententry"‰LEA‡NNTESIZ(A0),A1†newnextentry‰CMP.L…A1,D1Endoftable?‰BGT‡NTBNNT2BranchifNO**ˆBuildNetworkAddressTable*"‰MOVE.L„XNATBG(A6),A4‡StartofNAT"‰MOVE.L„#'!NAT',NAT(A4)…Eyecatcher)‰MOVE.L„XNATSZ(A6),NATTSIZ(A4)tablesize*.*ˆPutallentriesinNATFHDR(freeentry)list'‰LEA‡NATFHDR-NATNEXT(A4),A0‚Listheader ‰LEA‡NATENTRY(A4),A1…Firstentry‰MOVE.L„A4,D1Startoftable"‰ADD.L…NATTSIZ(A4),D1†+size=end7‰SUB.L…#NATENTRY,D1ˆend-entrysize=lastentrystart=NTBNAT2‚MOVE.L„A1,NATNEXT(A0)†Savenextentryaddrincurrent.‰MOVE.L„A1,A0nextentrybecomescurrententry"‰LEA‡NATESIZ(A0),A1†newnextentry‰CMP.L…A1,D1Endoftable?‰BGT‡NTBNAT2BranchifNO** *ˆBuildLogicalConnectionTable*"‰MOVE.L„XLCTBG(A6),A4‡StartofLCT"‰MOVE.L„#'!LCT',LCT(A4)…Eyecatcher)‰MOVE.L„XLCTSZ(A6),LCTTSIZ(A4)tablesize*.*ˆPutallentriesinLCTFHDR(freeentry)list‰F’;šA¢;ª'‰LEA‡LCTFHDR-LCTNEXT(A4),A0‚Listheader ‰LEA‡LCTENTRY(A4),A1…Firstentry‰MOVE.L„A4,D1Startoftable"‰ADD.L…LCTTSIZ(A4),D1†+size=end7‰SUB.L…#LCTENTRY,D1ˆend-entrysize=lastentrystart=NTBLCT2‚MOVE.L„A1,LCTNEXT(A0)†Savenextentryaddrincurrent.‰MOVE.L„A1,A0nextentrybecomescurrententry"‰LEA‡LCTESIZ(A0),A1†newnextentry‰CMP.L…A1,D1Endoftable?‰BGT‡NTBLCT2BranchifNO‰PAGE*0*ˆBuildtableentriesforSystemServiceControl*œandNetworkControl*-‰MOVE.L„#SSCTASK,D5‰Startofname=taskname7‰MOVE.B„XSTATION(A6),D7‡StationIDwillbelast2chars‰MOVE.B„#SSCNAU,D4ŠNAUforSSCT-‰BSR.S…NTBENNTBuildNetworkNameTableentry.‰BSR‡NTBENATBuildNetworkAddressTableentry**ˆBuildLCTentryforSSC‰CLR.L…D3’LCC=0forself‰BSR‡NTBELCTBuildentry(‰BSET†#LCTCSSCT,LCTCSTA(A1)SetSCTflag*,‰MOVE.L„A3,A5SaveNATentryaddressofSSCT‰MOVE.L„#NWCTASK,D5‰TASKNAME‰MOVE.B„#NWCNAU,D4ŠNAUforNWCT-‰BSR.S…NTBENNTBuildNetworkNameTableentry.‰BSR‡NTBENATBuildNetworkAddressTableentry**ˆBuildLCTentryforNWC‰CLR.L…D3’LCC=0forself‰BSR‡NTBELCTBuildentry(‰BSET†#LCTCSNWC,LCTCSTA(A1)SetNWCflag**ˆTestforprimaryorsecondary.‰MOVE.L„A5,A3RestoreSSCT'sNATentryaddress.‰MOVE.L„NATNNT(A3),A0‡SSCT'sNNTentryaddress!‰MOVE.L„#SSCNAU,D4ŠSSCT'sAddress)‰MOVE.L„NNTNAM(A0),D5‡1st4charsofname‰TST.B…D7’Islocaltheprimary?‰BEQ.S…NTBPRIMBranchifyes*4*ˆIflocalissecondary,buildLCTentryforprimary/‰MOV E.W„#'00',D6Œlast2charsofprimary'sname*‰MOVE.L„#1,D3LCC=1forconnecttoprimary(‰MOVE.L„#0,D7StationID=0forprimary‰BSR‡NTBELCTBuildLCTentry(‰BSET†#LCTCSSCT,LCTCSTA(A1)SetSCTflagNTBRTNƒRTS›return-finished*A*ˆIflocalisprimary,buildLCTandNNTentryforeachsecondary5NTBPRIM‚MOVE.W„MAXSEC(PC),D2‡Max#secondarystations.‰MOVE.B„FSSTN(PC),D7ˆFirstsecondarystation# ‰BRA.S…NTBB4(NTBB2„MOVE.B„D7,D3usestationIDasLCC‰BSR.S…NTBENNTbuildNNTentry‰BSR‡NTBELCTbuildLCTentry(‰BSET†#LCTCSSCT,LCTCSTA(A1)SetSCTflag1‰ADD.B…SSINC(PC),D7ˆnextsecondarystationnumber&NTBB4„DBRA†D2,NTBB2Œloopbackfornext‰RTS‰PAGE**ˆSubroutinetoBuildNNTentry*@*ˆonentry:D4=NetworkAddr‚D5=1st4charsofname‚D7=stationID*5*ˆonexit:‚D6=statIDinascii(last2charsofname)*’A2=PointertonewNNTentry*’A0,A1andD0used*8NTBENNT‚MOVE.L„XNNTBG(A6),A1‡StartofNetworkNameTable%‰MOVE.L„NNTFHDR(A1),D0†Getfreeentry,‰BEQ‡NTBCRASHŒERRORifnomoreentriesexist&‰MOVE.L„D0,A2PointertonewNNTentry9‰MOVE.L„NNTNEXT(A2),NNTFHDR(A1)Update'free'listheader*)‰MOVE.L„D5,NNTNAM(A2)‡1st4charsofname,‰MOVE.B„D7,D0StationIDusedaslast2chrs-‰LEA‡NNTNAM+4(A2),A0…Wheretoputasciivalue%‰BSR‡CVHEX2Žconverttoasciiforname‰MOVE.W„NNTNAM+4(A2),D6…Saveit%‰MOVE.B„D4,NNTNAU(A2)‡NetworkAddress ‰MOVE.B„D7,NNTSID(A2)‡StationID-‰BSET†#NNTSACT,NNTSTAT(A2)Statusis'active'*&*ˆPutnewentryin'active'entrylist,‰MOVE.L„NNTAHDR(A1),NNTNEXT(A2)‚addtochain$‰MOVE.L„A2,NNTAHDR(A1)†Updateheader‰RTS‰PAGE**ˆSubroutinetoBuildNATentry*)*ˆonentry:D4=NetworkAddr…D7=StationID*’A2=PointertoNNTentry*&*ˆonexit:‚A3=PointertonewNATentry*’A0andD0used*8NTBENAT‚MOVE.L„XNATBG(A6),A0‡StartofNetworkNameTable%‰MOVE.L„NATFHDR(A0),D0†Getfreeentry,‰BEQ‡NTBCRASHŒERRORifnomoreentriesexist&‰MOVE.L„D0,A3PointertonewNATentry9‰MOVE.L„NATNEXT(A3),NATFHDR(A0)Update'free'listheader*%‰MOVE.B„D4,NATNAU(A3)‡NetworkAddress ‰MOVE.B„D7,NATSID(A3)‡StationID*‰MOVE.B„#1,NATLCC(A3)‡LogicalConnectCode-‰BSET†#NATSACT,NATSTAT(A3)Statusis'active'*&*ˆPutnewentryin'active'entrylist,‰MOVE.L„NATAHDR(A0),NATNEXT(A3)‚addtochain$‰MOVE.L„A3,NATAHDR(A0)†Updateheader7‰MOVE.L„A3,NNTNAT(A2)‡SavepointertothisentryinNNT7‰MOVE.L„A2,NATNNT(A3)‡SavepointertoNNTinthisentry‰RTS‰PAGE**ˆSubroutinetoBuildLCTentry*"*ˆonentry:D3=LCC’D4=NetworkAddr0*’D5=1st4charsofname‚D6=last2charsofname*’D7=StationID*’A3=PointertoNATentry*&*ˆonexit:‚A1=PointertonewLCTentry *’A0used*1NTBELCT‚MOVE.L„XLCTBG(A6),A0‡PointertoLCTtable/‰MOVE.L„LCTFHDR(A0),D0†Getentryfromfreelist)‰BEQ.S…NTBCRASHŒERRORifnoentriesexist&‰MOVE.L„D0,A1PointertonewLCTentry0‰MOVE.L„LCTNEXT(A1),LCTFHDR(A0)Updatefreelist*%‰CLR.L…LCTLOTCB(A1)ˆClearTCBpointer1‰MOVE.B„D3,LCTLOLCC(A1)…SaveLogicalConnectCode#‰CMP.B…NATLCC(A3),D3‡IsLCC9?‰BLE.S…CVHC2B„branchifNO‰ADD.B…#7,D0…changetoalpha CVHC2BƒADD.B…#$30,D0ƒASCIIdigit+‰MOVE.B„D0,(A0)+‚Savecharinoutputstring‰RTS‰ENDééééééé=/*=/*†INET.NWTEST.AF=/*)=/* Chain file to assemble INET.NWTEST.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to INET.NWTEST.LS=/*=/IFC \1ƒ=ARGINET.NWTEST.LS=/ENDIF=/*'=ASM INET.NWTEST.SA,INET.NWTEST.RO,\1;R=/*{ Included files are:=/*ƒ9995.&.TCB.EQ=/*}=/*=ENDéééé éé²/NWTEST„IDNTƒ1,0TRAP#1toseeifnetworkisupŠXDEFƒNWTESTAD‹Entrypoint*#ŠXREFƒNWPSEGSatisfiedinSYSPAR.RO#ŠXREFƒNWTSEGSatisfiedinSYSPAR.RO**‰NOLIST*‰INCLUDE9995.&.TCB.EQ*‰LISTŠNOLISTŠINCLUDE9995.&.TCB.EQŠLIST ŠSECTION8*E* User configured directive to determine if the network is up or not.(*ƒRetruncodes:‚=0‚Ifnetworkisnotup.*’<>0Ifnetworkisup.*NWTESTAD‚CLR.W‚D05ŠMOVE.WNWPSEG,D0ŠReturnnonzeroifanysegmentlimit%ŠOR.WƒNWPSEG+2,D0ˆfieldsarenonzero.ŠOR.WƒNWTSEG,D0ŠOR.WƒNWTSEG+2,D01ŠMOVE.WD0,TCBRTCD(A6)…StuffreturncodeintoTCBŠRTE—ReturnfromdirectiveŠEND ééééé»=/*=/*†INET.OUTTERMS.AF=/*C=/* Chain file to assemble module to output message to the terminal=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to INET.OUTTERMS.LS=/*=/IFC \1ƒ=ARGINET.OUTTERMS.LS=/ENDIF=/*+=ASM INET.OUTTERMS.SA,INET.OUTTERMS.RO,\1;R=/*{ Included files are:=/*ƒ--none--=/*}=/*=ENDéé ééééÄ-OUTTERMS‚IDNTƒ1,0PutMessageouttoterminal**ˆPUTMESSAGEOUTTOTERMINAL* ‰OFFSET„0OUTPB„DS.W†1ˆ2=WRITECOMMAND‰DS.W†1ˆ8=IMAGEMODE ‰DS.W†1ˆ6=LU‰DS.W†3OUTPBSA‚DS.L†1‰STARTADDRESSOUTPBEA‚DS.L†1‰ENDADDRESS‰DS.L†2 ‰SECTIONƒ8**„ONENTRY:‚A1=STARTADDRESS*A2=ENDADDRESS*‰XDEF†OUTTERMSOUTTERMSLEA‡OUTPB(A6),A0‰MOVE.L„A1,OUTPBSA(A0)‰MOVE.L„A2,OUTPBEA(A0)‰MOVE.W„#2,(A0)…COMMAND‰MOVE.W„#8,2(A0)„OPTIONS‰MOVE.W„#6,4(A0)„LU ‰CLR.L…6(A0) ‰CLR.W…10(A0) ‰CLR.L…20(A0)‰TRAP†#2‰RTS‰ENDéééééÍ1SRSNALLƒIDNTƒ1,0TRAP#1tostartupSDLCandNTSŠPAGE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*5*„TRAP#1toStartUpSynchronousDataLinkControl** andNetworkServices**Ä*F************************************************************************‰NOLIST*‰INCLUDE9995.&.TCB.EQ*‰INCLUDE9995.&.TST.EQ*‰INCLUDE9995.NTS.NAT.EQ*‰INCLUDE9995.NTS.LCT.EQ*‰INCLUDE9995.NTS.SMSG.EQ*‰INCLUDE9995.N TS.NTW.EQ*‰INCLUDE9995.&.STR.EQ*‰INCLUDE9995.&.TR1RTCD.EQ*‰LISTŠNOLISTŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.TST.EQŠINCLUDE9995.NTS.NAT.EQŠINCLUDE9995.NTS.LCT.EQŠINCLUDE9995.NTS.SMSG.EQŠINCLUDE9995.NTS.NTW.EQŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TR1RTCD.EQŠLISTŠPAGE3SEGNAM„EQU„'.NTW'Nameofsegmentcontainingtables)MAILBOXƒEQU„$800ˆVM02toEXORmacsmailbox**‰INCLUDE9995.INET.INET.EQŠINCLUDE9995.INET.INET.EQŠPAGE*"*ˆTemporaryTRAP#1ExecDirective**ˆDirectiveƒFunction<*ˆ---------ƒ------------------------------------------------9*‰SRSNALL„NetworkStartup--Willsavepointerstotables0*”andbufferqueue,deletethe.NTWsegmentfrom1*”ININET'ssegmenttable,andcallSDLC'sStartup *”routine.*+*ˆONENTRY:A6=Callingtask'sTCBaddress*ŒTCBA6(A6)=INITDATAsegment**ˆRETURNCODES:8*’RTCDPBLK-02ƒParameterblocknotinuser'saddrspace5*’RTCDTASK-03ƒSystemServiceControltasknotfound3*’RTCDNFND-07ƒSegmentcontainingtablesnotfound* ŠSECTION8ŠOPT„PCSŠXREF.SSDLCPCBŠXREF.SNNTBEGŠXREF.SNATBEGŠXREF.SLCTBEGŠXREF.SFREEQHDŠXREF.SDBUFSZŠXREF.SFQBCNT ŠXREF.SFQLWMŠXREF.SNWTSEGŠXREF.SNWPSEGŠXREF.SFREEQND(ŠXREF.SSBUSRACK‹SatisfiedinSDLCPRI.ROŠXREF.SSBSDLCFLŠXREF.SSBSDLCKL$ŠXREFƒV2RQHDSatisfiedinSYSPARV.RO ŠXREFƒSTRSDLC ŠXREFƒSYSTYPE* ŠXDEFƒSTRTADR ŠXDEFƒDLNKRQD*:STRTADRƒMOVE.LTCBA6(A6),D6‡AddressofsharedDATAsegmentÖQß8çBïH÷'#ŠMOVE.L#DATAEND,D5ˆsizeofsegment7ŠTR0$.LOGPHYConverttophysicaladdress$ŠBRA.S‚STRTA2BranchifgoodsegmentŠNOPAŠMOVE.W#RTCDPBLK,TCBRTCD(A6)ERROR-BadparameterblockaddressŠRTE0STRTA2„MOVE.LD6,A4ŽPhysicaladdressofDATAseg*2*ˆRemoveSegmentContainingTablesfromtask'sTST*#ŠMOVE.W#SEGMENTS-1,D0…LoopCounter"ŠMOVE.LTCBTST(A6),A1†StartofTST/ŠLEA„TSTMMU(A1),A2†StartofsegmentdefinitionsŠMOVE.L#SEGNAM,D1‰Segmentname+STRTA4„CMP.L‚TSTANAME(A2),D1„LookformatchŠBEQ.S‚STRTA5BranchiffoundŠLEA„TSTCTL+2(A2),A2„NextentryŠDBRAƒD0,STRTA47ŠMOVE.W#RTCDNFND,TCBRTCD(A6)ERROR-SegmentnotfoundŠRTE*2STRTA5„CLR.L‚TSTAATTR(A2)‡Clear'inuse'attribute$ŠCLR.W‚TSTCTL(A2)‰ClearControlbyte5ŠMOVE.LTSTLB(A2),NWTSEGƒSavelimitsoftablesegment$ŠMOVE.WTSTPO(A2),D0‡Physicaloffset.ŠADD.W‚D0,NWTSEGŠAddphysoffsettofirstpage/ŠADD.W‚D0,NWTSEG+2ˆAddphysoffsettolastpage+ŠSUB.B‚#1,TSTCSEGS(A1)„Decrement#segments*0*ˆRemoveSegmentContainingSDLCfromtask'sTST*#ŠMOVE.W#SEGMENTS-1,D0…LoopCounter"ŠMOVE.LTCBTST(A6),A1†StartofTST/ŠLEA„TSTMMU(A1),A2†StartofsegmentdefinitionsŠMOVE.L#'SDLC',D1‰Segmentname+STRTA7„CMP.L‚TSTANAME(A2),D1„LookformatchŠBEQ.S‚STRTA7AŒBranchiffoundŠLEA„TSTCTL+2(A2),A2„NextentryŠDBRAƒD0,STRTA7)ŠBRA.S‚STRT7BIfsegmentnothere-goon*3STRTA7AƒCLR.L‚TSTAATTR(A2)‡Clear'inuse'attribute$ŠCLR.W‚TSTCTL(A2)‰ClearControlbyte9ŠMOVE.LTSTLB(A2),NWPSEGƒSavelimitsofproceduresegment$ŠMOVE.WTSTPO(A2),D0‡Physicaloffset.ŠADD.W‚D0,NWPSEGŠAddphysoffsettofirstpage/ŠADD.W‚D0,NWPSEG+2ˆAddphysoffsettolastpage+ŠSUB.B‚#1,TSTCSEGS(A1)„Decrement#segments*(*ˆSavePointerstoTablesinSYSPARArea* STRT7B„EQU„*2ŠNOPROC.STRT7.4LINKONLYƒDon'tprocessif'INETV2',ŠMOVE.LXNNTBG(A4),NNTBEG‚NetworkNameTable/ŠMOVE.LXNATBG(A4),NATBEG‚NetworkAddressTable2ŠMOVE.LXLCTBG(A4),LCTBEG‚LogicalConnectionTable6ŠMOVE.WXFBQDSZ(A4),DBUFSZSizeofdataareainbuffer*----^ STRT7.4ƒEQU„**----v2ŠNOPROC.STRT7.5LINKMAINƒDon'tprocessif'INETEX'6ŠMOVE.LXSDPRBG(A4),SDLCPCBSDLCPrimaryControlBlock,ŠMOVE.LXFBQBG(A4),FREEQHDFreeBufferQueue,ŠMOVE.WXFQB CNT(A4),FQBCNTNumberofbuffers.ŠMOVE.WXFQLWM(A4),FQLWMƒFreeQlowwatermark**„SAVEENDOFFREEQ*"ŠMOVE.LFREEQHD,A0‰StartoffreeQ"STRTA7CƒMOVE.L(A0),D0ŒNEXTBUFFER%ŠBEQ.S‚STRTA7DŒBranchifendofchain ŠMOVE.LD0,A0ŽNeedaddrinaregŠBRA„STRTA7CŒLoopbackSTRTA7DƒMOVE.LA0,FREEQND*----^ STRT7.5ƒEQU„*ŠPAGE*----v-ŠNOPROC.V2LINKONLYˆDon'tprocessif'INETV2'*,*ˆSaveTCB'sofSSCTandNWCTinNATandLCT*2ŠLEA„XSSCTSK(A4),A0…Pointtotasknameandsession ŠTR0$.GETTCB ŠBRA.S‚STRTA88ŠMOVE.L#RTCDTASK,TCBRTCD(A6)ERROR-SSCtasknotfound&ŠLEA„0,A0ZeroaddressmeansNOTfound*.STRTA8„MOVE.LA0,A3ŽSaveaddressofSSCT'sTCB*2ŠLEA„XNWCTSK(A4),A0…Pointtotasknameandsession ŠTR0$.GETTCB ŠBRA.S‚STRTA98ŠMOVE.L#RTCDTASK,TCBRTCD(A6)ERROR-NWCtasknotfound&ŠLEA„0,A0ZeroaddressmeansNOTfound*.STRTA9„MOVE.LA0,A2ŽSaveaddressofNWCT'sTCB2ŠMOVE.LNATBEG,A5ŠPointertoNetworkAddressTable/ŠLEA„NATAHDR-NATNEXT(A5),A1Firstentrypointer0STRTA10ƒMOVE.LNATNEXT(A1),A1…NextentrypointerŠMOVE.LA1,D0Ždoesitexist?,ŠBEQ.S‚STRTA20ŒBranchifallentrieschecked/ŠCMP.B‚#SSCNAU,NATNAU(A1)IsthisSSCT'sentry?ŠBNE.S‚STRTA12ŒBranchifNOŠMOVE.LA3,A0ŽSSCT'sTCBŠBRA.S‚STRTA146STRTA12ƒCMP.B‚#NWCNAU,NATNAU(A1)IsthisNWCT'sentry?ŠBNE.S‚STRTA10ŒBranchifNOŠMOVE.LA2,A0ŽNWCT'sTCB*-STRTA14ƒMOVE.LA0,NATTCB(A1)†SaveTCBaddressŠBEQ.S‚STRTA10ŒBranchifnoTCB,ŠMOVE.LA1,TCBNAU(A0)†SaveNATentryaddress'ŠMOVE.LNATLCTLK(A1),A5„FirstLCTentry&STRTA16ƒMOVE.LA5,D0ŽDoesentryexist?ŠBEQ.S‚STRTA10ŒBranchifNO(ŠMOVE.LA0,LCTLOTCB(A5)„SaveTCBaddress&ŠMOVE.LLCTLULNK(A5),A5„NextLCTentryŠBRA„STRTA16ŒGocheckitŠPAGE*----v STRTA20ƒEQU„*2ŠNOPROC.STRTA25LINKMAINƒDon'tprocessif'INETEX'*"*ˆCallSDLCStartup--thenreturn* ŠBSR„STRSDLC*----^ STRTA25ƒEQU„*ŠRTEV2ˆEQU„***ˆCallSDLCStartup* ‰XREF†STRSDLC ‰BSR‡STRSDLC*,*ˆStuff'RUN'intoVM02toEXORmacsmailbox.*ˆallowingEXORmacsLOADV2tocontinuerunning*ˆ--thenreturn*‰MOVE.L„#'RUN',MAILBOX2‰MOVE.B„XSTATION(A4),MAILBOX+3‚Savestationnumber‰RTEŠPAGE4* INETV2 code - Executed only if 'LINKONLY' (INETV2)5*****************************************************9*RoutinerunsincontinuouslooplookingatV2RQHD.‚When9*ƒanitemappearsinthequeue,itpullsitoff,examines6*ƒthecommandandcallstheappropriateSDLCfunction.**‰Command“Function*‹NTWCACKR($A1)ŒSBUSRACK*‹NTWFLUSH($A2)ŒSBSDLCFL1*‹DLCQXMƒ($01)ŒSBPTXMQ(PutbufferinXMITQueue)*5******************************************************* Configured directive.* ŠXDEFƒDLNKRQD.DLNKRQDƒMOVE.LV2RQHD,D0ŠPickupheadoflist.ŠBCLRƒ#31,D0ClearTASbit.*ŠTST.L‚D0‘Dowehaveanythingonthelist?ŠBEQ.S‚DLNKRQDŒBranchifno.**SPIN†TAS„V2RQHDBlocktheotherprocessor. ŠBNE.S‚SPIN*ŠMOVE.LV2RQHD,D0ŠHeadoflist.ŠBCLRƒ#31,D0ClearTASbit.ŠMOVE.LD0,A0ŽBufferaddress. ŠMOVE.L(A0),-(A7)‰*›2/2/83SCB.ŠBSETƒ#31,(A7)‹*›2/2/83SCB.;ŠMOVE.L(A7)+,V2RQHD‡Pullfirstitemoffchain.‚2/2/83SCB.-ŠBCLRƒ#31,V2RQHD‰UnlockthequeueŒ2/2/83SCB. ŠCLR.L‚D6 ŠCLR.L‚D7 ŠMOVE.BV2CMD(A0),D6‡Getcommand#ŠMOVE.WV2STA(A0),D7‡GetstationID*(ŠCMP.B‚#NTWCACKR,D6‡Iscmd=ACKnowledge?ŠBNE.S‚DLNKRQ2ŒBranchifNO#ŠTR0.PTFRBFReturnbuffertofreeQ"ŠMOVE.WD7,D0ŽPutstationIDinD0$ŠBSR„SBUSRACK‹ACKcommandfromNWCT.ŠBRA„DLNKRQDŒReturntoloop*)DLNKRQ2ƒCMP.B‚#NTWFLUSH,D6‡Iscmd=FLUSH?ŠBNE.S‚DLNKRQ3ŒBranchifNO#ŠTR0.PTFRBFReturnbuffertofreeQ"ŠMOVE.WD7,D1ŽPutstationIDinD1&ŠBSR„SBSDLCFL‹FLUSHcommandfromNWCT.I* Ed Skinner, March 2, 1983 - SDLCFL passes back a return code indicatingH*whetherornotthebufferwasproperlyenqueued.‚IfthebufferwasnotJ* handled (because the secondary station ID was incorrect), this routine'sB* absence of error checking will cause the system to lose buffers.L* Additionally, SDLCFL is messed up  right now, and doesn't return the properE*indicationinallcases.‚Pleaseseemeifyouhaveanyquestionsin* this regard...M* This module (SRSN) and another (48.NTS.NWCFLSH.AI) are the only two callersI* of SDLCFL and are, therefore, the only modules requiring maintenance in* this regard as of this date. ŠBRA„DLNKRQDŒReturntoloop*'DLNKRQ3ƒCMP.B‚#DLCSTOP,D6ˆIscmd=STOP?ŠBNE.S‚DLNKRQ4ŒBranchifNO#ŠTR0.PTFRBFReturnbuffertofreeQŠCLR.L‚D1‘D1notused"ŠBSR„SBSDLCKL‹KILLcommandtoSDLCŠBRA„DLNKRQDŒReturntoloop*(DLNKRQ4ƒCMP.B‚#DLCQXM,D6‰Isit'XMIT'?ŠBNE.S‚DLNKRQ6ŒBranchifNO'ŠTR0.PTXMQ‘PutbufferontransmitQueueH* Ed Skinner, March 2, 1983 - PTXMQ passes back a return code indicatingH*whetherornotthebufferwasproperlyenqueued.‚IfthebufferwasnotI* queued (because the secondary station ID was incorrect), this routine'sB* absence of error checking will cause the system to lose buffers.K* Additionally, PTXMQ is messed up right now, and doesn't return the properE*indicationinallcases.‚Pleaseseemeifyouhaveanyquestionsin* this regard...N* Apparently this module (SRSN) is the only one using PTXMQ and is, therefore,2* the only one needing correction as of this date.ŠBRA„DLNKRQDŒKeeplooping.*%*ƒNoknowncommand--freethebuffer*.DLNKRQ6ƒTR0.PTFRBFReturnbuffertofreequeueŠBRA„DLNKRQDŒKEEPLOOPINGB*Thisroutineneverterminates.‚ItstaysinDLNKRQDloopforever.ŠENDé:1GETSTA ASREL' INET GETSTA SA&6(…Get station ID62pSYSPOFF pV2OFF HGETSTA 0pSTATION („J3€H !MAIL*MAILB:A ÌgJJ¹(f9÷F3 ?²`2/Aúÿ¬pNAf$ 9*"€ÿÿÿ €RUNfÿAúÿžpNA _Nu4ééééééÿ K1ISDLC ASREL' INET IPSDLC SA&H(…Initialize SDLC primary station¯2pSSINC pMXOBF pFSSTN pMAXSEC pSZDBUF pPFDLY pPNDLY pRTRDLY pTXDLY HDLCBLDCB pRCRTRY pTXPDS pTXRTRY pRCTOV pDLBR (tX3JI *n+n$D;zA ôR;zA îL:A è2:A ä(mD€zA ÚzA ÔzA Î9zA È9zA ÂD3$ 9zA ¼ 9zA ¶ 9zA °zA ªB,|%Ð:A šÙüXSn°Nu4éééééé:1LOADV2 ASREL' INET LOADV2 SA'(…Load VM02 TaskH2pSYSPOFF pMEMOFF pSYSPAR pV2OFF pV2SYSP pEDITFILE G3À B€@ ÿÿ NETLOAD SA`@F3 ÿÿ SA`A!VM02G3PWaiting for VM board to become reaF3dy VM board now ready - proceeding OúýŠMúýAúþ^Cúþ©Hî¸Aúþ I3Cúÿ›HîAî„0¼@NCgazAî¬NBganAî„0¼NC/Múý¢AúþaBü¶,_F3€ÿ€üg <aBAúý‚NCga6AúýžNBga*Kúþ2-m€"-<à‰á‰Ò­8F3€-A<-|(8pAúýŠNAgaú(|Ùü( ”WAITgCúþîEúÿAúýHè NBAøF3ˆpNA`ÚAúüìJ¨ gCúþìEúÿHè NBAúý <(Э8!@ :ý0кý0S€!@F3!|NBga~=|ÿÿ@Aú”-HDAúýp:NAgadpÿNAga\îC=|ÿÿ@AúüîF3p:NA(|Ùü()zü)|9|' (¼REDYAødp" RUNgNA`ìF3Õ‘È€0<NAHîHpAúüžNDLúü–H瀀0<NA#ü((#ü(( <(€(ѹ( 3@Ns24ôééé éB1NTBLDTB ASREL' INET NTBLDTB SA(!(…BUILD NNT, NAT and LCT62pSSINC pFSSTN pMAXSEC HNTBLDTB (F3 (n,(¼!NNT)n0 nAìCì" Ò¬  ‰ IC貉nô(n4(¼!NATF3 )n8 AìCì" Ò¬  ‰ ICè&²‰nô(n<(¼!LCT)n@ AìCì" F3 Ò¬  ‰ ICèJ²‰nô*@ç/:B üXLßgNwDßXÂúO3€H B ü>ÿB-AHÐ=zB ü,N=zB! ü&P=| ˆ-|.NTWŒ-@”Aî€0<NAgH瀀 |L3 `ð*H Hz&@ç/:B ûèLßgNwDßXÑ®,Ñ®4Ñ®NsaB# þ8!üRUN ìNs 9(€J€gòJù(fø 9(€ @/×#ß(U3 ‚A ¹(B†B‡(>( ¡f aB" ýÜ0aB ýÖ`¬ ¢f aB" ýÊ2aB ýÄ`š £f aB" ý¸-3 ˆ BaB ý²`ˆ faB ý¦`ÿ|aB" ýž`ÿt4ééén' M68010 CHIPTYPEAIƒƒrrINET AFŒŒrrINET SA••rrSRSN AFžžrrINET RO§§ r rSRSN RO¸¸rr* Set chip type to M68010*CHIPTYPE‚EQU„68010 ŠOPT„P=68010 ééééééé{=/*=/*†M68010.INET.AF=/*==/* Chain file to assemble module for running on 68010 system=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to M68010.INET.LS=/*=/IFC \1ƒ=ARGM68010.INET.LS=/ENDIF=/*6=ASM M68010.INET.SA/&.INET.SA,M68010.INET.RO,\1;RZ=100=/*{ Included files are:=/*ƒM68010.CHIPTYPE.AI=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.NTS.NNT.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*ƒ9995.NTS.TR1X.EQ=/*ƒ9995.INET.INET.EQ=/*}=/*=ENDé éééé„#************************************FileM68010.INET.AI*#************************************‰INCLUDEM68010.CHIPTYPE.AIŠINCLUDEM68010.CHIPTYPE.AIŠPAGEééééééé=/*=/*†M68010.SRSN.AF=/*:=/* Chain file to assemble module to start up SDLC and NTS=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to M68010.SRSN.LS=/*=/IFC \1ƒ=ARGM68010.SRSN.LS=/ENDIF=/*8=ASM M68010.INET.SA/INET.SRSN.SA,M68010.SRSN.RO,\1;RZ=80=/*{ Included files are:=/*ƒM68010.CHIPTYPE.AI=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.NTS.SMSG.EQ=/*ƒ9995.NTS.NTW.EQ=/*ƒ9995.&.STR .EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.INET.INET.EQ=/*}=/*=ENDééééé–B1INET ASREL' INET SA3 (…Initialization and NTSþ2pOUTTERMS pNWCT pNWTESTAD pSTRTADR pSSCT pMAXCONN pSYSTYPE pMAXLNAU pNWPSEG pNTSREQ pNWTSEG pMAXSEC pSZDBUF pGETSTA pBEGSDLC pNUMBUF pFQULWM pDLCBLDCB pNTBLDTB pSBINFRBF pTRASCAN pDLNKRQD pMAXNAME 2(þF3 Aú0<NAg.H瀀 |`Ø DATAfB˜³ÈnúH3 Nu,HOî€ OCîfaê=|ÿÿ´AúA ¨-H¸Aî´0<:NAgH瀀 |`‚pÿNABçîI3 ·Aî´0<:NADßgrHzbBç/:B ÿdLßgNwDßX`.Please kill netwI3 ork first - then initialize Hç`CúÿÌEúÿôaB ÿLß`úH瀀 |I3 `ö®·Hz Bç/:B þìLßgNwDßXAú0< NAgH瀀 |`ºF3 SSCT"HAú0<NAgH瀀 |`Ž-|SSCT˜-zþŠœ=|¸¬F3 =|ª-I®Aî˜0< NAgH瀀 |`VŸüp O/ EúÊ0ÚQÈÿü$_ O$zG3@ þ@!J0<NAßügH瀀 |`-|NWCT˜-zþœÓüH-I®Aî˜0< F3 NAgH瀀 |`æŸüp O/ Eúj0ÚQÈÿü$_ O$zýÔ!J0<NAßüF3 gH瀀 | `¨AúH0<NAgNH瀀 | `Ž€`SSCTSSCTI3 SSCTNWCT SSCTSSCTaB ýRgH瀀 | `:AL3 Hz@Bç/:B ý2LßgNwDßX <_B-@ rXÂúB ýg-@$B-AL3 (ÐHzhBç/:B üðLßgNwDßX-@,2:B' üØÂüB-A0Ð-@42:O3€ B ü¾Âü&B-A8Ð-@<2:B ü¤ÂüJB-A@ÐHzBç/:B ü†LßL3@ gNwDßX-@DrÒzB ül=ALHz>Bç/:B üXLßgNwDßXÂúO3€H B ü>ÿB-AHÐ=zB ü,N=zB! ü&P=| ˆ-|.NTWŒ-@”Aî€0<NAgH瀀 |L3 `ð*H Hz&Bç/:B ûèLßgNwDßXÑ®,Ñ®4Ñ®NsaB# þ8!üRUN ìNs 9(€J€gòJù(fø 9(€ @/×#ß(U3 ‚A ¹(B†B‡(>( ¡f aB" ýÜ0aB ýÖ`¬ ¢f aB" ýÊ2aB ýÄ`š £f aB" ý¸-3 ˆ BaB ý²`ˆ faB ý¦`ÿ|aB" ýž`ÿt4ééé °9' NTS NTCCONC AIÅÅ LrrNTCCONN AIÖÖ¹rrNTCDISCPAI÷÷$rrNTCIDNTPAI;rrNTCLSTNPAI IrrNTCREQ AI""prrNTCREQP AF33 rrNTCREQP SA<<1rrNTSCONC AIEE KrrNTSCONN AIVV¨rrNTSDISC AIwwtrrNTSIDNT AIÄrrNTSLSTC AI±±.rrNTSLSTN AIººorrNTSRCVC AIÓÓ=rrNTSRECV AIääŽrrNTSREQ AFýý%rrNTSREQ SAôrrNTSSEND AI'' NrrNTSSERV AF88rrŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NTCCONC.AIª*J************************************************************************** 0‰TTL‡NTCCONC.SAƒConnectCancelRequestfrom.SSC*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*C*„NTCCNC8handlesaConnectCancelrequestissuedbytheSSCtask*:*ŒonbehalfofanotherNAUthatwantshasrequestedthat‚*'*Œanactiveconnectionbeterminated.•**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTCparameterblock**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF***********************************************************************+NTCCNC8‚MOVE.L„NNTBEG,A5‹StartofNNTtable0‰MOVE.L„NTCLNAM(A4),D1†1st4charsoflocalname3‰MOVE.W„NTCLNAM+4(A4),D2„Last2charsoflocalname%‰BSR‡NWTNAMCFindNetworkNameinNNT#‰BNE.S…NTCCC04Branchifnamefound4NTCCC02‚MOVE.L„#NTSRTNAU,D0ˆERROR-targetnotfound ‰RTS›RETURN*;NTCCC04‚BTST†#NNTSDISC,NNTSTAT(A2)‚Hastargetdisconnected?‰BEQ.S…NTCCC06BranchifNO0‰MOVE.L„#NTSRDISC,D0ˆERROR-targetdisconnected ‰RTS›RETURNFNTCCC06‚BTST†#NNTSRMT,NNTSTAT(A2)‚Isthisremoteentry?(shouldn'tbe)‰BNE‡NTCCC02BranchifYES+‰MOVE.L„NNTNAT(A2),A3‡GetNATentryaddress?‰BTST†#NNTSIPB,NNTSTAT(A2)IsparamblocksavedinsteadofNAT?‰BEQ.S…NTCCC10BranchifNO5‰MOVE.L„NTSNEXT(A3),A3†GetNATentryfromparamblock*5*ˆSearchLCTentriesformatchingRemoteNetworkName*-NTCCC10‚MOVE.L„NTCRNAM(A4),D4†GetRemotename(‰MOVE.W„NTCRNAM+4(A4),D5„GetRemotename+‰BSR‡NWFNLCNSearchtableformatchingname#‰BEQ.S…NTCCC12BranchifNamefound/‰MOVE.L„#-NTSRINAM,D0‡ERROR-duplicaterequest ‰RTS›RETURN*$*ˆSetLCTentrytoDISCONNECTstatus*½8ÆCNTCCC12‚MOVE.B„NTCXRCOD(A4),D6…Returncode-Disconnectedbyremote"‰BSR‡NWDCLCTDisconnectconnection/‰BNE.S…NTCCC18BranchiflocalNAUwasinformed'‰TST.L…NATTCB(A3)ŠDoeslocalNAUexist?1‰BNE.S…NTCCC20Branchifyes-waittillinformed**ˆFreetheLCTentry*"NTCCC18‚BSR‡NWFRLCTFreetheentry*+*ˆCancel'Recv-from-any'iflastconnection*)‰TST.L…NATLCTLK(A3)ˆAnymoreconnections?‰BNE.S…NTCCC20BranchifYES‰MOVE.L„A4,-(A7)ŒSaveA4=‰LEA‡NATANYLK-NTSNEXT(A3),A4Pointerto 1st'any'paramblock"‰BSR‡NWFREPBFreeallparamblocks!‰CLR.L…NATANYLK(A3)ˆClearpointer‰MOVE.L„(A7)+,A4ŒRestoreA4,NTCCC20‚CLR.L…D0’Clearforsuccessfulreturn ‰RTS›RETURNéééééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NTCCONN.AIª*J************************************************************************** )ŠTTL„NTCCONN.SA‰ConnectRequestfrom.SSC*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*?*„NTCCON8handlesaConnectrequestissuedbytheSSCtaskon…*7*ŒbehalfofanotherNAUthatwantstobeconnectedto…*#*ŒanNAUinthisnodeofnetwork.™**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTCparameterblock**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF************************************************************************ˆValiditychecks*+NTCCON8ƒMOVE.LNNTBEG,A5ŠStartofNNTtable0ŠMOVE.LNTCLNAM(A4),D1…1st4charsoflocalname3ŠMOVE.WNTCLNAM+4(A4),D2ƒLast2charsoflocalname%ŠBSR„NWTNAMCŒFindNetworkNameinNNT#ŠBNE.S‚NTCCN04ŒBranchifnamefound4NTCCN02ƒMOVE.L#NTSRTNAU,D0‡ERROR-targetnotfound ŠRTS—RETURN*FNTCCN04ƒBTSTƒ#NNTSRMT,NNTSTAT(A2)Isthisremoteentry?(shouldn'tbe)ŠBNE„NTCCN02ŒBranchifYES+ŠMOVE.LNNTNAT(A2),A3†GetNATentryaddress?ŠBTSTƒ#NNTSIPB,NNTSTAT(A2)IsparamblocksavedinsteadofNAT?ŠBEQ.S‚NTCCN06ŒBranchifNO5ŠMOVE.LNTSNEXT(A3),A3…GetNATentryfromparamblock*;NTCCN06ƒBTSTƒ#NNTSDISC,NNTSTAT(A2)Hastargetdisconnected?ŠBEQ.S‚NTCCN07ŒBranchifNO ŠCLR.L‚D05ŠMOVE.BNATDCOD(A3),D0…ERROR-returndisconnectcodeŠRTS)NTCCN07ƒTST.L‚NATTCB(A3)‰Doestaskexist?ŠBNE.S‚NTCCN08ŒBranchifYES0ŠMOVE.L#NTSRDCNT,D0‡ERROR-targetdisconnected ŠRTS—RETURN*4NTCCN08ƒBTSTƒ#NATSLACT,NATSTAT(A3)IsListenActive?ŠBNE.S‚NTCCN10ŒBranchifYES1ŠMOVE.L#NTSRILIS,D0‡ERROR-targetnotlistening ŠRTS—RETURN*Î:×;ß7ç5*ˆSearchLCTentriesformatchingRemoteNetworkName*-NTCCN10ƒMOVE.LNTCRNAM(A4),D4…GetRemotename(ŠMOVE.WNTCRNAM+4(A4),D5ƒGetRemotename+ŠBSR„NWFNLCNŒSearchtableformatchingname"ŠBNE.S‚NTCCN14ŒBranchifnotfound6ŠBTSTƒ#LCTCSDSC,LCTCST A(A5)Isstatus='DISCONNECT'?ŠBNE.S‚NTCCN12ŒBranchifYES.ŠMOVE.L#NTSRDPRQ,D0‡ERROR-duplicaterequest ŠRTS—RETURN*2*ˆFreetheDISCONNECTedentry-willbuildnewone=NTCCN12ƒMOVE.LLCTLULNK(A5),LCTLULNK(A0)RemovefromLUchain$ŠMOVE.LLCTBEG,A0ŠStartofLCTtable0ŠMOVE.LLCTFHDR(A0),LCTNEXT(A5)Addtofreelist.ŠMOVE.LA5,LCTFHDR(A0)…Updatefreelistheader*(*ˆCONNECTreceived-buildnewLCTentry**+NTCCN14ƒMOVE.LLCTBEG,A0ŠStartofLCTtable,ŠTST.L‚LCTFHDR(A0)ˆDoesfreeLCTentryexistŠBNE.S‚NTCCN16ŒBranchifYES+ŠMOVE.L#NTSRLCOV,D0‡ERROR-noroominLCT ŠRTS—RETURN*+NTCCN16ƒBSR„NWBLDLCT‹GobuildnewLCTentry9ŠBSETƒ#LCTCSRCV,LCTCSTA(A5)Set'CONNECTReceived'status8ŠMOVE.WNTCRNAU(A4),LCTRMNAU(A5)SaveremoteNAUandSID*:*ˆIfLISTENnotwaiting-putCONNECTintoListen/ConnectQ*?ŠBTSTƒ#NATSLSTW,NATSTAT(A3)IsLISTENwaitingforthisCONNECT?ŠBNE.S‚NTCCN30ŒBranchifYES*5ŠLEA„NATLCNLK-NTSNEXT(A3),A0Listen/ConnectQpointerŠBSR„NWLNKPBŒFindendofQ+ŠBEQ.S‚NTCCN20ŒBranchifnoduplicatefound&ŠCRASH.T*+1Crashsystem4/11/83SCB.0ŠMOVE.L#NTSRKILL,D0‡SSCshould'tuseduplicates ŠRTS—RETURN,NTCCN20ƒCLR.L‚NTSNEXT(A4)ˆClearnextpointer'ŠMOVE.LA4,NTSNEXT(A0)…SaveatendofQ8ŠBSETƒ#NATSCONW,NATSTAT(A3)Set'connectpbinQ'status.ŠMOVE.L#NTCRSVPB,D0‡SetD0forWait-till-done ŠRTS—RETURN*6*ƒAListeniswaitingforthisConnect-matchthemup*8NTCCN30ƒBSR„TRACTOLC‹Asktransportleveltodothematch&ŠCLR.L‚D0‘SetD0forsuccessfulreturn ŠRTS—RETURNŠPAGE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*<*„NTCCON9handlesaConnectrequestissuedbytheSSCtaskˆ*;*ŒwhenaresponsehasbeenreceivedtoaCONNECTrequest.**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTCparameterblock**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTCRCODequatesforlistoferrorcodesF************************************************************************ˆValiditychecks*:NTCCON9ƒMOVE.BNTCLNAU(A4),D6…NetworkAddressoflocalNAUŠBSR„NWFNATGofindNATentry$ŠBEQ.S‚NTCC902ŒBranchifentryfound2ŠMOVE.L#-NTSRINAU,D0†ERROR-noentryatthisend ŠRTS—RETURN*:NTCC902ƒMOVE.LNTCRNAM(A4),D4…1st4charactersofNetName6ŠMOVE.WNTCRNAM+4(A4),D5ƒlast4charactersofNetNameŠBSR„NWFNLCNŒFindLCTentryŠBEQ.S‚NTCC904ŒBranchiffound1ŠMOVE.L#-NTSRTNAU,D0†ERROR-LCTentrynotfound ŠRTS—RETURN*)NTCC904ƒTST.L‚NATTCB(A3)‰Doestaskexist?ŠBEQ.S‚NTCC918ŒBranchifNO3ŠBCLRƒ#LCTCSINT,LCTCSTA(A5)Is'CONNInitiate'set?ŠBNE.S‚NTCC908ŒBranchifYES.ŠBTSTƒ#LCTCSDSC,LCTCSTA(A5)Diditdiscinnect?ŠBEQ.S‚NTCC906ŒBranchifNO*ŠMOVE.L#-NTSRDISC,D0†ERROR-DisconnectedŠRTS(NTCC906ƒCRASH.T*+14/11/83Crashsystem.ŠMOVE.L#NTSRKILL,D0‡ERROR-don'tknowwhy???ŠRTS*-*„Foundtherightentry--respondtoCONNECT**„NTCIDN8handlesanIdentifySelfcommandissuedby.SSCin†*7*ŒprimaryonbehalfofanNAUinasecondarystation.…*)*ŒAnNAUisidentifiedbyNetworkName.“**Ä*F***********************************************************************&*ˆonentry:A6=addressof.SSC'sTCB.*’A4=physicaladdressofNTCparameterblock**ˆonexit:D0=‡Returncode*’D0=00„Successful5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF***********************************************************************6NTCIDN8‚MOVE.L„NNTBEG,A5ˆPointertoNetworkNameTable‰BSR‡NWTNAM‹CheckNetworkName'‰BEQ.S…NTCID10ŠBranchifnamenotfound*‰CMP.B…#NTSRDNAM,D0…Isitduplicateentry?‰BNE.S…NTCID02ŠBranchifNO:‰BTST†#NNTSDISC,NNTSTAT(A2)IsentryforDISCONNectedNAU?‰BNE.S…NTCID08ŠBranchifYESNTCID02‚RTS˜RETURN*9NTCID08‚BSR‡NWFRNNTŠGofreeNNTentriesandanyNATentry*4NTCID10‚MOVE.L„NNTFHDR(A5),D0ƒ1stentryinfreelist%‰BNE.S…NTCID12ŠBranchifentryexists(‰MOVE.L„#NTSRNNOV,D0…ERROR-NNTisfull ‰RTS˜RETURN*$*ˆBuildnewNetworkNameTableentry*0NTCID12‚MOVE.L„D0,A2ŒA2isnewNNTentrypointer‰CLR.W…NNTSTAT(A2)†Clearstatus+‰MOVE.L„NTCLNAM(A4),NNTNAM(A2)NetworkName/‰MOVE.W„NTCLNAM+4(A4),NNTNAM+4(A2)NetworkName1‰MOVE.W„NTCLNAU(A4),NNTNAU(A2)NAUandStationID)‰CLR.L…NNTNAT(A2)‡ClearNATentrypointer,‰BTST†#NNTSLACT,NTCOPT(A4)‚IsListenactive?‰BEQ.S…NTCID14BranchifNO0‰BSET†#NNTSLACT,NNTSTAT(A2)SetitinNametable5NTCID14‚BSET†#NNTSACT,NNTSTAT(A2)‚NNTstatus=active4‰BSET†#NNTSRMT,NNTSTAT(A2)‚NNTstatus=remoteentry*;‰MOVE.L„NNTNEXT(A2),NNTFHDR(A5)‚Removeentryfromfreelistø85‰MOVE.L„NNTAHDR(A5),NNTNEXT(A2)‚Linkintoactivelist(‰MOVE.L„A2,NNTAHDR(A5)‹Newactiveheader%‰CLR.L…D0Clearforsuccessfulreturn ‰RTS˜RETURNéééééé  éŠPAGEJ**************************************************************************!*INCLUDEFILE:‚NTS.NTCLSTNP.AI©*J************************************************************************** )‰TTL‡NTCLSTNP.SA‚ListenRequestfrom.SSC*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*6*„NTCLST8handlesaLISTENcommandissuedby.SSCinŽ*7*ŒprimaryonbehalfofanNAUinasecondarystation.…*)*ŒAnNAUisidentifiedbyNetworkName.“**Ä*F***********************************************************************&*ˆonentry:A6=addressof.SSC'sTCB.*’A4=physicaladdressofNTCparameterblock**ˆonexit:D0=‡Returncode*’D0=00„Successful5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF***********************************************************************6NTCLSN8‚MOVE.L„NNTBEG,A5ˆPointertoNetworkNameTable&‰MOVE.L„NTCLNAM(A4),D1ƒListener'sname(‰MOVE.W„NTCLNAM+4(A4),D2ƒListener'sname‰BSR‡NWTNAMCŠFindNetworkName'‰BEQ.S…NTCLS04ŠBranchifnamenotfound:‰BTST†#NNTSDISC,NNTSTAT(A2)IsentryforDISCONNectedNAU?‰BNE.S…NTCLS08ŠBranchifYES3‰BSR‡NWSETLAŠSet'Listen-active'inallNNTentries$‰CLR.L…D0Codeforsuccessfulreturn ‰RTS˜RETURN*7NTCLS04‚MOVE.L„#NTSRINAU,D0…ERROR-NNTentrynotfound ‰RTS˜RETURN*7NTCLS08‚MOVE.L„#NTSRDISC,D0…ERROR-NAUisdisconnected ‰RTS˜RETURN0‰TTL‡NTCLSTNP.SA‚ListenCancelRequestfrom.SSC‰PAGE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*=*„NTCLSC8handlesaLISTENCANCELcommandissuedby.SSCin‡*7*ŒprimaryonbehalfofanNAUinasecondarystation.…*)*ŒAnNAUisidentifiedbyNetworkName.“**Ä*F***********************************************************************&*ˆonentry:A6=addressof.SSC'sTCB.*’A4=physicaladdressofNTCparameterblock**ˆonexit:D0=‡Returncode*’D0=00„Successful ;5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF***********************************************************************6NTCLSC8‚MOVE.L„NNTBEG,A5ˆPointertoNetworkNameTable&‰MOVE.L„NTCLNAM(A4),D1ƒListener'sname(‰MOVE.W„NTCLNAM+4(A4),D2ƒListener'sname‰BSR‡NWTNAMCŠFindNetworkName'‰BEQ.S…NTCLC04ŠBranchifnamenotfound5‰BSR‡NWCLRLAŠClear'Listen-active'inallNNTentries$‰CLR.L…D0Codeforsuccessfulreturn ‰RTS˜RETURN*8NTCLC04‚MOVE.L„#-NTSRINAU,D0„ERROR-NNTentrynotfound ‰RTS˜RETURN ééé! ééŠPAGEJ***************************************************************************INCLUDEFILE:‚NTS.NTCREQ.AI«*J************************************************************************** -ŠTTL„NTCREQ.SAŠAllSpecialCommandsfromSSCT-NTCREQ„IDNTƒ1,0HANDLENTCREQUESTSFROMSSCT*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*0*„NTCREQrespondstopriviledgedrequestsfrom”*#*theSystemServiceControlTask–**Ä*@*„NTCREQisaccessedviaadynamicallyconfiguredTRAP#1call„*(*‹(controlispassedherefromNTSREQ)•**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTCparameterblock+*’D0=requestcommandfromparameterblock**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF***********************************************************************ŠPAGE ŠSECTION10ŠOPT„PCS#ŠXREFƒNNTBEG,NATBEG,LCTBEG,NWSTATUS'ŠXREFƒTRABTOU,TRADTXQ,TRACTOLL,TRACTOLC ŠXREFƒNTSRRTN2ŠXREFƒNWTNAM,NWMGSSC,NWLNKBQ,NWFNAT,NWFLCT,NWFNLCC6ŠXREFƒNWTNAMC,NWFNLCN,NWFRNNT,NWLNKPB,NWSETLA,NWBLDLCT.ŠXREFƒNWDCLCT,NWFRLCT,NWCLRLA,NWSIGNAL,NWSETDCŠXREFƒNWCREQ,NWFREPB* ŠXDEFƒNTCREQ*8NTCREQ„MOVE.LTCBNAU(A6),D1†IscalleranidentifiedNAU?ŠBNE.S‚NTCR04Branchifyes0ŠMOVE.L#NTSRINAU,D0‡ERROR-UnidentifiedcallerŠBRA„NTSRRTNŒBranchtoreturn*3NTCR04„MOVE.LD1,A3ŽSavepointertoNATtableentry.ŠBTSTƒ#5,D0ŽIsthisanNWCcommand?'Ax'type?ŠBNE„NWCREQBranchifYES,ŠCMP.B‚#SSCNAU,NATNAU(A3)IsSSCthecaller?ŠBEQ.S‚NTCR06BranchifYES2NTCR05„MOVE.L#NTSRICMD,D0‡ERROR-IllegalcommandŠBRA„NTSRRTNŒBranchtoreturn*=NTCR06„LEA„NTCCTBL8(PC),A0„Startof$8xcommandroutinetable"ŠBTSTƒ#4,D0ŽIsthisa$9xcommand?ŠBEQ.S‚NTCR08BranchifNO7ŠLEA„NTCCTBL9(PC),A0„Startof$9xcommandroutinetable<#5)NTCR08„AND.B‚#$0F,D0ŒStripoffupperbits+ŠBEQ.S‚NTCR05Branchif0-illegalcommand-ŠCMP.B‚#NTCCBIG,D0ˆIscommandinlegalrange?ŠBGT„NTCR05BranchifNO(ŠLSL.L‚#2,D0Žcommand*4=offsetintable+ŠADD.L‚-4(A0,D0),A0‡Commandroutineaddress(ŠJSR„(A0)Gotospecificcommandroutine*$*„RulesforreturnfromNTCroutine:*8*ˆD0=0orerrorcodeˆSetNTCXRCOD=D0,set'TC'inNTCSTA#*¢(Theerrorisinthetransaction)*;*ˆD0=-1(NTCRSVPB)ŠDoNOTset'TC'inNTCSTA-notcomplete*;*ˆD0=-n(otherthan-1)…SetNTCRCOD=-D0,set'TC'inNTCSTA*¢(TheerrorisforSSCT)*"NTCRRTNƒTST.L‚D0‘Checkreturncode)ŠBMI.S‚NTCRR04ŒBranchifminus-forSSCT.ŠMOVE.BD0,NTCXRCOD(A4)„Savetransactionerror'ŠCMP.B‚#NTSRKILL,D0‡Isitkillererror?5ŠCRASH.EQ*+1ŽIfyes-thencrashsystem4/11/83SCB.+ŠBEQ„NTSRRTNŒBranchifYES-gocrashsystem7ŠBSETƒ#NTSSTC,NTCSTA(A4)Setstatus-'transaccomplete'NTCRR02ƒRTE—RETURN*9NTCRR04ƒCMP.L‚#NTCRSVPB,D0‡Doestransactionhavetowait?ŠBEQ„NTCRR02ŒBranchifYES#ŠNEG.L‚D0‘Changeformoferrorcode!ŠBRA„NTSRRTNŒGotoreturnprocess*.*ˆNON-ExistantCommandsareequatedtoNULLCMD*3NULLCMDƒMOVE.L#NTSRICMD,D0‡ERROR-Illegalcommand ŠRTS—Return*'*„TablesofCommandProcessingRou! tines*8NTCCTBL8‚DC.LƒNTCIDN8-NTCCTBL8ƒIdentifySelfroutine‚$81)ŠDC.LƒNTCLSN8-NTCCTBL8ƒListenroutine‰$820ŠDC.LƒNTCLSC8-NTCCTBL8ƒCancelListenroutine‚$83*ŠDC.LƒNTCCON8-NTCCTBL8ƒConnectroutineˆ$841ŠDC.LƒNTCCNC8-NTCCTBL8ƒCancelConnectroutine$85-ŠDC.LƒNTCDSC8-NTCCTBL8ƒDisconnectroutine…$869NTCCBIGƒEQU„(*-NTCCTBL8)/4…Anycode>=NTCCBIGisillegal*8NTCCTBL9‚DC.LƒNTCIDN9-NTCCTBL9ƒIdentifySelfroutine‚$91)ŠDC.LƒNTCLSN9-NTCCTBL9ƒListenroutine‰$920ŠDC.LƒNTCLSC9-NTCCTBL9ƒCancelListenroutine‚$93*ŠDC.LƒNTCCON9-NTCCTBL9ƒConnectroutineˆ$941ŠDC.LƒNTCCNC9-NTCCTBL9ƒCancelConnectroutine$95-ŠDC.LƒNTCDSC9-NTCCTBL9ƒDisconnectroutine…$96=/*=/*†NTS.NTCREQP.AF=/*0=/* Chain file to assemble module NTS.NTCREQP.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to NTS.NTCREQP.LS=/*=/IFC \1ƒ=ARGNTS.NTCREQP.LS=/ENDIF=/*+=ASM NTS.NTCREQP.SA,NTS.NTCREQP.RO,\1;RZ=80=/*{ Included files are:=/*ƒ9995.&.CRASH.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*ƒ9995.NTS.NNT.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.NTS.NTS.EQ=/*ƒ9995.NTS.NTC.EQ=/*ƒ9995.NTS.SMSG.EQ=/*ƒNTS.NTCREQ.AI=/*ƒNTS.NTCIDNTP.AI=/*ƒNTS.NTCLSTNP.AI=/*ƒNTS.NTCCONN.AI=/*ƒNTS.NTCCONC.AI=/*ƒNTS.NTCDISCP.AI=/*}=/*=ENDééééé+!‰NOLIST‰INCLUDE9995.&.CRASH.MC‰INCLUDE9995.&.STR.EQ‰NOLIST‰INCLUDE9995.&.TCB.EQ ‰INCLUDE9995.SDLCPRI.TEMPLTS.EQ‰LIST*ˆINCLUDE9995.&.CRASH.MC*ˆINCLUDE9995.&.STR.EQ*ˆINCLUDE9995.&.TCB.EQ!*ˆINCLUDE9995.SDLCPRI.TEMPLTS.EQ*ˆINCLUDE9995.NTS.NNT.EQ*ˆINCLUDE9995.NTS.NAT.EQ*ˆINCLUDE9995.NTS.LCT.EQ*ˆINCLUDE9995.NTS.NTS.EQ*ˆINCLUDE9995.NTS.NTC.EQ*ˆINCLUDE9995.NTS.SMSG.EQ‰INCLUDE9995.NTS.NNT.EQ‰INCLUDE9995.NTS.NAT.EQ‰INCLUDE9995.NTS.LCT.EQ‰INCLUDE9995.NTS.NTS.EQ‰INCLUDE9995.NTS.NTC.EQ‰INCLUDE9995.NTS.SMSG.EQ** Code file includes*ˆINCLUDENTS.NTCREQ.AI*ˆINCLUDENTS.NTCIDNTP.AI*ˆINCLUDENTS.NTCLSTNP.AI*ˆINCLUDENTS.NTCCONN.AI*ˆINCLUDENTS.NTCCONC.AI*ˆINCLUDENTS.NTCDISCP.AI ‰INCLUDENTS.NTCREQ.AI‰INCLUDENTS.NTCIDNTP.AI‰INCLUDENTS.NTCLSTNP.AI‰INCLUDENTS.NTCCONN.AI‰INCLUDENTS.NTCCONC.AI‰INCLUDENTS.NTCDISCP.AI&‰TTL…NTCREQP.SA:ListofINCLUDEfiles‰PAGE*6*„thefollowingareequatesforcommandsnotn" eededin*‰aprimarystation*NTCIDN9‚EQU‡NULLCMDNTCLSN9‚EQU‡NULLCMDNTCLSC9‚EQU‡NULLCMDNTCCNC9‚EQU‡NULLCMDNTCDSC9‚EQU‡NULLCMD‰ENDééé42ŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NTSCONC.AIª*J************************************************************************** &‰TTL‡NTSCONC.SA‚ConnectCancelRequest*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*,*„NTSCONChandlesaConnectCancelCommand˜**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTSparameterblock*’A3=callingNAU'sNATentry**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF********************************************************************** *v**********;*NTSCONC:ƒCheckvalidity-returnerrorifinvalidoptions. *^************ˆValiditychecks*;NTSCONC‚MOVE.W„NTSOPT(A4),D0„Getoptionsforvaliditycheck2‰AND.W…#1<FANTSCC05‚MOVE.B„#NTSRDCLU,LCTLOCCD(A5)‚SaveReasoncodeforCancel$‰BSR‡NWLODSCCancellocalconnection*+*ˆCancel'Recv-from-any'iflastconnection*)‰TST.L…NATLCTLK(A3)ˆAnymoreconnections?‰BNE.S…NTSCC10BranchifYES‰MOVE.L„A4,-(A7)ŒSaveA4=‰LEA‡NATANYLK-NTSNEXT(A3),A4Pointerto1st'any'paramblock"‰BSR‡NWFREPBFreeallparamblocks!‰CLR.L…NATANYLK(A3)ˆClearpointer‰MOVE.L„(A7)+,A4ŒRestoreA48NTSCC10‚BSET†#NTSSTC,NTSSTA(A4)‚SetTransactionComplete ‰RTS›RETURN" ééééééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NTSCONN.AIª*J************************************************************************** ‰TTL‡NTSCONN.SA‚ConnectRequest*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*?*„NTSCONNhandlesaConnectcommandfromanNAUthatwantsto…* *ŒcommunicatewithanotherNAUœ**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTSparameterblock*’A3=callingNAU'sNATentry**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF********************************************************************** *v********<* NTSCONN: Check validity - return error for invalid options *^**********ˆValiditychecks*;NTSCONN‚MOVE.W„NTSOPT(A4),D0„Getoptionsforvaliditycheck2‰AND.W…#1<NTSCN14‚MOVE.W„NNTNAU(A2),D6‡TargetNAUandSID-saveformsg+NTSCN16‚MOVE.L„LCTBEG,A0‹StartofLCTtable,‰TST.L…LCTFHDR(A0)‰DoesfreeLCTentryexist‰BNE.S…NTSCN18BranchifYES+‰MOVE.L„#NTSRLCOV,D0ˆERROR-noroominLCTNTSCN17‚RTS›RETURN*7NTSCN18‚MOVE.L„NATNNT(A3),A2‡AddressoflocalNNTentry$‰BSR‡NWMGSSCPreparemessageforSSC-‰BNE‡NTSCN17Ifnot0,thenERROR-nobuffer8‰MOVE.W„D6,MSGRNAU(A1)†AddremoteNAUandSIDtomessage(‰MOVE.L„A0,A2BufferaddressforTRAMOVB‰MOVE.W„D6,-(A7)ŒSaveD63‰BSR‡TRAMOVBAsktransportleveltogivemsgtoSSC‰MOVE.W„(A7)+,D6ŒRestoreD6/‰MOVE.L„TCBNAU(A6),A3‡RestoreNATentryaddress$‰BSR‡NWBLDLCTŒGobuildnewLCTentry:‰BSET†#LCTCSINT,LCTCSTA(A5)Set'CONNECTInitiated'status:‰MOVE.W„D6,LCTRMNAU(A5)…SaveremoteNAUandSID(ifknown)9‰MOVE.L„A4,LCTTWTRP(A5)…Saveparameterblockforresponse!‰CLR.L…D0’Returncode-oksofar ‰RTS›RETURN**ˆResponsetoCONNECTreceived*3NTSCN30‚MOVE.L„A5,-(A7)ŒSaveLCTentrytouselater0‰MOVE.L„NNTBEG,A5‹StartofNNT-formsgbuilder3‰MOVE.L„NATNNT(A3),A2‡SetNNTentryformsgbuilder$‰BSR‡NWMGSSCPreparemessageforSSC$‰BEQ.S…NTSCN31Branchifgoodreturn1‰MOVE.L„(A7)+,A5ŒIfnot0,thenERROR-nobuffer‰RTS/NTSCN31‚MOVE.L„A0,A2BufferaddressforTRAMOVB+‰MOVE.L„(A7),A0WanttoreferenceLCTagain7‰MOVE.W„LCTRMNAU(A0),MSGRNAU(A1)PutNAUandSIDinmsg1‰OR.B†#$90,MSGCMD(A1)…Modifycommandforresponse3‰BSR‡TRAMOVBAsktransportleveltogivemsgtoSSC/‰MOVE.L„TCBNAU(A6),A3‡RestoreNATentryaddress*‰MOVE.L„(A7)+,A5ŒRestoreLCTentryaddress2‰BCLR†#LCTCSRCV,LCTCSTA(A5)Clear'receive'status7‰BSET†#LCTCSACT,LCTCSTA(A5)Set'CONNECTActive'status3‰MOVE.B„NATLCC(A3),D0‡GetnextLogicalConnectCode3NTSCN32‚MOVE.B„D0,LCTLOLCC(A5)…SaveitinLCTentry)‰MOVE.B„D0,NTSLCC(A4)‡Returnittocaller*‰ADD.B…#1,D0Incrementfornextassignment%‰BNE.S…NTSCN34Branchifnotallused-‰ADD.B…#1,D0Incrementagaintorestartcount!‰BRA‡NTSCN32BranchtoresaveLCC5NTSCN34‚MOVE.B„D0,NATLCC(A3)‡Savefornextassignment1‰BSET†#NTSSTC,NTSSTA(A4)‚SetTransactionComplete&‰CLR.L…D0’SetD0forsuccessfulreturn ‰RTS›RETURN# éééééééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NTSDISC.AIª*J************************************************************************** !‰TTL‡NTSDISC.SA‚DisconnectanNAU*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*(*„NTSDISChandlesaDisconnectCommandœ**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTSparameterblock*’A3=callingNAU'sNATentry**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF********************************************************************** *v*********‹{Handledisconnectcommand}<*NTSDISC:ƒCheckvalidity-returnerrorforinvalidoptions.J*NTSDC02:ƒIFthereisanLCTentrypointedatbythisNATentry(NATLCTLK)8*‹THEN‚cancelconnectionviasubroutineNWLODSC.{LCTis+*‘unlinkedfromNAT.}‚Cancelreasoncodeis.*‘#NTSRDCLU($21)-disconnectedbylocalNAU.*‘GOTONTSDC02:.B*NTSDC04:ƒELSE‚CancellistenviaNWLSTCsubroutine.Reasoncodeis.*‘#NTSRDCLU($21)-disconnectedbylocalNAU.2*‘Set'transactioncomplete'andreturnerrorcode-*‘forallP.B.'slinkedtothisNATentryvia3*‘NATCNNLK-'connect-init'link.‚Thisisperformed*‘viaNWFREPBsubroutine.7*‘PerformaboveinthesamemannerforallP.B'slinked;*‘tothisNATentryviaNATANYLK-'recievefromany'link.3*‘ClearlinksinNATentry,savedisconnectcodein6*‘NATentry,clear'active'andset'disconnect'flags*‘inNATstatus.>*NTSDC08:‰Set'disconnect'status,clear'active'and'listen'3*‘statusesforallNNT'sassociatedwiththisNAT's%*‘NAUandSIDviaNWSETDCsubroutine.5*‘Set'transactioncomplete'andreturnsuccessfully. *^**********ˆValiditychecks*;NTSDISC‚MOVE.W„NTSOPT(A4),D0„Getoptionsforvaliditychecko4x9€$ &‰AND.W…#1<,NTSSAD(A4),NTSLEN(A4)‚Convertbuffaddr%‰BRA.S…NTSLS06ŠBranchifgoodaddress‰NOP6NTSLS05‚MOVE.L„#NTSRIBUF,D0…ERROR-badbufferaddress ‰RTS˜RETURN*2NTSLS06‚CMP.L…#16,NTSLEN(A4)„Isbufferbigenough?‰BMI‡NTS& LS05ŠBranchifNO *v********/*‹IF'connectwaiting'bitNOTsetinNNTentry%*‹THEN‚IFthisstationistheprimary(*‘THEN‚Set'listenactive'inNATentry.3*—Set'listenactive'inallNNTentriesassociated*—withthisNATentry.-*NTSLS08:‰IF'listenactive'setinNATentry/*‘THEN‚IF'listenpending'NOTsetinNATentry2*—THEN‚Setuser'sNTSP.B.statustoacknowledged.8*NTSLS10:LinkthisNTSP.B.ontotheendofthelisten/*—connectqueue.‚(NATLCNLK)*—Returnwithsuccesfulcode.²:»3ÃA*NTSLS14:‰ELSE‚{Thisis1stlistenfromNAUinSecondarystation}4*—PreparemessageforSSCtoinformprimarystation.1*—Set'listenactive'and'listenpending'status*—inNATentry.*—GOTONTSL10:,*‹ELSE‚{Asktransportleveltodothematch}*‘BSRƒTRACTOLL. *‘Return.* *^********;*ˆIfCONNectnotwaiting-putListenintoListen/ConnectQ*?‰BTST†#NATSCONW,NATSTAT(A3)‚IsCONNectwaitingforthisListen?‰BNE.S…NTSLS20BranchifYES*.‰TST.B…NATSID(A3)ŠIsthisstationtheprimary?‰BNE.S…NTSLS08BranchifNO:‰BSET†#NATSLACT,NATSTAT(A3)Set'ListenActive'ifprimary'‰MOVE.L„NATNNT(A3),A2‡NNTentrypointer3‰BSR‡NWSETLASet'ListenActive'inallNNTentries9NTSLS08‚BTST†#NATSLACT,NATSTAT(A3)Is'ListenActve'set?‰BEQ.S…NTSLS14BranchifNO4‰BTST†#NATSLPND,NATSTAT(A3)Is'ListenPending'set?(‰BNE.S…NTSLS10Ifyes-branchtoreturn9‰BSET†#NTSSACK,NTSSTA(A4)‚Setpbstatusto'acknowledged',NTSSAD(A4),NTSLEN(A4)‚Convertbuffaddr%‰BRA.S…NTSRV08ŠBranchifgoodaddress‰NOP6NTSRV05‚MOVE.L„#NTSRIBUF,D0…ERROR-badbufferaddress ‰RTS˜RETURN*9NTSRV07‚MOVE.L„#NTSRILCC,D0…ERROR-Nologicalconnection ‰RTS˜RETURN *v********0*NTSRV08:ƒIF'accept-from-any'optionisNOTsetÜ9å:í:*‹THEN‚IFLCCisNOTfoundinLCTchainwithsamevalueas*‘thatinNTSparameterblock/*‘THEN‚returnwitherrorcode#NTSRILCC($08)-*—LCTentrynotfound.*‘ELSE‚{LCTentryfound}"*NTSRV09:IFconnectionnotactive*—THEN‚IFNOTdisconnected.*THEN‚returnwitherrorcode#NTSRDISC($20)-*£connectionnotactive.*ELSE‚{disconnected}*£returnLCTentrytofreelist!*£returnreasoncodefoundinLCT*—ELSE‚{connectionactive}+*LinkNTSP.B.ontoendof'waitforrecv'*queue(LCTRWTRV)./*NTSRV12:•Set'waitforreceive'statusinLCT.$*Asktransportleveltofillbuffer*viaTRABTOUsubroutine.%*‹ELSE‚{'accept-from-any'optionset}-*NTSRV16:‰FindnextLCTentryinactivelist.*‘IFsuchanentryexists8*‘THEN‚IFthis' LCTentryhasacompletemsglinkedtoit)*—THEN‚LinkthisNTSP.B.ontotheendof*thatqueue(LCTRWTRV).*GOTONTSRV12:.*—ELSE‚GOTONTSRV16:.$*‘ELSE‚{noLCTentryinactivelist}8*NTSRV20:LinkthisNTSP.B.ontothe'receive-from-any'*—queueoftheNAT(NATANYLK).*—Returnsuccessfully.* *^********4*ˆIf'Accept-from-any'notsetthensearchLCTchain*:NTSRV08‚BTST†#NTSOANY,NTSOPT(A4)‚Is'Accept-fromany'set?‰BNE.S…NTSRV14ŽBranchifYES.‰BSR‡NWFNLCCŠSearchLCTchainformatchingLCC(‰BNE‡NTSRV01ŠBranchifERROR-notfound1‰BTST†#LCTCSACT,LCTCSTA(A5)‚Isconnectionactive?‰BNE.S…NTSRV10ŠBranchifYES9NTSRV09‚MOVE.L„#NTSRDISC,D0…ERROR-Connectionnotactive)‰BTST†#LCTCSDSC,LCTCSTA(A5)ƒDisconnected?‰BEQ.S…NTSRV09A‰BranchifNO ‰CLR.L…D6'‰MOVE.B„LCTLOCCD(A5),D6‚Getreasoncode+‰BSR‡NWFRLCTŠFreetheentry-ownerinformed ‰MOVE.L„D6,D0ŒReturnreasoncodeNTSRV09ARTS˜RETURN*;NTSRV10‚LEA‡LCTRWTRV-NTSNEXT(A5),A0Wait-for-recvQpointer‰BSR‡NWLNKPBŠFindendofQ+‰BNE‡NTSRV01ŠBranchiferror-duplicatepb%‰CLR.L…NTSNEXT(A4)†ClearNextpointer/‰MOVE.L„A4,NTSNEXT(A0)ƒLinkentryontoendofQ*2*ˆPassrequestontotransportlevel-thenreturn* ‰XREF†TRABTOU=NTSRV12‚BSET†#LCTARWTR,LCTRSTA(A5)Set'wait-for-recv'status/‰BSR‡TRABTOUŠAsktransportleveltofillbuffer&‰CLR.L…D0SetD0forsuccessfulreturn ‰RTS˜RETURN**ˆ'AcceptfromAny'optionset=*ˆSearchLCTchainfor'buffers-in-q'and'active'connection*;NTSRV14‚LEA‡NATLCTLK-LCTLULNK(A3),A5‚1stentryinLCTchain8NTSRV16‚MOVE.L„LCTLULNK(A5),D0…Nextentryinactivelist ‰BEQ.S…NTSRV20Branchifnomore ‰MOVE.L„D0,A5Nextentrypointer<ŠTST.W‚LCTMCNT(A5)ˆCompletemessagelinkedtothisone?SCB.0ŠBEQ.S‚NTSRV16ŒBranchifno-lookatnext.SCB.4‰LEA‡LCTRWTRV-NTSNEXT(A5),A0Wait-for-recvQpointer‰BSR‡NWLNKPBŠFindendofQ+‰BNE‡NTSRV01ŠBranchiferror-duplicatepb%‰CLR.L…NTSNEXT(A4)†ClearNextpointer/‰MOVE.L„A4,NTSNEXT(A0)ƒLinkentryontoendofQ‰BRA‡NTSRV12ŠGotoreturn*=NTSRV20‚LEA‡NATANYLK-NTSNEXT(A3),A0‚'Recv-from-any'Qpointer‰BSR‡NWLNKPBŠFindendofQ+‰BNE‡NTSRV01ŠBranchiferror-duplicatepb%‰CLR.L…NTSNEXT(A4)†ClearNextpointer/‰MOVE.L„A4,NTSNEXT(A0)ƒLinkentryontoendofQ&‰CLR.L…D0SetD0forsuccessfulreturn‰RTSééé=/*=/*†NTS.NTSREQ.AF=/*/=/* Chain file to assemble module NTS.NTSREQ.SA=/*:=/* If no output argument is specified for the listing the,=/* chain file will default to NTS.NTSREQ.LS=/*=/IFC \1ƒ=ARGNTS.NTSREQ.LS=/ENDIF=/*)=ASM NTS.NTSREQ.SA,NTS.NTSREQ.RO,\1;RZ=95=/*{ Included files are:=/*ƒ9995.&.CRASH.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*ƒ9995.NTS.NNT.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.NTS.NTS.EQ=/*ƒ9995.NTS.NTC.EQ=/*ƒ9995.NTS.SMSG.EQ=/*ƒNTS.NTSSID.AI=/*ƒNTS.NTSIDNT.AI=/*ƒNTS.NTSLSTN.AI=/*ƒNTS.NTSLSTC.AI=/*ƒNTS.NTSCONN.AI=/*ƒNTS.NTSCONC.AI=/*ƒNTS.NTSDISC.AI=/*ƒNTS.NTSRECV.AI=/*ƒNTS.NTSRCVC.AI=/*ƒNTS.NTSSEND.AI=/*ƒNTS.NWSUBR.AI=/*}( =/*=ENDééééõ&%NTSREQ„IDNTƒ1,0HandleNTSusercalls*$*‰COPYRIGHTED1982BYMOTOROLA,INC.*I**************************************************************************Ç*F*NTSREQrespondstouserrequestsforservice.‚Priviledgedrequestsƒ*A*„fromtheSystemServiceControlTaskarepassedontoNTCREQ.†**Ç*A*NTSREQisaccessedviaadynamicallyconfiguredTRAP#1call.‰**Ç*I**************************************************************************)*‰onentry:‚A6=addressofcaller'sTCB..*”A0=logicaladdressofNTSparameterblock.**‰onexit:ƒD0=‹Returncode-*”D0=00ˆSuccessful-ortransactionnotyet *£complete./*”D0=xxˆSeeNTSRCODequatesforlistoferror*£codes.*H**************************************************************************‰INCLUDE9995.&.CRASH.MC*‰INCLUDE9995.&.STR.EQ*‰INCLUDE9995.&.TCB.EQ!*‰INCLUDE9995.SDLCPRI.TEMPLTS.EQ*‰INCLUDE9995.NTS.NNT.EQ*‰INCLUDE9995.NTS.NAT.EQ*‰INCLUDE9995.NTS.LCT.EQ*‰INCLUDE9995.NTS.NTS.EQ*‰INCLUDE9995.NTS.NTC.EQ*‰INCLUDE9995.NTS.SMSG.EQ*ŠNOLISTŠINCLUDE9995.&.CRASH.MCŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TCB.EQ ŠINCLUDE9995.SDLCPRI.TEMPLTS.EQŠLISTŠINCLUDE9995.NTS.NNT.EQŠINCLUDE9995.NTS.NAT.EQŠINCLUDE9995.NTS.LCT.EQŠINCLUDE9995.NTS.NTS.EQŠINCLUDE9995.NTS.NTC.EQŠINCLUDE9995.NTS.SMSG.EQŠPAGE ŠSECTION10ŠOPT„PCS+ŠXREFƒNNTBEG,NATBEG,LCTBEG,NWSTATUS,SYSPOFF$ŠXREFƒNTCREQ,TRABTOU,TRADTXQ,TRAMOVBŠXREFƒTRACTOLL,TRACTOLC* ŠXDEFƒNTSREQ*vE*NTSREQ is a user configured directive invoked via TRAP #1, directive *ƒnumber-2.**NTSREQ:„IFnetworkisdead*‹THEN4*NTSCRASH:ˆSetreturntonotputtaskonreadylist.*‘Returntoexec.*‹ELSE'*‘Clearcommandstatusandreturncode.!*‘IFcommandNOT'getstationID'*‘THEN*—IFthisisanNTCrequest*—THEN*BranchtoNTCREQ.(external)*—ELSE'*IFthisisan'identifyselfcommand'*THEN*£GOTONTSR12:*ELSE*£IFthisisanillegalcommand*£THENþMS3"#*NTSR08:¢Stufferrorcode#NTSRICMD*©($01)intoD0.*©GOTONTSRRTN:.*£ELSE!*©IFcallerNOTanidentifiedNAU*©THEN*¯Stufferrorcode#NTSRINAU*¯($03)intoD0.*¯GOTONTSRRTN:*©ELSE"*NTSR12:¨SavepointertoNATentry*¯inA3.*¯JSRto( theappropriate*¯routine-oneofthese: *¯NTSSID-*²ReturnstationID. *¯NTSIDNT-*²Identifyself. *¯NTSLSTN- *²Listen. *¯NTSLSTC-*²Cancellisten. *¯NTSCONN- *²Connect. *¯NTSCONC-*²Cancelconnect. *¯NTSDISC- *²Disconnect. *¯NTSRECV- *²Receive. *¯NTSRCVC-*²Cancelreceive. *¯NTSSEND-*²Send.*p$*‘ELSE{commandis'getstationID'}*—GOTONTSR12:.*^*v)* Return from command processing routine.*&*NTSRRTN:†IFreturncodeset(D0<>0)*ŽTHEN(*”PlugreturncodefromD0intoNTSP.B."*”IFreturncode=#NTSRKILK($FE)*”THEN*šMarknetworkasdead.0*šChangereturntonotputcalleronreadylist.*šReturntoexec.*”ELSE'*šIFreturncodeisNOTfor'nobuffer'*šTHEN'* Set'transactioncomplete'instatus.5*šPutreturncodefromD0intocaller'sD0(TCBRTCD).*šIF'transactioncomplete'*šTHEN#* WakeupcallingtaskviaNWSIGNAL.*šReturntoexec.%*ŽELSE{Returncodenotset-D0=0)*”Returntoexec.*^/NTSREQ„TST.L‚NWSTATUS‹IsNETWORKdeadoralive?ŠBMI„NTSCRASH‹BranchifdeadDŠTR0$.LOGPHY,A0,#NTSPBSZConvertPBaddrtophysical.$ŠBRA.S‚NTSR02BranchifgoodaddressŠNOP>ŠMOVE.W#NTSRPBLK,TCBRTCD(A6)ERROR-badparamblockaddress.ŠRTE*6NTSR02„MOVE.LD6,A4ŽSaveparameterblockaddressinA4&ŠCLR.B‚NTSSTA(A4)‰Clearcommandstatus$ŠCLR.B‚NTSRCOD(A4)ˆClearreturncode* ŠCLR.L‚D0%ŠMOVE.BNTSCMD(A4),D0†GetNTScommand3ŠBEQ.S‚NTSR12Branchifcommandis'getStationID'#ŠBTSTƒ#7,D0ŽIsthisanNTCcommand?&ŠBNE„NTCREQIfyes-branchtoNTCREQ.**ŠCMP.B‚#NTSCIDNT,D0‡IdentifySelfcommand?ŠBEQ.S‚NTSR12Branchifyes.(ŠBLT.S‚NTSR08Branchifillegalcommand.-ŠCMP.B‚#NTSCBIG,D0ˆIscommandinlegalrange?&ŠBLE.S‚NTSR10Branchifvalidcommand.3NTSR08„MOVE.L#NTSRICMD,D0‡ERROR-illegalcommand. ŠBRA.S‚NTSRRTNŒBranchtoreturn.*8NTSR10„MOVE.LTCBNAU(A6),D1†IscalleranidentifiedNAU?ŠBNE.S‚NTSR12Branchifyes.1ŠMOVE.L#NTSRINAU,D0‡ERROR-unidentifiedcaller. ŠBRA.S‚NTSRRTNŒBranchtoreturn.*4NTSR12„MOVE.LD1,A3ŽSavepointertoNATtableentry.4ŠLEA„NTSCTABL(PC),A0„Startofcommandroutinetable.)ŠLSL.L‚#2,D0ŽCommand*4=offsetintable.*ŠADD.L‚(A0,D0),A0‰Commandroutineaddress.)ŠJSR„(A0)Gotospecificcommandroutine.ŠPAGE*C* Return from Command Processing routine - set return code if error* ŠXDEFƒNTSRRTN$NTSRRTNƒTST.B‚D0‘Isreturncodeset?ŠBEQ.S‚NTSRRTN9‹BranchifNO2ŠMOVE.BD0,NTSRCOD(A4)…Givereturncodetocaller.)ŠCMP.B‚#NTSRKILL,D0‡Isitakillererror?.ŠCRASH.EQ*+1ŽCrashsystemifyes4/11/83SCB.ŠBEQ.S‚NTSCRASH‹Branchifyes.%ŠCMP.B‚#NTSRNOB,D0ˆIsit'nobuffer'?G*ThefollowingBEQ.SwasreplacedbyNOPon4/4/83.‚TheideawastonotI*‚allowausertasktohangupwhenitissuedadisconnectandtherewereE*‚nobufferstosatisfytherequest.‚TheNOPcoupledwithachangeinE*‚NTSREQallowstheerrorcode(-1=#NTSRNOB)'outofbuffers'codetoF*‚bereturnedtothecaller.‚Whenweare'outofbuffers'theNTSP.B.E*‚willcomebackfromNTSREQwiththe'transactioncomplete'bitset.ŠNOP9*‰BEQ.S‚NTSRRTN8‹Branchifyes-TransactionNOTcomplete0ŠBSETƒ#NTSSTC,NTSSTA(A4)Istransactioncoplete?=NTSRRTN8‚MOVE.WD0,TCBRTCD(A6)…Putreturncodeincaller'sD01ŠBTSTƒ#NTSSTC,NTSSTA(A4)Istransactioncomplete?ŠBEQ.S‚NTSRRTN9‹BranchifNO"ŠMOVE.LA6,A0ŽTCBtoA0forSIGNAL ŠBSR„NWSIGNALNTSRRTN9‚RTE—RETURN*O* CRASH NETWORK SERVICES!! by setting NWDEAD flag and not letting task continue*0NTSCRASH‚BSETƒ#31,NWSTATUS‡SetNetworkDeadflag?ŠMOVE.W#1,6(A7)‡Changeexit#,donotputcalleronREADYlistŠRTE*&* Table of Command Processing Routines*3NTSCTABL‚DC.LƒNTSSID-NTSCTABL„ReturnstationID$000ŠDC.LƒNTSIDNT-NTSCTABLƒIdentifySelfroutine‰$01)ŠDC.LƒNTSLSTN-NTSCTABLƒListenroutine$020ŠDC.LƒNTSLSTC-NTSCTABLƒCancelListenroutine‰$03*ŠDC.LƒNTSCONN-NTSCTABLƒConnectroutine$041ŠDC.LƒNTSCONC-NTSCTABLƒCancelconnectroutineˆ$05-ŠDC.LƒNTSDISC-) NTSCTABLƒDisconnectroutineŒ$06*ŠDC.LƒNTSRECV-NTSCTABLƒReceiveroutine$071ŠDC.LƒNTSRCVC-NTSCTABLƒCancelreceiveroutineˆ$08'ŠDC.LƒNTSSEND-NTSCTABLƒSendroutine’$099NTSCBIGƒEQU„(*-NTSCTABL)/4…Anycode>=NTSCBIGisillegal**‰INCLUDENTS.NTSSID.AI*‰INCLUDENTS.NTSIDNT.AI*‰INCLUDENTS.NTSLSTN.AI*‰INCLUDENTS.NTSLSTC.AI*‰INCLUDENTS.NTSCONN.AI*‰INCLUDENTS.NTSCONC.AI*‰INCLUDENTS.NTSDISC.AI*‰INCLUDENTS.NTSRECV.AI*‰INCLUDENTS.NTSRCVC.AI*‰INCLUDENTS.NTSSEND.AI*‰INCLUDENTS.NWSUBR.AIŠINCLUDENTS.NTSSID.AIŠINCLUDENTS.NTSIDNT.AIŠINCLUDENTS.NTSLSTN.AIŠINCLUDENTS.NTSLSTC.AIŠINCLUDENTS.NTSCONN.AIŠINCLUDENTS.NTSCONC.AIŠINCLUDENTS.NTSDISC.AIŠINCLUDENTS.NTSRECV.AIŠINCLUDENTS.NTSRCVC.AIŠINCLUDENTS.NTSSEND.AIŠINCLUDENTS.NWSUBR.AIŠENDéééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NTSSEND.AIª*J************************************************************************** ŠTTL„NTSSEND.SA‰SendRequest*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*?*„NTSSENDhandlesaSendMessagecommand-usedtotransmita…*(*„messagetotheNAUidentifiedbyLCCœ**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTSparameterblock*’A3=callingNAU'sNATentry**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSSDODequatesforlistoferrorcodesF************************************************************************ˆValiditychecks*;NTSSENDƒMOVE.WNTSOPT(A4),D0†Getoptionsforvaliditycheck@ŠAND.W‚#1<,NTSSAD(A4),NTSLEN(A4)Convertbuffaddr%ŠBRA.S‚NTSSD06ŒBranchifgoodaddressŠNOP6NTSSD05ƒMOVE.L#NTSRIBUF,D0‡ERROR-badbufferaddress ŠRTS—RETURN*/NTSSD06ƒTST.L‚NTSLEN(A4)‰Isbufferlength>0?ŠBLE.S‚NTSSD05ŒBranchifNO*#*ˆSearchLCTchainformatchingLCC*.ŠBSR„NWFNLCCŒSearchLCTchainformatchingLCC(ŠBNE„NTSSD01ŒBranchifERROR-notfound1ŠBTSTƒ#LCTCSACT,LCTCSTA(A5)Isconnectionactive?ŠBNE.S‚NTSSD10ŒBranchifYES9NTSSD09ƒMOVE.L#NTSRDISC,D0‡ERROR-Connectionnotactive:() )ŠBTSTƒ#LCTCSDSC,LCTCSTA(A5)Disconnected?ŠBEQ.S‚NTSSD09A‹BranchifNO ŠCLR.L‚D6'ŠMOVE.BLCTLOCCD(A5),D6„Getreasoncode+ŠBSR„NWFRLCTŒFreetheentry-ownerinformed ŠMOVE.LD6,D0ŽReturnreasoncodeNTSSD09A‚RTS—RETURN*;NTSSD10ƒLEA„LCTTWTXM-NTSNEXT(A5),A0Wait-for-xmitQpointerŠBSR„NWLNKPBŒFindendofQ+ŠBNE„NTSSD01ŒBranchiferror-duplicatepb%ŠCLR.L‚NTSNEXT(A4)ˆLinkontoendofQ(ŠMOVE.LA4,NTSNEXT(A0)…LinkentryintoQ*2*ˆPassrequestontotransportlevel-thenreturn* ŠXREFƒTRABTOU6ŠBSETƒ#LCTATWTX,LCTTSTA(A5)Set'wait-for-xmit'status0ŠBSR„TRADTXQŒAsktransportleveltosendmessage&ŠCLR.L‚D0‘SetD0forsuccessfulreturn ŠRTS—RETURNééééé=/*=/*†NTS.NTSSERV.AF=/*0=/* Chain file to assemble module NTS.NTSSERV.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to NTS.NTSSERV.LS=/*=/IFC \1ƒ=ARGNTS.NTSSERV.LS=/ENDIF=/*+=ASM NTS.NTSSERV.SA,NTS.NTSSERV.RO,\1;RZ=50=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.NTS.TR1X.EQ=/*ƒ9995.NTS.NTS.EQ=/*}=/*=ENDéééééé* 0Š' NTS NTSSERV SAEE srrNTSSID AIVV9rrNWCACKS AIgg rrNWCFLSH AIpp.rrNWCREQ AFyyrrNWCREQ SA‚‚ ]rrNWCSEND AI““0rrNWCTPRI AFœœrrNWCTPRI SA¥–7rrNWSUBR AI··„ÌrrSSCT AF@@rrSSCT SAIIh<rrTRABTOU AIºº-MrrTRACTOL AIëëlrrTRADTXQ AIüüArrTRAMOVB AIEE!ýrrTRANSSCNAFnnrrTRANSSCNSAwwrrTRANSSUBAF€€rrTRANSSUBSA‰‰rr;NTSSERVƒIDNTƒ1,0Subroutine-InterfacetoNetworkServices*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.**ŠNOLISTŠINCLUDE9995.&.TR1.EQŠLISTŠINCLUDE9995.NTS.TR1X.EQŠINCLUDE9995.NTS.NTS.EQŠPAGEF*v*********************************************************************NTSSERVmoduleµ**Ä*1*ˆSubroutinetointerfacewithNetworkServices*8*ˆCallsNTSRQSTdirectiveandchecksreturnconditionsˆ**Ä*2*ˆOnentry:‚A0=PointertoNTSorNTCparamblock**Ä*;*ˆOnexit:ƒD0=0ifgoodreturn--or--D0=errorcodeƒ**Ä** Performs following:*<*NTSSERV:ƒPerformTRAP#1with-2code.‚(ReturncodeinD0).***‹IFD0=0onreturnfromtrap(noerror)*‹THEN*ŽGOTONTSRV04:.*‹ELSE-*ŽIFerrorisforbadparameterblockaddress*ŽTHEN.*‘ReturntocallerviaRTS(errorcodeinD0.)*ŽELSE7*‘IFweneedtowaitforabuffer(D0=#NTSRNOB-$FF)*‘THEN*”Delayonesecond.*”GOTONTSSERV:.*‘ELSE*”GOTONTSRV04:. *----------C*NTSRV04:ƒIFtransactioncomplete(indicatedbystatusinNTSP.B.)*‹THEN*ŽGOTONTSRVRTN:*‹ELSE4*ŽIF'waitfortransactioncomplete'optionselected*ŽTHEN*‘GOTONTSRV12:.*ŽELSE.*‘IFackset(indicatedbystatusinNTSP.B.)*‘THEN*”GOTONTSRVRTN:*‘ELSE#*”IF'waitforack'optionselected*”THEN*—GOTONTSRV12:*”ELSE6*—IFbufferfreeset(indicatedbystatusinNTSP.B.)*—THEN*šGOTONTSRVRTN:*—ELSE+*šIF'waitforbufferfree'optionselected*šTHEN*GOTONTSRV12:*šELSE*GOTONTSRVRTN: *p---------5*NTSRVRTN:‚Setthereturn‚codefromNTSP.B.intoD0.!*‹ReturntocallingtaskviaRTS. *----------*NTSRV12:ƒWaitforwakeup.*‹GOTONTSRV04:F*^********************************************************************ŠPAGE ŠSECTION14ŠOPT„PCSGNTSRNOBƒEQU„255„ErrorcodeusedwhenbufferunavailableforSSCmessage* ŠXDEFƒNTSSERV-NTSSERVƒMOVE.W#NWRQST,D0‰NTSRQSTdirective#ŠTRAPƒ#1‘callNTSRQST)ŠBEQ.S‚NTSRV04ŒBranchifnoterrorreturn=QF#7ŠCMP.W‚#NTSRPBLK,D0‡Iserror-badparamblockaddress?ŠBLS.S‚NTSRVRT2‹BranchifYES+ŠCMP.W‚#NTSRNOB,D0ˆNeedtowaitforbuffer?I*ThefollowingBNE.SwasreplacedbyBRA.Son4/4/83.‚TheideawastonotI*‚allowausertasktohankupwhenitissuedadisconnectandtherewereG*‚nobufferstosatisfytherequest.‚TheBRA.ScoupledwithachangeinE*‚NTSREQallowstheerrorcode(-1=#NTSRNOB)'outofbuffers'codetoF*‚bereturnedtothecaller.‚Whenweare'outofbuffers'theNTSP.B.E*‚wi* llcomebackfromNTSREQwiththe'transactioncomplete'bitset.ŠBRA.S‚NTSRV04*ˆBNE.S…NTSRV04ŠBranchifNO-ŠMOVE.LA0,-(A7)‹Saveparameterblockaddress#ŠMOVE.L#1000,A0‹DELAYfor1second ŠERQ.DELAY0ŠMOVE.L(A7)+,A0‹Restoreparameterblockaddress%ŠBRA„NTSSERVŒBranchbacktotryagain*9NTSRV04ƒBTSTƒ#NTSSTC,NTSSTA(A0)Is'tranactioncomplete'?ŠBNE.S‚NTSRVRTN‹BranchifYES5ŠBTSTƒ#NTSOTC,NTSOPT(A0)Waitfor'transaccomplete'?ŠBNE.S‚NTSRV12ŒBranchifYES%ŠBTSTƒ#NTSSACK,NTSSTA(A0)IsACKset?ŠBNE.S‚NTSRVRTN‹BranchifYES+ŠBTSTƒ#NTSOACK,NTSOPT(A0)WaitforACKset?ŠBNE.S‚NTSRV12ŒBranchifYES/ŠBTSTƒ#NTSSBFF,NTSSTA(A0)Is'bufferfree'set?ŠBNE.S‚NTSRVRTN‹BranchifYES5ŠBTSTƒ#NTSOBFF,NTSOPT(A0)Waitfor'bufferfree'set?ŠBNE.S‚NTSRV12ŒBranchifYES.NTSRVRTN‚MOVE.BNTSRCOD(A0),D0…SetReturnCodeNTSRVRT2‚RTS—RETURN*NTSRV12ƒERQ.WAIT&ŠBRA„NTSRV04ŒGobacktorecheckstatusŠENDééŠPAGEJ***************************************************************************INCLUDEFILE:‚NTS.NTSSID.AI«*J************************************************************************** (ŠTTL„NTSSID.SAŠReturnStationIDRequest*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*1*„NTSSID‚handlesarequesttoreturnStationID’**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNTSparameterblock**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodes*8*’NotethatNTSRCODisalsousedtoreturnthestatusof0*’whetherwearebeingpolledornot.‚Avalueof:*’#NTSRPOLL($50)isreturnedifwehaven'tbeenpolledin*’alongtime.F********************************************************************** *v*******2*NTSSID:ƒPullstationIDfromnetworknametable.<*‹Placebinaryvalueintoupperhalfofuser'sD1.(TCBD0+4)8*‹ConverttoASCIIandplaceinlowerhalfofuser'sD1.@*‹IfNWSTATUS(insyspar)indicatesthatwehavenotbeenpolled *‹recently*‹THEN*Žreturn#NTSRPOLL($50)inD0. *^*******5NTSSID„MOVE.LNNTBEG,A5ŠPointertoNetworkNameTable ŠCLR.L‚D0%ŠMOVE.BNNTHSID(A5),D0…GetStationID3ŠMOVE.WD0,TCBD0+4(A6)…Savebinaryvalueforcaller ŠLSL.W‚#4,D0%ŠLSR.B‚#4,D0ŽSeparateIDinto2bytesŠCMP.B‚#9,D0ŽIsLSbyte>9?ŠBLS.S‚NTSSID4ŒBranchifNOŠADD.B‚#7,D0ŽChangetoA-F'NTSSID4ƒCMP.W‚#$A00,D0‹IsMSbyte>9?ŠBCS.S‚NTSSID6ŒBranchifNOŠADD.W‚#$700,D0‹ChangetoA-F(NTSSID6ƒADD.W‚#$3030,D0ŠConverttoascii2ŠMOVE.WD0,TCBD0+6(A6)…SaveasciivalueforcallerŠCLR.L‚D0‘Successfulreturn9ŠMOVE.LSYSPOFF,A0‰OffsettouseinaccessingVM02syspar3ŠTST.B‚NWSTATUS+3(A0)…Havewebeenpolledrecently?-ŠBEQ.S‚NTSSID7ŒBranchifyes-everythingok.N7W.ŠMOVE.B#NTSRPOLL,D0‡Indicatenopolltouser.4NTSSID7ƒBSETƒ#NTSSTC,NTSSTA(A4)Transactioncomplete ŠRTS—RETURN+ éééééééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NWCACKS.AIª*J************************************************************************** 4‰TTL‡NWCACKS.SA‚AcknowledgeReceiptofSDLCresponse*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*5*„NWCACKSwillAcknowledgereceiptofSDLCresponse**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNWCparameterblock*’A3=callingNAU'sNATentry**ˆonexit:D0=‡Returncode*’D0=‚00ƒSuccessful!F***********************************************************************‰XREF†SBUSRACK%NWCACKS‚CLR.L…D0Clearforshortload‰MOVE.B„NTWARSP(A4),D0†Response‰BSR‡SBUSRACKŒTellSDLC$‰BRA.S…NWCAK02Branchifgoodreturn‰RTS›Returntowaitforbuffer*8NWCAK02‚BSET†#NTSSTC,NTWSTA(A4)‚SetTransactioncomplete&‰CLR.L…D0SetD0forsuccessfulreturn ‰RTS˜RETURNééé_!+ ŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NWCFLSH.AIª*J************************************************************************** 3‰TTL‡NWCFLSH.SA‚FlushXMITbuffersforsomeStation*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*@*„NWCFLSHwillFlushXMITbuffersforsomestationabouttobe„**ˆdownloaded²**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNWCparameterblock*’A3=callingNAU'sNATentry**ˆonexit:D0=‡Returncode*’D0=‚00ƒSuccessful!F***********************************************************************‰XREF†SBSDLCFL,NWCNSD%NWCFLSH‚CLR.L…D1Clearforshortload!‰MOVE.B„NTWARSP(A4),D1ƒStationID‰BSR‡SBSDLCFL‰TellSDLCI* Ed Skinner, March 2, 1983 - SDLCFL passes back a return code indicatingH*whetherornotthebufferwasproperlyenqueued.‚IfthebufferwasnotJ* handled (because the secondary station ID was incorrect), this routine'sB* absence of error checking will cause the system to lose buffers.L* Additionally, SDLCFL is messed up right now, and doesn't return the properE*indicationinallcases.‚Pleaseseemeifyouhaveanyquestionsin* this regard...N* This module (NWCFLSH) and another (48.INET.SRSN.SA) are the only two callersI* of SDLCFL and are, therefore, the only modules requiring maintenance in* this regard as of this date.$‰BRA.S…NWCFL02ŠBranchifgoodreturn‰RTS˜Returntowaitforbuffer*NWCFL02‚CLR.L…D7!‰MOVE.B„NTWARSP(A4),D7‚StationID3‰BSR‡NWCNSDŠCancelallconnectionsforthisstation1‰BSET†#NTSSTC,NTWSTA(A4)‚SetTransactioncomplete&‰CLR.L…D0SetD0forsuccessfulreturn ‰RTS˜RETURNh/=/*=/*†NTS.NWCREQ.AF=/*/=/* Chain file to assemble module NTS.NWCREQ.SA=/*:=/* If no output argument is specified for the listing the,=/* chain file will default to NTS.NWCREQ.LS=/*=/IFC \1ƒ=ARGNTS.NWCREQ.LS=/ENDIF=/*)=ASM NTS.NWCREQ.SA,NTS.NWCREQ.RO,\1;RZ=70=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*ƒ9995.NTS.NNT.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.NTS.NTS.EQ=/*ƒ9995.NTS.NTW.EQ=/*ƒ9995.NTS.SMSG.EQ=/*ƒNTS.NWCACKS.AI=/*ƒNTS.NWCFLSH.AI=/*ƒNTS.NWCSEND.AI=/*}=/*=ENDéééé, éq=NWCCBIGisillegal‰INCLUDENTS.NWCACKS.AI‰INCLUDENTS.NWCFLSH.AI‰INCLUDENTS.NWCSEND.AI‰ENDé, éééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.NWCSEND.AIª*J************************************************************************** ,‰TTL‡NWCSEND.SA‚NetworkControlSendRequest*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*@*„NWCSENDhandlesaSendMessagecommand-usedtotransmitan„*+*„entireBIUtothestationchosenbyNWC™**Ä*F***********************************************************************(*ˆonentry:A6=addressofcaller'sTCB.*’A4=physicaladdressofNWCparameterblock*’A3=callingNAU'sNATentry**ˆonexit:D0=‡Returncode-*’D0=00„Successful-ortransactionnotyet *complete.5*’D0=xx„SeeNTSRCODequatesforlistoferrorcodesF***********************************************************************JNWCSEND‚TR0$.LOGPHY,NTSSAD(A4),NTSLEN(A4)‚Convertbuffaddr%‰BRA.S…NWCSD06ŠBranchifgoodaddress‰NOP/‰MOVE.L„#NTSRIBUF,D0…ERROR-badbufferaddressNWCSD05‚RTS˜RETURN*2NWCSD06‚MOVE.L„D6,NTSSAD(A4)„Savephysicaladdress**ˆAlwaysusesameLCTentry*)‰MOVE.L„NATLCTLK(A3),A5‚LCTentryaddress4‰LEA‡LCTTWTXM-NTSNEXT(A5),A0Wait-for-recvQpointer‰BSR‡NWLNKPBŠFindendofQ1‰BNE‡NWCSD05ŠBranchiferror-NOparameterblock%‰CLR.L…NTSNEXT(A4)†LinkontoendofQ(‰MOVE.L„A4,NTSNEXT(A0)ƒLinkentryintoQ*2*ˆPassrequestontotransportlevel-thenreturn*6‰BSET†#LCTATWTX,LCTTSTA(A5)Set'wait-for-xmit'status0‰BSR‡TRADTXQŠAsktransportleveltosendmessage&‰CLR.L…D0SetD0forsuccessfulreturn ‰RTS˜RETURNé‹1=/*=/*†NTS.NWCTPRI.AF=/*0=/* Chain file to assemble module NTS.NWCTPRI.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to NTS.NWCTPRI.LS=/*=/IFC \1ƒ=ARGNTS.NWCTPRI.LS=/ENDIF=/*,=ASM NTS.NWCTPRI.SA,NTS.NWCTPRI.RO,\1;RZ=126=/*{ Included files are:=/*ƒ9995.&.CRASH.MC=/*ƒ9995.&.EXE.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.&.TR1.EQ=/*ƒ9995.NTS.TR1X.EQ=/*ƒ9995.NTS.NTS.EQ=/*ƒ9995.NTS.NTW.EQ=/*ƒ9995.NTS.LIB.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*ƒ9995.NTS.SMSG.EQ=/*ƒ9995.NTS.NWCTPRI.EQ=/*}=/*=ENDé- éééé”-NWCTPRIƒIDNTƒ1,0NetworkServiceControlTask,ŠTTL„NWCTPRI.SA‰NetworkServiceControlTask:* Contains upload code to be used on GMAD project JAN '83.?*ƒWilleventuallyreplaceNTS.NWCTPRI.SAandbeusedforHDS400 *ƒaswell.*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*B*„PerformsSystemUpload/DownloadfunctionsforNetworkServices‚**Ä*F***********************************************************************)*ˆStartedbyNetworkInitializer‚-‚ININET* *ˆOnEntry:*’D0=StationID*’A0=TaskName*’A1=OperatorDevice*’A3=Session**ˆINCLUDE9995.&.CRASH.MC*ˆINCLUDE9995.&.EXE.EQ*ˆINCLUDE9995.&.IOE.EQ*ˆINCLUDE9995.&.TR1.EQ‰NOLIST‰INCLUDE9995.&.CRASH.MC‰INCLUDE9995.&.EXE.EQ‰INCLUDE9995.&.IOE.EQ‰INCLUDE9995.&.TR1.EQ‰LIST**ˆINCLUDE9995.NTS.TR1X.EQ*ˆINCLUDE9995.NTS.NTS.EQ*ˆINCLUDE9995.NTS.NTW.EQ*ˆINCLUDE9995.NTS.LIB.EQ!*ˆINCLUDE9995.SDLCPRI.TEMPLTS.EQ*ˆINCLUDE9995.NTS.SMSG.EQ*ˆINCLUDE9995.NTS.NWCTPRI.EQ‰INCLUDE9995.NTS.TR1X.EQ‰INCLUDE9995.NTS.NTS.EQ‰INCLUDE9995.NTS.NTW.EQ‰INCLUDE9995.NTS.LIB.EQ ‰INCLUDE9995.SDLCPRI.TEMPLTS.EQ‰INCLUDE9995.NTS.SMSG.EQ‰INCLUDE9995.NTS.NWCTPRI.EQŠPAGE ŠSECTION14ŠOPT„PCSŠXREFƒNTSSERV,EDITFILEŠXREFƒPARSE,OPTION* ŠXDEFƒNWCTC*v****************************************************************** NWCTPRI module*3*ˆNetworkcontroltaskrunsonprimarysystemonly.*2*NWCT:†ObtainandclearoutadatasegmentinRAM.**^ŠDS…0’Forceevenbyteboundary. NWCT†EQU„*+NWCT1…ERQ.GTSEGGETDPB(PC)†Getdatasegment#ŠBEQ.S‚NWCT2ŽBranchifgoodsegmentŠERRMESG%GETDPB„DC.Lƒ0,0Task,Session(0=Self) ŠDC.Wƒ$2000,0ŒLogical=PhysicalŠDC.Lƒ'DATA',0‹SegmentnameDTSIZE„DC.LƒNWCDEND1‹Length**ˆClearDATASegment*CLEAR…CLR.L‚(A0)+ŽClear4bytesŠCMP.L‚A0,A1Žatendyet?ŠBGT.S‚CLEARŽbranchinNOŠRTS*6NWCT2…MOVE.LA0,A6ŽStartofDATAsegment(A6=basereg)–P¦?®;¶:¾IÆBÎ;Ö2ÞCæ>î<ö8þ0?A34&5.F64>CFAN:VR^:fBnEvD~@†C#ŠLEA„STACK(A6),A7‡SetStackPointerŠMOVE.LA7,A0ŽClearabovestack2ŠLEA„NWCDEND1(A6),A1„EndofDATAsegment(Primary)&NWCT3…BSR.S‚CLEARŽClearentiresegment8ŠMOVEM.LD1-D6/A3,STAINFO(A6)SaveentryregistervaluesŠPAGE*v!*NWCT30:„Clearthestationflags.*>*‹Initializereceiveparameterblocksas'free'andpointthem"*‹toanassociatedreceivebuffer.*>*‹Initializesendparameterblocksas'free'andpointthemto*‹anassociatedsendbuffer.*%*‹Initializeconnectparameterblo- ck.?*‹Initializelistenparameterblock,putlistenparameterblock7*‹ontowaitqueueandissuelistenrequestviaNTSSERV.*A*‹Initializemonitorcontrolblockswithmessagebufferaddresses6*‹clearinglinksinmonitorcontrolblocklinkedlist.*>*‹InitializeFHSandIOSparameterblocksindatasegmentfrom=*‹theirimageinprogramsegment.‚Theseparameterblockswill*‹beusedtoaccessNETLOAD.SA*^** Clear station flags*&ŠLEA„STAFLGB(A6),A0…Baseofflagarea.;ŠMOVE.L#STAFLGL-1,D7†Numberofbytesinstationflagarea.NWCT30„CLR.B‚0(A0,D7)ŠDBF„D7,NWCT30 *"*ˆInitializeReceiveAreaPointers*'ŠCLR.L‚WAITQHD(A6)ˆClearheadofWaitQŠMOVE.L#NUMRCV-1,D7‡#ENTRIES*ŠLEA„RCVBLK(A6),A0†Parameterblockaddress0NWCT32„MOVE.W#-1,NTWSTA(A0)…Status='pbisfree')ŠLEA„RCVBUF(A0),A1†Messagebufferaddress#ŠMOVE.LA1,NTWSAD(A0)†SaveitinpbŠCLR.L‚RCVNEXT(A0)ˆClearQlink4ŠLEA„RCVBKSZ(A0),A0…Addblocksize-nextpbaddress"ŠDBRAƒD7,NWCT32ŠLoopbackfornext*!ŠBSR„SRTRCVIssue'recv'commands**ˆInitializeSendArea*#ŠMOVE.L#NUMSND-1,D7‡Pointeroffset*ŠLEA„SNDBLK(A6),A0†Parameterblockaddress0NWCT34„MOVE.B#-1,NTWSTA(A0)…Status='pbisfree')ŠLEA„SNDBUF(A0),A1†Messagebufferaddress#ŠMOVE.LA1,NTWSAD(A0)†SaveitinpbŠCLR.L‚SNDNEXT(A0)ˆClearQlink4ŠLEA„SNDBKSZ(A0),A0…Addblocksize-nextpbaddress"ŠDBRAƒD7,NWCT34ŠLoopbackfornext*0*ˆInitializeListenandConnectParameterBlocks*#ŠLEA„CONNPB(A6),A0†StartofConnect,ŠMOVE.B#NTSCCONN,NTSCMD(A0)Connectcommand*"ŠLEA„LSTNPB(A6),A0†StartofListen+ŠMOVE.B#NTSCLSTN,NTSCMD(A0)Listencommand ŠLEA„LSTNBF(A6),A1†Listenbuffer.ŠMOVE.LA1,NTSLEN(A0)†Saveaddrinparamblock<ŠMOVE.L#LSTNBFL,NTSSAD(A0)StufflengthofbufferintoP.B.**‰BSR„LKWAITQŒPutinwaitqueue"*‰BSR„NTSSERVŒissueListencommand*#*ˆInitializeMonitorControlBlocks*#ŠMOVE.L#MAXMON-1,D7‡Count#blocks*ŠLEA„MONRPB(A6),A0†Parameterblockaddress/NWCT36„LEA„MONRBF(A0),A1†Messagebufferaddress#ŠMOVE.LA1,NTSSAD(A0)†Saveitinpb.ŠMOVE.L#MONRBFSZ,NTSLEN(A0)Savelengthinpb ŠCLR.L‚MONRNEXT(A0)‡ClearQlink4ŠLEA„MONBKSZ(A0),A0…Addblocksize-nextpbaddress"ŠDBRAƒD7,NWCT36ŠLoopbackfornext*=*ˆInitializeFHS&IOSParameterBlocksforFile"NETLOAD.SA"**ŠMOVE.L#FHSBLN+IOSBLN-1,D7LengthtoMove+ŠLEA„FHSNETS(A6),A0…PointertoSegmentArea+ŠLEA„NETSFHS(PC),A1…PointertoProgramArea%NWCT38„MOVE.B(A1)+,(A0)+ˆMoveaByteŠDBRAƒD7,NWCT38ŠAllMoved? ŠBRA„NWCMAIN*$*ˆFHS&IOSBlocksBasicInformation*&NETLUN„SET„1’LUNFor"NETLOAD.SA"File'NETSFHSƒDC.WƒFHASGN,FOPPR+FOPISK,NETLUNŠDC.Lƒ'„'VolumeIDŠDC.Wƒ-1‘UsernumberŠDC.Lƒ'„','„'†CatalogŠDC.Bƒ'NETLOADSA'‡FilenameŠDC.Wƒ0 ŠDC.Lƒ0,0(ŠIOS.NETSIOREAD,IOPRAN,NETLUN,0,0,0,0,0"LOADFHSƒDC.WƒFHASGN,FOPPR+FOPCON,0ŠDC.Lƒ'„'VolumeIDŠDC.Wƒ-1‘UsernumberŠDC.Lƒ'„','„'†CatalogŠDC.Bƒ'ˆSY'‡FilenameŠDC.Wƒ0 ŠDC.Lƒ0,0JIOPT†SETIOPBIN+IOPWAT+IOPNOC+IOPBLK+IOPRANBINARY,WAIT,NOCOMPLADRBLOCK!ŠIOS.LOADIOREAD,IOPT,0,0,0,0,0,0ŠPAGE*M* The following logical unit table indicates what logical units are availableI*ƒfordownloading.‚RoutineGETLOADwillassociatethelogicalunitnumberH*ƒfromtheLUNTBLwiththecorrespondingdownloadarea.‚Forexample,theD*ƒ7thdownloadareawouldgetlogicalunit9.‚NotethatlogicalunitG*ƒ1isnotavailablesinceitisusedtoreadtheNETLOADfile.‚LogicalG*ƒunit6isnotavailablesinceitisgiventoNWCTthroughINETandis6*ƒusedtooutputmessagestotheterminalviaOUTTERM.I* It should go without saying that the system should be sysgened to allowL*ƒenoughlocicalunitstohandlethemaximumnumberofdownloadsanticipated*ƒatonetime.*"LUNTBL„DC.Bƒ12,11,10,9,8,7,5,4,3,2LUNTBLSZ‚EQU„*-LUNTBLŠPAGE*vH*NWCMAIN:ƒSetuptocheckalloftheparameterblocksonthewaitqueue.@*NWCM04:„Ifthereisaanotherparameterblockonthewaitqueue*‹THEN6*ŽIFtransactionforthisparameterblockiscomplete.*ŽTH. EN2*‘Removethisparameterblockfromthewaitqueue.*‘CASEcommandtype*•Receive:GOTONWCRECV*•Listen‚:GOTONWCLSTN*•Connect:GOTONWCCONN*•Cancel*–connect:GOTONWCCONC*•Otherwise:GOTONWCSEND *‘ENDCASE*ŽELSE4*‘Setuptochecknextparameterblockonthequeue.*‘GOTONWCM04.*‹ELSE>*ŽPostallreceivesviaBSRSRTRCV-Thisroutinewillexamine;*allofthereceiveparameterblocks.‚Ifitfindsanythat<*arefree,itwillsetoptiontoreceivefromany,linkthe:*parameterblockonthereceivelistviaBSRLNKWAITQand,*issuethereceiverequestviaBSRNTSSERV.*ŽWait300ms.*ŽGOTONWCMAIN.*^*&*ˆMainLoop-Lookforsomethingtodo*/*ˆCheckalltransactionsin'Wait-for-TC'Queue*8NWCMAINƒLEA„WAITQHD-RCVNEXT(A6),A4Startof'wait'queue0NWCM04„MOVE.LA4,A5ŽSet'previousentry'pointer6NWCM06„MOVE.LRCVNEXT(A5),D0…Anyparamblockswaiting?"ŠBEQ.S‚NWCM80Branchifalltested(ŠMOVE.LD0,A4ŽAddressofparameterblock1ŠBTSTƒ#NTSSTC,NTWSTA(A4)Istransactioncomplete?ŠBEQ„NWCM04BranchifNO4ŠMOVE.LRCVNEXT(A4),RCVNEXT(A5)Removefrom'wait'Q'ŠCLR.L‚RCVNEXT(A4)ˆClear'next'pointer#ŠMOVE.BNTWCMD(A4),D0†Checkcommand+ŠCMP.B‚#NTSCRECV,D0‡Isita'RECV'command?ŠBEQ.S‚NWCRECVŒBranchifYES+ŠCMP.B‚#NTSCLSTN,D0‡Isita'LSTN'command?ŠBEQ„NWCLSTNŒBranchifYES+ŠCMP.B‚#NTSCCONN,D0‡Isita'CONN'command?ŠBEQ„NWCCONNŒBranchifYES+ŠCMP.B‚#NTSCCONC,D0‡Isita'CONC'command?ŠBEQ„NWCCONCŒBranchifYES)ŠBRA„NWCSENDŒIfnoneofabove-thenSEND*2*ˆReturnhereifSENDmessagebuffernotavailable*CNWCM50„MOVE.LRCVNEXT(A5),RCVNEXT(A4)Linkbackjustbeforecurrent$ŠMOVE.LA4,RCVNEXT(A5)…Completelink#ŠBRA„NWCM04Continuewithmainloop***ˆRe-issuethereceivesthatwerefreedup*NWCM60„BSR„SRTRCV* ŠBRA„NWCM06**$*ˆEndofMainLoop-Preparetowait*1NWCM80„BSR„SRTRCVBesureallreceivesareposted%ŠMOVE.L#300,A0ŒWait300milliseconds ŠERQ.DELAYWŠBRA„NWCMAINŒRestartmainloopŠPAGE*1*ˆComehereifanerrormessagehasbeenreceived**ˆWilldecidewhattodowitherrorslater*/ERRMSG„MOVE.B#-1,NTWSTA(A4)…THROWMESSAGEAWAYŠBRA„NWCM60RETURNTOMAINLOOP*/*ˆComeheretoabortNWC-unrecoverableerror.*NWCASR„MOVE.L#$99,A0QUIT†ERQ.ABORTŠPAGE*v* Message received*J*NWCRECV:ƒIFerrorindicatedinparameterreturnstatusofparameterblock*‹THEN*ŽCrashsystem.*‹IFmessagenotfrommonitor*‹THEN,*ŽOutputmessagetoterminalviaBSRMSGOUT.*ŽIFuploadrecordreceived*ŽTHEN*‘Flagreceiveareaasfree.%*‘IFnodownloadareaforthis2ndary*‘THEN(*”Flag2ndaryfornouploadinprogress.1*”Flag2ndaryfornouploadonnextRIMreceived.*”GOTONWCM60:.5*‘{Downloadareaallocatedandfoundforthis2ndary}<*‘IFthis2ndaryisNOTflaggedashavinguploadinprogress*‘THEN*”GOTONWCUL20:.!*‘Writedownloadrecordstofile.*‘Advancerecordpointer.#*‘IFlasttransmissionfordownload*‘THEN*NWCUL20:ŒClosedownloadfile.1*”Flag2ndaryfornouploadonnextRIMreceived.!*”Flaguploadasnotinprogress.&*”FreedownloadareaviaBSRFRELOAD:.*”GOTONWCM60:.*Ž{Uploadrecordnotreceived}*ŽIFNOT'I'framereceived*ŽTHEN3*‘IFNOTRIM(RequestInitializationMode)received*‘THEN'*”AttempttogetbufferviaBSRGETSND.*”IFbuffernotavailable*”THEN4*NWCM50:LinkthisP.B.upontheWaitforTCqueue.*—GOTOmainloopatNWCM04:.*”{Bufferisavailable}!*”Flagthisreceiveareaasfree.*”CASE(typeofresponse)*—DM(Disconnectmode):'*šSendSNRM(SetNormalResponseMode).*šGOTONWCM60:*—RD(Requestdisconnect):%*NWCRDISC:‘Send'disconnect'command.1*NWCM60:“Reissueanyreceivesthatwerefreedup."*šGOTONWCM06(Backtomainloop).*—FRMR(Framereject):'*šSendSNRM(SetNormalResponseMode).*šGOTONWCM60:"*—SNRM(SetNormalResponseMode).*šSendACK(Acknowledgement).*šGOTONWCM60: *”ENDCASE*‘ELSE‚{RIMreceived}(*”{R. IMreceived-downloadthisstation}?*NWCRRIM:ŒIFdownloadblockcurrentlyreservedforthisstation*”THEN*—IFSIMWAIT<>0*—THEN*šDecrementSIMWAIT.*šGOTONWCM60:.*—ELSE‚{SIMWAIT=0},*šClosethecurrentfilewearedownloading.&*šFreethedownloadareawewereusing*šviaBSRFRELOAD.*šGOTONWCRIM4:.'*NWCRIM4:ŒGeta'send'parameterblock.#*”IFwecan'tgetaparameterblock*”THEN*—GOTONWCM60:.4*”Send'flush'command(thiscommandwillcancelall5*”connectionstotheremotestation)viaBSRSNDMSGA.*”Getdownloadblock.#*”IFnodownloadblockisavailable*”THEN*—GOTONWCM60:.*”Getasendparameterblock.&*”IFnosendparameterblockavailable*”THEN*—Freeupthedownloadblock.*—GOTONWCM60:.<*NWCRIM10:‹SendSIM(SetInitializationMode)with'waitfor *”transactioncomplete'bitset..*”IFwe'resysgenedtoNOTperformauto-upload*”THEN*—GOTONWCRIM50:9*”IFflagforthisstationindicatesnouploadattempton *”thisRIM*”THEN‚{Uploadthis2ndary})*—Openreceivingfilefordownloadimage.$*—IFerrorinopeningreceivingfile*—THEN!*šFlaguploadasnotinprogress.%*šFlagnouploadattemptonnextRIM.*šGOTONWCRMERA:.&*—{Noerrorinopeningreceivingfile}*—Flaguploadasinprogress.*—Prepareuploadcommand.!*—Send'initiateupload'command.*—GOTONWCM60:.*”ELSE‚{Downloadthis2ndary};*NWCRIM50:ŽFlaguploadnotinprogress/downloadinprogress+*—Prepareloadbufferfordownloadcommand.3*—ReadthefilenametodownloadfromtheNETLOAD.SA7*—fileusingtheremotestationIDastherecordnumber*—intotheNETLOADfile.6*—IFtherewasanerrorinreadingtheNETLOAD.SAfile*—THEN*šGOTONWCRMERA:.5*—ReadtheLIBfromthefilethatwearedownloading.*—IFerroronreadofLIB*—THEN*šGOTONWCRMERA2*—Setup'initiatedownload'commandwithstarting5*—address,bytecount,transferaddress,statusword,*—andinitialstackpointer.4*—SendtheinitiatedownloadcommandviaBSRSNDMSG.*—GOTONWCM60:.*ŽELSE‚{'I'framereceived}*‘Flagreceiveareaasfree.*‘Getdownloadblock. *‘IFnodownloadblockavailable*‘THEN*”GOTONWCM60:*‘ClearSIMWAIT.*‘GOTONWCM60.*‹ELSE‚{messagefrommonitor}*ŽGOTONWCRMON*^** Message received -- read it**NWCRECVƒTST.B‚NTSRCOD(A4)ˆTestreturncode#ŠCRASH.NE*+1ŽCrashsystemiferror,ŠMOVE.LNTWSAD(A4),A3†Messagebufferaddress* *A3‚pointstoreceivedmessage.-*A4‚pointstoNTSP.B.ofcompletedreceive.-ŠCMP.B‚#1,NTSLCC(A4)†Ismessagefrommonitor?ŠBGE„NWCRMONŒBranchifYESG*---Checkforerrorhere.‚Iferrorthenputoutmessageonterminaland*---‚freeupreceivearea.)ŠMOVE.BSDDRSP(A3),D0†SDLCResponse->D0&ŠBSR„MSGOUTOutputMessagetoTerminal** Determine if upload recordŠMOVE.WDNSLTH1(A3),D02ŠAND.W‚#$F0FF,D0ŠDisregard1standlastsegflags.AŠCMP.W‚#THB1NWC<<8!DNLDAT,D0Isthisanupload/downloadrecord...)*£...witha'DAT'typerecorddescriptor?2ŠBNE„NWCRECV8‹Branchifno-notanuploadrecord.*A*Wehaveanuploaddatarecord.‚Flagthisreceiveblockasfree./*ƒGettheupload/downloadblockassociatedwithA*ƒthissecondarystation.(Itshouldalreadybeallocatedtothis *ƒsecondary)3ŠMOVE.B#-1,NTWSTA(A4)…Flagreceivebufferasfree.%ŠCLR.B‚DNSLTH2(A3)ˆClearuploadcode.+ŠMOVE.BSDDSEC(A3),D0†SecondarystationID..ŠBSR„GETLUNGetdownloadblockaddressintoA24ŠBEQ.S‚NWCUL10ŒBranchiffoundupload/downloadblock*D*Can'tfindupload/downloadblock.‚Flagsecondaryforuploadnotin *ƒprogress.Returntomainloop. ŠCLR.L‚D0/ŠMOVE.BSDDSEC(A3),D0†Secondarystationnumber.8ŠLEA„STAFLGB(A6),A0…Addressof2ndarystationflagbase.5ŠBCLRƒ#STAFUP,0(A0,D0)ƒClearuploadinprogressflag.ŠBRA„NWCM60Backtomainloop.*H*Wehavefoundtheupload/downloadblockforthissecondary.‚Checkthat1*ƒthisstationisflaggedforuploadinprogress.NWCUL10ƒCLR.L‚D0/ŠMOVE.BSDDSEC(A3),D0†Secondarystationnumber.8/ ŠLEA„STAFLGB(A6),A0…Addressof2ndarystationflagbase.*ŠBTSTƒ#STAFUP,0(A0,D0)ƒUploadinprogress?"ŠCRASH.EQ*+1ŽCrashsystemifnot.*A* We have verified that this station is in the process of upload.8*ƒMovethedatawehavejustreadintothestagingarea.%ŠMOVE.LBUFBOT(A2),A0†Movetoaddress2ŠLEA„RCVBUF+SDDLNG+THNSIZ(A4),A1MovefromaddressŠMOVE.LNTSRCSZ(A4),D01ŠSUB.L‚#SDDLNG+THNSIZ,D0‚Numberofbytestomove.>ŠADD.L‚D0,BYTECNT(A2)…Bumpthenumberofbytesreceivedcount.MOVUL1„MOVE.W(A1)+,(A0)+ ŠSUB.L‚#2,D0 ŠBGT.S‚MOVUL1*B*Wehavemovedthedatatoastagingarea.‚Ifwehaveaccumulated5*ƒatleastonesector,writeitouttothedumpfile.ŠLEA„LOADBUF(A2),A18ŠMOVE.LBUFBOT(A2),A0†Pointsto1stbyteonthisreceiveŠMOVE.LNTSRCSZ(A4),D1AŠSUB.L‚#SDDLNG+THNSIZ+1,D1D1=numberofbyteslastreceived-1-ŠADD.L‚A0,D1ŽD1pointstolastbytereceived.(ŠADD.L‚#255,A1ŒLastbyteinsectorimage ŠCMP.L‚A1,D11ŠBHS.S‚WRITUPGowritesinceweaccumulatesectorŠMOVE.LNTSRCSZ(A4),D0<ŠSUB.L‚#SDDLNG+THNSIZ,D0‚D0=numberofbyteslastreceived.9ŠADD.L‚D0,BUFBOT(A2)†Bumpbufferbottomfornextreceive. ŠBRA„NWCM60*)* We have accumulated a sector - write it9WRITUP„LEA„IOSLOAD(A2),A0…AddressofIOSparameterblock.+ŠMOVE.W#IOWRIT,IOSFCT(A0)Command=write.BŠMOVE.W#IOPRAN!IOPBIN!IOPBLK!IOPPOS!IOPIMG,IOSOPT(A0)RRN,image.,ŠMOVE.LA1,IOSEAD(A0)†Bufferendingaddress.ŠSUB.L‚#255,A1.ŠMOVE.LA1,IOSSAD(A0)†Bufferstartingaddress.ŠTRAPƒ#2‘Writeoutthebuffer.ŠBEQ„NWCUL15ŒBranchongoodI/O*I*BadI/Otryingtowritetouploadfile.‚Flaguploadasnotinprogress.(* Branch to I/O error reporting routine. ŠCLR.L‚D1*"* Display error for upload aborted!ŠMOVE.LD0,-(A7)‹Saveerrorcode!'ŠMOVE.LA2,A4ŽPointA4todownloadarea#ŠLEA„MSGUAS(PC),A1†Startofmessage!ŠLEA„MSGUAE(PC),A2†Endofmessage-ŠBSR„ULODMSGŒGoputoutUloadabortedmessageŠLEA„FHSLOAD(A4),A00ŠMOVE.W#FHCLOS,FHSCMD(A0)ClosetheuploadfileŠTRAPƒ#3<ŠMOVE.W#FHDELT,FHSCMD(A0)DeletetheincompleteuploadfileŠTRAPƒ#30ŠMOVE.L(A7)+,D0‹RestoreerrorcodeforNWCRMERWŠBSR„NWCRMERW‹Reporterror.'ŠMOVE.LA4,A2ŽPointA2todownloadarea&ŠBSR„FRELOADŒFreedownload/uploadareaŠBRA„NWCM60Backtomainloop*9MSGUAS„DC.Bƒ'UPLOADABORTED(DISKI/OERROR)-STATION$'MSGUAE„EQU„*-1ŠDS…0’Forceevenbyteboundary*8MSGUARSƒDC.Bƒ'UPLOADABORTED(RIMRECEIVED)-STATION$'MSGUAREƒEQU„*-1* * Good I/O writing to dump file.(*ƒSetupfornextreceiveandnextwrite ,NWCUL15ƒADD.L‚#1,IOSRRN(A0)†BumpRRNnumber.;* Justify any residual bytes to the beginning of the block.$ŠLEA„LOADBUF(A2),A0…Movetoaddress. ŠMOVE.LA0,A1!ŠADD.L‚#256,A1ŒMovefromaddress.MOVJ1…CMP.L‚D1,A1 ŠBHI.S‚MOVJ2ŠMOVE.W(A1)+,(A0)+ ŠBRA.S‚MOVJ1*0MOVJ2…MOVE.LA0,BUFBOT(A2)†Setnewbufferbottom*8* Determine if this is the last segment of the transfer.*ŠBTSTƒ#2,DNSLTH1(A3)ŠBEQ„NWCM60Branchifno*** Last segment of upload - put out message2ŠMOVE.LA2,-(A7)‹SavedownloadaddressforFRELOAD,ŠMOVE.LA2,A4ŽDownloadaddressmustbeinA4#ŠLEA„MSGUES(PC),A1†Startofmessage!ŠLEA„MSGUEE(PC),A2†Endofmessage ŠBSR„ULODMSG5ŠMOVE.L(A7)+,A2‹RestoredownloadaddressforFRELOADŠBRA.S‚NWCUL20*)MSGUES„DC.Bƒ'UPLOADFINISHED-STATION$'MSGUEE„EQU„*-1** Last segment received2*ƒClosedownloadfile,flagstationforuploadnot"*ƒinprogress,freedownloadarea,!*ƒreturntomainloopatNWCM60:..NWCUL20ƒLEA„FHSLOAD(A2),A0…AddressofFHSP.B.%ŠMOVE.W#FHCLOS,FHSCMD(A0)ClosecodeŠTRAPƒ#3‘Closethefile. ŠCLR.L‚D0$ŠBSR„FRELOADŒFreethedownloadarea.ŠBRA„NWCM60Backtomainloop.*9* IF not RIM received - then prepare SEND area for answer*1NWCRECV8‚MOVE.BSDDRSP(A3),D0†SDLCResponse->D0ŠBTSTƒ#0,D0ŽI-frameReceived?ŠBEQ.S‚NWCRIFMŒBranchifYES$ŠCMP.B‚#SDDRRIM,D0ˆNo,RIMResponse?ŠBEQ„NWCRRIMŒ*BranchifYes'ŠBSR„GETSNDGetbuffertosendresponse,ŠBNE„NWCM50Branchifnosendbuffavailable*#*A1‚pointstosend/ messagebuffer.$*A2‚pointstosendparameterblock.1ŠMOVE.B#-1,NTWSTA(A4)…FlagtheRECVareaasFree-ŠCLR.L‚SDDSTS(A1)‰ClearStatusandBytecount.ŠCLR.W‚SDDRTC(A1)‰ClearRetryandErrorfields&ŠCLR.W‚SDDRSP(A1)‰ClearResponsefield:ŠMOVE.WSDDCMD(A3),SDDCMD(A1)MoveCmd,Stationfromrecv'd*!*‡ChecktypeofResponsereceived*)ŠMOVE.BSDDRSP(A3),D0†SDLCResponse->D0ŠCMP.B‚#SDDRDM,D0‰DMReceived?,ŠBEQ.S‚NWCRSNRM‹BranchifYES-respondSNRMŠCMP.B‚#SDDRRD,D0‰RDReceived?,ŠBEQ.S‚NWCRDISC‹BranchifYES-respondDISC"ŠCMP.B‚#SDDRFRMR,D0‡FRMRReceived?,ŠBEQ.S‚NWCRSNRM‹BranchifYES-respondSNRM"ŠCMP.B‚#SDDCSNRM,D0‡SNRMReceived?*ŠBEQ.S‚NWCRACKŒBranchifYES-respondACK*/* If an ACK was received, we fall thru to here.ŠBRA„NWCM60Returntomainloop*#*ˆI-frameReceived--ClearSIMWAIT*8NWCRIFMƒMOVE.B#-1,NTWSTA(A4)…FlagtheRECVareaasFree(ŠMOVE.BSDDSEC(A3),D0†GetstationnumberŠBSR„GETLUNGetDOWNLOADblock(ŠBNE„NWCM60ReturnifnoactivedownloadŠCLR.B‚SIMWAIT(A2)ˆResetwaitŠBRA„NWCM60Returntomainloop**ˆSendanSDLCSNRMCommand*:NWCRSNRM‚MOVE.B#SDDCSNRM,SDDCMD(A1)SetSNRMSDLCCommand&ŠMOVE.L#SDDLNG,NTWLEN(A2)Buffersize3ŠBSR„SNDMSGSendTheMessage-queuedifnobuffersŠBRA„NWCM60Returntomainloop**ˆSendanSDLCDISCCommand*:NWCRDISC‚MOVE.B#SDDCDISC,SDDCMD(A1)SetDISCSDLCCommand&ŠMOVE.L#SDDLNG,NTWLEN(A2)Buffersize3ŠBSR„SNDMSGSendTheMessage-queuedifnobuffers ŠBRA„NWCM60**6*ˆSendanSDLCACKnowledgementtoaSNRM,SIM,orDISC*4NWCRACKƒMOVE.B#NTWCACKR,NTWCMD(A2)SDLCACKCommand/ŠMOVE.BD0,NTWARSP(A2)…SDLCCommandtobeACKed%NWCRACK1‚BSR„SNDMSGAŒSendTheMessageŠBSR„STATCHKŒCheckstatus'ŠBNE.S‚NWCRACK1‹Retryifoutofbuffers ŠBRA„NWCM60*ŠPAGE*6*ˆReceivedanSDLCRIMResponse,DownloadThisStation*;NWCRRIMƒMOVE.B#-1,NTWSTA(A4)…FlagRCVParamAreaas'free'$ŠMOVE.BSDDSEC(A3),D0†GetStationID.ŠBSR„GETLUNActivelyDownloadingthisStation?ŠBNE.S‚NWCRIM4ŒBranchifNO/ŠTST.B‚SIMWAIT(A2)ˆYES,Waitingfor"SIM"Sent?ŠBEQ.S‚NWCRIM2ŒBranchifNO>ŠSUB.B‚#1,SIMWAIT(A2)…DecrementSIMcount-don'twaitforever0ŠBNE„NWCM60Returntomainloop-throwSIMaway*-* Prepare to start over - Close DOWNLOAD File*NWCRIM2ƒMOVE.BSDDSEC(A3),D0ŠLEA„STAFLGB(A6),A06ŠBTSTƒ#STAFUP,0(A0,D0)ƒWereweuploadingthisstation?ŠBEQ.S‚NWCRIM3ŒBranchifno,ŠMOVE.LA2,A4ŽSavepointertodownloadblock2ŠLEA„MSGUARS(PC),A1†ReportthatuploadwasabortedŠLEA„MSGUARE(PC),A2 ŠBSR„ULODMSG%ŠLEA„FHSLOAD(A4),A0…CloseuploadfileŠMOVE.W#FHCLOS,FHSCMD(A0)ŠTRAPƒ#3-ŠMOVE.W#FHDELT,FHSCMD(A0)DeleteuploadfileŠTRAPƒ#3/ŠMOVE.LA4,A2ŽRestorepointertodownloadblockŠBRA.S‚NWCRM3.5.NWCRIM3ƒLEA„FHSLOAD(A2),A0…FHSparameterblock2ŠMOVE.W#FHCLOS,FHSCMD(A0)ChangecommandtoCLOSEŠFHSCALL/NWCRM3.5‚BSR„FRELOADŒFlagDOWNLOADareaasFREE*!*ˆSenda'TRANSMITFLUSH'Command*-NWCRIM4ƒBSR„GETSNDGetaSENDParameterBlock'ŠBNE„NWCM60BranchifweDidn'tGetOne<ŠMOVE.BSDDSEC(A3),NTWARSP(A2)SDLCsecondarystationnumber*ŠMOVE.B#NTWFLUSH,NTWCMD(A2)Flushcommand#ŠBSR„SNDMSGAŒSendtheFlushCommandŠBSR„STATCHKŒCheckthestatus&ŠBEQ.S‚NWCRIM5ŒContinueifstatus'ok'* Out of buffers8ŠMOVE.B#-1,NTWSTA(A2)…FlagsendparameterblockasfreeŠBRA„NWCM60Backtomainloop** Get DOWNLOAD area -- Send SIM*>NWCRIM5ƒMOVE.BSDDSEC(A3),D0†StationID-UsetoclaimDLarea ŠBSR„GETLOADŒGetaDOWNLOADarea$ŠBNE„NWCM60Branchifnoneavailable+ŠMOVE.LA2,A4ŽSavepointertoDOWNLOADarea&ŠBSR„GETSNDGetaSENDParameterBlock&ŠBEQ.S‚NWCRIM10‹BranchifPBavailable5ŠCLR.B‚LOADSEC(A4)ˆGiveuptheDOWNLOADareaifnoPBŠBRA„NWCM60Returntomainloop5NWCRIM10‚CLR.L‚SDDSTS(A1)‰ClearStatusandBytecount.ŠCLR.W‚SDDRTC(A1)‰ClearRetryandErrorfields&ŠCLR.W‚SDDRSP(A1)‰ClearResponsefield:ŠMOVE.WSDDCMD(A3),SDDCMD(A1)MoveCmd,Stationfromrecv'd0ŠMOVE.B#SDDCSIM,SDDCMD(A1)SetSIMSDLCCommand&ŠM0 OVE.L#SDDLNG,NTWLEN(A2)Buffersize6ŠBSETƒ#NTSOTC,NTWOPT(A2)Waitfortransactioncomplete/ŠBSR„SNDMSGSendtheSIM-queuedonnobuffers3ŠMOVE.B#20,SIMWAIT(A4)„FlagWaitingfor"SIM"Sent*4* Prepare LOAD buffer for DOWNLOAD or UPLOAD command*A*ReadNETLOAD.SAfiletoseeifwearetoperformupload.‚Upload?*ƒonlyif;Doptionsetonrecordreadfromfile.‚If;Dsetthe@*ƒ;L=xxxxspecifiesthebeginningaddress,;N=xxxxspecifiesthe*ƒnumberofbytes..ŠMOVE.BSDDSEC(A3),D0†SecondarystationnumberŠBSR„REDNETSŒReadnetloadfileŠBEQ.S‚REDOKŽBranchifnoerror* Error reading NETLOAD.SA file%ŠBSR„NWCRMERA‹Reporterroronconsole2ŠMOVE.LA4,A2ŽRestoreA2topointtodownloadarea#ŠBSR„FRELOADŒFreethedownloadareaŠBRA„NWCM60Backtomainloop*+REDOK…LEA„NETSBUF(A6),A0…Pointtofilename*ŠMOVE.L#$50,D6ŒMaxlengthofcommandline-ŠMOVEM.LA2/A3,-(A7)‡Savesinceparseusesit ŠBSR„PARSE.* A2 comes back with address of options field.2ŠMOVE.LA2,OPTNS(A4)‡SaveaddressofoptionsfieldŠMOVEM.L(A7)+,A2/A3ŠTST.L‚D0‘Errorfromparse? ŠBPL.S‚POKBSNTXERRƒLEA„MSGSNTXS(PC),A1„ComplainofsyntaxerrorinNETLOAD.SAŠLEA„MSGSNTXE(PC),A2 ŠBSR„OUTTERM'ŠMOVE.LA4,A2ŽPointA2todownloadareaŠBSR„FRELOADŒFreedownloadareaŠBRA„NWCM60Backtomainloop*BMSGSNTXS‚DC.Bƒ'SYNTAXERRORINNETLOAD.SAFILE-DOWNLOADABORTED' ŠDC.Bƒ$0D ŠDC.Bƒ$0AMSGSNTXE‚EQU„*-1* POK‡EQU„*ŠTST.L‚OPTNS(A4))ŠBEQ„NWCRIM50‹Branchifnooptionsfield.*L* There was an options field on the file name read from the NETLOAD.SA file.*@*ƒTheoptionsindicatethelimitsoftheuploadthatisdesired.*=*ƒIftherewerenooptionsfieldthennouploadisperformed.*K*ƒIftherewasanoptionfieldand'D'wascontainedamongtheoptionsthenH*…wealwaysperformanuploadpriortoperformingadownload.‚ThelimitsC*…oftheuploadarespecifiedbythe'L'and'N'options.‚'L=$xxxx'F*…indicatesthestartingaddressinmemorythatweshouldupload.‚ThisG*…addressisalwaysroundeddownwardtothenearest$100byteboundary.?*…'N=$xxxx'indicateshowmanybytesaredesiredintheupload.E*…Thisnumberisalwaysroundeduptothenearest$100byteboundary.G*…Notethatifeither'N'or'L'ismissingfromtheoptions,noupload*…isperformed.*J*ƒIftherewasnot'D'amongtheoptionsthentheuploadwillbeperformedC*…onlyafterthefirstinitialdownloadhasbeenperformedforthis'*…particularsecondaryandasubsequentB*…'SIM'isreceived.‚Thisissothatoninitialpowerup,wedon'tD*…havetogetanuploadfromeachsecondarystationbeforewedothe *…download.*&*ƒTheoptionscanappearinanyorder.*C*ƒTheuploadimageissavedinafileonthesystemdefaultvolume.**…FlagSTAFDissetwhen%*‡1.Downloadsuccessfullycompletes.>*‡2.'D'optionisselectedandit'sthefirsttimethroughon?*Šthisstation(STAFFclearon1sttimethru,setonsubsequent *Špasses).*…FlagSTAFDisclearedwhenE*‡1.Uploadisinitiated(regardlessofwhetheritcompletesornot).*/*„UploadsareonlyperformedwhenSTAFDisset.*3ŠMOVE.L#-1,ULBASE(A4)…FlagULBASEasuninitialized3ŠMOVE.L#-1,ULSIZE(A4)…FlagULSIZEasuninitialized.ŠMOVEM.LA2/A3,-(A7)‡SavesinceOPTIONusesit*ŠMOVE.LOPTNS(A4),A2‡StartofoptionfieldNXTOPT„BSR„OPTION!ŠCMP.B‚#$40,D0ŒDonewithoptions?ŠBEQ.S‚OPTDONEŒBranchifyesŠBTSTƒ#7,D0ŽOptionerror?%ŠBNE.S‚OPTERRBranchifoptionerror.*!ŠCMP.B‚#'D',D1ŒIs'D'optionset?2ŠBNE.S‚NXTOPT1ŒBranchifno'D'option-trynext.** 'D' option processing-ŠMOVE.L4(A7),A3‹PickuporiginalvalueofA3 ŠCLR.L‚D0'ŠMOVE.BSDDSEC(A3),D0†2ndarystationID)ŠLEA„STAFLGB(A6),A0…Baseofstationflags2ŠBSETƒ#STAFF,0(A0,D0)„Isthisthefirsttimethru?/ŠBNE.S‚DDONEŽBranchifno-notfirsttimethru8ŠBSETƒ#STAFD,0(A0,D0)„'D'optionmeansuploadfirsttime*DDONE…BRA„NXTOPTGofornextoptionifany*6NXTOPT1ƒCMP.B‚#'L',D1Œ'L=startingaddress'optionset?ŠBNE.S‚NXTOPT2ŒBra0 nchifno** 'L' option processing6ŠAND.L‚#$FFFFFF00,D3†Roundtolower256byteboundary.'ŠMOVE.LD3,ULBASE(A4)†Savebaseaddress%ŠBRA„NXTOPTGofornextoptionifany*5NXTOPT2ƒCMP.B‚#'N',D1Œ'N=numberofbytes'optionset?3ŠBNE.S‚OPTERRBranchiferror-not'D','L',or'N'** 'N' option processingŠADD.L‚#$FF,D32ŠAND.L‚#$FFFFFF00,D3†Roundupto256byteboundaryŠMOVE.LD3,ULSIZE(A4)%ŠBRA„NXTOPTGofornextoptionifany*,* Come here when we've exhausted the optionsBOPTDONEƒMOVEM.L(A7)+,A2/A3‡RestoreregistersthatPARSEclobbered%ŠBRA.S‚ULOADITŒGoseeifweuploadit*OPTERR„MOVEM.L(A7)+,A2/A3(ŠBRA„SNTXERRŒGocomplainofsyntaxerror*C* If secondary station is flagged not to perfrom upload on this RIM* THEN(*„GOTONWCRIM50{avoidautomaticupload}*ULOADITƒCLR.L‚D0+ŠMOVE.BSDDSEC(A3),D0†SecondarystationID.*ŠLEA„STAFLGB(A6),A0…Baseofstationflags.%ŠBTSTƒ#STAFD,0(A0,D0)„Performupload?ŠBEQ„NWCRIM50‹BranchifnoŠCMP.L‚#-1,ULBASE(A4)…Upload?ŠBEQ„NWCRIM50‹BranchifnoŠCMP.L‚#-1,ULSIZE(A4)…Upload?ŠBEQ„NWCRIM50‹Branchifno** Flag upload as in progress.1ŠBSETƒ#STAFUP,0(A0,D0)ƒFlaguploadasinprogress<ŠBCLRƒ#STAFD,0(A0,D0)„FlagfornouploadattemptonnextRIM*/* Open receiving file for holding upload image.*ƒBuildfilenameinFHSP.B.%*ƒFilenameisofthefollowingform:*ƒULODaamm.DUddhhnn.SY0*ƒWhereaaisthesecondarystationnumber(hex)*‰mmisthemonth*‰ddistheday*‰hhisthehour*‰nnistheminute*'* Pick up time and convert to Gregorian$ŠMOVE.L#GTDTIM,D0‰GetdateandtimeŠLEA„TIMBLK(A6),A0ŠTRAPƒ#1ŠMOVE.LTIMBLK(A6),D0ŠBSR„DATEOJConverttoJulian ŠBSR„DATEJGConverttoGregorianŠMOVE.LD0,TMPDATE(A6)** Catalog name portionŠLEA„FHSLOAD+FHSCLG(A4),A1ŠMOVE.L#'ULOD',(A1)+ ŠCLR.L‚D0*ŠMOVE.BSDDSEC(A3),D0†SecondarystationID$ŠBSR„CVHEX1Converttohexandstuff"ŠMOVE.BTMPDATE+2(A6),D0ƒGetmonth&ŠBSR„CVDEC1ConverttoASCIIandstuff** File name portionŠLEA„FHSLOAD+FHSFIL(A4),A1ŠMOVE.W#'DU',(A1)+ ŠMOVE.BTMPDATE+3(A6),D0ƒGetday&ŠBSR„CVDEC1ConverttoASCIIandstuff,ŠMOVE.LTIMBLK+4(A6),D0„TimeinmillisecondsŠDIVUƒ#1000*60,D0#ŠAND.L‚#$FFFF,D0ŠD0=totalminutesŠDIVUƒ#60,D0minutes,hours+ŠMOVE.LD0,D2ŽSave'causeD0getswipedout!ŠAND.L‚#$FF,D0ŒMasktojusthours,ŠBSR„CVDEC1ConverthourstoASCIIandstuffŠSWAPƒD2ŠMOVE.WD2,D0ŽMinutes&ŠBSR„CVDEC1ConverttoASCIIandstuff**ƒDeleteanyexistingfilewithsamename.4ŠMOVE.W#FHDELT,FHSLOAD+FHSCMD(A4)DeletefilefirstŠLEA„FHSLOAD(A4),A0ŠTRAPƒ#3'*ƒSetup,allocateandassignthefile.?*…ConvertbytecounttolargeenoughsectorcounttoholdimageŠMOVE.LULSIZE(A4),D0ŠADD.L‚#$FF,D0 ŠLSR.L‚#8,D09ŠMOVE.LD0,FHSLOAD+FHSSIZ(A4)SetsectorsizeinFHSP.B.@*…Setupforallocate,assignandcontiguous,exclusiveread/write*ŠMOVE.W#FOPCON!FOPEREW,FHSLOAD+FHSOPT(A4))ŠMOVE.W#FHALLO!FHASGN,FHSLOAD+FHSCMD(A4)ŠCLR.B‚FHSSTA(A0)‰ClearstatusŠTRAPƒ#3ŠBEQ.S‚NWCRIM11** Error assigning UPLOAD file%ŠBSR„NWCRMERA‹Reporterroronconsole ŠCLR.L‚D1+ŠMOVE.BSDDSEC(A3),D1†SecondarystationID.*ŠLEA„STAFLGB(A6),A0…Baseofstationflags.:ŠBCLRƒ#STAFUP,0(A0,D1)ƒFlagstationasnotinuploadmode.(ŠBRA.S‚NWCRIM50‹Gotrythedownloadnow.*#* Initialize areas in download P.B.NWCRIM11‚LEA„LOADBUF(A4),A07ŠMOVE.LA0,BUFBOT(A4)†Bufferbottomoffsetforreceive.-ŠCLR.L‚BYTECNT(A4)ˆClearbytecountreceived.6ŠCLR.L‚IOSLOAD+IOSRRN(A4)ClearRRNnumberinIOSP.B.*&* Create an UPLOAD command and send it*ŠLEA„LOADBUF(A4),A1…Startofbufferheader.ŠCLR.L‚SDDSTS(A1)‰Clearstatusandbytecount./ŠCLR.W‚SDDRTC(A1)‰Clearretryanderrorfields.:ŠMOVE.WSDDCMD(A3),SDDCMD(A1)MoveCmd,Stationfromrecv'd/ŠMOVE.B#SDDCI,SDDCMD(A1)‚Commandin'Iframe'.5ŠMOVE.B#THB1NWC,DNSLTH1(A1)Upload/DownloadTHfield3ŠMOVE.B#DNLIAU,DNSLTH2(A1)Initiateuploadcommand5ŠMOVE.LULSIZE(A4),DNDLBCT(A1)Bytecounttotransfer;ŠMOVE.LULBASE(A4),DNDLADR(A1)Startingaddresstot1 ransfer*0ŠLEA„NTSLOAD(A4),A2…SendUPLOADparameterblock.:ŠMOVE.LA1,NTWSAD(A2)†Putdataaddressinparameterblock.9ŠMOVE.L#DNULLNG,NTWLEN(A2)Lengthofdatablocktosend.**ŠBSR„SNDMSGSendUPLOADinformationblock.*£queuedifnobuffers.*/* Put out message that we've started the upload#ŠLEA„MSGUBS(PC),A1†Startofmessage!ŠLEA„MSGUBE(PC),A2†EndofmessageŠBSR„ULODMSGŒGoputitout ŠBRA„NWCM60Returntomainloop.*&MSGUBS„DC.Bƒ'UPLOADBEGUN-STATION$'MSGUBE„EQU„*-1ŠPAGE6* Upload done or not required - proceed with download.4*‚Flaguploadnotinprogress,downloadinprogress.NWCRIM50‚CLR.L‚D0*ŠLEA„STAFLGB(A6),A0…Baseofstationflags./ŠMOVE.BSDDSEC(A3),D0†Secondarystationnumber.9ŠBCLRƒ#STAFUP,0(A0,D0)ƒCleartheuploadinprogressflag.9ŠBSETƒ#STAFDP,0(A0,D0)ƒSetthedownloadinprogressflag.**ŠLEA„LOADBUF(A4),A1…Addressofdatabuffer-ŠCLR.L‚SDDSTS(A1)‰ClearStatusandBytecount.ŠCLR.W‚SDDRTC(A1)‰ClearRetryandErrorfields&ŠCLR.W‚SDDRSP(A1)‰ClearResponsefield:ŠMOVE.WSDDCMD(A3),SDDCMD(A1)MoveCmd,Stationfromrecv'd.ŠMOVE.B#SDDCI,SDDCMD(A1)‚Commandis'Iframe'*=*‡ReadNETLOAD.SAtogetnameofDOWNLOADfile--ASSIGNfile*0ŠCLR.L‚D0‘FetchRecordKeyfor"NETLOAD.SA"File/ŠMOVE.BSDDSEC(A3),D0†FetchSDLCStationNumber/ŠBSR„REDNETSŒReadRecordfrom"NETLOAD.SA"File*ŠBEQ.S‚NWCRIM52‹Branchifnoerroronread*"* Error in reading NETLOAD.SA file%ŠBSR„NWCRMERA‹Reporterroronconsole2ŠMOVE.LA4,A2ŽRestoreA2topointtodownloadarea#ŠBSR„FRELOADŒFreethedownloadareaŠBRA„NWCM60Backtomainloop*7NWCRIM52‚LEA„NETSBUF(A6),A0…MoveFileNametoFHSBlock+ŠMOVE.LA6,-(A7)‹SaveA6-EDITFILEusesit'ŠLEA„FHSLOAD(A4),A6…FHSparameterblock.ŠMOVE.L#'„',FHSCLG(A4)BlankoutcatalognameŠMOVE.L#'„',FHSCLG+4(A4)+ŠMOVE.L#'„',FHSFIL(A4)BlankoutfilenameŠMOVE.L#'„',FHSFIL+4(A4)/ŠBSR„EDITFILE‹MovefilenametoFHSparamblockŠMOVE.L(A7)+,A6‹RestoreA6*ŠFHSCALLFHSLOAD(A4)‡Assign??????.SYfile4ŠBEQ.S‚NWCRIM54‹Branchifnoerrorinassigningfile*#* Error in assigning ??????.SY file%ŠBSR„NWCRMERA‹Reporterroronconsole2ŠMOVE.LA4,A2ŽRestoreA2topointtodownloadarea#ŠBSR„FRELOADŒFreethedownloadareaŠBRA„NWCM60Backtomainloop*=NWCRIM54‚MOVE.LA4,A2ŽDOWNLOADareaaddresstoA2forREDLOAD2ŠBSR„REDLOADŒREAD1stBlockFromFileToBeLoaded*ŠBEQ.S‚NWCRIM56‹Branchifnoerroronread** Error reading DOWNLOAD file'ŠBSR.S‚NWCRMERR‹Reporterroronconsole2ŠMOVE.LA4,A2ŽRestoreA2topointtodownloadarea#ŠBSR„FRELOADŒFreethedownloadareaŠBRA„NWCM60Backtomainloop*%*ˆCreateaDOWNLOADCommand&SENDIt*6NWCRIM56‚MOVE.L#1,IOSRRN(A0)†SetRandomRecord#to1*ŠLEA„LOADBUF(A2),A1…Startofbufferheader0ŠMOVE.B#THB1NWC,DNSLTH1(A1)*DownloadTHField9ŠMOVE.B#DNLIAD,DNSLTH2(A1)*InitiateaDownloadCommand5ŠLEA„LOADBUF+DNSLDAT(A2),A0Startofbufferdataarea0ŠMOVE.LLIBSLSA(A0),DNDLADR(A1)StartingAddress*ŠMOVE.LLIBSLEN(A0),DNDLBCT(A1)ByteCount/ŠMOVE.LLIBENT(A0),DNDLXFR(A1)TransferAddress&ŠMOVE.W#$2700,DNDLSTW(A1)StatusWord5ŠMOVE.LLIBSLSA(A0),DNDLISP(A1)InitialStackPointer*1ŠLEA„NTSLOAD(A2),A2…SendDOWNLOADparameterblock5ŠMOVE.LA1,NTWSAD(A2)†Putdataaddressinparamblock8ŠMOVE.L#DNDLLNG,NTWLEN(A2)Lengthofdatablocktosend+ŠBSR„SNDMSGSendDOWNLOADinformationblock*£queuedifnobuffersŠBRA„NWCM60ReturntomainloopŠPAGEG* This subroutine will print an error message on the console for errors0*ƒinvolvingassigning,readingorwritingfiles.***‚ENTRYPOINTS:NWCRMERR-forreaderrors*NWCRMERW-forwriteerrors"*NWCRMERA-forassignmenterrors*5*‚ENTRY:A0-PointstoFHSP.B.containingfilename*‰D0-Errorcode**‚EXIT:‚A0,D6,D7Destroyed*5NWCRMERR‚MOVE.L#'READ',D6‰Willput'READ'inmessage,ŠBRA.S‚NWCRMERC‹Continuewithcommonroutine6NWCRMERW‚MOVE.L#'WRIT',D6‰Willput'WRIT'inmessag1 e.-ŠBRA.S‚NWCRMERC‹Continuewithcommonroutine.5NWCRMERA‚MOVE.L#'ASGN',D6‰Willput'ASGN'inmessage*NWCRMERC‚MOVEM.LA1-A3,-(A7)ŠMOVE.LD0,D7ŽSaveerrorcode6ŠMOVE.W#FHCLOS,FHSCMD(A0)ChangeFHScommandtocloseŠFHSCALL* ŠLEA„MRDERR(PC),A1†ERRORmessage'ŠLEA„ABUFFR(A6),A2†WRITEmessagebuffer*ŠMOVE.LA2,A3ŽSaveaddressofwritebuffer"ŠMOVE.W#MRDERSZ-1,D0†messagesize8NWCRMERM‚MOVE.B(A1)+,(A2)+ˆMovemessagetowritebufferŠDBRAƒD0,NWCRMERM0ŠMOVE.LD6,4(A3)‹Put'READ'or'ASGN'inmessage3ŠLEA„MRDERTP-MRDERR(A3),A1Wheretosaveerrorcode2ŠMOVE.WD7,D0ŽRestoreerrorcodetoD0forconvert'ŠBSR„CVHEX1Converterrorcodetoascii8ŠLEA„MRDERFL-MRDERR(A3),A2Wheretoputfilenameinmsg7ŠMOVE.LFHSCLG(A0),(A2)„Movefirsthalfofcatalogname8ŠMOVE.LFHSCLG+4(A0),4(A2)Move2ndhalfofcatalogname5NWCREREƒCMP.B‚#'',(A2)+‰Lookforendofcatalogname ŠBNE„NWCRERE8ŠMOVE.B#'.',-1(A2)ˆSeparatecatalognamefromextentionŠMOVEM.LA0-A2,-(A7)(ŠLEA„FHSFIL(A0),A0†PointA0tofilename*ŠMOVE.L#7,D0ŽNumberofcharacterstomove-MOVFNAMƒMOVE.B(A0)+,(A2)+ˆMovethefilenameŠDBRAƒD0,MOVFNAMŠMOVEM.L(A7)+,A0-A22NWCRERFƒCMP.B‚#'',(A2)+‰Lookforendoffilename&ŠBNE„NWCRERFŒBranchtocontinuesearch0ŠMOVE.B#'.',-1(A2)ˆSeparatefilefromextention8ŠMOVE.BFHSEXT(A0),(A2)+ƒMove1stcharacterofextention9ŠMOVE.BFHSEXT+1(A0),(A2)‚Move2ndcharacterofextentionŠMOVE.LA3,A1ŽStartofmessage ŠMOVE.LA3,A2%ŠMOVE.L#MRDERSZ-1,D0†SizeofmessageŠADD.L‚D0,A2ŽEndofmessage$ŠBSR„OUTTERMŒSendmessagetoconsole&ŠMOVEM.L(A7)+,A1-A3‡RestoreregistersŠRTS*&MRDERR„DC.Bƒ'I/OREADERROR-CODE='MRDERTPƒDC.Bƒ'XXFILE=' MRDERFLƒDC.Lƒ'„','„','„','„','„' ŠDC.Bƒ$0D,$0AMRDERSZƒEQU„*-MRDERRŠPAGE*v.*NWCSEND:ƒIFerrorreturnedinparameterblock*‹THEN*ŽCrashsystem. *‹IFmessagewassenttomonitor*‹THEN*ŽGOTONWCSMON#*‹{Messagewasnotsenttomonitor}*‹IFcommandwasNOTtosend*‹THEN.*NWCSRTN:†Flagsendparameterblockas'free'.*ŽGOTONWCM06:.*‹{Commandwastosend}'*‹IFcommandwas'sendinitiateupload'*‹THEN*ŽGOTONWCM60:.6*‹Getdownloadareaassociatedwiththissecondaryvia *‹BSRGETLUN*‹IFdownloadblocknotfound*‹THEN*ŽGOTONWCSRTN:.*‹{Downloadblockwasfound}2*‹IFcommandwas'SNRM'(setnormalresponsemode)*‹THEN/*ŽFreereserveddownloadareaviaBSRFRELOAD:.*ŽGOTONWCSRTN:.*‹{CommandwasNOTa'SNRM'})*‹IFcommandwasNOTa'numberedIframe'*‹THEN*ŽGOTONWCSRTN:.$*‹{Commandwasa'numberedIframe'})*‹ReadnextblocktosendviaBSRREDLOAD*‹IFNOTsuccessfulreadstatus*‹THEN*ŽIFendoffile*ŽTHEN6*‘FlagthissecondaryforuploadonnextRIMreceived.*‘Closethedownloadfile.+*‘FreethedownloadblockviaBSRFRELOAD:.*ŽELSE{realerrorinread}=*NWCSERR:‰Send'SNRM'tosecondarywith'waitfortransaction*‘complete'optionset.9*‘FlagthissecondaryforNOuploadonnextRIMreceived.)*‘GOTONWCRMERR:tooutputerrormessage.*‹ELSE{successfulreadstatus}7*ŽSendnextblockofdatatosecondaryviaBSRSNDMSG:.**^** NWCSENDƒTST.B‚NTSRCOD(A4)ˆError?ŠCRASH.NE*+1ŽCrashsystemyes,ŠMOVE.LNTWSAD(A4),A3†Messagebufferaddress+ŠCMP.B‚#NTSCSEND,D0‡Wasmessagetomonitor?ŠBEQ„NWCSMONŒBranchifYES'ŠCMP.B‚#NTWCSEND,D0‡Wascommand'SEND'?2ŠBNE.S‚NWCSRTNŒBranchifNO-ignorespeccommandsŠMOVE.WDNSLTH1(A3),D16ŠAND.W‚#$F0FF,D1ŠDisregard1standlastsegmentflags.@ŠCMP.W‚#THB1NWC<<8!DNLIAU,D1Wasthisaninitiateuploadrecord?ŠBEQ„NWCM60Branchifyes.;ŠMOVE.BSDDSEC(A3),D0†Stationnumber-idforDOWNLOADarea'ŠBSR„GETLUNFetchDOWNLOADareaaddress"ŠBNE.S‚NWCSRTNŒBranchifnotfound0ŠMOVE.BSDDCMD(A3),D0†Getcommandthatcompleted,ŠCMP.B‚#SDDCSNRM,D0‡Wasita'SNRM'Command?ŠBEQ.S‚NWCSSNRM‹BranchifYES+ŠCMP.B‚#SDDCI,D0ŠWasita‚NumberedIframe?ŠBEQ.S‚NWCSIFRŒBranchifYES*ŠBRA.S‚NWCSRTNŒAllothercommands-return*4*‡CommandwasSNRM--Mu2 stbefinishedwithdownload*/NWCSSNRM‚BSR„FRELOADŒFlagDOWNLOADareaasFREE*/*‡FreeSENDparamblockandreturntomainloop*)andlegalsecondary*‹stationnumber*‹THEN*ŽCASE(codevalue)*‘0001(INIT):9*”Setupparameterblocktosendmessagebacktomonitor.<*”Constructreturnmessageconsistingofnumberofstations,**”firststationnumber,stationincrement.+*”SendmessagetomonitorviaBSRSNDMSGM:.*”GOTONWCM60:.$*‘0002(Downloaddefaultfilename):*”{Notimplementedyet}"*”Senderrorcodetocallingtask.*”GOTONWCM60:.*‘0003(Downloadwithname):*”{Notimplementedyet}"*”Senderrorcodetocallingtask.*”GOTONWCM60:.*‘0004(Upload):*”{Notimplementedyet}"*”Senderrorcodetocallingtask.*”GOTONWCM60:.*‘0005(Uploadselective)*”{Notimplementedyet}"*”Senderrorcodetocallingtask.*”GOTONWCM60:. *ŽEND{CASE}!*‹ELSE{Messageheadernotvalid}@*NWCRM50:†Constructerrorreturnmessagetomonitorandsendit.*ŽGOTONWCM60:.**$* NETWORK SERVICES MONITOR INTERFACE*N*ThenetworkservicesmonitorinterfaceisanadditiontotheNWCT‚taskwhichI* provides a way for an application task running on the primary system to!* request the following services:*G*1.„Requestinformationontheidentityofsecondarystationssysgened*‰intothisnetwork.*@*2.„Downloadthedefaultfiletoaspecifiedsecondarystation.*@*3.„Downloadaspecifiedfiletoaspecifiedsecondarystation.*F*4.„Uploadtheentirememoryimagefromasecondarystationandplace0*‰intoasequentialfileontheprimarystation.*F*5.„Uploadaportionofthememoryimagefromasecondarystationand6*‰placeintoasequentialfileontheprimarystation.**O* The application task that wishes to make any of the above requests must firstM*establishaconnectiontoNWCT.‚TheapplicationtaskthenmakestherequestH*sendingspeciallyformattedmessagetoNWCT.‚NWCTperformstherequestH* (if possible) and responds via a message to the requesting application* task.*L* The data portions of the messages sent by the application task to the NWCTH*taskalwaysbeginwithatwo-bytefieldcontaining'**'.‚ThisfieldisJ*followedbyatwo-bytefieldcontaintherequestID.‚ThefollowingbytesB* (if any) contain information specific to the individual request.*F* The format for the messages sent by the application task to the NWCT* task follow:*)*“2-bytes‚2-bytes‚2-bytes‚4-bytes‚8-bytes* * Request* 2ndary*ID's.'**'…0001* * Download * default*file.'**'…0002…00nn* * Download * specified&*file.'**'…0003…00nn…#3 bytesƒfilename** Upload* entire* memory*image.Œ'**'…0004…00nn** Upload * portion*ofmemory¤start&*image.Œ'**'…0005…00nn…address‚#bytes**J* In the above examples, 00nn stands for a secondary station ID, #bytes is"* the number of bytes to transfer.*F* In response to a request from an application task, NWCT will performF* the request (if possible) and respond to the application task with aJ*message.‚Theresponsemessagewillcontainatwo-bytestatusfieldwhichD* will be zero if the request were successfully completed or nonzeroH*ifanerroroccurred.‚TheformatoftheresponsemessagessentbyNWCT"* to the application task follows:*!*“2-bytes‚2-bytes‚2-bytes‚2-bytes* *Request¦1st*2ndary§station‚#of0*ID's.'**'…0001…statusƒID#…stationsƒincrement* * Download * default*file.'**'…0002…status* * Download * specified*file.'**'…0003…status** Upload* entire* memory*image.Œ'**'…0004…status** Upload * portion * of memory*image.Œ'**'…0005…status*^* NWCRMONƒEQU„*** Flag receive area as free.&*‚Getassociatedmonitorcontrolblock4ŠMOVE.B#-1,NTWSTA(A4)…Flagthereceiveareaasfree5ŠMOVE.BNTSLCC(A4),D0†Logicalconnectcodeofmonitor2ŠBSR„GETLCCGetthemonitorcontrolblockforthis ŠBEQ.S‚NWCR104ŠBSR„NWCERRXŒSaveerroraddressifnotalreadysavedŠBRA„NWCM60Gotomainloop.** A2 = Monitor block address * A3 = Received message address.,* A4 = NTS P.B. address of completed receive*ANWCR10„MOVE.LNTSSAD(A2),A0†Addressofmonitorsendmessagearea.%ŠMOVE.L(A3),(A0)ŠMovein'**',code./ŠCLR.W‚RSTAT(A0)ŠClearstatusinreturnmessage*/* Check for '**' in first two bytes of message.*ƒCheckforcodewithinrange.+*ƒCheckforlegalsecondarystationnumber.,*ƒIfanytestsfail,thenbranchtoNWCRM50.7ŠCMP.W‚#'**',(A3)‰Doesthishavethecorrectheaderfor&*£...amessagereceivedfrommonitor?ŠBNE.S‚NWCERR1ŒBranchifno ŠCLR.L‚D02ŠMOVE.WMCODE(A3),D0‡Codefieldofmonitormessage(ŠBLE.S‚NWCERR2ŒBranchifcodetoosmall.ŠCMP.W‚#MCODEMX,D0(ŠBGT.S‚NWCERR2ŒBranchifcodetoolarge.ŠMOVE.WMSTN(A3),D1ˆStationID ŠCLR.W‚D2 ŠCLR.W‚D36ŠMOVE.BSTAINFO+2(A6),D2ƒ1stsecondarystationnumber.5ŠMOVE.BSTAINFO+3(A6),D3ƒSecondarystationincrement.7ŠMOVE.WSTAINFO(A6),D4…Maximum#ofsecondarystations.NWCRM20ƒCMP.W‚D1,D22ŠBEQ.S‚NWCRM50ŒBranchifsecondarystation#found4ŠADD.W‚D3,D2ŽChecknextpossiblesecondarystation# ŠSUB.W‚#1,D42ŠBMI.S‚NWCERR3ŒBranchifsecondarystationillegalŠBRA.S‚NWCRM20*G* Branch to the appropriate processing routine based on the code in the$*ƒmessagereceivedfromthemonitor.*NWCRM50ƒLEA„VTBL(PC),A0 ŠSUB.L‚#1,D0 ŠLSL.L‚#2,D0ŠADD.L‚0(A0,D0),A0 ŠJMP„(A0)** Vectoring table VTBL†EQU„*'ŠDC.LƒIDS-VTBL‹0001‚Request2ndaryID's-ŠDC.LƒNWCERR2-VTBL‡0002‚Downloaddefaultfile/ŠDC.LƒNWCERR2-VTBL‡0003‚Downloadspecifiedfile2ŠDC.LƒNWCERR2-VTBL‡0004‚Uploadentirememoryimage5ŠDC.LƒNWCERR2-VTBL‡0005‚Uploadspecifiedmemoryimage/MCODEMXƒEQU„(*-VTBL)/4‰Numberoftableentries.ŠPAGE*"* Monitor requested secondary ID's*>* Set up parameter block to send message back to monitor task. IDS‡EQU„*+ŠCLR.L‚NTWOPT(A2)‰Clearoptionsandstatus.-ŠMOVE.L#RLGTH2,NTSLEN(A2)Lengthofmessage.-ŠMOVE.LNTSSAD(A2),A0†Addresstoputmessage.0ŠMOVE.BSTAINFO+2(A6),RFFSTN(A0)1ststationID.<ŠMOVE.WSTAINFO(A6),RMAXSEC(A0)‚Max#ofsecondarystations.5ŠMOVE.BSTAINFO+3(A6),RSSINC(A0)Station#increment.%ŠBSR„SNDMSGMŒSendmessagetomonitor.*£queuedifnobuffers ŠBRA„NWCM60ŠPAGE*C* Error handler will return error status to monitor and then return*ƒtomainloop.*NWCERR1ƒMOVE.W#$71,D0 ŠBRA.S‚NWCERRNWCERR2ƒMOVE.W#$72,D0 ŠBRA.S‚NWCERRNWCERR3ƒMOVE.W#$73,D0*1NWCERR„CLR.L‚NTWOPT(A2)‰Clearoptionsandstatus.4ŠMOVE.L#RLGTH1,NTSLEN(A2)Lengthofreturnmessage.-ŠMOVE.LNTSSAD(A2),A0†Addresstoputmessage.ŠMOVE.W#'**',(A0)+ŠMOVE.WD0,RSTAT(A0)‡Pluginreturnstatus.%3 ŠBSR„SNDMSGMŒSendmessagetomonitor.*£queuedifnobuffers ŠBRA„NWCM60*G* Internal error routine saves the address from whence it was called atE*ƒthefirstlocationindatasegment.‚Onlythefirsterroraddressis*ƒsaved.NWCERRXƒTST.L‚(A6)ŠBNE.S‚NWCERRXR:ŠMOVE.L(A7),(A6)ŠSaveerroraddressifnotalreadysaved. NWCERRXR‚RTSŠPAGE**ˆMessageSenttoMonitorTask*6NWCSMONƒMOVE.B#-1,NTSSTA(A4)…Flagparamblockasfree!ŠMOVE.BNTSRCOD(A4),D0…Anyerror?'ŠBEQ„NWCM06IfNO-returntomainloop3ŠCMP.B‚#NTSRILCC,D0‡ILCCmaymeanconnectcancelled%ŠBEQ.S‚NWCSM04ŒBranchifcodeisILCC)ŠCMP.B‚#NTSRDISC,D0‡Isitanydisconnect?ŠBCC.S‚NWCSM04ŒBranchifYESŠERRMESG*$NWCSM04ƒMOVE.BNTSLCC(A4),D0†GetLCC&ŠBSR„GETLCCFindMonitorControlblockŠBNE„NWCM06Branchifnotfound*ŠBSR„FREMONFreethemonitorcontrolblockŠBRA„NWCM06ReturntomainloopŠPAGE*&*ˆSubroutinetoissueRECEIVERequests*=*ˆChecksallreceiveparameterblockstoseeifanyareready*)SRTRCV„MOVE.L#NUMRCV-1,D7‡Pointeroffset*ŠLEA„RCVBLK(A6),A0†Parameterblockaddress1SRTRV02ƒCMP.B‚#-1,NTWSTA(A0)…Isparamblockfree?ŠBNE.S‚SRTRV10ŒBranchifNO.ŠMOVE.B#NTSCRECV,NTWCMD(A0)PutcommandinpbŠCLR.B‚NTWLCC(A0)‰AnyLCCisok=ŠMOVE.W#1<0andnot'outofbufferstatus'* STATCHKƒEQU„* ŠTST.B‚D0$ŠBEQ.S‚STAT999ŒReturnifgoodstatus"ŠCMP.B‚#NTSRNOB,D0ˆOutofbuffers? ŠCRASH.NE*+1ŽAbortsystemifnoŠMOVE.LA0,-(A7) ŠMOVE.L#1000,A0‹Delay=1000ms ŠERQ.DELAYŠMOVE.L(A7)+,A0"ŠTST.L‚(A7)Setunequalconditions STAT999ƒRTSŠPAGE*)*ˆSubroutinetofindafreeDownloadArea*,*ˆOnEntry:D0.B=SecondaryStationNumber*&*ˆOnexit:A2=DownloadAreaAddress**’D0=0SuccessfulƒD0=-1noneavailable*+GETLOADƒMOVE.L#NUMLOAD-1,D7†Pointeroffset+ŠLEA„LOADBLK(A6),A2…Parame4 terblockaddress1GETLO02ƒCMP.B‚#0,LOADSEC(A2)…Isparamblockfree?ŠBNE.S‚GETLO10ŒBranchifNO/ŠMOVE.BD0,LOADSEC(A2)…Yes,SetitasallocatedAŠMOVE.L#FHSBLN+IOSBLN-1,D0InitializeFHS&IOSParameterBlocksŠLEA„FHSLOAD(A2),A0…*ŠLEA„LOADFHS,A1‰*GETLO04ƒMOVE.B(A1)+,(A0)+ˆ*ŠDBRAƒD0,GETLO04‰*ŠCMP.L‚#LUNTBLSZ-1,D7.ŠCRASH.HI*+1ŽAbortifLUNindexoutofrange.1ŠLEA„LUNTBL(PC),A0†PointtoLUNtabletoplugLUNŠMOVE.B0(A0,D7),FHSLUN(A2)†*$ŠMOVE.B0(A0,D7),IOSLUN+FHSBLN(A2)*ŠCLR.L‚D0‘Successful ŠRTS—RETURN9GETLO10ƒLEA„LOADBKSZ(A2),A2„incrementparamblockaddress'ŠDBRAƒD7,GETLO02‰LoopbacktocheckallŠMOVE.L#-1,D0NOTFound ŠRTS—RETURNŠPAGE*-*ˆSubroutinetofindareservedDownloadArea*,*ˆOnEntry:D0.B=SecondaryStationNumber*&*ˆOnexit:A2=DownloadAreaAddress**’D0=0SuccessfulƒD0=-1noneavailable**GETLUN„MOVE.L#NUMLOAD-1,D7†Pointeroffset+ŠLEA„LOADBLK(A6),A2…Parameterblockaddress1GETLU02ƒCMP.B‚LOADSEC(A2),D0…Isparamblockfree?ŠBNE.S‚GETLU10ŒBranchifNOŠCLR.L‚D0‘Successful ŠRTS—RETURN9GETLU10ƒLEA„LOADBKSZ(A2),A2„incrementparamblockaddress'ŠDBRAƒD7,GETLU02‰LoopbacktocheckallŠMOVE.L#-1,D0NOTFound ŠRTS—RETURN*-*ˆSubroutinetofreeareservedDownloadArea*'*ˆOnEntry:A2=DownloadareaAddress*“A3=SDLCmessage*,*ˆOnexit:A2=D0,D1,A0andA2destroyed*&FRELOADƒCLR.B‚LOADSEC(A2)ˆFlagasfree(ŠCLR.B‚SIMWAIT(A2)ˆBesurewaitisclear.ŠMOVE.BSDDSEC(A3),D0†SecondarystationnumberŠLEA„STAFLGB(A6),A0/ŠBCLRƒ#STAFUP,0(A0,D0)ƒClearuploadinprogress1ŠBCLRƒ#STAFDP,0(A0,D0)ƒCleardownloadinprogress/ŠLEA„WAITQHD-RCVNEXT(A6),A0Startofwaitqueue+ŠLEA„NTSLOAD(A2),A2…NTSPBinDOWNLOADarea/FRELD2„MOVE.LRCVNEXT(A0),D0…Nextinwaitqueue'ŠBEQ.S‚FRELD8Branchifsearchcomplete ŠCMP.L‚D0,A2ŽIsthispbonlist?ŠBEQ.S‚FRELD4BranchifYES ŠMOVE.LD0,A0(ŠBRA„FRELD2Loopbacktotestnextentry*7FRELD4„MOVE.LRCVNEXT(A2),RCVNEXT(A0)RemovefromqueueFRELD8„RTS—ReturnŠPAGE2***************************************************>*‚SUBROUTINE:‚"REDLOAD"READNEXTBLOCKFROMFILETOBELOADED*8*‚ENTER:ˆA0.L=AddressofDownloadParameterBlockArea*(*‚RETURN:‡D0=0=>BlockCorrectlyRead**D0><0=>BlockNotCorrectlyRead(EOF)**‚REGISTERS:„01234567 *ŽDUUP‰U*ŽAƒU‰P*>**************************************************************9REDLOADƒLEA„IOSLOAD(A2),A0…AddressofIOSParameterBlock;ŠLEA„LOADBUF+DNSLDAT(A2),A1AddressofStartofDataBufferŠMOVE.LA1,IOSSAD(A0)†*4ŠLEA„LOADBFSZ-1(A1),A1‚AddressofEndofDataBufferŠMOVE.LA1,IOSEAD(A0)†*ŠIOSCALLŠRTSŠPAGE*1*ˆSubroutinetofindaMonitorControlBlockarea*&*ˆOnexit:A2=MonitorBlockAddress**’D0=0SuccessfulƒD0=-1noneavailable*,GETMONBK‚MOVE.L#MAXMON-1,D7‡Countofblocks(ŠLEA„MONBLK(A6),A2†Monitorblockaddress2GETMB02ƒCMP.B‚#0,MONLCC(A2)†Ismonitorblockfree?ŠBNE.S‚GETMB10ŒBranchifNOŠCLR.L‚D0‘Successful ŠRTS—RETURN:GETMB10ƒLEA„MONBKSZ(A2),A2…Incrementtonextmonitorblock'ŠDBRAƒD7,GETMB02‰LoopbacktocheckallŠMOVE.L#-1,D0NOTFound ŠRTS—RETURN*5*ˆSubroutinetofindareservedMonitorControlBlock*(*ˆOnEntry:D0.B=LogicalConnectCode*&*ˆOnexit:A2=MonitorBlockAddress&*’D0=0SuccessfulƒD0=-1nonefound*+GETLCC„MOVE.L#NUMLOAD-1,D7†Countofblocks(ŠLEA„MONBLK(A6),A2†Monitorblockaddress2GETLC02ƒCMP.B‚MONLCC(A2),D0†Ismonitorblockfree?ŠBNE.S‚GETLC10ŒBranchifNOŠCLR.L‚D0‘Successful ŠRTS—RETURN:GETLC10ƒLEA„MONBKSZ(A2),A2…Incrementmonitorblockaddress'ŠDBRAƒD7,GETLC02‰LoopbacktocheckallŠMOVE.L#-1,D0NOTFound ŠRTS—RETURN*5*ˆSubroutinetofreeareservedMonitorControlBlock*'*ˆOnEntry:A2=MonitorBlockAddress*,*ˆOnexit:A2=D0,D1,A0andA2destroyed*$FREMON„CLR.B‚MONLCC(A2)‰Flagasfree+ŠLEA„WAITQHD-RCVNEXT,A0Startofwaitqueue ŠBRA„F4 RELD2ŠPAGE2***************************************************<*‚SUBROUTINE:‚"REDNETS"READARECORDFROM"NETLOAD.SA"FILE*(*‚ENTER:‡DO.L=RecordNumbertobeRead*(*‚RETURN:‡D0=0=>BlockCorrectlyRead**D0><0=>BlockNotCorrectlyRead(EOF)**‚REGISTERS:„01234567 *ŽDUUU‰U*ŽAƒU‰P*>**************************************************************'REDNETSƒMOVE.LD0,D2ŽSaveRecordNumber.ŠLEA„FHSNETS(A6),A0…Openthe"NETLOAD.SA"FileŠMOVE.W#FHASGN,FHSCMD(A0)*ŠFHSCALLŠBNE.S‚REDNERBranchifError2ŠLEA„IOSNETS(A6),A0…AddressofIOSParameterBlock3ŠLEA„NETSBUF(A6),A1…AddressofStartofDataBufferŠMOVE.LA1,IOSSAD(A0)†*2ŠLEA„NETSBEND(A6),A1„AddressofEndofDataBufferŠMOVE.LA1,IOSEAD(A0)†**ŠMOVE.LD2,IOSRRN(A0)†RandomRecordNumberŠIOSCALL)ŠMOVE.LD0,-(A7)‹SavePossibleErrorCode'ŠMOVE.LIOSSAD(A0),A1†Addressofbuffer ŠMOVE.LA1,D14ŠADD.L‚IOSLEN(A0),D1†D1pointstolastcharacter+1REDN04„CMP.L‚D1,A1 ŠBHS.S‚REDN06ŠCMP.B‚#'',(A1)+ ŠBNE.S‚REDN04<ŠMOVE.B#$0D,-1(A1)ˆForcecarriagereturninto1stblankpos>REDN06„MOVE.B#$0D,(A1)ŠForcecarriagereturnatendofrecord/ŠLEA„FHSNETS(A6),A0…Closethe"NETLOAD.SA"FileŠMOVE.W#FHCLOS,FHSCMD(A0)*ŠFHSCALL,ŠMOVE.L(A7)+,D0‹RestorePossibleErrorCode REDNER„RTSŠPAGE7* Subroutine to output message followed by station ID -%*‚e.g.ƒ'UPLOADABORTED-STATION$02'*“-or-!*‰'UPLOADFINISHED-STATION$03'*'*ENTRY:„A1…pointstobeginningoftext"*”ie.'UPLOADABORTED-STATION$'*‹A2…pointstoendoftext7*‹A4…pointstoupload/downloadarea.‚Thestationnumber3*”ispulledfromthecatalogportionoftheFHSLOAD*”parameterblock.**EXIT:…D0,A1,A2Destroyed** ULODMSGƒEQU„*-ŠBSR„OUTTERMŒPutoutfirstportionofmessageŠLEA„ABUFFR(A6),A1 ŠLEA„3(A1),A2;ŠMOVE.WFHSLOAD+FHSCLG+4(A4),(A1)BracketstationID,CR,LF"ŠMOVE.W#$0D0A,2(A1)‡PluginCR,LF ŠBSR„OUTTERMŠRTSŠPAGE*.* Convert 1 HEX byte in range 0-99 to decimal.<*‚Nocheckismadetoinsurethatbyteiswithinthisrange.+*‚Deposit2hexbyteswhereA1ispointing.G*‚Onexit,A1willpointtobytefollowingthedepositedASCIIdecimal.*+CVDEC1„AND.L‚#$FF,D0ŒIsolateloworderbyteŠDIVUƒ#10,D010's,1's.%ŠADD.L‚#$00300030,D0†ConverttoASCII$ŠMOVE.BD0,(A1)+‹Deposit10'sdigit.ŠSWAPƒD0‘Position1'sdigit.#ŠMOVE.BD0,(A1)+‹Deposit1'sdigit.ŠRTS*****ˆNON-LEAPDAYSBEFORETABLE**‚ENTER:ˆD0.B=SDLCCommand/ResponseCorrespondingtoMessage'*A3.L=AddressofSDLCResponseField**‚REGISTERS:„01234567 *ŽDUUU*ŽAƒUU*>**************************************************************.MSGOUT„LEA„SDMSG(PC),A1‡CleanupSDLCResponse'ŠMOVE.LSDDCMD(A3),D1†RESP+StationIDŠBTSTƒ#0,D0ŽNumberedIfield?ŠBNE.S‚MSGOU1*BranchifNo"ŠMOVE.B#SDDCI,D0ŠYes,CleanitUpŠBRA.S‚MSGOU2BŒ*,MSGOU1„BTSTƒ#1,D0ŽNo,RR,RNR,REJResponse?ŠBEQ.S‚MSGOU2AŒ*BranchifYES1ŠCMP.L‚PREVCMD(A6),D1…Sameaslastonedisplayed?.ŠBNE.S‚MSGOU2BŒBranchifNO‚-displaythisone*ŠBRA.S‚MSGOURBranchifYES-skipdisplay&MSGOU2AƒAND.B‚#$07,D0ŒYes,CleanitUp4MSGOU2BƒMOVE.LD1,PREVCMD(A6)…Savecommanddisplayed$ŠCMP.B‚#SDDCI,D0ŠNumbered'I'frame?+ŠBEQ.S‚MSGOURBranchifyes-Don'tdisplay,MSGOU2CƒMOVE.W2(A1),D1‹MessageLength->D1&ŠCMP.B‚1(A1),D0‹CorrectSDLCResponse?ŠBEQ.S‚MSGOU3*Branchifyes&ŠCMP.B‚#$FF,1(A1)‰No,EndofMessages?ŠBEQ.S‚MSGOU3*BranchifYes/ŠLEA„4(A1,D1.W),A1†No,FetchNextMessageEntryŠBRA.S‚MSGOU2CŒ*6MSGOU3„LEA„4(A1),A1‹OutputtheMessageToTheTerminalŠLEA„-1(A1),A2Š* ŠCLR.L‚D0‘*ŠMOVE.WD1,D0Ž*ŠADD.L‚D0,A2Ž* ŠXREFƒOUTTERMŠBSR„OUTTERMŒ**&*ˆTxLATE25BYTESTOASCIIHEX&TxMIT*ŠLEA„ABUFFR(A6),A1ŠMOVE.W#24,D2Convert25bytes ŠLEA„(A3),A2$W2CONT„MOVE.B#'',(A1)+‰SETABLANK ŠMOVE.B(A2)+,D0‹FETCHNEXTBYTE%ŠBSR.S‚CVHEX1Convert1bytetoASCII)ŠDBRAƒD2,W2CONTŠBranchifmoretoconvert#ŠMOVE.B#CR,(A1)+Š"CR/LF"TOBUFFERŠMOVE.B#LF,(A1)6ŠLEA„ABUFFR(A6),A1†Outputthe25BytestotheTerminalŠMOVE.LA1,A2Ž*ŠMOVE.L#77,D0*ŠADD.L‚D0,A2Ž*ŠBSR„OUTTERMŒ*!MSGOUR„RTS—ReturnFromSubroutine**ˆConvert1HEXbytetoASCII*CVHEX1„MOVE.BD0,D1Ž*.ŠASR.L‚#4,D0ŽCONVERTUPPERNIBBLETOHEXASCIIŠAND.B‚#$0F,D0Œ*ŠADD.B‚#'0',D0Œ*ŠCMP.B‚#'9',D0Œ*ŠBLE.S‚CVHEXA*ŠADD.B‚#$7,D0*6CVHEXA„AND.B‚#$0F,D1ŒCONVERTLOWERNIBBLETOHEXASCIIŠADD.B‚#'0',D1Œ*ŠCMP.B‚#'9',D1Œ*ŠBLE.S‚CVHEXB*ŠADD.B‚#$7,D1*3CVHEXB„MOVE.BD0,(A1)+‹MOVE2ASCIICHARSTOBUFFERŠMOVE.BD1,(A1)+‹*ŠRTS**„MESSAGETABLE* CRˆEQU„$0D LFˆEQU„$0A*SDMSG…DC.WƒSDDCUIŠDC.WƒSDMS0E-SDMS0%SDMS0…DC.Bƒ'UnnumberedIField',CR,LFSDMS0E„DC.WƒSDDCUI+$10ŠDC.WƒSDMS1E-SDMS1/SDMS1…DC.Bƒ'UnnumberedIFieldPollBit',CR,LFSDMS1E„DC.WƒSDDCSIMŠDC.WƒSDMS2E-SDMS2*SDMS2…DC.Bƒ'SetInitializationMode',CR,LFSDMS2E„DC.WƒSDDCSNRMŠDC.WƒSDMS3E-SDMS3+SDMS3…DC.Bƒ'SetNormalResponseMode',CR,LFSDMS3E„DC.WƒSDDCDISCŠDC.WƒSDMS4E-SDMS4'SDMS4…DC.Bƒ'SetDISCconnectMode',CR,LFSDMS4E„DC.WƒSDDCXIDŠDC.WƒSDMS5E-SDMS5SDMS5…DC.Bƒ'eXchangeIDs',CR,LFSDMS5E„DC.WƒSDDCTESTŠDC.WƒSDMS6E-SDMS6SDMS6…DC.Bƒ'TESTlink',CR,LFSDMS6E„DC.WƒSDDCIŠDC.WƒSDMS7E-SDMS7#SDMS7…DC.Bƒ'NumberedIfield',CR,LFSDMS7E„DC.WƒSDDRRIMŠDC.WƒSDMS8E-SDMS8.SDMS8…DC.Bƒ'RequestInitializationMode',CR,LFSDMS8E„DC.WƒSDDRDMŠDC.WƒSDMS9E-SDMS9"SDMS9…DC.Bƒ'DisconnectMode',CR,LFSDMS9E„DC.WƒSDDRUAŠDC.WƒSDMS10E-SDMS10*SDMS10„DC.Bƒ'UnnumberedAcknowledge',CR,LFSDMS10EƒDC.WƒSDDRFRMRŠDC.WƒSDMS11E-SDMS11 SDMS11„DC.Bƒ'FRaMeReject',CR,LFSDMS11EƒDC.WƒSDDRRDŠDC.WƒSDMS12E-SDMS12&SDMS12„DC.Bƒ'RequestDisconnect',CR,LFSDMS12EƒDC.Wƒ$FFŠDC.WƒSDMS13E-SDMS13)SDMS13„DC.Bƒ'UnknownSDLCResponse',CR,LFSDMS13EƒDC.Wƒ$FF*PATCH…DS.Bƒ50‘PatchareaŠEND5 éééééééŠPAGEJ***************************************************************************INCLUDEFILE:‚NTS.NWSUBR.AI«*J************************************************************************** 7ŠTTL„NWSUBR.SAŠSubroutinesUsedbyNTSandNTCRoutines*A*ˆSubroutinetotestNetworkName(calledbyNTSIDNTandNTCIDNT)C*ˆTestsforlegalcharactersinnameandlooksforduplicateinNNT*B*ˆ1stentry-NWTNAM…ChecksforlegalnameandlooksforitinNNTC*ˆOnentry:A5=PointertoNNTtableƒA4=PointertoNTSparamblock*0*ˆ2ndentry-NWTNAMC„LooksfornameinNNTonly*%*ˆOnentry:A5=PointertoNNTtable&*’D1andD2=Networknametolookfor*!*ˆOnexit:A2,D1andD2areused.*‘A2=PointertoNNTentryifduplicatefound7*‘D0=0ifgoodreturnˆD0=errorcodeifillegalname*¼orduplicatenameŠXDEFƒNWTNAM,NWTNAMC*,*ˆCheckeachcharacter-mustbelegalascii*5NWTNAM„MOVE.L#5,D0ŽWanttotest6charactersofname#ŠLEA„NTSNAME(A4),A0…Pointertoname(NWTN02„MOVE.B(A0)+,D1‹Getonecharacter'ŠCMP.B‚#$1F,D1ŒIsitcontrolcharacter?%ŠBLE.S‚NWTN06Branchifyes-illegal.ŠCMP.B‚#$7E,D1ŒIsitbeyondhighendofrange?%ŠBGT.S‚NWTN06Branchifyes-illegal-ŠDBRAƒD0,NWTN02ŠLoopbackformorecharacters***ˆLookforduplicateinNetworkNameTable*/ŠMOVE.LNTSNAME(A4),D1…1st4charactersofname2ŠMOVE.WNTSNAME+4(A4),D2ƒLast2charactersofname?NWTNAMCƒLEA„NNTAHDR-NNTNEXT(A5),A2Initialactiveentrypointer6NWTN04„MOVE.LNNTNEXT(A2),D0…Doesanotherentryexist?ŠBEQ.S‚NWTN08BranchifNOŠMOVE.LD0,A2ŽEntrypointer.ŠCMP.L‚NNTNAM(A2),D1†Are1st4charsthesame?ŠBNE.S‚NWTN04LoopbackifNO1ŠCMP.W‚NNTNAM+4(A2),D2„Arelast2charsthesame?ŠBNE.S‚NWTN04LoopbackifNO+ŠMOVE.L#NTSRDNAM,D0‡ERROR-duplicatename ŠRTS—RETURN*/NWTN06„MOVE.L#NTSRINAM,D0‡ERROR-illegalname ŠRTS—RETURN*%NWTN08„CLR.L‚D0‘Clearforgoodreturn ŠRTS—RETURNŠPAGE*E*ˆSubroutinetobuildmessagetosendtoSSC(SystemServiceControl)* ¯;¸CÀ1È>Ð;Ø8à9è:ðCø8D;</ 8(;0"6 C*ˆOnentry:A5=PointertoNNTtableƒA4=PointertoNTSparamblock*’A2=PointertoNNTentry*?*ˆOnexit:‚A0=Pointertobuffer†A1=Ptrtomessageinbuffer*’D7=LocalStationID7*’D0=0ifgoodreturn‡D0=errorcodenobufferavail** Message appears as follows:0*ƒ(Valuesof'xx'representuninitializedbytes)*#*‡Offset‚MnemonicValue‹Description**-------------*‹00‚SDDLINKŽxxxxxxxxˆLink *‹04‚SDDSTS00xxŒReturnedstatus*‹06‚SDDBCT0028ŒMessagesize*‚SDLC…08‚SDDRTCxxŽRetrycount!*‚Headerƒ09‚SDDERRxxŽSDLCerrors*‹0A‚SDDCMDxxŽSDLCcommand*‹0B‚SDDSECnnŽLocalstationID*‹0C‚SDDRSPxxŽSDLCresponse*‹0D‚------xxŽFiller*-------------*‹0E‚THB1‘2CŽNormal'I'frame*‚NTS¯(firstandlast)'*‚Trans-ƒ0F‚THB2‘00ŽTransmissionheader%*‚mission‚10‚THDAF01ŽDestinationNAU*‚Headerƒ11‚THOAF01ŽOriginNAU*‹12‚THSEQ0000ŒSequencenumber*-------------$*‹14‚RHCAT23ŽCategory:fromnetwork*REQ/RESP«control!*fields„15‚RHB1‘00Žreq/respflag*‹16‚RHB2‘0000Œreq/respheader*-------------'*‹18‚MSGID'.NTS'ŠOriginatorofmessage'*‹1C‚MSGCMDnn+$80ŠCommandfromNTSPB.*‹1D‚MSGLCCnnŽLCCfromNTSPB.*‹1E‚MSGOPTnnŽNNTstatus*‹1F‚MSGXRCODxxŽReturncode"*‹20‚MSGSTAnnŽStatusfromNTSPB.(*‹21‚MSGRCODŽnnŽRetruncodefromNTSPB.*‹22‚MSGSESVŽxxxxxxxxˆReserved-*‹26‚MSGLNAMŽnnnnnnnnnnnn„LocalnamefromNNT"*‹2A‚MSGLNAUŽnnŽLocalNAUfromNNT"*‹2B‚MSGLSIDŽxxŽStaID-localNAU2*‹2C‚MSGRNAMŽnnnnnnnnnnnn„RemotenamefromNTSPB.'*‹32‚MSGRNAUŽnnŽRemoteNAUfromNTSPB. *´(NTSNAM+4)'*‹33‚MSGRSIDŽnnŽRemoteSIDfromNTSPB. *´(NTSNAM+5)*** ŠXDEFƒNWMGSSC-NWMGSSCƒTR0.GTFRBFGetŒbufferfromfreequeue'ŠBEQ.S‚NWMG04Branchifbufferreturned/ŠMOVE.L#NTSRNOB,D0ˆERROR-nobufferavailable ŠRTS—RETURN*3NWMG04„LEA„SDDDAT(A0),A1†Messageareawithinbuffer**ˆBuildTHandRH*)ŠCLR.L‚THB1(A1)‹ClearTransmissionHeader)ŠMOVE.B#THB1FMT,THB1(A1)‚Setformatcode5ŠBSETƒ#THB1FS,THB1(A1)ƒThisis1stsegmentofmessage6ŠBSETƒ#THB1LS,THB1(A1)ƒThisislastsegmentofmessage%ŠMOVE.B#SSCNAU,THDAF(A1)‚Destination ŠMOVE.B#SSCNAU,THOAF(A1)‚Origin-ŠCLR.W‚THSEQ(A1)ŠNOsequenceforthismessage=ŠMOVE.B#RHCATNC,RHCAT(A1)Catagoryis'fromnetworkcontrol'2ŠCLR.B‚RHB1(A1)‹ClearReq/Respfield-forrequest$ŠCLR.W‚RHB2(A1)‹Clearreservedfield*$*ˆSetrequiredfieldsinSDLCheader*$ŠCLR.B‚SDDSTS(A0)‰Clearerrorstatus'ŠMOVE.W#MSGSIZ,SDDBCT(A0)Messagesize'ŠMOVE.BNNTHSID(A5),D7…LocalStationID-ŠMOVE.BD7,SDDSEC(A0)†UseLocalSIDinheader*/ŠMOVE.L#'.NTS',MSGID(A1)‚MessageID-fromNTS@ŠMOVE.LNTSCMD(A4),MSGCMD(A1)CMD,LCCandoptsfromparamblock/ŠBSETƒ#7,MSGCMD(A1)†SethibitfornewCMDcode>ŠMOVE.WNTSSTA(A4),MSGSTA(A1)StatusandRCODfromparamblock:ŠMOVE.LNNTNAM(A2),MSGLNAM(A1)LocalNetworkNamefromNNT>ŠMOVE.WNNTNAM+4(A2),MSGLNAM+4(A1)LocalNetworkNamefromNNT9ŠMOVE.WNNTNAU(A2),MSGLNAU(A1)LocalNAUandSIDfromNNT=ŠMOVE.BNNTSTAT(A2),MSGOPT(A1)SaveNNTstatusinMsgoptions<ŠMOVE.LNTSNAME(A4),MSGRNAM(A1)Remotenamefromparamblock@ŠMOVE.WNTSNAME+4(A4),MSGRNAM+4(A1)Remotenamefromparamblock?ŠMOVE.WNTSNAME+6(A4),MSGRNAU(A1)RemoteNAUandSID(ifthere)%ŠCLR.L‚D0‘ClearforsuccessfulreturnŠRTSŠPAGE*E*ˆSubroutinetolinkdatabufferintoLCT's'ReceivebuffinQ'chain7*‹(alsogethereascontinuationofNWMSGSCsubroutine)*?*ˆOnentry:A5=PointertoLCTentryƒA2=Pointertodatabuffer*%*ˆOnexit:‚A0isusedinchainsearch*’D0=0(alwaysgoodreturn)* ŠXDEFƒNWLNKBQ8NWLNKBQƒLEA„LCTRWTBF-SDDLNK(A5),A0Startofbufferchain/NWBQ06„MOVE.LSDDLNK(A0),D0†Nextbufferaddress$ŠBEQ.S‚NWBQ08Branchifendofchain#ŠMOVE.LD0,A0ŽUpdatebufferaddress!ŠBRA„NWBQ06Loopbacktofindend6NWBQ08„CLR.L‚SDDLNK(A2)‰Clearlinkfieldinnewbuffer-ŠMOVE.LA2,SDDLNK(A0)†Addnewbuffertochain0ŠBSETƒ#LCTARBFQ,LCTRSTA(A5)Set'buffinQ'flagŠBTSTƒ#0,SDDRSP(A2)†'I'frame?ŠBNE.S‚NWBQ08.5‹Branchifno6 )ŠBTSTƒ#THB1LS,THB1(A1)ƒLastsegment?SCB. ŠBEQ.S‚NWBQ09Branchifno.SCB.@NWBQ08.5‚ADD.W‚#1,LCTMCNT(A5)…BumpcompletemessagecounterSCB.%NWBQ09„CLR.L‚D0‘ClearforgoodreturnŠRTSŠPAGE*4*ˆSubroutinetofindNATentrygivenNetworkAddress*)*ˆOnentry:D6bits7-0=‚NetworkAddress*$*ˆOnexit:‚A3=PointertoNATentry*’A5=PointertoNATtable7*’D0=0ifgoodreturn‡D0=errorcodeentrynotfound* ŠXDEFƒNWFNAT6NWFNAT„MOVE.LNATBEG,A5ŠStartofNetworkAddressTable ŠCLR.L‚D0ŠMOVE.BD6,D0ŽNetworkAddress"ŠSUB.L‚#1,D0ŽAddress-1=entry#5ŠMULUƒ#NATESIZ,D0ˆentry#*entrysize=entryoffset%ŠLEA„NATENTRY(A5,D0),A3Entryaddress+ŠBTSTƒ#NATSACT,NATSTAT(A3)Isentryactive?ŠBEQ.S‚NWFN08BranchifNO+NWFN02„CLR.L‚D0‘Clearforsuccessfulreturn ŠRTS—RETURN*6NWFN08„MOVE.L#NTSRTNAU,D0‡ERROR-NATentrynotfound ŠRTS—RETURNŠPAGE*D*ˆSubroutinetofindLCTentrygivenOAF(remoteNAU)andremoteSID+*’havepointertoDAF(localNAU)NATentry*D*ˆOnentry:D7bits7-0=remoteSID,D6bits7-0=OAF(remoteNAU))*’A3=PointertoNATentryforlocalNAU*$*ˆOnexit:‚A5=PointertoLCTentry$*’A0=PointertopreviousLCTentry7*’D0=0ifgoodreturn‡D0=errorcodeentrynotfound* ŠXDEFƒNWFLCTANWFLCT„LEA„NATLCTLK-LCTLULNK(A3),A51stentrypointerinLUchain/NWFL02„MOVE.LA5,A0ŽSavepreviousentrypointer1ŠMOVE.LLCTLULNK(A5),D0„Nextentryinactivelist%ŠBEQ.S‚NWFL08BranchifnomoreexistŠMOVE.LD0,A5ŽLCTentryaddress3ŠCMP.B‚LCTRMSID(A5),D7„LookformatchingstationIDŠBNE„NWFL02Branchifnomatch8ŠCMP.B‚LCTRMNAU(A5),D6„Lookformatchingnetworkaddress%ŠBNE„NWFL02Branchtocontinuesearch%ŠCLR.L‚D0‘Clearforsuccessfulreturn ŠRTS—RETURN*6NWFL08„MOVE.L#NTSRILCC,D0‡ERROR-LCTentrynotfound ŠRTS—RETURNŠPAGE*?*ˆSubroutinetofindLCTentrygivenLCC(LogicalConnectCode)'*’havepointertolocalNAU'sNATentry*/*ˆOnentry:A4=PointertoNTSparameterblock)*’A3=PointertoNATentryforlocalNAU*-*ˆOnexit:‚A5=PointertoLCTentryiffound7*’D0=0ifgoodreturn‡D0=errorcodeentrynotfound* ŠXDEFƒNWFNLCCBNWFNLCCƒLEA„NATLCTLK-LCTLULNK(A3),A51stentrypointerinLUchain)ŠMOVE.BNTSLCC(A4),D1†GetLCCforcompare7NWFC02„MOVE.LLCTLULNK(A5),D0„Nextentryinactivelist%ŠBEQ.S‚NWFC08BranchifnomoreexistŠMOVE.LD0,A5ŽLCTentryaddress,ŠCMP.B‚LCTLOLCC(A5),D1„LookformatchingLCCŠBNE„NWFC02Branchifnomatch%ŠCLR.L‚D0‘Clearforsuccessfulreturn ŠRTS—RETURN*6NWFC08„MOVE.L#NTSRILCC,D0‡ERROR-LCTentrynotfound ŠRTS—RETURN*@*ˆSubroutinetofindLCTentrygivenNetworkName(ofremoteNAU)'*’havepointertolocalNAU'sNATentry*G*ˆOnentry:D4=1st4charactersofname‚D5(bits15-0)=last2chars)*’A3=PointertoNATentryforlocalNAU*-*ˆOnexit:‚A5=PointertoLCTentryiffound$*’A0=PointertopreviousLCTentry7*’D0=0ifgoodreturn‡D0=errorcodeentrynotfound* ŠXDEFƒNWFNLCNBNWFNLCNƒLEA„NATLCTLK-LCTLULNK(A3),A51stentrypointerinLUchain8NWFCN02ƒMOVE.LLCTLULNK(A5),D0„Nextentryinactivelist&ŠBEQ.S‚NWFCN08ŒBranchifnomoreexist!ŠMOVE.LA5,A0ŽSavepreviousentryŠMOVE.LD0,A5ŽLCTentryaddress-ŠCMP.L‚LCTRMNAM(A5),D4„LookformatchingnameŠBNE„NWFCN02ŒBranchifnomatch/ŠCMP.W‚LCTRMNAM+4(A5),D5‚Lookformatchingname ŠBNE„NWFCN02%ŠCLR.L‚D0‘Clearforsuccessfulreturn ŠRTS—RETURN*/NWFCN08ƒMOVE.L#NTSRINAM,D0‡LCTentrynotfound ŠRTS—RETURNŠPAGE*<*ˆSubroutinetoreturnDISCONNECTedNNTentriestoFreelist7*Š(alsoreturnsassociatedNATentrytoit'sFreelist)*G*ˆOnentry:A2=PointertooneNNTentry-findothersw.sameNAU&SID*=*ˆOnexit:‚A5=PointertoNNTtable(A4,A3andA2unchanged)*’A1,A0,D1andD0destroyed* ŠXDEFƒNWFRNNT.NWFRNNTƒMOVE.LNNTNAT(A2),D0†NATentryaddress%ŠBEQ.S‚NWFRN06ŒBranchifnoNATentry(ŠMOVE.LD0,A1ŽSaveaddresstosearchfor$ŠMOVE.LNATBEG,A5ŠStartofNATtable7 2ŠLEA„NATAHDR-NATNEXT(A5),A0Startof'active'list5NWFRN02ƒMOVE.LNATNEXT(A0),D0…Isthereanotherentry?$ŠBEQ.S‚NWFRN06ŒBranchifend-of-list'ŠCMP.L‚A1,D0ŽIs'next'theonewewant?ŠBEQ.S‚NWFRN04ŒBranchifYESŠMOVE.LD0,A0ŽNextentry(ŠBRA.S‚NWFRN02ŒBranchtocontinuesearch*&NWFRN04ƒCLR.W‚NATSTAT(A1)ˆClearstatus9ŠMOVE.LNATNEXT(A1),NATNEXT(A0)Removefrom'active'list2ŠMOVE.LNATFHDR(A5),NATNEXT(A1)Addto'free'list0ŠMOVE.LA1,NATFHDR(A5)…Update'free'listheader*+NWFRN06ƒMOVE.LNNTBEG,A5ŠStartofNNTtable2ŠMOVE.WNNTNAU(A2),D1†NetworkAddress&StationID1ŠLEA„NNTAHDR-NNTNEXT(A5),A1Startoftablesearch4NWFRN08ƒMOVE.LA1,A0ŽA0isaddressofpreviousentry6NWFRN09ƒMOVE.LNNTNEXT(A0),D0…does'next'entryexist?ŠBNE.S‚NWFRN10ŒBranchifYES ŠRTS—RETURN0NWFRN10ƒMOVE.LD0,A1ŽA1iscurrententryaddress$ŠCMP.W‚NNTNAU(A1),D1†SameNAU&SID?ŠBNE„NWFRN08ŒBranchifNOŠCLR.L‚NNTSTAT(A1)ˆClearstatus9ŠMOVE.LNNTNEXT(A1),NNTNEXT(A0)Removefrom'active'list2ŠMOVE.LNNTFHDR(A5),NNTNEXT(A1)Addto'free'list0ŠMOVE.LA1,NNTFHDR(A5)…Update'free'listheader&ŠBRA„NWFRN09ŒBranchtocontinuesearchŠPAGE*<*ˆSubroutinetoreturnDISCONNECTedLCTentriestoFreelist*@*ˆOnentry:A3=PointertoNATentrycontainingLCTentrychain'*’A5=PointertoLCTentrytobefreed**ˆOnexit:‚A5=00*’D0andA0‚used‚-allotherregistersunchanged* ŠXDEFƒNWFRLCT0NWFRLCTƒBTSTƒ#LCTCSSCT,LCTCSTA(A5)IsthisSSCT?$ŠBNE.S‚NWFRL06ŒNeverfreeSSCTentry)ŠBTSTƒ#LCTCSNWC,LCTCSTA(A5)IsthisNWCT?$ŠBNE.S‚NWFRL06ŒNeverfreeNWCTentry*%*RangecheckthisLCTŽ*2/28/83SCB.(ŠMOVE.LLCTBEG,A0ŠPointertoLCTheader.8ŠCMP.L‚A0,A5ŽMakesurewhatwethinkisLCTisinrange.(ŠCRASH.LO*+1ŽCrashifaddresstoosmall ŠMOVE.LA0,D0/ŠADD.L‚LCTTSIZ(A0),D0…PointtoendofLCTtable9ŠSUB.L‚#LCTESIZ,D0ˆLastentrycannotbegreaterthanthis!ŠCMP.L‚D0,A5ŽAreweoutofrange.ŠCRASH.HI*+1ŽCrashifyes#*Endofrangecheck*2/28/83SCB.*ŠMOVE.LLCTBEG,A07NWFRL01ƒLEA„NATLCTLK-LCTLULNK(A3),A0StartofLCTchain6NWFRL02ƒMOVE.LLCTLULNK(A0),D0„Isthereanotherentry?$ŠBEQ.S‚NWFRL06ŒBranchifend-of-list'ŠCMP.L‚A5,D0ŽIs'next'theonewewant?ŠBEQ.S‚NWFRL04ŒBranchifYESŠMOVE.LD0,A0ŽNextentry(ŠBRA.S‚NWFRL02ŒBranchtocontinuesearch*BNWFRL04ƒMOVE.LLCTLULNK(A5),LCTLULNK(A0)Removefrom'active'list$ŠMOVE.LLCTBEG,A0ŠStartofLCTtable2ŠMOVE.LLCTFHDR(A0),LCTNEXT(A5)Addto'free'list0ŠMOVE.LA5,LCTFHDR(A0)…Update'free'listheaderŠLEA„0,A5CleartheregisterNWFRL06ƒRTS—RETURNŠPAGE*1*ˆSubroutinetofindendofparameterblockchain9*‹(willlookforduplicateparameterblockalongtheway)*D*ˆOnentry:A0‚Pointstoheadofchain(LEAchainhed-NTSNEXT(Ax),A0))*’A4‚PointstoNTSorNTCparameterblock*+*ˆOnexit:‚A0‚Pointstolastentryinchain6*’D2=Pointertoentrypreceeding1st'recv-from-any'3*—(neededbyNTSRECVtolinkinnon'recv-from-any'4*’D0=0ifgoodreturn‡D0=errorcodeifduplicate*?*ˆBeforecallingroutine,headofchainpointersetasfollows:*’LEA‚Chainhd-NTSNEXT(Ax),A0:*ˆOnreturn,paramblocksavedonendofchainasfollows:*’CLR.L‚NTSNEXT(A4)*’MOVE.LA4,NTSNEXT(A0)* ŠXDEFƒNWLNKPB"NWLNKPBƒCLR.L‚D0‘Clearreturncode5NWPB02„MOVE.LNTSNEXT(A0),D1…Nextparamblockaddress$ŠBEQ.S‚NWPB08Branchifendofchain(ŠMOVE.LD1,A0ŽUpdateparamblockaddress*ŠCMP.L‚A0,A4ŽCompareparamblockaddresses#ŠBNE„NWPB02Loopbackifnocompare2ŠMOVE.L#NTSRPBLK,D0‡ERROR-duplicateparamblock!ŠBRA„NWPB02Loopbacktofindend!NWPB08„TST.L‚D0‘SetCCforreturn ŠRTS—RETURNŠPAGE*=*ˆSubroutinetoset'ListenActive'statusinallNNTentries=*ŠforNAUidentifiedbyNetworkAddressandSIDoneNNTentry*F*ˆOnentry:A2=PointertooneNNTentry-findNNT'sw.sameNAU&SID*$*ˆOnexit:‚A5=PointertoNNTtable*’A2=PointertooneNNTentry*’A0,D1andD0used* ŠXDEFƒNWSETLA8NWSETLAƒMOVE.WNNTNAU(A2),D1†GetNAUandSIDforcompare7 -ŠMOVE.LNNTBEG,A5ŠStartofNetworkNameTable1ŠLEA„NNTAHDR-NNTNEXT(A5),A0Startoftablesearch6NWSLA02ƒMOVE.LNNTNEXT(A0),D0…does'next'entryexist?ŠBEQ.S‚NWSLA06ŒBranchifNO)ŠMOVE.LD0,A0ŽA2iscurrententryaddress$ŠCMP.W‚NNTNAU(A0),D1†SameNAU&SID?ŠBNE„NWSLA02ŒBranchifNO/ŠBSETƒ#NNTSLACT,NNTSTAT(A0)Set'ListenActive'&ŠBRA„NWSLA02ŒBranchtocontinuesearch*NWSLA06ƒRTS—RETURNŠPAGE*?*ˆSubroutinetoclear'ListenActive'statusinallNNTentries=*ŠforNAUidentifiedbyNetworkAddressandSIDoneNNTentry*F*ˆOnentry:A2=PointertooneNNTentry-findNNT'sw.sameNAU&SID*$*ˆOnexit:‚A5=PointertoNNTtable*’A2=PointertooneNNTentry*’A0,D1andD0used* ŠXDEFƒNWCLRLA8NWCLRLAƒMOVE.WNNTNAU(A2),D1†GetNAUandSIDforcompare-ŠMOVE.LNNTBEG,A5ŠStartofNetworkNameTable1ŠLEA„NNTAHDR-NNTNEXT(A5),A0Startoftablesearch6NWCLA02ƒMOVE.LNNTNEXT(A0),D0…does'next'entryexist?ŠBEQ.S‚NWCLA06ŒBranchifNO)ŠMOVE.LD0,A0ŽA2iscurrententryaddress$ŠCMP.W‚NNTNAU(A0),D1†SameNAU&SID?ŠBNE„NWCLA02ŒBranchifNO1ŠBCLRƒ#NNTSLACT,NNTSTAT(A0)Clear'ListenActive'&ŠBRA„NWCLA02ŒBranchtocontinuesearch*NWCLA06ƒRTS—RETURNŠPAGE*:*ˆSubroutinetoset'Disconnect'statusinallNNTentries=*ŠforNAUidentifiedbyNetworkAddressandSIDoneNNTentry*F*ˆOnentry:A2=PointertooneNNTentry-findNNT'sw.sameNAU&SID*$*ˆOnexit:‚A5=PointertoNNTtable*’A2=PointertooneNNTentry*’A0,D1andD0used* ŠXDEFƒNWSETDC8NWSETDCƒMOVE.WNNTNAU(A2),D1†GetNAUandSIDforcompare-ŠMOVE.LNNTBEG,A5ŠStartofNetworkNameTable1ŠLEA„NNTAHDR-NNTNEXT(A5),A0Startoftablesearch6NWSDC02ƒMOVE.LNNTNEXT(A0),D0…does'next'entryexist?ŠBEQ.S‚NWSDC06ŒBranchifNO)ŠMOVE.LD0,A0ŽA2iscurrententryaddress$ŠCMP.W‚NNTNAU(A0),D1†SameNAU&SID?ŠBNE„NWSDC02ŒBranchifNO,ŠBSETƒ#NNTSDISC,NNTSTAT(A0)Set'Disconnect')ŠBCLRƒ#NNTSACT,NNTSTAT(A0)Clear'Active'1ŠBCLRƒ#NNTSLACT,NNTSTAT(A0)Clear'ListenActive'&ŠBRA„NWSDC02ŒBranchtocontinuesearch*NWSDC06ƒRTS—RETURNŠPAGE*:*ˆSubroutinetobuildnewLCTentrywhenCONNECTinitiated*@*ˆOnentry:A4=Pointertoparameterblock-nameoftargetNAU2*’A3=PointertoNATentry-infoaboutlocalNAU*(*ˆOnexit:‚A5=PointertonewLCTentry*’A2=PointertooneNNTentry*’A0,A1andD0used*ŠXDEFƒNWBLDLCT;NWBLDLCT‚MOVE.LLCTBEG,A0ŠStartofLogicalConnectionTable+ŠTST.L‚LCTFHDR(A0)ˆ*2/28/83SCB.Testlink1ŠCRASH.EQ*+1Ž*2/28/83SCB.Crashifnoentries.%ŠMOVE.LLCTFHDR(A0),A5…1stfreeentry*!* Range check on LCT 2/28/83 SCB. ŠCMP.L‚A0,A5,ŠCRASH.LO*+1ŽCrachifthisLCToutofrange ŠMOVE.LA0,D0ŠADD.L‚LCTTSIZ(A0),D0ŠSUB.L‚#LCTESIZ,D0 ŠCMP.L‚D0,A5,ŠCRASH.HI*+1ŽCrashifthisLCToutofrange* End of range check*5ŠMOVE.LLCTNEXT(A5),LCTFHDR(A0)Removefromfreelist!ŠMOVE.LA5,A0ŽEntrystartaddress%ŠLEA„LCTESIZ(A0),A1…Entryendaddress&NWBLL04ƒCLR.W‚(A0)+ŽClearentireentryŠCMP.L‚A0,A1ŽAtendyet?ŠBGT„NWBLL04ŒLoopbackifNO*0ŠMOVE.LNATTCB(A3),LCTLOTCB(A5)SaveTCBaddress+ŠMOVE.WNATNAU(A3),LCTLONAU(A5)NAUandSID0ŠMOVE.LNTSNAME(A4),LCTRMNAM(A5)RemoteNAUname4ŠMOVE.WNTSNAME+4(A4),LCTRMNAM+4(A5)RemoteNAUname*0ŠLEA„NATLCTLK-LCTLULNK(A3),A0StartofLCTchain8NWBLL08ƒMOVE.LLCTLULNK(A0),D0„Isthistheendofchain?ŠBEQ.S‚NWBLL10ŒBranchifYESŠMOVE.LD0,A0ŽNextentry&ŠBRA„NWBLL08ŒBranchtocontinuesearchNWLODSCƒBTSTƒ#LCTCSRCV,LCTCSTA(A5)Isstatus='CONNrecv'd'?ŠBNE.S‚NWLDS30ŒBranchifYES6ŠBTSTƒ#LCTCSDSC,LCTCSTA(A5)Isstatus='DISCONNECT'?ŠBNE„NWLDS40ŒBranchifYES*;*ˆFreeanywaitingbuffers-mayneedthemtosendmessages*,ŠMOVE.LLCTRWTBF(A5),D0„Anybufferswaiting?ŠBEQ.S‚NWLDS06ŒBranchifNO4ŠBCLRƒ#LCTARBFQ,LCTRSTA(A5)Reset'buff-in-q'status*ŠMOVE.LD0,A0ŽReturnbufferstofreeQueueŠCLR.L‚LCTRWTBF(A5)2ŠCLR.W‚LCTMCNT(A5)ˆClearoutstandingmessagecount ŠTR0.PTFRML*'*ˆConnectionisACTIVE--Disconnectit*7NWLDS06ƒMOVEM.LA3/A5,-(A7)‡SaveLCTentrytouselater0ŠMOVE.LNNTBEG,A5ŠStartofNNT-formsgbuilder3ŠMOVE.LNATNNT(A3),A2†SetNNTentryformsgbuilder$ŠBSR„NWMGSSCŒPreparemessageforSSC$ŠBEQ.S‚NWLDS10ŒBranchifgoodreturnŠLEA„NATANYLK-NTSNEXT(A3),A4Pointerto1st'recv-from-any'pb"ŠBSR„NWFREPBŒFreeallparamblocks)ŠCLR.L‚NATANYLK(A3)‡ClearinitialpointerŠMOVE.L(A7)+,A4‹RestoreA4$ŠBRA„NWCN08GocheckremainingLCT'sŠPAGE*-*ˆSubroutinetoCancelanNAU'sLISTENstatus&*ŠSendmessagetoprimaryifsecondary*%*ˆOnentry:A3=Pointerto‚NATentry%*’A4=Pointerto‚NTSparameterblock*’D6=Reasoncodeforcancel**ˆOnexit:‚A3andA4preserved*’D6,D7Destroyed*’A0,A1,A2,A5Destroyed7*’D0=0ifgoodreturn‡D0=errorcodenobufferavail* ŠXDEFƒNWLSTC *v********>*NWLSTC:„{SubroutinetocancelanNAU'slistenstatusandsend#*Œmessagetoprimaryifsecondary.}*2*‹IF'connectwaiting'setinNATentry(NATSCONW)G*NWLSC08:ƒTHEN‚IFsomethinglinkedtothisNAT'slisten/connect-receive*‘queue(NATLCNLK).8*‘THEN‚UnlinktheNTSparameterblockfromNAT'slisten/*—connect-receivequeue.0*—Set'transactioncomplete'inNTSP.B.status.)*—IfNATflagsindicate'listen'inqueue$*—THEN‚SetreturncodeintoNTSP.B.&*WakeuptaskviaNWSIGNALsubroutine.*GOTO‚NWLSC08.8*NWLSC10:ELSE‚{CalledfromSystemServiceControlTask})*Seterror'listennotactive'#NTSRILIS!*($10)intoNTCparameterblock.,*RemoveLCTentry(ifany)fromLCTqueue-$*(LCTLULNK)andputintofreelist.*GOTO‚NWLSC08.9 C*NWLSC14:‰ELSE‚{NothinglinkedtothisNAT'slisten/connect-receive *—queue.}8*—IFSSCTwaiting(bit#NATSCONWsetinNATentrystatus*—THEN‚WakeupSSCT.*—GOTO‚NWLSC20.7*NWLSC20:ƒELSE‚{'connectwaiting'NOTsetinNATentry}9*‘IF'listen-waiting'NOTsetORnotaskattachedtothis*‘NAT9*‘THEN‚Clear'listenwait'and'listenactive'bitinNAT*—entry.1*—Clear'listenactive'bitinallassociatedNNT *—entries.(*—Clearlisten/connectpointerNATLCNLK.*—IFthisissecondarystation4*—THEN‚SendmessagetoSSCTsoitcaninformprimary *station.*NWLSC22:Returnsuccessfully.*‘ELSE‚GOTONWLSC08: *^*********(*ˆAreanyLISTEN'sorCONNECT'swaiting?*7NWLSTC„BTSTƒ#NATSCONW,NATSTAT(A3)Is'Connect'waiting?ŠBNE.S‚NWLSC06ŒBranchifYES0ŠBTSTƒ#NATSLSTW,NATSTAT(A3)Is'Listen'waiting?ŠBEQ„NWLSC20ŒBranchifNO(ŠTST.L‚NATTCB(A3)‰Doestaskstillexist?ŠBEQ.S‚NWLSC20ŒBranchifNO**ˆSendReturnCodestoWaiters,*ˆFreetheLCTentryassociatedwithCONNECT*+NWLSC06ƒMOVE.LLCTBEG,A2ŠStartofLCTtable0NWLSC08ƒMOVE.LNATLCNLK(A3),D0„Doesentryexist?ŠBEQ.S‚NWLSC14ŒBranchifNO%ŠMOVE.LD0,A1ŽParameterblockaddress1ŠMOVE.LNTSNEXT(A1),NATLCNLK(A3)Updatelinkhead3ŠBSETƒ#NTSSTC,NTSSTA(A1)Set'transaction-complete'/ŠBTSTƒ#NATSLSTW,NATSTAT(A3)Isthisa'Listen'?ŠBEQ.S‚NWLSC10ŒBranchifNO&ŠMOVE.BD6,NTSRCOD(A1)…SetReturncode ŠEXG„A1,A4ŽSIGNALwantspbinA4,ŠMOVE.LNATTCB(A3),A0†SIGNALwantsTCBinA0 ŠBSR„NWSIGNALŠEXG„A1,A4ŽReturnpbtoA1#ŠBRA„NWLSC08ŒLoopbackfortherest*8NWLSC10ƒMOVE.B#NTSRILIS,NTCXRCOD(A4)ReturncodetoSSC&ŠMOVE.BNTCRNAU(A1),D6…NetworkAddress!ŠMOVE.BNTCRSID(A1),D7…StationIDŠBSR„NWFLCTGofindLCT%ŠBNE„NWLSC08ŒBranchbackifnotfound?ŠMOVE.LLCTLULNK(A5),LCTLULNK(A0)Removeentryfromactivelist9ŠMOVE.LLCTFHDR(A2),LCTLULNK(A5)Putentryin'free'list+ŠMOVE.LA5,LCTFHDR(A2)…Update'free'header#ŠBRA„NWLSC08ŒLoopbackfortherest*"*ˆWakeupSSCTifCONNECTcancelled*3NWLSC14ƒBCLRƒ#NATSCONW,NATSTAT(A3)IsSSCTwaiting?ŠBEQ.S‚NWLSC20ŒBranchifNOŠMOVE.LNATBEG,A5ŠStartofNNT*ŠMOVE.L#SSCNAU-1,D0‡SSC'sNetworkaddress.ŠMULUƒ#NATENTRY,D0‡*entrysize=entryoffset'ŠLEA„NATENTRY(A5,D0),A0SSC'sNATentryŠMOVE.LNATTCB(A0),A0†SSC'sTCB ŠTR0$.WAKEUP*(*ˆClearListenstatusinallNNTentries*:NWLSC20ƒBCLRƒ#NATSLSTW,NATSTAT(A3)Clear'listen-wait'bit3ŠBCLRƒ#NATSLACT,NATSTAT(A3)Clear'listen-actv'bit.ŠMOVE.LNATNNT(A3),A2†NetworkNameTableentry/ŠBSR„NWCLRLAŒClear'listen-active'inallNNT's*;*„SendmessagetoSSCsothatitcaninformPrimarystation*0ŠCLR.L‚NATLCNLK(A3)‡ClearListen/Connectpointer.ŠTST.B‚NATSID(A3)‰Isthistheprimarystation?ŠBEQ.S‚NWLSC22ŒBranchifYES1ŠMOVE.LNNTBEG,A5ŠSetNNTpointerformsgroutine;ŠMOVE.LNATNNT(A3),A2†SetNNTentrypointerformsgroutine$ŠBSR„NWMGSSCŒPreparemessageforSSC/ŠBNE.S‚NWLSC22ŒIfnot0,thenERROR-nobuffer0ŠMOVE.LMSGLNAU(A1),MSGRNAU(A1)SetRemote=Local(ŠMOVE.LA0,A2ŽBufferaddressforTRAMOVB3ŠBSR„TRAMOVBŒAsktransportleveltogivemsgtoSSCŠCLR.L‚D0‘Successfulreturn NWLSC22ƒRTS* * PATCH AREA ŠXDEFƒPATCH PATCH…DS.Bƒ50ééé: =/*=/*†NTS.SSCT.AF=/*-=/* Chain file to assemble module NTS.SSCT.SA=/*:=/* If no output argument is specified for the listing the*=/* chain file will default to NTS.SSCT.LS=/*=/IFC \1ƒ=ARGNTS.SSCT.LS=/ENDIF=/*%=ASM NTS.SSCT.SA,NTS.SSCT.RO,\1;RZ=60=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.NTS.NTS.EQ=/*ƒ9995.NTS.TR1X.EQ=/*ƒ9995.NTS.NTC.EQ=/*ƒ9995.NTS.SMSG.EQ=/*ƒ9995.NTS.SSCT.EQ=/*}=/*=ENDéééééé8)SSCT†IDNTƒ1,0SystemServiceControlTask(ŠTTL„SSCT.SAŒSystemServiceControlTask*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*B*„PerformsSystemServiceControlfunctionsforNetworkServices‚**Ä*F***********************************************************************)*ˆStartedbyNetworkInitializer‚-‚ININET* *ˆOnEntry:*’D0=StationID*’A0=TaskName*’A1=OperatorDevice*’A3=Session**‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.NTS.NTS.EQ*‰INCLUDE9995.NTS.TR1X.EQ*‰INCLUDE9995.NTS.NTC.EQ*‰INCLUDE9995.NTS.SMSG.EQ*‰INCLUDE9995.NTS.SSCT.EQŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.NTS.NTS.EQŠINCLUDE9995.NTS.TR1X.EQŠINCLUDE9995.NTS.NTC.EQŠINCLUDE9995.NTS.SMSG.EQŠINCLUDE9995.NTS.SSCT.EQŠPAGE*v* SSCT documentation:*C* SSCT acts as a 'bus boy' passing network services system requestsJ*ƒ(e.g.identify,connectetc.)betweenappropriatemodulesofthesystem.C*ƒAsanexampleofhowSSCTworksinconjunctionwithothermodulesK*ƒconsideraprogramonasecondarystationwhoidentifieshimself(desiresE*ƒtobecomeaNetworkAddressableUnit-NAU).‚BeforethetransactionG*ƒcancomplete,informationaboutthenameoftheunitmustpasstotheH*ƒprimarysystem,getenteredintothetablesthere,andaresponsesent*ƒbacktothesecondary.*A* Briefly stated, the passing of information would be as follows:*4*‚*UsertaskcallsNTSSERVwith'identify'request.**…*NTSSERVtrapstoNTSREQ.*>*ˆ*NTSREQbuildspreliminarytablessetsstatusofrequestin7*ŠpendingstateandsendsrequesttoSSCTonsecondary. *ŠNTSID02:B*Š-Set'waitfortransactiontocomplete'bitinNTSP.B.ofuser.!*Š-BuildN: NTentryandNATentry.B*Š-SendmessagetoSSCTonsecondary(messageidentifier='.NTS',*‹sendcode=$81).5*Š-LinkthisNTSP.B.ontoNNTNAT(waitingresponse).#*Š-PointNTSP.B.tonewNATentry.A;JER@Z@bGjEr;z8‚:Š6’JšB¢?ª2*Š-Set#NNTSIPBinNNTSTAT(parameterblockhere).*:*‚*SSCTreadsrequestandsendsitontoSSCTonprimary. *„NTSARTN:*„-Readsmessage.8*„-Classifiesmessageby'.NTS'identifierand$81code.(*„-Moves'.SSC'intomessageidentifier.7*„-SendsmessageasspecialcommandtoSSCTonprimary.*:*‚*SSCTonprimaryreadsrequestandsendsittoNTSSERV. *„SSCARTN:%*„-Readsmessagethatsecondarysent.8*„-Classifiesmessageby'.SSC'identifierand$81code.&*„-IssuesspecialcommandviaNTSSERV.**…*NTSSERVtrapstoNTSREQ.*$*ˆ*NTSREQpassesrequesttoNTCREQ. *ŠNTSR02:=*Š-RecognizesthatthisisanNTCREQcommandbecausethehigh-*‹orderbitinthecommandcodeisset($81).*%*‹*NTCREQupdatestablesonprimary. *NTCIDN8:**-Buildsnewentryinnetworknametable.1*-Sets'transactioncomplete'inSSCT'sNTSP.B.*0*‚*SSCTonprimarysendsresponsetosecondary. *„SSCAR05:2*„-ReturnedtoimmediatelyfollowingNTSSERVcall.%*„-Change$81commandto$91command.-*„-MoveP.B.imageintosendparameterblock.*„-Sendtosecondary.*>*‚*SSCTonsecondaryreadsresponseandsendsitviaNTSSERV. *„SSCARTN:*„-Readmessage.8*„-Classifiesmessageby'.SSC'identifierand$91code.6*„-Movereceivedmessageintospecialparameterblock.*„-SendviaNTSSERV.**…*NTSSERVtrapstoNTSREQ.*$*ˆ*NTSREQpassesrequesttoNTCREQ. *ŠNTSR02:=*Š-RecognizesthatthisisanNTCREQcommandbecausethehigh-*‹orderbitinthecommandcodeisset($91).*=*‹*NTCREQfinishesupdatingtablesonsecondaryandnotifies-*usertaskthathistransactioniscomplete. *NTCIDN9:1*-PutreturncodeintooriginalcallersNTSP.B.!*-IFreturncodeindicateserror*ŽTHEN*‘ReleaseNNTandNATentries.*ŽELSE*‘SaveNATaddressinNNT.*‘SetNNTstatus=active.*‘PointTCBtoNAT.4*-Set'transactioncomplete'intocaller'sNTSP.B.*-Wakeupcaller.**^ŠPAGE ŠSECTION14ŠOPT„PCSŠXREFƒNTSSERV,OUTTERM* ŠXDEFƒSSCT SSCT†MOVE.LA0,D1ŽSavetasknameŠMOVE.LA3,D2ŽSavesession"ŠMOVE.LA1,D3ŽSaveoperatordeviceŠMOVE.LD0,D4ŽSavestationID&ŠERQ.GTSEGGETDPB(PC)†Getdatasegment#ŠBEQ.S‚SSCT2ŽBranchifgoodsegmentŠERRMESG%GETDPB„DC.Lƒ0,0Task,Session(0=Self) ŠDC.Wƒ$2000,0ŒLogical=PhysicalŠDC.Lƒ'DATA',0‹SegmentnameŠDC.LƒDATAENDŒLength**ˆClearDATASegment*CLEAR…CLR.L‚(A0)+ŽClear4bytesŠCMP.L‚A0,A1Žatendyet?ŠBGT„CLEARŽbranchinNOŠRTS*6SSCT2…MOVE.LA0,A6ŽStartofDATAsegment(A6=basereg)#ŠLEA„STACK(A6),A7‡SetStackPointerŠMOVE.LA7,A0ŽClearabovestack'ŠLEA„DATAEND(A6),A1…EndofDATAsegmentŠBSR„CLEARŽClearentiresegment3ŠMOVEM.LD1-D4,TASKN(A6)ƒSaveentryregistervaluesŠPAGE"*ˆInitializeReceiveAreaPointers*-SSCT30„CLR.L‚WAITQHD(A6)ˆClearheadofWaitQŠMOVE.L#NUMRCV-1,D7‡#ENTRIES*ŠLEA„RCVBLK(A6),A0†Parameterblockaddress0SSCT32„MOVE.W#-1,NTSSTA(A0)…Status='pbisfree')ŠLEA„RCVBUF(A0),A1†Messagebufferaddress#ŠMOVE.LA1,NTSSAD(A0)†SaveitinpbŠCLR.L‚RCVNEXT(A0)ˆClearQlink4ŠLEA„RCVBKSZ(A0),A0…Addblocksize-nextpbaddress"ŠDBRAƒD7,SSCT32ŠLoopbackfornext*!ŠBSR„SRTRCVIssue'recv'commands**ˆInitializeSendArea*#ŠMOVE.L#NUMSND-1,D7‡Pointeroffset*ŠLEA„SNDBLK(A6),A0†Parameterblockaddress0SSCT34„MOVE.W#-1,NTSSTA(A0)…Status='pbisfree')ŠLEA„SNDBUF(A0),A1†Messagebufferaddress#ŠMOVE.LA1,NTSSAD(A0)†SaveitinpbŠCLR.L‚SNDNEXT(A0)ˆClearQlink4ŠLEA„SNDBKSZ(A0),A0…Addblocksize-nextpbaddress"ŠDBR; AƒD7,SSCT34ŠLoopbackfornext*5*ˆInitializeSpecialCommandParameterBlockPointers*$ŠMOVE.L#NUMSPEC-1,D7†Pointeroffset+ŠLEA„SPECBLK(A6),A0…Parameterblockaddress0SSCT36„MOVE.W#-1,NTSSTA(A0)…Status='pbisfree' ŠCLR.L‚SPECNEXT(A0)‡ClearQlink5ŠLEA„SPECBKSZ(A0),A0„Addblocksize-nextpbaddress"ŠDBRAƒD7,SSCT36ŠLoopbackfornextŠPAGE&*ˆMainLoop-Lookforsomethingtodo*v:*SSCMAIN:‚IssueTRAP#1,directive-3toscanuserqueue. * SSCM04:?*SSCM06:ƒIFthereisanotherparameterblockonthewaitqueue*‹THEN5*ŽIFtranscationforthisparameterblockiscomplete*ŽTHEN2*‘Removethisparameterblockfromthewaitqueue.**‘IFthiswasaspecialcommand(code<0)*‘THEN*”GOTONTCSPEC*‘ELSE'*”IFthereturncodeindicatesanerror*”THEN-*—GOTOERRORMG‚{EventuallyreturnstoSSCM06}*”ELSE*—IFcommandwas'send'*—THEN'*SSCM10:’Flagparameterblockasfree.*šGOTOSSCM06.*—ELSE'*šGOTOSSCM12{assumeitwasareceive}*ŽELSE6*‘PostallreceivesviaBSRSRTRCV-Thisroutinewill:*‘examineallofthereceiveparameterblocks.‚Ifitfinds<*‘anythatarefree,itwillsetoptiontoreceivefromany,?*‘linktheparameterblockonthereceivelistviaBSRLNKWAITQ0*‘andissuethereceiverequestviaBSRNTSSERV.**‘Wait100ms.*‘GOTOSSCMAIN.*^*/SSCMAINƒMOVE.L#NWTSCN,D0‰ScanUSERQdirectiveŠTRAPƒ#1*/*ˆCheckalltransactionsin'Wait-for-TC'Queue*1ŠLEA„WAITQHD-RCVNEXT(A6),A4Startof'wait'queue0SSCM04„MOVE.LA4,A5ŽSet'previousentry'pointer6SSCM06„MOVE.LRCVNEXT(A5),D0…Anyparamblockswaiting? ŠBEQ„SSCM80Branchifalltested(ŠMOVE.LD0,A4ŽAddressofparameterblock1ŠBTSTƒ#NTSSTC,NTSSTA(A4)Istransactioncomplete?ŠBEQ„SSCM04BranchifNO4ŠMOVE.LRCVNEXT(A4),RCVNEXT(A5)Removefrom'wait'Q'ŠCLR.L‚RCVNEXT(A4)ˆClear'next'pointer3ŠMOVE.LNTSSAD(A4),A3†Bufferaddress‚*1/25/83SCB.#ŠMOVE.BNTSCMD(A4),D0†Checkcommand(ŠBMI„NTCSPECŒBranchif'special'command"ŠTST.B‚NTSRCOD(A4)ˆAnyerrorcode?ŠBNE„ERRORMGŒBranchifYES+ŠCMP.B‚#NTSCSEND,D0‡Isita'SEND'command?)ŠBNE.S‚SSCM12BranchifNO-mustberecv*9*…CommandwasSEND-noerrors-freetheparameterblock*;SSCM10„MOVE.B#-1,NTSSTA(A4)…Flagtheparamblockas'free'#ŠBRA„SSCM06LoopbackfornextinQŠPAGE*ˆMessagereceived--readit**v+*SSCM12:ƒIFcommandwasnotreallyrecieve*‹THEN,*ŽGOTOERRMSG{EventuallyreturnstoSSCM06}*‹ELSE4*SSCM14:†IFfirstbyteofmessage(messageID)=-1*ŽTHEN*‘GOTOERRORMG*ŽELSE4*‘AdvanceA3topointtorelativebyte4ofmessage.'*SSCM16:‰CASEfirst4bytesofmessage*”'.NTS':‚GOTONTSMSG*”'.SSC':‚GOTOSSCMSG$*”OTHERWISE:Abort!-errorcode=3 *‘ENDCASE**^.SSCM12„CMP.B‚#NTSCRECV,D0‡doublecheckcommandŠBEQ.S‚SSCM14BranchifRECVŠERRMESG2SSCM14„MOVE.LNTSSAD(A4),A3†Messagebufferaddress'ŠCMP.B‚#-1,(A3)‹Isitanerrormessage?ŠBEQ„ERRORMGŒBranchifYESŠMOVE.L(A3)+,D0‹GetmessageID-ŠLEA„MSGIDTB(PC),A0…StartofmessageIDtable+ŠLEA„MSGIDZZ(PC),A1…EndƒofmessageIDtable)SSCM16„CMP.L‚(A0),D0ŒDoesIDmatchtable?ŠBEQ.S‚SSCM20BranchifYES%ŠLEA„8(A0),A0‹IncrementtonextentryŠCMP.L‚A0,A1ŽEndoftable?ŠBGT„SSCM16BranchifNOŠERRMESG4SSCM20„MOVE.L4(A0),D0‹Getoffsettomessageroutine)ŠJMP„MSGIDTB(PC,D0)…Gotomessageroutine*"MSGIDTBƒDC.Lƒ'.NTS',NTSMSG-MSGIDTB SSCID…DC.Lƒ'.SSC',SSCMSG-MSGIDTB MSGIDZZƒEQU„*ŠPAGE2*ˆReturnhereifSENDmessagebuffernotavailable*CSSCM50„MOVE.LRCVNEXT(A5),RCVNEXT(A4)Linkbackjustbeforecurrent$ŠMOVE.LA4,RCVNEXT(A5)…Completelink#ŠBRA„SSCM04Continuewithmainloop*$*ˆEndofMainLoop-Preparetowait*1SSCM80„BSR„SRTRCVBesureallreceivesareposted%ŠMOVE.L#100,A0ŒWait100milliseconds ŠERQ.DELAYWŠBRA„SSCMAINŒRestartmainloopŠPAGE+*ˆMessageReceivedfromNTSRequestHandler**ˆA6=Datasegmentpointer2*ˆA5=CurrentparameterblockinMainLoopsearch'*ˆA4=P; arameterblockforRECVrequest*ˆA3=Messageaddress**v!*NTSMSG:ƒIFcommandisnotvalid*‹THEN*ŽAbort!-Codeof4*‹ELSE"*ŽIsolatelowordernibbleofcode*NTSMG04:…CASEnibbleof*‘1:GOTONTSARTNƒ{Identself}*‘2:GOTONTSARTNƒ{Listen}!*‘3:GOTONTSARTNƒ{Cancellisten}*‘4:GOTONTSBRTNƒ{Connect}"*‘5:GOTONTSBRTNƒ{Cancelconnect}*‘6:GOTONTSARTNƒ{Disconnect} *ŽENDCASE*^* Informed by NTSREQ of IDENT, LISTEN or Cancel LISTEN request*+*NTSARTN:‚GetafreebufferviaBSRGETSND@*‹{A1comesbackwithmessagebufferaddress,A2comesbackwith*Œsendparameterblockaddress}*‹IFnofreebufferavailable*‹THENF*SSCM50:†Linkthisreceiveparameterblockbackintothereceivelist!*Žasthecurrentparameterblock.*ŽGOTOSSCM04.*‹ELSE3*ŽMove'.SSC'intofirst4bytesofmessagebuffer.E*NTSAR03:…Movethenext26(NTSP.B.)bytesintothemessagebuffer.*ŽReleasethereceivebuffer"*ŽSendthemessageviaBSRSNDMSG..*Ž{ThissendsthemessagetotheremoteSSCT.}*ŽGOTOSSCM06.*^3NTSARTNƒBSR„GETSNDFindfreebuffertosendmessage$ŠBNE„SSCM50Branchifnoneavailable4ŠMOVE.LSSCID(PC),(A1)+„PutIDinmessagetobesent'ŠMOVE.W#NTCPBSZ/2-1,D0„#wordstomove"ŠMOVE.LA1,A0ŽStartofsendbuffer6NTSAR03ƒMOVE.W(A3)+,(A0)+ˆMovemessagetoSENDbuffer(ŠDBRAƒD0,NTSAR03‰Looptillmessagemoved/ŠMOVE.B#-1,NTSSTA(A4)…Release'receive'buffer-ŠBSR„SNDMSGSendmessagequeuedonnobuffersŠBRA„SSCM06ReturntomainloopŠPAGE*vC* Informed by Another SSC of IDENT, LISTEN or Cancel LISTEN request*;*SSCARTN:‚Getafreeparameterblockforaspecialcommand;*‹viaBSRGETSPEC{A2comesbackwithspecialP.B.address}*‹IFnoP.B.available*‹THEN *ŽGOTOSSCM50*‹ELSE>*SSCAR03:…Movethe26-byteNTCP.B.fromthereceivedmessage#*Žintothespecialparameterblock.*ŽReleasethereceivebuffer.5*ŽCleartheoptionsfieldintheNTCparameterblock.3*SSCAR04:…SendtheparameterblockviaBSRNTSSERV"*ŽCheckthestatusviaBSRSTATCHK-*ŽIFerrorcode'outofbuffers'wasreturned*ŽTHEN!*‘Wait1second(DoneinSTATCHK)*‘GOTOSSCAR04:.8*ŽIFerrorcodeotherthan'outofbuffers'wasreturned*ŽTHEN*‘GOTOSSCPBERR.)*ŽIFcommandwasa$9xcommand(response)*ŽTHEN,*SSCAR06:ˆFreethespecialparemeterblock.*‘GOTOSSCM06.*SSCAR08:…ELSE*‘{Assumeitwasa$8xcommand})*‘Change$8xto$9x(requesttoresponse).*‘SetupA3sospecialP.B.lookslikemessage*‘GOTONTSARTN.*^4SSCARTNƒBSR„GETSPECŒFindfreeparamblkforspeccmd$ŠBNE„SSCM50Branchifnoneavailable'ŠMOVE.W#NTCPBSZ/2-1,D0„#wordstomove&ŠMOVE.LA2,A0ŽStartofparameterblock6SSCAR03ƒMOVE.W(A3)+,(A2)+ˆMovemessagetoparamblock(ŠDBRAƒD0,SSCAR03‰Looptillmessagemoved/ŠMOVE.B#-1,NTSSTA(A4)…Release'receive'buffer1ŠMOVE.LA0,A4ŽSave'speccmd'paramblockaddressŠCLR.B‚NTCOPT(A4)‰Clearoptions)SSCAR04ƒBSR„NTSSERVŒISSUESPECIALCOMMANDŠBSR„STATCHKŒGocheckstatus#ŠBEQ.S‚SSCAR05ŒBranchifstatusOK.'ŠBLO.S‚SSCAR04ŒRetryifoutofbuffers.$ŠBRA„SSCPBERR‹Branchifothererror.*;SSCAR05ƒBTSTƒ#4,NTCCMD(A4)†Wasita$9xcommand(response)?ŠBEQ.S‚SSCAR08ŒBranchifNO:SSCAR06ƒMOVE.B#-1,NTCSTA(A4)…FreethespecialparamblockŠBRA„SSCM06ReturntomainloopBSSCAR08ƒCMP.B‚#NTCCLSTC,NTCCMD(A4)WasitaCancelLISTENcommand?ŠBEQ.S‚SSCAR06ŒBranchifYES*;ŠBSETƒ#4,NTCCMD(A4)†Change$8Xto$9x(requesttoresponse)2ŠMOVE.LA4,A3ŽWanttosendspecparamblockasmsg#ŠBRA„NTSARTNŒGosendmessagetoSSCŠPAGE*v6* Informed by Another SSC of CONNECT or Cancel CONNECT*;*SSCBRTN:‚Getafreeparameterblockforaspecialcommand;*‹viaBSRGETSPEC{A2comesbackwithspecialP.B.address}*‹IFnoP.B.available*‹THEN *ŽGOTOSSCM50*‹ELSEC*SSCBR03:…Movefirst10bytes(thruNTCRESV)fromreceivedmessage*Žtospecialparameterblock.=*ŽMakethereceivedmessageremotenamethelocalnameinthe*Žspecialparameterblock.=*ŽMakethereceivedmessagelocalnametheremotenameinthe*Žspecialparameterblock.*ŽReleasethereceivebuffer.9*ŽCleartheoptionsfieldinthespecialparameterblock.5*SSCBR04:…IssuethespecialcommandviaBSRNTSSERV."*ŽCheckthestatusviaBSRSTATCHK-*ŽIFerrorcode'outofbuffers'wasret< urned*ŽTHEN!*‘Wait1second(DoneinSTATCHK)*‘GOTOSSCBR04:.8*ŽIFerrorcodeotherthan'outofbuffers'wasreturned*ŽTHEN*‘GOTOSSCPBERR.&*ŽIFthiswasa$9xcommand(response)*ŽTHEN,*SSCBR06:ˆFreethespecialparameterblock.*‘GOTOSSCM06.*ŽELSE?*SSCBR08:ˆLinkthisspecialP.B.ontothewaitfortransaction*‘queue.*‘GOTOSSCM06.*^4SSCBRTNƒBSR„GETSPECŒFindfreeparamblkforspeccmd$ŠBNE„SSCM50Branchifnoneavailable'ŠMOVE.W#NTCLNAM/2-1,D0„#wordstomove&ŠMOVE.LA2,A0ŽStartofparameterblock%ŠMOVE.LA3,A1ŽStartofreveivebuffer6SSCBR03ƒMOVE.W(A1)+,(A2)+ˆMovemessagetoparamblock(ŠDBRAƒD0,SSCBR03‰Looptillmessagemoved>ŠMOVE.LNTCRNAM(A3),NTCLNAM(A0)reverseLocalandRemotenamesBŠMOVE.LNTCRNAM+4(A3),NTCLNAM+4(A0)reverseLocalandRemotenames>ŠMOVE.LNTCLNAM(A3),NTCRNAM(A0)reverseLocalandRemotenamesBŠMOVE.LNTCLNAM+4(A3),NTCRNAM+4(A0)reverseLocalandRemotenames/ŠMOVE.B#-1,NTSSTA(A4)…Release'receive'buffer1ŠMOVE.LA0,A4ŽSave'speccmd'paramblockaddressŠCLR.B‚NTCOPT(A4)‰Clearoptions)SSCBR04ƒBSR„NTSSERVŒISSUESPECIALCOMMANDŠBSR„STATCHKŒGocheckstatus#ŠBEQ.S‚SSCBR05ŒBranchifstatusOK.0ŠBLO.S‚SSCBR04ŒRetryon'outofbuffers'status..ŠBRA.S‚SSCPBERR‹Branchonothertypeoferror.*;SSCBR05ƒBTSTƒ#4,NTCCMD(A4)†Wasita$9xcommand(response)?ŠBEQ.S‚SSCBR08ŒBranchifNO:SSCBR06ƒMOVE.B#-1,NTCSTA(A4)…FreethespecialparamblockŠBRA„SSCM06Returntomainloop*4SSCBR08ƒBSR„LKWAITQŒPutparamblockinWait-for-TCQŠBRA„SSCM06ReturntoMainLoopŠPAGE:*v‡ReturnedfromSpecCommandtoCONNECTorCancelCONNECT*=*SPCBRTN:‚IFbit#4setinthecommand{$9xtype=response}*‹THEN1*ŽGOTOSSCM10„{FreeP.B.andreturntomainloop}*‹ELSE2*ŽSetbit#4inP.B.{changeto$9xresponsetype}4*ŽIFtherewasanerrorindicatedinthereturncode*ŽTHEN *‘GOTONTSBRTN{Gosendmessage}*ŽELSE1*‘GOTOSSCM10„{FreeP.B.andreturntomainloop}*^:SPCBRTNƒBSETƒ#4,NTCCMD(A4)†Wasthereturnfromaresponse?/ŠBNE„SSCM10YES-ReturntoMainLoop-freepb#ŠTST.B‚NTCXRCOD(A4)‡Errorreturned?.ŠBEQ„SSCM10NO-ReturntoMainLoop-freepb"ŠBRA„NTSBRTNŒYES-gosendmessageŠPAGE0* Come here to display parameter block on error.6*ƒPutoutmessageonconsoleandthenreturntoSSCM06*%*ƒENTRY:A4pointstoparameterblock *ƒEXIT:‚D0,D1,A0,A1,A2destroyed* FIELD…MACRO$ŠMOVE.BD2,(A2)+‹Spacetonextfield"ŠMOVE.L#\1,D1Pickupbytecount.&ŠBSR„CONVHEXŒConverttohexandstuff.ŠENDM*/SSCPBERR‚MOVE.LA4,A0ŽStartofparameterblock.$ŠLEA„ERRMCD(A6),A1†Startofmessage. ŠMOVE.LA1,A2)ŠMOVE.L#'SSCT',(A2)+†'SSCTP.B.ER'...ŠMOVE.L#'P.B',(A2)+ŠMOVE.L#'.ER',(A2)+ŠMOVE.W#'R',(A2)+$ŠMOVE.LERRSPC(PC),D2†ForspacefillŠFIELD‚4’Cmd,LCC,optns,responseŠFIELD‚2’Status,returncodeŠFIELD‚4’ReservedŠFIELD‚6’Name-localNAU ŠFIELD‚2’Addr,StaID-localNAUŠFIELD‚6’Name-remoteNAU!ŠFIELD‚2’Addr,StaID-remoteNAU ŠBRA.S‚MSGOUT**1*ˆComehereifanerrormessagehasbeenreceived*ˆPutmessageoutonconsole*0ERRORMGƒLEA„ERRMSG(PC),A1†Startoferrormessage"ŠLEA„ERRMSGE(PC),A2…Endofmessage$ŠMOVE.L#ERRMSGSZ,D1‡Sizeofmessage%ŠBSR„OUTTERMŒWritemessageonconsoleŠMOVE.LERRSPC(PC),D2†Blanks$ŠLEA„ERRMCD(A6),A2†Startof2ndlineŠMOVE.LD2,(A2)+‹*%ŠMOVE.LD2,(A2)+‹*PutblanksinlineŠMOVE.LD2,(A2)+‹*%ŠMOVE.LA3,A0ŽStartofmessagerecv'dŠMOVE.L#2,D1Žconvert2bytesŠBSR„CONVHEXŒtoASCII-hexŠMOVE.BD2,(A2)+‹spaceŠMOVE.L#9,D1Žconvert9bytesŠBSR.S‚CONVHEXŒtoASCII-hexŠLEA„1(A0),A0‹skip1byteŠMOVE.BD2,(A2)+‹spaceŠMOVE.L#6,D1Žconvert6bytesŠBSR.S‚CONVHEXŒtoASCII-hexŠMOVE.BD2,(A2)+‹spaceŠMOVE.L#4,D1Žconvert4bytesŠBSR.S‚CONVHEXŒtoASCII-hexŠMOVE.BD2,(A2)+‹spaceŠMOVE.L#10,D1convert10bytesŠBSR.S‚CONVHEXŒtoASCII-hex$MSGOUT„MOVE.B#$0D,(A2)+‰CarrreturnŠMOVE.B#$0A,(A2)ŠLinefeed#ŠLEA„ERRMCD(A6),A1†StartofmessageŠMOVE.LA2,D1ŽENDŠSUB.L‚A1,D1Ž-STARTŠADD.L‚#1,D1= Ž+1=Size ŠBSR„OUTTERM)ŠMOVE.B#-1,NTCSTA(A4)…THROWMESSAGEAWAYŠBRA„SSCM06RETURNTOMAINLOOP*7ERRMSG„DC.Bƒ'SSCTError-Code‚STSBCTREC#RƒTH‹RH'ERRSPC„DC.Bƒ'‡Data' ŠDC.Bƒ$0D,$0AERRMSGEƒEQU„*-1ERRMSGSZ‚EQU„*-ERRMSG* CONVHEXƒMOVE.B(A0),D0ŒnextbyteŠLSR.B‚#4,D0ŽWantbits7-4ŠBSR.S‚CHEXConverttohexŠMOVE.B(A0)+,D0‹samebyteŠAND.B‚#$0F,D0ŒWantbits3-0ŠBSR.S‚CHEXConverttohexŠSUB.W‚#1,D1ŽDone?ŠBNE„CONVHEXŒBranchifNO ŠRTS—RETURN*CHEX†CMP.B‚#9,D0ŽGreaterthan?ŠBLE.S‚CHEX2ŽBranchifNOŠADD.B‚#7,D0ŽchangetoA-F$CHEX2…ADD.B‚#$30,D0ŒConverttoascii&ŠMOVE.BD0,(A2)+‹Putinoutputmessage ŠRTS—RETURNŠPAGE*/* Come here to abort SSCT - unrecoverable error*QUIT†ERQ.ABORT*&*ˆSubroutinetoissueRECEIVERequests*=*ˆChecksallreceiveparameterblockstoseeifanyareready*)SRTRCV„MOVE.L#NUMRCV-1,D7‡Pointeroffset*ŠLEA„RCVBLK(A6),A0†Parameterblockaddress1SRTRV02ƒCMP.B‚#-1,NTSSTA(A0)…Isparamblockfree?ŠBNE.S‚SRTRV10ŒBranchifNO.ŠMOVE.B#NTSCRECV,NTSCMD(A0)PutcommandinpbŠCLR.B‚NTSLCC(A0)‰AnyLCCisok=ŠMOVE.W#1<0andnot'outofbufferstatus'* STATCHKƒEQU„*ŠMOVE.LD0,-(A7) ŠTST.B‚D0$ŠBEQ.S‚STAT999ŒReturnifgoodstatus"ŠCMP.B‚#NTSRNOB,D0ˆOutofbuffers?.ŠBEQ.S‚STATLOYes-returnLOconditioncodes.?* At this point we must have error other than 'out of buffers'.&ŠMOVEƒ#0,CCRSetconditioncodes'HI'.ŠBRA.S‚STAT999ŒGoreturn.0* At this point we have 'out of buffers' status.STATLO„MOVE.LA0,-(A7) ŠMOVE.L#1000,A0‹Delay=1000ms ŠERQ.DELAYŠMOVE.L(A7)+,A0%ŠMOVEƒ#1,CCRSet'LO'conditioncodes*9STAT999ƒMOVEM.L(A7)+,D0ŠDoesnotaffectconditioncodes.ŠRTSŠPAGE*8*ˆSubrouti= netofindafreeSpecCommandparameterblock*-*ˆOnexit:A2=SpecCommandparameterblock**’D0=0SuccessfulƒD0=-1noneavailable*+GETSPECƒMOVE.L#NUMSPEC-1,D7†Pointeroffset+ŠLEA„SPECBLK(A6),A2…Parameterblockaddress1GETSP02ƒCMP.B‚#-1,NTSSTA(A2)…Isparamblockfree?ŠBNE.S‚GETSP10ŒBranchifNOŠCLR.W‚NTSSTA(A2)‰ClearstatusŠCLR.L‚D0‘Successful ŠRTS—RETURN9GETSP10ƒLEA„SPECBKSZ(A2),A2„incrementparamblockaddress'ŠDBRAƒD7,GETSP02‰LoopbacktocheckallŠMOVE.L#-1,D0NOTFound ŠRTS—RETURNŠENDéééééééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.TRABTOU.AIª*J************************************************************************** -ŠTTL„TRABTOU.SA:ˆMOVEBIUDATATOUSERBUFFER*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*A*„TRABTOUMovesfromBIUreceivebufferstouserbuffers.‚Sends‚*9*ˆResponseifneeded.‚SendsaWAKEUPtotheuserwhena†*#*ˆwholeRequestUnitisreceived.**Ä*-*„TRABTOUisaccessedviaaSubroutinecall—**Ä*F***********************************************************************Ä*'*ˆOnEntry:A5=AddressofLCTEntry™**Ä*'*ˆOnExit:A5=AddressofLCTEntry™**Ä**ˆREGISTERS:…01234567ž* *•DUUU¨**•AUƒUUPPƒSž**|ƒ|ƒ|Stack˜**|ƒ|____Preserved”**|________Used™**Ä*F*********************************************************************** ŠSECTION10ŠOPT„PCS* ŠXDEFƒTRABTOU*ŠXREF.SLCTBEGŠXREFƒNWSIGNAL**TRABTOUƒMOVE.LA4,-(A7)‹SaveA4forCaller8TRABTRPT‚BTSTƒ#LCTARWTR,LCTRSTA(A5)"Wait-forRecv"set?ŠBEQ.L‚TRABRETŒ*branchifno3ŠBTSTƒ#LCTARBFQ,LCTRSTA(A5)"Buffers-in-Queue"set?ŠBEQ.L‚TRABRETŒ*branchifno8ŠMOVE.LLCTRWTRV(A5),A4„Addressof1stparamblock->A42ŠBTSTƒ#LCTARPAR,LCTRSTA(A5)"Partial-Receive"set?ŠBEQ.S‚TRAB03*branchifno**ˆWe'reina"Partial-Receive"*,ŠMOVE.LLCTRWTBF(A5),A2„StartofSDLCbufferŠLEA„SDDDAT(A2),A1†Start> ofBIU,ŠBTSTƒ#THB1FS,THB1(A1)ƒIsBIUa1stSegment?ŠBNE.S‚TRAB02*BranchifYesŠBSR„RMVBIUNo,UnlinkthisBIU2ŠBTSTƒ#LCTARBOV,LCTRSTA(A5)IsBuffer-Overrunset?ŠBNE.L‚TRAB12*BranchifYes ŠBRA„TRAB08No,ProcessthisBIU*Ó7Û2$ŠBRA.L‚TRAB12SendNTSBlocktoUser*"*ˆWe'reNotina"Partial-Receive" *ˆGetPhysicalAddressofBuffer*4TRAB03„MOVE.LLCTLOTCB(A5),A0„Putcaller'sTCBinA07ŠBTSTƒ#NTSOTSK,NTSOPT(A4)Isbufferinanother'sspace?ŠBEQ.S‚TRAB04BranchifNO(ŠLEA„NTSTASK(A4),A0…Pointertotaskname ŠTR0$.GETTCBŠBRA.S‚TRAB04Branchiffound;TRAB03AƒMOVE.B#NTSRIBUF,NTSRCOD(A4)ERROR-Invalidbuffer1ŠBSETƒ#NTSSTC,NTSSTA(A4)Settransactioncomplete"ŠBSR„ULKWRCUnlinkNTSparamblock/ŠMOVE.LLCTLOTCB(A5),A0„NeedTCBtosignaltask!ŠBSR„NWSIGNAL‹Sendsignaltotask&ŠBRA„TRABTRPT‹Gobacktolookformore*7TRAB04„TR0$.LOGPHY,NTSSAD(A4),NTSLEN(A4)%ŠBRA.S‚TRAB04AŒBranchifgoodaddressŠNOPŠBRA„TRAB03AŒBranchifERROR1TRAB04AƒMOVE.LD6,LCTRCAD(A5)…Savebufferaddress*%ŠBSR„RMVBIURemovebufferfromuserQ)ŠBTSTƒ#THB1FS,D1‰Isthisthe1stsegment?ŠBEQ„TRAB14*BranchifNO ŠTST.W‚D2‘Checkseq#inmessage$ŠBEQ.S‚TRAB06Branchif0--notest>TRAB05AƒADD.W‚#1,LCTRSEQ(A5)…IncrementReceiveSequenceNumber+ŠBEQ„TRAB05AŒZeroisnotalegalsequence#?TRAB06„MOVE.BLCTLOLCC(A5),NTSLCC(A4)MoveLogicalConnectCode1ŠMOVE.LNTSLEN(A4),LCTRTSZ(A5)CurrentByteCountŠCLR.L‚NTSRCSZ(A4)ˆ*7ŠBSETƒ#LCTARPAR,LCTRSTA(A5)Set"RU-Partially-Received"0ŠTST.B‚D1‘IsthisareceiveforNetworkControl?*ŠBMI.S‚TRAB08BranchifYES-NoRHexists;ŠBTSTƒ#RHB1DFR,RHB1-RHCAT(A1)"Definite-Response-Expected"?ŠBEQ.S‚TRAB06AŒ*BranchifNo+ŠBSETƒ#LCTARRSP,LCTRSTA(A5)Yes,SetStatus2TRAB06AƒADD.L‚#RHSIZ,A1ŠIncrementtoStart-of-DataŠSUB.L‚#RHSIZ,D0Š**,TRAB08„TST.W‚D2‘SequenceNumbertestneeded?ŠBEQ.S‚TRAB08CŒBranchifNO-ŠCMP.W‚LCTRSEQ(A5),D2…SequenceNumbersequal?ŠBEQ.S‚TRAB08CŒ*BranchifYesK***************************************************************************C*ƒIferrorfoundinsequencenumbers--orextraframes--orwrong *¦--orwrongsizerecordsfound*‰THENKilltheLinkK***************************************************************************ŠBLT.S‚TRAB08AŒNo,Duplicated?3ŠMOVE.B#NTSRSEQL,NTSRCOD(A4)ERROR,"Message-Lost"ŠBRA.S‚TRAB08BŒ*@TRAB08AƒMOVE.B#NTSRSEQD,NTSRCOD(A4)ERROR,"Message-Duplicated"1ŠCMP.B‚#1,D2ŽIssequencefromremote=1(reset?)-ŠCRASH.NE*+1ŽKilllinkifnot‚BSR.STRABKILL/ŠCLR.B‚NTSRCOD(A4)ˆYesclearbadstatusinP.B.ŠBRA.S‚TRAB08BK***************************************************************************C*ƒIferrorfoundinsequencenumbers--orextraframes--orwrong *¦--orwrongsizerecordsfound*‰THENKilltheLinkK***************************************************************************ŠXREFƒSBSDLCKL1TRABKILL‚MOVEM.LD0-D2/A0-A1,-(A7)SaveregistersTRABKIL1‚BSR„SBSDLCKL‹KILLLINK)ŠBRA.S‚TRABKILX‹BranchifokŠ2/18/83SCB.1ŠBRA.S‚TRABKIL1‹Branchifnobuffers‚2/18/83SCB.4TRABKILX‚MOVEM.L(A7)+,D0-D2/A0-A1RestoreregistersŠRTSJ**************************************************************************J**************************************************************************=TRAB08BƒMOVE.WD2,LCTRSEQ(A5)…UseSequenceNumberfromHeader**ˆChecksizeofmessage*-TRAB08CƒBTSTƒ#THB1LS,D1‰ISTHISLASTSEGMENT?.ŠBNE.S‚TRAB08DŒBRANCHIFY> ES-NOTESTOFSIZE'ŠMOVE.WDBUFSZ,D7ŠMaxsizeofdatabuff&ŠCMP.W‚SDDBCT(A2),D7†WASMAXRECEIVED?ŠBEQ.S‚TRAB08DŒBranchifYESŠBCLRƒ#0,D0ŽBESURE#ISEVENŠCRASH.T*+14/11/83SCB.ŠBSR„TRABKILL‹KILLTHELINKŠTST.L‚D0‘Besure#in>0ŠBLE.S‚TRAB08CŒBranchifokŠMOVE.W#2,D0ŽSet#to2*%*ˆMoveDatafromBIUtoUser'sBuffer*TRAB08DƒMOVE.LLCTRCAD(A5),A0)ŠMOVE.LLCTRTSZ(A5),D3…CurrentByteCount*ŠMOVE.LD0,D4ŽUse#inbufferas#tomoveŠCMP.L‚D0,D3ŽWhichissmaller?&ŠBGE.S‚TRAB10Branchifbuffersmaller,ŠMOVE.LD3,D4ŽUse#inmsgareaas#tomove TRAB10„SUB.L‚D4,D0Ž#LEFTinBIU,ŠSUB.L‚D4,LCTRTSZ(A5)…#LEFTinmessagearea'ŠADD.L‚D4,NTSRCSZ(A4)…Addto#receivedŠMOVE.LD4,D6ŽWant#longwordsŠLSR.L‚#2,D6Ž#longwordsŠAND.W‚#3,D4Ž#bytes)ŠBRA.S‚TRAB10BŒEnter'msgarea'fillloop+TRAB10AƒMOVE.L(A1)+,(A0)+ˆMoveaLongword+TRAB10BƒDBRAƒD6,TRAB10A‰Looptillallmoved'ŠBRA.S‚TRAB10DŒEnter'finalbytes'loop+TRAB10CƒMOVE.B(A1)+,(A0)+ˆMovefinalbytes+TRAB10DƒDBRAƒD4,TRAB10C‰LooptillallmovedŠTST.L‚D0‘Wasalldatamoved?ŠBEQ.S‚TRAB12BranchifYES9ŠMOVE.B#NTSRMBIG,NTSRCOD(A4)Yes,ERROR,MessageTooBig$ŠBTSTƒ#THB1LS,D1‰"Last-Segment"Set?ŠBNE.S‚TRAB12*BranchifYes4ŠBSETƒ#LCTARBOV,LCTRSTA(A5)No,Set"Buffer-Overrun"*-*ˆBIUisallUsedUp,IsNTSBlockSatisfied?*3TRAB12„MOVE.LA0,LCTRCAD(A5)…CurrentUser'sAddress$ŠBTSTƒ#THB1LS,D1‰"Last-Segment"Set?ŠBEQ.S‚TRAB14*BranchifNo8ŠBCLRƒ#LCTARPAR,LCTRSTA(A5)Yes,Clear"Partial-Receive"4ŠBCLRƒ#LCTARBOV,LCTRSTA(A5)*Clear"Buffer-Overrun"=ŠBSR„ULKWRC‡UnlinkNTSParamBlockfrom"Wait-for-Recv"Chain:ŠBSETƒ#NTSSTC,NTSSTA(A4)Set"Transaction-Complete"inNTS+ŠMOVE.LLCTLOTCB(A5),A0„SendWAKEUPToUser ŠBSR„NWSIGNAL<ŠBCLRƒ#LCTARRSP,LCTRSTA(A5)Test&Clear"Response-Expected"!ŠBEQ.S‚TRAB14*BranchifNotSet)ŠBSR„TRARESPŒBuildaResponseandSenditŠBRA„TRABTRPT‹Returntostart*'*ˆMovetheBIUBuffertotheFreeQueue*TRAB14„MOVE.LA2,A0Ž* ŠTR0.PTFRBFŠBRA„TRABTRPT‹Returntostart-TRABRETƒMOVE.L(A7)+,A4‹RestoreA4forCaller ŠRTS—ReturnŠPAGE ?****************************************************************½*0*ˆSUBROUTINE:‚"RMVBIU"UnlinkoneBIUfromtheˆ**žBuffers-HereChain,If‰**žlastone,RESET**ž"Buffers-in-Queue"Status†**½**ˆENTER:‚A5.L=LCTaddress›**½*!*ˆRETURN:A2.L=AddressofBIU˜*'*A1.L=AddressofRHorDatainBIUŠ* *D0.W=AmountofdatainBIU‘*,*D1.B=THB1fieldofTransmissionHeader…*-*D2.W=THSEQfieldofTransmissionHeader„**½**ˆREGISTERS:„01234567˜**”DR¦* *”A‡RƒPƒS˜**œ|ƒ|ƒ|Stack’**œ|ƒ|____PreservedŽ**œ|________Returned**½*?****************************************************************RMVBIU„MOVE.LD3,-(A7)‹SavethrucallSCB.0ŠMOVE.LLCTRWTBF(A5),A2„Addressof1stBIU->A2ŠCLR.L‚D0‘Clearforshortload9ŠMOVE.LSDDLNK(A2),LCTRWTBF(A5)NextBIU->HeadofQueue$ŠBNE.S‚RMVBIU02‹*BranchifNotLast>ŠBCLRƒ#LCTARBFQ,LCTRSTA(A5)Lastone,Clear"Buffers-in-Queue"0RMVBIU02‚MOVE.BSDDRSP(A2),D3†SDLCresponseSCB.<ŠCMP.B‚#NWCNAU,LCTLONAU(A5)IsNetworkControlthereceiver?ŠBEQ.S‚RMVBIU06‹BranchifYES(ŠLEA„SDDDAT(A2),A1†RH/DataAddress->A1ŠMOVE.BTHB1(A1),D1ˆTHB1->D1 ŠMOVE.WTHSEQ(A1),D2‡THSEQ->D2%ŠADD.L‚#THSIZ,A1ŠStartmovebeyondTH&ŠMOVE.WSDDBCT(A2),D0†ByteCount->D0%ŠSUB.W‚#THSIZ,D0ŠDecrementbytecountŠBRA.S‚RMVRTNSCB.*9RMVBIU06‚MOVE.LA2,A1ŽStartingaddressisstartofbuffer%ŠMOVE.B#THB1NWC,D1ˆUseNWCTHformat*ŠBSETƒ#THB1FS,D1‰Set1stsegmentindicator!ŠBTSTƒ#0,D3ŽIsthisan'I'field?8ŠBNE.S‚RMVBIU08‹Branchifno-mesgcountalreadybumped1ŠBTSTƒ#THB1LS,SDDDAT+THB1(A2)Isitlastsegment?9ŠBNE.S‚RMVBIU08‹Branchifyes-mesgcountalreadybumped3ŠADD.W‚#1,LCTMCNT(A5)…Bumpcompletemessagecounter3RMVBIU08‚BSETƒ#THB1LS,D1‰SetlastsegmentindicatorŠCLR.L‚D2‘NOsequence#'sused ŠMOVE.WSDDBCT(A2),D0†Bytecount&ŠADD? .W‚#SDDDAT,D0‰Addlengthofheader*!RMVRTN„BTSTƒ#0,D3Ž'I'frame?SCB. ŠBNE.S‚RMVRTN5ŒBranchifnoSCB.#ŠBTSTƒ#THB1LS,D1‰Lastsegment?‚SCB.!ŠBEQ.S‚RMVRTN6ŒBranchifno.SCB.5RMVRTN5ƒSUB.W‚#1,LCTMCNT(A5)…DecrementmsgcountSCB..ŠBEQ.S‚RMVRTN6ŒBranchifnomessagesleftSCB./ŠTST.L‚LCTRWTBF(A5)‡Ourlinkbetterbenonzero!"ŠCRASH.EQ*+1ŽCrashsystemifnot.RMVRTN6ƒMOVE.L(A7)+,D3‹SCB. ŠRTS—ReturnŠPAGE?****************************************************************½*3*ˆSUBROUTINE:‚"ULKWRC"UnlinkoneNTSParamBlock…**žFromthe"Wait-for-Recv"‡* *žChain.‚Clear"Wait-for-Recv"‚**žifLastNTSBlockŽ**½**ˆENTER:‚A5.L=LCTaddress›**A4.L=NTSaddress›**½**ˆREGISTERS:„01234567˜**”D¨* *”A‰PPƒS˜* * |ƒ|Stack’** |____PreservedŽ**½*?***************************************************************&ULKWRC„MOVE.LNTSNEXT(A4),LCTRWTRV(A5)$ŠBNE.S‚ULKWRETŒLastNTSParamBlock?6ŠBCLRƒ#LCTARWTR,LCTRSTA(A5)yes,Clear"Wait-for-Recv"ULKWRETƒRTS—ReturnŠPAGE?****************************************************************½***ˆSUBROUTINE:‚"TRARESP"BuildandSendaŽ**Ÿ"Definite-Response"BIU‡**ŸtoitsProperDestination…**½**ˆENTER:‚A5.L=LCTaddress›**A2.L=BIUaddress›**½**ˆREGISTERS:„01234567˜**”DU¦* *”AU…UƒPƒS˜* * |ƒ|Stack’** |____PreservedŽ**½*?***************************************************************,TRARESPƒLEA„SDDDAT(A2),A1†Startofdataarea*2*ˆBuildnewTHandRHtoSENDbuffertooriginator*)ŠCLR.W‚THB1(A1)‹Cleartransmissionheader)ŠMOVE.B#THB1FMT,THB1(A1)‚Setformatcode9ŠBSETƒ#THB1FS,THB1(A1)ƒThisisthe1stsegmentofmessage:ŠBSETƒ#THB1LS,THB1(A1)ƒThisisthelastsegmentofmessage+ŠMOVE.WTHDAF(A1),D0‡Fip-FloptheDAF&OAFŠROL.W‚#8,D0Ž*ŠMOVE.WD0,THDAF(A1)‡*,ŠMOVE.B#RHCATNC,RHCAT(A1)NetworkInitiatedŠCLR.B‚RHB1(A1)ŠCLR.W‚RHB2(A1)-ŠBSETƒ#RHCATRR,RHCAT(A1)Set"Response"field*$*ˆSetrequiredfieldsinSDLCheader*$ŠCLR.W‚SDDSTS(A2)‰Clearerrorstatus3ŠCLR.L‚SDDRTC(A2)‰ClearRetry/Error/Command/Station&ŠCLR.W‚SDDRSP(A2)‰ClearResponsefield$ŠMOVE.W#THSIZ+RHSIZ,D7„Messagesize)ŠMOVE.LA2,A0ŽSendBIUtoitsDestinationŠBSR.L‚SNDBIU* ŠRTS—ReturnééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.TRACTOL.AIª*J************************************************************************** 2‰TTL‡TRACTOL.SA:MoveCONNECTmsgtoLISTENbuffer‰PAGE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*G************************************************************************Å*D*„TRACTOLLisenteredwhenLISTENisissuedandCONNECTiswaiting.**Å*D*„TRACTOLCisenteredwhenCONNECTreceivedandLISTENiswaiting.**Å*B*„Inbothcases,aCONNECTrequestismovedtotheLISTENbufferƒ**Å*G************************************************************************Ä*9*ˆOnEntry:A3=NATentry…A4=Parameterblockaddressƒ**Ä* *ˆOnExit:³**Ä**ˆREGISTERS:…01234567ž* *•DUU‰UUž**•AUUURRURSž* *›|‰|Stack˜**›|__________Used™**Ä*F*********************************************************************** ‰SECTIONƒ10‰OPT‡PCS‰XDEF†TRACTOLL,TRACTOLC*‰XREF.S„NNTBEG,NATBEG,LCTBEG‰XREF†NWLNKPB,NWSIGNAL**ˆEntrywhenCONNECTwaiting*1TRACTOLLMOVE.L„A4,-(A7)ŒSaveparamblockaddress3‰BCLR†#NATSCONW,NATSTAT(A3)BesureCONNECTwaiting‰BEQ.S…TRACL02Branchifnot4‰MOVE.L„NATLCNLK(A3),D0…Ge? t1stCONNparameterblock#‰BNE.S…TRACL06Branchifoneexists7TRACL02‚BSET†#NATSLSTW,NATSTAT(A3)Set'listenwaiting'‰BRA.S…TRACL048TRACL03‚BSET†#NATSCONW,NATSTAT(A3)Set'connectwaiting'2TRACL04‚LEA‡NATLCNLK-NTSNEXT(A3),A01stpbpointer‰BSR‡NWLNKPBFindendofchain'‰CLR.L…NTSNEXT(A4)‰Clear'next'pointer/‰MOVE.L„A4,NTSNEXT(A0)†Addparamblocktochain‰MOVE.L„(A7)+,A4ŒRestoreA4*1TRACL06‚MOVE.L„D0,A2A2=CONNECTparameterblock)‰MOVE.L„A4,A1A1=LISTEN‚parameterblock ‰MOVE.L„NTSNEXT(A2),NATLCNLK(A3))‰BEQ.S…TRACL12BranchifNOmoreinchain+‰BSET†#NATSCONW,NATSTAT(A3)Set'wait'flag$‰BRA.S…TRACL12Branchtofillbuffer**ˆEntrywhenLISTENwaiting*1TRACTOLCMOVE.L„A4,-(A7)ŒSaveparamblockaddressãAì,9TRACL08‚BCLR†#NATSLSTW,NATSTAT(A3)BesureLISTENwaiting‰BEQ.S…TRACL03Branchifnot6‰MOVE.L„NATLCNLK(A3),D0…Get1stLISTENparameterblock"‰BEQ‡TRACL03Branchifnoneexists**‰MOVE.L„A4,A2A2=CONNECTparameterblock)‰MOVE.L„D0,A1A1=LISTEN‚parameterblock ‰MOVE.L„NTSNEXT(A1),NATLCNLK(A3))‰BEQ.S…TRACL12BranchifNOmoreinchain+‰BSET†#NATSLSTW,NATSTAT(A3)Set'wait'flag*$*ˆMoveCONNECTinfotoLISTENbuffer*+TRACL12‚MOVE.L„NATTCB(A3),A0‡Listener'sTCB*‰TR0$.LOGPHY,NTSSAD(A1),#16$‰BRA.S…TRACL14Branchifgoodreturn‰NOP8‰BSET†#NTSSTC,NTSSTA(A1)‚Status='transactioncomplete'7‰MOVE.B„#NTSRIBUF,NTSRCOD(A1)ERROR-Badlistenbuffer$‰MOVE.L„NATTCB(A3),A0‡Listener'sTCB0‰MOVE.L„A1,A4PutListener'spbinA4forsignal ‰BSR‡NWSIGNAL‰MOVE.L„A2,A4PutCONNpbinA4&‰BRA‡TRACL08Branchbacktostartover*#TRACL14‚MOVE.L„D6,A0“Bufferaddress'‰MOVE.L„NATBEG,A5Networkaddresstable/‰MOVE.L„NTCRNAM(A2),LBCNAM(A0)‚CONNECTER'sname3‰MOVE.L„NTCRNAM+4(A2),LBCNAM+4(A0)‚CONNECTER'sname.‰MOVE.L„NTCLNAM(A2),LBTNAM(A0)‚LISTENER'sname2‰MOVE.L„NTCLNAM+4(A2),LBTNAM+4(A0)‚LISTENER'sname4‰BSET†#NTSSTC,NTSSTA(A1)†transaccompleteforLISTEN5‰BSET†#NTSSTC,NTSSTA(A2)†transaccompleteforCONNECT$‰MOVE.L„NATTCB(A3),A0‡LISTENER'sTCB0‰MOVE.L„A1,A4PutListener'spbinA4forSIGNAL ‰BSR‡NWSIGNAL$‰MOVE.L„#SSCNAU-1,D0ˆSSC'saddress-1-‰MULU†#NATESIZ,D0‰*entrysize=entryoffset/‰LEA‡NATENTRY(A5,D0),A0‚SSC'sNATentryaddress‰MOVE.L„NATTCB(A0),A0‡SSC'sTCB+‰MOVE.L„A2,A4PutSSC'spbinA4forSIGNAL ‰BSR‡NWSIGNAL#‰MOVE.L„(A7)+,A4ŒRestororiginalA4‰RTSéŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.TRADTXQ.AIª*J************************************************************************** ,‰TTL‡TRADTXQ.SA:MOVEDATATOTRANSMITQUEUE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*>*„TRADTXQMovesfromuserbuffertoBIUtxmitbuffers.‚Sends…*<*ˆWAKEUPtouserwhenuserbufferisfree.‚Sets"Wait-for-ƒ**ˆResponse"stateifneeded£**Ä*-*„TRADTXQisaccessedviaaSubroutinecall—**Ä*F***********************************************************************Ä*'*ˆOnEntry:A5=AddressofLCTEntry™**Ä*'*ˆOnExit:A5=AddressofLCTEntry™**Ä**ˆREGISTERS:…01234567ž* *•DUUª**•AUUUUPPƒSž**|ƒ|ƒ|Stack˜**|ƒ|____Preserved”**|________Used™**Ä*F*********************************************************************** ‰SECTIONƒ10‰OPT‡PCS*‰XDEF†TRADTXQ,SNDBIU*@ ‰XREF†TRAMOVB,NWSIGNAL‰XREF.S„LCTBEG,DBUFSZ**v *TRADTXQ:K*TRADTRPT:‚IFwearenotwaitingforxmitonthisLCTorwearewaitingfor*‹buffersonthisLCT*‹THEN"*ŽReturntocallerviaBRATRADRET@*‹Pickup1stNTSP.B.on'waitforxmitqueue'andthecountof*‹buffersstillneeded.*‹IFthisLCTisforNWC*‹THEN*ŽGOTOTRADNWCT.*^*TRADTXQ‚MOVE.L„A4,-(A7)ŒSaveA4forCaller.TRADTRPTMOVE.W„LCTTSTA(A5),D0†Transmitstatus'‰BTST†#LCTATWTX,D0ˆ"Wait-forXmit"set?‰BEQ.L…TRADRET*branchifno*‰BTST†#LCTATWTB,D0ˆ"Wait-for-Buffers"set?‰BNE.L…TRADRET*branchifyes8‰MOVE.L„LCTTWTXM(A5),A4…Addressof1stparamblock->A47‰MOVE.W„LCTTBCNT(A5),D1†#ofbuffersstillneeded->D1,‰BTST†#LCTCSNWC,LCTCSTA(A5)IsthisforNWC?‰BNE‡TRADNWCBranchifYES**v*‹{ThisLCTisnotforNWC1*‹IF'partialtransmit'isindicatedforthisLCT*‹THEN *ŽGOTOTRAD04*‹ELSE.*ŽIF'responseexpected'indicatedinthisLCT*ŽTHEN#*‘ReturntocallerviaBRATRADRET.ôHý@D E8:%D-@5 0*ŽELSE{'responseexpected'notsetinthisLCT}*‘IFinvalidbufferaddress*‘THEN>*TRAD02A:‹Set'invalidbufferaddress'(code=9)intoNTSP.B.(*”Set'transactioncomplete'inNTSP.B.*”GOTOTRAD24.*‘{Bufferaddressok}(*‘SavebufferaddressinLCTTCADofLCT.*3‰BTST†#LCTATPAR,LCTTSTA(A5)"Partial-Transmit"set?‰BNE.S…TRAD04Ž*branchifYES+‰BTST†#LCTATRPE,D0ˆ"Response-expected"set?‰BNE.L…TRADRET*branchifyes* *ˆGetPhysicalAddressofBuffer*.‰MOVE.L„LCTLOTCB(A5),A0…Putcaller'sTCBinA07‰BTST†#NTSOTSK,NTSOPT(A4)‚Isbufferinanother'sspace?‰BEQ.S…TRAD03ŽBranchifNO(‰LEA‡NTSTASK(A4),A0†Pointertotaskname ‰TR0$.GETTCB‰BRA.S…TRAD03ŽBranchiffound;TRAD02A‚MOVE.B„#NTSRIBUF,NTSRCOD(A4)‚ERROR-Invalidbuffer1‰BSET†#NTSSTC,NTSSTA(A4)‚Settransactioncomplete‰BRA‡TRAD24ŽGotosignaltask*7TRAD03ƒTR0$.LOGPHY,NTSSAD(A4),NTSLEN(A4)%‰BRA.S…TRAD03ABranchifgoodaddress‰NOP‰BRA‡TRAD02ABranchifERROR1TRAD03A‚MOVE.L„D6,LCTTCAD(A5)†Savebufferaddress**v<*‹CalculatehowmanybuffersthisNTSparameterblockneeds.@*TRAD04:ƒRequestthisnumberofbuffersfrombuffermanagement.!*‹IFnobufferscouldbesupplied*‹THEN(*TRAD05:†Set'waitforbuffers'inLCT.@*ŽLinkthisLCTintothe'waitforbuffersqueue'viaBSRLNKWBC*ŽRETURNtothecaller*‹ELSE8*ŽIFsomeofthebuffers(butnotall)couldbesupplied*ŽTHEN**TRAD06:‰Set'waitingonbuffers'inLCT.,*Ž{someorallofthebuffersweresupplied}=*ŽUpdatethecountofbuffersstillneededinLCT(LCTTBCNT).**^*‰CLR.L…D0’BIUsiz->D0‰MOVE.W„DBUFSZ,D0‹*$100‚(256)%‰SUB.W…#THSIZ,D0‹*sub$6=$FAƒ(250)‰MOVE.L„D0,D1*$FAƒ(250)%‰ADD.W…#RHSIZ,D1‹*add$4=$FE(254),‰ADD.L…NTSLEN(A4),D1‡*lengthofuserbuffer‰SUB.L…#1,D1* ‰DIVS†D0,D1**(*ˆRequestBuffersfromBufferManagement*?TRAD04ƒMOVE.W„D1,LCTTBCNT(A5)…AskBufferManagementforBuffers ‰TR0.GTFRML#‰BEQ.S…TRAD08ŽAllBuffersSupplied?(‰BMI.S…TRAD06ŽNo,SomeBuffersSupplied?FTRAD05ƒBSET†#LCTATWTB,LCTTSTA(A5)NoneSupplied,Set"Wait-for-Buffer"3‰BSR‡LNKWBC‹LinkLCTEntryinWait-for-BufferQueue&‰MOVE.L„(A7)+,A4‚RestoreA4forCaller‰RTS‡ReturnfromSubroutineGTRAD06ƒBSET†#LCTATWTB,LCTTSTA(A5)SomeSupplied,Set"Wait-for-Buffers"DTRAD08ƒSUB.W…D1,LCTTBCNT(A5)…CalculateHowManyBuffersStillNeeded**v:*TRAD08A:‚Setupregisterstobuildthistransmitbuffer.E*‹Beginbuildingtransmissionheaderforbuffer-transmissionheader*‹consistsofthefollowing:*Žoffset‰contents*Ž00.B‹$20normal'I'frame *Ž01.B‹$00*Ž02.B‹$rrremoteNAU*Ž03.B‹$lllocalNAU*Ž04.W‹$0000sequencenumber*^*)‰MOVE.L„A0,A2SaveaddressofSDLCbuffer'TRAD08A‚LEA‡SDDDAT(A2),A1‡BIUaddr->A1‰MOVE.L„A1,A0BIUaddr->@ A0‰CLR.L…D0’BIUsiz->D0‰MOVE.W„DBUFSZ,D0‹**&*ˆBuildTransmissionHeaderforBuffer*TRAD10ƒMOVE.B„#THB1FMT,THB1(A1)‰CLR.B…THB2(A1)‰MOVE.B„LCTRMNAU(A5),THDAF(A1)‰MOVE.B„LCTLONAU(A5),THOAF(A1)‰CLR.W…THSEQ(A1)*‰MOVE.W„#THSIZ,D7*#ofBytestoTransmit*6*ˆBuildRequest/ResponseHeaderif1storonlySegment*v**‹IF'partialtransmit'issetinthisLCT*‹THEN-*ŽGOTOTRAD14-completetransmissionheader.*‹ELSE**ŽSet1stsegmentindicatorinNWCheader.2*TRAD11:†UpdatenextsendsequencenumberinLCT.B*ŽInitializetheLCTwiththesizeofthistransmission(LCTTTSZ).+*ŽIndicate'partialtransmit'forthisLCT.:*ŽSet'applicationinitiated'inreq/respheadercategory."*ŽClearremainingresponseheader.0*ŽIFdefiniteresponsewasrequestedinNTSP.B.*ŽTHEN!*‘Set'responseexpected'inLCT..*ŽHeaderatthispointwillappearasfollows:**Žoffset‰contents$*Ž00.B‹$28normal'I'frame/1stseg. *Ž01.B‹$00*Ž02.B‹$rrremoteNAU*Ž03.B‹$lllocalNAU**Ž04.W‹$0000sequencenumber *Ž06.B‹$03applicationtask#*Ž07.B‹$00$80fordef-response-req *Ž08.W‹$0000**^*3‰BTST†#LCTATPAR,LCTTSTA(A5)‚"Partial-Transmit"set?‰BNE.S…TRAD14Ž*branchifset,‰BSET.B„#THB1FS,THB1(A1)„No,Set1st-Segment2TRAD11ƒADD.W…#1,LCTTSEQ(A5)†UpdateSequenceNumber*‰BEQ‡TRAD11ŽZeroisnotalegalsequence#>‰MOVE.L„NTSLEN(A4),LCTTTSZ(A5)‚InitializeTemp.Size&Address2‰BSET†#LCTATPAR,LCTTSTA(A5)‚Set"Partial-Transmit"*9‰MOVE.B„#RHCATAP,RHCAT(A1)‚Indicateapplicationrequested‰CLR.B…RHB1(A1)‰CLR.W…RHB2(A1):‰BTST†#NTSORSP,NTSOPT(A4)"Response-Requested"Optionset?‰BEQ.S…TRAD12„*Branchifno@‰BSET†#RHB1DFR,RHB1(A1)ƒ*Yes,Set"Definite-Response-Requested"7‰BSET†#LCTATRPE,LCTTSTA(A5)**Set"Response-Expected"*TRAD12ƒADD.L…#RHSIZ,A0‹AccountforRHsize‰SUB.L…#RHSIZ,D0‹*)‰ADD.W…#RHSIZ,D7‹*#ofBytestoTransmit**ˆCompleteTransmissionHeader*v+*TRAD14:ƒPlugsequencenumberintoheader.,*‹IFthisisthelastsegmentofthemessage*‹THEN)*ŽSetthelastsegmentbitintheheader..*ŽClearthe'partialtransmit'bitintheLCT.*‹Headerappearsasfollows:**Žoffset‰contents$*Ž00.B‹$28normal'I'frame/1stseg.*¯$2Cforlastseg. *Ž01.B‹$00*Ž02.B‹$rrremoteNAU*Ž03.B‹$lllocalNAU**Ž04.W‹$nnnnsequencenumber *Ž06.B‹$03applicationtask#*Ž07.B‹$00$80fordef-response-req *Ž08.W‹$0000*^*.TRAD14ƒMOVE.W„LCTTSEQ(A5),THSEQ(A1)‚Sequence#$‰ADD.L…#THSIZ,A0‹AccountforThsize‰SUB.L…#THSIZ,D0‹*/‰CMP.L…LCTTTSZ(A5),D0†IsthistheLastSegment?‰BLT.S…TRAD15Ž*BranchifNo.‰BSET†#THB1LS,THB1(A1)„Yes,set"Last-Segment"4‰MOVE.L„LCTTTSZ(A5),D0†*ActualSegmentLength->D06‰BCLR†#LCTATPAR,LCTTSTA(A5)*Clear"Partial-Transmit"*0*ˆMoveDatafromUsersBuffertoTransmitBuffer*vB*TRAD15:ƒMovedatafromtheuser'sbuffertothetransmitbuffer.@*‹Updatethe'movefrom'bufferaddressandremainingbytecount *‹intheLCT.*‹IFthisisthelastbuffer*‹THEN*ŽGOTOTRAD20.*‹ELSE"*ŽSendthisbufferviaBSRSNDBIU.*ŽIFthisLCTisforNWC*ŽTHEN*‘GOTOTRADN20*ŽELSE{notforNWC}*‘GOTOTRAD08A.**^*+TRAD15ƒADD.W…D0,D7*#ofBytestoTransmitTRAD16ƒMOVE.L„LCTTCAD(A5),A1†*‰MOVE.L„D0,D1*!‰LSR.L…#2,D1#Longwordstomove ‰MOVE.L„D0,D2‰AND.W…#3,D2#Bytestomove%‰BRA.S…TRAD18AEnter'datamove'loop2TRAD18ƒMOVE.L„(A1)+,(A0)+‰*Movedata(longwords)TRAD18A‚DBRA†D1,TRAD18%‰BRA.S…TRAD19AEnter'datamove'loop-TRAD19ƒMOVE.B„(A1)+,(A0)+‰*Movedata(bytes)TRAD19A‚DBRA†D2,TRAD19*=‰ADD.L…D0,LCTTCAD(A5)†UpdataTempBufferAddress&ByteCount‰SUB.L…D0,LCTTTSZ(A5)†*‰TST.L…(A2)Lastbuffer?‰BEQ.S…TRAD20ŽBranchifYES1‰MOVE.L„(A2),-(A7)ŠNextBuffer'sAddress->Stack*‰BSR.L…SNDBIUŽSendthisBIUtoDestination*‰MOVE.L„(A7)+,A2ŒNextBufferAddress->A2,‰BTST†#LCTCSNWC,LCTCSTA(A5)IsthisforNWC?‰BEQ‡TRAD08ABranchifNO#‰BRA‡TRADN20BranchtoNWCcontinue*0*ˆNoMoreBufferstoFill,Let'sCleanUp&ExitA *v6*TRAD20:ƒIF'waitforbuffers'indicatedforthisLCT*‹THEN?*ŽLinkthisLCTontothe'waitforbufferqueue'viaBSRLNKWBC=*TRAD40:†SendthisbuffertoitsdestinationviaBSRSNDBIU.*‹ELSE'*TRAD22:†Set'dataqueued'inNTSP.B.**TRAD24:†Clear'partialtransmit'inLCT.3*ŽWakeupapplicationtaskassociatedwiththisLCT.6*ŽUnlinkthisNTSP.B.fromthe'waitforxmit'queue.)*ŽIFthiswasthelastP.B.onthatqueue*ŽTHEN+*‘Clearthe'waitforxmit'bitintheLCT.0*ŽIFtheresponseexpectedbitissetintheLCT*ŽTHEN<*‘LinkthisNTSP.B.intothe'waitresponsequeue'forLCT.*‘GOTOTRAD40.*ŽELSE(*‘Set'transactioncomplete'inNTSP.B.!*‘SendthebufferviaBSRSNDBIU.*‘GOTOTRADTRPT.*^*9TRAD20ƒBTST†#LCTATWTB,LCTTSTA(A5)"Wait-for-Buffers"set?‰BEQ.S…TRAD22Ž*BranchifNo8‰BSR‡LNKWBC†Yes,LinkLCTEntryinWait-for-BufferQueue‰BRA.S…TRAD40„Return1TRAD22ƒBSET†#NTSSBFF,NTSSTA(A4)‚Set"Data-Queued":TRAD24ƒBCLR†#LCTATPAR,LCTTSTA(A5)Clear"Partial-Transmit"-‰MOVE.L„LCTLOTCB(A5),A0…SendaWAKEUPToTask ‰BSR‡NWSIGNAL5‰BCLR†#LCTATWTX,LCTTSTA(A5)Clear"Wait-for-Transmit":‰MOVE.L„NTSNEXT(A4),LCTTWTXM(A5)„LinkNextNTSParamBlock‰BEQ.S…TRAD26ŽLastinChain?7‰BSET†#LCTATWTX,LCTTSTA(A5)No,Set"Wait-for-Transmit":TRAD26ƒBTST†#LCTATRPE,LCTTSTA(A5)"Response-Expected"set?‰BEQ.S…TRAD28Ž*BranchifNo8‰BSR‡LNKWRC†Yes,SaveNTSAddressinWait-ResponseChain ‰BRA.S…TRAD40=TRAD28ƒBSET†#NTSSTC,NTSSTA(A4)‚No,Set"Transaction-Complete"‰BSR‡SNDBIUŽSendlastbuffer‰BRA.L…TRADTRPTŒ*"TRAD40ƒBSR‡SNDBIUŽSendlastbuffer-TRADRET‚MOVE.L„(A7)+,A4‚RestoreA4forCaller‰RTS‡ReturnfromSubroutine‰PAGE*+*ˆHandleMessageMovesforNetworkServices*8TRADNWC‚BTST†#LCTATPAR,LCTTSTA(A5)‰Partialtransmitset?‰BNE.S…TRADN04BranchifYES+‰BTST†#LCTATRPE,D0ˆ"Response-expected"set?‰BNE‡TRADRET*branchifyes-‰MOVE.L„NTSSAD(A4),LCTTCAD(A5)ˆBufferaddress#‰MOVE.L„NTSLEN(A4),LCTTTSZ(A5)ˆSize,‰ADD.L…#4,LCTTCAD(A5)Skipbufflinkaddress,‰SUB.L…#4,LCTTTSZ(A5)Skipbufflinkaddress*;*ˆCalculatehowmanybuffersthisNWCparameterblockneeds*&‰CLR.L…D0’Clearforbuff#calculation ‰MOVE.W„DBUFSZ,D0‹Sizeofbuffer"‰SUB.W…#THNSIZ,D0ŠSubtractTHSize‰MOVE.L„D0,D1*‰ADD.L…NTSLEN(A4),D1‡+length+‰SUB.L…#SDDDAT+THNSIZ+1,D1ƒ-Sizeofheader‰DIVS†D0,D1#BUFFERS‰BNE.S…TRADN04Branchifnot0 ‰MOVE.L„#1,D1Mustbeatleast1*(*ˆRequestbuffersfrombuffermanagement*8TRADN04‚MOVE.W„D1,LCTTBCNT(A5)…Askbuffmgmtforbuffers ‰TR0.GTFRML,‰BEQ.S…TRADN08ƒBranch-allbufferssupplied(‰BGT‡TRAD05„Branch-N0bufferssupplied8‰BSET†#LCTATWTB,LCTTSTA(A5)‚Somebuffs-set'wait'flag*%TRADN08‚MOVE.L„A0,A2…SaveBIUaddress-‰SUB.W…D1,LCTTBCNT(A5)…#Buffersstillneeded**ˆSaveControlInformation*-‰BTST†#LCTATPAR,LCTTSTA(A5)‰Partialxmitset?‰BNE.S…TRADN20BranchifYES*‰MOVE.L„NTSSAD(A4),A1‡NWC'sbufferaddress,‰MOVE.B„SDDCMD(A1),LCTLOCCD(A5)Savecommand2‰CLR.B…LCTRMSID(A5)ˆClearremotesidforsecondary0‰TST.B…LCTLOSID(A5)ˆIsthistheprimarystation?‰BNE.S…TRADN09BranchifNO5‰MOVE.B„SDDSEC(A1),LCTRMSID(A5)‚Setsecondarystation'TRADN09‚CLR.W…LCTTTH(A5)ŠclearTHfield,‰CMP.B…#SDDCI,SDDCMD(A1)ƒIsthisanIframe?‰BNE.S…TRADN10BranchifNO#‰MOVE.W„SDDDAT(A1),D1‡GetTHheader1‰AND.W…#$F3FF,D1‹Clear1standlastsegmentflags!‰MOVE.W„D1,LCTTTH(A5)‡SaveinLCT**‡Determine#bytestomove*2TRADN10‚MOVE.L„LCTTTSZ(A5),D0†NWC'srequestedsize*‰LEA‡4(A2),A0ŒIncrementaddresstomoveto‰MOVE.L„D0,D7*#‰SUB.L…#SDDDAT-4,D7ˆ#togotoBCNT‰BGT.S…TRADN12Branchif>1‰CLR.L…D7’BCNTmaybezero)TRADN12‚MOVE.B„LCTTTH(A5),D1‡GetTHfield$‰BSET†#THB1FS,D1ŠSet1stsementflag&TRADN14‚CMP.W…DBUFSZ,D7‹Issize>max?‰BHI.S…TRADN16BranchifNO&‰BSET†#THB1LS,D1ŠSetlastsegmentflag)‰MOVE.B„D1,SDDDAT(A1)‡SaveTHinoriginal‰BRA‡TRAD16ŽGotomovedata5TRADN16‚BSET†#LCTATPAR,LCTTSTA(A5)Set'partialxmA it' ‰CLR.L…D7‰MOVE.W„DBUFSZ,D7‹Maxdatasize ‰MOVE.L„D7,D0!‰ADD.L…#SDDDAT-4,D0ˆMaxmovesize)‰MOVE.B„D1,SDDDAT(A1)‡SaveTHinoriginal‰BRA‡TRAD16ŽGotomovedata*'*ˆContinuationofsend--fillnextBIU*2TRADN20‚MOVE.B„LCTLOCCD(A5),SDDCMD(A2)…Setcommand'‰LEA‡SDDDAT(A2),A0‡Startofdatabuffer ‰CLR.L…D0!‰MOVE.W„DBUFSZ,D0‹#Bytestomove‰CLR.L…D7’#BytesinBCNT‰CLR.W…SDDSTS(A2)ŠClearstatus ‰CLR.B…SDDRSP(A2)ŠClearresponse**ˆAttachTHtothissegment*‰MOVE.W„LCTTTH(A5),D1‡THfield‰BEQ.S…TRADN22Branchifnone‰MOVE.W„D1,(A0)+ŒSaveinbuffer&‰ADD.L…#2,D7Increment#bytesinBCNT&‰SUB.L…#2,D0Decrement#bytestomove1TRADN22‚CMP.L…LCTTTSZ(A5),D0†Isthislastsegment‰BLT‡TRAD15ŽBranchifNO!‰MOVE.L„LCTTTSZ(A5),D0†Resetsize,‰BSET†#THB1LS,-2(A0)†Set'lastsegment'flag ‰CLR.B…SDDRSP(A2)ŠClearresponse‰BRA‡TRAD15ŽGotomovedata‰PAGE?****************************************************************½**½*6*ˆSUBROUTINE:‚"LNKWRC"LinkaNTSParamBlocktothe‚**žWait-for-ResponseChainˆ**½**ˆENTER:‚A5.L=LCTaddress›*&*A4.L=NTSParameterBlockAddress‹**½**½**ˆREGISTERS:…01234567—**•DU¥* *•A‡UPPƒS—**|ƒ|ƒ|Stack‘**|ƒ|____Preserved**|________Used’**½*?***************************************************************0LNKWRCƒLEA‡LCTTWTRP-NTSNEXT(A5),A3ƒAddress->A30‰CLR.L…NTSNEXT(A4)…ClearLinkinNTSParamBlock5LNKWRC02MOVE.L„NTSNEXT(A3),D0NextNTSADDRESS->D0‰BEQ.S…LNKWRC04‚EndofChain?#‰MOVE.L„D0,A3…No,KeepFollowingIt‰BRA.S…LNKWRC02‚*JLNKWRC04MOVE.L„A4,NTSNEXT(A3)Yes,LinkCurrentNTSBlocktoEndofChain ‰RTS‡Return‰PAGE?****************************************************************½**½*1*ˆSUBROUTINE:‚"LNKWBC"LinkanLCTEntrytothe‡**žWait-for-BufferQueueŠ**½**ˆENTER:‚A5.L=LCTaddress›**½**½**ˆREGISTERS:…01234567—**•DU¥* *•A‡UƒPƒS—**|ƒ|ƒ|Stack‘**|ƒ|____Preserved**|________Used’**½*?***************************************************************6LNKWBCƒMOVE.L„LCTBEG,A3ˆLCTHeaderBlockAddress->A3+‰CLR.L…LCTBFLNK(A5)…ClearLinkinLCTBlock:‰LEA‡LCTBHDR-LCTBFLNK(A3),A3HeadofWait-for-Buffer->A36LNKWBC02MOVE.L„LCTBFLNK(A3),D0NextLCTAddress->D0‰BEQ.S…LNKWBC04‚EndofChain?"‰MOVE.L„D0,A3…No,FollowtheChain‰BRA.S…LNKWBC02‚*KLNKWBC04MOVE.L„A5,LCTBFLNK(A3)Yes,LinkCurrentLCTBlocktoEndofChain ‰RTS‡Return‰PAGE?****************************************************************½*1*ˆSUBROUTINE:‚"SNDBIU"SendaBIUBuffertoits‡*!*žDestination(LocalorRemote)‚**½**ˆENTER:‚A5.L=LCTAddress›**A2.L=BIUBufferAddress”**½**ˆREGISTERS:…01234567—**•DU¥* *•A…UUƒPƒS—**|ƒ|ƒ|Stack‘**|ƒ|____Preserved**|________Used’**½*?***************************************************************(SNDBIUƒMOVE.W„D7,SDDBCT(A2)‡#DATAbytes4‰BTST†#LCTCSNWC,LCTCSTA(A5)IsthisNetworkControl?‰BNE.S…SNDBIU1BranchifYES0‰MOVE.B„#SDDCI,SDDCMD(A2)ƒ*SDLCIFieldCommand‰CLR.W…SDDSTS(A2)ŠClearstatus ‰CLR.B…SDDRSP(A2)ŠClearresponse7SNDBIU1‚MOVE.B„LCTRMSID(A5),SDDSEC(A2)*SDLCStation#0‰MOVE.B„LCTLOSID(A5),D7…LocalStation=Primary?‰BEQ.S…SNDBIU2Branchifyes&‰MOVE.B„D7,SDDSEC(A2)‡*SDLCStation#/SNDBIU2‚CMP.B…LCTRMSID(A5),D7…*Local=Remote?‰BNE.S…SNDBIU4*BranchifNo&‰MOVE.L„A5,-(A7)ŒSaveA5-LCTaddress/‰BSR‡TRAMOVBYes,TreatBIUasifjustreceived$‰MOVE.L„(A7)+,A5ŒRestoreLCTaddress‰RTS›*3SNDBIU4‚MOVE.L„A2,A0PTXMQwantsbuffaddressinA0,‰TR0.PTXMQ•LinkBIUtoSDLC'sTransmitQueue!‰BNE.S…SNDBIUXBranchifrejected‰RTSSNDBIUX‚TR0$.KILLERéB éééééŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.TRAMOVB.AIª*J************************************************************************** +ŠTTL„TRAMOVB.SA:ˆROUTEBIU'sTODESTINATION*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*=*„TRAMOVBRoutesBIU'stotheapproriateLogicalConnection‡**Ä*-*„TRAMOVBisaccessedviaaSubroutineCall—**Ä*F***********************************************************************Ä**ˆOnEntry:A2=BIUaddress¢**’D7=Originator'sStationID*Ä* *ˆOnExit:³**Ä**ˆREGISTERS:…01234567ž* *•DUU‹Už**•APPPPƒPƒSž* *¥|Stack˜**Ä**Ä*F*********************************************************************** ŠSECTION10ŠOPT„PCS* ŠXDEFƒTRAMOVB*&ŠXREFƒTRABTOU,TRADTXQ,NWLNKBQ,NWSIGNALŠXREF.SNNTBEG,NATBEG**ˆCheckforvalidbuffer*:TRAMOVBƒMOVEM.LA0-A3/A5,-(A7)„Saveregisters‚2/10/83SCB.%ŠTST.W‚SDDBCT(A2)‰IsByteCountZero?ŠBEQ„TRASPEC1‹*BranchifYes#ŠTST.W‚SDDSTS(A2)‰ErrorFieldZero?ŠBNE„TRASPEC1‹*BranchifNO**ˆCalculateNATTableEntry*;TRAMB02ƒLEA„SDDDAT(A2),A1†TransmissionHeaderAddress->A1,ŠTST.B‚THB1(A1)‹CheckTHformat-isitNWC?ŠBMI„TRAMBNW1‹BranchifYES ŠCLR.L‚D02ŠMOVE.BTHDAF(A1),D0‡Destination'sNetworkAddressŠSUB.L‚#1,D0ŽEntry#=NA-1"ŠMULUƒ#NATESIZ,D0ˆNATEntryoffset$ŠMOVE.LNATBEG,A5ŠStartofNATtable)ŠLEA„NATENTRY(A5,D0),A3NATEntryaddress%ŠTST.L‚NATTCB(A3)‰HasNAUterminated?ŠBEQ.S‚TRAMB03ŒBranchifYES0ŠBTSTƒ#NATSACT,NATSTAT(A3)Isthisentryactive?ŠBNE.S‚TRAMB04ŒBranchifYES1ŠBTSTƒ#NATSDISC,NATSTAT(A3)HasNAUdisconnected?-ŠBEQ„TRASPEC2‹BranchifNO-can'tdeliverit*&*ˆDiscardBIU'sfordisconnectedNAU's*8TRAMB03ƒMOVE.LA2,A0ŽPutbufferaddressinA0forPTFRBFŠTR0.PTFRBFFree‹thebuffer"ŠBRA.S‚TRAMB14ŒRETURNƒ2/10/83SCB.*=FF:N;V7^ ;*ˆFindMatchingLCTEntry(DAF,OAF,StationIDmustmatch)*8TRAMB04ƒMOVE.BTHDAF(A1),D0‡Destination=LocalNetAddr%ŠLSL.W‚#8,D0ŽMakeroomforstationID&ŠMOVE.BNATSID(A3),D0†LocalStationID-ŠMOVE.BTHOAF(A1),D1‡Origin=RemoteNetAddr%ŠLSL.W‚#8,D1ŽMakeroomforstationID.ŠMOVE.BD7,D1ŽRemoteStationID=originator's/ŠLEA„NATLCTLK-LCTLULNK(A3),A5LCTAddress->A50TRAMB09ƒMOVE.LLCTLULNK(A5),D2„EndofLCTChain?ŠBEQ„TRASPEC3‹*BranchifYesŠMOVE.LD2,A5ŽLCTEntryAddress0ŠCMPB .W‚LCTLONAU(A5),D0„CompareLocalNAUandSID"ŠBNE„TRAMB09Œ*Branchifnotmatch1ŠCMP.W‚LCTRMNAU(A5),D1„CompareRemoteNAUandSID"ŠBNE„TRAMB09Œ*Branchifnotmatch**ˆMatchingLCTEntryFound*)ŠBTSTƒ#LCTCSDSC,LCTCSTA(A5)Disconnected?,ŠBNE„TRAMB03ŒBranchifyes--discardbuffer&ŠBTSTƒ#THB1FS,THB1(A1)ƒ1stInSegment?ŠBEQ.S‚TRAMB10Œ*BranchifNo)ŠBTSTƒ#RHCATRR,RHCAT(A1)ResponseHeader?ŠBNE„TRARESPR‹*BranchifYES*-*ˆLinkThisBuffertothe"Buffer-Here"Queue*+TRAMB10ƒBSR.L‚NWLNKBQŒGoLinkbufferintoQ6TRAMB11ƒBTSTƒ#LCTARWTR,LCTRSTA(A5)"Avail-to-Rcv"Set?ŠBNE.S‚TRAMB12Œ*BranchifYes*4*ˆAny"Receive-From-Any"ParamBlocksLayingAround?*9ŠMOVE.LNATANYLK(A3),D0„"Rcv-From-Any"LinkAddressZero?ŠBEQ.S‚TRAMB14Œ*BranchifNO?ŠMOVE.LD0,LCTRWTRV(A5)„MakethisParamBlockthe"Next-to-Rcv" ŠMOVE.LD0,A0?ŠMOVE.LNTSNEXT(A0),NATANYLK(A3)New"Rcv-From-Any"ParamBlock,ŠCLR.L‚NTSNEXT(A0)ˆClearLinkinParamBlock.ŠBSETƒ#LCTARWTR,LCTRSTA(A5)Set"Avail-to-Rcv"*'*ˆMoveBIUBufferDatatoUser'sBuffer*TRAMB12ƒBSR„TRABTOU=TRAMB14ƒMOVEM.L(A7)+,A0-A3/A5„Restoreregisters2/10/83SCB.ŠRTS-ŠTTL„TRAMOVB.SA:ˆRouteBIUtoNetworkControlŠPAGE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*,*„TRAMBNWCRoutesBIU'stoNetworkControl˜**Ä*F***********************************************************************Ä*=TRAMBNWC‚MOVEM.LA0-A3/A5,-(A7)„EnteredviaBSRfromTRANSSCN-TRAMBNW1‚LEA„SDDDAT(A2),A1†Startofdataarea ŠMOVE.L#NWCNAU-1,D0‡NATentry#-ŠMULUƒ#NATESIZ,D0ˆ*entrysize=entryoffset$ŠMOVE.LNATBEG,A5ŠStartofNATtable)ŠLEA„NATENTRY(A5,D0),A3NATentryaddress)ŠMOVE.LNATLCTLK(A3),A5„LCTentryaddress/ŠCMP.B‚#SDDRFRMR,SDDRSP(A2)Isitframereject?ŠBEQ.S‚TRAMNW04‹Branchifyes#ŠTST.W‚SDDBCT(A2)‰Informationhere?$ŠBNE„TRAMB10ŒIfyes-Gomovebuffer4TRAMNW04‚MOVE.BSDDSEC(A2),D1†StationIDfrombuffer*ŠMOVE.BSDDRSP(A2),D2†Responseƒfrombuffer1ŠLEA„LCTRWTBF-SDDLNK(A5),A0Startofbufferchain1TRAMNW06‚MOVE.LSDDLNK(A0),D0†NextbufferaddressŠBEQ.S‚TRAMNW08‹BranchifnoneŠMOVE.LD0,A0ŽBufferaddress(ŠCMP.B‚SDDSEC(A0),D1†Isitsamestation?ŠBNE„TRAMNW06‹BranchifNO)ŠCMP.B‚SDDRSP(A0),D2†IsitsameResponse?ŠBNE„TRAMNW06‹BranchifNO%ŠBRA„TRAMB03ŒBranchtodiscardbuffer*8TRAMNW08‚CLR.L‚SDDLNK(A0)‰Clearlinkfieldinnewbuffer-ŠMOVE.LA2,SDDLNK(A0)†Addnewbuffertochain0ŠBSETƒ#LCTARBFQ,LCTRSTA(A5)Set'buffinQ'flag#ŠBTSTƒ#0,SDDRSP(A2)†'I'field?…SCB.#ŠBNE.S‚TRAMNW0A‹Branchifnot.SCB.)ŠBTSTƒ#THB1LS,THB1(A1)ƒLastsegment?SCB."ŠBEQ.S‚TRAMNW09‹Branchifno.SCB.@TRAMNW0A‚ADD.W‚#1,LCTMCNT(A5)…BumpcompletemessagecounterSCB.)TRAMNW09‚BRA„TRAMB11ŒGolookforreceiverŠPAGE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*6*„TRARESPRHandlesResponseBIUsfromOtherStationsŽ**Ä*F***********************************************************************Ä**ˆOnEntry:A5=LCTAddress¢**’A2=BIUAddress¢**Ä* *ˆOnExit:³**Ä**ˆREGISTERS:…01234567ž* *•DUUª**•AUUUUPPƒSž**|ƒ|ƒ|Stack˜**|ƒ|____Preserved”**|________Used™**Ä*F************************************************************************7TRARESPR‚MOVE.LA2,A0ŽLinktheBuffertotheFreeQueue ŠTR0.PTFRBF<ŠBCLRƒ#LCTATRPE,LCTTSTA(A5)Test&Clear"Response-Expected"!ŠBEQ.S‚TRARET*BranchifNOTset*&*ˆAResponseWasExpectedandReceived*ŠMOVE.LA4,-(A7)‹SaveA4BŠMOVE.LLCTTWTRP(A5),A4„1stParamBlockfrom"Wait-for-Response"QAŠBSETƒ#NTSSACK,NTSSTA(A4)Set"Response-RCV'd"inParameterBlock3ŠBSETƒ#NTSSTC,NTSSTA(A4)Set"Transaction-Complete"7ŠMOVE.LNTSNEXT(A4),LCTTWTRP(A5)Unlinkparameterblock!ŠBEQ.S‚TRARE04ŒBranchifonlyone2ŠBSETƒ#LCTATRPE,LCTTSTA(A5)re-set"Resp-Expected"*C *ˆIssueaWAKEUPtoTask0TRARE04ƒMOVE.LLCTLOTCB(A5),A0„NAU'sTCBaddress ŠBSR„NWSIGNAL"ŠBSR.L‚TRADTXQŒAttempttoTransmitŠMOVE.L(A7)+,A4‹RestoreA4&TRARET„BRA„TRAMB14ŒReturn2/10/83SCB.ŠPAGE*F***********************************************************************Ä*=*„TRASPEC‚HandlesSpecialResponseBIUsfromOtherStations†**Ä*F***********************************************************************Ä*!*ˆOnEntry:A2‚=AddressofBIUž**Ä*F***********************************************************************4TRASPEC1‚MOVE.L#SPCCSDLC,D1‡ERRORCode=SDLCerrorŠBRA.S‚TRASPEC?TRASPEC2‚MOVE.L#SPCCDNA,D1ˆERRORCode=NetworkAddrnotfoundŠBRA.S‚TRASPEC=TRASPEC3‚MOVE.L#SPCCNLCT,D1‡ERRORCode=Connectionnotfound4TRASPECƒMOVE.LNNTBEG,A5ŠStartofNetworkNameTable*<*ˆLet's"Fix"uptheDataPortionofthis"Special"Response*%ŠLEA„SDDDAT(A2),A1†Startofdataarea$ŠMOVE.L#SPCSIZ-3,D0‡#bytestomoveDTRASP04ƒMOVE.BSDDSTS(A2,D0.W),SPCSTS(A1,D0.W)Moveoriginalcontent$ŠDBRAƒD0,TRASP04‰Looptillallmoved%ŠMOVE.WD1,SPCCOD(A1)†SaveERRORcode*,*ˆBuildnewTHandRHtoSENDbuffertoSSCT*)ŠCLR.L‚THB1(A1)‹Cleartransmissionheader)ŠMOVE.B#THB1FMT,THB1(A1)‚Setformatcode9ŠBSETƒ#THB1FS,THB1(A1)ƒThisisthe1stsegmentofmessage:ŠBSETƒ#THB1LS,THB1(A1)ƒThisisthelastsegmentofmessage%ŠMOVE.B#SSCNAU,THDAF(A1)‚Destination ŠMOVE.B#SSCNAU,THOAF(A1)‚Origin-ŠCLR.W‚THSEQ(A1)ŠNOsequenceforthismessage=ŠMOVE.B#RHCATNC,RHCAT(A1)Catagoryis'fromnetworkcontrol'2ŠCLR.B‚RHB1(A1)‹ClearReq/Respfield-forrequest$ŠCLR.W‚RHB2(A1)‹Clearreservedfield*$*ˆSetrequiredfieldsinSDLCheader*$ŠCLR.W‚SDDSTS(A2)‰Clearerrorstatus*ŠCLR.L‚SDDRTC(A2)‰ClearRTC,ERR,CMD,SEC'ŠMOVE.W#SPCSIZ,SDDBCT(A2)Messagesize!ŠMOVE.BNNTHSID(A5),D7…StationID ŠMOVE.BD7,SDDSEC(A2)†StationID%ŠBRA„TRAMB02ŒGobacktothebeginningéééééé=/*=/*†NTS.TRANSSCN.AF=/*1=/* Chain file to assemble module NTS.TRANSSCN.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to NTS.TRANSSCN.LS=/*=/IFC \1ƒ=ARGNTS.TRANSSCN.LS=/ENDIF=/*-=ASM NTS.TRANSSCN.SA,NTS.TRANSSCN.RO,\1;RZ=72=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*ƒ9995.NTS.NNT.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.NTS.NTS.EQ=/*ƒ9995.NTS.NTC.EQC =/*ƒ9995.NTS.SMSG.EQ=/*ƒNTS.TRASCAN.AI=/*ƒNTS.TRAMOVB.AI=/*}=/*=ENDéééééf3TRANSSCNIDNT†1,0ƒTRANSPORTLAYER-SCANUSERQUEUE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*‰NOLIST‰INCLUDE9995.&.STR.EQ‰NOLIST‰INCLUDE9995.&.TCB.EQ ‰INCLUDE9995.SDLCPRI.TEMPLTS.EQ‰INCLUDE9995.NTS.NNT.EQ‰INCLUDE9995.NTS.NAT.EQ‰INCLUDE9995.NTS.LCT.EQ‰INCLUDE9995.NTS.NTS.EQ‰INCLUDE9995.NTS.NTC.EQ‰INCLUDE9995.NTS.SMSG.EQ‰LIST‰INCLUDENTS.TRASCAN.AI‰INCLUDENTS.TRAMOVB.AI‰ENDééééééoD =/*=/*†NTS.TRANSSUB.AF=/*1=/* Chain file to assemble module NTS.TRANSSUB.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to NTS.TRANSSUB.LS=/*=/IFC \1ƒ=ARGNTS.TRANSSUB.LS=/ENDIF=/*.=ASM NTS.TRANSSUB.SA,NTS.TRANSSUB.RO,\1;RZ=100=/*{ Included files are:=/*ƒ9995.&.CRASH.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*ƒ9995.NTS.NNT.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.NTS.NTS.EQ=/*ƒ9995.NTS.NTC.EQ=/*ƒ9995.NTS.SMSG.EQ=/*ƒNTS.TRADTXQ.AI=/*ƒNTS.TRABTOU.AI=/*ƒNTS.TRACTOL.AI=/*}=/*=ENDéééééx-TRANSSUBIDNT†1,0ƒTRANSPORTLAYER-MOVEDATA*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*‰NOLIST‰INCLUDE9995.&.CRASH.MC‰INCLUDE9995.&.STR.EQ‰NOLIST‰INCLUDE9995.&.TCB.EQ ‰INCLUDE9995.SDLCPRI.TEMPLTS.EQ‰INCLUDE9995.NTS.NNT.EQ‰INCLUDE9995.NTS.NAT.EQ‰INCLUDE9995.NTS.LCT.EQ‰INCLUDE9995.NTS.NTS.EQ‰INCLUDE9995.NTS.NTC.EQ‰INCLUDE9995.NTS.SMSG.EQ‰LIST‰INCLUDENTS.TRADTXQ.AI‰INCLUDENTS.TRABTOU.AI‰INCLUDENTS.TRACTOL.AI‰ENDéééééD é' NTS TRASCAN AI––—rrNTCREQP RO¯¯rrNTSREQ RO¸¸rrNTSSERV ROÑÑrrNWCREQ ROÚÚrrNWCTPRI ROããrrSSCT ROüürrTRANSSCNRO  rrTRANSSUBRO  rrŠPAGEJ************************************************************************** *INCLUDEFILE:‚NTS.TRASCAN.AIª*J************************************************************************** :ŠTTL„TRASCAN.SA:ˆSCANTERMINATE,USERBUFF&BUFF-WAITQ'S*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.**F***********************************************************************Ä*(*„TRASCANhasthefollowingfunctions:œ*8*ˆA.HandleDISCONNECTfortasksthathaveterminated.ˆ*7*ˆB.RemoveDataBuffersFromtheUserQueueandPass‰*#*‹themontotheAppropriateNAU.š*:*ˆC.LooksforanyLCTsontheWait-ForBufferQueueand†*+*ŒtriestogetbuffersandsendtheBIUs.‘**Ä*/*„TRASCANisaccessedviaaTRAP#1Directive•**Ä*F***********************************************************************Ä* ŠSECTION10ŠOPT„PCS* ŠXDEFƒTRASCAN ŠXREFƒTRADTXQŠXREF.SLCTBEG#ŠXREFƒNWDQHD,NWLODSC,NWSETDC,NWLSTC*Ä*2TRASCANƒMOVE.LTCBNAU(A6),A3†NATaddressofcaller0ŠCMP.B‚#SSCNAU,NATNAU(A3)BesurecallerisSSCTŠBEQ.S‚TRASCANA‹BranchifYES+ŠMOVE.W#1,TCBRTCD(A6)…ERROR-ILLEGALTRAPŠRTEF***********************************************************************Ä*#*ˆDISCONNECTanyterminatedtasks**Ä*F***********************************************************************1TRASCANA‚MOVE.LNWDQHD,D0ŠTerminatedtaskpointerŠBEQ.S‚TRASCANB‹BranchifnoneŠMOVE.LD0,A3ŽNATentryaddress1ŠLEA„TERMPB(PC),A4†Phoneyparameterblockaddress*$*ˆDisconnectallLogicalConnections*6TRASCA02‚MOVE.LNATLCTLK(A3),D0„IsthereanLCTentry?ŠBEQ.S‚TRASCA04‹BranchifNO"ŠMOVE.LD0,A5ŽAddressofLCTentry/ŠMOVE.B#NTSRDCNT,LCTLOCCD(A5)SavereasoncodeŠBSR„NWLODSCŒCancelconnection1ŠBEQ„TRASCA02‹LOOPtillallconnectionscancelled0ŠBRA.S‚TRASCANB‹Nobuffers-tryagainnexttime*?*ˆCancelListenstatus-andsendDisconnectmessagetoprimary*;TRASCA04‚MOVE.L#NTSRDCNT,D6‡Reasoncode--taskterminated)ŠBSR„NWLSTCSubroutinewillcancellistenŽ=—DŸ+ŠBNE.S‚TRASCANB‹Branchiferror-nobuffer*%*ˆSet'Disconnect'inallNNTentries*ŠMOVE.LNATNNT(A3),A2†NNTEntry0ŠCLR.L‚NATCNNLK(A3)‡Besure'Conn-init'isclear4ŠCLR.L‚NATANYLK(A3)‡Besure'Recv-from-any'isclear-ŠMOVE.BD6,NATDCOD(A3)E …Save'disconnect'code)ŠBCLRƒ#NATSACT,NATSTAT(A3)Clear'Active',ŠBSETƒ#NATSDISC,NATSTAT(A3)Set'Disconnect'ŠCLR.L‚NATTCB(A3) ŠBSR„NWSETDCŒGoset'disconnect'=TRASCA06‚MOVE.LNATNXDC(A3),NWDQHDUpdate'terminate'pointer ŠBRA„TRASCANA*TERMPB„DC.BƒNTCCDISC,0ŠDC.Lƒ0ŠPAGEF***********************************************************************Ä*4*„RemoveDataBuffersFromtheUserQueueandPass*"*„themontotheAppropriateNAU¢**Ä*F************************************************************************)*ˆFetchaDataBufferFromtheUserQueue*TRASCANB‚TR0.GTUSQ>ŠBNE.S‚TRAWTBQˆNobuffers-TryLCTsonWait-For-BuffersQueue**ˆDetermineoriginatingstation*4TRASC01ƒMOVE.LNNTBEG,A2ŠStartofNetworkNameTable ŠCLR.L‚D7/ŠTST.B‚NNTHSID(A2)ˆIsthistheprimarystation?0ŠBNE.S‚TRASC02ŒBranchifNO--originisprimary)ŠMOVE.BSDDSEC(A0),D7†Originissecondary**ˆTestforValidSDLCIFrame*#TRASC02ƒMOVE.LA0,A2ŽBufferaddress%ŠBTSTƒ#0,SDDRSP(A0)†IFieldResponse?ŠBEQ.S‚TRASC40Œ*BranchifYES*%*ˆGivethisbuffertoNetworkControl*ŠBSR„TRAMBNWC‹NWCisreceiver!ŠBRA„TRASCANŒGobackfornextBIU**ˆRoutethisbuffertoreceiver*+TRASC40ƒBSR.S‚TRAMOVBŒFindreceiverforBIU!ŠBRA„TRASCANŒGobackfornextBIU4ŠTTL„TRASCAN.SA:ˆCHECKLCTsONWait-For-BufferQueueŠPAGE*$*ˆCOPYRIGHTED1982BYMOTOROLA,INC.*F***********************************************************************Ä*?*„TRAWTBQLooksforanyLCTsontheWait-ForBufferQueueand…*+*ŒtriestogetbuffersandsendtheBIUs.‘**Ä*F************************************************************************HTRAWTBQƒMOVE.LLCTBEG,A3†1stLCTaddressonWait-ForBuffersQueue->D0ŠLEA„LCTBHDR-LCTBFLNK(A3),A3*ŠMOVE.LLCTBFLNK(A3),D0„*&ŠBEQ.S‚TRAWTRTŒ*BranchifQueueEmptyŠMOVE.LD0,A5ŽQueueNotEmptyDŠMOVE.LLCTBFLNK(A5),LCTBFLNK(A3)NewHeadofWait-ForBuffersQueue+ŠCLR.L‚LCTBFLNK(A5)‡ClearLinkFieldinLCT8*------------------------------------------ 3/13/83 SCB.J* If associated task has terminated then leave simply leave this entry off *ƒofthewaitforbuffersqueue.K*ƒNotethatwecantellifthetaskassociatedwiththisTCBhasterminatedE*ƒbecausethepointertotheTCBhasbeenNOTedbytheTERMdirectiveG*ƒinRMS68K.‚ThismeansthattheformerpointertotheTCBnowcontains*ƒanoddvalue.(ŠBTSTƒ#0,LCTLOTCB+3(A5)‚Taskterminated?1ŠBNE.S‚TRAWTBQŒBranchifyes-golookatnewLCT*+*------------------------------------------FTRAWTBQ4‚BCLRƒ#LCTATWTB,LCTTSTA(A5)ClearWait-For-BuffersFlaginLCT%ŠBSR.L‚TRADTXQŒGetBuffers&Transmit<ŠBTSTƒ#LCTATWTB,LCTTSTA(A5)Wait-For-BuffersFlagStillSet?ŠBEQ.S‚TRAWTBQŒ*BranchifNoTRAWTRTƒRTE—Yes,ReturnToSSCT éééI1NTCREQ ASREL' NTS NTCREQP SA7(…HANDLE NTC REQUESTS FROM SSCT÷2pNWMGSSC pNWDCLCT pNWFRLCT pTRACTOLC pTRACTOLL pNWFRNNT pNWLNKBQ pNWSETLA pNWSTATUS pNWSETDC pTRADTXQ pTRABTOU pNTSRRTN pNWFNAT JNTCREQ pNWCREQ E pNWFLCT pNWTNAM pLCTBEG pNATBEG pNNTBEG pNWBLDLCT S2pNWFREPB pNWFNLCC pNWCLRLA pNWTNAMC pNWLNKPB pNWSIGNAL pNWFNLCN *nL3 @ ".Tfp`A ö&AfA ì + gp`A ÞAúNgAú\gæ nàåˆJ3 ÑðüNJ€k@ þgÿÿgA ¨ìNs €ÿÿÿÿgöD€`A ’pNu0 ÌI3 ì^Úÿÿÿäÿÿÿäÿÿÿä°ÿÿÿäÿÿÿä*y($aB! ÿTg f* fNuaI3€ B ÿ> -fp Nu$@Bj %l 5l5l Bª,gê ê ê L3  +R$­+JB€Nu*y($", 4,aB) þÜg* f aB þÎB€NupNup Nu*y($O3‚ ", 4,aB) þ°gaB( þªB€NupýNu*y($", 4,aB) þfp Nu* fô&j* I3 g&k* gB€+NuJ«fp#Nu+fpNu(,:,aB, þ@f - I3‚ fpNu!m y("*¨!M y("J¨fp NuaB% þ í;l+ f(O3 AëaB* ýîg `ÿÿ <þNuB¬!Lë pÿNuaB ýÊB€Nu,aB ý¾gpýNu(,I3 :,aB, ý¬gpóNuJ«gf­f- gpàNu`ÿÿ <þNu"m$B­$lI3 f:;lí +@@RfR`ð@é kÉIaB+ ý<ÉIB€NuL3H aB ý2`ä*y($", 4,aB) ýfp Nu* gp Nu* fè&j* g&kR3 (,:,aB, üègpúNu,aB üÚfJ«faB üÎJ«f/ IëaB& ü¾B«"(_B€Nu*3A *y($", 4,aB) ü¢gaB üœB€NupýNu4éé§A1NTSREQ ASREL' NTS NTSREQ SA8((…Handle NTS user callsþ2JNWMGSSC HJNWDCLCT bJNWFRLCT êpTRACTOLC pTRACTOLL JNWFRNNT JNWLNKBQ ÞJNWSETLA `pSBPTFRML pNWSTATUS JNWSETDC ¨pTRADTXQ pSYSPOFF pTRABTOU JNTSRRTN dJNWFNAT  pNTCREQ JNWFLCT .JNWTNAM û2JNWCNSD ØpLCTBEG JNTSREQ pNATBEG pNNTBEG JPATCH žJNWLSTC ÎJNWBLDLCT ØJNWFREPB úJNWLODSC pSBGTFRBF JNWFNLCC PJNWCLRLA „JNWTNAMC  &pTRAMOVB JNWLNKPB JJNWSIGNAL fÿNB¬!LF3 B€Nu0,@€°lgpNuJ,g4afò/ |Ií2a´­6­ 6­ 6F3 B­8(_ìB€Nu/ |Iëa†B«"`â0,@é°lgpNu Ng Aì F3 pN@``*,,, h6pN@`Nqp NuJ¬oöaŽfÆ- fp - g B†I3 -a NuAía^fœB¬!LíaB ùB€NupAì o, ~n&I3€ QÈÿð",4,Eí g$@²ªfô´jfîpNupNuB€NuaB ø¶g <ÿNuCèF3 B‘¼ ÑÑ||Bi|#B)BiB(1|(-G #|F3 .NTS #Té3l#j3j3j j #l 3l$3l&F3@ B€NuAí< g @`øB’ Ší6* fgRmHB€Nu*y(B€S€Àü&GõF3 +gB€Nup NuKë M -g*@¾- fð¼-fêB€NupNuKë, -F3 g *@²-fòB€NupNuKë -g M*@¸­ fðºmfêB€NupNu *g&"@*y(F3€ Aí g°‰g @`ôBi ‘"­+I*y(2* Cí I fNu"@²i fðB© ‘F3 "­+I`â- fV-fN y(»Èeÿÿ Ш €J»Àbÿÿ y(Aë (F3 g °g @`ò!m y(*¨!MKøNuB€"(g A¹Èfôp`ðJ€Nu2* *yF3€@ (Aí g @²h fôè `ìNu2* *y(Aí g @²h fô¨ `ìNu2*F3  *y(Aí g @²h fôè ¨ ¨ `àNu y(J¨gÿÿ*h»ÈeF3 ÿÿ Ш €J»Àbÿÿ!U MCèJBX³Ènú*«;k +l ;lAë (F3 g @`ö!MNu gÿÿ !TCBfÿÿ(-f HçppN@LßNu-f - F3 g BmBm4`Bmí F- g y(Aèÿô (g°g @`ò!mI3 Bm6Bm -,3SRequest Disconnect ÿUnknown SDLC Response ÿ24ééééG1SSCT ASREL' NTS SSCT SAF%(…System Service Control Task+2pOUTTERM NSSCT pNTSSERV .JF3"$ & (Aú0<NAg.H瀀 |`6 DATAB˜³ÈnúF3Nu,HOî€ OCîaêHîŠB®¢~Aî¦1|ÿÿCè"!IB¨Aè^QÏÿèaà~F3Aî1|ÿÿCè"!IB¨AèJQÏÿè~AîF1|ÿÿB¨Aè"QÏÿðpýNAIî„*LF3 -g (@,gì+lB¬&lkJ,fž f|ÿÿ`Ä F3gH瀀 |`H&l ÿÿgp Aú(Cú4°gAè³ÈnôH瀀 |`F3 (Nû.NTS2.SSCr)m+L`ÿZaô |d0<NA`ÿ>€F3 oH瀀 |`ÂAú åˆÑðüNФ¤¤šš¤€F3 oH瀀 |`‚Aú åˆÑðüNÐŠŠŠØØŠ&L€F3 oH瀀 |`@Aú åˆÑðüNÐ"""öÿÿþÐÿÿþÐ+F3°+gtadfÿ "úÿ0< I0ÛQÈÿü|ÿÿal`þVaºfþæ0< J4ÛQÈÿüI3|ÿÿ(HB,aBýrajgeô`”g |ÿÿ`þ ƒgðÔ&L`ŒalfI3þ˜0< J"K4ÙQÈÿü!k !k!k !k|ÿÿ(HB,aBý ageôF3`,g |ÿÿ`ý°a€`ý¨ÔfýÔJ,gýÌ`H ÿ LCîÎ$I$üSSCT$ü PF3.B$ü. ER4üR $:ÖÂraÜÂraÔÂraÌÂraÄÂra¼Âra´I3Âra¬`DCúbEú "<CaBüf$:†EîÎ$Â$Â$ Kra‚Âr azAèÂrI3@apÂrajÂr adü ¼ CîÎ" ’‰RaBü|ÿÿ`üÔSSCT Error- Code F3STS BCT R E C # R TH RH Data èaaF3SAfîNu o^0ÀNu0<NA~Aî¦ (ÿÿf ¼B(1|Bh!|I3<aaBûxAè^QÏÿÒNuCî„ )g"@`öB¨#HNu~Eî *ÿÿf Bj"jI3B€NuEêJQÏÿæpÿNupJ.™f)@¼ Bª%|( JažaBûNu/JF3g ÿgDü`/ |è0<NA _DüLßNu~EîF *ÿÿfBjB€NuEê3"QÏÿêpÿNu4éôM1TRANSSCN ASREL' NTS TRANSSCNSAG2(…TRANSPORT LAYER - SCAN USER QUEUE³2pNWLNKBQ pNWSETDC pTRADTXQ pTRABTOU pSBGTUSQ pNWDQHD pLCTBEG pNATBEG pNNTBEG pNWLSTC pNWLODSC JTRAMOVB ÚJTRASCAN pNWSIGNAL pSBPTFRBF *¾J3„ &nT + g=|HNs 9(gX&@IúN +g*@|#aA Îgì`<|#aA Äf4$kJ3H B«B«"F«ë B«aA ž#ë(`¦†aA Šf*$y(B‡J*F3€ f( $H( ga `ÿda:`ÿ^&x Gëÿô +g&*@'mB­-fÞI3 ­ aB ÿ2- gÌNsHçôJjgfJjf^CêJk°B€)S€Àü&*xI3€@ GõJ«g+f+ g0 JaB þØ`p)áH+ )áIKë$-I3 g*B°mfð²mfê- fÄg )fžaB þŽ-6f +"g+@8I3  @'h"B¨í6aB þfLß/NuHçôCêpÀü&*x Gõ*k *— gJjF3 f¦* * Aí< g @²( fô´( fî`ÿ:B Ší6* fgRmO3 H`ÿj JaB ýð­ g,/ (m$ìì+l$gí  UaB ýÂaB ý¾(_F3 `ÿT"<ÿ`"<ÿ`"<ÿ*x Cêp1² QÈÿø3A B‘¼ ÑÑ>3 ||Bi|#B)BiBjBª5|4-G `þ24éééýG1TRANSSUB ASREL' NTS TRANSSUBSAHW(…TRANSPORT LAYER - MOVE DATAÊ2JTRACTOLC XJTRACTOLL JTRADTXQ pSBSDLCKL JTRABTOU lpSBPTXMQ JSNDBIU $pLCTBEG pNATBEG pNNTBEG pDBUFSZ pTRAMOVB pNWLNKPB pNWSIGNAL pSBPTFRBF pSBGTFRML *ôF3 / 0-gÆ f¾(m 2-*-f°- fZ fœ U,F3 gAì pN@`| ì`8*,,, h6pN@`Nq`Ú+F,B€08 ]@"I3€ XAÒ¬SƒÀ;A*aB ÿpgkí aj(_Nuí “m*$HCê IB€08 ¼ F3 B)mmH Bi><- f>ÑRmgú+l0í |B)F3 Bi, g éí XˆY€XG3m\ˆ]€°­0mÑ -0­ Þ@"mF3 ,"ä‰$B` ÙQÉÿü`ÙQÊÿüÑ­,‘­0J’g/a¸$_-gÿ8`4-I3 ga€`Bì­  UaB þd­+l gí- ga4`F3 ìa\`þ6aT(_Nu- f4 fî+l,+l0X­,Y­0B€08 U@I3 "Ò¬ƒÀfr;A*aB ýèg nþxí $H“m*- f|"li B-F3 J-fi Bm( ) f 2)Aóÿ;A( -0Aê.‡ nB‡-(ÁF3  ¾x b ÁA`þ¬í B‡>8  € A`þm AêB€08 F3 B‡BjB* 2-(g0ÁT‡U€°­0mþ` -0èÿþB* `þNGíB¬ +g&@F3 `ö'LNu&x B­Gëÿô +g&@`ö'MNu5G-f| BjB* mL3@ -gG ¾- f / aB ü¨*_Nu JaB üžfNup N@/ -6gÆ-6gF3 ¼(m8- 6g<$m8 ¾jg€`ÿÿaÐJ€oâ0< m@&-D(¶€F3 l(„™­DÙ¬,äŽD` ÙQÎÿü`ÙQÌÿüJ€g|fí 6+H@L3€ g,­ 6­ 6a¨ì UaB úà­ 6ga `þ> JaB úÊ`þ4(_NuF3 /$m< JaýNu/ « g +f   ë `ë AëaB ùÈB¬!LF3 (_$@"L'jg*ë `"/ « gÊ +gÄ$L"@'igë  kzI3! ,) h6pN@`Nqé|  k(IaB ù\(J`° F*x  ª!j!j @3 !j éê k(IaB ù&pÀü&Aõ h(JaB ù(_Nu4ééééééé' SDLC BEGSDLC AF # #rrBEGSDLC SA , ,rrBUFMGT AF 5 5rrBUFMGT SA > >IùrrBUFMGTX AF rI rUFMGTX SA ˜ ˜_brr=/*=/*†SDLC.BEGSDLC.AF=/*1=/* Chain file to assemble module SDLC.BEGSDLC.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to SDLC.BEGSDLC.LS=/*=/IFC \1ƒ=ARGSDLC.BEGSDLC.LS=/ENDIF=/*)=ASM SDLC.BEGSDLC.SA,SDLC.BEGSDLC.RO,\1;R=/*{ Included files are:=/*ƒ--none--=/*}=/*=ENDéééééé *BEGSDLC IDNT 1,0 Beginning of SDLC segment* ‰SECTION9>* Must be the first thing linked in segment 'SDLC' (section 9)* ŠXDEFƒBEGSDLC6BEGSDLCƒBRA.S‚*’MusthavecodehereforlinkertoworkŠENDéééI éééé $=/*=/*†SDLC.BUFMGT.AF=/*0=/* Chain file to assemble module SDLC.BUFMGT.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to SDLC.BUFMGT.LG=/*=/IFC \1ƒ=ARGSDLC.BUFMGT.LS=/ENDIF=/*+=ASM SDLC.BUFMGT.SA,SDLC.BUFMGT.RO,\1;RZ=60=/*{ Included files are:=/*ƒ9995.&.CRASH.MC=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*}=/*=ENDéééééé --BUFMGTƒIDNT†2,0‡BUFFERMANAGEMENTSUBROUTINES>‰TTL‡BUFFERMGTSUBROUTINES(Copyright1982byMotorola,Inc.)‰NOLIST‰INCLUDEƒ9995.&.CRASH.MC‰INCLUDEƒ9995.NTS.NAT.EQ‰INCLUDEƒ9995.&.STR.EQ ‰INCLUDEƒ9995.SDLCPRI.TEMPLTS.EQ‰LIST ‰SECTIONƒ9*‰XREF†NATBEG,SDLCQUSB,FREEQHD,FQLWM,FQBCNT‰XREF†USERQHD,USERQND,SDLCPCB   H*************************************************************************Æ**Æ**šBUFFERMANAGEMENT›**Æ**Æ* *•NETWORKSERVICES/SDLCONLY•**Æ**Æ*#*”J NON-SHAREDRAM/BUFFERPOOLONLY“**Æ**Æ*H************************************************************************   H*************************************************************************Æ**Æ**šWARNINGŸ**Æ**Æ*=*‡DONOTUSETHISMODULEWHERETHEBUFFERSARESHAREDAMONG†*=*‡MULTIPLEPROCESSORSVIAASHAREDRAMFACILITY.‚THEPROPER…*=*‡MODULEFORTHATSITUATION(ANDALLPROCESSORSTHEREIN)IS†*>*‡THE"BUFMGTX"SETOFROUTINESWHICHREGULATEACCESSTOTHE…*=*‡POOLVIAA"TESTANDSET"RESOURCELOCKONTHEPOOLHEAD.†*<*‡FAILURETOCOMPLYWITHTHISWILLRESULTINUNPREDICTABLE‡*7*‡(ANDPROBABLYCATASTROPHIC)BEHAVIOROFTHESYSTEM.Œ**Æ**Æ*H************************************************************************‰PAGEH*************************************************************************Æ*C*„THESEROUTINESIMPLEMENTABUFFERMANAGEMENTSYSTEMUTILIZINGAƒ*F*QUEUEOF"FREEBUFFERS".‚A"LOWWATERMARK"LEVELISDEFINEDWHICH‚*H* PREVENTS APPLICATIONS (OR FUNCTIONS ON THEIR BEHALF) FROM COMPLETELY **DRAININGTHEBUFFERPOOL.¬**Æ*A*„"SBGTFRIR"(AND"GTFRIR")IGNORETHELOWWATERMARK,ANDWILL…*E*SUPPLYONEBUFFERFROMTHEPOOL.‚ANINDICATIONISRETURNEDIFTHEƒ*E*POOLHASJUSTBECOMEEMPTY.‚THISMODULESHOULDNOTBEUSEDBY,ORƒ*F*ONBEHALFOFAPPLICATIONS.‚ITISINTENDEDFORLOWLEVEL,HIGHPER-‚*G*FORMANCEROUTINESONLYWHICHMAYUSETHELASTBUFFERFROMTHEPOOL.‚**Æ* 6< ?, G= O7 W5 _? g5 o1 w9  D*„"SBGTFRBF"(AND"GTFRBF")RETURNONEBUFFERIFTHEPOOLISABOVE‚*H* THE LOW WATER MARK, OTHERWISE A "NOT AVAILABLE" INDICATION IS GIVEN. **Æ*E*„"SBGTFRML"(AND"GTFRML")RETURNMANYBUFFERSFROMTHEPOOLUPTO*H* A REQUESTED NUMBER, OR UNTIL THE LOW WATER MARK IS REACHED, WHICHEVER*G*OCCURSFIRST.‚THERETURNEDBUFFERSARELINKEDTOGETHERANDTHEFIRST*F*BUFFERSADDRESS,THENUMBEROFBUFFERSRETURNED,ANDARETURNCODEƒ*#*OFALL,SOME,ORNONEISGIVEN.¦**Æ*B*„"SBPTFRBF"(AND"PTFRBF")RETURNASINGLEBUFFERBACKINTOTHE„* *POOL.À**Æ*A*„"SBPTFRML"(AND"PTFRML")RETURN"MANY"BUFFERSBACKINTOTHE…* *POOL.À**Æ*E*„"SBPTXMQ"(AND"PTXMQ")PUTASINGLEBUFFERONTHETRANSMITQUEUE*G*OFTHEAPPROPRIATESECONDARYSTATION'SCONTROLBLOCK.‚IFTHEPASSED*D*SECONDARYSTATIONNUMBERISINVALID(I.E.,THESECONDARYSTATION…*F*CONTROLBLOCKCANNOTBEFOUND),ANERRORINDICATIONISRETURNEDASƒ*E*WELLASTHEBUFFER.‚IFTHESTATIONNUMBERISVALID,THEBUFFERISƒ*D*ENQUEUEDTOTHEAPPROPRIATESECONDARYSTATIONCONTROLBLOCK,THE…*G*SDLCDRIVERISNOTIFIEDOFTHETRAFFIC'SARRIVAL,ANDAGOODRETURN‚*4*CODE(ANDNOBUFFER)ARERETURNEDTOTHECALLER.•**Æ*D*„"SBPTUSQ"(AND"PTUSQ")PUTASINGLEBUFFERONTHE"USERQUEUE".‚*F*WHERETHEHOSTINGSYSTEMCONTAINSNETWORKSERVICES,ITISNOTIFIEDƒ**OFTHEBUFFER'SARRIVAL.­**Æ*E*„"SBGTUSQ"(AND"GTUSQ")GETASINGLEBUFFERFROMTHE"USERQUEUE",*G*RETURNINGANINDICATIONOFWHETHERORNOTABUFFERWASOBTAINED.‚IF*H* NO BUFFER IS AVAILABLE, A "BAD" POINTER IS RETURNED FACILITATING THE **FINDINGOFBUGS.µ**Æ*H************************************************************************‰PAGEH*************************************************************************Æ*0*ˆSYMBOLDEFINITIONSUSEDWITHINTHESEMODULES’**Æ*H************************************************************************ )* CONDITION CODE REGISTER BIT DEFINITIONS $N.SET„EQU‡%00001000NEGATIVEBITSET Z.SET„EQU‡%00000100ZEROBITSET$V.SET„EQU‡%00000010OVERFLOWBITSET!C.SET„EQU‡%00000001CARRYBITSET &N.CLR„EQU‡%00000000NEGATIVEBITCLEAR"Z.CLR„EQU‡%00000000ZEROBITCLEAR&V.CLR„EQU‡%00000000OVERFLOWBITCLEAR#C.CLR„EQU‡%00000000CARRYJ BITCLEAR   (* INTERRUPT LEVEL WITHIN STATUS REGISTER 'LEVEL7ƒEQU‡$0700…LEVEL7INTERRUPTMASK   )* AN ADDRESS VALUE WHICH HELPS CATCH BUGS AFLYPAPEREQU‡$FFFFFFFF(IT'SANODDNUMBER,MOVE.W/.LWILLFAIL!) ‰PAGEH*************************************************************************Æ*=*ˆSUBROUTINE:‚"SBGTFRIR"‚GETONEBUFFERFROMTHEFREEQUEUEƒ**ˆTRAP:ˆ"GTFRIR"©**ˆENTER:ƒNOARGUMENTS.¨*(*ˆRETURN:‚A3.L=POINTERTOTHEBUFFER™**’CCR±*/*‘Zset‚BUFFERWASSUPPLIED(NOTLASTBUFFER)‰*"*‘Nset‚LASTBUFFERWASSUPPLIED–**‘neither‚NOBUFFERAVAILABLE™*:*ˆNOTE:‚THISROUTINEISTOBEUSEDONLYBYTHEDLCLEVEL‡*/*BECAUSEITWILLSUPPLYTHEVERYLASTBUFFERŒ*#*ˆREGISTERSUSED:ƒ01234567**˜D­* *˜A‡R‡S** |‡|_stack–** |_________returned“**Æ*#*REPLACEDON3/6/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†GTFRIR,SBGTFRIR:GTFRIRƒBSR.S…SBGTFRIR‚TRAPENTRYPOINT,DOTHESUBROUTINE,+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE /SBGTFRIRMOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINTA‰MOVE.B„#Z.SET+N.CLR,1(A7)ASSUME"BUFFERWASSUPPLIED,NOTLAST""‰ORI.W…#LEVEL7,SRMASKINTERRUPTS!+‰SUB.W…#1,FQBCNTDECREMENTCOUNTOFBUFFERS;‰BGT.S…GTFRIR1ƒOUTIFATLEASTONEREMAINSAFTERWEGETONE)‰BMI.S…GTFRIR0ƒOUTIFNOTEVENONEFORUS=* EXACTLY ONE LEFT, WE WILL NOW GET IT LEAVING THE POOL EMPTY<‰MOVE.B„#N.SET+Z.CLR,1(A7)ASSERT"LASTBUFFERWASSUPPLIED".GTFRIR1‚MOVE.L„FREEQHD,A3BUFFERADDRESS->A3:‰MOVE.L„SDDLNK(A3),FREEQHDA(NEXTBUFFER)->HEADOFQUEUE7‰MOVE.W„0(A7),SR‚RESTOREPRIORINTERRUPTLEVELA.S.A.P.%‰CLR.L…SDDLNK(A3)CLEARBUFFER'SLINK#‰MOVE.W„(A7)+,SR‚ASSERTRETURNCODE ‰RTS‘RETURN 1* NO BUFFERS LEFT AT ALL, NOT EVEN ONE FOR CALLER2GTFRIR0‚ADD.W…#1,FQBCNTPUTCOUNTBACKLIKEITWAS7‰MOVE.W„0(A7),SR‚RESTOREPRIORINTERRUPTLEVELA.S.A.P.)‰CLR.B…1(A7)…ASSERT"NOBUFFERAVAILABLE"1‰MOVE.L„#FLYPAPER,A3BUFFERPOINTER="BAD"VALUE#‰MOVE.W„(A7)+,SR‚ASSERTRETURNCODE ‰RTS‘RETURN‰PAGEH*************************************************************************Æ*=*ˆSUBROUTINE:‚"SBGTFRBF"‚GETONEBUFFERFROMTHEFREEQUEUEƒ**ˆTRAP:ˆ"GTFRBF"©**ˆENTER:ƒNOARGUMENTS.¨*-*ˆRETURN:‚A0.L=ADDRESSOFBUFFERSUPPLIED”**’CCR±**“ZsetBUFFERWASSUPPLIEDš**’notset‚NOBUFFERAVAILABLE˜*<*ˆNOTE:‚THISROUTINEWILLNOTDEPLETETHEQUEUECOMPLETELY…*5*ITWILLSUPPLYBUFFERSDOWNTOTHELOWWATERMARK†*#*ˆREGISTERSUSED:ƒ01234567**˜DU«* *˜ARS**š||_stack–**š|_______________returned“**Æ*#*REPLACEDON3/6/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†GTFRBF,SBGTFRBF:GTFRBFƒBSR.S…SBGTFRBF‚TRAPENTRYPOINT,DOTHESUBROUTINE,+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE /SBGTFRBFMOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINT3‰MOVE.B„#Z.SET,1(A7)ASSUMEBUFFERWILLBESUPPLIED!‰ORI.W…#LEVEL7,SRMASKINTERRUPTS0‰MOVE.W„FQBCNT,D0ARETHENUMBEROFBUFFERSLEFT/‰CMP.W…FQLWM,D0‚ATORBELOWTHELOWWATERMARK?+‰BLE.S…GTFRBFLW‚YES,CAN'TGETABUFFERNOW/‰SUB.W…#1,FQBCNTNO,DECREMENTCOUNTOFBUFFERS7‰BMI.S…GTFRBF0ƒOUTIFTHEREARENONELEFT(L.W.M.<=0)'‰MOVE.L„FREEQHD,A0BUFFERADDRESS->A0:‰MOVE.L„SDDLNK(A0),FREEQHDA(NEXTBUFFER)->HEADOFQUEUE6‰MOVE.W„(A7),SRƒRESTOREPRIORINTERRUPTLEVELA.S.A.P.%‰CLR.L…SDDLNK(A0)CLEARBUFFER'SLINK#‰MOVE.W„(A7)+,SR‚ASSERTRETURNCODE ‰RTS‘RETURN 2GTFRBF0‚ADD.W…#1,FQBCNTPUTCOUNTBACKLIKEITWAS>GTFRBFLWMOVE.W„(A7),SRƒRESTOREPRIORINTERRUPTLEVELA.S.A.P.)‰CLR.B…1(A7)…ASSERT"NOBUFFERAVAILABLE"1‰MOVE.L„#FLYPAPER,A0BUFFERPOINTER="BAD"VALUE#‰MOVE.W„(A7)+,SR‚ASSERTRETURNCODE ‰RTS‘RETURN‰PAGEH*************************************************************************Æ*>*ˆSUBROUTINE:‚"SBGTFRML"‚GETMANYBUFFERSFROMTHEFREEPOOL‚*K *ˆTRAP:ˆ"GTFRML"©*-*ˆENTER:‚D1.W=NUMBEROFBUFFERSREQUESTED”*?*ˆRETURN:‚A0.L=ADDROF1STBUFFEROFBUFFERSTRINGSUPPLIED‚*%*‘D1.W=NUMBEROFBUFFERSSUPPLIED”**’CCR±*#*“ZsetALLBUFFERSWERESUPPLIED”*$*“NsetSOMEBUFFERSWERESUPPLIED“* *’neither‚NOBUFFERSAVAILABLE—*#*ˆREGISTERSUSED:ƒ01234567* *˜DUR©* *˜ARS**œ|‹|_stack–**œ|_____________returned“**Æ*#*REPLACEDON3/6/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†GTFRML,SBGTFRML:GTFRMLƒBSR.S…SBGTFRML‚TRAPENTRYPOINT,DOTHESUBROUTINE,+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE /SBGTFRMLMOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINT$‰CLR.B…1(A7)…ASSUMEWEWILLGETNONE0‰CLR.W…-(A7)…INITCOUNTOFHOWMANYWE'VEGOTTEN-‰CLR.L…-(A7)…INITA(LASTBUFFERWE'VEGOTTEN).* STACK: 0(A7).L = A(LAST BUFFER WE'VE GOTTEN)**ˆ4(A7).W=COUNTOFHOWMANYWE'VEGOTTEN!*ˆ6(A7).W=RETURNCONDITIONCODE9‰TST.W…D1ˆCALLERWANTLESSTHANOREQUALTOZEROBUFFERS?$‰CRASH.LE‚*-1‡YES,COMMITHARI-KARI!'‰BRA.S…GTFRMLGB‚NO,GOTRYANDGETTHEM CGTFRMLGABSR.S…SBGTFRBF‚GETONEBUFFER,CHECKINGTHELOWWATERMARK'‰BNE.S…GTFRMLGS‚OUTIFCOULDN'TGETONE1‰MOVE.B„#N.SET+Z.CLR,7(A7)RETURNCODE=GOTSOME@‰MOVE.L„0(A7),SDDLNK(A0)NEWBFRPOINTSTOLASTBFRWE'VEGOTTEN=‰MOVE.L„A0,0(A7)‚ANDNEWBUFFERBECOMESTHELASTWE'VEGOTTEN*‰ADDQ.W„#1,4(A7)‚ANDCOUNTHOWMANYWEGET3GTFRMLGBDBRA†D1,GTFRMLGALOOPTILLWEGETTHEMALL KGTFRMLGDMOVE.B„#Z.SET+N.CLR,7(A7)GOTALLTHEUSERWANTED,SETRETURNCODE9GTFRMLGSMOVE.L„(A7)+,A0‚A0=A(FIRSTBUFFERINTHELIST)%‰MOVE.W„(A7)+,D1‚D1=HOWMANYWEGOT*‰BGT.S…GTFRMLEX‚OUTIFWEGOTATLEASTONE3‰MOVE.L„#FLYPAPER,A0GOTNONE,SETA0=BADPOINTER+GTFRMLEXMOVE.W„(A7)+,SR‚ASSERTRETURNCODE ‰RTS‘RETURN‰PAGEH*************************************************************************Æ*9*ˆSUBROUTINE:‚"SBPTFRBF"‚PUTABUFFERONTHEFREEQUEUE‡**ˆTRAP:ˆ"PTFRBF"©*'*ˆENTER:‚A0.L=ADDRESSOFTHEBUFFERš**ˆRETURN:NOARGUMENTS.©*#*ˆREGISTERSUSED:ƒ01234567**˜D­* *˜AUS**š||_stack–**š|_______________used—**Æ*#*REPLACEDON3/6/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†PTFRBF,SBPTFRBF:PTFRBFƒBSR.S…SBPTFRBF‚TRAPENTRYPOINT,DOTHESUBROUTINE,+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE /SBPTFRBFMOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINT/‰CMPA.L„#0,A0…DIDCALLERPASSUSANILPOINTER?$‰CRASH.EQ‚*-1‡YES,COMMITHARI-KARI!‰ORI.W…#$700,SR‚MASKINTERRUPTS9‰MOVE.L„FREEQHD,SDDLNK(A0)LINKFREEQUEUETOTHISBUFFER?‰MOVE.L„A0,FREEQHDRETURNEDBUFFERISNOWTHEHEADOFFREEPOOL'‰ADD.W…#1,FQBCNTINCREMENTBUFFERCOUNT.‰MOVE.W„(A7)+,SR‚RESTOREPRIORINTERRUPTLEVEL)‰MOVE.L„#FLYPAPER,A0SETA0=BADPOINTER ‰RTS‘RETURN‰PAGEH*************************************************************************Æ*8*ˆSUBROUTINE:‚"SBPTFRML"‚PUTALINKEDCHAINOFBUFFERSˆ**¡ONTHEFREEQUEUE”**ˆTRAP:ˆ"PTFRML"©*:*ˆENTER:‚A0.L=ADDRESSOFTHEFIRSTBUFFERINTHECHAIN‡**—ORNIL($00000000).œ**ˆRETURN:NOARGUMENTS.©*#*ˆREGISTERSUSED:ƒ01234567**˜DU«* *˜AUS**š||_stack–**š|_______________used—**Æ*#*REPLACEDON3/6/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†PTFRML,SBPTFRML:PTFRMLƒBSR.S…SBPTFRML‚TRAPENTRYPOINT,DOTHESUBROUTINE,+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE *SBPTFRMLMOVE.L„A0,D0…SAVEA(FIRSTBUFFER) !* D0.L = A(NEXT BUFFER TO RETURN)5PTFRMLNXMOVE.L„D0,A0…GETADDRESSOFBUFFERTORETURN ‰TST.L…D05‰BEQ.S…PTFRMLEX‚OUTIFALLBUFFERSHAVEBEENRETURNED1‰MOVE.L„SDDLNK(A0),D0SAVEADDRESSOFNEXTBUFFER'‰BSR.S…SBPTFRBF‚RETURNTHEBUFFERINA04‰BRA.S…PTFRMLNX‚ANDLOOPTILLALLHAVEBEENRETURNED 1PTFRMLEXMOVE.L„#FLYPAPER,A0SETAK 0=BADPOINTER ‰RTS‘RETURN‰PAGEH*************************************************************************Æ*:*ˆSUBROUTINE:‚"SBPTXMQ"‚PUTABUFFERONATRANSMITQUEUE†**ˆTRAP:ˆ"PTXMQ"ª*'*ˆENTER:‚A0.L=ADDRESSOFTHEBUFFERš**ˆRETURN:CCR³*-*‘ZsetBUFFERWASLINKEDTOTRANSMITQUEUEŒ*4*‘NsetILLEGALSDLCSTATIONNUMBER,THEBUFFERIS…*(*šRETURNEDTOTHECALLERINTHISCASE!ˆ*#*ˆREGISTERSUSED:ƒ01234567**˜DU«* *˜AUUU‰S**ž|‰|_stack–**ž|___________used—**Æ*#*REPLACEDON3/6/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†PTXMQ,SBPTXMQ8PTXMQ„BSR.S…SBPTXMQƒTRAPENTRYPOINT,DOTHESUBROUTINE,+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE .SBPTXMQ‚MOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINT ‰CLR.L…D0+‰CMPA.L„#0,A0…CALLERPASSUSANILPOINTER?)‰CRASH.EQ‚*-1‡COMMITHARI-KARIIFHEDID!8‰MOVE.B„SDDSEC(A0),D0GETSTATIONNUMBERFROMTHEBUFFER@‰MOVE.L„SDLCPCB,A1GETPOINTERTOTHEPRIMARYCONTROLBLOCK,AND?‰MOVE.L„SDPFSEC(A1),A1THEREFROMTHE1STSECONDARYCB'SADDRESS,‰CMP.B…#$FF,D0ƒBUFFERGOINGTOALLSTATIONS?;‰BEQ.S…PTXMQ04ƒYES,PUTTHEMESSAGEONFIRSTSCBREGARDLESS O* SCAN THRU THE SECONDARY CONTROL BLOCKS LOOKING FOR A MATCHING STATION ADDRESSBPTXMQ02‚CMP.B…SDSSEC(A1),D0ISTHISTHEDESTINATIONSTATION'SSCB?;‰BEQ.S…PTXMQ04ƒYES,WE'VEFOUNDTHECORRECTSCB(SEEBELOW):‰ADD.L…#SDSLNG,A1NO,FETCHNEXT(CONSECUTIVE)SCBADDRESS-‰TST.B…SDSSEC(A1)ISTHEREANOTHERONETHERE?@‰BNE.S…PTXMQ02ƒYES,LOOPTILLWEFINDCORRECTONE(ORREACHEND)6‰MOVE.B„#N.SET+Z.CLR,1(A7)NO,ILLEGALSTATIONNUMBER!0‰MOVE.W„(A7)+,SR‚ASSERTRETURNINGCONDITIONCODE‰RTS‘ANDRETURN D* TARGET SCB FOUND, PREPARE THE BUFFER FOR TRANSMISSION AND QUEUE IT8PTXMQ04‚CLR.W…SDDSTS(A0)YES,ASSERTNOREPORTEDERRORS,,‰CLR.B…SDDERR(A0)ANDNOERRORSOFANYKIND,(‰CLR.B…SDDRSP(A0)ANDNORESPONSE(YET),0‰CLR.L…SDDLNK(A0)ANDNOBUFFERSAFTERTHISONE,?‰MOVE.B„SDSSRT(A1),SDDRTC(A0)ANDFINALLY,AFRESHRETRYCOUNT.!‰ORI.W…#LEVEL7,SRMASKINTERRUPTS4‰MOVE.L„SDSTND(A1),A2LINKBCBTOENDOFTxMITQUEUE.‰TST.L…SDSTHD(A1)ISTHETRANSMITQUEUEEMPTY?0‰BNE.S…PTXMQ06ƒNO,LINKTOTAILOFCURRENTQUEUE?‰LEA‡SDSTHD-SDDLNK(A1),A2YES,NEWBUFFERISHEADOFQUEUEALSOCPTXMQ06‚MOVE.L„A0,SDSTND(A1)TAILOFQUEUEPOINTSTOTHENEWBUFFER7‰MOVE.L„A0,SDDLNK(A2)WHICHGLUESONTOTAILOFLASTONE;* ZERO THIS STATIONS TIMER SO WE WILL SEND TRAFFIC A.S.A.P.?‰CLR.W…SDSCTD(A1)********TEMPORARYUNTILEXPEDITEDTXMITDONE6‰MOVE.W„(A7),SRƒRESTOREPRIORINTERRUPTLEVELA.S.A.P.(* TELL SDLC THERE IS NEW TRAFFIC TO SEND=‰BSR.L…SDLCQUSB‚********TEMPORARYUNTILEXPEDITEDTXMITDONE;‰MOVE.B„#Z.SET+N.CLR,1(A7)RETURNCC=BUFFERWASLINKEDOK)‰MOVE.L„#FLYPAPER,A0SETA0=BADPOINTER0‰MOVE.W„(A7)+,SR‚ASSERTRETURNINGCONDITIONCODE‰RTS‘ANDRETURN‰PAGEH*************************************************************************Æ*8*ˆSUBROUTINE:‚"SBPTUSQ"‚PUTABUFFERONTHEUSERQUEUEˆ**ˆTRAP:ˆ"PTUSQ"ª*'*ˆENTER:‚A0.L=ADDRESSOFTHEBUFFERš**ˆRETURN:ƒNOARGUMENTS.§*#*ˆREGISTERSUSED:ƒ01234567**˜DU«* *˜AUUU‰S**ž|‰|_stack–**ž|___________used—**Æ*#*REPLACEDON3/6/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†PTUSQ,SBPTUSQ8PTUSQ„BSR.S…SBPTUSQƒTRAPENTRYPOINT,DOTHESUBROUTINE,+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE .SBPTUSQ‚MOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINT(‰MOVE.L„A0,D0…CALLERPASSANILPOINTER?)‰CRASH.EQ‚*-1‡COMMITHARI-KARIIFHEDID!0‰CLR.L…SDDLNK(A0)CLEARBUFFER'SFORWARDPOINTER"‰ORI.W…#LEVEL7,SRMASKINTERRUPTS!3‰MOVE.L„USERQND,A2LINKBUFFERTOENDOFUSERQUEUE"‰MOVE.L„A2,D0…ISUSERQUEUEEMPTY?‰BNE.S…PTUSQ02:‰LEA‡USERQHD,A2YES,LINKTOHEADOFQUEUEASWELLASTAILEPTUSQ02‚MOVE.L„A0,USERQNDTAILOFUSERQUEUEISADDRESSOFNEWBUFFER=‰MOVE.L„A0,SDDLNL K(A2)ANDGLUEUSTOTAILBUFFER(ORTOHEAD)7‰MOVE.W„(A7)+,SR‚RESTOREPRIORINTERRUPTLEVELA.S.A.P.+‰MOVE.L„NATBEG,D0NETWORKSERVICESPRESENT?‰BEQ.S…PTUSQEXT‚NO,JUSTEXIT 4* WAKE UP NETWORK SERVICES WHEN USER TRAFFIC ARRIVESC* (APPARENTLY THIS CODE WORKS, BUT I HAVEN'T "WALKED THRU" IT TO BE)* SURE OF THIS AS OF 3/6/83 - ED SKINNER)&‰MOVE.L„D0,A0…FETCHTCBOF"SSCT"TASK‰MOVE.L„#SSCNAU-1,D0‰MULU†#NATESIZ,D0‰LEA‡NATENTRY(A0,D0),A0‰MOVE.L„NATTCB(A0),A0 ‰TR0$.WAKEUP 1PTUSQEXTMOVE.L„#FLYPAPER,A0SETA0=BADPOINTER ‰RTS‘RETURN‰PAGEH*************************************************************************Æ*<*ˆSUBROUTINE:‚"SBGTUSQ"‚GETONEBUFFERFROMTHEUSERQUEUE„**ˆTRAP:ˆ"GTUSQ"ª**ˆENTER:ƒNOARGUMENTS.¨*-*ˆRETURN:‚A0.L=ADDRESSOFBUFFERSUPPLIED”**’CCR±**“ZsetBUFFERWASSUPPLIEDš**’notset‚NOBUFFERAVAILABLE˜*#*ˆREGISTERSUSED:ƒ01234567**˜DU«* *˜ARS**š||_stack–**š|_______________returned“**Æ*#*REPLACEDON3/6/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†GTUSQ,SBGTUSQ8GTUSQ„BSR.S…SBGTUSQƒTRAPENTRYPOINT,DOTHESUBROUTINE,+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE .SBGTUSQ‚MOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINT3‰MOVE.B„#Z.SET,1(A7)ASSUMEBUFFERWILLBESUPPLIED"‰ORI.W…#LEVEL7,SRMASKINTERRUPTS!$‰MOVE.L„USERQHD,D0USERQUEUEEMPTY?‰BEQ.S…GTUSQ02ƒYES,OUT&‰MOVE.L„D0,A0…NO,BUFFERADDRESS->A0<‰MOVE.L„SDDLNK(A0),USERQHDADDROFNEXTBUFFERTOQUEUEHEAD4‰BNE.S…GTUSQ01ƒOUTIFQUEUEDIDN'TJUSTBECOMEEMPTY+‰CLR.L…USERQNDƒYES,CLEARENDOFQUEUEALSO=GTUSQ01‚MOVE.W„(A7),SRƒRESTOREPRIORINTERRUPTLEVELA.S.A.P./‰CLR.L…SDDLNK(A0)CLEARRETURNINGBUFFER'SLINK'‰MOVE.W„(A7)+,SR‚ASSERTTHERETURNCODE‰RTS‘ANDRETURN %* NO BUFFERS IN THE USER QUEUE TO GET=GTUSQ02‚MOVE.W„(A7),SRƒRESTOREPRIORINTERRUPTLEVELA.S.A.P.(‰CLR.B…1(A7)…ASSERTGOTNONERETURNCODE)‰MOVE.L„#FLYPAPER,A0RETURNABADPOINTER'‰MOVE.W„(A7)+,SR‚ASSERTTHERETURNCODE‰RTS‘ANDRETURN‰ENDéééééé=/*=/*†SDLC.BUFMGTX.AF=/*1=/* Chain file to assemble module SDLC.BUFMGTX.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to SDLC.BUFMGTX.LS=/*=/IFC \1ƒ=ARGSDLC.BUFMGTX.LS=/ENDIF=/*L -=ASM SDLC.BUFMGTX.SA,SDLC.BUFMGTX.RO,\1;RZ=60=/*{ Included files are:=/*ƒ9995.&.CRASH.MC=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*}=/*=ENDéééééé ‡.BUFMGTX‚IDNT†2,0‡BUFFERMANAGEMENTSUBROUTINES>‰TTL‡BUFFERMGTSUBROUTINES(Copyright1982byMotorola,Inc.)‰NOLIST‰INCLUDEƒ9995.&.CRASH.MC‰INCLUDEƒ9995.NTS.NAT.EQ‰INCLUDEƒ9995.&.STR.EQ ‰INCLUDEƒ9995.SDLCPRI.TEMPLTS.EQ‰LIST ‰SECTIONƒ94‰XREF.S„NATBEG,SYSPOFF,MEMOFF,FREEQHD,FREEQND,MEMOFF5‰XREF.S„FQLWM,FQBCNT,USERQHD,USERQND,SDLCPCB,SDLCQUSB‰XREF†SDLCQXMT   H*************************************************************************Æ**Æ**šBUFFERMANAGEMENT›**Æ**Æ* *•NETWORKSERVICES/SDLCONLY•**Æ**Æ**˜SHAREDRAM/BUFFERPOOL˜**Æ**Æ*H************************************************************************   H*************************************************************************Æ*E*WARNING:"PTXMQ"CONTAINSANIMPLEMENTATIONRESTRICTIONWHICHHAS„*F*NOTBEENRESOLVEDYET.‚"PTXMQ"ASSUMESTHATIFMEMOFFISZEROTHEN‚*C*THESDLCDRIVERISPRESENTINTHESAMEMPU.‚INEXISTINGUSESOF…*D*THISMODULE,THATISTRUE.‚HOWEVERITMAYNOTALWAYSBETRUE.‚ATƒ*D*SOMEFUTURETIME,"PTXMQ"SHOULDBECHANGEDTODETERMINEIFSDLC…*E*EXISTSINTHESAMEMPUINAMOREDIRECTFASHION,ANDTHEREBYLIFT„*E*THISRESTRICTION.‚AWARNINGISGENERATEDWITHIN"PTXMQ"TOACTASƒ*#*AREMINDEROFTHISRESTRICTION.¦**Æ*H************************************************************************ ‰PAGE H*************************************************************************Æ*E*ƒTHISMODULEISUSEDINALLPROCESSORSWHICHACCESSTHESHAREDRAM‚*D*AREACONTAININGTHESHAREDBUFFERS.‚TWOSYSGENDEFINEDCONSTANTS„*D*WHICHAREUNIQUETOTHEPROCESSORUSINGTHISCODEAREIMPORTANT.…*A*„"SYSPOFF"ISALONGWORDCONTAININGTHEOFFSETTHISPROCESSOR…*9*‡MUSTUSEINACCESSINGTHEFREEPOOLCONTROLAREA,ANDŠ*E*„"MEMOFF"ISALONGWORDCONTAININGTHEOFFSETTHISPROCESSORMUST*(*‡USEINACCESSINGINDIVIDUALBUFFERS.›**Æ**„-„-„-„-„-„-„-„-„-„-„-„-„-…**Æ*A*„<-------MPUA'sView-------><-------MPUB'sView------->…**Æ*M  < ™* ¡& ©? ±0 ¹9 Á/ É6 Ñ4 Ù< á* é0*’+-------------+¥*1*„$00000000-->!!ƒ(MPUBCannot"see"MPUA's‡*)*’!ƒPrivateƒ!…privateRAMareaatall.)‡* *’!…RAM…!¥**„$00FBFFFF-->!!¥**’+-------------+¥**š+-------------+*5*„$00FC0000---------->!!<------------$00000000…**š!ƒShared„!* *š!…RAM…!*5*„$00FFFFFF---------->!!<------------$0003FFFF…**š+-------------+**Æ*+*„SYSPOFF=$00FC0C00—SYSPOFF=$00000000…*)*„MEMOFF‚=$00FC0000—MEMOFF‚=$00000000…**Æ**„-„-„-„-„-„-„-„-„-„-„-„-„-…**Æ*D*„THISDIAGRAMREPRESENTSTHEEXORMACS/VM02CONFIGURATIONUSEDFOR‚*G*NETWORKSERVICESQUITEOFTEN.‚THEVM02'SONBOARDMEMORYIS"SHARED"*G*BETWEENTHEPROCESSORS.‚THEVM02"SEES"THISAREABEGINNINGATZERO,*8*WHILETHEEXORMACS"SEES"ITBEGINNINGAT$00FC0000.‘*D*„MEMOFFISTHEOFFSETTOTHESHAREDRAMAREA.‚INTHEVM02,MEMOFF*<*WILLBEZERO.‚INTHEEXORMACS,MEMOFFWILLBE$00FC0000.Œ*B*„SYSPOFFISTHEOFFSETTOTHESYSPARAREA.‚INTHEVM02,SYSPOFFƒ*=*WILLBEZERO.‚INTHEEXORMACS,SYSPOFFWILLBE$00FC0C00.‹*B*„INBOTHPROCESSORSTHEN,THEBUFFERPOOLQUEUECONTROLAREA(A„*F*VM02SYSPARCONSTRUCT)ISACCESSEDAT"FREQHD+SYSPOFF".‚SIMILARLY,‚*E*AGIVENBUFFERMAYBEACCESSEDINEITHERMPUAS"BUFADDR+MEMOFF",„*:*ANDTHEUSERQUEUEMAYBEFOUNDAT"USERQUEUE+MEMOFF".*E*„HOWEVER,SINCEBUFFERSINTHEFREEPOOLANDUSERQUEUEARELINKED*E*ANDMANIPULATEDBYEITHERPROCESSOR,WHO'S"VIEW"OFADDRESSESIS„* *USED?À*C*„BYCONVENTION,BUFFERSINTHESEAREASARELINKEDTOGETHERUSINGƒ*C*NOOFFSETWHATSOEVER.‚ANYPROCESSORACCESSINGTHEMWILLHAVETO…*G*INCLUDEITSOWNMEMOFFINACCESSINGTHEBUFFERS,ORITSOWNSYSPOFF‚*G*INACCESSINGTHECONTROLAREA.‚(BECAUSESYSPOFFANDMEMOFFAREBOTH*C*ZEROINTHEVM02,ITWOULDAPPEARTHATTHEPOOLUSESTHEVM02'S†*D*OFFSETS.‚THISWILLNOTBETHECASEHOWEVERWHEREBOTHPROCESSORS„*B*ARE,FOREXAMPLE,VM02'S.‚ONEWILLHAVEZEROOFFSETSWHILETHE†* *WILLHAVENON-ZEROOFFSETS.)©**Æ*H************************************************************************‰PAGEH*************************************************************************Æ*C*„THESEROUTINESIMPLEMENTABUFFERMANAGEMENTSYSTEMUTILIZINGAƒ*E*QUEUEOFSHARED"FREEBUFFERS".‚THEBUFFERSEXISTINASHAREDRAMƒ*E*AREAOFMEMORY,ANDA"LOCK"ISUSEDONTHEQUEUEHEADPOINTERTO„*D*INSUREEXCLUSIVEACCESSTOTHEPOOLCONTROLAREADURINGUPDATES.…*F*THESEROUTINESSHOULDBEUSEDIN***ALL***PROCESSORSWHICHACCESSƒ*F*AND/ORMANIPULATETHEQUEUECONTROLAREA.‚A"LOWWATERMARK"LEVEL‚*H* IS DEFINED WHICH PREVENTS APPLICATIONS (OR FUNCTIONS ON THEIR BEHALF)*-*FROMCOMPLETELYDRAININGTHEBUFFERPOOL.œ**Æ*A*„"SBGTFRIR"(AND"GTFRIR")IGNORETHELOWWATERMARK,ANDWILL…*E*SUPPLYONEBUFFERFROMTHEPOOL.‚ANINDICATIONISRETURNEDIFTHEƒ*E*POOLHASJUSTBECOMEEMPTY.‚THISMODULESHOULDNOTBEUSEDBY,ORƒ*F*ONBEHALFOFAPPLICATIONS.‚ITISINTENDEDFORLOWLEVEL,HIGHPER-‚*G*FORMANCEROUTINESONLYWHICHMAYUSETHELASTBUFFERFROMTHEPOOL.‚**Æ*D*„"SBGTFRBF"(AND"GTFRBF")RETURNONEBUFFERIFTHEPOOLISABOVE‚*H* THE LOW WATER MARK, OTHERWISE A "NOT AVAILABLE" INDICATION IS GIVEN. **Æ*E*„"SBGTFRML"(AND"GTFRML")RETURNMANYBUFFERSFROMTHEPOOLUPTO*H* A REQUESTED NUMBER, OR UNTIL THE LOW WATER MARK IS REACHED, WHICHEVER*G*OCCURSFIRST.‚THERETURNEDBUFFERSARELINKEDTOGETHERANDTHEFIRST*F*BUFFERSADDRESS,THENUMBEROFBUFFERSRETURNED,ANDARETURNCODEƒ*#*OFALL,SOME,ORNONEISGIVEN.¦**Æ*B*„"SBPTFRBF"(AND"PTFRBF")RETURNASINGLEBUFFERBACKINTOTHE„* *POOL.À**Æ*A*„"SBPTFRML"(AND"PTFRML")RETURN"MANY"BUFFERSBACKINTOTHE…* *POOL.À**Æ*E*„"SBPTXMQ"(AND"PTXMQ")PUTASINGLEBUFFERONTM HETRANSMITQUEUE*G*OFTHEAPPROPRIATESECONDARYSTATION'SCONTROLBLOCK.‚IFTHEPASSED*D*SECONDARYSTATIONNUMBERISINVALID(I.E.,THESECONDARYSTATION…*F*CONTROLBLOCKCANNOTBEFOUND),ANERRORINDICATIONISRETURNEDASƒ*E*WELLASTHEBUFFER.‚IFTHESTATIONNUMBERISVALID,THEBUFFERISƒ*D*ENQUEUEDTOTHEAPPROPRIATESECONDARYSTATIONCONTROLBLOCK,THE…*G*SDLCDRIVERISNOTIFIEDOFTHETRAFFIC'SARRIVAL,ANDAGOODRETURN‚*4*CODE(ANDNOBUFFER)ARERETURNEDTOTHECALLER.•**Æ*D*„"SBPTUSQ"(AND"PTUSQ")PUTASINGLEBUFFERONTHE"USERQUEUE".‚*F*WHERETHEHOSTINGSYSTEMCONTAINSNETWORKSERVICES,ITISNOTIFIEDƒ**OFTHEBUFFER'SARRIVAL.­**Æ*E*„"SBGTUSQ"(AND"GTUSQ")GETASINGLEBUFFERFROMTHE"USERQUEUE",*G*RETURNINGANINDICATIONOFWHETHERORNOTABUFFERWASOBTAINED.‚IF*H* NO BUFFER IS AVAILABLE, A "BAD" POINTER IS RETURNED FACILITATING THE **FINDINGOFBUGS.µ**Æ*H************************************************************************‰PAGEH*************************************************************************Æ*0*ˆSYMBOLDEFINITIONSUSEDWITHINTHESEMODULES’**Æ*H************************************************************************ )* CONDITION CODE REGISTER BIT DEFINITIONS $N.SET„EQU‡%00001000NEGATIVEBITSET Z.SET„EQU‡%00000100ZEROBITSET$V.SET„EQU‡%00000010OVERFLOWBITSET!C.SET„EQU‡%00000001CARRYBITSET &N.CLR„EQU‡%00000000NEGATIVEBITCLEAR"Z.CLR„EQU‡%00000000ZEROBITCLEAR&V.CLR„EQU‡%00000000OVERFLOWBITCLEAR#C.CLR„EQU‡%00000000CARRYBITCLEAR   (* INTERRUPT LEVEL WITHIN STATUS REGISTER 'LEVEL7ƒEQU‡$0700…LEVEL7INTERRUPTMASK   * LOCK BIT WITHIN AN ADDRESS *LOCKBIT‚EQU‡$80000000MOSTSIGNIFICANTBIT   )* AN ADDRESS VALUE WHICH HELPS CATCH BUGS AFLYPAPEREQU‡$FFFFFFFF(IT'SANODDNUMBER,MOVE.W/.LWILLFAIL!) ‰PAGEH*************************************************************************Æ*=*ˆSUBROUTINE:‚"SBGTFRIR"‚GETONEBUFFERFROMTHEFREEQUEUEƒ**ˆTRAP:ˆ"GTFRIR"©**ˆENTER:NOARGUMENTS.ª*(*ˆRETURN:‚A3.L=POINTERTOTHEBUFFER™**’CCR±*/*‘Zset‚BUFFERWASSUPPLIED(NOTLASTBUFFER)‰*"*‘Nset‚LASTBUFFERWASSUPPLIED–**‘neither‚NOBUFFERAVAILABLE™*:*ˆNOTE:‚THISROUTINEISTOBEUSEDONLYBYTHEDLCLEVEL‡*/*BECAUSEITWILLSUPPLYTHEVERYLASTBUFFERŒ*#*ˆREGISTERSUSED:ƒ01234567**˜D­* *˜A‡R‡S** |‡|_stack–** |_________returned“**Æ*#*REPLACEDON3/8/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†GTFRIR,SBGTFRIR9GTFRIRƒBSR.S…SBGTFRIR‚TRAPENTRYPOINT,DOTHESUBROUTINE+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE /SBGTFRIRMOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINT‰MOVE.L„A1,-(A7)A‰MOVE.B„#Z.SET+N.CLR,5(A7)ASSUME"BUFFERWASSUPPLIED,NOTLAST";‰MOVE.L„SYSPOFF,A1GETTHELOCALOFFSETTOTHECONTROLAREA H* THE FOLLOWING TST OF MEMOFF AND BNE INSTRUCTIONS ARE FOR TEMPORARY USEH*ONLY.‚IWANTTOSEEIFANYONEISUSINGTHISSUBROUTINEINTHEEXORMACSA*MPU-WHICHSHOULDNOTBEHAPPENING.†EDSKINNER,MARCH9,1983. ‰TST.L…MEMOFF6‰CRASH.NE‚*-1‡DIEIFNOTRUNNINGINTHEVM02WITHSDLC 7* OBTAIN EXCLUSIVE ACCESS TO THE FREE POOL CONTROL AREA6GTFRIRLKMOVE.W„4(A7),SR‚RESTOREPRIORINTERRUPTLEVEL!‰ORI.W…#LEVEL7,SRMASKINTERRUPTS(‰TAS‡FREEQHD(A1)ATTEMPTTOSETTHELOCK3‰BMI.S…GTFRIRLK‚LOOPIFFAILED(ANOTHERMPUHASIT),‰CRASH.NE‚*-1‡CRASHIFLOCKBYTEISCORRUPT! .* FREEQHD IS LOCKED AND INTERRUPTS ARE MASKED!/‰SUB.W…#1,FQBCNT(A1)DECREMENTCOUNTOFBUFFERS;‰BGT.S…GTFRIR1ƒOUTIFATLEASTONEREMAINSAFTERWEGETONE)‰BMI.S…GTFRIR0ƒOUTIFNOTEVENONEFORUS=* EXACTLY ONE LEFT, WE WILL NOW GET IT LEAVING THE POOL EMPTY<‰MOVE.B„#N.SET+Z.CLR,5(A7)ASSERT"LASTBUFFERWASSUPPLIED"0‰CLR.L…FREEQND(A1)ANDCLEARPOOL'STAILPOINTEREGTFRIR1‚MOVE.L„FREEQHD(A1),A3HEADBUFFERADDR->A3(NOOFFSETYET!))‰SUBA.L„#LOCKBIT,A3TURNOFFTHELOCKBIN T8‰ADD.L…MEMOFF,A3COMPUTEWHEREWE"SEE"THEBUFFERTOBE9‰BSET†#7,SDDLNK(A3)‚SETLOCKBITINNEXTBUFFER'SADDRESS3‰CRASH.NE‚*-1‡COMMITHARI-KARIIFIT'SALREADYSET!B‰MOVE.L„SDDLNK(A3),FREEQHD(A1)STORENEWHEADPTR,ALREADYLOCKED!)‰BCLR†#7,FREEQHD(A1)ANDRELEASETHELOCK7‰CRASH.EQ‚*-1‡COMMITHARI-KARIIFITWASALREADYCLEAR!7‰MOVE.W„4(A7),SR‚RESTOREPRIORINTERRUPTLEVELA.S.A.P.,‰CLR.L…0(A3)…CLEARTHEBUFFER'SFORWARDLINK‰CLR.L…4(A3)…CLEAR‰CLR.L…8(A3)ŠOTHERPARTS#‰CLR.L…12(A3)”OFTHEBUFFERASWELL‰MOVE.L„(A7)+,A1#‰MOVE.W„(A7)+,SR‚ASSERTRETURNCODE ‰RTS‘RETURN 1* NO BUFFERS LEFT AT ALL, NOT EVEN ONE FOR CALLER6GTFRIR0‚ADD.W…#1,FQBCNT(A1)PUTCOUNTBACKLIKEITWAS4‰CRASH.NE‚*-1‡SHOULDBECOMEZERO!DIEIFITDOESN'T!)‰BCLR†#7,FREEQHD(A1)ANDRELEASETHELOCK7‰CRASH.EQ‚*-1‡COMMITHARI-KARIIFITWASALREADYCLEAR!7‰MOVE.W„4(A7),SR‚RESTOREPRIORINTERRUPTLEVELA.S.A.P.)‰CLR.B…5(A7)…ASSERT"NOBUFFERAVAILABLE"1‰MOVE.L„#FLYPAPER,A3BUFFERPOINTER="BAD"VALUE‰MOVE.L„(A7)+,A1#‰MOVE.W„(A7)+,SR‚ASSERTRETURNCODE ‰RTS‘RETURN‰PAGEH*************************************************************************Æ*=*ˆSUBROUTINE:‚"SBGTFRBF"‚GETONEBUFFERFROMTHEFREEQUEUEƒ**ˆTRAP:ˆ"GTFRBF"©**ˆENTER:NOARGUMENTS.ª*-*ˆRETURN:‚A0.L=ADDRESSOFBUFFERSUPPLIED”**’CCR±**“ZsetBUFFERWASSUPPLIEDš**’notset‚NOBUFFERAVAILABLE˜*A*ˆNOTE:‚THISROUTINEWILLNOTDEPLETETHEFREEQUEUECOMPLETELY*5*ITWILLSUPPLYBUFFERSDOWNTOTHELOWWATERMARK†*#*ˆREGISTERSUSED:ƒ01234567**˜DU«* *˜ARS**š||_stack–**š|_______________returned“**Æ*#*REPLACEDON3/8/83,EDSKINNER.¦**Æ*H************************************************************************ ‰XDEF†GTFRBF,SBGTFRBF9GTFRBFƒBSR.S…SBGTFRBFTRAPENTRYPOINT,DOTHESUBROUTINE+‰MOVE.W„SR,0(A7)‚REPLACETHECONDITIONCODE"‰RTE‘SOWEGIVEPROPERRETURNCODE /SBGTFRBFMOVE.W„SR,-(A7)‚SUBROUTINEENTRYPOINT3‰MOVE.B„#Z.SET,1(A7)ASSUMEBUFFERWééééééééN ééééééééééééééééO ééééééééééééééééO éééééééééééééééé