IMD 1.17: 25/11/2014 13:16:46 82VKXBVERDOS D* BT24:0 68K VERSADOS/RMS68K OBJECT 4.5 (DS,DD 96 tpi 5.1/4" DISK) REVISED: 04/22/86 DISK 24 OF 24  BT24 82VKXBVERDOS 0420²g-=/* to accomodate the PASCAL ROM capability, and is now called=/* RROM.FINIT.SA=/*=/IFC \1ƒ=ARGRROM.FINIT.LS=/ENDIF=/*(=ASM RROM.FINIT.SA,RROM.FINIT.RO,\1;Z=64=/*{ Included files are:=/*ƒRR.RTEQU.SA=/*ƒRR.MACROS.SA=/*ƒRR.FPMACRO.SA=/*}=/*=ENDNNNNNN(=/*=/*†RROM.FPOINT.AF=/*G=/* This file was originally called FPSRR.FPOINT.SA but it was modified>=/* to accomodate the PASCAL rom capability, and is now called=/* RROM.FPOINT.SA=/*=/IFC \1ƒ=ARGRROM.FPOINT.LS=/ENDIF=/**=ASM RROM.FPOINT.SA,RROM.FPOINT.RO,\1;Z=64=/*{ Included files are:=/*ƒRR.RTEQU.SA=/*ƒRR.MACROS.SA=/*}=/*=ENDNNNNN N1=/*=/*†RROM.INIT.AF=/*F=/* This file was originally called UTILRR.INIT.SA but it was modified>=/* to accomodate the PASCAL rom capability, and is now called=/* RROM.INIT.SA=/*E=/* Chain file to assemble the rom version of the PASCAL initializer.=/*&=/*Parameter01†Outputlisting/device4=/*“Thisparameterisoptionalandwillbedefaulted=/*“ifnotspecified=/*=/IFC \1ƒ=ARGRROM.INIT.LS=/ENDIF=/*3=ASM RR.VDOSVM.SA/RROM.INIT.SA,RROM.INIT.RO,\1;Z=64=/*{ Included files are:=/*ƒRR.FIOEQU.SA=/*}=/*=ENDNNNNN:=/*=/*†RROM.PFPOINT.AF=/*C=/*†ChainfiletoassemblethedummymoduletosatisfytheexternalB=/*†reference'.PFPOINT'forthefileIOSRR.WRR.SA.ThismoduleisC=/*†usedwiththeversionoftheromlibrarywhichDOESNOTsupport=/*†floatingpointcapability.=/*&=/*ˆParameter01†Outputlisting/device4=/*šThisparameterisoptionalandwillbedefaulted=/*šifnotspecified.=/*=/*ˆPARAMETER01EDITS=/*=/IFC \1ƒ=ARGRROM.PFPOINT.LS=/ENDIF=/*)=ASM RROM.PFPOINT.SA,RROM.PFPOINT.RO,\1;R=/*{ Included files are:=/*ƒ--none--=/*}=/*=ENDNN NNNC=/*=/*ˆRROM.PLJSR.AF=/*;=/*ˆChainfiletoassemblethePASCALlongjumpsubroutine.=/*=/IFC \1=ARG RROM.PLJSR.LS=/ENDIF=/*=/*%=ASM RROM.PLJSR.SA,RROM.PLJSR.RO,\1;R=/*{ Included files are:=/*ƒ--none--=/*}=ENDNNNNNNNL**E*†TherelocatableoutputfromthisassemblywillbeuseintheSYSGEN*†link.*G*†ItcontainsaMINIMUMdummycomandlinewhichcanbemodifiedtomeetF*†theuser'sneeds.TypicallytheuserWILLmodifythecommandlinetoD*†assignlogicalunits5and6whenarequirementforterminalusage *†exists.*E*†NormallySESSIONCONTROLwouldassignlogicalunits5and6fortheC*†taskbeinginvoked,howeverSESSIONCONTROLdoesnotexistinthe*†ROMbasedsystem.**,*†IftheuserhadthefollowingPROGRAMline**ˆPROGRAMTASK(INPUT,OUTPUT);*?*THENheshouldmodifythecommandlinetoassignBOTHlogical*unitsfive(5)andsix(6):**’I=#CN00,O=#CN00;Z=1* *HOWEVER*,*IftheuserhadthefollowingPROG RAMline**ˆPROGRAMTASK(OUTPUT)*?*THENheshouldmodifythecommandlinetoassignONLYlogical *six(6).* *’O=#CN00;Z=1*-*ˆwhereterminalCN00wasarbitrarilychosen.***E*ˆAdatadefinitiontocreatetheMINIMUMcommandlinewhichcontains *ˆthe'Z'optionisshownbelow.*B*ˆTheintentofthiscomandlineistoforcePASCALtohavetoget*ˆanewdymamicdatasegment.*?*ˆThiscommandlinecanbealteredtosuittheuser'sneedsBUTF*ˆthe'Z'optionisrequired.Thevalueofthe'Z'hasbeenarbitrarlyH*ˆchosen.Iftheuserdoesnothaveaneedforadditional'Z'spacethenC*ˆthe'Z'optionpartofthecommandlineasshownwillaccompolishH*ˆthedesiredintent.IfforwhateverreasontheuserdeterminesthatheB*ˆneedsa'Z'valuelargerthanthatarbitrarlychosenthenhecanA*ˆchangethe'Z'optionaccordingly.TypicallytheuserwillhaveC*ˆdebuggedhisPASCALtaskpriortoputtingitinromandamountof.*ˆ'Z'spacewillhavealreadybeendetermined.*A*ˆTheuserwillnotethatabufferspaceofhexadecimal$9EexistB*ˆwiththeunusedportionbeingsettoNULL.Thishasbeendoneso?*ˆthattheusercanpatchthecomandlineifnecessarypriortoU:^?*ˆburningtheroms.ThisisthemaximumthatPASCALwillallow.** ‰SECTIONƒ9 ‰XDEF†CMDLINE‰XDEF†CMDLINEL* CR‡EQU‡$0DCMDLINBFEQU‡$9E*CMDLINE: O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*@*ˆThefollowinglineisallthatneedstobeMODIFIEDtoreflect%*ˆtheuserscommandlinerequirements*‰DC.B†';Z=1',CR *œThisisaMINIMUMcommandline!*The'Z'optionMUSTbepresent.*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ‰DCB.B…(CMDLINBF-(*-CMDLINE)),0.*œFORCEBALANCEOFCOMANDLINEBUFFERTONULLSCMDLINELDC.W†CMDLINBF*œFORCEDCOMMANDLINELENGTH‰ENDNNNNN?†TTL‰V2.0068KPASCALFLOATINGPOINTINITIALIZATIONSUBROUTINE‰NOLIST‰INCLUDEƒRR.RTEQU.SA‰INCLUDEƒRR.MACROS.SA‰INCLUDEƒRR.FPMACRO.SA‰LIST*$*ˆFILERR.RTEQU.SAHASBEENINCLUDED%*ˆFILERR.MACROS.SAHASBEENINCLUDED&*ˆFILERR.FPMACRO.SAHASBEENINCLUDED* †NOFORMATCFINITIDNT‚2,00‚68KPASCALFLOATINGPOINTINITIALIZATIONSUBROUTINE †SECTION…8********E*….PFINIT--‚INITIALIZETHEFLOATINTPOINTPROCESSOR,ANDTHEDEFAULT*‘EXCEPTIONHANDLERADDRESSES**…ENTRY:!*ˆ A5=‚POINTERTOTHEPASCALRMA.**…EXIT:!*ˆA5=‚POINTERTOTHEPASCALRMA.**…USES:*ˆ.‚==NOTTOUCHED*ˆ*‚==USEDANDDESTROYED*ˆP‚==USEDBUTPRESERVED*ˆR‚==RETURNED1*ˆA‚==RETURNEDADJUSTED(LIKETHESTACKPOINTER)*ˆ-‚==NOTAPPLICABLE*%*‹01234567CNTRLSTATUSINSTAD*ˆD:P.......ƒ-…-…-*ˆA:PP.....Aƒ-…-…-*‡FP:....----ƒR…R….* *…FUNCTION:<*‹THEFUNCTIONOFTHISROUTINEISTOINITIALIZETHEFLOATINGA*ˆPOINTPROCESSORANDSETUPTHEDEFAULTTRAPHANDLERFORALLTHE*ˆFLOATINGPOINTEXCEPTIONS.* *…EXTERNALS:*C*ˆ.PFINIT‚=‚DEF,THEENTRYPOINTTOTHEFLOATINGPOINTINITROUTINEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*?*ˆ.PFLOATP=‚DEF,DOUBLY-DEFINEDLABELWITHFASTFLOATINGPOINT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**4*ˆ.PFPOINT=‚REF,THEF-LINETRAPSIMULATINGROUTINE********B†XDEF‚.PFINIT…!THEENTRYPOINTTOTHEFLOATINGPOINTINITROUTINEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*?*…XDEF‚.PFLOATP„!DOUBLY-DEFINEDLABELWITHFASTFLOATINGPOINT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*3†XREF‚.PFPOINT„!THEF-LINETRAPSIMULATINGROUTINE*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**.PFLOATPEQU‡**fGoPw@O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**6*….PFINIT--THEFLOATINGPOINTINITIALIZATIONROUTINE*!ƒPROCEDURE.PFINIT,*,*…SAVETHEREGISTERSUSEDASLOCALVARIABLES*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**…MOVEM.L‚D0/A0/A1,-(A7)*D*ˆThefollowinginstructionsweregraciouslysuppliedbyDaveMosley* ‰MOVE.L„A7,A6 ‰SUB.L…#58,A7 ‰MOVE.L„A7,A5‰MOVE.W„#RMASIZE+8,D0MLOOP:‰MOVE.W„(A6)+,(A5)+ ‰SUBQ.W„#2,D0 ‰BNE.S…MLOOP ‰LEA‡8(A7),A5 ‰MOVE.L„A5,A6*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*6*…INITIALIZETHEFLOATINGPOINTEXCEPTIONVECTORTABLE*C†MOVEQ„#NUMEXCEPTIONS,D0!D0=NUMBEROFEXCEPTIONVECTORSTOINIT5†MOVE.LƒLOWHEAP(A5),A0„!A0=THELOWESTHEAPADDRESSA†LEA†EXCEPTION_HANDLER(PC),A1ƒ!A1=ADDRESSOFEXCEPTIONROUTINE*F*…FILLALLEXCEPTIONVECTORSWITHTHEADDRESSOFTHEDEFAULTEXCEPTION *…HANDLER*†REPEAT'‰MOVE.LƒA1,(A0)+‡!FILLWITHANADDRESS0‰SUBQ.Wƒ#1,D0Š!DECREMENTEXCEPTIONVECTORCOUNT5†UNTIL‘!LOOPUNTILALLEXCEPTIONVECTORSFILLED**…SAVENEWLOWESTHEAPADDRESS*†MOVE.LƒA0,LOWHEAP(A5)*%*…BUILDANEWFREELISTHEADERRECORD* †MOVEQ„#-1,D0†MOVE.LƒD0,(A0)+ †MOVEQ„#0,D0†MOVE.LƒD0,(A0)+*"*…SAVETHENEWTOPOFHEAPPOINTER*†MOVE.LƒA0,HPTR(A5)*:*…INITIALIZETHEFLOATINGPOINTSTATUSANDCNTRLREGISTERS*†MOVE.Wƒ#INITSTATUS,D0†FMOVEEƒD,0,,S,STATUS†MOVE.Wƒ#INITCNTRL,D0†FMOVEEƒD,0,,S,CNTRL*4*…RETURNTOTHEISLANDINTHECOMMONSECTION'FINIT'*†MOVEM.L‚(A7)+,D0/A0/A1 ƒEND_PROCƒPAGE*;*‚EXCEPTION_HANDLERISTHEDEFAULTFLOATINGPOINTEXCEPTION *‚HANDLER.*'*Ž*************************************%*Ž*‚NOTE:THISVERSIONISONLYGOOD‚*%*Ž*‚FORTHESOFTWAREIMPLEMENTATION‚*%*Ž*‚OFTHEFLOATINGPOINTPROCESSOR‚*'*Ž***************************************‚ARGUMENTSARE:%*…A5‡=‚POINTERTOTHEUSERSREGISTERS.*…STATUSƒ=‚THEFLOATINGPOINTERRORINDICATORS=*…INSTADƒ=‚THEADDRESSOFTHEFLOATINGPOINTINSTRUCTIONTHAT*‘CAUSEDTHEERROR*/ƒPROCEDUREEXCEPTION_HANDLER,*0*…PUSHTHEFLOATINGPOIN TPROCESSORSA5REGISTER*D***************************TEMP PATCH*******************************D*************THIS PATCH COMPENSATES FOR A BUG IN THE FP SOFTWARE****D********************************************************************3‰CLR.B‚3(A3)ˆCLEARTEMPSTATSOWEDON'TABORTAGAIND**************************PATCH END*********************************D********************************************************************†MOVE.LƒA5,-(A7)*F*…LOADTHEPASCALPROGRAMSA5REGISTERBACKINTOA5(THERMAPOINTER).*†MOVE.LƒA5OFFSET(A5),A5*A*…SAVETHEREGISTERCONTENTSNOWTHATTHERMAPOINTERISRESTORED*†MOVEM.L‚D0-D7/A0-A7,REGS(A5)*9*…CHANGETHESAVEDA5TOTHEFLOATINGPOINTPROCESSORSA5*†MOVE.Lƒ(A7)+,REGS+52(A5)**…SAVETHEERRORADDRESS*†FMOVEEƒS,INSTAD,,A,5,ERRADR**…BUILDTHEERRORNUMBERIND0.*†FMOVEEƒS,STATUS,,D,0†ROR.W„#8,D0!SWAPBYTES2†LSR.B„#2,D0!MOVEIOPCODETOTHERIGHTTWOBITS"†ANDI.Bƒ#$F,D0Œ!CLEARHIGHNIBBLE1†ORI.B„#$20,D0‹!SETERRORKINDTOFLOATINGPOINT†ROR.W„#8,D0!SWAPBYTESBACK0†MOVE.WƒD0,A0!A0=FLOATINGPOINTERRORNUMBER**…DOANOPERATINGSYSTEMABORT*†TRAP…#14!DOANEXECCALL)†DC.W…FP$ERRŒ!FORAFLOATINGPOINTERROR* *‚END_PROCƒPAGE*$*Ž**********************************"*Ž*THEFOLLOWINGISTHESPECIALƒ**Ž*COMMONSECTIONNEEDEDSO‡*#*Ž*FLOATINGPOINTISONLYNEEDED‚*"*Ž*ANDBROUGHTINWHENTHEUSERƒ*$*Ž*REQUESTSITBYDOINGAFLOATING**Ž*POINTOPERATION.*$*Ž***********************************-FINITSECTION…8…!COMMONSECTIONCALLEDFINIT†CALL.PFINIT,†RTS†END‰NOLIST‰INCLUDEƒRR.RTEQU.SA‰INCLUDEƒRR.MACROS.SA‰LIST ‰NOFORMAT*$*ˆFILERR.RTEQU.SAHASBEENINCLUDED%*ˆFILERR.MACROS.SAHASBEENINCLUDED*F‰TTL‚V2.0168KPASCALFLOATINGPOINTF-LINETRAPSIMULATORSUBROUTINEKFPOINTƒIDNT‚2,01‚68KPASCALFLOATINGPOINTF-LINETRAPSIMULATORSUBROUTINE*Ì!* ‰SECTION…8********D*….PFPOINT--THE68KPASCALTOFLOATINGPOINTF-LINETRAPSIMULATOR**…ENTRY:&*ˆALLREGISTERS=68KPASCALREGISTERS**ˆ(A7)Š=POINTERTOTHEF-LINEINSTRUCTION**…EXIT:D*ˆALLREGISTERS=68KPASCALREGISTERS,POSSIBLYMODIFIEDDUETOTHE)*˜RESULTOFTHEFLOATINGPOINTOPERATION.**…USES:2*ˆALLREGISTERSHAVETHEPOSSIBLITYOFBEINGUSED.* *…FUNCTION:7*‹THISROUTINESIMULATESANF-LINETRAPTHATWASCAUSED>*ˆBYEXECUTINGAF-LINEINSTRUCTION.‚THISROUTINEWASSUPPLIEDA*ˆTOCUTDOWNTHETIMEREQUIREDTODOAFLOATINGPOINTOPERATION.* *…EXTERNALS:*>*ˆ.PFPOINT=‚DEF,THEENTRYPOINTTOTHEF-LINETRAPSIMULATOR*E*ˆ.P68341P=‚REF,THEMAJORENTRYPOINTOFTHEFLOATINGPOINTPACKAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*1*ˆ.PZMAIN‚=‚REF,THEPASCALPROGRAMSTACKSEGMENT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<********=†XDEF….PFPOINT!THEENTRYPOINTTOTHEF-LINETRAPSIMULATOR*B†XREF….P68341P!THEMAJORENTRYPOINTOFTHEFLOATINGPT.PACKAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*1*…XREF….PZMAIN‚!THEPASCALPROGRAMSTACKSEGMENT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*;*….PFPOINT--THEF-LINETRAPSIMULATORFORPASCALPROGRAMS*ƒPROCEDURE.PFPOINT,*$*…FIRSTOFFSAVETHESTATUSREGISTER* †CLR.W„-(A7)!CLEARSPOTFORCCR"†MOVE.LƒD0,-(A7)!PUSHD0ONSTACK!†SF‡D0“!CLR.BD0W/OCHANGINGCCR%†BNE.S„CCZ’!CHECKZBIT,BRANCHIFCLR%†BSET…#6,D0!SETBIT6TO1FORZBIT(CCZƒBCC.S„CCC’!CHECKCBIT,BRANCHIFCLREˆCC %†BSET…#4,D0!SETBIT4TO1FORCBIT(CCCƒBVC.S„CCV’!CHECKVBIT,BRANCHIFCLR%†BSET…#5,D0!SETBIT5TO1FORVBIT(CCVƒBPL.S„CCN’!CHECKNBIT,BRANCHIFCLR%†BSET…#7,D0!SETBIT7TO1FORNBIT!CCNƒROXR.Bƒ#4,D0!ROTATEXBITIN †AND.W„#$1F,D0Ž!CLEARUPPERBYTE#†MOVE.WƒD0,4(A7)!SAVECCRONSTACK&†MOVE.Lƒ(A7)+,D0!RESTOREOLDD0VALUE*D*…CHECKTOSEEIFTHEREISENOUGHROOMONTHESTACKTODOAFLOATING0*…POINTOPERATIONWITHOUTOVER-RUNNINGTHEHEAP.*†LEA†-FPSTACK(A7),A7†CMP.L„HPTR(A5),A7†LEA†FPSTACK(A7),A7**…IFNOMOREROOMTHENERROR*†IFTHEN.S‰ERRORSTKHEAP†ENDI*/*…NOWSAVEALLOFTHEPASCALPROGRAMSREGISTERS*†MOVEM.L‚D0-D7/A0-A7,-(A7)*C*…MODIFYTHESAVEDVALUEOFTHESTACKPOINTERSOITPOINTSTOWHERE<*…THETOPOFTHESTACKWASWHENTHEJSRTO.PFPOINTWASDONE!*…(I.E.BELOWTHERETURNADDRESS)*†ADDQ.Lƒ#6,60(A7)*A*…SETUPTHEVALUESNEEDEDBYTHEFLOATINGPOINTPROCESSORINTHE*…PROPPERREGISTERS.*A†LEA†USER_MEM(PC),A4ƒ!A4=APOINTERTOTHEUSERMEMORYTRANSFERO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*E*…MOVE.Lƒ#FPREGS-.PZMAIN+RMASIZE,D0!D0=OFFSETFROMA5TOFPREGS.5†MOVE.Lƒ#RMASIZE,D0‡!D0=OFFSETFROMA5TOFPREGS.*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=†LEA†0(A5,D0.L),A3…!A3=APOINTERTOTHEFP.REGISTERBLOCK?†MOVE.LƒLOWHEAP(A5),A1„!A1=ADDRESSOFLOWESTADDRESSINHEAP:†LEA†-28(A1),A1ˆ!A1=APOINTERTOEXCEPTIONVECTORTABLE3†MOVE.LƒA7,A5!A5=POINTERTOTHEUSERSREGISTERS*!*…CALLTHEFLOATINGPOINTPACKAGE*†CALL‚.P68341P,*1*…RESTOREALLTHEPASCALREGISTERSEXCEPTFORA7.*†MOVEM.L‚(A7)+,D0-D7/A0-A6*-*…POPTHEOLDA7OFFTHESTACKANDIGNOREIT.* †ADDQ.Wƒ#4,A7**…RETURNTOTHECALLINGROUTINE*†MOVE.Wƒ(A7)+,CCR ƒEND_PROCƒPAGE*D*‚USER_MEM--THISROUTINETRANSFERSDATATO/FROMTHEFLOATINGPOINT7*‚PROCESSORSMEMORYAREASOUTOF/INTOTHEUSERSMEMORY*‚ARGUMENTSARE:,*…D6=‚DATASPACEORPROGRAMSPACEINDICATOR9*…D7=‚COUNTOFBYTESTOTRANSFERANDDIRECTIONINDICATOR/*…A2=‚POINTERTOF.P.PROCESSORSMEMORYBUFFER&*…A3=‚POINTERTOUSERSMEMORYOPERAND*!ƒPROCEDUREUSER_MEM,*#*…CHECKIFITISAFETCHORASTORE* †TST.W„D7†IFTHEN.S**ˆITISASTORE*.‰NEG.WD7‡!NEGATEBYTECOUNTTOMAKEPOSITIVE1‰EXGƒA2,A3„!SWAPSOURCEANDDESTINATIONPOINTERS†ENDI**…TRANSFERTHEDATA**…ISITAONEBYTETRANSFER?* †SUBQ.Wƒ#1,D7†IFTHEN.S**ˆYES,SOTRANSFERTHEBYTE*‰MOVE.Bƒ(A3),(A2)†ELSE.S**ˆITISAMULTI-BYTETRANSFER* ‰SUBQ.Wƒ#1,D7‰WHILEDO.S)ŒMOVE.Lƒ(A3)+,(A2)+!TRANSFERFOURBYTES,ŒSUBQ.Wƒ#4,D7‡!DECREMENTBYTECOUNTBYFOUR‰ENDW*/*ˆISTHERESTILLAWORDLEFTTOBETRANSFERED?*‰IFTHEN.S**‹YESSOTRANSFERTHEWORD*ŒMOVE.Wƒ(A3),(A2)‰ENDI†ENDI*(*…RETURNTOTHEFLOATINGPOINTPROCESSOR* ƒEND_PROCƒPAGE***Ž****************************************)*Ž*DECLARETHEMEMORYFORTHEFLOATING‚**Ž*REGISTERBLOCK.–***Ž*****************************************O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?*ˆSECTION‚15‡!THEREGISTERBLOCKISSECTION15(STACKSECTION) ‰OFFSETƒ0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<)FPREGSƒDS.W…29‡!RESERVE29WORDSFORIT.*ƒENDN ŠNOLISTŠINCLUDERR.FIOEQU.SAŠLIST*%*ˆFILERR.FIOEQU.SAHASBEENINCLUDED* ‰OPTPCS,FRS'‰IFEQ„VDOSEXˆ!FORVERSADOSONEXORMACS5‰TTL…V2.1268KPASCALINITIALIZERUNTIMEENVIRONMENT8INIT…IDNT„2,12‚68KPASCALINITIALIZERUNTIMEENVIRONMENT‰ENDC’!*ž!*‰IFEQ„VDOSVMˆ!FORVERSADOSONVERSAMODULE7‰TTL…V2.1268KPASCALRUNTIMEINITFORVDOSONVM01/02:INIT…IDNT„2,12ƒ68KPASCALRUNTIMEINITFORVDOSONVM01/02‰ENDC’!*ž!,‰IFEQ„RMSVM‰!FORRMS68KONLYONVERSAMODULE>‰TTL…V2.1268KPASCALRUNTIMEINITFORRMS68KONLYONVM01/02AINIT…IDNT„2,12ƒ68KPASCALRUNTIMEINITFORRMS68KONLYONVM01/02‰ENDC’!O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ‰IFEQ†VDOSEX!*ˆEXORMACSVERSIONOFINITIALIZER‰ENDC ‰IFEQ†VDOSVM$*ˆVERSAMODULEVERSIONOFINITIALIZER‰ENDC ‰IFEQ†RMSVM0*ˆVERSAMODULERMS68KONLYVERSIONOFINITIALIZER‰ENDCO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* *ˆSECTION8 ‰SECTION9*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ** COPYRIGHT 1982 MOTOROLA, INC.** 1980-04-16 : JOHN KAUFMANN*-*INIT-RUNTIMEDATAINITIALIZATION.‚COMMAND%*ˆLINESCANISDETERMINEDBYBIT0OF*ˆLOCATION.PMAIN** LAST MODIFIED:1*ˆApril19,1982byDaveStandage-Addedsupport3*ˆforVERSAdosontheVM01andVM02,andforRMS68K!*ˆplusBIOSontheVM01andVM02.*2*ˆ1982Feb08byJohnKaufmann-Correctedproblem3*ˆindeterminingsizeofcurrentstack-heapsegment/*ˆforcomparisonwithzoptionrequest.‚Changed1*ˆmovementofrmatobefromhitoloaddrsafter*ˆaddingmemoryviazoption.*/*ˆ30JULY1981BYJOHNKOEHRING-ADDEDSUPPORT-*ˆFORCHAINCOMMANDDIAGNOSTICREGISTER.‚CODE+*ˆREQUIREDTOZEROOUTREGISTERATSTARTOF *ˆEXECUTION.*%* MODIFIES REGISTERS: 0 1 2 3 4 5 6 7*“D*********“A*********˜E¡H©B±1¹DÁBÉEÑCÙMáMéFñOùJ 9* ON ENTRY (UNDER VERSADOS FOR EXORMACS OR VM01 OR VM02):*ˆD0.L„LOADINGTASKNAME*ˆD1.L„SESSIONNUMBER*ˆD2.L„DEFAULTUSERVOLUME*ˆD3.L„DEFAULTUSERNUMBER*ˆD4.L,D5.LDEFAULTCATALOG*ˆD6.W„COMMANDLINELENGTH*ˆD7.L„BITMASKOFLUN'SPASSED**ˆA1.L„DEFAULTTERMINALID*,* ON ENTRY (UNDER RMS68K FOR VM01 AND VM02):(*ˆ(ALLREGISTERSHAVEUNKNOWNCONTENTS.)* * ON EXIT (IN ALL ENVIRONMENTS):!*ˆA3.L„POINTSTOLONGJSRROUTINE&*ˆA5.L„POINTSTOSTARTOFRUNTIMEDATA&*ˆA6.L„POINTSTOSTARTOFRUNTIMEDATA&*ˆA7.L„POINTSTOSTARTOFRUNTIMEDATA* * EXTERNALS: ‰XDEF„.PINITO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*‰XDEF†ASIGNRET *ˆXDEF„.PLJSR ‰XREF†CMDLINE‰XREF†CMDLINEL ‰XREF„.PLJSR‰XREF„.PZSTARTO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</‰XREF„.PMAIN,.PZMAIN,.PVTRAPD,.PVTRAPE,.PVBUSER‰XREF„.PSYMBUG0‰XREF„.PADDRER,.PVZDIV,.PVCHKI,.PVTRAPV,.POPTION*'‰IFNE„VDOSEXˆ!NOTVERSADOSONEXORMACS** REFERENCE TO SYMBOL TO MARK THE START OF)* THE PASCAL DATA SEGMENT (IN SECTION 15)*ž!O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**ˆXREF„.PZSTART†!*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰ENDC’!*ž!*ž!******8* REFERENCE TO MAKE SURE THAT THE ALLOCATE STACK ROUTINE6*ISLOADEDSINCEINITWILLALWAYSBELOADED.‚ALSTSIS* NOT USED IN INIT.* ‰XREF„.PALSTS‰PAGE* ‰OPT…MEX‹!SHOWMACROEXPANSIONS*#* RECEIVE SEGMENT ATTRIBUTES MACRO.* \1 = SEGMENT NAME.=* (0 IN EXORMACS CASE WHERE CODE AND DATA SEGS ARE ADJACENT.)-* \2 = OFFSET INTO RMA TO PUT PARAMETER BLOCK$DORCVSA‚MACRO‘!RECEIVESEGMENTINFO9*BEGIN‚DORCVSAMACRO ***********************************:* USES A5. MODIFIES A0,D0,A1. ****************************%‰LEA…\2(A5),A0…!RECEIVESEGMENTINFO ‰CLR.Lƒ(A0)Š!‰CLR.LƒSEGSES(A0)„!*ž!‰IFC…'\1','0'†!‰MOVE.W‚#SGOPLA,SEGOPT(A0)‰CLR.WƒSEGATT(A0)„!3‰CLR.LƒSEGNAM(A0)„!NOSEGMENTNAME,STOREBINARY0‰ENDC’!‰IFNC„'\1','0'†!‰CLR.WƒSEGOPT(A0)„!‰CLR.WƒSEGATT(A0)„!1‰MOVE.L‚#'\1',SEGNAM(A0)!STORETHESEGMENTNAME‰ENDC’!*ž!‰CLR.LƒSEGLEN(A0)„!‰LEA…SEGPTR+4(A0),A1!‰MOVE.L‚A1,SEGPTR(A0)!‰MOVE.L‚A0,SEGLAD(A0)!‰MOVE.L‚#RCVSA,D0…! ‰TRAP„#1Œ!:* END OF DORCVSA MACRO ***********************************‰ENDM’!*?*GETASEGMENTFROMRMS68K.‚NAMEANDSEGLENGTHAREARGUMENTS.A* IF NAME IS '0', SEGMENT IS ALLOCATED NEXT TO EXISTING DATA SEG.DOGTSEG‚MACRO‘!9*BEGIN‚DOGTSEGMACRO***********************************?*A0ANDD0AREMODIFIED.‚D1MAYBEMODIFIED.‚\2(LEN)ISUSED.*‰LEA…DL0(A5),A0„!ALLOCATEANOTHERSEGMENT2‰MOVE.L‚\2,SEGLEN(A0)!DATABLOCKINDISPLAYAREA‰CLR.LƒSEGTCB(A0)„!‰CLR.LƒSEGSES(A0)„!*ž!&‰IFC…'\1','0'†!NOSEGMENTNAMEGIVEN.‰CLR.WƒSEGOPT(A0)„!.‰MOVE.L‚SGBRK(A5),D1‚!MAKEITCONTIGUOUSWITH%‰ADDQ.L‚#1,D1‰!CURRENTDATASEGMENT.‰MOVE.L‚D1,SEGLAD(A0)!‰MOVE.L‚D1,SEGNAM(A0)!‰ENDC’!‰IFNC„'\1','0'†!1‰MOVE.W‚#SGOPPA,SEGOPT(A0)!LETRMSSUPPLYADDR.‰CLR.LƒSEGLAD(A0)„!2‰MOVE.L‚#'\1',SEGNAM(A0)!USESEG.NAMEASIDENT.‰ENDC’!*ž!‰MOVE.W‚#SGATRW,SEGATT(A0)‰MOVE.L‚#GTSEG,D0…! ‰TRAP„#1Œ!:* END OF DOGTSEG MACRO ***********************************‰ENDM’!*2*DEALLOCATEASEGMENT.‚SEGNAMEISONLYARGUMENT.<* ASSUMES STACK POINTER DOES NOT POINT INTO DELETED SEGMENT.*DODESEG‚MACRO‘!SEGNAMEISONLYARGUMENT.9*BEGIN‚DODESEGMACRO***********************************9*USESA5.‚MODIFIESA0ANDD0.**************************(‰LEA…DL0(A5),A0„!GETSOMESCRATCHSPACE‰CLR.LƒSEGLEN(A0)„!‰CLR.LƒSEGTCB(A0)„!‰CLR.LƒSEGSES(A0)„!‰CLR.WƒSEGOPT(A0)„!‰CLR.WƒSEGATT(A0)„!‰CLR.LƒSEGLAD(A0)„!%‰MOVE.L‚#'\1',SEGNAM(A0)!STORENAME‰MOVE.L‚#DESEG,D0…!"‰TRAP„#1Œ!DEALLOCATETHESEGMENT.&‰BNE…DERRŠ!SHOULDNEVERREACHDERR...:* END OF DODESEG MACRO ***********************************‰ENDM’!*#* INITIALIZE IMPORTANT PASCAL INFO./INITINFOMACRO‘!ARGSARESTARTADDANDENDADD9*BEGIN‚INITINFOMACRO**********************************9*MODIFIES2,A3.‚USESA5.******************************:* INITIALIZES SMALLEST HEAP ADDR, HEAP POINTER, SEGMENT **:* BOUNDARY AND FREE LIST. ********************************'‰MOVEA.L\1,A2‰!GETDATASEGMENTSTART‰LEA…VTABSZ(A2),A3.‰MOVE.L‚A3,SHPAD(A5)‚!INITSMALLESTHEAPADDR"‰MOVE.L‚#-1,(A3)+…!INITFREELIST ‰CLR.Lƒ(A3)+%‰MOVE.L‚A3,HP(A5)…!INITHEAPPOINTER(‰MOVE.L‚\2,SGBRK(A5)‚!INITSEGBOUNDARY:* END OF INITINFO MACRO **********************************‰ENDM*)* INITIALIZE PASCAL RT INTERRUPT VECTORS.!* ARGUMENTS ARE TWO ERROR LABELS.INITVECSMACRO‘!9*BEGIN‚INITVECSMACRO**********************************9*USESA2.‚MODIFIESA0,A3,D0,D1.************************#‰MOVEA.LA2,A3‰!CLEARVECTORTABLE‰MOVEQ.L#VTABSZ,D1DI1\@„CLR.Lƒ(A3)+ ‰SUBQ.L‚#4,D1 ‰BNE.SƒDI1\@*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>)*‰LEA….PVTRAPD(PC),A0‚!INITTRAPVECTORS‰MOVE.L‚#.PVTRAPD,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰MOVE.L‚A0,TRAPD(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*‰LEA….PVTRAPE(PC),A0‰MOVE.L‚#.PVTRAPE,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰MOVE.L‚A0,TRAPE(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*‰LEA….PVBUSER(PC),A0‰MOVE.L‚#.PVBUSER,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰MOVE.L‚A0,BUSER(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*‰LEA….PADDRER(PC),A0‰MOVE.L‚#.PADDRER,A0O*<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰MOVE.L‚A0,ADDRER(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*‰LEA….PVZDIV(PC),A0‰MOVE.L‚#.PVZDIV,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰MOVE.L‚A0,ZDIV(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*‰LEA….PVCHKI(PC),A0‰MOVE.L‚#.PVCHKI,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰MOVE.L‚A0,CHKI(A2)O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*‰LEA….PVTRAPV(PC),A0‰MOVE.L‚#.PVTRAPV,A0O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰MOVE.L‚A0,TRAPV(A2)**‰LEA…VT2TF(A2),A0‚!RECEIVETRAPS2THRUF‰MOVE.L‚#RT2TF,D0‰TRAP„#1/‰BEQ.SƒDI2\@‰!ERRORCHECK(*NOHANDLERYET*)\2‡MOVEA.LD0,A0‰MOVE.L‚#ABORT,D0‰TRAP„#1+DI2\@„CLR.LƒD7Œ!SAVERETURNADDRFORERROR2‰LEA…VBETLF(A2),A0!RECEIVEBUSERRORTHRULINEF‰MOVE.L‚#RBETLF,D0‰TRAP„#1‰BEQ.SƒDI3\@‰!ERRORCHECK*\1‡MOVE.L‚D0,-(A7)‰MOVEQ.L#MAL,D0 ‰TRAP„#14‰DC.W„0* DI3\@„EQU…*:* END OF INITVECS MACRO **********************************‰ENDM*3* MACRO COPYRMA COPIES RMA TO ADDR POINTED TO BY A6<* FROM END ADDR POINTED TO BY A5. USES DO. UPDATES A7,A6,A5. COPYRMA‚MACRO9*BEGIN‚COPYRMAMACRO***********************************:* USES A5 AND A6. MODIFIES D0. UPDATES A5,A6,A7. *********‰MOVE.W‚#RTDSZ,D0DI33…MOVE.W‚-(A5),-(A6) ‰SUBQ.W‚#2,D0 ‰BNE.SƒDI33‰MOVEA.LA6,A7‰!..UPDATEA7,A5‰MOVEA.LA7,A5:* END OF COPYRMA MACRO ***********************************‰ENDM‰PAGE*#*ˆCONSTANTSFORUSEBYINIT.SAONLY*+SEGTLEN‚EQU…768‹!LENOFTEMPORARYSEGMENT.%*ž!MUSTHOLDRMAANDEXCEPTIONVECS.****** * ENTRY POINT***** .PINITƒEQU…* INIT…EQU…* O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>‰MOVE.L‚#RELINQ,D0‰TRAP„#1!*¦RELINQUITSHCONTROLSOTHATI/O#*¦I/OINITIALIZATIONCANTAKEPLACEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*H*ˆWithinvocationofassignmentusingthecommandlinethisisnolonger *’necessary**ˆMOVE.L„#ROMASIGN,A0 *ˆJMP‡(A0)&*¦ASSIGNLOGICALUNITSFORAPPLICATION*¦TASK&*¦THEJUMPINSTRUCTIONISUSEDBECAUSE&*§ASTACKHASNOTBEENDEFINEDATTHIS*§POINTINTIME*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ASIGNRET:)*¦RETURNADDRESSAFTERLOGICALUNITSHAVE*§BEENASSIGNEDO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  &‰IFEQ„VDOSEXˆ!IFVERSADOSONEXORMACSN*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*<*.INIT1ƒMOVE.L‚#.PZMAIN-*-RTDSZ,A7!SETA7TOSTARTOFDATA*ˆLEA….INIT1(PC,A7.L),A7**ˆA7=ADDRESSOFSEG2*!.INIT1ƒADD.L…#.PZMAIN-.PZSTART,A7‰SUB.L…#RTDSZ,A7*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<‰ENDC'‰IFNE„VDOSEXˆ!VDOSORRMSONVM01/VM021*ˆALLOCATETHETEMPORARYSEGMENT'SEGT'TOUSEIN+*ˆLIEUOF'SEG2'UNTIL'SEG2'ISVALIDATED.!‰MOVE.L‚D0,A2‰!SAVESTARTUPINFO ‰MOVE.L‚A1,A3*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**ˆIFEQ„RMSVM‰!RMSONVM01/02*ˆMOVE.L‚#RELINQ,D0„!/*ˆTRAP„#1Œ!RELINQUISHCONTROLOFTHEPROCESSOR&*ž!SOBIOSHASACHANCETOINITIALIZE*ˆENDC’!O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*+‰MOVE.L‚#GTSEG,D0…!GETATEMPORARYSEGMENT+‰LEA…PRMBLK(PC),A0!WITHTHESEPARAMETERS.‰TRAP„#1Œ!DOIT‰BNE…DERR1‰!ERRORSABORT.4*ˆ!A0NOWCONTAINSSTARTPHYSICALADDROFTHESEGT.+‰MOVEA.LA0,A7‰!INITSTACKPTRTOSTARTAD0‰ADD.Lƒ#SEGTLEN-RTDSZ-2,A7!PLUSLEN-RMASIZE$‰MOVE.L‚A2,D0‰!RESTORESTARTUPINFO‰MOVE.L‚A3,A1‰!‰E NDC ‰MOVEA.LA7,A5‰!A5:=A7‰MOVEA.LA7,A6‰!A6:=A7&‰CLR.LƒSC(A5)ˆ!STATEMENTCOUNTER:=0 (‰IFNE„RMSVM‰!VERSADOSONEXORMACSORVM+‰MOVEM.LD0-D1,LTN(A5)!SAVESTARTUPDATA‰MOVE.L‚A1,DTID(A5)‰MOVEM.LD4-D5,DCAT(A5)‰MOVE.L‚D2,DVOL(A5)‰MOVE.W‚D3,DUN(A5)‰MOVE.W‚D6,CLL(A5)‰MOVE.L‚D7,LUIU(A5)‰ENDC &‰IFEQ„RMSVM‰!RMS68KONLYONVM01/VM023*ˆINITIALIZEVERSADOSSTARTUPDATATO'SAFE'VALUES*ˆFORRMS68K+BIOSENVIRONMENT;*ˆMOVEM.LD0-D1,LTN(A5)!NONEEDTOINITLOADINGTASKNAME/‰MOVE.L‚#'CN00',DTID(A5)!SETDEFAULTTERM.ID!‰MOVE.L‚#'„',D0„!USEFULCONSTANT7‰MOVE.L‚D0,DCAT(A5)ƒ!BLANKOUT8CHARSOFCATALOGNAME‰MOVE.L‚D0,DCAT+4(A5)!6‰MOVE.L‚D0,DVOL(A5)ƒ!BLANKOUT4CHARSOFVOLUME‚NAME;‰CLR.WƒDUN(A5)‡!SETDEFAULTUSERNOTOANACCEPTABLEVALUE$‰CLR.LƒD6Œ!COMMANDLINELENGTHIS0)‰CLR.WƒCLL(A5)‡!COMMANDLINELENGTHIS0)‰CLR.LƒLUIU(A5)†!NOLOGICALUNITSINUSE‰ENDC -‰CLR.WƒCCDR(A5)†!ZEROOUTCHAINCMDDIAGREG0‰MOVE.B‚#$D,CL(A5,D6)!PUTCRATENDOFCOMMAND &‰IFEQ„VDOSEXˆ!IFVERSADOSONEXORMACS3‰DORCVSA0,EFI‰!RECEIVESEGMENTINFO,NAMEUNKNOWN‰BNE…DERR1‰!ERRORCHECK‰ENDC '‰IFNE„VDOSEXˆ!NOTVERSADOSONEXORMACS‰MOVEA.LA0,A4‰!(‰ADD.Lƒ#SEGTLEN-1,A4!CALCSEGENDADDR&‰INITINFOA0,A4ˆ!INITIMPORTANTSTUFF‰ENDC’! #‰IFEQ„VDOSEXˆ!VERSADOSONEXORMACS‰INITINFOSRELSA(A1),SRELEA(A1)‰ENDC’! '‰MOVE.W‚#EFI-OFAR,D1‚!CLEARFIELDINFO‰MOVE.W‚#OFAR,D0DI5†CLR.Lƒ0(A5,D0) ‰ADDQ.W‚#4,D0 ‰SUBQ.W‚#4,D1 ‰BHI.SƒDI5 -‰INITVECSDERR,DERR1ƒ!INITINTERRUPTVECTORS O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*H*ˆThislogichasbeenremovebecause'SEG2'willbeobtaineddynamically!*ˆconsequentlyitisnotrequired**(*ˆIFNE„VDOSEXˆ!NOTVDOSONTHEEXORMACS**ˆBSR…SEG2INFO†!RECEIVESEGINFOFORSEG2 *ˆBEQ.SƒDIOK1*&*ˆMOVEQ.L#WSN,D0‡!RUNTIMEERROR1013/*ˆTRAP„#14‹!**WRONGSEGMENTNAME,MUSTBESEG2*ˆDC.W„0*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< DIOK1„EQU…*(‰IFNE„RMSVM‰!NOTRMS68KONLYONVM01/02 O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*(*ˆ!READCOMMANDLINEFROMSEG2INTOSEGT*ˆMOVEA.LSRELSA(A1),A3B*ˆADD.Lƒ#.PZMAIN-.PZSTART-RTDSZ+CL,A3!STARTOFCOMLINEINSEG2.+*ˆLEA…CL(A5),A2…!STARTADDRFOROUTPUTBUF'*ˆMOVE.W‚CLL(A5),D0„!NOOFBYTESTODO*>*ˆ!!!FORCETHECOMMANDLINETOBETAKENFROMRROM.ASSIGNLU.RO‰LEA‡CMDLINE(PC),A3$*œA3=ADDRESSOFCMDLINETOPROCESS‰LEA‡CL(A5),A2&*œADDRESSOFCMDLINEINSEGMENT'SEGT'‰MOVE.W„CMDLINEL(PC),D0,*œD0=NUMBEROFBYTESINCMDLINETOPROCESS*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +DIITER1‚TST.WƒD0Œ!WHILEMOREBYTESTOCOPY‰BEQ.SƒDIDONE1‡!.DO%‰MOVE.B‚(A3)+,(A2)+ƒ!..COPYONEMORE(‰SUBQ.W‚#1,D0‰!..DECREMENTNUMBERTODO‰BRA.SƒDIITER1‡!.ODDIDONE1‚EQU…*! O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*A*ˆThis'ENDC'statementcorrespondstothe'IF'statementremoved*’above**ˆENDC*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ‰ENDC (‰IFNE„RMSVM‰!NOTRMS68KONLYONVM01/02‰CLR.LƒD6Œ!ZOPT:=FALSE"‰LEA…CL(A5),A2…!INITSCANPOINTER-.INIT2ƒMOVE.L‚#.PMAIN-*,D2‚!IFNOTSCANTHEN‰MOVE.W‚.INIT2(PC,D2.L),D2 ‰BTST„#0,D2#‰BNE.SƒDI4‹!.(*SCANFORZONLY*)‰MOVE.B„.PSYMBUG(PC),D1+‰TST.B…D1Š!CHECKFOR"THISISSYMBUG"FLAG'‰BNE.S…DI7‰!IFSO,DON'TSCANANYTHINGDI6†EQU…*!.DO‰BSR…GNC‹!..GETNEXTCHAR‰BEQ.SƒDI7‹!.UNTILCHAR=CR ‰CMP.Bƒ#';',D1‡!.\ORCHAR=';' ‰BNE.SƒDI6‹!.IFCHAR=';'THENDI8†EQU…*!..DODI9†EQU…*!...DO%‰MOVE.B‚D1,D5‰!....LASTCHAR:=CHAR‰BSR…GNC‹!....GETNEXTCHAR'‰CMP.Bƒ#'=',D1‡!....IFCHAR='='THEN ‰BNE.SƒDI90DI91…EQU…*!.....DO'‰MOVE.B‚D1,D5‰!......LASTCHAR:=CHAR‰BSR…GNC‹!......GETNEXT CHAR!‰BEQ.SƒDI7‹!.....UNTILCHAR=CR$‰CMP.Bƒ#',',D1‡!.....\ORCHAR=',' ‰BNE.SƒDI91DI90…EQU…*!....FI"‰CMP.Bƒ#$D,D1ˆ!...UNTILCHAR=CR ‰BEQ.SƒDI7"‰CMP.Bƒ#'Z',D1‡!...\ORCHAR='Z' ‰BNE.SƒDI9‰BSR…SCANZ‰!...SCANZOPTION!‰CMP.Bƒ#$D,D1ˆ!..UNTILCHAR=CR ‰BNE.SƒDI8DI7†EQU…*!.FI‰BRA…DI10Š!ELSE DI4†EQU…*‰CLR.WƒD0Œ!.FIELDNUM:=0DI11…EQU…*!.DO‰BSR…GNC‹!..GETNEXTCHAR$‰CMP.Bƒ#'',D1‡!.UNTILCHAR#SPACE ‰BEQ.SƒDI11‰CMP.Bƒ#$D,D1ˆ!.IFCHAR#CR ‰BEQ…DI95&‰CMP.Bƒ#';',D1‡!.\ANDCHAR#';'THEN ‰BEQ…DI95DI12…EQU…*!..DO.‰LEA…FNNF(A5),A0ƒ!...CALCADDRFROMFIELDNUM ‰LSL.Lƒ#2,D0‰LEA…0(A0,D0),A0 ‰LSR.Lƒ#2,D0%‰CLR.BƒD2Œ!...SPECIALFIELD:=FALSE&‰CMP.Bƒ#'I',D1‡!...IFCHAR='I'THEN ‰BNE.SƒDI13‰BSR…GNC‹!....GETNEXTCHAR'‰CMP.Bƒ#'=',D1‡!....IFCHAR='='THEN ‰BNE.SƒDI14(‰LEA…IENF(A5),A0ƒ!.....ADDR:=I=FIELD+‰MOVEQ.L#1,D2‰!.....SPECIALFIELD:=TRUE‰BSR…GNC‹!.....GETNEXTCHAR‰BRA.SƒDI15Š!....ELSE DI14…EQU…*‰BSR…BACKSPˆ!.....BACKSPACEDI15…EQU…*!....FI‰BRA.SƒDI16Š!...ELSE DI13…EQU…*'‰CMP.Bƒ#'O',D1‡!....IFCHAR='O'THEN ‰BNE.SƒDI17‰BSR…GNC‹!.....GETNEXTCHAR(‰CMP.Bƒ#'=',D1‡!.....IFCHAR='='THEN ‰BNE.SƒDI18)‰LEA…OENF(A5),A0ƒ!......ADDR:=O=FIELD,‰MOVEQ.L#1,D2‰!......SPECIALFIELD:=TRUE‰BSR…GNC‹!......GETNEXTCHAR‰BRA.SƒDI19Š!.....ELSE DI18…EQU…*‰BSR…BACKSPˆ!......BACKSPACEDI19…EQU…*!.....FIDI17…EQU…*!....FIDI16…EQU…*!...FI#‰TST.BƒD2Œ!...IFNOTSPECIALFIELD ‰BNE.SƒDI20+‰CMP.Wƒ#16,D0ˆ!...\ANDFIELDNUM=16THEN ‰BNE.SƒDI20‰MOVEQ.L#CLF,D0ˆ!....ERROR ‰TRAP„#14‰DC.W„0DI20…EQU…*!...FI8‰LEA…CL+1(A5),A1ƒ!...FIELDSTARTOFF:=CHARPTR-(CL+1) ‰MOVE.L‚A2,D3 ‰SUB.LƒA1,D3‰MOVE.B‚D3,2(A0)4‰MOVE.B‚D3,3(A0)†!...CURRENTOFF:=FIELDSTARTOFF‰BSR…SCANF‰!...SCANFILES(‰TST.BƒD2Œ!...IFNOTSPECIALFIELDTHEN ‰BNE.SƒDI21.‰ADDQ.W‚#1,D0‰!....FIELDNUM:=FIELDNUM+1DI21…EQU…*!...FI!‰CMP.Bƒ#$D,D1ˆ!..UNTILCHAR=CR ‰BEQ.SƒDI22!‰CMP.Bƒ#';',D1‡!..\ORCHAR=';' ‰BNE…DI12 DI22…EQU…*,‰MOVE.W‚D0,NFCL(A5)ƒ!..UPDATENUMOFFIELDSDI95…EQU…*!.FI$‰CMP.Bƒ#';',D1‡!.IFCHAR=';'THEN ‰BNE.SƒDI23DI24…EQU…*!..DO$‰MOVE.B‚D1,D5‰!...LASTCHAR:=CHAR‰BSR…GNC‹!...GETNEXTCHAR&‰CMP.Bƒ#'=',D1‡!...IFCHAR='='THEN ‰BNE.SƒDI25DI26…EQU…*!....DO&‰MOVE.B‚D1,D5‰!.....LASTCHAR:=CHAR‰BSR…GNC‹!.....GETNEXTCHAR!‰BEQ.SƒDI27Š!....UNTILCHAR=CR#‰CMP.Bƒ#',',D1‡!....\ORCHAR=',' ‰BNE.SƒDI26 DI27…EQU…*DI25…EQU…*!...FI‰CMP.Bƒ#$D,D1ˆ!...IFCHAR#CR ‰BEQ.SƒDI28(‰CMP.Bƒ#'Z',D1‡!...\ANDCHAR#'Z'THEN ‰BEQ.SƒDI28*‰CMP.Bƒ#'A',D1‡!....IFCHARISALPHATHEN ‰BCS.SƒDI29‰CMP.Bƒ#'Z'+1,D1 ‰BCC.SƒDI29-‰LEA…CL+1(A5),A1ƒ!.....CALCOFFSETTOOPTION ‰MOVE.L‚A2,D4 ‰SUB.LƒA1,D4-‰CMP.Bƒ#'-',D5‡!.....IFLASTCHAR='-'THEN ‰BNE.SƒDI30‰NEG.WƒD4Œ!......NEGATEOFFSETDI30…EQU…*!.....FI‰EXT.WƒD1Œ!.....UPDATEOFFSET ‰LSL.Lƒ#1,D1‰LEA…OFAR-$82(A5),A3‰MOVE.W‚D4,0(A3,D1)DI29…EQU…*!....FIDI28…EQU…*!...FI‰BSR…SCANZ‰!...SCANZOPTION!‰CMP.Bƒ#$D,D1ˆ!..UNTILCHAR=CR ‰BNE.SƒDI24DI23…EQU…*!.FIDI10…EQU…*!FI‰TST.BƒD6Œ!IFZOPTIONTHEN '‰IFEQ„VDOSEXˆ!VERSADOSONTHEEXORMACS ‰BEQ.SƒDI315‰LEA…RTDSZ+VTABSZ+2(A5),A0!.IFREQSZ>CURSZTHEN‰MOVE.L‚SHPAD(A5),D1 ‰SUBA.L‚D1,A0 ‰ASL.Lƒ#8,D3 ‰ASL.Lƒ#2,D3 ‰SUB.LƒA0,D3 ‰BLS.SƒDI31*ž!ALLOCATEADDITIONALSEGMENT)‰DOGTSEG0,D3Š!NOSEGNAME,LENGTHIND3‰BNE…DERRŠ!..ERRORCHECK*'‰LEA…RTDSZ(A7),A6‚!..MOVERUNTIMEDATA ‰ADDA.L‚D3,A6‰LEA…RTDSZ(A5),A5'*ž!COPIESRMATOADDRPOINTEDTOBYA6"*ž!FROMENDADDRPOINTEDTOBYA5%‰COPYRMA!USESDO.UPDATESA7,A6,A5.!‰ENDC’!VERSADOSONEXORMACSONLY*$‰IFEQ„VDOSVMˆ!VERSADOSONVM01/VM02 ‰BEQ…DI31!‰ASL.Lƒ#8,D3‰!MULTIPLYZBY1024 ‰ASL.Lƒ#2,D3 O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*D*ˆThislogichasbeenreplacedwithamovetoregisterD4.Thevalue9*’int heregisteristhemaximumvalueD4couldhavewith*’thecurrentlogic**ˆBSR…SEG2INFO5*ˆMOVE.L‚SRELEA(A1),D4!CALCULATESIZEOFUSERBLOCK*ˆSUB.LƒSRELSA(A1),D4*ˆSUB.Lƒ#.PZMAIN-.PZSTART+1,D4 ‰MOVE.L„#254,D4**œD4=MAXIMUMVALUEIFCURRENTLOGICUSED*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< * O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>**ˆCMPI.L‚#.PZMAIN-.PZSTART+2,D3 *ˆBLS.SƒDI31(„IF.L‹#.PZMAIN-.PZSTART+2D3ƒTHEN.S‰MOVE.L„#.PZMAIN-.PZSTART+2,D3„ENDI*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $‰ADD.LƒD4,D3‰!Z-OPTION+USERBLOCK#‰ADD.Lƒ#255,D3‡!ROUNDSEGMENTSIZE ‰CLR.BƒD3 O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*H*ˆDeletionof'SEG2'nolongerrequiredsinceitisacquireddynamically*-*ˆFIRSTDELETEOFFPREVIOUS'SEG2'VIADESEG.*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< %*ˆTHENALLOCATEANEWSEGMENT'SEG2'.*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*H*ˆDeletionof'SEG2'nolongerrequiredsinceitisacquireddynamically**ˆDODESEGƒSEG2*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< *‰DOGTSEGƒSEG2,D3…!NAME,LEN ‰BNE‡DERR ‰SUB.L…D4,D3‡!REMOVEUSERBLOCK1‰SUB.L…#.PZMAIN-.PZSTART+2,D3!REMOVESTACK/HEAP ‰BRA.S…DI32‰ENDC DI31…EQU‡*‹!FI‰ENDC’!ENDOFNON-RMS68KSTUFF '‰IFNE„VDOSEXˆ!VDOSORRMSONVM01/VM02 ‰CLR.LƒD3 DI32…EQU…*)‰BSR…SEG2INFO†!RECEIVESEGINFOFORSEG2*‰MOVEA.LSRELSA(A1),A6!GETSTARTADDRESS‰ADD.Lƒ#.PZMAIN-.PZSTART,A6‰ADD.LƒD3,A6‰!NEWENDOFRMA*&‰LEA…RTDSZ(A5),A5‚!CURRENTENDOFRMA.‰COPYRMA!COPIESRMATOADDRPOINTEDTOBYA6"*ž!FROMENDADDRPOINTEDTOBYA5*ž!USESDO.UPDATESA7,A6,A5.3‰INITINFOSRELSA(A1),SRELEA(A1)!INITHEAPPOINTER‰INITVECSDERR2,DERR3 ‰DODESEGSEGT‰ENDC O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+*ˆLEA….PLJSR(PC),A3!INITLONGJSRPOINTER*‰MOVE.L„#.PLJSR,A3O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*,*ˆCALLFLOATINGPOINTINITROUTINEIFNEEDED* ‰BSR…INITFPF.INIT3ƒMOVE.L‚#.PMAIN-*,D0‚!STARTMAINPROGRAMRELATIVEAT.PMAIN+2‰JMP….INIT3+2(PC,D0.L)‰PAGE** SUPPORT ROUTINES FOR INIT*'‰IFNE„VDOSEXˆ!VDOSORRMSONVM01/VM02** THIS SUBROUTINE MODIFIES D0, A0, AND A1.* IT USES A5 (RMA POINTER)./* IT ALSO USES THE PARAMETER BLOCK FROM EOD(A5)5* TO EOD+$1B(A5) FOR INPUT TO THE RCVSA TRAP #1 CALL.+* IT RETURNS SEGMENT INFO FOR 'SEG2' IN THE?* PARAMETER BLOCK DENOTED BY EOD+$1C(A5) (AND ALSO A1 ON EXIT).SEG2INFOEQU…*!*‰DORCVSASEG2,EOD†!FINDOUTSEGMENTADDRS‰RTS“!‰ENDC’!**%‰IFNE„RMSVM‡!NOTRMS68KONVM01/VM02**BACKSP‚BACKUPACHARACTER*BACKSPƒIF.BD1#$DTHEN.S ‰SUB.L#1,A2‰ENDI ‰SUB.L#1,A2*FALLTHROUGH‚TOGNC *,*GNC-GETNEXTCHARACTER.‚A2POINTSATTHE%*ˆSTRINGBEINGSCANNED.‚THECHARACTER&*ˆISRETURNEDIND1.‚THEZFLAGISSET(*ˆIFTHECHARACTERISACARRIAGERETURN.* GNC†EQU…*4‰MOVE.B‚(A2)+,D1†!GETCURRENTCHAR&UPDATEPOINTER!‰CMP.Bƒ#$D,D1ˆ!IFCHAR=CRTHEN ‰BNE.SƒGNC1‰SUBQ.L‚#1,A2‰!.DECPOINTERGNC1…EQU…*!FI ‰RTS“!END‰SPC…1*/*SCANZ-SCANZOPTION.‚A2POINTSTOCHARACTER)*ˆPASTZ.‚A2WILLBEUPDATEDTOCHARACTER(*ˆPASTENDOFZOPTIONFIELD.‚CHECKSFOR(*ˆERRORINOPTIONFIELD.‚EQUALSVALUEIS*ˆRETURNEDIND3.* SCANZ„EQU…*#‰CMP.Bƒ#'Z',D1‡!IFCHAR='Z'THEN ‰BNE.SƒSZ1)‰CMP.Bƒ#'-',D5‡!.IFLASTCHAR='-'THEN‰BEQ.SƒSZ3‹!..ERRORSZ2†EQU…*!.FI‰SUBQ.L‚#1,A2‰!.DECPOINTER)‰BSR….POPTION†!.OPTION(*GET=VALUE*)‰BTST„#4,D0‰!.ERRORCHECK ‰BEQ.SƒSZ4‰AND.Bƒ#$AA,D0 ‰BEQ.SƒSZ5SZ4†MOVE.L‚D0,-(A7)SZ3†MOVEQ.L#MAL,D0 ‰TRA P„#14‰DC.W„0"SZ5†MOVEQ.L#1,D6‰!.ZOPT:=TRUESZ1†EQU…*!FI ‰RTS“!END‰SPC…1*/*SCANF-SCANFILES.‚COUNTSNUMBEROFFILESIN(*ˆFILELISTWITHINAFIELD.‚A2POINTSTO)*ˆLINEBEINGSCANNED.‚COUNTOFFILESWILL)*ˆBEPLACEDINFIELDINFOAREA.‚A0POINTS#*ˆTOSTARTOFFIELDAREA.‚CHARACTER'*ˆATSTARTOFFIELDISIND1.‚CHARACTER+*ˆTERMINATINGFIELDWILLBERETURNEDIND1.&*ˆA2WILLBERETURNEDPOINTINGATNEXT *ˆCHARACTER.* SCANF„EQU…*"‰MOVE.B‚#',',D5‡!LASTCHAR:=','‰CLR.Bƒ(A0)Š!NUMFILES:=0SF1†EQU…*!DO"‰CMP.Bƒ#'/',D1‡!.WHILECHAR='/' ‰BNE.SƒSF2-‰ADDQ.B‚#1,(A0)‡!.NUMFILES:=NUMFILES+1"‰MOVE.B‚D1,D5‰!.LASTCHAR:=CHAR‰BSR…GNC‹!.GETNEXTCHAR‰BRA.SƒSF1‹!OD SF2†EQU…*SF3†EQU…*!DO ‰CMP.Bƒ#$D,D1ˆ!.WHILECHAR#CR ‰BEQ.SƒSF4!‰CMP.Bƒ#';',D1‡!.\ANDCHAR#';' ‰BEQ.SƒSF4!‰CMP.Bƒ#',',D1‡!.\ANDCHAR#',' ‰BEQ.SƒSF4-‰ADDQ.B‚#1,(A0)‡!.NUMFILES:=NUMFILES+1SF5†EQU…*!.DO‰CLR.BƒD5Œ!..LASTCHAR:=NULL‰BSR…GNC‹!..GETNEXTCHAR‰BEQ.SƒSF3‹!.UNTILCHAR=CR ‰CMP.Bƒ#';',D1‡!.\ORCHAR=';' ‰BEQ.SƒSF3 ‰CMP.Bƒ#',',D1‡!.\ORCHAR=',' ‰BEQ.SƒSF3 ‰CMP.Bƒ#'/',D1‡!.\ORCHAR='/' ‰BNE.SƒSF5‰BRA.SƒSF3‹!OD SF4†EQU…*(‰CMP.Bƒ#'/',D5‡!IFLASTCHAR='/'THEN ‰BNE.SƒSF6-‰ADDQ.B‚#1,(A0)‡!.NUMFILES:=NUMFILES+1SF6†EQU…*!FI#‰CMP.Bƒ#',',D1‡!IFCHAR=','THEN ‰BNE.SƒSF7‰BSR…GNC‹!.GETNEXTCHARSF7†EQU…*!FI ‰RTS“!END"‰ENDC’!ENDOFROUTINESNOTUSEFUL*ž!TORMS68KONVM01/VM02 ‰PAGEO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** .PLJSR - LONG JSR ROUTINE* *.PLJSRƒEQU…*%*ˆMOVE.L‚(A7),A4‡!GETRETURNADDRESS%*ˆADD.Lƒ#4,(A7)‡!CORRECTITONSTACK'*ˆADD.Lƒ(A4),A4‡!CALCULATEDESTINATION*ˆJMP…(A4)Š!GOTOIT*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'‰IFNE„VDOSEXˆ!NOTVERSADOSONEXORMACS$PRMBLKƒDC.L„0!DON'TKNOWTASKNAME‰DC.L„0!SESSION'‰DC.W„SGOPPAˆ!LETRMS68KPICKTHEADDR!‰DC.W„SGATRWˆ!READ/WRITESEGMENT‰DC.L„'SEGT'ˆ!SEGMENTNAME%‰DC.L„0!STARTLOGICALADDR(IF<>0)'‰DC.L„SEGTLEN‡!SEGMENTLENGTHINBYTES‰ENDC’! ‰PAGE*C*‚FINIT-THECOMMONSECTIONUSEDFORLINKAGETOTHEFLOATINGPOINT*ŠPACKAGEIFPRESENT*O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*FINIT„SECTION8FINIT„SECTION9O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</INITFPƒRTS“!RETURNTOINITUNLESSOVERWRITTEN* ‰END…INITNNNNN N*<*ˆThefileIOSRR.WRR.SAhasdefinedanexternalreferenceto>*ˆ'.PFPOINT'.SincethisversionoftheromlibraryforPASCAL<*ˆdoesnotsupportfloatingpointprocessingthisdummyfile5*ˆhasbeencreatedtosatisfytheexternalreference.A*ˆThislocationshouldnotbeaccessedsincethereisnofloatingA*ˆpointcapabilityforthisversionofthelibrary,howeverifbyC*ˆchanceitshouldhapppenanillegalinstructionwillbeexecuted.** ‰SECTION8‰XDEF†.PFPOINT .PFPOINT: ‰DC.W†$4AFC/*œIFBYCHANCESOMEONESHOULDTRYANDREFERENCE+*œTHISLOCATIONANILLEGALINSTRUCTIONWILL$*œBEEXECUTEDBRINGTHESYSTEMDOWN.‰END NNNNN O*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*?*ˆThisroutinewasremovedfromtheinitilaizerandplacedback,*ˆinthelibrarybecauseofitsheavyusage.* ‰SECTIONƒ8* ‰XDEF†.PLJSR** .PLJSR - LONG JSR ROUTINE* .PLJSRƒEQU‡*$‰MOVE.L„(A7),A4!GETRETURNADDRESS$‰ADD.L…#4,(A7)!CORRECTITONSTACK&‰ADD.L…(A4),A4!CALCULATEDESTINATION‰JMP‡(A4)!GOTOIT* ‰END‡.PLJSRO*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<NNN  NN'RR FIOEQU SA'' 4  FPMACRO SAPPB  MACROS SAiiU  RTEQU SArrˆ  VDOSVM SA‹‹  +********************************************* PASCAL FILE I/O EQUATES** COPYRIGHT 1982 MOTOROLA, INC.**VERSION‚2.01:4-19-82** 1980-04-11 : JOHN KAUFMANN*+********************************************%*ˆDATASTRUCTURESANDEQUATESFORI/O**$*FHSPARAMETERBLOCKDATASTRUCTURE* ‰OFFSET0FHSCMDƒDS.W1COMMANDFHSOPTƒDS.W1OPTIONSFHSSTAƒDS.B1STATUS!FHSLUNƒDS.B1LOGICALUNITNUMBERFHSVOLƒDS.B4VOLUMENAMEFHSUSNƒDS.W1USERNUMBERFHSCLGƒDS.B8CATALOGNAMEFHSFILƒDS.B8FILENAMEFHSEXTƒDS.B2EXTENSIONFHSGENƒDS.W1RESERVED FHSWCDƒDS.B1WRITEPROTECTCODEFHSRCDƒDS.B1READPROTECTCODE#FHSLRLƒDS.W1LOGICALRECORDLENGTH7FHSSIZƒDS.L1CONTIGUOUSFILESIZE/DIR.ENTRYPOINTER* FOR NONCONTIGUOUS FILES‰OFFSETFHSSIZFHSRESƒDS.B1UNUSED'FHSKEYƒDS.B1KEYLENGTH(0IFNOKEYS)FHSFABƒDS.B1FABSIZEFHSDATƒDS.B1DATABLOCKSIZE"FHSBLNƒEQU‚*LENGTHOFPARAMBLOCK**FHSCMDEQUATES(16BITS)*'FHALLOƒEQU$80ALLOCATE(CREATEAFILE)FHASGNƒEQU$40ASSIGN(OPEN)FHCLOSƒEQU$4CLOSEFHDELTƒEQU$2DELETE#FHRATTƒEQU$180RETRIEVEATTRIBUTES**ˆEQUATESFORLUASSIGNMENTS* CDFLUNƒEQU…5“CMDDEVICE/FILELUN LDFLUNƒEQU…6“LOGDEVICE/FIELLUN**FHSOPTEQUATES(16BITS)#*ACCESS PERMISSION FIELD (BITS 0-2)*)FAPBIT EQU $7 BITS FOR ACCESS PERM. FIELDFOPPR„EQU0PUBLICREADFOPER„EQU1EXCLUSIVEREADFOPPW„EQU2PUBLICWRITEFOPEW„EQU3EXCLUSIVEWRITEFOPPRPW‚EQU4PUBLICREAD-WRITE*FOPPREW‚EQU5PUBLICREAD,EXCLUSIVEWRITE*FOPERPW‚EQU6EXCLUSIVEREAD,PUBLICWRITE"FOPEREW‚EQU7EXCLUSIVEREAD-WRITE**OVERWRITE FIELD (BIT 3)FOPOVRT‚EQU8OVERWRITEFILE*$* ALLOCATE DATA BUFFER FIELD (BIT 5)*FOPABF EQU $20 ALLOCATE SHARED DATA BUFFER**POSITION FIELD (BIT 6)*FOPBEG EQU 0 POSITION AT BEGINNING OF FILE&FOPEND EQU $40 POSITION AT END OF FILE*!*RESERVED FIELD (BITS 7 NOT USED)**FILE TYPE FIELD (BITS 8-10)"FFTBIT EQU $700 BITS FOR FILE TYPEFOPCON‚EQU0CONTIGUOUSQ(N0G8I@  $FOPSEQƒEQU$100SEQUENTIAL(FRL/VRL)CFOPISKƒEQU$200KEYEDRECORD,INDEXEDSEQUENTIAL,NODUPLICATEKEYS,FOPISDƒEQU$300",",DUPLICATEKEYSALLOWED*!*RESERVED FIELD (BIT 11 NOT USED)*#*USER ATTRIBUTES FIELD (BITS 15-12))FUSBITƒEQU$F000BITSFORUSERATTRIBUTES**FHSSTAEQUATES(8BITS)*"FSTADNM‚EQU$5DUPLICATEFILENAME‰PAGE**IOSPARAMETERBLOCKSTRUCTURE* ‰OFFSET0IOSFCTƒDS.W1FUNCTIONIOSOPTƒDS.W1OPTIONSIOSSTAƒDS.B1STATUS!IOSLUNƒDS.B1LOGICALUNITNUMBERIOSSRVƒDS.B1RESERVED IOSPKLƒDS.B1PARTIALKEYLENGTH.IOSRRNƒDS.L1RANDOMRECORDNUMBER:LRNORLSN"IOSSADƒDS.L1STARTBUFFERADDRESS IOSEADƒDS.L1ENDBUFFERADDRESS IOSLENƒDS.L1LENGTHOFTRANSFER IOSCADƒDS.L1COMPLETIONADDRESS"IOSBLNƒEQU‚*LENGTHOFPARAMBLOCK**IOSFCTEQUATES(16BITS)*IOREADƒEQU$1READREQUESTIOWRITƒEQU$2WRITEREQUESTIOREWDƒEQU$102REWIND**IOSOPTEQUATES(16BITS)*IOPASCƒEQU0ASCIIIOPWAT EQU 0 WAIT"IOPUNPƒEQU0UNCONDITIONALPROCEEDIOPFORƒEQU0FORMATTEDIOPECH EQU 0 ECHO MODEIOPRECƒEQU0RECORDACCESSIOPLRNƒEQU0LOGICALRECORDIOIOPKEYƒEQU0FULLKEYACCESS"IOPNOCƒEQU0NOCOMPLETIONADDRESSIOPINF EQU 0 INPUT FORMATTEDIOPBINƒEQU1BINARY6IOPPOSƒEQU$6000BITS13-14:LOGICALACCESS/POSITIONIOPNXTƒEQU$0„NEXT(FORWARD)/>%IOPCUR EQU $2000 CURRENT POSITION / ='IOPPRVƒEQU$4000PREVIOUS(BACKWARD)/<2IOPRANƒEQU$6000RANDOM(LRNORLSNGIVEN)/>OR=**IOSSTAEQUATES(8BITS)*ISTAEOF‚EQU$C2ENDOFFILE‰PAGE*"*ŒSEGMENTDIRECTORPARAMETERBLOCK* ‰OFFSET0%SEGTCBƒDS.B4—TASKTORECEIVESEGMENT!SEGSESƒDS.B4—TASKSESSIONNUMBERSEGOPTƒDS.W1—OPTIONSSEGATTƒDS.W1—ATTRIBUTESSEGNAMƒDS.B4—SEGMENTNAME(SEGLADƒDS.L1—LOGICALADDRESSOFSEGMENT*SEGLENƒDS.L1—LENGTH(INBYTES)OFSEGMENT)SEGPTRƒDS.L1—POINTERTORECEIVINGBUFFER*&*ˆRECEIVINGBUFFERFOR'REC.SEG.ATTR.'* ‰OFFSET0SRENAMƒDS.B4—SEGMENTNAMESREATTƒDS.W1—ATTRIUBTES#SRELSAƒDS.L1—LOGICALSTARTADDRESS!SRELEAƒDS.L1—LOGICALENDADDRESSSREPADƒDS.L1—PHYSICALADDRESSSRELENƒDS.L1—LENGTH* *ˆEQUATESFOR'SEGATT'(16BITS)*SGATROƒEQU…$4000READONLYSGATRWƒEQU…0”READ/WRITE!SGATSSƒEQU…$2000SESSIONSHARABLE!SGATNSƒEQU…0”NOTSESSIONSHARABLE"SGATGSƒEQU…$1000GLOBALLYSHARABLE"SGATNGƒEQU…0”NOTGLOBALLYSHARABLE%SGATDPƒEQU…$800‘SEGMENTISDUPLICATED&SGATNDƒEQU…0”SEGMENTISNOTDUPLICATED.SGATSDƒEQU…$400‘SEGMENTSHARABLEIFDUPLICATED/SGATNNƒEQU…0”SEGMENTNOTSHARABLEIFDUPLICATED* *ˆEQUATESFOR'SEGOPT'(16BITS)*8SGOPATƒEQU…$800015ATTRIBUTESGIVEN:TRSEG,DCLSHR,SETSAASGOPLAƒEQU…$4000Š14LOGICALADDRESS(NOTNAME):TRSEG,SETSA,RCVSADSGOPPAƒEQU…$2000†13SETLOGICALADDR.=PHYSICALADDR.(RETADRINA0):!*›GTSEG,TRSEG,ATTSEG,SHRSEG,SETSA0SGOPSPƒEQU…$100012MAKEPERMANENT:DCLSHR,SETSA8SGOPRPƒEQU…$080011REMOVEPERMANENTSTATUS:DESEG,SETSA1SGOPSLƒEQU…$040010SEGMENTLENGTH:SHRSEG,ATTSEG;SGOPLGƒEQU…$0200‰9ALLOCATENEXTLARGERBLOCKIFSIZEERROR‰PAGE*Æ*ˆTRAP1EQUATES°*ÆGTSEG„EQU‚1ALLOCATESEGMENT™DESEG„EQU‚2DEALLOCATESEGMENT"RELINQƒEQU‚22ŽRELINQUISHEXECUTION'RCVSA„EQU‚9RECEIVESEGMENTATTRIBUTESABORT„EQU‚14ŽABORTTASK(SELF)+RBETLFƒEQU‚26ŽRECEIVEBUSERRORTHRULINEF&RT2TF„EQU‚27ŽRECEIVETRAPS2THROUGHF‰SPC…10*$* VECTOR TABLE FOR TRAPS 2 THROUGH F* ‰OFFSET0 VT2TF„DS.L„11TRAPD„DS.L„1TRAPDTRAPE„DS.L„1TRAPE *3* VECTOR TABLE FOR BUS ERROR THRU LINE F EXCEPTIONS*‰OFFSET‚VT2TF+56 VBETLFƒEQU…*BUSER„DS.L„1BUSERRORADDRERƒDS.L„1ADDRESSERROR‰DS.L„1UNUSEDZDIV…DS.L„1ZERODIVIDECHKI…DS.L„1CHKINSTRUCTIONTRAPV„DS.L„1TRAPVINSTRUCTIONVTABSZƒEQU…VBETLF+40‰PAGE-* RUNTIME DATA MAINTAINENCE - OFFSETS FROM A5 ‰OFFSET‚0SC‡DS.L„1STATEMENTCOUNTERHP‡DS.L„1HEAPPOINTERDL0†DS.L„8DISPLAYLEVEL0LTN†DS.B„4LOADINGTASKNAMESN‡DS.B„4SESSIONNUMBERLUIU…DS.L„1LU'SINUSECCDR…DS.W„1CHAINCMDDIAGREGDTID…DS.B„4DEFAULTTERMINALIDDVOL…DS.B„4DEFAULTUSERVOLUME  DUN†DS.W„1DEFAULTUSERNUMBERDCAT…DS.B„8DEFAULTCATALOGCLL†DS.W„1COMMANDLINELENGTHCL‡DS.B„162‹COMMANDLINEOFAR…DS.W„26ŒOPTIONFIELDARRAY‰DS.W„1UNUSED"NFCL…DS.W„1NUMBEROFFIELDSINCLIENF…DS.B„1I=NUMBEROFFILESIECF…DS.B„1I=CURRENTFILEIEOF…DS.B„1I=OFFSET"IECO…DS.B„1I=CURRENTFILEOFFSETOENF…DS.B„1O=NUMBEROFFILESOECF…DS.B„1O=CURRENTFILEOEOF…DS.B„1O=OFFSETOECO…DS.B„1O=CURRENTOFFSET#FNNF…DS.B„1FIELDNNUMBEROFFILES FNCF…DS.B„1FIELDNCURRENTFILEFNOF…DS.B„1FIELDNOFFSET"FNCO…DS.B„1FIELDNCURRENTOFFSET'‰DS.B„4*15ŠABOVEINFOFOR15MOREFILESEFI†EQU…*ENDOFFIELDINFO"SGBRK„DS.L„1SEGMENTBREAKADDRESSSHPAD„DS.L„1SMALLESTHEAPADDR2EOD†EQU…*ENDOFDATANEEDEDDURINGINITIALIZATION&‰DS.B„72ŒRUNTIMEERRORROUTINESTORAGERTDSZ„EQU…*RUNTIMEDATASIZE (* FILE POINTER - OFFSETS FROM INITIAL A0 ‰OFFSET‚0$CCP†DS.L„1CURRENTCOMPONENTPOINTER"FDP†DS.L„1FILEDESCRIPTORPOINTER =* FILE PARAMETER BLOCK - OFFSETS FROM FILE DESCRIPTOR POINTER*ˆPASCALPARAMETERBLOCK ‰OFFSET‚0FP‡DS.L„1FILEPOSITIONPFS†DS.W„1PASCALFILESTATUSCS‡DS.W„1COMPONENTSIZE*ˆIOSPARAMETERBLOCKIOS†DS.B„IOSBLN*ˆFHSPARAMETERBLOCKFHS†DS.B„FHSBLN*ˆMOREFILESTATUSFSR†DS.W„1RESERVEDFSSCN„DS.B„1FILESCANSTATUSFPOS…DS.B„1FILEPOSITION*ˆCOMPONENTBUFFERCB‡EQU…*TXTBS„EQU…132‹TEXTBUFFERSIZE )* PASCAL FILE STATUS WORD BIT ASSIGNMENTSPFSSO„EQU…0STANDARDOUTPUTPFSSI„EQU…1STANDARDINPUTPFSTF„EQU…2TEXTFILEPFSLF„EQU…3LOCALFILEPFSIF„EQU…4INDEXEDFILEPFSOP„EQU…6OPENPFSEOFƒEQU…7ENDOFFILEPFSEOLN‚EQU…8ENDOFLINEPFSPA„EQU…9PASSEDASSIGNED'PFSAPCƒEQU…10ŒACCESSPERMISSIONCHANGEDPFSCLFƒEQU…11ŒCOMMANDLINEFILEPFSOUTƒEQU…12ŒOUTPUTISTAT„EQU…$3F‹INITIALSTATUS * ADDITIONAL LU EQUATEMAXLU„EQU…31ŒMAXIMUMVALIDLU * ERROR EQUATES OSE†EQU…0OPERATINGSYSTEMERROR#LUA†EQU…$40‹LOGICALUNITASSIGNMENTNAM†EQU…$28‹FILENAMEOPT†EQU…$41‹OPTIONMAL†EQU…$12‹MEMORYALLOCATION:WSN†EQU…$13‹WRONGSEGMENTNAME,MUSTBE'SEG2'(VM0XONLY)%CLF†EQU…$42‹TOOMANYCMNDLINEFIELDSFNR†EQU…$43‹FILENOTRESETFNW†EQU…$44‹FILENOTREWRITTEN‰PAGENNNNNNN  ‰PAGE ˆOPT‡MEX3ˆXREF†.PFPOINTƒ!THEF_LINETRAPSIMULATINGROUTINE O******* Definition of Special FP Registers (and their bit field values) ******* CNTRL„EQU‡0 STATUSƒEQU‡1 TMPSTAT‚EQU‡2 INSTADƒEQU‡3 O******* Definition of FP instruction "data types" (size codes, bits 5-3) ****** .FP.S„EQU‡0 .FP.D„EQU‡8 .FP.X„EQU‡$10 .FP.B„EQU‡$18 .FP.W„EQU‡$20 .FP.…EQU‡$20 .FP.L„EQU‡$28 .FP.P„EQU‡$30.FP.PDYNEQU‡$38‘('K'dynamic)  ‰PAGE FMOVE„MACRO‰NOLIST?‰IFC‡'\4','FP'.........movetoFPn.......................... !‰IFC‡'\1','FP'‹..notimplemented ‰FAIL†999‰ENDC ‰IFC‡'\1','S'Œ..notimplemented ‰FAIL†999‰ENDC ‰IFC‡'\1','#'Œ..notimplemented ‰FAIL†999‰ENDC .FP.WRD2SET‡$0000+.FP.\0+\5 ‰IFC‡'\1','D'Œ..Dnsource.FP.WRD1SET‡$F040+\2‰LIST********FMOVE.\0‚\1\2,\4\5‰DC.W†.FP.WRD1,.FP.WRD2‰NOLIST‰ENDC ‰IFC‡'\1','A'Œ..disp(An)source‰IFC‡'\3',''..nodisplacement.FP.WRD1SET‡$F050+\2‰LIST********FMOVE.\0‚(\1\2),\4\5‰DC.W†.FP.WRD1,.FP.WRD2‰NOLIST‰ENDC‰IFNC†'\3',''..displacement.FP.WRD1SET‡$F068+\2‰LIST********FMOVE.\0‚\3(\1\2),\4\5‰DC.W†.FP.WRD1,.FP.WRD2,\3‰NOLIST‰ENDC‰ENDC >‰ENDC†...................movetoFPn........................  >‰IFC‡'\4','S'‚.........movetoSpecialFPReg............... !‰IFC‡'\1','FP'‹..notimplemented ‰FAIL†999‰ENDC ‰IFC‡'\1','S'Œ..notimplemented ‰FAIL†999‰ENDC ‰IFC‡'\1','A'Œ..notimplemented ‰FAIL†999‰ENDC .FP.WRD2SET‡$2000+\5 ‰IFC‡'\1','D'Œ..Dnsource.FP.WRD1SET‡$F040+\2‰LIST********FMOVE.\0‚\1\2,\5‰DC.W†.FP.WRD1,.FP.WRD2‰NOLIST‰ENDC !‰IFC‡'\1','#'Œ..immediatesource.FP.WRD1SET‡$F07C‰LIST********FMOVE.\0‚\1\2,\5‰DC.W†.FP.WRD1,.FP.WRD2 ‰IFC‡'\0','L'‰DC.L†\2‰ENDC‰IFNC†'\0','L'‰DC.W†\2‰ENDC‰NOLIST‰ENDC >‰ENDC†...................movetoSpecialFPReg.............  ‰IFNC†'\4','FP'‰IFNC†'\4','S' HqQuY]=‰IFC‡'\1','FP'.........movefromFPtomemory............. ‰IFC‡'\4','#'Œ..notimplemented ‰FAIL†999‰ENDC %‰IFC‡'\0\7','PD'‰..BCDw/'k'dynamic%.FP.WRD2SET‡$1000+(\8<<6)+.FP.PDYN\2‰ENDC‰IFNC†'\0\7','PD'.FP.WRD2SET‡$1000+.FP.\0+\2‰ENDC ‰IFC‡'\4','D'Œ..Dndestination.FP.WRD1SET‡$F040+\5‰LIST********FMOVE.\0‚\1\2,\4\5‰DC.W†.FP.WRD1,.FP.WRD2‰NOLIST‰ENDC %‰IFC‡'\4','A'Œ..disp(An)destination!‰IFC‡'\6',''....nodisplacement.FP.WRD1SET‡$F050+\5‰LIST‰IFC‡'\0\7','PD'"********FMOVE.\0‚\1\2,(\4\5),\7\8‰ENDC‰IFNC†'\0\7','PD'********FMOVE.\0‚\1\2,(\4\5)‰ENDC‰DC.W†.FP.WRD1,.FP.WRD2‰NOLIST‰ENDC‰IFNC†'\6',''....displacement.FP.WRD1SET‡$F068+\5‰LIST********FMOVE.\0‚\1\2,\6(\4\5)‰DC.W†.FP.WRD1,.FP.WRD2,\6‰NOLIST‰ENDC‰ENDC >‰ENDC†...................movefromFPtomemory.............  >‰IFC‡'\1','S'‚.........movefromSpecFPRegtomemory...... ‰IFC‡'\4','#'Œ..notimplemented ‰FAIL†999‰ENDC .FP.WRD2SET‡$3000+\2 ‰IFC‡'\4','D'Œ..Dndestination.FP.WRD1SET‡$F040+\5‰LIST********FMOVE.\0‚\2,\4\5‰DC.W†.FP.WRD1,.FP.WRD2‰NOLIST‰ENDC %‰IFC‡'\4','A'Œ..disp(An)destination!‰IFC‡'\6',''....notimplemented ‰FAIL†999‰ENDC‰IFNC†'\6',''....displacement.FP.WRD1SET‡$F068+\5‰LIST********FMOVE.\0‚\2,\6(\4\5)‰DC.W†.FP.WRD1,.FP.WRD2,\6‰NOLIST‰ENDC‰ENDC @‰ENDC†...................movefromSpecFPRegtomemory...... ‰ENDC‰ENDC ‰LIST‰SPC‡1‰ENDM   FMOVEEƒMACRO‰LIST ‰BSR‡.PFPOINT‰NOLIST!‰FMOVE.\0‚\1,\2,\3,\4,\5,\6,\7,\8‰ENDM  ‰PAGE FADD…MACRO‰NOLIST‰IFNC†'\1\4','DFP'4‰FAIL†999‡mustbe:ƒFADDDn,FPn...\1,  \2,\3,\4,\5,\6‰ENDC‰IFC‡'\1\4','DFP'.FP.WRD1SET‡$F040+\2.FP.WRD2SET‡$6000+.FP.\0+\5‰LIST********FADD.\0ƒ\1\2,\4\5‰DC.W†.FP.WRD1,.FP.WRD2‰ENDC‰SPC‡1‰ENDM   FADDE„MACRO‰LIST ‰BSR‡.PFPOINT‰NOLIST‰FADD.\0ƒ\1,\2,\3,\4,\5,\6‰ENDM   FMUL…MACRO‰NOLIST‰IFNC†'\1\4','FPFP'5‰FAIL†999‡mustbe:‚FMULFPn,FPn...\1,\2,\3,\4,\5,\6‰ENDC‰IFC‡'\1\4','FPFP'.FP.WRD1SET‡$F000+\2 ‰IFC‡'\0',''0.FP.WRD2SET‡$6080+\5Œdefaultis"S",not"W"!!‰ENDC ‰IFNC†'\0',''.FP.WRD2SET‡$6080+.FP.\0+\5‰ENDC‰LIST********FMUL.\0ƒ\1\2,\4\5‰DC.W†.FP.WRD1,.FP.WRD2‰ENDC‰SPC‡1‰ENDM   FMULE„MACRO‰LIST ‰BSR‡.PFPOINT‰NOLIST‰FMUL.\0ƒ\1,\2,\3,\4,\5,\6‰ENDM   FCMP…MACRO‰NOLIST‰IFNC†'\1\4','#FP'4‰FAIL†999‡mustbe:‚FCMP#n,FPn...\1,\2,\3,\4,\5,\6‰ENDC‰IFC‡'\1\4','#FP'.FP.WRD1SET‡$F07C.FP.WRD2SET‡$6140+.FP.\0+\5‰LIST********FCMP.\0ƒ\1\2,\4\5‰DC.W†.FP.WRD1,.FP.WRD2 ‰IFC‡'\0','L'‰DC.L†\2‰ENDC‰IFNC†'\0','L'‰DC.W†\2‰ENDC‰ENDC‰SPC‡1‰ENDM   FCMPE„MACRO‰LIST ‰BSR‡.PFPOINT‰NOLIST‰FCMP.\0ƒ\1,\2,\3,\4,\5,\6‰ENDM   FSLT…MACRO‰NOLIST‰IFNC†'\1','D'‰FAIL†999‘mustbe:ƒFSLTDn‰ENDC ‰IFC‡'\1','D'.FP.WRD1SET‡$F040+\2.FP.WRD2SET‡$A0C0‰LIST********FSLT.\0ƒ\1\2‰DC.W†.FP.WRD1,.FP.WRD2‰ENDC‰SPC‡1‰ENDM   FSLTE„MACRO‰LIST ‰BSR‡.PFPOINT‰NOLIST‰FSLT.\0ƒ\1,\2‰ENDM ‰PAGENNN6†TTL†68KPASCALMACRODEFINITIONSFORRUNTIMEROUTINES*<*Ž**********************************************************7*Ž*MACRODEFINITIONSFOR68KPASCALRUNTIMEROUTINES†*<*Ž***********************************************************F…MACRO'‰BSRƒ.PFPOINTŠ!CALLTHETRAPSIMULATOR ‰IFNC‚'\1','' ŒIFNC‚'\2','' IFNC‚'\3',''3’F\0ƒ\1,\2,\3!THREEARGUMENTFLOATINGINSTRUCTIONENDC IFCƒ'\3',''.’F\0ƒ\1,\2„!TWOARGUMENTFLOATINGINSTRUCTIONENDCŒENDC ŒIFCƒ'\2',''*F\0ƒ\1Š!ONEAGUMENTFLOATINGINSTRUCTIONŒENDC‰ENDC ‰IFCƒ'\1',''-ŒF\0’!FLOATINGINSTRUCTIONWITHNOARGUMENTS‰ENDC†ENDM**…CALLPROCEDUREMACRO* CALL‚MACRO‰BSRƒ\1!ARGUMENTSARE\2†ENDM**…PROCEDUREENTRYMACRO*PROCEDUREƒMACRO**ŽARGUMENTSARE\2*"DS.W…0ˆ!ALIGNONAWORDBOUNDARY\1EQU†*ˆ!PUTENTRYPOINTHEREŒENDM**…PROCEDUREEXITMACRO*END_PROC„MACRO RTS†!RETURNTOWHOEVERCALLEDŒENDM*1*…MACROFORROUNDINGAVALUEUPTOANEVENNUMBER* EVENˆMACROADDQ.\0‚#1,\1ANDI.\0‚#-2,\1ŒENDM*@*…MACROFORCONVERTINGACHARACTERSTOREDINABYTETOUPPERCASE*UPPERCASEƒMACRO,IF.B\1#'a'AND.B\1#'z'THEN.S’SUBI.Bƒ#'a'-'A',\1ENDIŒENDM*&*…MACROFORWRITINGASINGLECHARACTER*WRITE_CHAR‚MACROMOVE.Bƒ\1,(A1)CALL….PIWPTR,ŒENDM*!*…MACROFORREADINGASINGLECHAR*GET_CHAR„MACROCALL.PIRPTR,ƒ\1CALL.PGETCH, UPPERCASED0ŒENDM*=*…MACROFORGENERATINGARUNTIMEERRORFROMARUNTIMEROUTINE* ERROR‡MACRO&MOVEQ„#\1,D0ƒ!PUTERRORNUMBERIND0TRAP…#14†!DOATRAP14...)DC.W…0ˆ!...FOLLOWEDBYAWORDOFZEROSŒENDM*  NaV‰TTL…68KPASCALSYMBOLEQUATES* **********0*ˆPASCALRUNTIMEROUTINESEQUATE,ANDMACROFILE* ***********œGLOBALEQUATES* ***********ˆVARIABLEOFFSETS* **********1FDP†EQU…4‹*4=OFFSETTOFILEDESCRIPTORPOINTER1PFS†EQU…4‹*4=OFFSETTOPASCALFILESTATUSWORD-CSZ†EQU…6‹*6=OFFSETTOCOMPONENTSIZEWORD1BCD†EQU…6‹*6=OFFSETTOBCDBUFFERINREALREAD3HPTR…EQU…4‹*4=OFFSETTOHEAPPTRINRTMAINTENCE6CCDR…EQU…52Š*52=OFFSETTOCHAINCMDDIAGREGINRMA3SBP†EQU…20Š*20=OFFSETTOSTARTOFBUFFERPOINTER1EBP†EQU…24Š*24=OFFSETTOENDOFBUFFERPOINTER7BUF†EQU…32Š*32=BUFFERZONESIZEFORSTACKALOCATIONS7A5OFFSETEQU…52Š*OFFSETTOA5REGINFPUSERREGBLOCK2LOWHEAP‚EQU…368‰*OFFSETTOLOWESTADDRESSINHEAP* ***********ˆSYMBOLICCONSTANTS* **********9RR$ERRƒEQU…0‹*0=#AfterTrap14meansRRroutineerror1FP$ERRƒEQU…1‹*1=#AfterTrap14meansFperror7FHSIOSƒEQU…2‹*2=#AFTERTRAP14WHICHMEANSFHS/IOS„6INLNRTƒEQU…3‹*3=#AFTERTRAP14WHICHMEANSINLINE*7ABORT„EQU…14Š*14=EXECPARAMFORABNORMALTERMINATION4TERM…EQU…15Š*15=EXECPARAMFORNORMALTERMINATION'FORM…EQU…12Š*12=ASCIIFORMFEEDCODE(SPC†EQU…$20‰*$20=ASCIISPACECODE''-NEG†EQU…$2D‰*$2D=ASCIIMINUSSIGNCODE'-'-PLUS…EQU…$2B‰*$2B=ASCIIPLUS‚SIGNCODE'+''ZERO…EQU…$30‰*$30=ASCIICODEFOR'0''NINE…EQU…$39‰*$39=ASCIICODEFOR'9'$AˆEQU…$41‰*$41=ASCIICODEFOR'A'$EˆEQU…$45‰*$45=ASCIICODEFOR'E'$IˆEQU…$49‰*$49=ASCIICODEFOR'I'$NˆEQU…$4E‰*$4E=ASCIICODEFOR'N'$TˆEQU…$54‰*$54=ASCIICODEFOR'T'$ZˆEQU…$5A‰*$5A=ASCIICODEFOR'Z'=MINUS_INFƒEQU‚$B0‰*$B0=SIGNOFEXPONENTFORMINUSINFINITY;PLUS_INF„EQU‚$A0‰*$A0=SIGNOFEXPONENTFORPLUSINFINITY3NAN_SIGN„EQU‚$C0‰*$C0=SIGNOFEXPONENTFORANANANAN_WIDTHƒEQU‚16Š*16=NUMCOLUMNPOSITIONNEEDEDTOWRITEANAN;OVRHD‡EQU‚4‹*4=NUMBEROFOVERHEADDIGITSINAREALWRITEj:s3{9MAXRODIG„EQU‚17Š*17=MAXNUMDIGITSCONVERTEDONOUTPUT@MAXRIDIG„EQU‚19Š*19=MAXNUMDIGITSCONVERTEDONINPUTOFREAL?MAXIIDIG„EQU‚34Š*34=MAXNUMDIGITSCONVERTEDONINPUTOFINTBCLRRNDMODE‚EQU‚$FCFF‡*$FCFF=MASKTOCLEARROUNDINGMODETOZEROFRNDTOZEROƒEQU‚$0100‡*$0100=MASKTOSETROUNDINGMODETORNDTOZERO=INITSTATUS‚EQU‚0‹*0=VALUETOINIT68341STATUSREGISTERTO;INITCNTRLƒEQU‚0‹*0=VALUETOINIT68341CNTRLREGISTERTO8MAXRNDPREC‚EQU‚2‹*2=MAXVALUEOFROUNDINGPREC.FIELD1MAXCLOSURE‚EQU‚1‹*1=MAXVALUEOFCLOSUREFIELD@MAXNORMMODEEQU‚1‹*1=MAXVALUEOFTHENORMAIZATIONMODEFIELD;MAXRNDMODE‚EQU‚3‹*3=MAXVALUEOFTHEROUNDINGMODEFIELD1MAXPOSEXPƒEQU‚4931ˆ*4931=MAXPOSITIVEEXPONENT1MAXNEGEXPƒEQU‚4952ˆ*4952=MAXNEGATIVEEXPONENT=THECURBASEWASFOUNDAREADOVF‚EQU…$64‰*$64=OVERFLOWOCCUREDWHILEREADINGANINTEGER4BADNANƒEQU…$70‰*$70=BADMANTISAINNANGENERATION* *ˆBUFFERBLOCKOFFSETSANDSIZES* ŒOFFSETƒ0UNPACKED„DS.B…20PACKED†DS.B…14BCDBUFSIZE‚DS.W…0CHARBUFSIZEDS.W…0* ŒOFFSETƒ0 SIGNS‡DS.B…1AFTER_DP„DS.B…1EXPONENT„DS.W…1BCDDIGITSƒDS.B…64NAN_VALUEƒDS.B…4‹!THISFIELDALSOPARTOFBCDDIGITSENDPACKEDƒDS.W…0* ŒOFFSETƒ$1748ERRADR†DS.L…1Š*$174=OFFSETTOERRORADDRESSSAVEAREA9ERRNUM†DS.L…1Š*ERRNMR=OFFSETTOERRORNUMBERSAVEAREA8REGSˆDS.L…1Š*REGS=OFFSETFROMA5TOREGISTERSAVEAREA*NNNNA*********BEGINNING RR.VDOSVM.SA**********************************‰NOLIST*7*ˆEQUATESTOSETPASCALCOMPILEROPERATINGENVIRONMENT.**ˆTHEEQUATEWHOSEVALUEIS0ISSELECTED.**ˆCOPYRIGHT1982MOTOROLA,INC.**ˆVERSION2.01:04-19-82**ˆ04-19-82:DAVESTANDAGE*A*****************************************************************‰LIST1VDOSEXƒEQU‡1‰!!NO!!!VERSADOSONTHEEXORMACS4VDOSVMƒEQU‡0‰!!YES!!VERSADOSONTHEVERSAMODULE1RMSVM„EQU‡1‰!!NO!!!RMS68KƒONTHEVERSAMODULE A*********ENDING OF RR.VDOSVM.SA********************************** NN  NNNƒ'EXORMACSLOADMMU AF˜˜  VECTORS AF¡¡  KILLER AFªª  LOADMMU SA³³ø  VECTORS SAÔÔ  KILLER SAÝÝ>  =/*=/*†EXORMACS.LOADMMU.AF=/*.=/* Chain file to assemble EXORMACS.LOADMMU.SA=/*:=/* If no output argument is specified for the listing the2=/* chain file will default to EXORMACS.LOADMMU.LS=/*=/IFC \1ƒ=ARGEXORMACS.LOADMMU.LS=/ENDIF=/*5=ASM EXORMACS.LOADMMU.SA,EXORMACS.LOADMMU.RO,\1;RZ=50=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TST.EQ=/*}=/*=ENDNNNNNN  =/*=/*†EXORMACS.VECTORS.AF=/*.=/* Chain file to assemble EXORMACS.VECTORS.SA=/*:=/* If no output argument is specified for the listing the2=/* chain file will default to EXORMACS.VECTORS.LS=/*=/IFC \1ƒ=ARGEXORMACS.VECTORS.LS=/ENDIF=/*6=ASM EXORMACS.VECTORS.SA,EXORMACS.VECTORS.RO,\1;MRZ=50=/*{ Included files are:=/*ƒ--none--=/*}=/*=ENDNNNNNN™=/*=/*†EXORMACS.KILLER.AF=/*B=/* Chain file to assemble EXORMACS.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to EXORMACS.KILLER.LS=/*=/IFC \1ƒ=ARG‚EXORMACS.KILLER.LS=/ENDIF=ARG \1,EXORMACS.KILLER.RO=/*F=ASM M68000.M68000.SA/M68XXX.KILLER.SA/EXORMACS.KILLER.SA,\2,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*ƒ9995.&.PANEL.EQ=/*}=/*=ENDNNN  NN¢‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.TST.EQ‰LIST9LOADMMU‚IDNT‚45,0…LOADMMUSUBROUTINESFOREXORMACSSYSTEM‰SPCƒ1O*********************************************************************************ˆEXORMACS.LOADMMU*H*ˆSubroutinestoaddsegmentsanddeletesegmentsfromtheEXORMACSMMU.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*'*ˆEntry:„A5=targettask'sTSTaddress*’D5=offsettoTSTMMUentry*!*ˆRegisterusage:…01234567*™D‚*********™A„*‡P**™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed**D*ˆExit:‚RTStocaller‚(ADD_SEG_TO_MMUANDDEL_SEG_FROM_MMUmusthave*conditioncodesset)**,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------@*ˆ08/20/85‚ChuckSmith„ChangedfornewformatofTST-Loadregs.*¡individuallyinsteadofMOVEM.Linstruction.@*ˆ07/26/85‚JulieHoban„AddedADD_SEG_TO_MMUsubroutine.Replaced+*¡UNLDMMUsubroutinewithDEL_SEG_FROM_MMU.*ˆ03/30/81‚HLD6‹Rev2.00*ˆ09/18/80‚HLD6*O*******************************************************************************‰PAGE ‰SECTION2 ‰OPT…CL **‚XDEF's*ŠXDEFƒADD_SEG_TO_MMUŠXDEFƒADD_SEG2 ŠXDEFƒCRASN ŠXDEFƒDEASNŠXDEFƒDEL_SEG_FROM_MMU ŠXDEFƒLOADMMUŠXDEFƒLOADMMUIŠXDEFƒMMUFAULT **‚XREF's*ŠXREF.SMMUHEREŠXREF.SMMULOAD ŠXREFƒTRACERŠXREF.STRACFLAG **‚INCLUDEDFILES:**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.TST.EQ* *!*‚MACROTOSETCONDITIONCODESEQ* SETCCEQ‚MACRO ‰CMP.L…D0,D0‰ENDM‰PAGEO********************************************************************************%*ˆLOADMMUSubroutinefortheEXORMACS* *ˆEntry:„A5=targetTSTaddress*«Z´.¼8Ä9O******************************************************************************* ,LOADMMU‚MOVE.W‚SR,-(A7)ŠSAVESTATUSREGISTER)LOADMMUIOR.W„#$700,SRŠINHIBITINTERRUPTS=******ƒMOVEM.LTSTMMU(A5),D0-D7‚SEGMENTDESCRIPTIONSŽ08/20/85 ?*ˆTHEOLDFORMATOFTHETSTPERMITTEDUSTOLOADD0-D7WITHONE?*ˆMOVEM.LINSTRUCTION.‚NOWWEHAVETOLOADTHEREGISTERSONEBY*ˆONE. ‰MOVE.L‚A1,-(A7)ŽSAVEA1!‰MOVE.L‚A5,A1‘COPYPOINTERTOTST/‰MOVE.L‚A5,MMULOADŒSAVEADDRESSOFCURRENTLOAD @‰MOVE.L‚TSTLB+TSTMMU(A5),D0ƒGETBEGINNING(32BIT)ADDRESSIND04‰LSL.Lƒ#8,D0‘GETMIDDLE2BYTESOFTSTLBINUPPERD0?‰MOVE.L‚TSTLE+TSTMMU(A5),D7ƒSTORE32BITLOGICALENDINGADDRESS4‰LSR.Lƒ#8,D7‘GETMIDDLE2BYTESOFTSTLEINLOWERD76‰MOVE.W‚D7,D0‘D0NOWHASOLDFORMATOFTSTLBANDTSTLE <‰MOVE.L‚TSTPO+TSTMMU(A5),D1ƒGET32BITPHYSICALOFFSETIND14‰LSL.Lƒ#8,D1‘GETMIDDLE2BYTESOFTSTPOINUPPERD1‰CLR.WƒD1”CLEARFORSHORTLOAD:‰MOVE.B‚TSTCTL+TSTATTR(A1),D1‚GETCONTROLINFOINLOWERD1 3‰ADD.L ƒ#TSTMLEN,A5‹UPDATEPOINTERTONEXTMMUENTRY4‰ADD.Lƒ#TSTALEN,A1‹UPDATEPOINTERTONEXTATTRENTRY @‰MOVE.L‚TSTLB+TSTMMU(A5),D2ƒGETBEGINNING(32BIT)ADDRESSIND24‰LSL.Lƒ#8,D2‘GETMIDDLE2BYTESOFTSTLBINUPPERD2?‰MOVE.L‚TSTLE+TSTMMU(A5),D7ƒSTORE32BITLOGICALENDINGADDRESS4‰LSR.Lƒ#8,D7‘GETMIDDLE2BYTESOFTSTLEINLOWERD76‰MOVE.W‚D7,D2‘D2NOWHASOLDFORMATOFTSTLBANDTSTLE <‰MOVE.L‚TSTPO+TSTMMU(A5),D3ƒGET32BITPHYSICALOFFSETIND34‰LSL.Lƒ#8,D3‘GETMIDDLE2BYTESOFTSTPOINUPPERD3‰CLR.WƒD3”CLEARFORSHORTLOAD:‰MOVE.B‚TSTCTL+TSTATTR(A1),D3GETCONTROLINFOINLOWERD3 3‰ADD.Lƒ#TSTMLEN,A5‹UPDATEPOINTERTONEXTMMUENTRY4‰ADD.Lƒ#TSTALEN,A1‹UPDATEPOINTERTONEXTATTRENTRY‰PAGE@‰MOVE.L‚TSTLB+TSTMMU(A5),D4ƒGETBEGINNING(32BIT)ADDRESSIND44‰LSL.Lƒ#8,D4‘GETMIDDLE2BYTESOFTSTLBINUPPERD4?‰MOVE.L‚TSTLE+TSTMMU(A5),D7ƒSTORE32BITLOGICALENDINGADDRESS4‰LSR.Lƒ#8,D7‘GETMIDDLE2BYTESOFTSTLEINLOWERD76‰MOVE.W‚D7,D4‘D4NOWHASOLDFORMATOFTSTLBANDTSTLE <‰MOVE.L‚TSTPO+TSTMMU(A5),D5ƒGET32BITPHYSICALOFFSETIND54‰LSL.Lƒ#8,D5‘GETMIDDLE2BYTESOFTSTPOINUPPERD5‰CLR.WƒD5”CLEARFORSHORTLOAD:‰MOVE.B‚TSTCTL+TSTATTR(A1),D5GETCONTROLINFOINLOWERD5 3‰ADD.Lƒ#TSTMLEN,A5‹UPDATEPOINTERTONEXTMMUENTRY5‰ADD.Lƒ#TSTALEN,A1‹UPDATEPOINTERTONEXTATTR.ENTRY @‰MOVE.L‚TSTLB+TSTMMU(A5),D6ƒGETBEGINNING(32BIT)ADDRESSIND64‰LSL.Lƒ#8,D6‘GETMIDDLE2BYTESOFTSTLBINUPPERD6?‰MOVE.L‚TSTLE+TSTMMU(A5),D7ƒSTORE32BITLOGICALENDINGADDRESS4‰LSR.Lƒ#8,D7‘GETMIDDLE2BYTESOFTSTLEINLOWERD76‰MOVE.W‚D7,D6‘D6NOWHASOLDFORMATOFTSTLBANDTSTLE <‰MOVE.L‚TSTPO+TSTMMU(A5),D7ƒGET32BITPHYSICALOFFSETIND74‰LSL.Lƒ#8,D7‘GETMIDDLE2BYTESOFTSTPOINUPPERD7‰CLR.WƒD7”CLEARFORSHORTLOAD:‰MOVE.B‚TSTCTL+TSTATTR(A1),D7GETCONTROLINFOINLOWERD7 *ˆWEAREDONELOADINGREGISTERS! ‰MOVE.L‚(A7)+,A1ŠRESTOREA1!‰MOVE.L‚MMUHERE,A5ˆADDRESSOFMMU‰MOVEM.LD0-D7,(A5)ˆLOADMMU*/‰BTST„#TRCFMMU,TRACFLAGSHOULDENTRYBETRACED?‰BEQ.SƒLOADMMUZŠBRANCHIFNO‰BSR…TRACERŒBUILDTRACEENTRY‰DC.W„$DD08TRACECODELOADMMUZRTE—RETURN‰PAGEO********************************************************************************.*ˆDEL_SEG_FROM_MMUsubroutinefortheEXORMACS*;*ˆThisroutinewilldeleteasegmentfromtheEXORMACSMMU.D*ˆThesegmenttodeleteispointedtobyacombinationofA5andD5.C*ˆA5pointstotheTSTcontainingthesegment,andD5pointstothe"*ˆspecificsegmentwithintheTST.*@*ˆTodeleteasegmentfromtheEXORMACSMMU,wecleartheTSTCTL=*ˆfieldoftheTSTsegmententry,andthencallLOADMMU.‚This**ˆwillinvalidatethatparticularsegment.*;*ˆHowever,wedon'twanttodothisunlessweknowthatthe=*ˆtasksegmentinformationalreadyintheMMUbelongstothis*ˆtask.***ˆSowecheckMMULOADagainstA5tostart.**A*ˆThisroutineiscalledfromtwodirectives,SEGDEALandTFRSEG.** *ˆEntry:„A5=targetTSTaddress*’D5=offsettoTSTMMUentry*O******************************************************************************* DEL_SEG_FROM_MMU:9‰CMP.L…MMULOAD,A5ŠIsthetargetTSTcurrentlyintheMMU?‰IFTHEN.SIfyes,then... <‰CLR.B…TSTCTL(A5,D7)‡SettheEXORMACSsegmententryinvalid.'‰MOVEM.LƒD0-D7/A5,-(A7)†Saveregisters.3‰BSR‡LOADMMULoadthenewsegmentmapintotheMMU.*‰MOVEM.Lƒ(A7)+,D0-D7/A5†Restoreregisters. ‰ENDI‰SETCCEQ ‰RTS›Return.‰PAGEO********************************************************************************,*ˆADD_SEG_TO_MMUsubroutinefortheEXORMACS* *ˆEntry:„A5=targetTSTaddress*’D5=offsettoTSTMMUentry*O******************************************************************************* ADD_SEG_TO_MMU:9‰CMP.L…MMULOAD,A5ŠIfthetargetTSTcurrentlyintheMMU?‰IFTHEN.SIfyes,then... '‰MOVEM.L‚D0-D7/A5,-(A7)‡Saveregisters.3‰BSR†LOADMMUŽLoadthenewsegmentmapintotheMMU. .‰MOVEM.L‚(A7)+,D0-D7/A5‡Restoretheregisters. ‰ENDI ADD_SEG2:‰SETCCEQ‰RTS O********************************************************************************5*ˆCRASN,DEASN,MMUFAULTsubroutinesfortheEXORMACS*A*ˆThesearedummyentrypoints--theseroutinesarecalledbythe?*ˆexecfortheM68451MMU,buttheydon'tknowthatwe'renota*ˆM68451,sowesimplyreturn.*O******************************************************************************* CRASN:DEASN: MMUFAULT: &‰RTS›Justreturn--he'llneverknow.... ‰ENDNŠPAGE#VECTORSƒIDNTƒ45,0INTERRUPTVECTORS*‰VECTORTABLEINLOWMEMORY*ŠORG„03ILLINSTR‚EQU„0’SETFORILLEGALINSTRUCTIONVECTOR4%*¦0=RMSWILLLEAVETHEVECTORALONE'*¦1=RMSWILLTAKECONTROLOFVECTOR4**INITSTRT‚EQU„$0* ŠXREFƒSYSPAR #ŠDC.LƒSYSPARSTACKPOINTERONRESETŠDC.LƒINITSTRTŠDC.Lƒ0ŠDC.Lƒ0 ŠXREFƒPROGINT4 &ŠDC.LƒPROGINT4‹SV4‚ILLEGALINSTRUCTIONŠDC.Lƒ0ŠDC.Lƒ0ŠDC.Lƒ0ŠDC.Lƒ0ŠDC.Lƒ$FE8808ŒTRACETRAPŠENDNNNNNN̉LIST‰PAGE‰SPCƒ1(*–EXORMACS-BOARDDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.EXORMACS.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚TurnontheBoardFailLED.2*’2.‚Writesahex'AF'tothefrontpaneldisplay.A*ˆItalsocontainsanequatefortheamountoftimestodecrementD*ˆacounterinaloopinordertodelayforapprox.one-halfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BSRfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…NoExit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚----------- --‚---------------------------------------------(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 *ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.PANEL.EQ*‰NOLIST‰INCLUDEƒ9995.&.PANEL.EQ‰OPT…CL‰LIST ‰XREF.S‚PANEL ‰SECTIONLEVEL00* *ˆEQUATESHALFSEC‚EQU‡$3FFFF  -*ˆBoardSpecificCode-turnonBoardFailLED KILLER3: ‰MOVE.L‚PANEL,A1‘PANELADDRESS(‰MOVE.W‚#$95,FPLEDST(A1)‰DISABLETTO--AX!‰MOVE.W‚#$B5,FPLEDST(A1)‰LATCHIT‰MOVE.W‚#$A0,FPLEDST(A1)‰XF!‰MOVE.W‚#$B0,FPLEDST(A1)‰LATCHIT‰BRA.SƒKILLER3 KILLER8:BRA.SƒKILLER8 ‰ENDNNÕ?'BESTFIT INIT AFêê  IMEM SAóä @  =/*=/*†BESTFIT.INIT.AF=/**=/* Chain file to assemble BESTFIT.INIT.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to BESTFIT.INIT.LS=/*=/IFC \1ƒ=ARGBESTFIT.INIT.LS=/ENDIF=/*<=ASM M68XXX.INIT.SA/BESTFIT.IMEM.SA,BESTFIT.INIT.RO,\1;RZ=90=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.PANEL.EQ=/*ƒ9995.&.GST.EQ=/*ƒ9995.&.UST.EQ=/*ƒ9995.&.TRACE.EQ=/*ƒ9995.&.MAP.EQ=/*ƒ9995.&.IOV.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.UDR.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.KILL.MC=/*ƒ9999.&.KILLEXEC.EQ=/*}=/*=ENDNNN NNâ ‰PAGEO*********************************************************************************ˆBESTFIT.IMEM.SA*@*ˆThismoduleisanincludefileforM68XXX.INIT.SA.‚Itcontains;*ˆtwoentrypoints--memoryinitializationcodeandsystem?*ˆinitializerexitcode.‚Thememoryinitializationcodeinthis>*ˆmoduleisbasedonthebestfitmethod.‚ItmustbeusedwithD*ˆBESTFIT.PAGEALOC.SA‚andBESTFIT.PAGEFREE.SA.‚Theexitcodeinthis4*ˆdoesafakeRTStogototheexecmoduleDISPATCH.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*;*ˆEntry:‚IMEM„-Calledasasubroutinefrom‚M68XXX.INIT.SA.,*INITEND-BranchedtofromM68XXX.INIT.SA.*!*ˆRegisterusage:…01234567*™D‚*********™A‚*********™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed**ˆExits:/*ˆIMEM„Goodreturn-RTSbacktoM68XXX.INIT.SA0*ˆIMEM„Badreturn‚-ExitsviaKILL.EXECT0macro.B*ˆINITENDGoodreturn-FakeRTStofreememory&DISPATCHmodule.*ˆINITENDBadreturn‚-None.**,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------?*ˆ04/08/86‚JulieHoban„AddedcodetograbSYSINITandreturnit,*¡topreventallocatingSYSINITduringboot.@*ˆ02/12/86‚JulieHoban„AddedcodetoallowRMSinRAMparts1-X.A*ˆ11/05/85‚JulieHoban„RemovedIMEMsubroutinefromINITtohere.*O*******************************************************************************ŠPAGEINITEND:,‰LEA„MEMTABL(PC),A0“MemorytableinINITDAT.-‰MOVE.LMAPENDA(A0),D0“Endofpartitionzero. ‰CLR.L‚D1 C*‚Iftheexecisinpartitionzero,anditsaRAMsystem,then..... 7‰IF.LEEND(PC)D0AND.LTCBHEAD(PC)D1THEN.S 9ŠMOVE.L#T0PGFR,D1‰Freepagesofmemorydirectivenumber.,ŠMOVE.L#T0ENTRY,D0ˆGetentrypointaddress.ŠTRAPƒ#0$ŠBRA.S‚INITE1Branchifgoodreturn. äë:ô7ü(1 Y@'$P,V4-<?D[LJTA\$dil&tc|<„KŒL”9œQ¤;¬R´0¼2ÄhÌ*ÔW%ŠKILL.EXECT0BESTIMEMSA,NO_FRBLK_ADDR 9INITE1„MOVE.LDISPATCH(PC),-(A7)Addressofstartofexec/ŠMOVE.LA0,-(A7)‹AddressofFREE_BLOCKroutine. 8ŠLEA„255+START(PC),A0ƒStartofInit(fromINITDAT)+255 ŠMOVE.LA0,D0ŠCLR.B‚D0‘Form"ceiling"/ŠMOVE.LD0,A0ŽA0<--startofmemorytoreturn. ?ŠLEA„255+ENDMEMT(PC),A1Endofsrcmemtabl(fromINITDAT)+255 ŠMOVE.LA1,D1ŠCLR.B‚D1‘Form"ceiling"&ŠSUB.L‚A0,D1ŽCalculatelengthinbytes)ŠLSR.L‚#8,D1ŽD1<--page-counttoreturn. ‰ELSE.S3ŠMOVE.LDISPATCH(PC),-(A7)Addressofstartofexec‰ENDI ‰RTS›Gotoexec.ŠPAGEN*********************************************************************************.***‚Name:‚IMEM(initialize_memory_partitions).*** ***‚Function:A***ŠChecksallmemorylocationsdescribedintheSYSGENedMEMTBL.F***…Mapsoutany"holes"inmemory.‚SetsupFML(freememorylist)andC***…FML_HEADER(freememorylistheader)ineachpartition.‚SetsupE***…MEMTBL(memorymappingtable)immediately aftertheFML_HEADERin***…partitionzero.*** ***‚Inputs:H***…1.)‚Src_memtbl(createdbySYSGEN)locatedataddressMEMTABLwithin***ŠINITDATdataarea.*** ***‚Outputs:I***…1.)‚Dest_memtbllocatedimmediatelyaftertheFML_HEADERinpartition ***Šzero.G***…2.)‚MAPBEGlongwordinSYSPARdataarea.‚Pointstothedest_memtbl.***Š(Item#1above.)E***…3.)‚FML_HEADERsforallRAMmemorypartitions.‚(Pointedtobythe***Šdest_memtbl.)@***…4.)‚FMLsforallRAMmemorypartitions.‚(Pointedtobytheir***ŠFML_HEADERs.)******‚Sideeffects:C***…1.)‚Allregistersdestroyed,exceptforthestackpointer(A7).)***…2.)‚Mightneverreturn(callKILLER).***H***‚Explanation:‚ThisroutineisbasicallyadriverforinitializingtheB***…memorypartitions.‚ItisprimarilyconcernedwithinitializingI***…partitionzero.‚Thelastsubroutinecall(callinit_next_partitions),H***…handlestheinitializationofallmemorypartitionsexceptpartitionI***…zero.‚ThisuniquehandlingofpartitionzeroisneccessaryduetotheI***…factthattheINITmoduleresidesinaportionofpartitionzerothatD***…willlaterbeusedbythesystem.‚Weobviouslycannotclearthis ***…memory.***D***ŠThefirstcallsetsuptheneccessarypointerstothesrc_memtblF***…andtopartitionzero.‚ThenextcallwillbuildtheFML(clearanyE***…memorynotintheINITmodule,mapoutany"holes"inmemory,andA***…setuptheFMLlinkedlistdescribingtheavailablememoryinG***…partitionzero).‚Ifthefirst_node_ptrisreturnedaszero,thenweF***…didnotfindevenone256byteblockofavailablememory.‚SinceweE***…needatleastoneblockinpartitionzerofortheMEMTBL,thisis3***…obviouslyafatalerror,andsowecallKILLER.***F***ŠNextwecallbuild_fml_headertobuildtheFML_HEADERinpartitionE***…zero.‚Ifthefml_header_ptrisreturnedaszero,thenwecouldn'tC***…findenoughmemoryinpartitionzerofortheFML_HEADERandtheG***…dest_memtbl,sowecannotcontinue,andthereforemustcallKILLER.***@***ŠOtherwise,wesetourdest_memtbl_ptrtopointtothememory@***…immediatelyaftertheFML_HEADERforpartitionzero,andsetF***…theMAPBEGvariableinSYSPARequaltothisvalue.‚FinallywecallF***…build_ram_memtbl_entrytorecordthisrampartitionintheMEMTBL,D***…andcallinit_next_partitionstoinitializeallpartitionsafter***…partitionzero.***L****************************************************************************2ŠTTL„INITMEMORYPARTITIONS-REGISTERASSIGNMENTSŠPAGEL**********************************************************************************…A0=src_memtbl_ptr;7***ŠPointstothe"source"MEMTBLinINITDATdataarea.******…A1=dest_memtbl_ptr;<***ŠPointstothe"destination"MEMTBLimmediatelyafterthe!***ŠFML_HEADERinpartitionzero.***+***…A2=temp_memtbl_ptr/previous_node_ptr;?***ŠSharedregister.‚Duringcheck_memmap_conflictitisusedtoB***Šstepthroughthedest_memtbllookingforconflictsbetweentheB***Š"current"RAMpartition(pointedtobythesrc_memtbl_ptr)andB***Šanypreviously-definedRAMpartitions(pointedtobythetemp_***Šmemtbl_ptr.)C***ŠDuringbuild_fml(anditssubroutinebuild_fml_node)A2isused;***Štopointtothe"previous"nodeintheFMLlinkedlist.******…A3=first_node_ptr;0***ŠPointstothefirstnodeinthecurrentFML.******…A4=last_node_ptr;/***ŠPointstothelastnodeinthecurrentFML.***&***…A5=clear_mem_ptr/fml_header_ptr;@***ŠSharedregister.‚Duringbuild_fml(andbuild_fml_node)itis<***Šusedtopointtothenextmemorylocationtobecleared.<***ŠDuringalltheotherroutinesitisusedtopointtothe***ŠFML_HEADERblock.***…A6=scratch;****** ***…D0=0;B***ŠUsedforzeroingoutmemory,andcheckingifaddressregisters***Šareequaltozero.******…D1-D3=scratch;******…D4=start_of_part_ptr;:***ŠPointstothestartofthe"current"m emorypartition.******…D5=end_of_part_ptr;8***ŠPointstotheendofthe"current"memorypartition.******…D6=bytes_cleared;>***ŠContainsacountofthenumberofthebytesclearedinthe?***Š"current"memorypartition.‚Whenwefinda"hole"inmemory@***Š(takeabus_error),thenwestopincrementingbytes_cleared.C***ŠThusbytes_clearedwillcontainacountofthenumberof"good"?***Šbytesinthecurrentblockofthecurrentmemorypartition.D***ŠThisvaluewillbeusedtodescribetheammountof"free"memory***Šinthecurrentblock.******…D7=fml_header_len;C***ŠContainsacountofthenumberof256byteblocksneccessarytoA***Šdescribethe"current"FML_HEADER.‚Thisvalueisusuallyone.@***ŠItwasmadeintoavariableinordertoaccommodatethecaseA***ŠwheretheFML_HEADER(26bytes)andthedest_memtbl("n"*10>***Šbytes)requiredmorethanone256byteblock.‚Thisaddeda<***Šcertainammountofcomplexitytothealgorityhms,butitA***Šremovedtheratherarbitraryrestrictionthatthedest_memtblB***Šmustbelimitedto(256-26)/10or23entries.‚(Dest_memtbl2***Šcouldonlydescribe23RAMorROMpartitions.)***L****************************************************************************'ŠTTL„INITMEMORYPARTITIONS-ALGORITHMŠPAGE#*init_memory_partitions: procedure;    *ˆcallinit_pointers;*ˆcallbuild_fml;*ˆif(first_node_ptr=0)*ˆthencallKILLER;*ˆcallbuild_fml_header;*ˆif(fml_header_ptr=0)*ˆthencallKILLER;;*ˆdest_memtbl_ptr<==fml_header_ptr+length(fml_header);&*ˆSYSPAR(MAPBEG)<==dest_memtbl_ptr;*ˆcallbuild_ram_memtbl_entry;*ˆcallinit_next_partitions;  *end init_memory_partitions;ŠPAGE"ŠTTL„INITMEMORYPARTITIONS-CODE*#*init_memory_partitions: procedure;*IMEM:**ˆcallinit_pointers;*ˆcallbuild_fml;*ˆif(first_node_ptr=0)*ˆthencallKILLER;* ŠBSR.S‚IPTRS ŠBSR„BFML ŠIF.LƒA3D0THEN.S$KILL.EXECT0ƒBESTIMEMSA,NOMEM_MEMTBLŠENDI **ˆcallbuild_fml_header;*ˆif(fml_header_ptr=0)*ˆthencallKILLER;;*ˆdest_memtbl_ptr<==fml_header_ptr+length(fml_header);&*ˆSYSPAR(MAPBEG)<==dest_memtbl_ptr;* ŠBSR„BFMLHEAD ŠIF.LƒA5D0THEN.S(KILL.EXECT0ƒBESTIMEMSA,NOMEM_FML_HEADERŠENDI ŠLEA„FMLHDSZ(A5),A1 ŠMOVE.LA1,MAPBEG **ˆcallbuild_ram_memtbl_entry;*ˆcallinit_next_partitions;* ŠBSR„BRAMNODE ŠBSR„INEXTMEM‰PAGE *E*‚Forsafety,grabthememorySYSINITresidesinsowecan'tallocateD*‚ittosomeonewhomightwriteoverit.‚OnlydoitwhenRMSresides*‚inRAMpartitionzero.* ‰CLR.LƒD1,‰LEA…MEMTABL(PC),A0’MemorytableinINITDAT.-‰MOVE.L‚MAPENDA(A0),D0’Endofpartitionzero. I*‚Iftheexeciswithinpartitionzero,anditsaRAMsystem,then....... 7‰IF.L„EEND(PC)D0AND.LTCBHEAD(PC)D1THEN.S 8ŠLEA„255+START(PC),A1ƒStartofInit(fromINITDAT)+255 ŠMOVE.LA1,D0ŠCLR.B‚D0‘Form"ceiling"1ŠMOVE.LD0,A1ŽA1<--startofmemorytoallocate. ?ŠLEA„255+ENDMEMT(PC),A0Endofsrcmemtabl(fromINITDAT)+255 ŠMOVE.LA0,D0ŠCLR.B‚D0‘Form"ceiling"&ŠSUB.L‚A1,D0ŽCalculatelengthinbytes+ŠLSR.L‚#8,D0ŽD1<--page-counttoallocate.*ŠBSETƒ#24,D0Set"physicaladdress"option,ŠMOVE.LD0,A0ŽA0<--page-counttoallocate. "ŠMOVEQ.L#T0PAGAL,D0‡CallpagealocŠTRAPƒ#0ŠBRA.S‚INITDONE‹Goodreturn.&ŠKILL.EXECT0BESTIMEMSA,PA_SINT_FAILEDINITDONE ‰ENDI "‰RTS›Gotofreememory,thenexec. **end init_memory_partitions;*"ŠTTL„INITPOINTERS-DOCUMENTATIONŠPAGEN********************************************************************************* ***…Name:‚IPTRS(init_pointers):*** ***…Function:A***ŠInitializesallpointersandcountersforinitializingmemory***„partitionzero.*** ***…Inputs:1***ˆ1.)‚Src_memtblinINITDATataddressMEMTABL.*** ***…Outputs:***ˆ1.)‚A0=src_memtbl_ptr;***ˆ2.)‚A5=clear_mem_ptr;***ˆ3.)‚D0=0;***ˆ4.)‚D4= start_of_part_ptr;***ˆ5.)‚D5=end_of_part_ptr;***ˆ6.)‚D6=bytes_cleared;***ˆ7.)‚D7=fml_header_len;******…Sideeffects:****ˆ1.)‚A2(temp_memtbl_ptr)isdestroyed.$***ˆ2.)‚D1(scratch)getsdestroyed.)***ˆ3.)‚Mightneverreturn(callKILLER).******…Explanation:***?***ŠFirstweinitializeD0andthesrc_memtbl_ptr.‚IfthefirstI***…entryinthesrc_memtblisnotaRAMpartitionwhosepartitionnumber<***…iszero,thenwecannotcontinue,andsowecallKILLER.***E***ŠNextweinitializefml_header_lentoequalthenumberof256byteG***…blocksneccessarytocontaintheFML_HEADERforpartitionzero,andB***…oneentryinthedest_memtblforeveryentryinthesrc_memtbl9***…(includingthelastentrydelimitingthesrc_memtbl).***D***ŠNowweinitializetheend_of_part_ptrtopointtothe"floor"ofB***…theMAPENDAfieldofthefirstentryinthesrc_memtbl.‚(Note:H***…throughoutthesealgorithmswewillalwaystakethe"ceiling"oftheH***…startofthepartition,andthe"floor"oftheendofthepartition.K***…Thisinsuresthatallpartitionsstartandendona256byteblock,andG***…alsothatweonlygrabthesameammountofmemory,orless,thatis%***…describedwithinthesrc_memtbl.)***E***ŠNow,iftheexecisinpartitionzero,thenthestart_of_part_ptrD***…pointstothenext256byteblockaftertheendoftheexec,theJ***…clear_mem_ptrpointstothenext256byteblockafterthestartoftheH***…INITmodule,andbytes_clearedgetssettothedisplacementfromtheI***…startoftheINITmoduletotheendoftheINITDATdataarea(alsoonH***…a256byteboundary).‚Theclear_mem_ptrandbytes_clearedaresetupF***…inthiswayinordertotellthebuild_fmlsubroutinethatwehaveG***…startedclearingmemoryatthelocationpointedtobyclear_mem_ptr@***…andwehavealreadyclearedbytes_clearedlocations.‚ThisisI***…neccessarybecausewewishtoreclaimthememoryoccupiedbytheINITD***…moduleasfreememoryinpartitionzero,butweobviouslycannotG***…clearitoutatthispointintime.‚Thuswemustfakeoutbuild_fmlB***…intothinkingthatwehavealreadyclearedtheINITportionofI***…partitionzero.‚Finally,ifTCBHEAD=0,(wehaveminiTCBsfollowingI***…thesrc_memtbl),thenweincrementbytes_clearedbyabout15mini-TCB;***…lengthstoinsurethatwedon'tzeroouttheminiTCBs.***D***ŠIftheexecisnotinpartitionzero,thenwesetbothstart_of_G***…part_ptrandclear_mem_ptrtopointtothenext256bytepageafter8***…theSYSPARdataarea,andsetbytes_clearedtozero.***B***ŠFinally,ifthestart_of_part_ptrandend_of_part_ptrdescribeF***…apartitionthatdoesnotcontainsomepositiveammountofmemory,=***…thenweobviouslycannotcontinue,andsowecallKILLER.***L**************************************************************************** ŠTTL„INITPOINTERS-ALGORITHMŠPAGE*init_pointers: procedure;   *ˆDO<==0;.*ˆsrc_memtbl_ptr<==addr(INITDAT(MEMTABL));0*ˆif(MAPMTYP.MAPPART(src_memtbl_ptr)<>$0000)*ˆthencallKILLER; *ˆfml_header_len<==0;%*ˆtemp_memtbl_ptr<==src_memtbl_ptr;7*ˆdountil(MAPMTYP.MAPPART(temp_memtbl_ptr)=$FFFF);%*’fml_header_len<==fml_header_len+*¥length(dest_memtbl_entry);'*’temp_memtbl_ptr<==temp_memtbl_ptr+*¦length(src_memtbl_entry); *ˆend;C*ˆfml_header_len<==(length(fml_header)+length(memtbl_entry)+,*œ(temp_memtbl_ptr-src_memtbl_ptr))/256; 7*ˆend_of_part_ptr<==floor(MAPENDA(src_memtbl_ptr));)*ˆif(execisinpartitionxero)thendo;.*’start_of_part_ptr<==ceil(INITDAT(EEND));(*’clear_mem_ptr<==ceil(addr(START));5*’bytes_cleared<==ceil(addr(INITDAT(ENDMEMT)))-*¤clear_mem_ptr;*’if(INITDAT(TCBHEAD)=0)=*’thenbytes_cleared<==ceil(bytes_cleared+15*length(MTCBs))*ˆend; *ˆelsedo;7*’start_of_part_ptr<==ceil(addr(SYSPAR(ENDSYSP)));&*’clear_mem_ptr<==start_of_part_ptr;*’bytes_cleared<== 0;*ˆend; +*ˆif(start_of_part_ptr>=end_of_part_ptr)*ˆthencallKILLER;  *end init_pointers; ŠTTL„INITPOINTERS-CODEŠPAGE**init_pointers: procedure;* IPTRS:* *ˆD0<==0;.*ˆsrc_memtbl_ptr<==addr(INITDAT(MEMTABL));,*ˆif(MAPMTYP.MAPPART(src_memtbl_ptr)<>0)*ˆthencallKILLER;* ŠCLR.L‚D0 ŠLEA„MEMTABL(PC),A0 ŠIF.Wƒ(A0)‹D0THEN.S"KILL.EXECT0ƒBESTIMEMSA,PT_1ST_BADŠENDI **ˆfml_header_len<==0;%*ˆtemp_memtbl_ptr<==src_memtbl_ptr;7*ˆdountil(MAPMTYP.MAPPART(temp_memtbl_ptr)=$FFFF);%*’fml_header_len<==fml_header_len+*¥length(dest_memtbl_entry);'*’temp_memtbl_ptr<==temp_memtbl_ptr+*¦length(src_memtbl_entry);*ˆend;* ŠCLR.L‚D7 ŠLEA„(A0),A2 ŠREPEATADD.L‚#MAPENTSZ,D7LEA„12(A2),A2ŠUNTIL.W(A2)Ž#$FFFF *5*ˆfml_header_len<==ceil(length(fml_header_node)+*¡fml_header_len+$*¡length(dest_memtbl_entry))/256;7*ˆend_of_part_ptr<==floor(MAPENDA(src_memtbl_ptr));*!ŠADD.L‚#(FMLHDSZ+MAPENTSZ+255),D7 ŠLSR.L‚#8,D7 ŠMOVE.LMAPENDA(A0),D5 ŠCLR.B‚D5 *)*ˆif(execisinpartitionzerothendo);.*’start_of_part_ptr<==ceil(INITDAT(EEND));(*’clear_mem_ptr<==ceil(addr(START));5*’bytes_cleared<==ceil(addr(INITDAT(ENDMEMT)))-*¤clear_mem_ptr;*’if(INITDAT(TCBHEAD)=0)>*’thenbytes_cleared<==ceil(bytes_cleared+15*length(MTCBs)*ˆend;**ŠMOVE.LEEND(PC),D4ˆD4<==INITDAT(EEND).8ŠIF.LƒD4ˆD5THEN.S†If(exec_end„D0THEN.SN*-------------------------------------------------------------------- 08/20/85**ŽADD.L‚#$800,D6ADD.L‚#(15*MTCBLN)+255,D6 CLR.B‚D6N*-----------------------------------------------------------------------------ENDI * *ˆelsedo;7*’start_of_part_ptr<==ceil(addr(SYSPAR(ENDSYSP)));&*’clear_mem_ptr<==start_of_part_ptr;*’bytes_cleared<==0;*ˆend;*ELSE.SMOVE.L#ENDSYSP+255,D4 CLR.B‚D4 MOVE.LD4,A5 CLR.L‚D6ŠENDI *+*ˆif(start_of_part_ptr>=end_of_part_ptr)*ˆthencallKILLER;*ŠIF.LƒD4D5THEN.S#KILL.EXECT0‚BESTIMEMSA,PT_PTRS_BADŠENDI **end init_pointers;*ŠRTS )ŠTTL„INIT_NEXT_PARTITIONS-DOCUMENTATIONŠPAGEN*************************************************************************************…Name:‚INEXTMEM(init_next_partitions):*** ***…Function:=***ŠInitializesallpartitionsexceptpartitionzero.‚ForROMH***„partitions,wemakeanentryinthedest_memtbl.‚ForRAMpartitions,A***„weinsurethatnoconflictexistswithapreviously-describedH***„partition,buildtheFML,buildtheFML_HEADER,andmakeanentryin***„thedest_memtbl.*** ***…Inputs:***ˆ1.)‚A0=src_memtbl_ptr;2***(Pointstothefirstentryinthesrc_memtbl.)***ˆ2.)‚A1=dest_memtbl_ptr;3***(Pointstothefirstentryinthedest_memtbl.)*** ***…Outputs:***ˆ1.)‚Dest_memtbl.#***ˆ2.)‚FMLforallRAMpartitions.+***ˆ3.)‚FML_HEADERsforallRAMpartitions.******…Sideeffects:B***ˆ1.)‚Mostregistersaredestroyed,exceptforthestackpointer ***(A7).******…Explanation:D***ŠWekeeploopinguntiltheMAPMTYPandMAPPARTfieldsofthenextH***…entryinthesrc_memtblbothcontain$FF.‚(ThisindicatestheendofH***…thememtbl.)‚Whenweseetheendofthesrc_memtbl,thenwewritean.***…endentryforthedest_memtbl,andreturn.***E***ŠForeverygoodentryinthesrc_memtblwecallinit_next_pointersG***…tosetupourpointersandcountersforthismemorypartition.‚ThenE***…iftheMAPMTYPfieldofthesrc_memtblentry=$FF,wehaveaROM4***…partitionandsowecallbuild_rom_memtbl_entry.***8***ŠForeveryRAMentryinthesrc_memtbl,wefirstcallG***…check_memmap_con flicttoinsurethatthecurrentRAMpartitiondoesH***…notconflictinanywaywithapreviously-describedpartition.‚ThereG***…arethreepossiblereturnconditionsfromthecheck_memmap_conflict***…subroutine:'***Š1.)‚Afatalconflictwasdetected-;***Executionwillneverreturn(check_memmap_conflictwill***callKILLER).@***Š2.)‚Thispartitionisanaliasofapreviouspartition(both+***partitionsstartatthesameaddress)-;***Executionwillreturn,andthegot_alias_partition_flag***willbeset.+***Š3.)‚Thispartitionisanewpartition-;***Executionwillreturn,andthegot_alias_partition_flag***willbereset.H***…Therefore,ifexecutionreturns,andthegot_alias_partition_flagis@***…set,wecallbuild_ram_memmap_entrytobuildanentryinthe(***…dest_memtblforthealiaspartition.***C***ŠIfexecutionreturnsandthegot_alias_partition_flagisreset,H***…thenwecallbuild_fmltobuildthefreememorylistforthenewRAMB***…partition.‚Theniftheprevious_node_ptrisnotequaltozero,C***…build_fmlfoundatleastone256bytepageofmemoryinthenewI***…partitionandsowecallbuild_fml_headertobuildtheFML_HEADERforA***…thenewpartition.‚Now,sincethisisnotpartitionzero,andH***…thereforeallFML_HEADERsrequireonlyone256byteblockofmemory,A***…weknowthatbuild_fml_headersuccessfullyfoundroomfortheD***…FML_HEADERandsowecancallbuild_ram_memtbl_entrytobuildan7***…entryforthecurrentpartitioninthedest_memtbl.***=***ŠIftheprevious_node_ptrisequaltozero,thenbuild_fmlE***…didnotfindevenone256bytepagewithinthecurrentpartition.=***…Inthiscaseweresetthedest_memtbl_ptrtopointtotheE***…previousentrywithinthedest_memtbl(decrementitbythelengthC***…ofoneentry).‚Thishastheeffectofignoringthecurrentnull***…partition.***N****************************************************************************** %ŠTTL„INITNEXTPARTITIONS-ALGORITHMŠPAGE!*init_next_partitions: procedure;    >*ˆdowhile(MAPMTYP.MAPPART(next(src_memtbl_ptr))<>$FFFF);*’callinit_next_pointers;%*’if(MAPMTYP(src_memtbl_ptr)=$FF)#*’thencallbuild_rom_memtbl_entry; *’elsedo;*œcallcheck_memmap_conflict;%*œif(got_alias_partition_flag=set)#*œthencallbuild_ram_memmap_entry; *œelsedo;*¦callbuild_fml;*¦if(previous_node_ptr=0)*¦thendest_memtbl_ptr<==*«dest_memtbl_ptr-*«length(dest_memtbl_entry); *¦elsedo;*°callbuild_fml_header;*°callbuild_ram_memtbl_entry;*¦end;*œend;*’end;*ˆend;4*ˆMAPTYP.MAPPART(next(dest_memtbl_ptr))<==$FFFF;  *end init_next_partitions; 'ŠTTL„INITNEXTMEMORYPARTITIONS-CODEŠPAGE*!*init_next_partitions: procedure;* INEXTMEM:*>*ˆdowhile(MAPMTYP.MAPPART(next(src_memtbl_ptr))<>$FFFF);*’callinit_next_pointers;%*’if(MAPMTYP(src_memtbl_ptr)=$FF)#*’thencallbuild_rom_memtbl_entry;* ŠWHILE.W12(A0)#$FFFFDO.S BSR.S‚INEXTPTRS IF.Bƒ(A0)#$FFTHEN.S BSR„BROMNODE * *’elsedo;*œcallcheck_memmap_conflict;%*œif(got_alias_partition_flag=set)#*œthencallbuild_ram_memtbl_entry;*ELSE.S BSR„CMEMCONF TST.B‚D2IF…THEN.Sˆ “BSR„BRAMNODE * *›elsedo;*¦callbuild_fml;*¦if(previous_node_ptr<>0)*¦thendest_memtbl_ptr<==*«dest_memtbl_ptr-*«length(dest_memtbl_entry); *¦elsedo;*°callbuild_fml_header;*°callbuild_ram_memtbl_entry;*¦end;*œend;*’end;*ˆend;*“ELSE.S “BSR.S‚BFML “IF.LƒA2D0THEN.S“LEA„-MAPENTSZ(A1),A1“ELSE.S –BSR„BFMLHEAD –BSR„BRAMNODE“ENDIENDIENDIŠENDW *5*ˆMAPMTYP.MAPPART(next(dest_memtbl_ptr))<==$FFFF;*#ŠMOVE.W#$FFFF,MAPMTYP+MAPENTSZ(A1) **end init_next_partitions;*ŠRTS 'ŠTTL„INITNEXTPOINTERS-DOCUMENTATIONŠPAGEM********************************************************************************)** *…Name:‚INEXTPTRS(init_next_pointers):*** ***…Function:C***ŠInitializesallpointersandcountersforallmemorypartitions***…exceptpartitionzero.*** ***…Inputs:'***ˆ1.)‚A0=previous(src_memtbl_ptr).(***ˆ2.)‚A1=previous(dest_memtbl_ptr).*** ***…Outputs:&***ˆ1.)‚A0=current(src_memtbl_ptr).'***ˆ2.)‚A1=current(dest_memtbl_ptr).***ˆ3.)‚A5=clear_mem_ptr.***ˆ4.)‚D4=start_of_part_ptr.***ˆ5.)‚D5=end_of_part_ptr.***ˆ6.)‚D6=bytes_cleared.***ˆ7.)‚D7=fml_header_len.******…Sideeffects:1***ˆ1.)‚Executionmightnotreturn(callKILLER).******…Explanation:@***ŠFirstwesetthefml_header_lentoone(anypartitionexceptG***…partitionzerorequiresonlyone256bytepageforitsFML_HEADER),@***…andadvanceboththesrc_memtbl_ptrandthedest_memtbl_ptr.***C***ŠNextwesetthestart_of_part_ptrtotheceilingoftheMAPSTRAH***…fieldinthesrc_memtbl,andtheend_of_part_ptrtotheflooroftheH***…MAPENDAfield.‚(Notethatwealwaysalignourpartitionson256byteI***…pageboundaries,andthatwealwaysroundtothesameammountorless+***…memoryasdescribedinthesrc_memtbl).***D***ŠWethensetclear_mem_ptrtothevalueofstart_of_part_ptr,andE***…setbytes_clearedtozero.‚(ThuswewillstartclearingmemoryatG***…thestartofthecurrentpartition.)‚Finally,wecallKILLERiftheG***…currentpartitiondescribedbythesrc_memtbldoesnotcontainsome'***…positivenumberofpagesofmemory.***L**************************************************************************** #ŠTTL„INITNEXTPOINTERS-ALGORITHMŠPAGE*init_next_pointers: procedure;    *ˆfml_header_len<==1;@*ˆsrc_memtbl_ptr<==src_memtbl_ptr+length(src_memtbl_entry);C*ˆdest_memtbl_ptr<==dest_memtbl_ptr+length(dest_memtbl_entry); 8*ˆstart_of_part_ptr<==ceil(MAPSTRA(src_memtbl_ptr));7*ˆend_of_part_ptr<==floor(MAPENDA(src_memtbl_ptr));&*ˆclear_mem_ptr<==start_of_part_ptr;*ˆbytes_cleared<==0; +*ˆif(start_of_part_ptr>=end_of_part_ptr)*ˆthencallKILLER;  *end init_next_pointers; ŠTTL„INITNEXTPOINTERS-CODEŠPAGE**init_next_pointers: procedure* INEXTPTRS: **ˆfml_header_len<==1;@*ˆsrc_memtbl_ptr<==src_memtbl_ptr+length(src_memtbl_entry);C*ˆdest_memtbl_ptr<==dest_memtbl_ptr+length(dest_memtbl_entry);* ŠMOVE.L#1,D7 ŠLEA„12(A0),A0 ŠLEA„MAPENTSZ(A1),A1 *8*ˆstart_of_part_ptr<==ceil(MAPSTRA(src_memtbl_ptr));7*ˆend_of_part_ptr<==floor(MAPENDA(src_memtbl_ptr));&*ˆclear_mem_ptr<==start_of_part_ptr;*ˆbytes_cleared<==0;*ŠMOVE.LMAPSTRA(A0),D4ŠADD.L‚#255,D4 ŠCLR.B‚D4 ŠMOVE.LMAPENDA(A0),D5 ŠCLR.B‚D5 ŠMOVE.LD4,A5 ŠCLR.L‚D6 M* See if the exec is in this partition (start_of_p < end of exec =< end_of_p) =‰IF.W(A0)#$FF00THEN.S‚IfthisisNOTaROMpartition, 4‰IF.LEEND(PC)D4AND.LEEND(PC)D5THEN.S6ŠMOVE.LEEND(PC),D4‹Startofpartitionisendofexec.;ŠLEA„255+ENDMEMT(PC),A5„Endofinitdat(fromINITDAT)+255!ŠMOVE.LA5,D6‘D6=endofinitdatŠCLR.B‚D6”Form"ceiling".*ŠMOVE.LD6,A5‘A5<--clear_memory_pointer. ŠCLR.L‚D6‰ENDI ‰ENDI  *+*ˆif(start_of_part_ptr>=end_of_part_ptr)*ˆthencallKILLER;*ŠIF.LƒD4D5THEN.S#KILL.EXECT0ƒBESTIMEMSA,PT_PTRS_BADŠENDI **end init_next_pointers;*ŠRTS ŠPAGEŠTTL„BUILDŽFML-DOCUMENTATIONL**********************************************************************************…Name:‚BFML(build_fml):*** ***…Function:>***ŠBuild_fmlwillzerooutmemorystartingatclear_mem_ptr+A***…bytes_cleared,andbuildthefreememorylisttodescribetheF***…partition.‚Italsodetects"holes"inthepartition,anddescribes3***…themas"used"memorywithinthecurrentblock.*** ***…Inputs:***ˆ1.)‚A5=clear_mem_ptr.***ˆ2.)‚D4=end_of_part_ptr.***ˆ3.)‚D6=bytes_cleared.*** ***…Outp uts:=***ˆ1.)‚A3=first_node_ptr(fromsubroutinebuild_fml_node).***ˆ2.)‚A4=last_node_ptr."***ˆ3.)‚FMLforcurrentpartition.******…Sideeffects:,***ˆ1.)‚A2(previous_node_ptr)isdestroyed.2***ˆ2.)‚A5(clear_mem_ptr)=D5(end_of_part_ptr)./***ˆ3.)‚D1,D2,andD3(scratch)aredestroyed.(***ˆ4.)‚D6(bytes_cleared)isdestroyed.-***ˆ5.)‚Mightnotreturn(mightcallKILLER).******…Explanation:B***ŠFirstweinitializethefirst_node_ptrtozero.‚ThistellstheH***…build_fml_nodesubroutinethatweareworkingwiththefirstnodein ***…theFML.***C**ŠNotethattheclear_next_nodeandbuild_last_fml_nodelabelscanI***…bothbejumpedtobythecodeforhandlingbuserrors(build_fml_be).***B***ŠAtclear_next_nodeweupdatelast_node_ptrtothevalueoftheC***…clear_mem_ptr.‚(Last_node_ptrisaninputtothebuild_fml_nodeG***…subroutinetellinghimwherethe"last"orcurrentnodeislocated,H***…andisalsoanoutputfromthisroutinetellingthecallerwheretheH***…lastnodeintheFMLislocated.)‚Wealsoincrementclear_mem_ptrbyE***…thevalueofbytes_cleared.‚(Thisisneccessaryinorderto"skipD***…over"andnotinitializetheINITcodewhenbuildingtheFMLfor***…partitionzero.***B***ŠNextwesetupthestacksothatanybuserrorwillsendustoI***…build_fml_be.‚Thisisthecodethatwillbeusedformappingoverany$***…"holes"inthememorypartition.***D***ŠNowweloopuntilweeithercleartherestofthecurrentmemoryF***…partition(fallthroughtheloop),orfindaholeinmemory(goto***…build_fml_be).***D***ŠIfwedoclearmemorytotheendofthecurrentpartitionwithinG***…thisloop,wemustpopthebuserrorvectorjunkoffthestack,andI***…calculatethevalueofbytes_cleared(clear_mem_ptr-last_node_ptr).F***…ThiscalculationisneccessaryatthispointinordertomakethisE***…case(foundablockofallgoodmemory)lookthesameasthecaseE***…wherewefoundsomegoodmemoryandthenfounda"hole"inmemoryF***…(tookabuserror,andwenttobuild_fml_be).‚InthatcasewewillH***…"freeze"bytes_clearedtothevalueofclear_mem_ptr-last_node_ptrH***…inordertorememberthenumberof"good"bytesofmemorywithintheI***…currentblock,andincrementclear_mem_ptr(bypages)untilweeitherG***…reachtheendofthepartition,orwefindsomemore"good"memory.I***…Thusatthatpointourcurrentblockwillbeframedbythelast_node_E***…ptr(pointstothestartofthecurrentblock),theclear_mem_ptrJ***…(pointtotheendofthecurrentblock),andthebytes_clearedcounterG***…whichholdsthenumberof"good"bytesinthecurrentblock(ortheD***…numberofbytesoffreememory).‚Thisismostoftheinformation&***…neededtobuildanodeintheFML.***C***ŠFinally,thebuild_last_fml_nodelabelwillbuildanodeinthe;***…FMLifthevalueofbytes_clearedisgreaterthanzero.***M***************************************************************************** ŠTTL„BUILDŽFML-ALGORITHMŠPAGE*build_fml: procedure;    *ˆprevious_node_ptr<==0; *clear_next_node:*ˆD1,D2,D3<==0;"*ˆlast_node_ptr<==clear_mem_ptr;2*ˆclear_mem_ptr<==clear_mem_ptr+bytes_cleared;*ˆpushaddr(build_fml_be); *ˆpush'BE';-*ˆdountil(clear_mem_ptr=end_of_part_ptr);'*’four_longwords(clear_mem_ptr)<==0;'*’clear_mem_ptr<==clear_mem_ptr+16;*ˆend;*ˆpopbus_errorjunkoffstack;2*ˆbytes_cleared<==clear_mem_ptr-last_node_ptr; *build_last_fml_node:*ˆif(bytes_cleared>0)*ˆthencallbuild_fml_entry;  *end build_fml; "ŠTTL„BUILDŽFREEMEMORYLIST-CODEŠPAGE**build_fml: procedure;*BFML: **ˆprevious_node_ptr<==0;* ŠSUB.L‚A2,A2 **clear_next_node:*ˆD1,D2,D3<==0;!*ˆlast_node_ptr<==clear_mem_ptr2*ˆclear_mem_ptr<==clear_mem_ptr+bytes_cleared;*ˆpushaddr(build_fml_be); *ˆpush'BE';* CNEXTNODE: ŠCLR.L‚D1 ŠCLR.L‚D2 ŠCLR.L‚D3 ŠLEA„(A5),A4 ŠLEA„(A5,D 6.L),A5 ŠPEA„BFMLBE(PC) ŠMOVE.W#'BE',-(A7) *-*ˆdountil(clear_mem_ptr=end_of_part_ptr);'*’four_longwords(clear_mem_ptr)<==0;'*’clear_mem_ptr<==clear_mem_ptr+16;*ˆend;*ŠREPEATMOVEM.LD0-D3,(A5)/NOP”ThisNOPforcestheexecutionunittowait)*§untilthebusinterfaceunitisdoneon&*§a68020,incasewegetabuserror.LEA„16(A5),A5ŠUNTIL.LA5D5**ˆpopbus_errorjunkoffstack;2*ˆbytes_cleared<==clear_mem_ptr-last_node_ptr;* ŠADD.L‚#6,A7 ŠMOVE.LA5,D6 ŠSUB.L‚A4,D6 **build_last_fml_node:*ˆif(bytes_cleared>0)*ˆthencallbuild_fml_entry;* BLASTNODE:ŠIF.LƒD6D0THEN.SBSR.S‚BFMLNODEŠENDI **end build_fml;*ŠRTS 4ŠTTL„BUSERRORWHILECLEARINGMEMORY-DOCUMENTATIONŠPAGEN************************************************************************************…Explanation:?***ŠThiscodeisexecutedifweencounteraholewhileclearing@***…memory.‚Notethetwolabelsbuild_fml_beandbuild_fml_be_x.G***…Executionwill"goto"thebuild_fml_belabelifabuserroroccursB***…whenclearingmemoryviatheloopinthebuild_fmlsubroutine.F***…Likewise,executionwill"goto"thebuild_fml_be_xlabelifabusH***…erroroccurswhilelookingatthetopofeachpageofmemoryfortheF***…next"good"page.‚(i.e.,Thisblockofcodecontainsa"buserror"G***…loop.‚Wekeepgoingtobuild_fml_be_xuntilweeitherreachtheend:***…ofthecurrentpartition,orfindsome"good"memory.)***A***ŠFirstwecalculatebytes_clearedtobethedifferencebetweenG***…theclear_mem_ptrandthelast_node_ptr.‚ThenwecallKILLERiftheJ***…buserroroccurredinthemiddleofapage.‚(Bytes_clearedisnotona***…pageboundary.)***E***ŠOtherwise,weupdatetheclear_mem_ptrtopointtothetopoftheG***…nextpageinmemory.‚Ifweareattheendofthecurrentpartition,@***…thenwegotothebuild_last_fml_nodelabelinthebuild_fml***…subroutine.***B***ŠIfwearenotattheendofthepartition,wesetthestackupF***…sothatabuserrorwillsendusbacktothebuild_fml_be_xlabel.G***…ThenweattempttowriteintothememorylocationpointedtobytheF***…clear_mem_ptr.‚(Ifabuserroroccurs,thenexecutionwill"goto"I***…build_fml_be_x,andwewill"loop"untilwerunoutofmemoryinthis+***…partition,orfindsome"good"memory.)***D***ŠIfwe"fallthrough"tothenextinstruction(findagoodmemoryI***…location),thenwegetridofthebuserrorinformationonthestack.J***…Ifwefoundsomegoodmemoryinthecurrentblock(bytes_cleared>0),E***…thenwecallbuild_fml_nodetobuildanodeintheFML,andresetI***…bytes_clearedtozero.‚Ineithercasewegotoclear_next_nodeinthe***…build_fmlsubroutine.***N****************************************************************************** 0ŠTTL„BUSERRORWHILECLEARINGMEMORY-ALGORITHMŠPAGE*build_fml_be:2*ˆbytes_cleared<==clear_mem_ptr-last_node_ptr;$*ˆif(mod(bytes_cleared,256)<>0)*ˆthencallKILLER; *build_fml_be_x:(*ˆclear_mem_ptr<==clear_mem_ptr+256;&*ˆif(clear_mem_ptr=end_of_part_ptr)!*ˆthengotobuild_last_fml_node;*ˆpushaddr(build_fml_be_x); *ˆpush'BE';*ˆword(clear_mem_ptr)<==0;*ˆpopbus_errorjunkoffstack;!*ˆif(bytes_cleared>0)thendo;*’callbuild_fml_node;*’bytes_cleared<==0;*ˆend;*ˆgotoclear_next_node;  *end build_fml_be; +ŠTTL„BUSERRORWHILECLEARINGMEMORY-CODEŠPAGE**build_fml_be:*BFMLBE: *2*ˆbytes_cleared<==clear_mem_ptr-last_node_ptr;$*ˆif(mod(bytes_cleared,256)<>0)*ˆthencallKILLER;* ŠMOVE.LA5,D6 ŠSUB.L‚A4,D6 ŠIF.BƒD6D0THEN.S"KILL.EXECT0ƒBESTIMEMSA,BAD_MEMORYŠENDI **build_fml_be_x:*BFMLBEX: *(*ˆclear_mem_ptr<==clear_mem_ptr+256;&*ˆif(clear_mem_ptr=end_of_part_ptr)!*ˆthengotobuild_last_fml_node;*ŠLEA„256(A5),A5  ŠIF.LƒA5D5THEN.SBRA„BLASTNODEŠENDI**ˆpushaddr(build_fml_be_x); *ˆpush'BE';*ˆword(clear_mem_ptr)<==0;*ŠPEA„BFMLBEX(PC)ŠMOVE.W#'BE',-(A7) ŠMOVE.WD0,(A5)/ŠNOP—ThisNOPforcestheexecutionunittowait)*§untilthebusinterfaceunitisdoneon&*§a68020,incasewegetabuserror. **ˆpopbus_errorjunkoffstack;!*ˆif(bytes_cleared>0)thendo;*’callbuild_fml_node;*’bytes_cleared<==0;*ˆend;*ˆgotoclear_next_node;* ŠADD.L‚#6,A7 ŠIF.LƒD6D0THEN.SBSR.S‚BFMLNODE CLR.L‚D6ŠENDI  ŠBRA„CNEXTNODE #ŠTTL„BUILDŽFMLNODE-DOCUMENTATIONŠPAGEL*******************************************************************************$***…Name:‚BFMLNODE(build_fml_node):*** ***…Function:E***ŠBuildsanodeinthefreememorylist(fillsinthefmlfp,fmlbp,E***…fmlfree,andfmlusedfields),andlinksthisnodetoanyprevious***…nodesintheFML.*** ***…Inputs:***ˆ1.)‚A2=previous_node_ptr.***ˆ2.)‚A4=last_node_ptr.***ˆ3.)‚A5=clear_mem_ptr.***ˆ4.)‚D6=bytes_cleared.*** ***…Outputs:8***ˆ1.)‚FMLnode(pointedtobypreviouslast_node_ptr).D***ˆ2.)‚FmlfpofpreviousnodeinFML(ifthisisnotthefirstnode***intheFML).C***ˆ3.)‚A3=first_node_ptr(ifthisisthefirstnodeintheFML).***ˆ4.)‚A4=previous_node_ptr.******…Sideeffects:"***ˆ1.)‚D1(scratch)isdestroyed.******…Explanation:B***ŠFirstwesetupthefmlfpandfmlbplinksinthecurrentnode.E***…NextwesetupfmlusedtocontainthenumberofpagesbetweentheA***…last_node_ptrandtheclear_mem_ptrminusthenumberofpagesE***…describedbythebytes_clearedcounter.‚ThenwesetfmlfreeequalG***…tothenumberofpagesdescribedbythebytes_clearedcounter.‚ThusJ***…thesumoffmlusedandfmlfreeisequaltothenumberofpagesbetween-***…thelast_node_ptr,andtheclear_mem_ptr.***E***ŠNow,ifthisisthefirstnodeintheFML(previous_node_ptr=0)K***…thensetfirst_node_ptrequaltolast_node_ptrandthus"remember"thatG***…thisisthefirstnode.‚Otherwise,updatethefmlfpofthepreviousF***…nodetopointtothisnode.‚Finallysetprevious_node_ptrequalto>***…last_node_ptr(andthus"remember"thisnode),andreturn.***M***************************************************************************** ŠTTL„BUILDŽFMLNODE-ALGORITHMŠPAGE*build_fml_node: procedure;    *ˆfmlfp(last_node_ptr)<==0;.*ˆfmlbp(last_node_ptr)<==previous_node_ptr;@*ˆfmlused(last_node_ptr)<==((clear_mem_ptr-last_node_ptr)-*¥(bytes_cleared))/256;2*ˆfmlfree(last_node_ptr)<==bytes_cleared/256;*ˆif(previous_node_ptr=0)(*ˆthenfirst_node_ptr<==last_node_ptr;3*ˆelsefmlfp(previous_node_ptr)<==last_node_ptr;&*ˆprevious_node_ptr<==last_node_ptr;  *end build_fml_node; ŠTTL„BUILDŽFMLNODE-CODEŠPAGE**build_fml_node:* BFMLNODE: **ˆfmlfp(last_node_ptr)<==0;.*ˆfmlbp(last_node_ptr)<==previous_node_ptr;*ŠCLR.L‚FMLFP(A4)ŠMOVE.LA2,FMLBP(A4) **ˆfmlused(last_node_ptr)<==8*’(clear_mem_ptr-last_node_ptr-bytes_cleared)/256;2*ˆfmlfree(last_node_ptr)<==bytes_cleared/256;* ŠMOVE.LA5,D1 ŠSUB.L‚A4,D1 ŠSUB.L‚D6,D1 ŠLSR.L‚#8,D1ŠMOVE.LD1,FMLUSED(A4) ŠMOVE.LD6,D1 ŠLSR.L‚#8,D1ŠMOVE.LD1,FMLFREE(A4) *ˆif(previous_node_ptr=0)(*ˆthenfirst_node_ptr<==last_node_ptr;3*ˆelsefmlfp(previous_node_ptr)<==last_node_ptr;*ŠIF.LƒA2D0THEN.S LEA„(A4),A3 ELSE.SMOVE.LA4,FMLFP(A2)ŠENDI *&*ˆprevious_node_ptr<==last_node_ptr;* ŠLEA„(A4),A2 **end build_fml_node;*ŠRTS %ŠTTL„BUILDŽFMLHEADER-DOCUMENTATIONŠPAGEM********************************************************************************&***…Name:‚BFMLHEAD‚(build_fml_header):*** ***…Function:E***ŠFindsablockofmemorytocontaintheFML_HEADERnode(ineitherF***…highorlowmemory),andbuilds anFML_HEADERnodetodescribethe***…currentpartition.*** ***…Inputs:D***ˆ1.)‚Src_memtbl_node(tellswhethertheFML_HEADERbelongsinlow***highmemory).***ˆ2.)‚A0=src_memtbl_ptr.***ˆ3.)‚D4=start_of_part_ptr.***ˆ4.)‚D5=end_of_part_ptr.*** ***…Outputs:9***ˆ1.)‚FML_HEADERnodedescribingthecurrentpartition.E***ˆ2.)‚Fml_header_ptr(Ifthefml_header_ptr=0uponreturningfrom<***thisroutine,thenwecouldn'tfindenoughmemoryintheA***currentpartitionfortheFML_HEADER.‚Thisismeaningfulonly***forpartitionzero.)******…Sideeffects:‚None.******…Explanation:D***ŠFirstwedeterminewhethertheFML_HEADERbelongsinloworhighB***…memoryandcalltheappropriatesubroutinetoreturntoustheI***…correspondingpointer.‚Ifthesubroutinereturnedanon-zeropointer,G***…thenitfoundenoughmemoryinthecurrentpartitiontocontaintheF***…FML_HEADER(itfoundatleastfml_header_lenpages),andsowemay%***…continuetobuildtheFML_HEADER.***?***ŠWesetlowfree,stravail,andendavailtothevaluesoftheH***…first_node_ptr,start_of_part_ptr,andend_of_part_ptrrespectively.E***…WemovetheMAPMTYPandMAPPARTfieldsfromthesrc_memtbltothe7***…FML_HEADERnode,andsetupthesemaphorecounters.***M***************************************************************************** !ŠTTL„BUILDŽFMLHEADER-ALGORITHMŠPAGE*build_fml_header: procedure;    '*ˆif(fml_headerbelongsinlowmemory)#*ˆthencallget_fml_header_ptr_low;$*ˆelsecallget_fml_header_ptr_high; #*ˆif(fml_header_ptr<>0)thendo;.*’lowfree(fml_header_ptr)<==first_node_ptr;2*’stravail(fml_header_ptr)<==start_of_part_ptr;0*’endavail(fml_header_ptr)<==end_of_part_ptr; 8*’memtype(fml_header_ptr)<==MAPMTYP(src_memtbl_ptr);8*’mempart(fml_header_ptr)<==MAPPART(src_memtbl_ptr); "*’semfrmem(fml_header_ptr)<==1;$*’semfrmem+2(fml_header_ptr)<==0;"*’semwtmem(fml_header_ptr)<==0;$*’semwtmem+2(fml_header_ptr)<==0;*ˆend;  *end build_fml_header; ŠTTL„BUILDŽFMLHEADER-CODEŠPAGE**build_fml_header: procedure;* BFMLHEAD: *'*ˆif(fml_headerbelongsinlowmemory)#*ˆthencallget_fml_header_ptr_low;$*ˆelsecallget_fml_header_ptr_high;*:ŠBTSTƒ#0,10(A0)ŠIf(src_memtbl_node(byte_10(bit_0))=0)7ŠIF…THEN.SŒthenfml_headerbelongsinHIGHmemory; 6BSR.S‚GFMLPTRH‹elsefml_headerbelongsinLOWmemory; ELSE.SBSR.S‚GFMLPTRLŠENDI *#*ˆif(fml_header_ptr<>0)thendo;.*’lowfree(fml_header_ptr)<==first_node_ptr;2*’stravail(fml_header_ptr)<==start_of_part_ptr;0*’endavail(fml_header_ptr)<==end_of_part_ptr;*ŠIF.LƒA5D0THEN.SMOVE.LA3,LOWFREE(A5)MOVE.LD4,STRAVAIL(A5)MOVE.LD5,ENDAVAIL(A5) *8*’memtype(fml_header_ptr)<==mapmtyp(src_memtbl_ptr);8*’mempart(fml_header_ptr)<==mappart(src_memtbl_ptr);*MOVE.WMAPMTYP(A0),MEMTYPE(A5) *"*’semfrmem(fml_header_ptr)<==1;$*’semfrmem+2(fml_header_ptr)<==0;"*’semwtmem(fml_header_ptr)<==0;$*’semwtmem+2(fml_header_ptr)<==0;*ˆend;*MOVE.W#1,SEMFRMEM(A5)CLR.L‚SEMFRMEM+2(A5)CLR.W‚SEMWTMEM(A5)CLR.L‚SEMWTMEM+2(A5)ŠENDI **end build_fml_header;*ŠRTS 0ŠTTL„GETFMLHEADERPOINTERHIGH-DOCUMENTATIONŠPAGEN*********************************************************************************-***…Name:‚GFMLPTRH(get_fml_header_ptr_high):*** ***…Function::***ŠThissubroutinereturnsapointertoablockofmemoryI***…fml_header_lenpageslonginthecurrentpartition.‚ThisblockistheE***…highestaddressedblockinthecurrentpartitionthatisatleastI***…fml_header_lenpageslong.‚ThissubroutinehandlesallaccountingforE***…theblockit"steals"fromthepartition.‚(IteithercountsitasE***…beinga"usedpageinthecurrentblock,or,ifthecurrentblockH***…consistsofonlyfml_header_lenpages,thenit"unlinks"thecurre ntH***…block,andcountsitasa"used"portionofthepreviousblock,ifa***…previousblockexists.)*** ***…Inputs:***ˆ1.)‚A4=last_node_ptr.***ˆ2.)‚D7=fml_header_len.*** ***…Outputs:***ˆ1.)‚A5=fml_header_ptr.;***ˆ2.)‚Ifwecan'tfindanyblockinthecurrentpartition'***atleastfml_header_lenpageslong:+***A.)‚A3(first_node_ptr)issettozero.****B.)‚A4(last_node_ptr)issettozero.******…Sideeffects:&***ˆ1.)‚D1(scratch)maybedestroyed.******…Explanation:E***ŠFirstwesetfml_header_ptrequaltothelast_node_ptrandsearchJ***…backwardthroughtheFMLuntilwefindablockatleastfml_header_lenI***…pageslong.‚IfwereachthebeginningoftheFML(fml_header_pty=0)H***…withoutfindingablockofmemoryfml_header_lenpageslong,thenweG***…zerooutthefirstandlast_node_ptrandreturn.‚(Fml_header_ptris***…alsozero.)***E***ŠOtherwise,wechecktoseeiftheblockisexactlyfml_header_lenG***…pageslong.‚Ifitis,thenwecallunlink_fml_header_nodetounlinkI***…thenodefromtheFMLlinkedlist,andcountitsmemoryasbeingpart.***…oftheusedportionofthepreviousblock.***>***ŠIftheblockisgreaterthanfml_header_lenpages,wethenH***…decrementfmlfreeandincrementfmlusedbyfml_header_lenpages,and@***…incrementfml_header_ptrbyfml_header_len*256bytessothatI***…fml_header_ptrnowpointstothefirst"used"pagewithinthecurrent***…blockandreturn.***N****************************************************************************** ,ŠTTL„GETFMLHEADERPOINTERHIGH-ALGORITHMŠPAGE$*get_fml_header_ptr_high: procedure;    #*ˆfml_header_ptr<==last_node_ptr;7*ˆdowhile(fmlfree(fml_header_ptr)D7DO.S MOVE.LFMLBP(A5),A5 *"*’if(fml_header_ptr=0)thendo;*œfirst_node_ptr<==0;*œlast_node_ptr<==0; *œreturn;*’end;*ˆend;IF.LƒA5D0THEN.S SUB.L‚A3,A3 SUB.L‚A4,A4RTSENDIŠENDW *0*ˆif(fmlfree(fml_header_ptr)=fml_header_len)#*ˆthencallunlink_fml_header_node;* ŠIF.LƒFMLFREE(A5)„D7THEN.SBSR.S‚UFMLHEAD * *ˆelsedo;9*’fmlfree(fml_header_ptr)<==fmlfree(fml_header_ptr)-*¯fml_header_len;9*’fmlused(fml_header_ptr)<==fmlused(fml_header_ptr)+*¯fml_header_len;%*’fml_header_ptr<==fml_header_ptr+!*¥fmlfree(fml_header_ptr)*256;*ˆend*ELSE.SSUB.L‚D7,FMLFREE(A5) ADD.L‚D7,FMLUSED(A5) MOVE.LFMLFREE(A5),D1 LSL.L‚#8,D1LEA„(A5,D1.L),A5ŠENDI**end get_fml_header_ptr_high;*ŠRTS /ŠTTL„GETFMLHEADERPOINTERLOW-DOCUMENTATIONŠPAGEN*********************************************************************************,***…Name:‚GFMLPTRL(get_fml_header_ptr_low):*** ***…Function::***ŠThissubroutinereturnsapointertoablockofmemoryI***…fml_header_lenpageslonginthecurrentpartition.‚ThisblockistheD***…lowestaddressedblockinthecurrentpartitionthatisatleastI***…fml_header_lenpageslong.‚ThissubroutinehandlesalltheaccountingI***…fortheblockit"steals"fromthepartition.‚(ItcountstheblockasI***…parto fthe"used"portionofthepreviousblock,ifapreviousblockH***…exists.)‚Also,sincethissubroutine"steals"ablockofmemoryfromE***…lowmemory,itmayhvaetomovethepointersandcounters(fmlfp,J***…fmlbp,fmlfree,fmlused)fromtheirpositiontoalocationfml_header_'***…lenpagesfurther"down"inmemory.*** ***…Inputs:***ˆ1.)‚A3=first_node_ptr.***ˆ2.)‚D7=fml_header_len.*** ***…Outputs:***ˆ1.)‚A5=fml_header_ptr.;***ˆ2.)‚Ifwecan'tfindanyblockinthecurrentpartition'***atleastfml_header_lenpageslong:+***A.)‚A3(first_node_ptr)issettozero.****B.)‚A4(last_node_ptr)issettozero.******…Sideeffects:‚None:******…Explanation:F***ŠFirstwesetfml_header_ptrequaltothefirst_node_ptrandsearchI***…forwardthroughtheFMLuntilwefindablockatleastfml_header_lenC***…pageslong.‚IfwereachtheendoftheFML(fml_header_pty=0)H***…withoutfindingablockofmemoryfml_header_lenpageslong,thenweG***…zerooutthefirstandlast_node_ptrandreturn.‚(Fml_header_ptris***…alsozero.)***E***ŠOtherwise,wechecktoseeiftheblockisexactlyfml_header_lenG***…pageslong.‚Ifitis,thenwecallunlink_fml_header_nodetounlinkI***…thenodefromtheFMLlinkedlist,andcountitsmemoryasbeingpart.***…oftheusedportionofthepreviousblock.***>***ŠIftheblockisgreaterthanfml_header_lenpages,wecallG***…move_fml_nodetomovethepointersandcountersofthecurrentnodeJ***…(fmlfp,fmlbp,fmlfree,fmlused)fml_header_lenpages"down"inmemory;***…inordertomakeroomfortheFML_HEADERinlowmemory.***N****************************************************************************** +ŠTTL„GETFMLHEADERPOINTERLOW-ALGORITHMŠPAGE#*get_fml_header_ptr_low: procedure;    $*ˆfml_header_ptr<==first_node_ptr;7*ˆdowhile(fmlfree(fml_header_ptr)D7DO.S MOVE.LFMLFP(A5),A5 *"*’if(fml_header_ptr=0)thendo;*œfirst_node_ptr<==0;*œlast_node_ptr<==0; *œreturn;*’end;*ˆend;*IF.LƒA5D0THEN.S SUB.L‚A3,A3 SUB.L‚A4,A4RTSENDIŠENDW *0*ˆif(fmlfree(fml_header_ptr)=fml_header_len)#*ˆthencallunlink_fml_header_node;*ˆelsecallmove_fml_node;* ŠIF.LƒFMLFREE(A5)„D7THEN.SBSR.S‚UFMLHEADELSE.SBSR.S‚MFMLNODEŠENDI **end get_fml_header_ptr_low;*ŠRTS +ŠTTL„UNLINKFMLHEADERNODE-DOCUMENTATIONŠPAGEN*********************************************************************************,***…Name:‚UFMLHEAD(unlink_fml_header_node):*** ***…Function:E***ŠThissubroutinehandlestheunlinkingofthefml_header_nodefromI***…theFML.‚Ittakescareoflinkingtheprevious_node(ifthereisone)I***…tothenext_node(ifthereisone)andviceversa.‚ItalsotakescareJ***…ofaccountingforthefml_header_nodeaspartofthe"used"portionof(***…theprevious_node(ifthereisone).*** ***…Inputs:***ˆ1.)‚A3=first_node_ptr.***ˆ2.)‚A4=last_node_ptr.***ˆ3.)‚A5=fml_header_ptr.*** ***…Outputs:E***ˆ1.)‚UpdatedFMLwiththefml_header_node"unlinked"fromtheFML,?***andcountedaspartofthe"used"partofitsprevious_node***(ifthereisone).******…Sideeffects:.***ˆ1.)‚A3(first_node_ptr)couldgetchanged.-***ˆ2.)‚A4(last_node_ptr)couldgetchanged.3***ˆ3.)‚A2(pr evious_node_ptr)couldgetdestroyed.)***ˆ4.)‚A6(scratch)couldgetdestroyed.&***ˆ5.)‚D1(scratch)maybedestroyed.******…Explanation:C***ŠThefirstdoblockhandlesthecasewherethefml_header_ptrisA***…equaltothefirst_node_ptr.‚InthiscasewemustadvancetheG***…first_node_ptrtopointtothenextnodeintheFML.‚IfthereisnoJ***…nextnode(newfirst_node_ptr=0),thenwezerooutthelast_node_ptrD***…toindicateanemptyFML,andreturn.‚Otherwise,wezeroouttheD***…fmlbpofthenewfirst_node_ptrtoindicatethatthisisnowthe%***…beginningoftheFML,andreturn.***>***ŠThenextlargedoblockofcodehandlesthecasewheretheI***…fml_header_ptrisequaltothelast_node_ptr.‚InthiscaseweattemptJ***…tobackupthelast_node_ptrtopointtothepreviousnodeintheFML.F***…Ifthereisnopreviousnode(newlast_node_ptr=0),thenwezero@***…outthefirst_node_ptrtoindicateanemptyFML,andreturn.J***…Otherwise,wezerooutthefmlfpofthenewlast_nodetoindicatethatG***…thisisnowtheendoftheFML,updatethefmlusedfieldofthenew@***…last_nodetoequalitscurrentvalue,plusthelengthofthe9***…previouslast_node(fmlfreeandfmlused),andreturn.***@***ŠIfneitherofthesecasesoccurred,thenthefml_header_nodeI***…existssomewhereinthemiddleoftheFML.‚InthiscasewemustfirstD***…getapointertothenodebeforethefml_header_nodeintheFML.G***…Nowthefmlfpofthispreviousnodemustbesettothevalueofthe:***…fmlfpofthefml_header_node,andthus"skipover"theG***…fml_header_node.‚Havingdonethis,weupdatethefmlusedportionofI***…thisprevious_nodetoincludeitsoldfmlusedvalueandthelengthof?***…thefml_header_node(fmlfreeandfmlused).‚(ThisinessenceG***…countstheentirefml_header_node,usedandfreememory,aspartofH***…theusedportionofthepreviousnode.)‚Finally,weupdatethefmlbpI***…ofthenodeafterthefml_header_nodeintheFMLtopointbacktothe;***…previousnode,andthuscompletethe"unlinking"ofthe***…fml_header_node.***M***************************************************************************** 'ŠTTL„UNLINKFMLHEADERNODE-ALGORITHMŠPAGE#*unlink_fml_header_node: procedure;    /*ˆif(fml_header_ptr=first_node_ptr)thendo;,*’first_node_ptr<==fmlfp(first_node_ptr);*’if(first_node_ptr=0)*’thenlast_node_ptr<==0;%*’elsefmlbp(first_node_ptr)<==0);*ˆend;3*ˆelseif(fml_header_ptr=last_node_ptr)thendo;**’last_node_ptr<==fmlbp(last_node_ptr);*’if(last_node_ptr=0)*’thenfirst_node_ptr<==0; *’elsedo;*œfmlfp(last_node_ptr<==0);*œfmlused(last_node_ptr)<==*¦fmlused(last_node_ptr)+*¦fmlfree(fml_header_ptr)+*¦fmlused(fml_header_ptr);*’end;*ˆend; *ˆelsedo;/*’previous_node_ptr<==fmlbp(fml_header_ptr);7*’fmlfp(previous_node_ptr)<==fmlfp(fml_header_ptr);!*’fmlused(previous_node_ptr)<==*œfmlused(previous_node_ptr)+*œfmlfree(fml_header_len)+*œfmlused(fml_header_ptr);+*’next_node_ptr<==fmlfp(fml_header_ptr);.*’fmlbp(next_node_ptr)<==previous_node_ptr;*ˆend;  *end unlink_fml_header_node; "ŠTTL„UNLINKFMLHEADERNODE-CODEŠPAGE#*unlink_fml_header_node: procedure;* UFMLHEAD: */*ˆif(fml_header_ptr=first_node_ptr)thendo;,*’first_node_ptr<==fmlfp(first_node_ptr);*’if(first_node_ptr=0)*’thenlast_node_ptr<==0);$*’elsefmlbp(first_node_ptr)<==0;*ˆend*ŠIF.LƒA5A3THEN.S MOVE.LFMLFP(A3),A3 IF.LƒA3D0THEN.S SUB.L‚A4,A4 ELSE.SCLR.L‚FMLBP(A3)ENDI *3*ˆelseif(fml_header_ptr=last_node_ptr)thendo;**’last_node_ptr<==fmlbp(last_node_ptr);*’if(last_node_ptr=0)*’thenfirst_node_ptr<==0);*ELSE.SIF.LƒA5A4THEN.S MOVE.LFMLBP(A4),A4 IF.LƒA4D0THEN.S “SUB.L‚A3,A3 * *’elsedo;*œfmlfp(last_node_ptr)<==0;*œfm lused(last_node_ptr)<==*¦fmlused(last_node_ptr)+*¦fmlfree(fml_header_ptr)+*¦fmlused(fml_header_ptr);*’end;*ˆend;*“ELSE.S“CLR.L‚FMLFP(A4) “MOVE.LFMLFREE(A5),D1“ADD.L‚FMLUSED(A5),D1“ADD.L‚D1,FMLUSED(A4)ENDI * *ˆelsedo;/*’previous_node_ptr<==fmlbp(fml_header_ptr);7*’fmlfp(previous_node_ptr)<==fmlfp(fml_header_ptr);!*’fmlused(previous_node_ptr)<==*œfmlused(previous_node_ptr)+*œfmlfree(fml_header_ptr)+*œfmlused(fml_header_ptr);+*’next_node_ptr<==fmlfp(fml_header_ptr);.*’fmlbp(next_node_ptr)<==previous_node_ptr;*ˆend;*ELSE.SMOVE.LFMLBP(A5),A2 MOVE.LFMLFP(A5),FMLFP(A2) MOVE.LFMLFREE(A5),D1ADD.L‚FMLUSED(A5),D1ADD.L‚D1,FMLUSED(A2) MOVE.LFMLFP(A5),A6 MOVE.LA2,FMLBP(A6)ENDIŠENDI**end unlink_fml_header_node;*ŠRTS "ŠTTL„MOVEFMLNODE-DOCUMENTATIONŠPAGEN*********************************************************************************#***…Name:‚MFMLNODE(move_fml_node):*** ***…Function:D***ŠThissubroutine"moves"thepointersandcounters(fmlfp,fmlbp,C***…fmlfree,fmlused)ofanFMLnodefml_header_lenpages"down"inG***…memory.‚ItalsohandlesallaccountingforthechangeinthestatusH***…ofthemovedmemory(fmlfreeofthecurrentnodegetsdecrementedbyH***…fml_header_lenpages,andfmlusedforthepreviousnode(ifthereisB***…one)getsincrementedbythesamevalue).‚ThissubroutinealsoG***…accountsforanychangeinthestatusofthefirst_node_ptr(iftheH***…fml_header_ptrwaspointingtothefirstnode),orthelast_node_ptrF***…(ifthefml_header_ptrwaspointingtothelastnode)asrequired.*** ***…Inputs:***ˆ1.)‚A3=first_node_ptr.***ˆ2.)‚A4=last_node_ptr.***ˆ3.)‚A5=fml_header_ptr.***ˆ4.)‚D7=fml_header_len.*** ***…Outputs:C***ˆ1.)‚AnewFMLnodemoveddowninmemorybyfml_header_lenpage.A***ˆ2.)‚Allnewpointerstoreflectthedisplacementofthenode.******…Sideeffects:***ˆ1.)‚A2getsdestroyed.+***ˆ2.)‚A3(first_node_ptr)maybeupdated.****ˆ3.)‚A4(last_node_ptr)maybeupdated.$***ˆ4.)‚A6(scratch)getsdestroyed.******…Explanation:D***ŠFirstwecomputetheaddressofthemovednodetobetheaddressH***…ofthefml_header_ptrplustheoffset,inbytes,thatthenodeistoH***…bemoved(fml_header_len*256).‚ThenwegetapointertothepreviousE***…nodeintheFML.‚Ifthereisnopreviousnode,thenweupdatetheG***…first_node_ptrtopointtothemovednode.‚Otherwise,weupdatetheH***…fmlfpfieldofthepreviousnodetopointtothemovednode,andaddH***…thefml_header_lenpagestothe"used"portionofthepreviousnode.***D***ŠNextwedecrementthe"free"fieldofthefml_header_nodebytheJ***…valueofthefml_header_lentoreflectthefactthatthismemoryisnoI***…longeravailabletothatnode.‚ThenwegetapointertothenextnodeD***…intheFML,andifitiszero(nonextnode),thenweupdatetheF***…last_node_ptrtopointtothemovednode.‚Otherwise,weupdatethe;***…fmlbpofthenextnodetopointbacktothemovednode.***C***ŠFinally,weactuallymovethepointersandcountersofthenodeJ***…fromthememorypointedtobythefml_header_ptrtothememorypointed)***…tobythemoved_node_ptr,andreturn.***M***************************************************************************** ŠTTL„MOVEFMLNODE-ALGORITHMŠPAGE*move_fml_node: procedure;    9*ˆmoved_node_ptr<==fml_header_ptr+fml_header_len*256; /*ˆprevious_node_ptr<==fmlbp(fml_header_ptr);*ˆif(previous_node_ptr=0))*ˆthenfirst_node_ptr<==moved_node_ptr; *ˆelsedo;/*’fmlfp(previous_node_ptr)<==moved_node_ptr;!*’fmlused(previous_node_ptr)<==*œfmlused(previous_node_ptr)+*œfml_header_len;*ˆend; *ˆfmlfree(fml_header_ptr)<==*œfmlfree(fml_header_ptr)-*œfml_header_len; +*ˆnext_node_ptr<==fmlfp(fml_header_ptr);*ˆif(next_node_ptr=0)(*ˆthenl ast_node_ptr<==moved_node_ptr;0*ˆelsefmlbp(next_node_ptr)<==moved_node_ptr; 2*ˆfmlfp.fmlbp.fmlused.fmlfree(moved_node_ptr)<==/*’fmlfp.fmlbp.fmlused.fmlfree(fml_header_ptr);  *end move_fml_node; ŠTTL„MOVEFMLNODE-CODEŠPAGE*move_fml_node: proc;* MFMLNODE: *9*ˆmoved_node_ptr<==fml_header_ptr+fml_header_len*256;* ŠLSL.L‚#8,D7ŠLEA„(A5,D7.L),A6 ŠLSR.L‚#8,D7 */*ˆprevious_node_ptr<==fmlbp(fml_header_ptr);*ˆif(previous_node_ptr=0))*ˆthenfirst_node_ptr<==moved_node_ptr;*ŠMOVE.LFMLBP(A5),A2 ŠIF.LƒA2D0THEN.S LEA„(A6),A3 * *ˆelsedo;/*’fmlfp(previous_node_ptr)<==moved_node_ptr;!*’fmlused(previous_node_ptr)<==*œfmlused(previous_node_ptr)+*œfml_header_len;*ˆend;*ELSE.SMOVE.LA6,FMLFP(A2) ADD.L‚D7,FMLUSED(A2)ŠENDI *ˆfmlfree(fml_header_ptr)<==*œfmlfree(fml_header_ptr)-*œfml_header_len;*ŠSUB.L‚D7,FMLFREE(A5) *+*ˆnext_node_ptr<==fmlfp(fml_header_ptr);*ˆif(next_node_ptr=0)(*ˆthenlast_node_ptr<==moved_node_ptr;0*ˆelsefmlbp(next_node_ptr)<==moved_node_ptr;*ŠMOVE.LFMLFP(A5),A2 ŠIF.LƒA2D0THEN.S LEA„(A6),A4 ELSE.SMOVE.LA6,FMLBP(A2)ŠENDI *2*ˆfmlfp.fmlbp.fmlused.fmlfree(moved_node_ptr)<==/*’fmlfp.fmlbp.fmlused.fmlfree(fml_header_ptr);*ŠMOVE.LFMLFP(A5),FMLFP(A6)ŠMOVE.LFMLBP(A5),FMLBP(A6)ŠMOVE.LFMLUSED(A5),FMLUSED(A6)ŠMOVE.LFMLFREE(A5),FMLFREE(A6) **end move_fml_node;*ŠRTS *ŠTTL„CHECKŽMEMMAPCONFLICT-DOCUMENTATIONŠPAGEM********************************************************************************+***…Name:‚CMEMCONF(check_memmap_conflict):*** ***…Function:C***ŠThissubroutinecheckstheRAMpartitiondescribedbytheentryB***…inthesrc_memtblpointedtobythesrc_memtbl_ptragainstallE***…previously-describedRAMpartitions.‚IfthissubroutinedetectsaD***…fatalconflictitwillnotreturnexecutiontothecaller.‚IfitC***…detectsanaliaspartition(samestartingaddressassomeotherK***…partition),itreturnsexecutionwiththegot_alias_partition_flagset.9***…Otherwise,itreturnsexecutionwiththatflagreset.*** ***…Inputs:***ˆ1.)‚A0=src_memtbl_ptr.***ˆ2.)‚A1=dest_memtbl_ptr.***ˆ3.)‚D4=start_of_part_ptr.***ˆ4.)‚SYSPAR(MAPBEG).*** ***…Outputs:&***ˆ1.)‚D2=got_alias_partition_flag.@***ˆ2.)‚A5=fml_header_ptr(ifgot_alias_partition_flag=set).******…Sideeffects:,***ˆ1.)‚A2(temp_memtbl_ptr)getsdestroyed.$***ˆ2.)‚D1(scratch)getsdestroyed.3***ˆ3.)‚Executionmaynotreturn(maycallKILLER).******…Explanation:@***ŠFirstweinitializefortheloopbyresettingthegot_alias_I***…partition_flag,settingthecurrent_partition_number,andsettingtheF***…temp_memtbl_ptrtopointtothebeginningofthedest_memtbl.‚Then***…webegintheloop.***B***ŠIfwedetectaduplicatepartitionnumber,thenwecallKILLERóÜAåFíRõMýNC***…anddie.‚Ifwedetectaduplicatestart_of_part_ptr,wesettheI***…got_alias_partition_flag,setthefml_header_ptrequaltotheMAPFMLPB***…fieldofthealiaspartitionandreturn.‚IfwedetectthatourD***…currentstart_of_part_ptrisatalowermemorylocationthantheF***…ENDAVAILfieldofsomepreviouspartition,thenwecallKILLERandC***…die.‚Otherwise,wekeeploopinguntilwehavelookedatallthe>***…previously-definedentriesinthedest_memtbl,andreturn.***L**************************************************************************** &ŠTTL„CHECKŽMEMMAPCONFLICT-ALGORITHMŠPAGE"*check_memmap_conflict: procedure;    !*ˆresetgot_alias_partition_flag;B*ˆcurrent_partition_number<==MAPMTYP(src_memtbl_p tr).AND.$0F;&*ˆtemp_memtbl_ptr<==SYSPAR(MAPBEG);/*ˆdountil(temp_memtbl_ptr=dest_memtbl_ptr);;*’if(MAPPART(temp_memtbl_ptr)=current_partition_number)*’thencallKILLER;=*’if(MAPSTRA(temp_memtbl_ptr)=start_of_part_ptr)thendo;*œsetgot_alias_partition_flag;/*œfml_header_ptr<==MAPFMLP(temp_memtbl_ptr); *œreturn;*’end;=*’if(start_of_part_ptr„D1THEN.S!KILL.EXECT0ƒBESTIMEMSA,PT_DUPNUMENDI *=*’if(mapstra(temp_memtbl_ptr)=start_of_part_ptr)thendo;*›setgot_alias_partition_flag;/*›fml_header_ptr<==mapfmlp(temp_memtbl_ptr); *›return;*’end;* IF.LƒMAPSTRA(A2)„D4THEN.SST…D2MOVE.LMAPFMLP(A2),A5RTSENDI *>*’if(start_of_part_ptr#$FFTHEN.SˆIfnotROM, MOVE.LMAPFMLP(A2),A6!IF.LƒD4ENDAVAIL(A6)THEN.S,KILL.EXECT0ƒBESTIMEMSA,PT_END_START_OVERLAPENDIENDI **’temp_memtbl_ptr<==*œtemp_memtbl_ptr+*œlength(dest_memtbl_entry);*LEA„MAPENTSZ(A2),A2 **ˆend;*ŠUNTIL.LA2A1 **end check_memmap_conflict;*ŠRTS +ŠTTL„BUILDŽRAMMEMTBLENTRY-DOCUMENTATIONŠPAGEN*********************************************************************************,***…Name:‚BRAMNODE(build_ram_memtbl_entry):*** ***…Function:D***ŠThissubroutinewritesinallpointersanddescriptorsforaRAM'***…partitionentryinthedest_memtbl.*** ***…Inputs:***ˆ1.)‚A0=src_memtbl_ptr.***ˆ2.)‚A1=dest_memtbl_ptr.***ˆ3.)‚A5=fml_header_ptr.***ˆ4.)‚D4=start_of_part_ptr.*** ***…Outputs:7***ˆ1.)‚Dest_memtbl_entry(RAMentry)pointedtobythe***dest_memtbl_ptr.******…Sideeffects:+***ˆ1.)‚D1,andD2(scratch)getdestroyed.******…Explanation:D***ŠTheMAPMTYPfieldofthedest_memtbl_entrygetssetequaltotheF***…mostsignificantfourbitsoftheMAPPARTfieldofthesrc_memtbl_H***…entry,andtheMAPPARTfieldofthedest_memtbl_entrygetssetequalI***…tothefourleastsignificantbitsofthesamefield.‚Finally,wesetJ***…theMAPSTRAfieldofthedest_memtbl_entryequaltothestart_of_part_G***…ptr,andtheMAPFMLPfieldequaltothefml_header_ptr,andreturn.***M***************************************************************************** 'ŠTTL„BUILDŽRAMMEMTBLENTRY-ALGORITHMŠPAGE#*build_ram_memtbl_entry: procedure;    *ˆMAPMTYP(dest_memtbl_ptr)<==%*’MAPPART(src_memtbl_ptr).AND.$70;*ˆMAPPART(dest_memtbl_ptr)<==%*’MAPPART(src_memtbl_ptr).AND.$0F;2*ˆMAPSTRA(dest_memtbl_ptr)<==start_of_part_ptr;/*ˆMAPFMLP(dest_memtbl_ptr)<==fml_header_ptr;  *end build_ram_memtbl_entry; "ŠTTL„BUILDŽRAMMEMTBLENTRY-CODEŠPAGE#*build_ram_memtbl_entry: procedure;* BRAMNODE: **ˆMAPMTYP(dest_memtbl_ptr)<==%*’MAPMTYP(src_memtbl_ptr).AND.$70;*ŠMOVE.BMAPMTYP(A0),D1 ŠMOVE.BD1,D2ŠAND.B‚#$70,D1ŠMOVE.BD1,MAPMTYP(A1) **ˆmappart(dest_memtbl_ptr)<==&*’mapmtyp(dest_memtbl_ptr).AND.$0F;*ŠAND.B‚#$0F,D2ŠMOVE.BD2,MAPPART(A1) *2*ˆmapstra(dest_memtbl_ptr)<==start_of_part_ptr;*ŠMOVE.LD4,MAPSTRA(A1) */*ˆmapfmlp(dest_memtbl_ptr)<==fml_header_ptr;*ŠMOVE.LA5,MAPFMLP(A1) **end build _ram_memtbl_entry;*ŠRTS +ŠTTL„BUILDŽROMMEMTBLENTRY-DOCUMENTATIONŠPAGEM********************************************************************************,***…Name:‚BROMNODE(build_rom_memtbl_entry):*** ***…Function:E***ŠThissubroutinedoessomeprimitivecheckingonthelegalityofaB***…ROMpartitiondescribedinthesrc_memtbl,andthenwritestheH***…descriptorsandpointerstodescribethatnodeintothedest_memtbl.*** ***…Inputs:***ˆ1.)‚A0=src_memtbl_ptr.***ˆ2.)‚A1=dest_memtbl_ptr.***ˆ3.)‚D4=start_of_part_ptr.***ˆ4.)‚D5=end_of_part_ptr.*** ***…Outputs:7***ˆ1.)‚Dest_memtbl_entry(ROMentry)pointedtobythe***dest_memtbl_ptr.******…Sideeffects:$***ˆ1.)‚A6(scratch)getsdestroyed./***ˆ2.)‚Executionmaynotreturn(callKILLER).******…Explanation:D***ŠFirstweverifythatthecurrentROMpartitiondoesnotstartatH***…alowermemorylocationthantheendingofthelastpartitionintheH***…dest_memtbl.‚Ifitdoes,wehaveafatalconfigurationerror,andso***…wecallKILLER.***>***ŠOtherwise,wemovetheMAPMTYPandMAPPARTfieldsfromtheH***…src_memtbltothedest_memtbl,settheMAPSTRAandMAPENDAfieldsofF***…thedest_memtblequaltothestart_of_part_ptrandend_of_part_ptr***…respectively,andreturn.***N****************************************************************************** 'ŠTTL„BUILDŽROMMEMTBLENTRY-ALGORITHMŠPAGE#*build_rom_memtbl_entry: procedure;   ?*ˆif(MAPMTYP(previous(dest_memtbl_ptr))=ROM_type)thendo;*’if(start_of_part_ptr<'*œMAPENDA(previous(dest_memtbl_ptr)))*’thencallKILLER;*ˆend; *ˆelsedo;*’if(start_of_part_ptr<1*œENDAVAIL(MAPFMLP(previous(dest_memtbl_ptr)))*’thencallKILLER;*ˆend; '*ˆMAPMTYP.MAPPART(dest_memtbl_ptr)<==#*’MAPMTYP.MAPPART(src_memtbl_ptr);3*ˆMAPSTRA(dest_memtbl_ptr)<==start_of_part_ptr);0*ˆMAPENDA(dest_memtbl_ptr)<==end_of_part_ptr;  *end build_rom_memtbl_entry; "ŠTTL„BUILDROMMEMTBLENTRY-CODEŠPAGE#*build_rom_memtbl_entry: procedure;* BROMNODE: ?*ˆif(MAPMTYP(previous(dest_memtbl_ptr))=ROM_type)thendo;*’if(start_of_part_ptr<'*œMAPENDA(previous(dest_memtbl_ptr)))*’thencallKILLER;*ˆend; +ŠIF.BƒMAPMTYP-MAPENTSZ(A1)#$FFTHEN.S)ŠIF.LƒD4MAPENDA-MAPENTSZ(A1)THEN.S'ŠKILL.EXECT0‚BESTIMEMSA,PT_RORO_OVERLAPŠENDI *ˆelsedo;*’if(start_of_part_ptr<1*œENDAVAIL(MAPFMLP(previous(dest_memtbl_ptr)))*’thencallKILLER;*ˆend; ŠELSE.SŠMOVE.LMAPFMLP-MAPENTSZ(A1),A6!ŠIF.LD4ENDAVAIL(A6)THEN.S'ŠKILL.EXECT0‚BESTIMEMSA,PT_RARO_OVERLAPŠENDIŠENDI *'*ˆmapmtyp.mappart(dest_memtbl_ptr)<==#*’mapmtyp.mappart(src_memtbl_ptr);2*ˆmapstra(dest_memtbl_ptr)<==start_of_part_ptr;0*ˆmapenda(dest_memtbl_ptr)<==end_of_part_ptr;*ŠMOVE.WMAPMTYP(A0),MAPMTYP(A1) ŠMOVE.LD4,MAPSTRA(A1) ŠMOVE.LD5,MAPENDA(A1)**end build_rom_memtbl_entry;*ŠRTS ŠEND'BUDDY INIT AF  IMEM SAr   =/*=/*†BUDDY.INIT.AF=/*(=/* Chain file to assemble BUDDY.INIT.SA=/*:=/* If no output argument is specified for the listing the,=/* chain file will default to BUDDY.INIT.LS=/*=/IFC \1ƒ=ARGBUDDY.INIT.LS=/ENDIF=/*8=ASM M68XXX.INIT.SA/BUDDY.IMEM.SA,BUDDY.INIT.RO,\1;RZ=85=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.PANEL.EQ=/*ƒ9995.&.GST.EQ=/*ƒ9995.&.UST.EQ=/*ƒ9995.&.TRACE.EQ=/*ƒ9995.&.MAP.EQ=/*ƒ9995.&.IOV.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.UDR.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.KILL.MC=/*ƒ9999.&.KILLEXEC.EQ=/*}=/*=ENDNNNNN ‰PAGEO*********************************************************************************ˆBUDDY.IMEM.SA*@*ˆThismoduleisanincludefileforM68XXX.INIT.SA.‚Itcontains;*ˆtwoentrypoints--memoryinitializationcodeandsystem?*ˆinitializerexitcode.‚ThememoryinitializationcodeinthisB*ˆmoduleisbasedonthebuddybuffermethod.‚Itmustbeusedwith@*ˆBUDDY.PAGEALOC.SA‚andBUDDY.PAGEFREE.SA.‚TheexitcodeinthisD*ˆmodulefreesthememorybelongingtoINITandINITDAT,andfinally&*ˆendsupintheexecmoduleDISPATCH.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*;*ˆEntry:‚IMEM„-Calledasasubroutinefrom‚M68XXX.INIT.SA.,*INITEND-BranchedtofromM68XXX.INIT.SA.*!*ˆRegisterusage:…01234567*™D‚*********™A‚*********™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed**ˆExits:/*ˆIMEM„Goodreturn-RTSbacktoM68XXX.INIT.SA0*ˆIMEM„Badreturn‚-ExitsviaKILL.EXECT0macro.G*ˆINITENDGoodreturn-FakeRTStoFRBLKroutineinBUDDY.PAGEFREE.SA.3*ˆINITENDBadreturn‚-ExitsviaKILL.EXECT0macro.**,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------@*ˆ02/12/86‚JulieHoban„AddedcodetoallowRMSinRAMparts1-X.A*ˆ11/05/85‚JulieHoban„RemovedIMEMsubroutinefromINITtohere.*O********************************************** *********************************‰PAGEINITEND:8ŠLEA„255+START(PC),A4ƒStartofInit(fromINITDAT)+255 ŠMOVE.LA4,D1ŠCLR.B‚D1‘Form"ceiling"-ŠMOVE.LD1,A4ŽA4<--startofmemorytoclear ŠMOVE.LMAPBEG,A1ŠMEMMAPtable5ŠLEA„256(A1),A3‰A3<--freememoryheaderpartition0@ŠMOVE.LLOWFREE(A3),D6…Endofmemorytofree(partition0only).=ŠMOVE.L#'BUDY',LOWFREE(A3)MemoryallocationIDforSYSANAL. FIND_PTR:<ŠIF.LA4STRAVAIL(A3)AND.LA4ENDAVAIL(A3)THEN.S 87#D+@3N;5CGKCS9[c'k>s;{FƒC‹$‹SUB.LƒA4,D6ŒD6<--#bytestofree.ŠELSE.S)‹LEA.Lƒ128(A3),A3‡Nextpartitionpointer.>‹MOVE.L‚LOWFREE(A3),D6ƒEndofmemorytofree(partitions1-X). ‹BEQ.SƒGOTOEX1‹MOVE.L#'BUDY',LOWFREE(A3)MemoryallocationID. ‹BRA…FIND_PTRŠENDI 0ŠMOVE.L#T0FRBLK,D1ˆFreeblockdirectivenumber.6ŠMOVE.L#T0ENTRY,D0ˆGetaddressoffreeblockroutine.ŠTRAPƒ#0$ŠBRA.S‚GOTOEXBranchifgoodreturn.%ŠKILL.EXECT0BUDYIMEMSA,NO_FRBLK_ADDR :GOTOEX„MOVE.LDISPATCH(PC),-(A7)Adresssofstartofexec. G* If this is a ROMed system, or if we couldn't find a good pointer to aC* memory partition, then DON'T FREE THE MEMORY OCCUPIED BY SYSINIT! ŠCLR.L‚D01ŠIF.LƒTCBHEAD(PC)D0AND.LD6D0THEN.S/‹MOVE.LA0,-(A7)ŠAddressofFREE_BLOCKroutine.ŠENDI "ŠRTS—Gotofreememory,thenexec.ŠPAGEO********************************************************************************$*ˆIMEMsubroutineforbuddybuffers.*?*ˆChecksallmemorylocationsdescribedintheSYSGENedMEMTBL.9*ˆMapsoutany"holes"inmemory.‚SetsuptheFreeMemoryB*ˆHeaderandtheFreeMemoryArrayinpartitionzero(thisdiffers=*ˆfromversionspriorto4.5)forallpartitions.‚Setsupthe?*ˆMemoryMapTableinpartitionzerodescribingallpartitions.*@*ˆPartitionzeroishandleddifferentlyduetothefactthattheD*ˆINITmoduleresidesinaportionofpartitionzerothatwilllater*ˆbeusedbythesystem.*@*ˆSubroutineIPTRSsetsupthepointerstothesrc_memtblandto*ˆpartitionzero.*C*ˆSubroutineSIZEMEMwillsizeandclearanymemorynotintheINITC*ˆmodule,mapoutany"holes"inmemory,andsetuptheFreeMemory:*ˆArraydescribingtheavailablememoryinpartitionzero.*B*ˆSubroutineBFM_HEADwillbuildtheFM_HEADERforpartitionzero,C*ˆandsubroutineBRAM_ENTwillrecordpartitionzerointheMEMTBL.*@*ˆFinally,subroutineINEXTMEMwillperformalloftheabovefor*ˆtheremainingpartitions.**=*ˆEntry:„Src_memtbl(ascreatedbySYSGEN)locatedataddress"*’MEMTABLwithintheINITDATarea.*!*ˆRegisterusage:…01234567*™D‚*********™A‚*********™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed*"*ˆExit:…MAPBEGinSYSPARissetup.+*’MemoryMapTableinpartition0issetup.3*’FreeMemoryHeadersforallpartitionsaresetup.2*’FreeMemoryArraysforallpartitionsaresetup.*#*ˆExit:‚Goodreturn-RTS‚tocaller;*Badreturn‚-Noreturn;goestoKILLERintheINITmodule**,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------6*ˆ09/06/85‚JulieHoban„Rewrittentousebuddybuffers.*O*******************************************************************************ŠPAGEJ****************************************************************************‡A0=src_memtbl_ptr;5*ŒPointstothe"source"MEMTBLinINITDATdataarea.**‡A1=dest_memtbl_ptr;:*ŒPointstothe"destination"MEMTBLimmediatelyfollowing*ŒINITDATinpartitionzero.**‡A2=scratch;**‡A3=fm_header_addr;**‡A4=start_clear_mem_ptr;:*ŒDuringsize_memory,thisisinitiali zedtoclear_mem_ptr9*Œandisusedtoaddressthestartoftheblockofmemory*Œbeinginitialized.**‡A5=clear_mem_ptr;>*ŒDuringsize_memory(andbuild_fma_entry)itisusedtopoint,*Œtothenextmemorylocationtobecleared.**‡A6=scratch;** *‡D0=0;@*ŒUsedforzeroingoutmemory,andcheckingifaddressregisters*Œareequaltozero.**‡D1-D3=scratch;**‡D4=start_of_partition;8*ŒPointstothestartofthe"current"memorypartition.**‡D5=end_of_partition;6*ŒPointstotheendofthe"current"memorypartition.**‡D6=bytes_cleared;<*ŒContainsacountofthenumberofthebytesclearedinthe=*Œ"current"memorypartition.‚Whenwefinda"hole"inmemory>*Œ(takeabus_error),thenwestopincrementingbytes_cleared.A*ŒThusbytes_clearedwillcontainacountofthenumberof"free">*Œmemoryinthecurrentblockofthecurrentmemorypartition.**‡D7=scratch;*J**************************************************************************ŠPAGEIMEM:**‚InitializePartition0.*0ŠBSR.S‚IPTRS‘Callinit_pointersforpartition0. .ŠBSR„SIZEMEMCallsize_memoryforpartition0. 3ŠBSR„BFM_HEADŽCallbuild_fm_headerforpartition0. 5ŠBSR„BRAM_ENTŽBuild_ram_memtbl_entryforpartition0. *$*‚InitializePartitions1throughX.*6ŠBSR„INEXTMEMŽInit_next_partitionsforpartitions1-X. ŠRTSŠPAGEL******************************************************************************ˆIPTRS*?*ˆInitializesallpointersandcountersforinitializingmemory*ˆpartitionzero.*?*ˆ-InitializeD0andthesrc_memtbl_ptr.‚Ifthefirstentryin8*Šthesrc_memtblisnotRAMpartitionzero,callKILLER.*>*ˆ-Initializetheend_of_partitiontopointtothe"floor"of9*ŠtheMAPENDAfieldofthefirstentryinthesrc_memtbl.*A*ˆ-Iftheexecisinpartitionzero,thenthestart_of_partitionB*Špointstothenext256byteblockaftertheendoftheexec,theF*Šclear_mem_ptrpointstothenext256byteblockaftertheendofthe*ŠINITDATarea.*F*ˆ-IfTCBHEAD=0,thentheminiTCBsfollowsrc_memtbl,soincrement@*Šclear_mem_ptrbyapprox15mini-TCBlengthstoinsurethatthe#*ŠminiTCBareaisnotclearedout.*A*ˆ-Iftheexecisnotinpartitionzero,thensetbothstart_of_F*Špartitionandclear_mem_ptrtopointtothenext256bytepageafter6*ŠtheSYSPARdataarea,andsetbytes_clearedtozero.*G*ˆ-Ifthepartitiondoesnothavepositiveamtofmemory,callKILLER.*2*ˆEntry:„Src_memtblinINITDATataddressMEMTABL.*!*ˆRegisterusage:…01234567*™D‚R*…RR*R *™A‚Rƒ*RƒR***ˆExit:…A0=src_memtbl_ptr;*’A1=dest_memtbl_ptr;*’A3=fm_header_addr;*’A5=clear_mem_ptr; *’D0=0;*’D4=start_of_partition;*’D5=end_of_partition;*"*ˆExitsto:RTStocallerifokay.*’KILLERifnotokay.*J**************************************************************************ŠPAGE*F*„Throughoutthesealgorithmswewillalwaystakethe"ceiling"oftheF*„startofthepartition,andthe"floor"oftheendofthepartition.I*„Thisinsuresthatallpartitionsstartandendona256byteblock,andD*„alsothatweonlygrabthesameamountofmemory,orless,thatis#*„describedwithinthesrc_memtbl.)* IPTRS: ŠCLR.L‚D0”D0=zeroalways. 9ŠLEA„MEMTABL(PC),A0ˆA0<--src_memtbl_ptr(fromINITDAT). AŠIF.Wƒ(A0)D0THEN.SƒIffirstentrydefiningtype.part<>0,0KILL.EXECT0‚BUDYIMEMSA,PT_1ST_BADGotokiller.ŠENDI ***‡CLR.L‚D7***‡LEA„(A0),A2*** ***‡REPEAT***ŠADD.L‚#MAPENTSZ,D7***ŠLEA„12(A2),A2***‡UNTIL.W(A2)Ž#$FFFF******$***‡ADD.L‚#(FMLHDSZ+MAPENTSZ+255),D7***‡LSR.L‚#8,D7*** !*‚Countthenumberofpartitions. ŠCLR.L‚D7”Clearcount.0ŠLEA„(A0),A2A2<--Firstpartitiontype/number. ŠREPEAT4ADDQ.L#1,D7ŽIncrementforeachsysgenedpartition.1LEA„12(A2),A2ŠA2<--Nextpartitiontype/number.<ŠUNTIL.W(A2)# $FFFF…Untiltheendoftableisreached. .ŠMOVE.LMAPENDA(A0),D5ˆD5<--endofpartitionŠCLR.B‚D5”Form"floor".6ŠMOVE.LEEND(PC),D4‹D4<--Endofexec(fromINITDAT). PAGE:ŠIF.LƒD4D5THEN.S…Ifendofexec*ˆIfthissystemistobeROMed,thenthememorymaptableand?*ˆassociatedfreememoryarraysmustbemovedtoRAM.‚Therules<*ˆstatethatwhentheexecisinapartitionotherthanzeroE*ˆthensystemmemorystartrightafterSYSPAR.‚WeusethatassumptionB*ˆhere,andchangethestart_of_partitionandclear_memory_pointer?*ˆtopointtotheendofsysparPLUSthespacerequiredforthe'*ˆmemorytablesforROMedsystemsonly. 9‰IF.LƒTCBHEAD(PC)D0THEN.SƒIfthisisROMedsystem,1ŠMULU†#128,D7ŒMultiplycountofparitionsby128.5ŠADD.L…#$1FF,D7‹Addbytesformemmaptableplussome.*ŠCLR.B…D7‘Clearlsbfor256-byteboundary.,ŠMOVE.L„D4,A1ŽA1<--destination_memtbl_ptr.'ŠADD.L…D7,D4ŽChangestart_of_partition.*ŠMOVE.L„D4,A5ŽChangeclear_memory_pointer. ŠMOVE.LD7,A6ŽLENGTHINA6ŠADD.L‚A1,A6ŽEND+1INA6;IPTRSCLR‚MOVE.LD0,-(A6)‹STOREONEWORD(D0ISALWAYSZERO)ŠCMP.L‚A1,A6ŽDONE?'ŠBHI.S‚IPTRSCLR‹BRANCHBACKIFNOTDONE '‰ELSE.S˜Elsewe'reasimpleRAMsystem.<ŠLEA„255+STARTMAP(PC),A1ƒStartoftablespace(INITDAT)+255 ŠMOVE.LA1,D1ŠCLR.B‚D1”Form"ceiling"+ŠMOVE.LD1,A1‘A1<--destination_memtbl_ptr‰ENDI "ŠMOVE.LA1,MAPBEGStoreinSYSPAR.2ŠLEA„256(A1),A3ŒA3<--fm_header_addrpartition0. 5ŠIF.LD4D5THEN.S‡Ifstart>=endofpartition,1KILL.EXECT0ƒBUDYIMEMSA,PT_PTRS_BADˆGotokiller.ŠENDI =ŠMOVE.LA5,LOWFREE(A3)ˆSavetousewhenwefreememorylater. ŠRTSŠPAGEL***************************************************************************** *ˆINEXTMEM*;*ˆInitializesallpartitionsexceptpartitionzero.‚ForROMF*ˆpartitions,wemakeanentryinthedest_memtbl.‚ForRAMpartitions,?*ˆweinsurethatnoconflictexistswithapreviously-describedE*ˆpartition,buildtheFMA,buildtheFM_HEADER,andmakeanentryin*ˆthedest_memtbl.*?*ˆ-LoopuntiltheMAPMTYPandMAPPARTfieldsofthenextentry>*Šinthesrc_memtblbothcontain$FF(thisindicatestheend).=*ŠWhentheendisreached,writeanendentryindest_memtbl.*B*ˆ-Foreverygoodentryinthesrc_memtblcallinit_next_pointers*Šforthismemorypartition.*A*ˆ-IfMAPMTYPofthesrc_memtbl=$FF,itsROMsocallBROM_ENT.*A*ˆ-IfRAMpartitioninthesrc_memtbl,callCMEMCONFtovalidate@*Špartitionparametersdonotconflictwithpreviouspartitions.@*ŠIfgot_alias_partition_flagissetuponreturn,callBRAM_ENT.8*ŠIfgot_alias_partition_flagisresetuponreturn,call8*ŠSIZEMEMtosizememory.‚Ifsuccessful,cllBFM_HEADto1*Šbuildthefreememoryarray,andthenBRAM_ENT.*>*ˆ-Iftherewasnomemoryinthecurrentpartition,resetthe?*Šdest_memtbl_ptrtopointtopreviousentrytoignorethenull*Šentry.**ˆEntry:„A0=src_memtbl_ptr;0*’(Pointstothefirstentryinthesrc_memtbl.)*’A1=dest_memtbl_ptr;1*’(Pointstothefirstentryinthedest_memtbl.)*!*ˆRegisterusage:…01234567*™D‚*********™A‚PP*******ˆExit:…Dest_memtbl.*’FMforallRAMpartitions.$*’FM_HEADERsforallRAMpartitions.*B*ˆCalls:„INEXTPTRS,BROM_ENT,CMEMCONF,SIZEMEM,BFM_HEAD,BRAMENT*"*ˆExitsto:RTStocallerifokay.*’KILLERifnotokay.*L******************************************** ********************************ŠPAGE INEXTMEM: ;ŠWHILE.W12(A0)#$FFFFDO.SˆWhileentriesstillexist,  )BSR.S‚INEXTPTRS”Callinit_next_pointers. #IF.Bƒ(A0)#$FFTHEN.SˆIfROM, *BSR„BROM_ENT’Callbuild_rom_memtbl_entry. ELSE.SžElseitsnotROM, 3LEA„128(A3),A3ˆA3<--fm_header_addr(nextentry).=MOVE.LA5,LOWFREE(A3)‚Savetousewhenwefreememorylater.)BSR„CMEMCONF’Callcheck_memmap_conflict, 'TST.B‚D2˜Checkflagret'dbyCMEMCONF. IF…THEN.SIfSETthen, *“BSR„BRAM_ENTCallbuild_ram_memtbl_entry. ELSE.S›IfCLEARthen, “BSR.S‚SIZEMEMCallsize_memory. #“BSR„BFM_HEADCallbuild_fm_header, *“BSR„BRAM_ENTCallbuild_ram_memtbl_entry. ENDIENDIŠENDW <ŠMOVE.W#$FFFF,MAPMTYP+MAPENTSZ(A1)…Markendofdest_memtbl! ŠRTSŠPAGEK**************************************************************************** *ˆINEXTPTRS*A*ˆInitializesallpointersandcountersforallmemorypartitions*ˆexceptpartitionzero.*E*ˆ-Setstart_of_partitiontothe"ceiling"oftheMAPSTRAfield,andA*Šend_of_partitiontothe"floor"ofMAPENDAfieldinsrc_memtbl.*9*ˆ-Setclear_mem_ptrtothevalueofstart_of_partition.*C*ˆ-‚Ifpartitiondoesnothavepositiveamtofmemory,callKILLER.*&*ˆEntry:„A0=previoussrc_memtbl_ptr. *’A1=previousdest_memtbl_ptr.*’A1=previousfm_header_addr.*!*ˆRegisterusage:…01234567 *™DŠRRƒR *™A‚PPƒRƒR*$*ˆExit:…A0=currentsrc_memtbl_ptr.*’A1=currentdest_memtbl_ptr.*’A3=currentfm_header_addr.*’A5=clear_mem_ptr.*’D4=start_of_partition.*’D5=end_of_partition.*"*ˆExitsto:RTStocallerifokay.*’KILLERifnotokay.*J************************************************************************** INEXTPTRS:2ŠLEA„12(A0),A0A0<--src_memtbl_ptr(nextentry).9ŠLEA„MAPENTSZ(A1),A1‡A1<--dest_memtbl_ptr(nextentry). 7ŠMOVE.LMAPSTRA(A0),D4ˆStartofpartition(fromSYSPAR)ŠADD.L‚#255,D4Form"ceiling".#ŠCLR.B‚D4”D4<--start_of_partition&ŠMOVE.LD4,A5‘A5<--clear_memory_ptr. 5ŠMOVE.LMAPENDA(A0),D5ˆEndofpartition(fromSYSPAR),ŠCLR.B‚D5”Form"floor"<--endof_partition. M* See if the exec is in this partition (start_of_p < end of exec =< end_of_p) =‰IF.W(A0)#$FF00THEN.S‚IfthisisNOTaROMpartition, 4‰IF.LEEND(PC)D4AND.LEEND(PC)D5THEN.S6ŠMOVE.LEEND(PC),D4‹Startofpartitionisendofexec.;ŠLEA„255+ENDMEMT(PC),A5„Endofinitdat(fromINITDAT)+255!ŠMOVE.LA5,D6‘D6=endofinitdatŠCLR.B‚D6”Form"ceiling".*ŠMOVE.LD6,A5‘A5<--clear_memory_pointer.‰ENDI ‰ENDI 5ŠIF.LƒD4D5THEN.S…Ifstart>=endofpartition,1KILL.EXECT0‚BUDYIMEMSA,PT_PTRS_BAD„Gotokiller.ŠENDIŠRTSŠPAGEO******************************************************************************** *ˆSIZEMEM*<*ˆSize_memorywillzerooutmemorystartingatclear_mem_ptrD*ˆandbuildtheFreeMemoryArraytodescribethepartition.Italso?*ˆdetects"holes"inthepartition,sothatonlymemorythatis+*ˆ"free"getsputontheFreeMemoryArray.*E*ˆ-Initializestart_clear_mem_ptrtothevalueoftheclear_mem_ptr.*B*ˆ-SetupthestacksothatanybuserrorwillsendustoBFM_BE.A*ŠThisisthecodeusedformappingout"holes"inthepartition.*@*ˆ-LoopuntilwecleartherestofthecurrentmemorypartitionC*Š(fallthroughtheloop),ORfindaholeinmemory(gotoBFM_BE).*D*ˆ-Ifwedoclearmemorytotheendofthecurrentpartitionwithin@*Šthisloop,wepopthebuserrorvectorjunkoffthestack,and@*Šcalculatebytes_cleared(clear_mem_ptr-start_clear_mem_ptr).*E*ˆ-Whenaholeisencountered,bytes_clearedis"frozen"toremember@*Šthenumberof"good"byteswithinthecurrentblock.‚IncrementC*Šclear_mem_ptr(by256bytes)untilwereachtheendofpartition,@*Šorwefindsomemore"good"memory.‚Atthatpoint,thecurrentC*Šblockwillbefr amedbytheA4=start_clear_mem_ptr,A5=clear_D*Šmem_ptr(end),andD6=bytescleared(#ofbytesoffreememory).*G*ˆ-CallBLAST_ENTtobuildlastfreememoryarraywhennumberofbytes*Šclearedisgreaterthenzero.*D*ˆ-NotethattheC_NEXT_ENTandBLAST_ENTlabelscanbothbejumped)*Štobythecodeforhandlingbuserrors.**ˆEntry:„A3=fm_header_addr.*’A5=clear_mem_ptr.*’D0=0*’D4=start_of_partition.*’D5=end_of_partition.*!*ˆRegisterusage:…01234567*™D‚P***PP* *™A†*PƒP***ˆCalls:„BFMA_ENT*)*ˆExit:…MustPreserveA0,A1,A3,D4,D5.7*’Freememoryarrayisbuiltforthecurrentpartition.*"*ˆExitsto:RTStocallerifokay.*’KILLERifnotokay.*O*******************************************************************************ŠPAGESIZEMEM: ** Clear next entry:* C_NEXT_ENT:.ŠCLR.L‚D1”ZeroD1/D2/D3usedforclearingmem. ŠCLR.L‚D2”* ŠCLR.L‚D3”* 'ŠLEA„(A5),A4A4<==start_clear_mem_ptr 3***‡LEA„(A5,D6.L),A5ŠNOOFFSETDUETOBYTESCLEARED 3ŠPEA„BFM_BE(PC)ŒPushaddrofourbuserrorhandler.%ŠMOVE.W#'BE',-(A7)‹BEforbuserror. AŠWHILE.LA5D5DO.S†WhileasSYSGENedendofpartition. NNNNNN:MOVEM.LD0-D3,(A5)ˆClearmemoryfourlongwordsatatime.*NOP—ThisNOPforcestheexecutionunitto&*§waituntilthebusinterfaceunitis(*§doneona68020,incaseofbuserror.6LEA„16(A5),A5ŠIncrementclear_mem_ptrby4longwords.ŠENDW *ŠADD.L‚#6,A7‘Popbuserrorjunkoffstack. 5ŠMOVE.LA5,D6‘Substart_clear_memfromclear_mem_ptr."ŠSUB.L‚A4,D6‘D6<==bytes_cleared.**‚Build_last_fma_entry:* BLAST_ENT:>ŠIF.LƒD6D0THEN.S…Ifbytes_clearedisgreaterthanzero,(BSR.S‚BFMA_ENT‹thenbuildanfma_entry.ŠENDI ŠRTSŠPAGEO********************************************************************************C*ˆThiscodeisexecutedwhenaholeisfoundwhileclearingmemory.:*ˆExecutionwill"goto"BFM_BEifabuserroroccurswhen9*ˆclearingmemoryviatheloopintheSIZEMEMsubroutine.@*ˆExecutionwill"goto"theBFM_BEXlabelifabuserroroccursA*ˆwhilelookingatthetopofeachpageforthenext"good"page.*<*ˆFirstcalculatebytes_clearedtobethedifferencebetween;*ˆclear_mem_ptrandstart_clear_mem_ptr.‚CallKILLERifthe7*ˆbuserroroccurredinthemiddleofa256byteblock.*>*ˆUpdateclear_mem_ptrtopointtothetopofthenextpagein@*ˆmemory.‚Ifattheendofthecurrentpar tition,callBFMA_ENT.*?*ˆIfnotattheendofthepartition,setthestackupsoabusA*ˆerrorwillsendusbacktotheBFM_BEXlabel.‚WriteintomemoryE*ˆatclear_mem_ptr.Ifabuserroroccurs,executiongoestoBFM_BEX.NNB*ˆLoopuntilwerunoutofmemorypartitionorfind"good"memory.*B*ˆIfwe"fallthrough"tothenextinstruction(findagoodmemoryD*ˆlocation),thengetridofthebuserrorinformationonthestack.F*ˆIfsomegoodmemoryexistsinthecurrentblock(bytes_cleared>0),E*ˆthencallBFMA_ENTtobuildtheFMAforthecurrentblockandreset5*ˆbytes_clearedtozero.‚AlwaysbranchtoC_NEXT_ENT.*O******************************************************************************* BFM_BE:(ŠMOVE.LA5,D6‘"freeze"bytesclearedas,1ŠSUB.L‚A4,D6‘clear_mem_ptr-start_mem_clear_ptr.9ŠIF.BƒD6D0THEN.S…Musthave#bytesnotequalzero."KILL.EXECT0‚BUDYIMEMSA,BAD_MEMORYŠENDI BFM_BEX:5ŠLEA„256(A5),A5ŒIncrementclear_mem_ptrby256bytes.=ŠIF.LƒA5D5THEN.S…Ifend_of_partitionhasbeenreached,2BRA„BLAST_ENTŠbranchtobuildthelastFMAentry.ŠENDI 9ŠPEA„BFM_BEX(PC)‹PuttheaddressofBEXroutineonstack.)ŠMOVE.W#'BE',-(A7)‹andBEforbuserror.7ŠMOVE.WD0,(A5)Testfirstwordofthis256byteblock.*ŠNOPšThisNOPforcestheexecutionunitto&*§waituntilthebusinterfaceunitis#*§doneona68020,inofbuserror. )ŠADD.L‚#6,A7‘Popbuserrorjunkofstack.=ŠIF.LƒD6D0THEN.S…If#bytesclearedisgreaterthan0,&BSR.S‚BFMA_ENT‹gotobuildFMAentry.ŠENDI +ŠBRA„C_NEXT_ENTŒBranchtochecknextentry.ŠPAGEJ*************************************************************************** *ˆBFMA_ENT*F*ˆBuildsthefreememoryarrayforthecurrentblockinthepartition.**ˆEntry:„A3=fm_header_addr.*’A4=start_clear_memory_ptr.*’D6=bytes_cleared.*!*ˆRegisterusage:…01234567*™DŽP*™AˆPP*2*ˆCalls:„TRAP#0directiveT0FRBLKtodothework.**ˆExitsto:RTStocaller.*O******************************************************************************* BFMA_ENT:0ŠMOVE.Lƒ#T0FRBLK,D0“Callfree_blockinPAGEFRE.#ŠTRAP…#0œNopossibleerrorreturns.ŠCLR.L„D0œRestoreD0tozero.ŠRTSŠPAGEK**************************************************************************** *ˆBFM_HEAD*@*ˆGiventheblockofmemorytocontaintheFM_HEADER,buildthe.*ˆFM_HEADERtodescribethecurrentpartition.*2*ˆ-Setstravailandendavailtothevaluesofthe8*Šstart_of_partitionandend_of_partition,respectively.*B*ˆ-MovetheMAPMTYPandMAPPARTfieldsfromthesrc_memtbltothe4*ŠFM_HEADERnode,andsetupthesemaphorecounters.**ˆEntry:„A0=src_memtbl_ptr.*’A3=fm_header_addr.*’D4=start_of_partition.*’D5=end_of_partition.**ˆExitsto:RTStocaller.*K*************************************************************************** BFM_HEAD: 2ŠMOVE.LD4,STRAVAIL(A3)ŽStartofavailablememory,0ŠMOVE.LD5,ENDAVAIL(A3)ŽEndofavailablememory, :ŠMOVE.WMAPMTYP(A0),MEMTYPE(A3)†Memorytypeandpartition, 6ŠMOVE.W#1,SEMFRMEM(A3)ŽInitializesemaphorefields...ŠCLR.L‚SEMFRMEM+2(A3)ŠCLR.W‚SEMWTMEM(A3)ŠCLR.L‚SEMWTMEM+2(A3) ŠRTSŠPAGEO******************************************************************************** *ˆCMEMCONF*A*ˆThissubroutinecheckstheRAMpartitiondescribedbytheentry@*ˆinthesrc_memtblpointedtobythesrc_memtbl_ptragainstallC*ˆpreviously-describ edRAMpartitions.‚IfthissubroutinedetectsaB*ˆfatalconflictitwillnotreturnexecutiontothecaller.‚IfitA*ˆdetectsanaliaspartition(samestartingaddressassomeotherD*ˆpartition),itreturnsexecutionwiththegot_alias_partition_flagB*ˆset.(Aliaspartitionisaconceptdevelopedafewversionsback;*ˆwithmulti-processinginmind.‚Itiscurrentlynotused.)7*ˆOtherwise,itreturnsexecutionwiththatflagreset.*B*ˆ-Initializegot_alias_partition_flag,current_partition_number,*Šandtemp_memtbl_ptr.*4*ˆ-Ifduplicatepartitionnumber,thencallKILLER.*F*ˆ-Ifduplicatestart_of_partition,setthegot_alias_partition_flag,@*Šsetthefm_header_addr=MAPFMLofaliaspartitionandreturn.*D*ˆ-Ifcurrentstart_of_partitionisatalowermemorylocationthan?*ŠtheENDAVAILfieldofapreviouspartition,thencallKILLER.*>*ˆ-Otherwise,loopuntilwehavelookedatallthepreviously1*Šdefinedentriesinthedest_memtbl,andreturn.**ˆEntry:„A0=src_memtbl_ptr.*’A1=dest_memtbl_ptr.*’D4=start_of_partition.*&*ˆExit:…D2=got_alias_partition_flag.:*’A3=fm_header_addr(ifgot_alias_partition_flag=set).*!*ˆRegisterusage:…01234567 *™D„*RƒP *™A‚PP*‡***@*ˆExitsto:RTStocallerwithgot_alias_partition_flagifokay.*’KILLERifnotokay.*J**************************************************************************ŠPAGE CMEMCONF: )ŠCLR.B‚D2”Resetgot_alias_partition_flag. ŠMOVE.BMAPMTYP(A0),D1-ŠAND.B‚#$0F,D1D1=current_partition_number. )ŠMOVE.LMAPBEG,A2A2<--temp_memtbl_ptr. ŠREPEAT :IF.BƒMAPPART(A2)D1THEN.SƒIfduplicatepartition#,/KILL.EXECT0ƒBUDYIMEMSA,PT_DUPNUM„Gotokiller.ENDI =IF.LƒMAPSTRA(A2)D4THEN.SƒIfduplicatestartpartptr,$ST…D2˜Setgot_alias_partition_flag,-MOVE.LMAPFMLP(A2),A3ŒA3<--fm_header_addr. RTSžReturn.ENDI 'IF.Bƒ(A2)#$FFTHEN.SˆIfnotROM, /MOVE.LMAPFMLP(A2),A6Ifoverlapping-duplicate3IF.LƒD4ENDAVAIL(A6)THEN.S‚partitionnumber,8KILL.EXECT0‚BUDYIMEMSA,PT_END_START_OVERLAP‚CallKILLERENDIENDI 0LEA„MAPENTSZ(A2),A2ŽGetnexttemp_memtbl_ptr... ,ŠUNTIL.LA2A1•Untiltemp=destination ŠRTSŠPAGEL***************************************************************************** *ˆBRAM_ENT*B*ˆThissubroutinewritesinallpointersanddescriptorsforaRAM%*ˆpartitionentryinthedest_memtbl.*D*ˆ-TheMAPMTYPfieldofthedest_memtbl_entrygetssetequaltotheD*ŠmostsignificantfourbitsoftheMAPPARTfieldofthesrc_memtbl_F*Šentry,andtheMAPPARTfieldofthedest_memtbl_entrygetssetequal7*Štothefourleastsignificantbitsofthesamefield.*?*ˆ-SettheMAPSTRAfieldofthedest_memtbl_entryequaltothe8*Šstart_of_partition,andtheMAPFMLPfieldequaltothe*Šfm_header_addr,andreturn.**ˆEntry:„A0=src_memtbl_ptr.*’A1=dest_memtbl_ptr.*’A3=fm_header_addr.*’D4=start_of_partition.*!*ˆRegisterusage:…01234567 *™D„**ƒP *™A‚PP‡P*7*ˆExit:…Dest_memtbl_entry(RAMentry)pointedtobythe*’dest_memtbl_ptr.**ˆExitsto:RTStocaller*K*************************************************************************** BRAM_ENT:>ŠMOVE.BMAPMTYP(A0),D1ˆMemorytypeandpartition(fromSYSPAR)ŠMOVE.BD1,D2‘Saveit.3ŠAND.B‚#$70,D1ANDittogetmemorytype(bits7-4)'ŠMOVE.BD1,MAPMTYP(A1)ˆStoreinMEMMAP. 1ŠAND.B‚#$0F,D2ANDittogetpartition(bits3-0)'ŠMOVE.BD2,MAPPART(A1)ˆStoreinMEMMAP. 5ŠMOVE.LD4,MAPSTRA(A1)ˆStartofpartition-->MAPSTRA 5ŠMOVE.LA3,MAPFMLP(A1)ˆFMLheaderaddress-->MAPFMLP ŠRTSŠPAGEK**************************************************************************** *ˆBROM_ENT*C*ˆThissubroutinedoessomeprimitivecheckingonthelegalityofa@*ˆROMpartitiondescribedinthesrc_memtbl,andthenwritestheF*ˆdescriptorsandpointerstodescribethatnodeintothedest_memtbl.*C*ˆ -VerifythatthecurrentROMpartitiondoesnotstartatalower>*‹memorylocationthantheendingofthelastpartitioninthe'*Šdest_memtbl.‚Ifitdoes,callKILLER.*F*ˆ-Otherwise,movetheMAPMTYPandMAPPARTfieldsfromthesrc_memtbl?*Štothedest_memtbl,settheMAPSTRAandMAPENDAfieldsoftheA*Šdest_memtblequaltothestart_of_partitionandend_of_part_ptr*Šrespectively,andreturn.**ˆEntry:„A0=src_memtbl_ptr.*’A1=dest_memtbl_ptr.*’D4=start_of_partition.*’D5=end_of_partition.*!*ˆRegisterusage:…01234567*™DŠPP *™A‚PP*‡**7*ˆExit:…Dest_memtbl_entry(ROMentry)pointedtobythe*’dest_memtbl_ptr.*"*ˆExitsto:RTStocallerifokay.*’KILLERifnotokay.*L**************************************************************************** BROM_ENT:8ŠIF.BƒMAPMTYP-MAPENTSZ(A1)#$FFTHEN.S…IfROMthen,:ŠIF.LƒD4MAPENDA-MAPENTSZ(A1)THEN.S‡Ifoverlapthen,5‹KILL.EXECT0‚BUDYIMEMSA,PT_RORO_OVERLAPˆGotokiller.ŠENDI ŠELSE.S¡ElseitsRAM,ŠMOVE.LMAPFMLP-MAPENTSZ(A1),A6>ŠIF.LD4ENDAVAIL(A6)THEN.S‡Ifoverlapsexistpartition,5‹KILL.EXECT0‚BUDYIMEMSA,PT_RARO_OVERLAP„Gotokiller.ŠENDIŠENDI AŠMOVE.WMAPMTYP(A0),MAPMTYP(A1)‚MAPMTYP(fromSYSPAR)-->MAPMTYP5ŠMOVE.LD4,MAPSTRA(A1)ˆStartofpartition-->MAPSTRA3ŠMOVE.LD5,MAPENDA(A1)ˆEndofpartition-->MAPENDA ŠRTS ŠEND NNNNN'M146818 RDTIMER AFŸŸ  TIMEINT AF¨¨  RDTIMER SA±±7  TIMEINT SAººI  =/*=/*†M146818.RDTIMER.AF=/*@=/* Chain file to assemble file for M146818 Real Time Clock chip=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M146818.RDTIMER.LS=/*=/IFC \1ƒ=ARGM146818.RDTI MER.LS=/ENDIF=/*3=ASM M146818.RDTIMER.SA,M146818.RDTIMER.RO,\1;RZ=40=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDNNNNNN—=/*=/*†M146818.TIMEINT.AF=/*7=/* Chain file to assemble M146818.TIMEINT.SA for 68010=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M146818.TIMEINT.LS=/*=/IFC \1ƒ=ARGM146818.TIMEINT.LS=/ENDIF=/*E=ASM M68010.M68010.SA/M146818.TIMEINT.SA,M146818.TIMEINT.RO,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9999.M146818.M146818.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9999.M68XXX.TIMEINT.AI=/*}=/*=ENDNNNNN  ŠPAGE**ˆINCLUDEFILES**‰INCLUDE9995.&.STR.EQ*‰INCLUDE9995.&.INTERRUP.MCŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGEARDTIMERƒIDNTƒ45,0‹READTIMERroutineforM146818realtimeclock.*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**ˆ*********************ˆ*RDTIMER‚1.00„**ˆ*’**ˆ*HLD6ƒ09/30/80‚**ˆ*SFF5ƒ01/18/83‚**ˆ*********************,*…READTIMER-RETURNTIMERVALUE(MS)IND1*™TIMERVALUE(US)IND0*ŠSECTIONLEVEL00* ŠXDEFƒRDTIMER ŠXDEFƒSBRDTIM  **ˆSYSPARparameters* ŠXREF.SNSEŠXREF.SMIDNIGHTŠXREF.STIME_LEFTŠXREF.STIMINTV4ŠXREF.STINTFLAGŠPAGESBRDTIM:RDTIMER:'ŠMOVE.WSR,-(A7)‹Valuetouseinunmask/ŠMOVE.L#1000,D0‹1000-TIMINTV4=microsecondsŠDISABLE_INTERRUPTS %ŠMOVE.LNSE,D1NextsignificanteventŠSUB.L‚TIME_LEFT,D10ŠSUB.L‚MIDNIGHT,D1ˆD1=currentmspastmidnight#ŠBCLRƒ#31,D1InsurepositivenumberŠSUB.W‚TIMINTV4,D0ˆMICROSECONDS ŠMOVE.W(A7)+,SRŠRTSŠENDNNN©8ŠPAGE**ˆINCLUDEFILES**ˆINCLUDE9995.&.STR.EQ!*ˆINCLUDE9999.M146818.M146818.EQ*ˆINCLUDE9995.&.BAB.EQ*ˆINCLUDE9995.&.PAT.EQ*ˆINCLUDE9995.&.TR1RTCD.EQ*ˆINCLUDE9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQ ŠINCLUDE9999.M146818.M146818.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.INTERRUP.MCŠLIST@TIMEINTƒIDNTƒ45,0ŒTIMERINTERRUPTHANDLERFORM146818CLOCKCHIP*$*‰COPYRIGHTED1983BYMOTOROLA,INC.*.*†TIMERINTERRUPT-OCCURSONCEEACH15.625MS**•01/18/83‚(SFF5)*•04/07/83‚(7616)*:*•08/15/83‚SteveFranck--ChangedtoexitthroughCOMINT.*ŠSECTIONLEVEL00* ŠXDEFƒTIMEINT ŠXREF.SDATEŠXREF.SPATBEGŠXREF.SPREEMPT_FLAGŠXREF.SPTMADDRŠXREF.STIME_LEFTŠXREF.STIMESLICŠXREF.STIMEOUTŠXREF.STIMINTVŠXREF.STIMINTV4ŠXREF.STINTFLAG ŠXREFƒTRACERŠXREF.STRACFLAG ŠXREFƒBKG_SCHEDULE ŠXREFƒCKDELAY ŠXREFƒCKEXPAŠXREFƒPAT_RM_1ST_NODE**0TIMEINTƒMOVEM.LD0-D1/A0-A1,-(A7)SAVEREGISTERS ŠMOVE.LPTMADDR,A0‰TIMERADDRESS6ŠMOVE.BREGC(A0),D0ˆREADREGCTOCLEARTIMERINTERRUPT ŠCLR.W‚D04ŠMOVE.L#15,D1AmountoftimetodecrementTIME_LEFT-ŠMOVE.WSR,-(A7)‹ValuetouseinunmasklaterŠDISABLE_INTERRUPTSˆMask.ŠSUB.W‚#625,TIMINTV4†625usecHAVEALSOPASSEDŠIFTHEN.SADD.L‚#1,D1‹Addtheextrams"ADD.W‚#1000,D0ˆandResetuscountŠENDI !ŠADD.W‚D0,TIMINTV4ˆResetuscount.ŠSUB.L‚D1,TIME_LEFT‡Doweneedtofireanode?ŠMOVE.W(A7)+, SR‹Unmask+ŠTST.L‚TIME_LEFTŠDoweneedtofireanode?0*‰INCLUDE9999.M68XXX.TIMEINT.AIYes-sodoit.ŠINCLUDE9999.M68XXX.TIMEINT.AIŠENDN²J'VME117 TIMEINT AFÇÇ  KILLER AFÐÐ  KILLER SAÙÙ }  =/*=/*†VME117.TIMEINT.AF=/*6=/* Chain file to assemble VME117.TIMEINT.SA for 68010=/* with 6840 timer module=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to VME117.TIMEINT.LS=/*=/IFC \1ƒ=ARGVME117.TIMEINT.LS=/ENDIF=/*B=ASM M68010.M68010.SA/M6840.TIMEINT.SA,VME117.TIMEINT.RO,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9999.M6840.M6840.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.PANEL.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9999.M68XXX.TIMEINT.AI=/*}=/*=ENDNNNNN¿ =/*=/*†VME117.KILLER.AF=/*@=/* Chain file to assemble VME117.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to VME117.KILLER.LS=/*=/IFC \1ƒ=ARGVME117.KILLER.LS=/ENDIF=ARG‚\1,VME117.KILLER.RO=/*D=ASM M68010.M68010.SA/M68XXX.KILLER.SA/VME117.KILLER.SA,\2,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*ƒ9999.VME117.CTRLREG.EQ=/*}=/*=ENDNNNNNȉLIST‰PAGE‰SPCƒ1&*–VME117-BOARDDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.VME117.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚TurnontheBoardFailLED.!*’2.‚Outputsystemcrashmessage.A*ˆItalsocontainsanequatefortheamountoftimestodecrementD*ˆacounterinaloopinordertodelayforapprox.one-halfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BRAfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------9*ˆ03/27/86‚JulieHoban„Movedoutputmessageroutinehere.(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 *ˆINCLUDEFILES**ˆ9999.VME117.CTRLREG.EQ*‰NOLIST‰INCLUDE‚9999.VME117.CTRLREG.EQ‰OPT…CL‰LIST * *ˆEQUATES*HALFSEC‚EQU‡$5FFFF‰PAGE*-*ˆBoardSpecificCode-turnonBoardFailLED*KILLER3: (‰BSET.B‚#BDFAIL,M117MCRŠTURNFAILLEDON *C*ˆIfFirmwaredebuggerhasTRAP#15I/O-useittodisplaymessage*KILLOOP: @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 7‰MOVE.L‚TRP15TYP,D1‹GetTRAP#15capabilityflagsinD12‰BTST„#T15IO,D1TestforPHOENIXTRAP#15su pport.,‰IFƒƒTHEN.SŒIfyes,thenoutputmessage.*F*ˆTRAP#15PHOENIXformat-usesA5,A6topointtostring,endstring+1*.‹LEA…MSGCRASH(PC),A5…Startof'SYSTEMCRASHED'&‹LEA…ENDCRASH(PC),A6…Endofstring+1 ÑKÚ3,‹TRAP15‚BUGTRP15,KILLER4„DopseudoTRAP#15.KILLER4:)‹DC.W„5“Outputstring,noaddedCRorLF. #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D2Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 8OUTLOOP„ROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter)‹MOVE.L‚A7,A5A5=startofoutputstring-*ŸA6=endofstring+1(setupbyHXTOASCI)‹TRAP15‚BUGTRP15,OUTNEXTOUTNEXT:#‹DC.W„5“Outputstring,noCRorLF.‹PAGE#*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹DBRA„D2,OUTLOOPŠOutputall8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack. -‹BSR…KILLDLAYŒDelayhereforflashingeffect. *‹LEA…MSGBLANK(PC),A5…Startofblankstring,‹LEA…ENDBLANK(PC),A6…Endofblankstring+1 +‹TRAP15‚BUGTRP15,KILLER5„DopseudoTRAP#15KILLER5:#‹DC.W„5“Outputstring,noCRorLF. #*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹BSR…KILLDLAYŒDelayhereforflashingeffect. 5‹BRA…KILLOOPBranchbacktocreateaflashingmessage ‰ELSE.S @KILLER8:ƒBRA„KILLER8‰NoTRAP#15I/Oavailable,soloopforever. ‰ENDI  ‰ENDNN'M68000 TRAP1 AFîî  M68000 SA÷÷  =/*=/*†M68000.TRAP1.AF=/*6=/* Chain file to assemble M68XXX.TRAP1.SA for a 68000=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68000.TRAP1.LS=/*=/IFC \1ƒ=ARGM68000.TRAP1.LS=/ENDIF=/*>=ASM M68000.M68000.SA/M68XXX.TRAP1.SA,M68000.TRAP1.RO,\1;RZ=75=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.UDR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=END NNNNNNæ ‰LLEN120* *ˆTypeof68000-familyprocessor*$CHIPTYPE‚EQU68000‚TypeofprocessorNNNNNNNï  'M68010 TRAP1 AF  M68010 SA    =/*=/*†M68010.TRAP1.AF=/*6=/* Chain file to assemble M68XXX.TRAP1.SA for a 68010=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68010.TRAP1.LS=/*=/IFC \1ƒ=ARGM68010.TRAP1.LS=/ENDIF=/*>=ASM M68010.M68010.SA/M68XXX.TRAP1.SA,M68010.TRAP1.RO,\1;RZ=75=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.UDR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDNNNNNNü ‰LLEN120* *ˆTypeof68000-familyprocessor*$CHIPTYPE‚EQU68010‚TypeofprocessorNN  NNNNN'M68020 TRAP1 AF  M68020 SA##  =/*=/*†M68020.TRAP1.AF=/*6=/* Chain file to assemble M68XXX.TRAP1.SA for a 68020=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68020.TRAP1.LS=/*=/IFC \1ƒ=ARGM68020.TRAP1.LS=/ENDIF=/*>=ASM M68020.M68020.SA/M68XXX.TRAP1.SA,M68020.TRAP1.RO,\1;RZ=90=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.ENV.EQ=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.UDR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*}=/*=ENDNNNN! NN ‰LLEN120* *ˆTypeof68000-familyprocessor*$CHIPTYPE‚EQU68020‚TypeofprocessorNNNNNNN'M6840 RDTIMER AF00  TIMEINT AF99  RDTIMER SABBF  TIMEINT SAKKF  ! =/*=/*†M6840.RDTIMER.AF=/*+=/* Chain file to assemble M6840.RDTIMER.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to M6840.RDTIMER.LS=/*=/IFC \1ƒ=ARGM6840.RDTIMER.LS=/ENDIF=/*/=ASM M6840.RDTIMER.SA,M6840.RDTIMER.RO,\1;RZ=50=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9999.M6840.M6840.EQ=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDNNNNNN(=/*=/*†M6840.TIMEINT.AF=/*5=/* Chain file to assemble M6840.TIMEINT.SA for 68000=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to M6840.TIMEINT.LS=/*=/IFC \1ƒ=ARGM6840.TIMEINT.LS=/ENDIF=/*A=ASM M68000.M68000.SA/M6840.TIMEINT.SA,M6840.TIMEINT.RO,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9999.M6840.M6840.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.PANEL.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9999.M68XXX.TIMEINT.AI=/*}=/*=ENDNNNN" N1ŠPAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9999.M6840.M6840.EQ*ˆINCLUDEƒ9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9999.M6840.M6840.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE>RDTIMERƒIDNTƒ45,0ŽREADTIMERroutinefortheM6840timerchip.*$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**ˆ*********************ˆ*RDTIMER‚1.00„**ˆ*’**ˆ*HLD6ƒ09/30/80‚**ˆ*********************'*…READTIMER-RETURNTIMEOFDAYIND1*™TIMERVALUEIND0*ŠSECTIONLEVEL00* ŠXDEFƒRDTIMER ŠXDEFƒSBRDTIM  ** SYSPAR parameters* ŠXREF.SMIDNIGHT ŠXREF.SNSEŠXREF.SPTMADDRŠXREF.STIME_LEFTŠXREF.STIMINTV4ŠXREF.STINTFLAGŠPAGESBRDTIM:RDTIMER:!ŠMOVE.LA0,-(A7)‹Don'tdestroyA0#ŠMOVE.LPTMADDR,A0‰ADDRESSOFTIMER ŠCLR.L‚D1 ŠMOVE.WSR,-(A7)ŠDISABLE_INTERRUPTS ŠMOVEP‚MSBT3(A0),D1‡READTIMER3ŠMOVE.WD1,D0ŽSAVETIMERVALUEŠLSR.W‚#8,D1ŽGETMSBYTEONLY ŠNEG.W‚D1.ŠADD.W‚TIMINTV4,D1ˆ#TIMESCOUNTERDECREMENTEDŠLSR.W‚#2,D1ŽWANTTIMEINTVONLY-ŠADD.L‚NSE,D1AddnextsignificanteventtimeŠSUB.L‚TIME_LEFT,D10ŠSUB.L‚MIDNIGHT,D1ˆD1=currentmspastmidnight "ŠMOVE.W(A7)+,SR‹Unmaskinterrupts #ŠBCLRƒ#31,D1InsurepositivenumberŠMOVE.L(A7)+,A0ŠRTSŠENDNN:GŠPAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9999.M6840.M6840.EQ*ˆINCLUDEƒ9995.&.BAB.EQ*ˆINCLUDEƒ9995.&.PAT.EQ*ˆINCLUDEƒ9995.&.PANEL.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9999.M6840.M6840.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9995.&.PANEL.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTCTIMEINTƒIDNTƒ45,0‰TIMERINTERRUPTHANDLERFORTHEM6840TIMERCHIP.*$*‰COPYRIGHTED1980BYMOTOROLA,INC.*,*†TIMERINTERRUPT-OCCURSONCEEACHTIMINTV**ˆREV‚2.00„02/08/81‚(HLD6)*ˆREV‚3.00„11/06/81‚(HLD6)*ˆREV‚3.10„02/09/82‚(HLD6)*.*•09/83‚SJF--ChangedtoexitthroughCOMINT;*£eliminatedVM01FLAGstuff.*ŠSECTIONLEVEL00* ŠXDEFƒTIMEINT ŠXREF.SDATE ŠXREF.SPANELŠXREF.SPATBEGŠXREF.SPREEMPT_FLAGŠXREF.SPTMADDRŠXREF.STIME_LEFTŠXREF.STIMEOUTŠXREF.STIMESLICŠXREF.STIMINTV ŠXREFƒTRACERŠXREF.STRACFLAG ŠXREFƒBKG_SCHEDULE ŠXREFƒCKDELAY ŠXREFƒCKEXPAŠXREFƒPAT_RM_1ST_NODE*0TIMEINTƒMOVEM.LD0-D1/A0-A1,-(A7)SAVEREGISTERS-SRSTACKƒSET…(2*4)+(2*4)‡OffsettoSRonstack!ŠMOVE.LPANEL,A0‹ADDRESSOFPANEL(ŠM" OVE.B#0,FPTTO(A0)‡KEEPREADYLIGHTON ŠMOVE.LPTMADDR,A0‰TIMERADDRESS!ŠMOVE.BCR2SR(A0),D0‡CLEARSTATUS'ŠMOVE.BMSBT3(A0),D0‡CLEART3INTERRUPT 1ŠCLR.L‚D1‘D1.L<--timeintervalcorrespondingto'ŠMOVE.WTIMINTV,D1‰atickofthetimer.2ŠSUB.L‚D1,TIME_LEFT‡DoweneedtofireaPATnode?4*‰INCLUDE9999.M68XXX.TIMEINT.AI‚Yes-firethenodeŠINCLUDE9999.M68XXX.TIMEINT.AIŠENDNCG'M68451 LOADMMU AFXX  LOADMMU SAaa?J  =/*=/*†M68451.LOADMMU.AF=/*,=/* Chain file to assemble M68451.LOADMMU.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68451.LOADMMU.LS=/*=/IFC \1ƒ=ARGM68451.LOADMMU.LS=/ENDIF=/*2=ASM M68451.LOADMMU.SA,M68451.LOADMMU.RO,\1;MRZ=65=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9999.M68451.M68451.EQ=/*ƒ9999.M68010.BUSERRFT.EQ=/*ƒ9995.&.KILL.MC=/*ƒ9999.&.KILLEXEC.EQ=/*}=/*=ENDNNNNN# PŠNOLISTŠINCLUDE„9995.&.UTILITY.MCŠINCLUDE„9995.&.STR.EQŠINCLUDE„9995.&.TCB.EQŠINCLUDE„9995.&.TST.EQŠINCLUDE„9999.M68451.M68451.EQ ŠINCLUDE„9999.M68010.BUSERRFT.EQŠINCLUDE„9995.&.KILL.MCŠINCLUDE„9999.&.KILLEXEC.EQŠLISTCLOADMMU‚IDNT‚45,0…LOADMMUSUBROUTINESFORM68451MMUWITHTHE68010‰SPCƒ1O*********************************************************************************ˆM68451.LOADMMU*F*ˆSubroutinestoaddsegmentsanddeletesegmentsfromtheM68451MMU.7*ˆTaskswithaddressspace0getunmappedentirespace.@*ˆTaskswithotheraddressspacesgetonlytheirassignedspace.1*ˆPagefaultisusedtoswapsegmentdescriptors.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*'*ˆEntry:„A5=targettask'sTSTaddress*’D5=offsettoTSTMMUentry*!*ˆRegisterusage:…01234567*™D‚*********™A„*‡P**™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed**D*ˆExit:‚RTStocaller‚(ADD_SEG_TO_MMUANDDEL_SEG_FROM_MMUmusthave*conditioncodesset)**,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------:*ˆ10/30/85‚CBSŒChangedKILLERcallstouseKILL.EXECmacro-*ˆ08/20/85‚CBSŒChangedfornewformatofTST.@*ˆ07/26/85‚JulieHoban„AddedADD_SEG_TO_MMUsubroutine.Replaced+*¡UNLDMMUsubroutinewithDEL_SEG_FROM_MMU.;*ˆ07/12/85‚CBSŒChanged2signedbranchestounsignedfor32*¡32-bitaddresssupport.<*ˆ12/05/84‚SJFŒAddedhandlingtoMMUFAULTforthecasewhere)*¡wegetinterruptedoutofthebuserror-*¡handlerforauserinterruptwhichcausesa/*¡buserrorwhichresultsintheloadingofthe,*¡samedescriptorastheoriginalbuserror.4*ˆ01/28/84‚SJFŒAddedcalltoflushcacheinUNLDMMU.*ˆ02/28/83‚7616*O*******************************************************************************‰PAGE ‰SECTION2 ‰OPT…CL Y@bbjOrKz?‚CŠ<’Q**‚XDEF's*‰XDEF†ADD_SEG_TO_MMU‰XDEF†ADD_SEG2 ‰XDEF†CRASN ‰XDEF†DEASN‰XDEF†DEL_SEG_FROM_MMU ‰XDEF†LOADMMU‰XDEF†LOADMMUI‰XDEF†MMUFAULT  **‚XREF's*‰XREF†FLUSH_ON_CONTEXT_SWITCH ‰XREF.S„ASNTBL‰XREF.S„CURR_ASN‰XREF.S„CURRSD‰XREF.S„CURR451‰XREF.S„FRST451‰XREF.S„LAST451‰XREF.S„MMUHERE‰XREF.S„MMULOAD‰XREF.S„RUNNER ‰XREF†TRACER‰XREF.S„TRACFLAGA‰XREF.S„LAST_MMU_INT_LEVELParameterwhichcontainstheinterrupt$*§levelatwhichwegotthelastBus$*§Errorwhichmighthavebeendueto *§anunloadedsegmentdesciptor. **‚INCLUDEDFILES:**‰INCLUDE„9995.&.UTILITY.MC*‰INCLUDE„9995.&.STR.EQ*‰INCLUDE„9995.&.TCB.EQ*‰INCLUDE„9995.&.TST.EQ*‰INCLUDE„M68451.M68451.EQ*‰INCLUDE„M68010.BUSERRFT.EQ*‰INCLUDE„9995.&.KILL.MC*‰INCLUDE„9999.&.KILLEXEC.EQ* *#*‚MACROTOSETCONDITIONCODES* SETCCEQ‚MACRO ‰CMP.L…D0,D0‰ENDM‰PAGEO********************************************************************************#*ˆLOADMMUsubroutinefortheM68451* *ˆEntry:„A5=targetTSTaddress* *ˆCalls:„FLUSH_ON_CONTEXT_SWITCH*O******************************************************************************* LOADMMU:.ŠMOVE.B‚TSTASN(A5),D0…Getaddressspacenumber*ŠCMP.BƒCURR_ASN,D0‡IfsameascurrentASN,ŠBEQ.SƒLOADEXITŠthenEXIT. ŠPUSH„SRSaveinterruptlevel!ŠOR.W„#$700,SRŠInhibitinterrupts/ŠMOVE.L‚A5,MMULOADˆSaveaddressofcurrentloadŠMOVE.L‚MMUHERE,A5ˆPointtoMMUŠMOVE.B‚D0,AST1(A5)‡# Userdata ŠMOVE.B‚D0,AST2(A5)‡Userprogram* *„SAVETHEADDRESSSPACENUMBER.*ŠMOVE.B‚D0,CURR_ASN **„FLUSHTHEUSERCACHE.*ŠBSR…FLUSH_ON_CONTEXT_SWITCH **„TEMPORARILYDISABLETRACING.*0*‰BTST„#TRCFMMU,TRACFLAGShouldentrybetraced?*‰IF…THEN.S*‰BSR…TRACERŒBuildtraceentry*‰DC.W„$DD08Tracecode*‰ENDI (ŠPOP…SRRestorepreviousinterruptlevel LOADEXIT: ŠRTS—ReturnŠPAGEO********************************************************************************$*ˆLOADMMUIsubroutinefortheM68451* *ˆEntry:„A5=targetTSTaddress* *ˆCalls:„FLUSH_ON_CONTEXT_SWITCH*O******************************************************************************* LOADMMUI:.ŠMOVE.B‚TSTASN(A5),D0…Getaddressspacenumber*ŠCMP.BƒCURR_ASN,D0‡IfsameascurrentASN,ŠBEQ.SƒLOADIEX‹thenEXIT. !ŠOR.W„#$700,SRŠInhibitinterrupts/ŠMOVE.L‚A5,MMULOADˆSaveaddressofcurrentloadŠMOVE.L‚MMUHERE,A5ˆPointtoMMUŠMOVE.B‚D0,AST1(A5)‡Userdata ŠMOVE.B‚D0,AST2(A5)‡Userprogram * *„SAVETHEADDRESSSPACENUMBER.*ŠMOVE.B‚D0,CURR_ASN  **„FLUSHTHEUSERCACHE.*ŠBSR…FLUSH_ON_CONTEXT_SWITCH **…TEMPORARILYDISABLETRACING.*0*‰BTST„#TRCFMMU,TRACFLAGShouldentrybetraced?*‰IF…THEN.S*‰BSR…TRACERŒBuildtraceentry*‰DC.W„$DD08Tracecode*‰ENDI LOADIEX:ŠRTEŠPAGEO********************************************************************************!*ˆCRASNsubroutinefortheM68451*:*ˆCreateanewAddressSpaceNumberandinsertitintoTCB*,*ˆEntry:„A5‚PointstoTCBtoreceivenewASN**ˆExit:…ReturnPCifsuccessful(*’ReturnPC+2ifnonewASNisavailable* *›01234567*ˆRegisterUsage:‚D**™A*„P*O******************************************************************************* CRASN:=‰BTSTW‚#TSKARTIM,TCBATTR(A5)‚Ifthetaskisareal-timetask,.‰BNE.S‚CRASN13thenusethedefault(ASN=0),*¦asinitializedinTSKBORN. "‰MOVE.LASNTBL,D0ŽIstherea!ASN?‰BEQ.S‚CRASN13Branchifnone‰MOVE.LD0,A0’A0--->!ASN‰CMP.L‚#'!ASN',(A0)‹Isit!ASN?‰BEQ.S‚CRASN11Branchifyes?‰KILL.EXEC‚M451_LOADMMUSA,NO_ASN_ADD„Crashsystem-ASNisbad.CRASN11"‰LEA„4(A0),A0Pointtofirstentry$‰MOVE.W#127-1,D0Ž127entriesinallCRASN12‚TST.L‚(A0)+’Freeentry?(‰DBEQƒD0,CRASN12Branchbackifnotfree,‰BEQ.S‚CRASN12ABranchifanentrywasfound"ŠADD.L‚#2,(A7)Error--tablefullŠRTSšTakeerrorreturn"CRASN12AMOVE.LA5,-(A0)Useentry‰NEG.B‚D0•ComputeASN‰ADD.B‚#127,D0#‰MOVE.LTCBTST(A5),A0ŠPointto!TST"‰MOVE.BD0,TSTSTAT(A0)‰DropinASNCRASN13ŠRTSšReturntocallerŠPAGEO********************************************************************************!*ˆDEASNsubroutinefortheM68451**ˆDeletetaskfrom!ASN*(*ˆEntry:„A4=pointertoTCBtoloseASN* *›01234567*ˆRegisterUsage:‚D**™A*‚**O******************************************************************************* DEASN:#ˆMOVE.L‚ASNTBL,D0„Istherean!ASN?ˆBEQ.SƒDEASN7‡BranchifnoneˆMOVE.L‚D0,A0ˆA0--->!ASNˆCMP.Lƒ#'!ASN',(A0)Isit!ASN?ˆBEQ.SƒDEASN5‡Branchifyes>ˆKILL.EXECƒM451_LOADMMUSA,NO_ASN_DELETEƒCrashsystem-badASNDEASN5#ˆMOVE.L‚TCBTST(A4),A1Pointto!TST ˆCLR.WƒD0‹Prepareforshortload4ˆMOVE.B‚TSTASN(A1),D0GetAddressSpaceNumber(ASN)!ˆBEQ.SƒDEASN7‡ASN#0notrelevant&ˆCMP.Wƒ#128,D0†Shouldbelessthan128ˆBLT.SƒDEASN6‡Branchifok>ˆKILL.EXEC‚M451_LOADMMUSA,ASN_TOO_BIG„Crashsystem,ASN>127.DEASN6ˆLSL.Wƒ#2,D0ˆIndexinto!ASNˆCLR.Lƒ(A0,D0.W)„RemoveentryDEASN7ŠRTSReturntocaller‰PAGEO**********************************************************************************ˆADD_SEG_TO_MMUsubroutinefortheM68451*0*ˆThisisadummyroutinewhenusingtheM68451.*(*ˆEntry:ƒ(A5,D5)-->Segmentinformation*4*ˆExit:…RTStocallerwithconditioncodesset.*O********************************************$ *********************************** ADD_SEG_TO_MMU: ADD_SEG2:‰SETCCEQ‰RTSŠPAGEO********************************************************************************,*ˆDEL_SEG_FROM_MMUsubroutinefortheM68451*#*ˆDeleteasegmentfromM68451MMUs*(*ˆEntry:ƒ(A5,D5)-->Segmentinformation* *ˆCalls:„FLUSH_ON_CONTEXT_SWITCH*4*ˆExit:…RTStocallerwithconditioncodesset.*O******************************************************************************* DEL_SEG_FROM_MMU: *=*‚Flushanycachedinformationthisusermighthavebuiltup.* ŠPUSH.LA5ŠBSR„FLUSH_ON_CONTEXT_SWITCH ŠPOP.L‚A5 *ŠTST.B‚TSTASN(A5)ŠIsthisaddressspace0?ŠBEQ.S‚UNLDEXITŒBranchifyes(ŠMOVE.LFRST451,A1ŠPointtofirstM68451$ŠMOVE.B#1,D0Segmentdescriptor#1UNLD10%ŠMOVE.BD0,DP(A1)‹Pointtodescriptor"ŠMOVE.BSSR(A1),D1ŠReaddescriptor+ŠBTSTƒ#SSREN,D1‹Isthisdescriptorenabled?ŠBEQ.S‚UNLDNEXTŒBranchifno'ŠMOVE.BAC6(A1),D1ŠGetdescriptor'sASN8ŠCMP.B‚TSTASN(A5),D1‡Isthistheaddressspacewe'rein?ŠBNE.S‚UNLDNEXTŒBranchifno1ŠCLR.L‚D1’Highbytemustbezeroforlongcompare'ŠMOVE.WAC0(A1),D1ŠGetdescriptor'sLBA%ŠLSL.L‚#8,D1Convertto32bitformat!ŠCMP.L‚TSTLB(A5,D5),D1†LBALE?ŠBHI.S‚UNLDNEXTŒBranchifyes-ŠMOVE.B#0,SSR(A1)ŠElseclearthisdescriptor5ŠMOVE.LA1,CURR451ŠGivethisdescriptortonextfault5ŠMOVE.BD0,CURRSD+3‰RestofdescriptorinfoforfaultUNLDNEXTŠADDQ.B#1,D0NextdescriptorŠCMP.B‚#$20,D0EndofthisMMU?ŠBNE.S‚UNLD10ŽBranchifno#ŠLEA„$40(A1),A1ŠMoveontonextMMUŠCLR.B‚D0’Descriptor#0)ŠCMP.L‚LAST451,A1ŠArewebeyondallMMUs?ŠBLE.S‚UNLD10ŽBranchifnoUNLDEXITŠSETCCEQŠRTS˜ElsereturnŠPAGEO********************************************************************************$*ˆMMUFAULTsubroutinefortheM68451*?*ˆDiagnosebuserrorandattemptM68451segmentdescriptorswap*"*ˆSavesandrestoresallregisters*O******************************************************************************* MMUFAULT: ŠSAVE„D0-D7/A0-A6ˆSaveregistersŠTST.LƒMMUHEREŒIsthereanmmu?ŠBEQ…MMUFRTSŒBranchifno<ŠMOVE.L‚MMULOAD,A0‰A0<--ptrtoTSToftaskthat'srunning;'*§notethatthisisnotnecessarilythe*§RUNNER(wemaybeinanISR)./ŠTST.BƒTSTASN(A0)‰Isthistaskaddressspace0?ŠBEQ…MMUFRTSŒBranchifyes8ŠTR0.LOGPHY,<15*4+8+AOB(A7)>,#2Checkforvalidaddress/ŠBRA.SƒMMUF10BranchifAOBisinlogicalspace ŠNOP˜Else,+ŠBRA…MMUFRTSŒBranchifnotinlogicalspaceMMUF10-ŠMOVE.L‚D0,A1ŽSaveoffsetintoTSTATTRfields(ŠBSR…CRSDCreatelba,lam,pbainD0,D1,D2ŠMOVE.W‚TSTASN(A0),D3†ASNtoD3"ŠMOVE.B‚TSTCTL(A0,A1),D3‚DSTtoD3:ŠBSET„#SSRUSED,D3ˆSettousedsoitwon'tgetswappedsoonŠPAGE**‰Selectadescriptortoswap**‰1.‚Disableddescriptor.*‰2.‚Firstdescriptorcheckedandfoundunused*‰3.‚Firstdescriptorchecked*%ŠPUSH„SRSavecurrentinterruptlevel!ŠOR.W„#$700,SRŠInhibitinterrupts3ŠMOVEM.LFRST451,A0-A3…GetM68451SYSPARparameters'ŠMOVE.L‚A2,A4A4-->MMUbeingexamined&ŠMOVE.L‚A3,D7D7hasdescriptornumberFSD20%ŠMOVE.B‚D7,DP(A4)‰Pointtodescriptor"ŠMOVE.B‚SSR(A4),D6ˆReaddescriptor+ŠBTST„#SSREN,D6‰Isthisdescriptorenabled?ŠBEQ.SƒFSDEMPTYŠBranchifno0ŠBCLRƒ#SSRUSED,D6‡Hasthisdescriptorbeenused?ŠBEQ.S‚FSDNOUSEŠBranchifno/ŠMOVE.BD6,SSR(A4)ˆEraseusedbitindescriptorŠADDQ.B#1,D7NextdescriptorŠCMP.B‚#$20,D7‹EndofthisMMU?ŠBNE.S‚FSD40Branchifno#ŠLEA„$40(A4),A4ˆMoveontonextMMU#ŠCLR.B‚D7Beginwithdescriptor#0$ŠCMP.L‚A1,A4ArewebeyondallMMUs?ŠBLE.S‚FSD40Branchifno"ŠMOVE.LA0,A4GobacktofirstMMUŠADDQ.B#1,D7Descriptor#1FSD40+ŠCMP.W‚A3,D7Samedescriptorwestartedon?ŠBNE.S‚FSD20Branchbackifno$ŠCMP.L‚A2,A4SameMMUwestartedon?ŠBNE.S‚FSD20BranchbackifnoŠPAGE**‰Usefirstdescriptorchecked*FSDFIRST*(*‰Usefirstdescri$ ptorfoundtobeempty*FSDEMPTY*(*‰Usefirstdescriptornotrecentlyused*FSDNOUSE?SR_ON_STACKSET‚4+4+15*4+2‰ThisisthedepthoftheoriginalSR%*§pushedbythebuserror.‚Intheway'*§arethePCfromtheBSRPROGINT2(4),&*§thePCfromtheBSRMMUFAULT(4),15%*§registerssavedbyMMUFAULT(15*4),#*§andtheSRsavedbyMMUFAULT(2). BŠMOVEƒSR_ON_STACK(SP),D6IsolateinD6theinterruptlevelwewere6ŠAND„#$0700,D6Šrunningatwhenthebuserroroccurred. /ŠMOVEM.WD0-D3,AC0(A4)„LoadmostofaccumulatorŠMOVE.B‚#$FF,AC8(A4)…ASM#ŠMOVE.B‚D7,DP(A4)ˆDescriptornumber 5ŠTST.BƒLDO(A4)‹Iftherewasnocollisionontheload,ŠIF‚‚THEN.SŠ* TRY_AGAIN*J*‚AtthispointwehaveeithersuccessfullyloadedasegmentdescriptororI*‚wegotacollisionthatmaybeduetoapreviousinterruptwhichcausedK*‚ustoloadadescriptor.‚IneithercasewewanttoremembertheinterruptH*‚levelofthisloadandproceedundertheassumptionthatthebuserrorJ*‚wascausedbytheabsenceoftherightsegmentdescriptor.‚IfwegettheJ*‚buserroragain,theLAST_MMU_INT_LEVELwillbelowersowe'llknowit's*‚theuser'sfault.*>ŠMOVE.B‚AC6(A4),AST1(A0)‚LoadtheASNforthisdescriptorinto?ŠMOVE.B‚AC6(A4),AST2(A0)‚theuserdataanduserprogramentries*§intheaddressspacetable. **‰FixupSYSPARparameters*:ŠMOVEƒD6,LAST_MMU_INT_LEVELƒRememberthisinterruptlevel. 2ŠADDQ.B‚#1,D7ŒStartnexttimewithnextdescriptorŠCMP.Bƒ#$20,D7ŠEndofthisMMU?ŠBNE.SƒFSD100‹Branchifno#ŠLEA…$40(A4),A4‡MoveontonextMMU#ŠCLR.BƒD7Startwithdescriptor#0$ŠCMP.LƒA1,A4ŒArewebeyondallMMUs?ŠBLE.SƒFSD100‹Branchifno"ŠMOVE.L‚A0,A4ŒGobacktofirstMMUŠADDQ.B‚#1,D7ŒDescriptor#1FSD100#ŠMOVE.L‚A4,CURR451‡SavecurrentMMU+ŠMOVE.B‚D7,CURRSD+3†Savecurrentdescriptor**‰Returntofaultedtask*!ŠADD.Lƒ#2,A7ŒRemoveSRfromstack/ŠRESTORED0-D7/A0-A6†Restoreoriginalregisters+ŠADD.Lƒ#8,A7ŒRemoveunusedreturnaddressesŠRTE–Continuetask ŠENDI  *C*‚Therewasacollision;canwetellwhethertheuserwasatfault?*BŠCMP„LAST_MMU_INT_LEVEL,D6‚Iftheinterruptlevelofthelastload:ŠBMI„TRY_AGAINŠwashigherthantheinterruptlevelofthis'*§load,thenit'spossiblethatwetook(*§theinterruptduringtheprocessingof%*§thisbuserror.‚Ifthathappenedwe(*§mighthavealreadyloadedthissegment'*§descriptorforthecodeatthehigher$*§interruptlevel.‚Thereforewemust*§trytheaccessagain.  *F*‚Weknowthecollisionwastheuser'sfault,sinceweknowwedidnot7*‚comethroughthispathfromahigherinterruptlevel.*(ŠPOP…SRRestorepreviousinterruptlevelMMUFRTS&ŠRESTORED0-D7/A0-A6†RestoreregistersŠRTS–ContinuenormalhandlingŠPAGE* *‰Computeonesegmentdescriptor**‰ENTRY:‚D6=Physicaladdress*‘D3=Logicaladdress*‘(A0,D5)-->TSTMMUentry**‰EXIT:ƒD0=lba *‘D1=lam *‘D2=pba*‘(A0,D5)UNDISTURBED*CRSDŠMOVE.L‚D3,D0D0=la ŠLSR.Lƒ#8,D0LOSELOWBYTEOFla ŠLSR.Lƒ#8,D6LOSELOWBYTEOFpa,ŠMOVE.L‚#-1,D1ŒONESTOSTOPlamFORMINGLOOPŠMOVE.W‚D1,D3D3=lamŠCLR.LƒD2D2=nŠMOVE.W‚D6,D1D1=paŠEOR.WƒD0,D1D1=paEORla**‰FORMLARGESTPOSSIBLElam*CRSDAŠBTST„D2,D1la=paINBITn?ŠBNE.SƒCRSDCBRANCHIFNOŠBCLR„D2,D3CLEARTHISlamBITŠADD.Bƒ#1,D2BUMPnŠBRA.SƒCRSDATRYNEXTBIT**‰ADJUSTlamFORLOWERBOUNDARY*CRSDC5ŠCLR.LƒD1UpperwordofD1must=0forcomparebelowŠMOVE.W‚D0,D1D1.W=laŠAND.WƒD3,D1D1.W‚=lamANDla%ŠLSL.Lƒ#8,D1Convertto32bitformat(ŠCMP.LƒTSTLB(A0,D5),D1ƒlamANDla>=lb?ŠBHS.SƒCRSDDBRANCHIFYESŠSUB.Bƒ#1,D2DECREMENTnŠBSETƒD2,D3HALVETHElamRANGEŠBRA.S‚CRSDCTRYAGAIN**‰ADJUSTlamFORUPPERBOUNDARY*CRSDDŠMOVE.W‚D3,D4ŒD4=lamŠNOT.WƒD4D4=NOTlamCRSDD105ŠCLR.LƒD1UpperwordofD1must=0forcomparebelowŠMOVE.W‚D0,D1ŒD1=laŠAND.WƒD3,D1ŒD1=lamANDla'ŠADD.WƒD4,D1ŒD1=(lamA% NDla)+NOTlam%ŠLSL.Lƒ#8,D1ŒConvertto32bitformat2ŠCMP.LƒTSTLE(A0,D5),D1‚(lamANDla)+NOTlam<=leŠBLS.SƒCRSDEŒBRANCHIFYESŠSUB.Bƒ#1,D2ŒDECREMENTnŠBSET„D2,D3ŒHALVETHElamRANGE"ŠBCLR„D2,D4ŒHALVETHENOTlamRANGEŠBRA.SƒCRSDD10ŠTRYAGAINCRSDEŠAND.WƒD3,D0ŒD0=lba,ŠMOVE.L‚TSTPO(A0,D5),D2‚D2=PHYSICALOFFSET*ŠLSR.Lƒ#8,D2ŒConvertbackto24bitformatŠADD.WƒD0,D2ŒD2=paŠMOVE.W‚D3,D1ŒD1=lam ŠRTS–RETURNŠEND'M68XXX RDTIMER AF¦¦  POWRFAILAF¯¯  READY AF¸¸  RMS AFÁÁ  SELFTESTAFÊÊ  RDTIMER SAÓÓ \  TRAP1 SAää<…  INIT SA%%k3  KILLER SA®®?E  POWRFAILSAÿÿ2  READY SA¼  RMS SA!!  SELFTESTSA221  =/*=/*†M68XXX.RDTIMER.AF=/*,=/* Chain file to assemble M68XXX.RDTIMER.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to M68XXX.RDTIMER.LS=/*=/IFC \1ƒ=ARGM68XXX.RDTIMER.LS=/ENDIF=/*1=ASM M68XXX.RDTIMER.SA,M68XXX.RDTIMER.RO,\1;RZ=50=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.INTERRUP.MC=/*}=/*=ENDNNNNNNž=/*=/*†M68XXX.POWRFAIL.AF=/*-=/* Chain file to assemble M68XXX.POWRFAIL.SA=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M68XXX.POWRFAIL.LS=/*=/IFC \1ƒ=ARGM68XXX.POWRFAIL.LS=/ENDIF% =/*4=ASM M68XXX.POWRFAIL.SA,M68XXX.POWRFAIL.RO,\1;MRZ=40=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*}=/*=ENDNNNNNN§=/*=/*†M68XXX.READY.AF=/**=/* Chain file to assemble M68XXX.READY.SA=/*:=/* If no output argument is specified for the listing the.=/* chain file will default to M68XXX.READY.LS=/*=/IFC \1ƒ=ARGM68XXX.READY.LS=/ENDIF=/*-=ASM M68XXX.READY.SA,M68XXX.READY.RO,\1;RZ=55=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*}=/*=ENDNNNNNN& °=/*=/*†M68XXX.RMS.AF=/*(=/* Chain file to assemble M68XXX.RMS.SA=/*:=/* If no output argument is specified for the listing the,=/* chain file will default to M68XXX.RMS.LS=/*=/IFC \1ƒ=ARGM68XXX.RMS.LS=/ENDIF=/**=ASM M68XXX.RMS.SA,M68XXX.RMS.RO,\1;MRZ=65=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9995.&.KILL.MC=/*ƒ9999.&.KILLEXEC.EQ=/*}=/*=ENDNNNNNN¹=/*=/*†M68XXX.SELFTEST.AF=/*-=/* Chain file to assemble M68XXX.SELFTEST.SA=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to M68XXX.SELFTEST.LS=/*=/IFC \1ƒ=ARGM68XXX.SELFTEST.LS=/ENDIF=/*4=ASM M68XXX.SELFTEST.SA,M68XXX.SELFTEST.RO,\1;MRZ=40=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*}=/*=ENDNNNN& NNÂ.RDTIMERƒIDNTƒ45,0M68xxx--Readssystemtime.O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***<***…FILE:‚RDTIMER--GETSTHECURRENTTIMEOUTOFSYSPAR******É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***G***…FUNCTION:‚Thisroutinereturnsthetimemaintainedbythetimer„******‡logic.‚Onreturn,°***C***‰D1=the#ofmillisecondssincemidnightatwhichthelast…******Žtimertickoccurred.§***C***‰D0=0.‚Thisusedtobethe#ofmicroseconds,butitisn't„***?***Žrealistictothinkthatthefigurewasevermeaningful.„******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------?*…11/27/84‚SteveFranckƒCreatedfromadevice-specificversion.* * *‚XDEF's.*$ŠXDEFƒRDTIMERŒEntrypt.forTRAP#0.(ŠXDEFƒSBRDTIMŒEntrypt.forsubroutines.  **‚XREF'sfromSYSPAR.*ŠXREF.SMIDNIGHT ŠXREF.SNSEŠXREF.STIME_LEFT  **‚Includedfiles:*„9995.&.STR.EQ*„9995.&.UTILITY.MC*„9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.UTILITY.MCŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE ŠSECTIONLEVEL00  SBRDTIM:RDTIMER: 0ŠPUSHƒSR‘Wemustdothiswithinterruptsmasked,6ŠDISABLE_INTERRUPTSˆincasewetakeatimerinterrupt. *5*‚Calculate‚(#ofmillisecondssincelastmidnight)==*[(timeofNSEinmsecs)-(timeleftuntilNSEinmsecs)]#*ª-(timeoflastmidnightinmsec)ËEÔG*‚NSEstandsforNextSignificantEvent,andistheabsolutetimevalueJ*‚inmsecswhenwenextneedtotakesomethingoffthePeriodicActivationK*‚Table(PAT).‚Recallthattheclockisa31-bit(not32-bit!)numberwhichB*‚wrapsaroundat2**31=0,sowehavetodo"31-bitarithmetic."*%ŠMOVE.LNSE,D1D1<--msectimenow=:ŠSUB.L‚TIME_LEFT,D1‡(timeofNSE)-(timeleftuntilNSE)./ŠSUB.L‚MIDNIGHT,D1ˆD1<--msecsincemidnight=1*Ÿ(msectimenow)-(msectimeatlastmidnight).3ŠBCLRƒ#31,D1Theresultisa31-bitnumber,sozero%*§outthehighbit,whichisgarbage. *J*‚Alwaysset#ofmicrosecondstozero,sincewearereallyonlyreturning6* the millisecond time of the last tick that occurred.*#ŠMOVEQ‚#0,D0ŽD0<--0microseconds.  +ŠPOP„SR‘Restoreinterruptlevelandreturn.ŠRTS—*  ŠEND' NNNN‰NOLIST‰INCLUDE9995.&.UTILITY.MC‰INCLUDE9995.&.ENV.EQ‰INCLUDE9995.&.STR.EQ‰INCLUDE9995.&.TCB.EQ‰INCLUDE9995.&.UDR.EQ‰INCLUDE9995.&.TR1RTCD.EQ ‰OPT…NOCL‰SPC1‰LIST‰IFEQƒCHIPTYPE-680000TRAP1„IDNTƒ45,0‡68000TRAP#0handlerandtable.‰ENDC‰IFEQƒCHIPTYPE-680100TRAP1„IDNTƒ45,0‡68010TRAP#0handlerandtable.‰ENDC‰IFEQƒCHIPTYPE-680200TRAP1„IDNTƒ45,0‡68020TRAP#0handlerandtable.‰ENDC‰SPC1O*********************************************************************************ˆTRAP1*3*ˆCommonmoduletocallatrap1directiveroutine.*>*ˆWhenataskwantstoinvokesomeexecfunction,hemovesthe>*ˆdirectivenumberofthefunctionintoD0anddoesaTRAP#1.A*ˆThempuvectorshereandweusetheTRAP#1tablecalledTABLE1D*ˆtoJMPtothedesiredroutine.EverythingdealingwiththeTRAP#1<*ˆmechanismforreal-timetasksiscontainedinthismodule.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1983byMotorola,Inc.*8*ˆEntry:„D0ƒ=directive#oftheroutinetobeexecuted.2*’A0ƒ=parameterblock(ifrequiredbydirective)..*’PC&SR(&maybeVOR)ofcallerarestacked,*šaswithanyTRAP.*’A6ƒ=Requestor'sTCBaddress*!*ˆRegisterusage:…01234567*™D‚***…****™A‚*ƒ**RRP**™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed*5*ˆCalls:TRACER,CKEXMON,SBLOGPHY,SBGETTCB,SBREADY*=*ˆExit:‚Goodreturn-JMPtotheroutinetohandledirective.*’A4=Parameterblockaddress *’A5=Targettask'sTCBaddress*’A6=Requestor'sTCBaddress@*Badreturn‚-EXITERRORmacrowiththefollowingreturncodes:*1*RTCDDIRN-01‚Directivenumberisnotassigned.9*RTCDPBLK-02‚Parameterblocknotinuser'saddrspace.+*RTCDTASK-03‚Targettaskdoesnotexist.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------ÜAåmíQõVýGJ n2A*ˆ10/07/85‚ChuckSmith„AddednewABORTCdirective(XX)toTABLE1.=*ˆ09/06/85‚JulieHoban„Newdirectivesmadespecificto68020.C*ˆ07/26/85‚JulieHoban„Addeddirectives(39,40,63,70,71)toTABLE1.'*ˆ07/27/84‚MarkLanus…Originalwriting.*O*******************************************************************************‰PAGE ‰SECTIONƒ2 ‰OPT‡MEX **‚XDEF's*0‰XDEF†TRAP1EntrypointfortheTRAP#1handler. /‰XDEF†TTB_01ŽBeginningandendingaddressesfor‰XDEF†TTE_01Žtrusttableentry. **‚XREF's* ‰XREF†CKEXMON ‰XREF†ISRRTE ‰XREF†TRACER‰XREF†SBGETTCB‰XREF†SBLOGPHY ‰XREF†SBREADY ‰XREF.S„RUNNER‰XREF.S„TRACFLAG‰XREF.S„UDRBEG **ƒINCLUDEDFILES:**‰INCLUDE9995.&.UTILITY.MC*‰INCLUDE99' 95.&.ENV.EQ*‰INCLUDE9995.&.STR.EQ*‰INCLUDE9995.&.TCB.EQ*‰INCLUDE9995.&.UDR.EQ*‰INCLUDE9995.&.TR1RTCD.EQ*‰PAGE**ˆif&*ˆ(interrupt_mask(super_stack)>0)|,*ˆ(supervisor_state_bit(super_stack)=set)*ˆthengotoisrrte;* TRAP1:‰TESTIM3‰BNE.S…ISR_RTEBranchifnotfromnormalusermode.  *1*ˆforcetheconditioncodesonthestackto,+*ˆandperformalevel_1partialstatesave;* =‰MOVE.B„#EQ_CC,COND_CODE(A7)…savecondcodeofonstack. ‰SAVE_STATEŠL1_PART  *"*ˆif(requestor<>real-timetask)*ˆthengotonot_rt_task;* ‰BTSTW…#TSKARTIM,TCBATTR(A6)‰BEQ.S…NOT_RT_TASK  */*ˆmultiplyD0by4;/*‚Getindexintotable1‡*/ *ˆif(D0<0)7*ˆthengotouser_dir;Š/*‚Userconfigureddirective.‚*/* ‰ASL.W…#2,D0‰BMI.S…USER_DIR  *$*ˆif(D0>biggestdirectivenumber)*ˆthenexit(baddirective);* ‰CMP.W…#HI_T1_NUM*4,D0‰BHI.S…BAD_DIR  * *ˆA4<==addr(parameterblock);.*ˆD2<==(option_bits)&(offset(directive)); *ˆif(target_tcb_required=set)*ˆthenget(target_tcb);#*ˆgotodirectivepointedtobyD0;* ‰MOVE.L„A0,A4‰MOVE.L„TABLE1(PC,D0.W),D2 ‰IF‚‚THEN.S‰GET_TARGET_TCB‰ENDI ‰JMP‡TABLE1(PC,D2.W)‰PAGE*:*ˆHerearesomebranchinstructions.‚Thepurposeinhaving=*ˆthisbranchtobrancharchitecture,wastomakethetrap#1>*ˆhandlerforreal-timetasksasfastaspossible,eventhough<*ˆthisarchitecturewouldslowdownthetrap#1handlingfor*ˆnonreal-timetasks.*=*ˆTheprioritiesonhandlingtrap#1requestsareasfollows:**1.)‚real-timetasks,*2.)‚nonreal-timetasks,!*3.)‚userconfigureddirectives.  *1*ˆUserexecutedatrap#1whileexecutinganISR.* ISR_RTE: ‰BRA.L…ISRRTE  *&*ˆClienttaskisnotareal-timetask.* NOT_RT_TASK:‰BRA.L…TRAP1_10  ***ˆTrapisforauserconfigureddirective.* USER_DIR:‰BRA.L…TRAPUSR  *(*ˆTrapcontainedabaddirectivenumber:* BAD_DIR:$‰EXIT†RTCDDIRNŒexit(baddirective);‰PAGE@*****************************************************************"*ˆENTRYCONDITIONSFORDIRECTIVES:*+*A4<==parameteraddress(ifapplicable);!*A6<==clienttasktcbaddress;*?***************************************************************‰PAGEO*********************************************************************************ˆTABLE1*F*ˆInthisfileistheTRAP#1tablecalledTABLE1containingoneentryD*ˆforeveryTRAP#1directive.‚EachentryissetupusingtheSETUP1**ˆmacroandcontainsthefollowingfields:'*’1.Bytedescribingdirectiveoptions:*–a.‚parameterblockrequired.*–b.‚targettcbrequired.:*’2.Bytedescribinglengthofparameterblock(ifreq'd)..*’3.Wordcontainingoffsettodirectivecode.*C*ˆTheSETUP1macrohasuptofiveinputparameters.‚Theinputsare:%*’1.‚Equateforthedirectivenumber.4*’2.‚Labeloftheroutinetoprocessthatdirective..*’3.‚Equatetodefineparameterblockisused.3*’4.‚Byteequaltonumberbytesinparameterblock.,*’5.‚Equatetodefinetargettaskinterface.**ˆRegisterusage:*œ01234567*™D*™A*O*******************************************************************************  * *ˆExample:*A*ˆSETUP1‚,,,,* 2TT‡EQU‡%10000000‹Onebyteequate-inputtoSETUP12PB‡EQU‡%01000000‹Onebyteequate-inputtoSETUP12T1TRGTSKEQU‡31’Bitnumbertestedfortargettask.1T1PARBLKEQU‡30’Bitnumbertestedforparablock.‰PAGE SETUP1ƒMACRODIR_NUM‚SET‡(*-TABLE1)/4‰IFNE†DIR_NUM-\1SHOULD_BE‚SET…\10‹FAIL„499‘Thisdirectiveisinthewrongplace!!‹MEXIT‰ENDC‰IFC‡'\5','TT'‹DC.B„TT+PBget(pb&tt);‹DC.B„\4’len(pb);‹NOLIST‹XREF„\2‹LIST#‹DC.W„\2-TABLE1‹offset(directive);‹MEXIT‰ENDC‰IFC‡'\3','PB'‹DC.B„PB’get(pb);‹DC.B„\4’len(pb);‹NOLIST‹XREF„\2( ‹LIST#‹DC.W„\2-TABLE1‹offset(directive);‹MEXIT‰ENDC‰DC.B†%00000000‹get();‰DC.B†0“len(pb)=0;‰NOLIST‰XREF†\2‰LIST#‰DC.W†\2-TABLE1‹offset(directive);ˆENDM  ‰PAGETABLE1:2‡SETUP1ƒT10,ERROR_01Error-baddirectivenumber. 4‡SETUP1ƒT1GTSEG,SEGALOC,PB,24,TTƒAllocateasegment. 6‡SETUP1ƒT1DESEG,SEGDEAL,PB,24,TTƒDeallocateasegment. 3‡SETUP1ƒT1TRSEG,TFRSEG,PB,24,TT„Transferasegment. <‡SETUP1ƒT1ATTSEG,ATTSEG,PB,24†Attachtoashareablesegment. >‡SETUP1ƒT1SHRSEG,SEGSHAR,PB,24,TT‚Grantsharedsegmentaccess. ;‡SETUP1ƒT1MOVELL,MOVELL,PB,28,TTƒMovefromlogicaladdress. ;‡SETUP1ƒT1DCLSHR,DCLSHAR,PB,24…Declareasegmentshareable. 5‡SETUP1ƒT1SNAPTRAC,SNAPTRACˆMovetracetabletouser. :‡SETUP1ƒT1RCVSA,RCVSA,PB,28,TT…Receivesegmentattributes. /‡SETUP1ƒT1GTTID,GTTASKID,PB,08…GetTCBaddress. '‡SETUP1ƒT1CRTCB,CRTCB,PB,28ˆCreateTCB. 0‡SETUP1ƒT1GTTNAME,GTTNAME,PB,08,TTGettaskname. *‡SETUP1ƒT1START,TSKSTART,PB,10…Starttask. (‡SETUP1ƒT1ABORT,ABORTŽAborttask(self). *‡SETUP1ƒT1TERM,TERMTerminatetask(self). 6‡SETUP1ƒT1TERMT,TERMT,PB,10ˆTerminatetask(notself). -‡SETUP1ƒT1SUSPND,SUSPEND‹Suspendtask(self). 7‡SETUP1ƒT1RESUME,RESUME,PB,08,TTƒResumesuspendedtask. )‡SETUP1ƒT1WAIT,TSKWAITBlocktask(self). 7‡SETUP1ƒT1WAKEUP,WAKEUP,PB,08,TTƒWakeupawaitingtask. #‡SETUP1ƒT1DELAY,DELAYŽDelay(self). -‡SETUP1ƒT1RELINQ,RELINQŒRelinquishexecution. :‡SETUP1ƒT1TSKATTR,TSKATTR,PB,08,TTReturntaskattributes. 6‡SETUP1ƒT1SETPRI,SETPRI,PB,09,TTƒSetcurrentpriority. -‡SETUP1ƒT1STOP,STOPT,PB,08‰Stoprunningtask. 6‡SETUP1ƒT1EXPVCT,EXPVCT,PB,36†Claimexceptionvectors. 1‡SETUP1ƒT1TRPVCT,TRPVCT,PB,56†Claimtrapvectors. =‡SETUP1ƒT1TSKINFO,TSKINFO,PB,14,TTMovetask'sTCBtocaller. =‡SETUP1ƒT1RQSTPA,RQSTPA,PB,26,TTƒRequestperiodicactivation. /‡SETUP1ƒT1DELAYW,DELAYWŒDelaywithwaitoption. 1‡SETUP1ƒT1GTASQ,ASQALOC,PB,22,TTƒAllocateanASQ. *‡SETUP1ƒT1DEASQ,ASQFREEŒDeallocateanASQ. )‡SETUP1ƒT1SETASQ,ASQSTATSŠSetASQstatus. -‡SETUP1ƒT1RDEVNT,ASQREAD‹ReadeventfromASQ. 5‡SETUP1ƒT1QEVNT,ASQEVENT,PB,18,TT‚QueueeventtoASQ. (‡SETUP1ƒT1WTEVNT,WTEVENT‹Waitforevent. +‡SETUP1ƒT1RTEVNT,RTEVENT‹Returnfromevent. ,‡SETUP1ƒT1GTEVNT,GTEVENT‹GeteventfromASQ. †IFEQƒCHIPTYPE-680209‡SETUP1ƒT1RESVCT,CPRVCT,PB,128…Claimcoprocessorvectors. =‡SETUP1ƒT1CRXTCB,CRXTCB,PB,24,TTƒCreateXTCBforcoprocessors†ENDC†IFNEƒCHIPTYPE-680200‡SETUP1ƒT1RESVCT,ERROR_01ŠError-baddirective. 0‡SETUP1ƒT1CRXTCB,ERROR_01ŠError-baddirective.†ENDC 0‡SETUP1ƒT1ATSEM,ATSEM,PB,10ˆAttachtosemaphore. .‡SETUP1ƒT1WTSEM,WTSEM,PB,10ˆWaitonsemaphore. -‡SETUP1ƒT1SGSEM,SGSEM,PB,10ˆSignalsemaphore. 2‡SETUP1ƒT1DESEM,DESEM,PB,10ˆDetachfromsemaphore. -‡SETUP1ƒT1CRSEM,CRSEM,PB,10ˆCreatesemaphore. <‡SETUP1ƒT1DESEMA,DESEMAŒDetachallsemaphoresforthistask. ,‡SETUP1ƒT147,ERROR_01ŽError-baddirective. ,‡SETUP1ƒT148,ERROR_01ŽError-baddirective. L*vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv;‡SETUP1ƒT1ABORTC,ABORTC,PB,16†Abortacriticaltask(self).L*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ,‡SETUP1ƒT150,ERROR_01ŽError-baddirective. =‡SETUP1ƒT1SERVER,SERVER,PB,06†Establishserverforusertask. 4‡SETUP1ƒT1DSERVE,DSERVEŒDetachfromserverfunction. 7‡SETUP1ƒT1DERQST,DERQSTŒSetuser/serverrequeststatus. <‡SETUP1ƒT1AKRQST,AKRQST,PB,20,TTƒAcknowledgeserverrequest. ,‡SETUP1ƒT155,ERROR_01ŽError-baddirective. ,‡SETUP1ƒT156,ERROR_01ŽError-baddirective. ,‡SETUP1ƒT157,ERROR_01ŽError-baddirective. 2‡SETUP1ƒT1CDIR,CDIR,PB,08ŠConfigureuserdirectiv. )‡SETUP1ƒT159,SUPER‘Entersupervisormode. "‡SETUP1ƒT1CMR,CMR’Channelrequest. 4‡SETUP1ƒT1CISR,CISR,PB,20,TT‡Claiminterruptvector. 6‡SETUP1ƒT1SINT,SINT,PB,04ŠSi( mulateuserI/Ointerrupt. †IFEQƒCHIPTYPE-68020<‡SETUP1ƒT1XEXMSK,CEXMSK,PB,12,TTƒSetcoprocessorexmonmask.†ENDC†IFNEƒCHIPTYPE-680200‡SETUP1ƒT1XEXMSK,ERROR_01ŠError-baddirective.†ENDC ;‡SETUP1ƒT1EXMON,EXMON,PB,16,TT…Attachtoexceptionmonitor. >‡SETUP1ƒT1DEXMON,DEMON,PB,16,TT„Detachfromexceptionmonitor. <‡SETUP1ƒT1EXMMSK,EXMMSK,PB,12,TTƒSetexceptionmonitormask. 6‡SETUP1ƒT1RSTATE,RSTATE,PB,12,TTƒReceivetask'sstate. 2‡SETUP1ƒT1PSTATE,PSTATE,PB,12,TTƒSettask'sstate. B‡SETUP1ƒT1REXMON,REXMON,PB,12,TTƒExecutetaskunderexmoncontrol. †IFEQƒCHIPTYPE-680207‡SETUP1ƒT1XPSTAT,CPSTAT,PB,16,TTƒPutcoprocessorstate. ;‡SETUP1ƒT1XRSTAT,CRSTAT,PB,16,TTƒReceivecoprocessorstate.†ENDC†IFNEƒCHIPTYPE-680200‡SETUP1ƒT1XPSTAT,ERROR_01ŠError-baddirective. 0‡SETUP1ƒT1XRSTAT,ERROR_01ŠError-baddirective.†ENDC 9‡SETUP1ƒT1MOVEPL,MOVEPL,PB,28†Movefromphysicaladdress. 0‡SETUP1ƒT1STDTIM,STDTIM,PB,08†Setdateandtime. 0‡SETUP1ƒT1GTDTIM,GTDTIM,PB,08†Getdateandtime. )‡SETUP1ƒT1FLUSHC,FLUSHCŒFlushusercache.  >HI_T1_NUMEQU(*-TABLE1)/4-1HighestTRAP#1directivenumber. ‰PAGE*3*ˆThisistheroutinewhichprocessestrap#1calls*ˆfromnonreal-timetasks.* *"*ˆTracethistrap#1,ifrequired.* TRAP1_10:-‰BTST†#TRCFTRP1,TRACFLAGŒDowewanttotrace?‰BEQ.S…TRAP1_20–Branchifno. !‰BSR‡TRACER˜Tracethisdirective. ‰DC.W†$FF15 *'*ˆSendamessagetoEXMON,ifrequried.*  TRAP1_20:0‰BTST†#TSKIEXM,TCBATTI(A6)ŠDoestaskhaveEXMON?‰BEQ.S…TRAP1_30–Branchifno. 3‰MOVE.L„TCBEMMSK(A6),D1Movemasktodataregister.(‰BTST†#TEMTRAP1,D1’IsTRAP#1monitored?‰BEQ.S…TRAP1_30–Branchifno. %‰MOVE.L„#1,D7™PassTRAP#toCKEXMON.&‰BSR‡CKEXMON—GosendmessagetoEXMON.  */*ˆmultiplyD0by4;/*‚Getindexintotable1‡*/ *ˆif(D0<0)7*ˆthengototrap_usr;Š/*‚Userconfigureddirective.‚*/* TRAP1_30: ‰ASL.W…#2,D0‰BMI.S…TRAPUSR  *$*ˆif(D0>biggestdirectivenumber)*ˆthenexit(baddirective);* ‰CMP.W…#HI_T1_NUM*4,D0‰BHI.S…TRAP1BAD  *.*ˆGetaddressofparameterblock,ifrequired.* ‰LEA‡TABLE1(PC),A3‰MOVE.L„(A3,D0.W),D2‰BTST†#T1PARBLK,D2‰BEQ.S…TRAP1_GO ‰MOVE.L„D2,D5‰SWAP†D5‰AND.L…#$FF,D5-‰MOVE.L„A0,D6LOGICALPARAMETERBLOCKADDRESS‰TR0.LOGPHY‚&‰BRA.S…TRAP1_40ŒBRANCHIFGOODADDRESS ‰NOP›BADADDRESS&‰EXIT†RTCDPBLKŒBADADDRESSRETURNCODE  TRAP1_40:.‰MOVE.L„D6,A4PARAMETERPHYSICALADDRESSTOA4  *&*ˆGettargetTCBaddress,ifrequired.* $‰BTST†#T1TRGTSK,D2ˆNEEDTARGETTASK?‰BEQ.S…TRAP1_GOŒBRANCHIFNO ‰TR0.GETTCB‚(A4)‰BRA.S…TRAP1_50ŒBRANCHIFFOUND‰EXIT†RTCDTASKŒBADTARGETTASK TRAP1_50:&‰MOVE.L„A0,A5TARGETTCBADDRESSTOA5 **ˆNowgotodirectivecode.* TRAP1_GO: ‰JMP‡(A3,D2)   *'*ˆHereisanotherbranchfromabranch,$*ˆemployedforperformancepurposes.* TRAP1BAD:‰EXIT†RTCDDIRN‰PAGETRAPUSR:&‰MOVE.L„UDRBEG,A2‹USERDIRECTIVETABLE‰MOVE.L„A2,D2DOESTABLEEXIST?‰BEQ.S…TRAP1BADŒBRANCHIFNO ,‰ASR.W…#2,D0GETUNMODIFIEDDIRECTIVENUMBER.‰NEG.W…D0’CHANGEDIRECTIVE#TOPOSITIVEVALUE2‰CMP.W…UDRCNT(A2),D0‡ISVALUEWITHINTABLELIMITS?&‰BGT.S…TRAP1BADŒBRANCHIFNOTINTABLE ‰SUB.W…#1,D0ENTRYNUMBER‰MULU†#UDRESIZ,D0‰*ENTRYSIZE(‰LEA‡UDRENTRY(A2,D0),A2‚POINTERTOENTRY!‰TST.L…UDRADDR(A2)‰ADDRESSEXIST?‰BEQ.S…TRAP1BADŒBRANCHIFNO .‰MOVE.W„UDROPT(A2),D2‡GETOPTION&EXITINDEX.)‰BCLR†#4,D2THISTRAPFOR1SESSIONONLY?‰BNE.S…TRAPUSR1ŒBRANCHIFNO "‰MOVE.L„UDRSESS(A2),D1†GETSESSION'‰CMP.L…TCBSESSN(A6),D1…DOESITCOMPARE?‰BNE.S…TRAP1BADŒBRANCHIFNO TRAPUSR1:(‰MOVE.L„(A7),TCBA6(A6)†MOVEA6INTOTCB.%‰CLR.W…TCBRTCD(A6)‰CLEARRETURNCODE.(‰MOVE.W„D2,-(A7)ŒPUTEXITINDEXONSTACK ‰IFNE†CHIPTYPE-680005‰MOVE.W„#$84,-(A7)ŠSIMULATETRAP1ONM68010/020STACK‰ENDC )‰PEAˆTRAP1XIT(PC)‡RETURNADDRE) SSTOSTACK‰MOVE.W…SR,-(A7)‹SRTOSTACK $‰MOVE.L„UDRADDR(A2),A2†ENTRYADDRESS ‰JMP‡(A2)  **ˆRETURNFROMDIRECTIVE* TRAP1XIT:'‰MOVE.W„TCBRTCD(A6),D0†Getreturncode.*‰EXIT.NEƒERRORExitiferrorindirective. ‰MOVE.W„(A7)+,D0ŒGetexitindex.5‰EXIT.EQƒSUB‘If(index=0)thentakesubroutineexit ‰IF.W†D0#2THEN.S4‰TR0.READY(A6)If(index=2)thenmaketaskready.‰ENDI 2‰EXIT†POSTEMPTŒIneithercase,takepostemptexit.‰ENDNNNŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.TST.EQŠINCLUDE9995.&.PANEL.EQŠINCLUDE9995.&.GST.EQŠINCLUDE9995.&.UST.EQŠINCLUDE9995.&.TRACE.EQŠINCLUDE9995.&.MAP.EQŠINCLUDE9995.&.IOV.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9995.&.UDR.EQŠINCLUDE9995.&.INTERRUP.MCŠINCLUDE9995.&.KILL.MCŠINCLUDE9999.&.KILLEXEC.EQŠLIST‰SPCƒ1!INIT…IDNT‚45,0„SYSTEMINITIALIZER‰SPC1O*********************************************************************************ˆINIT(AlsoknownasSYSINIT).*@*ˆSysteminitializer.‚Thismoduleinitializesmemory(callsIMEM9*ˆsubroutineinanothermodule)andbuildssystemtables.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:ˆFirstmoduletoexecutewhenafterIPLgivescontrol *–tptheprogramitjustloaded.**!*ˆRegisterusage:…01234567*™D‚*********™A‚*********™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed**+*ˆExit:‚Goodreturn-DISPATCHintheexec.+*Badreturn‚-ExitsviaKILL.EXECT0macro.**,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------NN 3&.j6<>8FIN)V^fn*v6~7†/Ž<–ž5C*ˆ03/07/86‚JulieHoban„MovedBLDTCBroutinebeforecalltoINITMMU..*¡AlsorenamedKILLERtoKILL_INITandchanged*¡formatfrom'OLDF'to'0001'.?*ˆ02/11/86‚JulieHoban„Addedcoprocessorsupportformini-TCBs.A*ˆ11/05/85‚JulieHoban„RemovedIMEMsubroutinetoxxxxxx.IMEM.SA.D*ˆ10/30/85‚ChuckSmith„ChangedKILLERcallstouseKILL.EXECT0macro-*ˆ10/23/85‚JulieHoban„FixedbuginCMEMCONF.<*ˆ10/19/85‚CBSŒAddedinitializationofBUGTRP15andTRP15TYP7*ˆ10/08/85‚JulieHoban„Re-wroteIMEMforbud) dybuffers.;*ˆ08/20/85‚CBSŒChangedthewaymini-TCBsarehandledtouse)*¡thenew32bit/8segmentformatofTST.7*ˆ07/30/85‚CBSŒRe-wroteVECTINITtoallow32bitvector-*¡addressesandsimplifiedformatofVECTTBL.8*ˆ07/12/85‚CBSŒChanged3signedbranchestounsignedfor*¡32-bitaddressingsupport.NNNN:*ˆ12/7/84‚SJFŒAddedinitializationofLAST_MMU_INT_LEVEL.C*ˆ12/23/83‚MarkLanus…Re-wrotememoryinitializationroutinetofix.*¡bugin"hole"processing(andseveralmore).*O*******************************************************************************‰PAGE ‰SECTION2 ‰OPT…CL **‚INCLUDEDFILES:**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.TST.EQ*ˆINCLUDEƒ9995.&.PANEL.EQ*ˆINCLUDEƒ9995.&.GST.EQ*ˆINCLUDEƒ9995.&.UST.EQ*ˆINCLUDEƒ9995.&.TRACE.EQ*ˆINCLUDEƒ9995.&.MAP.EQ*ˆINCLUDEƒ9995.&.IOV.EQ*ˆINCLUDEƒ9995.&.BAB.EQ*ˆINCLUDEƒ9995.&.PAT.EQ*ˆINCLUDEƒ9995.&.UDR.EQ*ˆINCLUDEƒ9995.&.INTERRUP.MC*ˆINCLUDEƒ9995.&.KILL.MC*ˆINCLUDEƒ9999.&.KILLEXEC.EQ* **‚XREF's*ŠXREFƒCRASHSAV ŠXREFƒENDMEMT ŠXREFƒMEMTABL ŠXREF.SADEFTYPŠXREF.SASNTBLŠXREF.SBKG_ACTIVEŠXREF.SBKG_HEADŠXREF.SBKG_TAILŠXREF.SBUGTRP15 ŠXREF.SCCBHDŠXREF.SCURR_ASNŠXREF.SENDSYSPŠXREF.SEXCSTACKŠXREF.SGSTBEGŠXREF.SIOVCTBGN ŠXREF.SLAMŠXREF.SLAST_MMU_INT_LEVELŠXREF.SMACSTRCŠXREF.SMAPBEGŠXREF.SMIDNIGHT ŠXREF.SNSEŠXREF.SNOTLAM ŠXREF.SPANELŠXREF.SPATBEGŠXREF.SREADYHDŠXREF.SSDEFTYPŠXREF.SSEMENDŠXREF.SSEMLIST ŠXREF.STCBHDŠXREF.STDEFTYP ŠXREF.STIATŠXREF.STIME_LEFTŠXREF.STRACEBEGŠXREF.STRACFLAGŠXREF.STRP15TYPŠXREF.SUDEFTYPŠXREF.SUDRBEGŠXREF.SUSTBEGŠXREF.SVCTUBGN * *„REFERENCESTOINITDATASEGMENT* ŠSECTION8 ŠXREFƒASNŠXREFƒDISPATCH ŠXREFƒEEND ŠXREFƒESTACK ŠXREFƒESTART ŠXREFƒGSTSIZ ŠXREFƒIOVSIZ ŠXREFƒMEMTYPA ŠXREFƒMEMTYPS ŠXREFƒMEMTYPT ŠXREFƒMEMTYPUŠXREFƒPAGESIZE ŠXREFƒPANELA ŠXREFƒPATSIZ ŠXREFƒRDYHEAD ŠXREFƒSMEMHI ŠXREFƒSMEMLOŠXREFƒSTARTMAP ŠXREFƒTCBHEAD ŠXREFƒTRCFLAG ŠXREFƒTRCSIZ ŠXREFƒUDRSIZ ŠXREFƒUSTSIZŠXREFƒWHERLOAD‰PAGE(START…MOVE.L#$400,A7‹LOADSTACKPOINTER.ŠMOVE.LD0,$3FCŒBESUREMEMORYCANBEACCESSED*$*ˆCLEARMEMORYTHROUGHENDOFSYSPAR*2ŠLEA„CRASHSAV,A0ˆSTARTWHEREUSEABLEMEMORYSTARTS(ŠMOVE.L#ENDSYSP,D6ˆENDATENDOFSYSPAR$ŠSUB.L‚A0,D6ŽCOUNTOFBYTESTOCLEAR#ŠADD.L‚#255,D6ŒCLEARTOENDOFPAGEŠCLR.B‚D6‘EVENPAGEBOUNDRYŠBSR„TBLCLRBŒCLEARMEMORY*'ŠMOVE.LESTACK(PC),A7†LOADSYSTEMSTACK/ŠMOVE.LA7,EXCSTACKˆSAVESTACKPOINTERFOREXEC 1*ˆIMPORTANT-D4MUSTNOTBEALTEREDBEFORETHIS!*BŠMOVE.LD4,TRP15TYP„SaveflagfromIPLorBUGinSYSPARdescribing%*ŸwhatTRAP#15* supportisavailable.4ŠMOVE.L$24,MACSTRCˆSAVEBUG'STRACEROUTINEADDRESS8ŠMOVE.L$BC,BUGTRP15‡SAVEBUG'STRAP#15ROUTINEADDRESS *,*‡FINDOUTIFPANELEXISTS-PUT'BF'INLED*)ŠMOVE.LPANELA(PC),A1†PANELADDRESSTOA1!ŠMOVE.LA1,PANEL‹SAVEITFOREXEC ŠBEQ.S‚PANELBEŒGOONIFNOPANEL(ŠLEA„PANELBE(PC),A0…GOHEREONBUSERROR"ŠMOVE.LA0,$8ŽSETBUSERRORVECTOR+ŠMOVE.W#$80,FPLEDST(A1)ƒTESTFORBUSERROR ŠMOVE.W#$BF,D1ŒWANT'BF'INLEDŠBSR„PANELEDD‹GOLIGHTITUP ŠBRA.S‚MOVE2LOŒGOTOMOVEMEMORY*1PANELBEƒMOVE.L#CRASHSAV,PANEL„SETPANELTODUMMY'ŠMOVE.LEXCSTACK,A7ˆRESETSTACKPOINTERŠPAGE*/*†MOVEALLOFOSTOLOWERMEMORYIFAPPROPRIATE*3MOVE2LOƒMOVE.LWHERLOAD(PC),D1„WHEREAREWELOADED?ŠBEQ.S‚VECTINIT‹BRANCHIFAT0'ŠMOVE.LESTART(PC),A3†'MOVETO'ADDRESS!ŠMOVE.LD1,A2Ž'MOVEFROM'ADDRESS'ŠLEA„ENDMEMT(PC),A4…ENDOFMEMORYTABLEM*------------------------------------------------------------------- 08/20/85%**ˆADD.L‚#$800,A4‹EXTRAFORMINI-TCBS1ŠMOVE.L#MTCBLN*15+255,D0‚LENGTHOF~15MINI-TCBS#ŠCLR.B‚D0‘MAKESUREON256BOUNDARY ŠADD.L‚D0,A4ŽEXTRAFORMINI-TCBSM*----------------------------------------------------------------------------&ŠLEA„VECTINIT(PC),A0„WHERETOGOLATER%ŠSUB.L‚A2,A0ŽSUBTRACTSTARTOF'FROM'ŠADD.L‚A3,A0ŽADDSTARTOF'TO'(ŠLEA„MOVDONE(PC),A1…GOHEREONBUSERRORŠMOVE.LA1,$8ŽBUSERRORVECTOR*#MOVEALLƒMOVE.L(A2)+,(A3)+ˆMOVEALLŠCMP.L‚A2,A4ŽFINISHED?ŠBHI„MOVEALLŒBRANCHIFNO ŠADD.L‚#6,A7*'MOVDONEƒJMP„(A0)CONTINUEINOTHERCOPYŠPAGE*J*ƒHerewereadtheVECTTBLfileanduseittoinitializethevectortable.D*ˆReferto.VECTTBL.AGfordetailed‚formatanddefinitionof@*ˆtheVECTTBL.‚Basically4typesofentriesaregeneratedbythe *ˆmacros:*ˆType1:ƒVEXX00AAAAAAAA*ˆType2:ƒRAXXYYAAAAAAAA*ˆType2:ƒBTXXYYAAAAAAAA*ˆType3:ƒET000000000000**A*ˆWhereVE,RA,BT,andETareAsciistringsrepresentingVEctor,D*ˆRAnge,By-Twos,andEnd-of-Table,repectively.‚XXisthebeginning=*ˆvectornumberofthevectorrange(0-$FF),YYistheendingF*ˆvectorofthevectorrange(0-$FF).‚AAAAAAAAisthe32bitvectortoE*ˆbestoredintheVectortable.‚ForBT,AAAAAAAAisincrementedby2A*ˆforeachsuccessivevector.‚GapsinthevectornumbersindicateB*ˆdon'ttakeoverthevector.‚IfanETentryishitbeforeallthe@*ˆvectorshavebeeninitialized,therestofthevectorsarenot *ˆtakenover.*;*ˆExample:ƒRANGE,05,08,PROGINT1‡(addrofPROGINT1=$30100)-*“BYTWOS,$C,$F,TRAP3‰(addrofTRAP3=$40000)-*“VECTOR,$10,COMINTŠ(addrofCOMINT=$50000) *“ENDTABLE**“isstoredinVECTTBLas**“5241050800030100*“42540C0F00040000*“5645100000050000*“4554000000000000*6*“andindicatesthatvectors0-4aretobeleftalone,6*“vectors5-8aretobeinitializedto$30100,vectors7*“9-$Bareleftalone,vectors$C-$Fareinitializedto3*“$40000,$40002,$40004,and$40006,respectively,9*“vector$10istobeinitializedto$50000,andtherest$*“ofthevectortableisleftalone. :*“ThefirstlongwordofVECTTBLis!VCT,andthe2ndlong *“wordistheaddressofCOMINT.‰PAGE**ˆSETUPVECTORS*;VECTINIT‚MOVE.LESTART(PC),A2†STARTSEARCHATSTARTOFEXEC&ŠMOVE.L#'!VCT',D0‰D0=!VCTFORCOMPARE&ŠLEA„$200(A2),A0ˆENDOFSEARCHADDRESS-VECTSRCH‚CMP.L‚(A2)+,D0‹ISTHISVECTORTABLE?ŠBEQ.S‚VECTSETŒBRANCHIFFOUND%ŠSUB.L‚#2,A2ŽWANTTOCHECKEVERYWORD$ŠCMP.L‚A0,A2ŽSHOULDSEARCHCONTINUE?ŠBNE„VECTSRCH‹BRANCHIFYES&ŠBSR„KILL_INITŠNOVECTORTABLE--QUIT*B*ˆNOTE:‚Wecan'tusenewKILL.EXECT0macroheresinceTRAP0vector*hasnotbeeninitialized.*VECTSET:*ŠMOVE.L(A2)+,A4‹ADDRESSOFCOMINTROUTINE;ŠMOVE.LA4,VCTUBGN‰SAVECOMINTADDRESSFORVECTORUSETABLE +ŠMOVE.W(A2)+,D0‹GetfirstVECTTBLentry_ID&ŠCLR.L‚D5‘InitializeupperbytesofD5'ŠMOVE.B(A2)+,D5‹Getbeginningvector#/ŠMOVE.B(A2)+,D6‹Getendingvector#(maybe0) >*‰NowproceedthroughVECTTBLuntilhitend_of_tableindicator*  .ŠWHILE.W‚D0#'ET'‚AND.B‚D5#$FF‚DO.S #MOVE.L‚(A2)+,A5‡Getvectoraddress MOVE.L‚D5,D4ŠGetvector#inD40LSL.Lƒ#2,D4ŠVector-tableaddress=vector#*4'MOVE.L‚D4,A3ŠA3=Vector-tableaddress ,BSR.SƒVECTSTOR‡StorevectorinVector-tableC*ŒNowstorevectorsinVector-tableuntilhitendofuser-specified *Œrangeforthisvectoraddress. +WHILE.B‚D5D6‚AND.B‚D5#$FF‚DO.S $ADD.B‚#1,D5ˆIncrementvectornumber%MOVE.LD5,D4ˆGetvectornumberinD40LSL.L‚#2,D4ˆVector-tableaddress=vector#*4'MOVE.LD4,A3ˆA3=Vectortableaddress :*IfVECTTBLentryis"by_twos",thenweneedtoincrement*vectoraddressby2 IF.W‚D0#'BT'‚THEN.S “ADD.L‚#2,A5ENDI 0BSR.S‚VECTSTOR‰NowstorevectorinVector-tableENDW *MOVE.W‚(A2)+,D0‹GetnextVECTTBLentry-ID0MOVE.B‚(A2)+,D5‹Getnextstartingvectornumber.MOVE.B‚(A2)+,D6‹GetnextendingvectornumberŠENDW ŠBRA.S‚VECTDONEŒWearedone  *‰StorevectorinVector-table VECTSTOR:-*‰Don'tstorevectorifitisa"SKIP"entry.ŠIF.W‚D0#'SK'‚THEN.S,MOVE.LA5,(A3)ŒStorevectorinVector-tableŠENDIŠRTS VECTDONE:**/*‡SETBUSERROR--INCASEERROROCCURSININIT*+ŠPEA„GOTOKILR(PC)‡PUTERRORRETURNONSTACK)ŠMOVE.W#'BE',-(A7)ˆBUSERRORRETURNFLAGŠPAGE*J*‚InitializeSYSPARparametersforbackgroundandCALL_GUARDEDprocessing.*>ŠMOVE.L#0,BKG_HEADˆInitializebackgroundqueuetoempty:‚headDŠMOVE.L#BKG_HEAD,BKG_TAILptris0andtailptrpointstoheadptr.8ŠSF…BKG_ACTIVE‰InitializeACTIVEflagtofalsesincethe*§backgroundisn'trunning. *5*‚InitializeLAST_MMU_INT_LEVELtointerruptlevel0.*+ŠCLR„LAST_MMU_INT_LEVELSetthelevelto0.  *+*‡STARTPROCESSINGMEMORYPARTITIONENTRIES* ŠBSR„IMEM **†SETDEFAULTMEMORYTYPES*1ŠMOVE.BMEMTYPA(PC),ADEFTYPDEFAULTTYPEFORASQS1ŠMOVE.BMEMTYPT(PC),TDEFTYPDEFAULTTYPEFORTCBS9ŠMOVE.WMEMTYPS(PC),SDEFTYPDEFAULTTYPEFORSYSTEMTASKS7ŠMOVE.WMEMTYPU(PC),UDEFTYPDEFAULTTYPEFORUSERTASKS**ˆPUTTASKSONLISTS*,ŠMOVE.LTCBHEAD(PC),TCBHD‚POINTTOFIRSTTCB0ŠMOVE.LRDYHEAD(PC),READYHDPOINTTOFIRSTREADY * *ˆSEMAPHORES*,SEMS†LEA„SEMLIST,A1‰STARTOFEXECSEMAPHORES+INITSEMƒMOVE.W#1,(A1)ŒSETCOUNTFIELDTO1 ŠCLR.L‚2(A1)ŽCLEARADDRESSFIELD(ŠADD.L‚#6,A1ŽINCREMENTTONEXTSEMAPHORE$ŠCMP.L‚#SEMEND,A1‰ENDOFSEMAPHORES? ŠBLO.S‚INITSEMŒBRANCHBACKIFNO PAGE*1*ˆCREATETASKCONTROLBLOCKSFORROMBASEDSYSTEM*NNN*LOOKTCBƒTST.L‚TCBHDŽDOTCBSALREADYEXIST?%ŠBNE„BLDTCB99‹BRANCHIFYES-NOTROM'ŠCLR.L‚READYHDŒBESUREREADYHDISCLEAR4ŠLEA„ENDMEMT(PC),A3…STARTSEARCHATENDOFMEMTABLEŠLEA„$200(A3),A1ˆENDOFSEARCH,ŠMOVE.L#'!TCB',D0‰INITIALIZED0FORCOMPARE'LOOKT2„CMP.L‚(A3),D0ŒLOOKFORMINITCBSŠBEQ.S‚BLDTCBSŒBRANCHIFFOUND!ŠADD.L‚#2,A3ŽCHECKALLEVENBYTESŠCMP.L‚A3,A1ŽENDOFSEARCH?ŠBNE„LOOKT2LOOPBACK2ŠKILL.EXECT0ƒINITSA,NO_MTCBS_FOUND‚QUITIFNOTCBS*M*-------------------------------+ ------------------------------------ 08/20/85.BLDTCBSƒMOVE.BMTCBLPRI(A3),D4„TASKPRIORITIESŠLSL.W‚#8,D4ŽUSEPRIORITYTWICE/ŠMOVE.BMTCBLPRI(A3),D4„FORBOTHCURRANDLIMIT ŠSWAPƒD4‘PRIORITIESTOUPPER1/2'ŠMOVE.WMTCBATTR(A3),D4„TASKATTRIBUTES&ŠMOVE.LMTCBENTRY(A3),D5ƒENTRYADDRESS ŠCLR.L‚D6#ŠMOVE.WMTCBUSER(A3),D6„USERNUMBER,ŠMOVE.W#$8000,D7ŠOPTIONS-MONITORSUPPLIED1ŠMOVE.L#T0CRTCB,D0ˆDIRECTIVENUMBER-CREATETCBŠMOVE.LA3,-(A7)‹SAVEREGISTER-ŠLEA„4(A3),A3‹A3=ADDRESSOFPARAMETERBLOCKŠTRAPƒ#0‘EXECDIRECTIVE$ŠBRA.S‚BLDTCB2ŒBRANCHIFGOODRETURN3ŠMOVE.L(A7)+,A3‹RESTOREREGISTER‚-ERRORINTRAP0NNN<ŠKILL.EXECT0‚INITSA,CTCB_ROM_FAILED„QUITIFREQUESTREJECTED*(BLDTCB2ƒMOVE.L(A7)+,A3‹RESTOREREGISTERN*-------------------------------------------------------------------- 02/11/86:*ˆCoprocessorsupportforROMedtasks.‚Wecallthetrap#0?*ˆroutinetobuildtheXTCBforeachbitsetinthecoprocessor<*ˆflaginthemini-TCB.‚Wewilltestall8bitsintheflag.@*ˆThebitpositionintheflagisequivalenttothecoprocessor_?*ˆid.‚WeexpecttheusertowantRMStosupplythesave/restore9*ˆroutines(optionbit0=0),otherwisethetaskmustcall;*ˆCRXTCBasatrap#1.‚Iftheuserspecifiesauser-defined>*ˆcoprocessor_id,wegotokillerwithCXTCB_ROM_FAILEDerror.*!‰MOVEQ.Lƒ#0,D1Initializecounter‰REPEAT.ŠBTST…D1,MTCBCFLG(A3)…Isthecoprocessorused?)ŠIFTHEN.SYes,whenthebitisset.2‹MOVE.L‚D1,D7D7<--coprocessorid(bitposition)5‹MOVEQ.L#0,D6D6<--options(RMSsuppliesroutines)%‹MOVEM.LD1/A3,-(A7)‰Savetheseaway.9‹MOVE.L‚#T0CRXTCB,D0ˆCreatetheXTCBforthecoprocessor.‹TRAP„#0‹BRA.SƒBLDTCB1Goodreturn.$‹KILL.EXECT0INITSA,CXTCB_ROM_FAILEDNNN*BLDTCB1„MOVEM.L(A7)+,D1/A3‰Restorethese.ŠENDI+ŠADDQ.L‚#1,D1Checkforanothercoprocessor‰UNTIL.BƒD1#8E*--------------------------------------------------------------------#ŠMOVE.WMTCBSTATE(A3),D2ƒSTATEWORD#ŠMOVE.WD2,TCBSTATE(A5)„SAVEINTCB!ŠBTSTƒ#TSK2NRDY,D2‡ONREADYLIST?ŠBEQ.S‚BLDTCB3ŒBRANCHIFNO3ŠMOVE.LREADYHD,TCBREADY(A5)LINKTOPREVIOUSENTRY ŠMOVE.LA5,READYHD‰ADDNEWENTRY**ˆPUTTSTINFOINTOTCB*7BLDTCB3ƒLEA„MTSTATTR(A3),A1„STARTOFTSTATTRIBUTEINF+ O)ŠLEA„MTSTMMU(A3),A2…STARTOFTSTMMUINFO)ŠMOVE.L#SEGMENTS-1,D0…MAX#SEGMENTS-1ŠCLR.L‚D1‘CLEARFORCOUNT*BLDTCB4ƒTST.B‚TSTCTL(A1)‰TESTSEGMENTTYPE#ŠBEQ.S‚BLDTCB6ŒBRANCHIFNOSEGMENT$ŠADD.L‚#1,D1ŽCOUNTSEGMENTSEXISTING4BLDTCB6ƒLEA„TSTMLEN(A2),A2…INCREMENTTONEXTSEGMENT-ŠLEA„TSTALEN(A1),A1…INCREMENTTONEXTSEGMENT*ŠDBRAƒD0,BLDTCB4‰DECREMENTANDBRANCHBACK*)ŠLEA„MTSTMMU(A3),A3…STARTOFTSTMMUINFO(ŠMOVE.LTCBTST(A5),A4†ADDRESSOFNEWTST.ŠMOVE.BD1,TSTCSEGS(A4)„SAVEACTUAL#SEGMENTS,ŠLEA„TSTMMU(A4),A4†ADDRESSOFMMUWITHINTST:ŠMOVE.L#(TSTMLEN+TSTALEN)*SEGMENTS/2-1,D0‚#WORDSTOMOVENNN2BLDTCB8ƒMOVE.W(A3)+,(A4)+ˆMOVEMMUANDATTRIBUTESM*----------------------------------------------------------------------------(ŠDBRAƒD0,BLDTCB8‰CONTINUETILLALLMOVEDŠCMP.L‚#'!TCB',(A3)‡MORETCB'S?ŠBEQ„BLDTCBSŒBRANCHIFYESBLDTCB99 PAGE**ˆINITIALIZEMMU* ŠXREFƒINITMMU3ŠBSR„INITMMUŒINVOKECONFIGURATION-DEPENDENTROUTINE **‰ADDRESSSPACEPARAMETERS*$ŠMOVE.LPAGESIZE(PC),D0„GETPAGESIZE:ŠIF…THEN.S‰IfthepagesizespecifiedbytheSysgenis%MOVE.L#256,D0Œzero,defaultto256.ŠENDIƒ* ŠSUB.L‚#1,D0ŽNOTLAM=PAGESIZE-1$ŠMOVE.LD0,NOTLAMŠNOTLAMINTOSYSPAR-ŠMOVE.L#$FFFFFFFF,LAM…PREPARETOCOMPUTELAM$ŠSUB.L‚D0,LAMLAM=$FFFFFFFF-NOTLAM*ŠCLR.L‚ASNTBLSETFORNOASNTBLŠMOVE.LASN,D2ASNTBLDESIRED?ŠBEQ.S‚ASN99ŽBRANCHIFNO.ŠMOVE.L#2,A0Ž512BYTESFOR127ADDRESSSPACES(ŠMOVE.L#T0PAGAL,D0ˆPAGEALOCDIRECTIVE#ŠTRAPƒ#0‘EXECCALL"ŠBRA.S‚ASN10ŽBRANCHIFGOODRETURN7ŠKILL.EXECT0ƒINITSA,PA_ASN_FAILED„CRASHIFERRORRETURN4ASN10…MOVE.LA0,ASNTBLŠSAVEASNTBLADDRESSINSYSPAR/ŠBSR„TBLCLRCLEARADDRESSSPACETABLETOZEROESŠMOVE.L#'!ASN',(A0)‡EYECATCHERASN996ŠMOVE.B#$FF,CURR_ASN†RESETCURR_ASNMEMORYCOMPONENT. **ˆBUILDGLOBALSEGMENTTABLE*NNNABLDGST„CLR.L‚GSTBEG‹SETSYSPARADDRESSTO0INCASENOGSTNEEDEDŠMOVE.LGSTSIZ(PC),D2†NEEDGST?ŠBEQ.S‚BLDUSTBRANCHIFNO)ŠMOVE.LD2,A0ŽPUTSIZEINA0FORPAGEALOC(ŠMOVE.L#T0PAGAL,D0ˆPAGEALOC‚DIRECTIVE#ŠTRAPƒ#0‘EXECCALL%ŠBRA.S‚BLDGST01‹BRANCHIFGOODRETURN7ŠKILL.EXECT0ƒINITSA,PA_GST_FAILEDƒCRASHIFERRORRETURN3BLDGST01‚MOVE.LA0,GSTBEGŠSAVEGSTADDRESSFOREXECŠBSR„TBLCLRCLEARGSTTOZEROESŠMOVE.L#'!GST',(A0)‡EYECATCHER-ŠMOVE.W#1,GSTNSEG(A0)…NUMBEROFGSTSEGMENTS)ŠMOVE., WD2,GSTNPAGE(A0)„GSTLENGTHTOGSTŠLSL.L‚#8,D2ŽLENGTHINBYTES2ŠSUB.L‚#GSTENTRY,D2‡SUBTRACTLENGTHOFHEADERINFO&ŠDIVUƒ#GSTEL,D2ŠDIVIDEBYENTRYLENGTH-ŠMOVE.WD2,GSTMENT(A0)…SAVEMAXIMUM#ENTRIES)ŠLEA„GSTENTRY(A0),A2„ADDRESSOF1STENTRY%ŠMOVE.LA2,GSTFENT(A0)…SAVEINHEADER PAGE**ˆBUILDUSERSEMAPHORETABLE*9BLDUST„CLR.L‚USTBEGCLEARUSTADDRESSINCASENONENEEDEDŠMOVE.LUSTSIZ(PC),D2†NEEDUST?ŠBEQ.S‚BLDVTUBRANCHIFNO(ŠMOVE.LD2,A0ŽPUTSIZEINA0FORPAGALOC,ŠMOVE.L#T0PAGAL,D0ˆDIRECTIVE#FORPAGEALOCŠTRAPƒ#0‘EXECCALL%ŠBRA.S‚BLDUST01‹BRANCHIFGOODRETURN4ŠKILL.EXECT0‚INITSA,PA_UST_FAILED‚CRASHIFNOMEMORY3BLDUST01‚MOVE.LA0,USTBEGŠSAVEUSTADDRESSFOREXECŠBSR„TBLCLRCLEARUSTTOZEROES*ŠMOVE.L#'!UST',UST(A0)„EYECATCHERTOUST)ŠMOVE.W#1,USTNSEG(A0)…ONLY1USTSEGMENT(ŠMOVE.WD2,USTNPAGE(A0)„#PAGESINTABLE#ŠLSL.L‚#8,D2ŽCONVERTPAGESTOBYTES(ŠSUB.L‚#USTENTRY,D2‡SUBRTACTHEADERSIZE&ŠDIVUƒ#USTEL,D2ŠDIVIDEBYENTRYLENGTH-ŠMOVE.WD2,USTMENT(A0)…SAVEMAXIMUM#ENTRIES(ŠLEA„USTENTRY(A0),A2„FIRSTENTRYADDRESS(ŠMOVE.LA2,USTFENT(A0)…SAVEITINHEADER **ˆBUILDVECTORUSETABLE*+BLDVTU„MOVE.L#1,A0ŽSIZEISALWAYSONEPAGE,ŠMOVE.L#T0PAGAL,D0ˆDIRECTIVE#FORPAGEALOCŠTRAPƒ#0‘EXECCALL%ŠBRA.S‚BLDVTU01‹BRANCHIFGOODRETURN:ŠKILL.EXECT0‚INITSA,PA_VTU_FAILED„CRASHIFNOMEMORYFOUNDTHEN.SŒBRANCHIFNO#MOVE.L#1,D2‹PATminimumsizeis1ŠENDI)ŠMOVE.LD2,A0ŽPUTSIZEINA0FORPAGEALOC(ŠMOVE.L#T0PAGAL,D0ˆPAGEALOC‚DIRECTIVE#ŠTRAPƒ#0‘EXECCALL%ŠBRA.S‚BLDPAT01‹BRANCHIFGOODRETURN7ŠKILL.EXECT0ƒINITSA,PA_PAT_FAILED…CRASHIFERRORRETURN3BLDPAT01‚MOVE.LA0,PATBEGŠSAVEPATADDRESSFOREXECŠBSR„TBLCLRCLEARPATTOZEROESŠMOVE.L#'!PAT',(A0)‡EYECATCHER#ŠLSL.W‚#8,D2ŽCONVERTPAGESTOBYTES&ŠMOVE.LD2,PATTSIZ(A0)…SAVETABLESIZEŠLEA„0(A0,D2),A2ˆTOPOFTABLE)ŠLEA„PATENTRY(A0),A1„ADDRESSOF1STENTRYŠLEA„PATFHDR-PATNEXT(A0),A4:BLDPAT04‚MOVE.LA1,PATNEXT(A4)…SAVEENTRYADDRESSINCHAIN)ŠMOVE.L#-1,PATTCB(A1)…FLAGENTRYASFREE(ŠMOVE.LA1,A4ŽSAVECURRENTENTRYADDRESS%ŠLEA„PATEL(A1),A1‡POSSIBLENEXTENTRY#ŠLEA„PATEL(A1),A3‡POINTBEYONDNEXTŠCMP.L‚A3,A2ŽWILLITFIT?#ŠBCC„BLDPAT04‹YES,GOINITIALIZEIT PAGEE*InserttwodummyentriesintothePATlist.‚TheseentrieswillhaveG*ƒthemaximumpossibledeltaandwillcauseandexecproceduretofire.F*ƒThecodefortheexecprocedureiscontainedintheRMS.SAmoduleofE*ƒRMS68K.‚ThesenodesareplacedonthePATsothatth, ePATlistwillE*ƒneverbeempty,simplifyingPATprocessinginmanyplaces.‚WhentheG*ƒPATnodefires,theassociatedcodeintheRMS.SAmodulegetscontrolG*ƒandthiscodesimplyplacesadummyPATnode(liketheonethatfiredE*ƒtogetushere)attheveryendofthePATlist.‚ThisschedulingofI*ƒthedummyPATnodeisaspecialcaseinthatitdoesnotusethenormal/*ƒPATnodescheduleroutinePAT_SCHED_NEW_NODE. #'DUMY'DO.S LEA‚2(A3),A3ŠENDW ŠLEA„4(A3),A3$*£A3nowcontainstheaddressofthe"*£execcodetoreschedulethenode"ŠBSR.S‚BLDPAT12‹Buildadummynode;ŠMOVE.LA4,PATHDR(A0)†LinkthedummynodeintothePATlist4ŠMOVE.LA4,A2ŽSaveaddrofthisnodeforfuturelink1ŠBSR.S‚BLDPAT12‹Buildanidentical2nddummynode/ŠMOVE.LA4,PATNEXT(A2)…Link2ndnodebehind1stŠMOVE.L#PATBIGDELTA,NSE>ŠMOVE.L#PATBIGDELTA,TIME_LEFTMakeTIME_LEFTasbigaswecanŠCLR.L‚MIDNIGHT.ŠBRA.S‚BLDUDRDonewithPATstuffalltogether*$* Subroutine to build dummy PAT node:BLDPAT12‚MOVE.LPATFHDR(A0),A4…A4pointstofreePATentry@ŠMOVE.LPATNEXT(A4),PATFHDR(A0)Unlinkthisentryfromfreelist*£InitializePATentriesŠCLR.L‚PATNEXT(A4)$ŠCLR.L‚PATTCB(A4)‰Indicateexecnode5ŠMOVE.L#PATBIGDELTA,PATDELTA(A4)MakedeltaverybigŠCLR.L‚PATINTV(A4)'ŠMOVE.LA3,PATASR(A4)†Executionaddress(ŠCLR.W‚PATOPT(A4)‰Options-notperiodic4ŠMOVE.L#PATDUMMYID,PATARID(A4)PluginthedummyID4ŠMOVE.W#$FFFF-$0700,PATILVL(A4)Interruptlevel=0ŠRTS PAGE*$*ˆBUILDUSERDEFINEDDIRECTIVETABLE*9BLDUDR„CLR.L‚UDRBEGCLEARUDRADDRESSINCASENONENEEDEDŠMOVE.LUDRSIZ(PC),D2†NEEDUDR?ŠBEQ.S‚BLDTRACŒBRANCHIFNO(ŠMOVE.LD2,A0ŽPUTSIZEINA0FORPAGALOC,ŠMOVE.L#T0PAGAL,D0ˆDIRECTIVE#FORPAGEALOCŠTRAPƒ#0‘EXECCALL%ŠBRA.S‚BLDUDR01‹BRANCHIFGOODRETURN4ŠKILL.EXECT0‚INITSA,PA_UDR_FAILEDƒCRASHIFNOMEMORY3BLDUDR01‚MOVE.LA0,UDRBEGŠSAVEUSTADDRESSFOREXECŠBSR„TBLCLRCLEARUSTTOZEROES*ŠMOVE.L#'!UDR',UDR(A0)„EYECATCHERTOUDR#ŠLSL.L‚#8,D2ŽCONVERTPAGESTOBYTES(ŠSUB.L‚#UDRENTRY,D2‡SUBRTACTHEADERSIZE(ŠDIVUƒ#UDRESIZ,D2ˆDIVIDEBYENTRYLENGTH,ŠMOVE.WD2,UDRCNT(A0)†SAVEMAXIMUM#ENTRIES **ˆBUILD‚TRACETABLE*DBLDTRACƒCLR.L‚TRACEBEG‰CLEARSYSPARADDRESSINCASETRACENOTNEEDED'ŠMOVE.LTRCSIZ(PC),D2†NEEDTRACETABLE?ŠBEQ.S‚BLDTIATŒBRANCHIFNO)ŠMOVE.LD2,A0ŽPUTSIZEINA0FORPAGEALOC(ŠMOVE.L#T0PAGAL,D0ˆPAGEALOCDIRECTIVE#ŠTRAPƒ#0‘EXECCALL%ŠBRA.S‚BLDTRC01‹BRANCHIFGOODRETURN4ŠKILL.EXECT0‚INITSA,PA_TRC_FAILEDƒCRASHIFNOMEMORY1BLDTRC01‚MOVE.LA0,TRACEBEGˆSAVEADDRESSFOREXEC'ŠBSR„TBLCLRCLEARTRACETABLETOZEROES+ŠLEA„TRCENTRS(A0),A2„ADDRESSOFFIRSTENTRYŠMOVE.LA2,(A0)ŒSAVEINHEADER#ŠLSL.L‚#8,D2ŽCONVERTBYTESTOPAGES(ŠSUB.L‚#TRCENTRS,D2‡SUBTRACTHEADERSIZE'ŠDIVUƒ#TRCENTSZ,D2‡DIVIDEBYENTRYSIZE)ŠMULUƒ#TRCENTSZ,D2‡MULTIPLYBYENTRYSIZE$ŠADD.L‚A2,D2ŽADDENTRYSTARTADDRESS4ŠMOVE.LD2,TRCLNG(A0)†SAVEENDADDRESSOFLASTENTRY*,ŠMOVE.WTRCFLAG(PC),TRACFLAGSETTRACEFLAGS *#*ˆTRAPINSTRUCTIONASSIGNMENTTABLE*>BLDTIATƒMOVE.L#$01010000,TIAT„SETTRAP0AND1'USEDBYEXEC'ŠPAGE*0*…INITIALIZECONFIGURATION-DEPENDENTI/ODEVICES* ŠXREFƒINITIO)ŠBSR„INITIOSUBROUTINEWILLINITIALIZEIO * *ˆSTARTTIMER* ŠXREFƒTIMERST3ŠBSR„TIMERSTŒINVOKECONFIGURATION-DEPENDENTROUTINE *(*ˆINDICATESYSTEMRUNNINGONFRONTPANEL*-FPGO†MOVE.LEXCSTACK,A7ˆRESTORESTACKPOINTER)ŠMOVE.W#$C0,D1ŒWANT'C0'INPANELLIGHTS4ŠBSR.S‚PANELEDE‹SETLIGHTS-ENABLEREADY/FAILLIGHT**‰GOTOEXEC-INITCOMPLETE*‰BRA.L…INITEND‰PAGE**ƒGOTOREGULARKILLERROUTINE* GOTOKILR:4‰KILL.EXECT0‚INITSA,BERR_UNEXPECTEDƒCrashthesystem *- NNNNNN-*ƒSPECIALKILLERROUTINE--ERRORDURINGINIT*"KILL_INITPEA„(A6)SAVEREGISTER6 ŠLEA„CRASHSAV,A6ˆCRASHSAVEAREA/ŠMOVE.W#0001,(A6)‰Indicateexeccrashedsystem!ŠMOVE.B#INITSA,2(A6)†Modulecode&ŠMOVE.B#NO_VCT_FOUND,3(A6)Errorcode(ŠMOVE.L4(A7),8(A6)‰SAVEPROGRAMCOUNTER&ŠMOVE.WSR,14(A6)‹SAVESTATUSREGISTER0ŠDISABLE_INTERRUPTSˆBESUREINTERRUPTSINHIBITED!ŠLEAƒ20(A6),A6‹REGISTERSAVEAREA-ŠMOVEM.LD0-D7/A0-A5,(A6)‚SAVEMOSTREGISTERS$ŠMOVE.L(A7)+,56(A6)‡SAVEREGISTER6$ŠMOVE.LA7,60(A6)ŠSAVESTACKPOINTER'KILLOOPƒMOVE.W#$A2,D1ŒWANT'A2'INLED/ŠBSR.S‚PANELEDE‹PUTITTHERE-ALLOWFAILLIGHT4ŠBRA„KILLOOPŒLOOP-WAITFORSOMEONETODOSOMETHING * *ˆTABLECLEAR*'TBLCLR„MOVE.LD2,D6ŽGETLENGTHINPAGESŠLSL.L‚#8,D6ŽLENGTHINBYTES!TBLCLRBƒMOVE.LD6,A6ŽLENGTHINA6ŠADD.L‚A0,A6ŽEND+1INA6$ŠCLR.L‚D6‘THEZEROTHATGET'SSTORED&TBLCLRLƒMOVE.LD6,-(A6)‹STOREONEWORDŠCMP.L‚A0,A6ŽDONE?&ŠBHI.S‚TBLCLRLŒBRANCHBACKIFNOTDONEŠRTS—GOBACKWHENDONEŠPAGE*#*ƒPANELEDE--ENABLE‚TTO--SETLED$*ƒPANELEDD--DISABLETTO--SETLED*-PANELEDE‚MOVE.W#$10,D0ŒCLEARDISABLETTOBIT&ŠBRA.S‚PANELD2ŒSKIPAROUNDOTHERENTRY+PANELEDD‚MOVE.W#$90,D0ŒSETƒDISABLETTOBIT*PANELD2ƒNOT.B‚D1‘USECOMPLEMENTTOSETLEDŠROR.L‚#4,D1ŽSEPARATEDIGITSŠOR.BƒD1,D0ŽPUTMSDIND0ŠMOVE.W#$02,D1Œ'SETLSD'FLAGŠROL.L‚#4,D1ŽLSDIND1!ŠMOVE.LPANEL,A1‹ADDRESSOFPANEL'ŠLEA„FPLEDST(A1),A1…LEDSTATUSREGISTER+ŠMOVE.WD1,(A1)ŒSETLEASTSIGNIFICANTDIGITŠOR.Wƒ#$30,D1ŒSETLATCHBITSŠMOVE.WD1,(A1)ŒLATCHIT*ŠMOVE.WD0,(A1)ŒSETMOSTSIGNIFICANTDIGITŠOR.Wƒ#$30,D0ŒSETLATCHBITSŠMOVE.WD0,(A1)ŒLATCHITŠRTS N‰NOLIST* **‚INCLUDEDFILES:* **ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.KILL.MC*ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.TRAP15.MC*ˆINCLUDEƒ9999.&.KILLEXEC.EQ*‰NOLIST‰INCLUDEƒ9995.&.KILL.MC‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TCB.EQ‰INCLUDEƒ9995.&.TRAP15.MC‰INCLUDEƒ9999.&.KILLEXEC.EQ‰PAGE‰LIST‰SPCƒ1HKILLERƒIDNT‚45,0„M68XXX-SAVETHECRASHINFO.ANDBRINGTHESYSTEMDOWN‰SPC1O**********************************************- ***********************************ˆ9999.M68XXX.KILLER.SA**ˆThesystemhascrashed:7*‹1.SavetheprocessorregistersintheCRASHSAVarea.?*‹2.FormatinformationaboutthecrashintotheCRASHSAVarea.,*‹3.Turnonboardspecificfailindicators.?*‹4.Outputa'SYSTEMCRASHED'messagetotheconsoleusingthe0*Žfirmwaredebugger'sTRAP#15I/Ocapabilities.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*<*ˆEntry:„7differententrypoints,eachwiththeirownentry3*’conditions,asspecifiedbeforeeachentrypoint.*1*ˆCalls:FirmwaredebuggerTRAP#15I/Oroutines.**ˆExit:‚Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------C*ˆ04/01/86‚JulieHoban„ChangedorderofdisplayeditemsinCRASHSAVNN¦4¯·N¿NÇPÏA×=ß'ç<ï1.*¡andmovedoutputmessageroutinestodevice-$*¡dependentmodulesforallsystems.(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 ‰OPT…CL ‰SECTIONLEVEL00*‰XDEF„KILLEROLDENTRYPOINT‰XDEF„KILLERT0ŽOLDENTRYPOINT5‰XDEF„ABORT_KILLŒCriticaltaskhasabortedviaABORTC9‰XDEF„ACCESS_KILL‹BadBusErrororAddressErrorinExec.9‰XDEF„DRIVER_KILL‹Driverhascrashedsystem-TRAP#‚ent.8‰XDEF„SBDRIVER_KILL‰SubroutineinterfaceforKILL_DRIVERB‰XDEF„EXCEPT_KILLƒBadsupervisormodeexception(zerodivide,etc.)(‰XDEF„EXEC_KILLExechascrashedsystem.NNNNN9‰XDEF„EXECT0_KILL‹Exechascrashedsystem-TRAP#0entry ‰XDEF„TRAP0_KILLŒBadTRAP0call.6‰XDEF„VECTOR_KILL‹VectoreddirectlyherefromVECTTBL. 9‰XREF.S‚BUGTRP15ŽSysparvariable-TRAP#15routineaddr.‰XREF„CRASHSAV ‰XREF.S‚PANEL‰XREF„PR. OGINT8‰XREF„RESVCT23>‰XREF.S‚TRP15TYPˆSysparvariable-TypeofTRAP#15I/Oavail. *ˆEQUATES EXEC…EQU‡1CRITICALEQU‡2 VECTORƒEQU‡3 EXCEPTƒEQU‡4 ACCESSƒEQU‡5 DRIVERƒEQU‡6*9T15IO„EQU‡0‰SETIFPRIMARYTRAP#15I/OSUPPORTAVAILABLE=ALT15IO‚EQU‡2‰SETIFALTERNATETRAP#15I/OSUPPORTAVAILABLECR‡EQU‡$0D‡Carriagereturn1STRTCRSHEQU‡20ˆLengthoffirstpartofCRASHSAV. *ˆMessages /MSGCRASH„DC.BƒCR,'SYSTEMCRASHED…CRASHSAVAT‚$' ENDCRASH„DS…0 MSGBLANK„DC.BƒCR,'' ENDBLANK„DS…0  ‰PAGE* *ƒEXEC_KILL#*ƒEXECT0_KILL-TRAP#0ENTRYPOINT1*‰Anexecmodulehasdecidedtocrashthesystem.*;*ˆCalledFrom:‚AnyExecroutinewhichcancrashthesystem.**ˆEntryConditions:6*’(A7)†Pointsto2byteerrorcode-sourceandreason*œforthecrash.*!*ˆRegisterusage:…01234567*™D‚* *™A‚*‡PƒP**™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed* !*’TheEXEChascrashedthesystem EXECT0_KILL: EXEC_KILL:/‰MOVEM.LD0-D7/A0-A7,CRASHSAV+20‚Saveregisters"‰MOVE.W„SR,D0’Savestatusregister$‰OR.W„#$700,SR‘STOPOTHERINTERRUPTS F*ƒNOTE:‚IfwearriveherefromaTRAP#0,theSRwillhavethecorrect0*Šinterruptmask,butincorrectconditioncodes. .‰MOVE.L„#STRTCRSH,D1‹Numberofbytestoclear.-‰LEA‡CRASHSAV,A0ŒAddresstostartclearingat0‰BSR‡CLRAREAClear1st20bytesofCRASHSAVarea 2‰MOVE.W„#EXEC,CRASHSAV‰IndicateformatofCRASHSAV6‰MOVE.W„D0,CRASHSAV+6ŠSavestatusregisterinCRASHSAV 4‰MOVE.L„(A7),A0StackedPCpointstoSource&Reason7‰MOVE.W„(A0),CRASHSAV+2ˆSaveReasonandSourceofcrash‰MOVE.L„A0,CRASHSAV+8ŠSavePC.!‰BRA‡KILLER2Branchtonextpiece‰PAGE *ˆABORT_KILL7*ˆAcriticaltaskhasabortedviatheABORTCdirective.**ˆCalledfrom:‚ABORTC**ˆEntryConditions:**’A4=parameterblockaddress*’A6=requester'sTCBaddress**ˆParameterBlock:1*’2(A4)‚Abortcode-moduleandreasonforcrash.*’4(A4)‚Taskdefinedfield. !*ˆRegisterusage:…01234567*™D‚**™AŠPƒP**™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed* ABORT_KILL:/‰MOVEM.LD0-D7/A0-A7,CRASHSAV+20‚Saveregisters$‰OR.W„#$700,SR‘STOPOTHERINTERRUPTS .‰MOVE.L„#STRTCRSH,D1‹Numberofbytestoclear.-‰LEA‡CRASHSAV,A0ŒAddresstostartclearingat0‰BSR‡CLRAREAClear1st20bytesofCRASHSAVarea 6‰MOVE.W„#CRITICAL,CRASHSAV…IndicateformatofCRASHSAV 6‰MOVE.W„2(A4),CRASHSAV+2‡SaveSource&ReasonofCrash8‰MOVE.L„TCBNAME(A6),CRASHSAV+4SaveTasknameinCRASHSAV5‰MOVE.L„10(A7),CRASHSAV+8†SavestackedPCinCRASHSAV;‰MOVE.L„TCBSESSN(A6),CRASHSAV+12SaveSession#inCRASHSAV=‰MOVE.L„4(A4),CRASHSAV+16†SavetaskdefinedfieldinCRASHSAV !‰BRA‡KILLER2Branchtonextpiece‰PAGE *„VECTOR_KILL>*ˆWehadabadexceptionthatvectoreddirectlytothispoint.*4*ˆCalledFrom:‚Vectoreddirectlyhere-seeVECTTBL.**ˆEntryConditions:*’(A7)‚Exceptionstackframe.*!*ˆRegisterusage:…01234567*™D‚**™AŒ****™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed*>*ˆWehadabadexceptionthatvectoreddirectlytothispoint. VECTOR_KILL:/‰MOVEM.LD0-D7/A0-A7,CRASHSAV+20‚Saveregisters$‰OR.W„#$700,SR‘STOPOTHERINTERRUPTS .‰MOVE.L„#STRTCRSH,D1‹Numberofbytestoclear.-‰LEA‡CRASHSAV,A0ŒAddresstostartclearingat0‰BSR‡CLRAREAClear1st20bytesofCRASHSAVarea 4‰MOVE.W„#VECTOR,CRASHSAV‡IndicateformatofCRASHSAV ,‰MOVE.W„(A7)+,CRASHSAV+6‡SaveSRinCRASHSAV,‰MOVE.L„(A7)+,CRASHSAV+8‡SavePCinCRASHSAV *ˆ68000doesn'tstackaVOR. ‰IFNE†CHIPTYPE-68000"ŒMOVE.W„(A7)+,CRASHSAV+12ƒSaveVOR‰ENDC !‰BRA‡KILLER2Branchtonextpiece ‰PAGE *ƒEXCEPT_KILL#*‰BadexceptioninSupervisorMode.**ˆCalledFrom:ƒEXCEPT.**ˆEntryConditions:&*‘4(A7)†Secondaryvectortableaddress3*‘8(A7)†VORfor1stentryinsecondaryvectortable3. *10(A7)†ReturnPCfromsecondaryvectortableBSR.*14(A7)†StackedSR*16(A7)†StackedPC*!*ˆRegisterusage:…01234567 *™D‚****™A‚***™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed*,*ˆWehadabadexceptioninsupervisormode. EXCEPT_KILL:/‰MOVEM.LD0-D7/A0-A7,CRASHSAV+20‚Saveregisters$‰OR.W„#$700,SR‘STOPOTHERINTERRUPTS .‰MOVE.L„#STRTCRSH,D1‹Numberofbytestoclear.-‰LEA‡CRASHSAV,A0ŒAddresstostartclearingat0‰BSR‡CLRAREAClear1st20bytesofCRASHSAVarea 4‰MOVE.W„#EXCEPT,CRASHSAV‡IndicateformatofCRASHSAV -‰MOVE.W„14(A7),CRASHSAV+6†SaveSRinCRASHSAV-‰MOVE.L„16(A7),CRASHSAV+8†SavePCinCRASHSAV 4‰MOVE.L„4(A7),A0Addressofstartofexceptiontable1‰MOVE.W„8(A7),D1Vectoroffsetforfirstentryin*©exceptiontable.6‰MOVE.L„10(A7),D0ŽGetstackedPCfromsecondaryvector*©table. ‰BSR‡CALCVORCalculateVOR. 3‰MOVE.W„D0,CRASHSAV+12‰SavepseudoVORinCRASHSAV. !‰BRA‡KILLER2Branchtonextpiece‰PAGE *ƒACCESS_KILL*=*ˆWehadabadBusErrororAddressErrorinSupervisorMode.**ˆCalledFrom:ˆEXCEPT.**ˆEntryConditions:&*‘4(A7)†Secondaryvectortableaddress8*‘8(A7)†VORforthe1stentrythesecondaryvectortable8*10(A7)†ReturnaddressfromsecondaryvectortableBSR..*14(A7)-27(A7)‚68000BusErrorstackframe.*!*ˆRegisterusage:…01234567 *™D‚*** *™A‚**‡****™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed*3*ˆBadBusErrororAddresserrorinSupervisormode ACCESS_KILL:/‰MOVEM.LD0-D7/A0-A7,CRASHSAV+20‚Saveregisters$‰OR.W„#$700,SR‘STOPOTHERINTERRUPTS .‰MOVE.L„#STRTCRSH,D1‹Numberofbytestoclear.-‰LEA‡CRASHSAV,A0ŒAddresstostartclearingat0‰BSR‡CLRAREAClear1st20bytesofCRASHSAVarea 4‰MOVE.W„#ACCESS,CRASHSAV‡IndicateformatofCRASHSAV 2‰MOVE.Wƒ14(A7),CRASHSAV+2‡SaveFunctionCode,etc..‰MOVE.Lƒ16(A7),CRASHSAV+16†SaveAccessAddress*‰MOVE.Lƒ20(A7),CRASHSAV+4‡SaveOpcode&SR9‰MOVE.Lƒ24(A7),CRASHSAV+8‡SavePCwhenexceptionoccurred 4‰MOVE.L„4(A7),A0Addressofstartofexceptiontable5‰MOVE.W„8(A7),D1Vectoroffsetof1stentryintable.7‰MOVE.Lƒ10(A7),D0Returnaddressfrom2ndvectortable. ‰BSR‡CALCVORGocalculateVOR. =‰MOVE.W„#'BE',CRASHSAV+16†PutBusErrorindicatorinCRASHSAV=‰IF.WˆD0#8ƒTHEN.S‚IfVOR<>8thenmustbeAddressErr.ŒMOVE.W„#'AE',CRASHSAV+12‰ENDI #‰BRA.S…KILLER2Branchtonextpiece‰PAGE *„DRIVER_KILL*„SBDRIVER_KILL***ˆAdriverhasdoneaTRAP#0KILLERcall.*'*ˆCalledFrom:ˆSupervisorModedrivers.**ˆEntryConditions:1*’(A7)†StackedPCfromTRAP#0orBSR-pointsto1*œ2byteerrorcode,sourceandreasonforcrash.*‘4(A7)†CCBaddress*‘8(A7)†Driver-definedfield*!*ˆRegisterusage:…01234567*™D‚* *™A‚**‡****™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed***ˆAdriverhasdoneaTRAP#0KILLERcall. DRIVER_KILL:SBDRIVER_KILL:/‰MOVEM.LD0-D7/A0-A7,CRASHSAV+20‚Saveregisters "‰MOVE.W„SR,D0’SavestatusregisterB*ˆNote-TheConditionCodeswillnotbeaccurateinthesavedSR,<*ˆbuttheSupervisorbitandinterruptmaskwillbecorrect. .‰MOVE.L„#STRTCRSH,D1‹Numberofbytestoclear.-‰LEA‡CRASHSAV,A0ŒAddresstostartclearingat0‰BSR‡CLRAREAClear1st20bytesofCRASHSAVarea 6‰MOVE.W„D0,CRASHSAV+6ŠSavestatusregisterinCRASHSAV 4‰MOVE.W„#DRIVER,CRASHSAV‡IndicateformatofCRASHSAV $‰OR.W„#$700,SR‘STOPOTHERINTERRUPTS !‰MOVE.L„(A7)+,A0PopPCoffstack5‰MOVE.W„(A0),CRASHSAV+2ˆSaveSource&ReasonofCrash)‰MOVE.L„A0,CRASHSAV+8ŠSavePCinCRASHSAV6‰MOVE.L„(A7)+,CRASHSAV+12†SaveCCBAddressinCRASHSAV3‰MOVE.L„(A7)+,CRASHSAV+16†SaveDriver-Definedinfo. #‰BRA.S…KILLER2Branchtonextpiece‰P/ AGE* *ƒTRAP0_KILL*#*ˆAbadTRAP#0callhasbeenmade.*$*ˆCalledFrom:ˆSupervisorModecode.**ˆEntryConditions:*’(A7)†StackedPCfromTRAP#0*!*ˆRegisterusage:…01234567*™D‚**™A**™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed**ˆAbadTRAP#0callwasmade.**E*ˆWecomeherefromtheTRAP0module.‚SomeonehasdoneaTRAP#0withD*ˆadirectivenumberthatpointshere.‚WewouldliketojustusetheE*ˆKILL.EXECmacrocalltogettotheEXEC_KILLentrypointinKILLER,B*ˆbuttheKILL.EXECmacrodoesanXREFofEXEC_KILLsowemanually;*ˆdotheequivalentoftheKILL.EXEChere.‚NotethatthePCA*ˆthatwillendupinCRASHSAVwillbethePChere,notthePCinB*ˆtheTRAP0module.‚Thiswillhavetobedocumentedasthereisno@*ˆgoodwayaroundtheproblemwithouttotallyre-structuringthe*ˆTRAP0mechanism. TRAP0_KILL:0‰BSR.LƒEXEC_KILLCallKILLER-EXECentrypoint.'‰DC.B„TRAP0SAModulethatcalledKILLER+‰DC.B„TRAP0_BAD_NUMBER†Reasonforthecrash‰PAGE*‚KILLER *‚KILLERT0/*ˆSomebodyhasusedtheoldKILLERentrypoint.*$*ˆCalledFrom:ƒThirdpartysoftware?**ˆEntryConditions:#*’(A7)†ReturnPCfromBSRtoKILLER*!*ˆRegisterusage:…01234567*™D‚* *™A‚**‡****™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed*N 4*ˆOLDENTRYPOINT-KEEPFORBACKWARDSCOMPATABILITY KILLERT0:KILLER: ‰MOVEM.LD0-D7/A0-A7,CRASHSAV+20 "‰MOVE.W„SR,D0’Savestatusregister .‰MOVE.L„#STRTCRSH,D1‹Numberofbytestoclear.-‰LEA‡CRASHSAV,A0ŒAddresstostartclearingat0‰BSR‡CLRAREAClear1st20bytesofCRASHSAVarea 8‰MOVE.W„D0,CRASHSAV+14‰SavestatusregisterinCRASHSAV. 6‰MOVE.L‚#'OLDF',CRASHSAV‰IndicateoldCRASHSAVformat. $‰OR.W„#$700,SR‘STOPOTHERINTERRUPTS (‰MOVE.L‚(A7),CRASHSAV+8ŠSAVEPCOFCRASH !*ˆNowfallthroughtonextpiece. ‰PAGEKILLER2: *-*ˆSaverestofregistersandmaskinterrupts.* ‰MOVE„USP,A1‰MOVE.L‚A1,CRASHSAV+84‹SAVEUSP 6‰LEA…CRASHSAV,A0ŽPutaddressofCRASHSAVinA0tohelp *©theuser. *<*ˆNowbranchtodevice-dependentroutinetoturnonfaillt.*ˆandoutputflashingmessage.*-‰BRA.LƒKILLER3’Nowdoboard-specificstuff...NNNN‰PAGE* *ˆCLRAREA*?*ˆClearthespecifiednumberofbytesatthespecifiedaddress.*5*ˆENTRY:„D1=numberofbytestoclear(Mustbe>=0)$*’A0=Addresstostartclearingat.* CLRAREA: (‰SUB.Lƒ#1,D1‘AdjustforDBRAinstruction/ +‰BMI.SƒCLRDONEIfD1was0comingin,exit.$CLRLOOP‚MOVE.B‚#0,(A0)+ŽClearabyte'‰DBRA„D1,CLRLOOPŒDone?-branchifnot. CLRDONE‚RTS‰PAGE* *ˆCALCVORB*ˆNowwecalculatetheVOR.‚Theformulaforexceptionsthatarein)*ˆorderinthesecondaryvectortableis:D*ˆVOR=2*[(stackedPC-2)-addr(startoftable)]+VOR(1stentry)G*ˆForexceptionsthatarenotinorderinthevectortable,theformula*ˆis:H*ˆVOR=2*[((stackedPC-2)+offset)-addr(startoftable)]+VOR(1st@*ˆentry)†Whereoffset=thenumberofbytesthatwereskippedin6*”thesecondaryvectortablebetweenthelastin-order+*”vectorandthefirstout-of-ordervector.*F*ˆENTRYCONDITIONS:‚D0containsPCstackedfromsecondaryvectortable*žBSR.2*›A0containsaddressofstartofsecondaryvector*žtable.0*›D1containstheVORforthefirstentryinthe*žsecondaryvectortable.**ˆDESTROYS:ŠD2 CALCVOR:0‰SUB.L…#2,D0’D0nowpointstoentryinsecondary*©vectortablethatwastaken. +‰IF.W‚D1#8ƒTHEN.SˆIfPROGINTtable...3ŒLEA‡PROGINT8,A1‰Addressoflastin-ordersecondary*©vectortableentry.‰ELSE.S ,ŒIF.W‚D1#$30‚THEN.S„IfRESVCTtable... 3ŽLEA‡RESVCT23,A1‰Addressoflastin-ordersecondary*©vectortableentry.ŒELSE.SŽBRA.SƒKILLRVORŒENDI‰ENDI .‰CMP.L…A1,D0’Wasexceptionvector>PROGINT8?4‰BLS.S…KILLRVORBranchifno-noadjustmentneeded. N8‰IF.W‚D1#8ƒTHEN.S‰IfcamethroughPROGINTtable...2‹ADD.L…#2,D0ŽAdjustvectoraddressbecausePROGINT%*©tableisoutoforderbeyondTRACE.‰ELSE.S2‹ADD.L…#40,D0AdjustvectoraddressbecauseRESVCT'*©tableisoutoforderbeyondRESVCT23‰ENDI‰PAGE KILLRVOR:+‰MOVE.L„A0,D2’Addressofbeginningoftable+‰SUB.L…D2,D0’Offsetfrombeginningoftable‰LSL.L…#1,D0’*2,‰ADD.W…D1,D0’OffsetfromstartoftableVOR.1*ˆD0.W‚nowcontainspseudoVORfortheexception.‰RTS  KILLDLAY:)‰MOVE.L„#HALFSEC,D3ŒDelayforsmalltime.DLOOP„SUB.L…#1,D3 ‰BNE‡DLOOP‰RTSžThenreturn‰PAGE K****************************************************************************!*ˆHEXTOASCIICONVERSIONROUTINE*.*‚ENTRY:ƒD1.B=HEXnibbletoconverttoASCII*‹A6pointstooutputbuffer(*‚EXIT:„ASCIIcharacterinoutputbuffer *‹A6=A6+1*‹D1.B=ASCIIcharacterK*************************************************************************** HXTOASCI:‰AND.B…#$0F,D1 ‰OR.B†#$30,D1‰CMP.B…#$39,D1‰BLE.S…SAVCHAR ‰ADD‡#7,D1SAVCHAR‚MOVE.B„D1,(A6)+‰RTS   :*ˆNoendstatementinsourceheresince.KILLER.SA8*ˆwillbemergedinhereandwillhaveanENDstatement. NNN‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰LIST‰PAGE5POWRFAILIDNTƒ45,0‚68xxxPOWERFAILINTERRUPTHANDLER*ˆ*********************ˆ*POWRFAIL1.00„**ˆ*’**ˆ*HLD6ƒ06/24/81‚**ˆ******0 ****************…POWERFAILINTERRUPTROUTINE*@*…THISROUTINEISUSEDONLYTORESPONDTOAPOWERFAILINTERRUPT-*…ONAVERSAMODULE01(AUTOVECTOR-LEVEL7)*%*…REGISTERUSAGE:ALLREGISTERSSAVED*‰SECTIONLEVEL00**‰XDEFƒPOWRFAIL‰XREFƒCRASHSAV‰PAGE POWRFAIL:2‰MOVEM.LD0-D7/A0-A7,CRASHSAV+8ƒSAVEALLREGISTERS'‰MOVE.W‚(A7),CRASHSAV+6ŠSAVESTATUSREG+‰MOVE.L‚2(A7),CRASHSAV‹SAVEPROGRAMCOUNTER  D*********************************************************************7*„CODETOCALLAPOWERFAILROUTINECANBEENTEREDHERE*D********************************************************************  *)*ˆIfthereisareturn,reloadregisters.* !‰OR.W„#$700,SR†INHIBITINTERRUPTS5‰MOVEM.LCRASHSAV+8,D0-D7/A0-A7ƒRESTOREALLREGISTERS ‰RTE“GOBACK‰ENDNNN÷39READY…IDNTƒ45,0M68xxxRMSTRAP0Puttaskonreadylist.O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***4***…FILE:‚READY--PUTATASKONTHEREADYLIST.—******É***D***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000.‡***(***‡Copyright1983byMotorola,Inc.¢******É***H***…FUNCTION:‚TakestheTCBforataskandputsitonthereadylistƒ***E***‡accordingtoitsrunpriority.‚Therearevariousentrypoints„***D***‡tothismodulewhichprovideminorvariationsonthistheme.†******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒDƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆD******‡A:ƒAƒ.ƒPƒ.ƒ.ƒ.ƒ.ƒP ******É******É******…ENTRYCONDITIONS:³***>***‡A0ƒ=ptrtoTCBofthetasktobeaddedtoreadylist.Š******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------G*†8/15/83‚SteveFranckƒMadeCOMINTentrypointsettherunningpriority1*žlikemostoftheotherroutinesdo.‚Rewrotethe2*žTCBsearchroutinetoexecutefaster(interrupts*žaremaskedduringsearch).*†2/08/81‚HLD6*†5/18/79‚7616*†3/06/79‚GGC3* * *‚XDEF's.*8ŠXDEFƒREADY,SBREADY†Normalentrypointstothisroutine. 'ŠXDEFƒSBRYRELQ‹EntrypointfromRELINQ.0 2 R96ŠXDEFƒSBRYXMON‹EntrypointfromEXMONreturn(REXMON).(ŠXDEFƒSBRYDLAY‹EntrypointfromCKDELAY.&ŠXDEFƒSBRYACKŒEntrypointfromAKRQST.)ŠXDEFƒSBRYSTRT‹EntrypointfromTSTSTART.0ŠXDEFƒSBRYWAKE‹EntrypointfromWAKEUPandWAIT.2ŠXDEFƒSBRYASRŒEntrypointfromASRINTandWTEVENT.+ŠXDEFƒSBRYGETŒEntrypointfromASQ=GT_EN. * *‚XREF's.*9ŠXREF.SPREEMPT_FLAG‡SYSPARflagwhichsignalsapreempt.;ŠXREF.SREADYHDŒSYSPARpointertoheadentryinreadylist..ŠXREF.SRUNNERSYSPARpointertorunningtask.   **‚Includedfiles:*8*‰UTILITY.MCMacrosofgeneralutility(e.g.PUSH,POP).7*‰INTERRUP.MCMacrosusefulindealingwithinterrupts.2*‰STR.EQ”EquatesforsupervisorcodeunderRMS68K.4*‰TCB.EQ”EquatesrelatingtotheTaskControlBlock.*ŠNOLISTŠINCLUDE9995.&.UTILITY.MCŠINCLUDE9995.&.INTERRUP.MCŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TCB.EQŠLIST  ŠSECTIONLEVEL00ŠOPT„BRSŠPAGE*J*‚ThesearethespecializedentrypointsforallthevariousroutinesthatL*‚wanttoputataskonthereadylist,butwanttofiddlewiththepriority*‚first.* SBRYRELQ: 2ŠMOVEQI$F0,D0Settherunpriorityofthetaskto>ŠAND.B‚TCBCPRI(A0),D0…thecurrentprioritywiththelow4bits#ŠMOVE.BD0,TCBRPRI(A0)…settozero.6ŠBRA„SBREADYŒThenjustgotothenormalREADYroutine.  SBRYXMON: SBRYDLAY:SBRYACK: SBRYSTRT: SBRYWAKE:SBRYASR:SBRYGET: CŠMOVE.BTCBCPRI(A0),TCBRPRI(A0)ƒResettherunpriorityforthetask*§toitscurrentpriority.  *,*…FALLTHROUGHtothemainREADYroutine!!!!*ŠPAGE*>*…NOTE--Otherroutinesfallintothisroutinefromabove!!!!* READY:SBREADY:  *(*‚Seeifhe'salreadyonthereadylist.* *ŠPUSHƒSR‘SavetheSRwewereenteredwith.9ŠDISABLE_INTERRUPTSˆDisableinterruptswhileweworkwith*§thevolatileTCBchain.>ŠBSETƒ#TSK2NRDY,TCBSTAT2(A0)‚Setthebitthatsaysthisguyis6ŠIF…THENŠonthereadylist.‚Ifhewasn'talready,  *.*‚He'snot;getsetuptoputhimonthelist.* +ŠSAVEƒD1/A2ŽSaveregisterswe'llblowaway.>ŠLEA„READYHD-TCBREADY,A2‚A2<--addresssuchthatTCBREADY(A2)(*§referstothereadylistheadpointer.@ŠMOVE.BTCBRPRI(A0),D0…D0.B<--priorityoftasktoputonlist.  *>*‚SearchthelistforaTCBoflowerprioritythanthisguy's.* ŠREPEAT <ŠMOVE.LTCBREADY(A2),D1„D1<--ptrtonextTCBinthechain.6ŠBEQ„ADD_HIMŒIfwehittheendofthelist,justexit. 4ŠEXG.L‚D1,A2ŽA2<--ptrtotheTCBwe'relookingat.#*§D1<--ptrtoTCBjustbeforeit.BŠUNTIL.BD0TCBRPRI(A2)‚KeeploopinguntilwefindaTCBwith'*§aprioritylowerthanourguytoadd. 5ŠEXG.L‚D1,A2ŽD1<--ptrtotheTCBoflowerpriority.#*§A2<--ptrtoTCBjustbeforeit.ŠPAGE*M*‚Eitherwefoundsomebodyoflowerprioritythantheguywe'retryingtoaddK*‚orwehittheendofthechain.‚Eitherway,wewanttoaddthenewguyto5*‚thelistbetweentheTCB'spointedtobyA2andD1.* ADD_HIM:CŠMOVE.LD1,TCBREADY(A0)„Setourforwardlinktopointtotheguywe'*§foundtobeoflowerpriority(or0).AŠMOVE.LA0,TCBREADY(A2)„Setforwardlinkoftheguywewanttobe *§aftersothatitpointstous.ŠMOVE.L‚RUNNER,A2ŠIF.B„D0TCBRPRI(A2)THENŠST†PREEMPT_FLAGŠENDI !ŠRESTORED1/A2Restoreregisters. ŠENDI 2ŠPOP„SR‘RestoretheSRwesavedonentry&return.ŠRTS—*    ŠENDN1 NŠPAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TR1RTCD.EQ*ˆINCLUDEƒ9995.&.TCB.EQ*ˆINCLUDEƒ9995.&.BAB.EQ*ˆINCLUDEƒ9995.&.PAT.EQ*ˆINCLUDEƒ9995.&.INTERRUP.MC*ˆINCLUDEƒ9995.&.KILL.MC*ˆINCLUDEƒ9999.&.KILLEXEC.EQ*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9995.&.INTERRUP.MCŠINCLUDE9995.&.KILL.MCŠINCLUDE9999.&.KILLEXEC.EQŠLISTŠPAGE+RMS‡IDNT‚45,068xxxRMSINITIALENTRYPOINT*+*‰RevisionHistory(Addchangestothetop)*9*‰10/29/85ƒCBSƒChangedKILLERcalltouseKILL.EXECmacro**$*ˆCOPYRIGHTED1980BYMOTOROLA,INC.**ˆRMS‚ISENTEREDHERE*ŠSECTIONLEVEL00* ŠXDEFƒRMS ŠXREF.LDISPATCHŠXREF.LFLUSH_ALL_CACHEŠXREF.LPROGINT9ŠXREF.SPATBEGŠXREF.LSCHED_DATEUP‰PAGE*,*ˆHeretostartupRMSafterinitialization:*Flushthecache,*andgotodispatch.* RMS: &ŠBSR„FLUSH_ALL_CACHE„Flushallcaches. K*Schedulethenodetoforcethedateto'rollover'atmidnight.‚AnewnodeF*ƒisnormallyscheduledwhentheuserentersthetimeanddatethroughH*ƒsessioncontrol.‚Ifthesystemhasabatterybackedtimer,however,itJ*ƒmayhappenthattheusermaynotenterthedateandtimebutdependuponK*ƒitbeingpickedupfromthetimeritself.‚Bythetimewereachthiscode,B*ƒthesysteminitializerhasallreadyadjustedNSE,MIDNIGHT,andH*ƒTIMELEFThavebeeninitializedproperlytoreflectthesystemtimeandF*ƒtheBIGDELTAnodethatisnextonthePATlist.‚InthecasewhereweD*ƒdon'thaveabatterybackeduptimer,wewillschedulea'garbage'G*ƒrollovernodebutwereallydon'tcaresinceitwillbecancelledand?*ƒthecorrectrollovernodescheduledwhenthetimeismanually *ƒentered.*K* We do not mask interrupts to schedule the new node because we are entered5*ƒfromthesysteminitializerwithinterruptsmasked.*ŠBSR„SCHED_DATEUP ŠBRA„DISPATCHJ"6‰PAGE*I* This is the exec routine scheduled originally by the system initializerI*ƒthatputsadummynodewithalargedeltaontotheendofthePATlist.D*ƒThisinsuresthatthePATlistisneveremptywhichsimplifiestheB*ƒPATprocessinginmanyareas.‚NotethatwedonotgothroughtheF*ƒnormalschedulenoderoutinePAT_SCHED_NEW_NODE.‚Wecouldn'tdothis/*ƒandguaranteethelargedeltathatwedesire.*/ŠDC.Lƒ'DUMY'BitpatternthatINITsearchesfor$*£inordertofindprocedureaddress* DUMY:ŠMOVE.LPATBEG,A1 ŠDISABLE_INTERRUPTSˆMask 2ŠMOVE.LPATFHDR(A1),A2…A2pointstofreePATentry ŠIF.LA2#0THEN.S=KILL.EXEC‚RMSSA,PAT_NO_FREE_NODESƒKillsystemifnofreePAT*±nodes.ŠELSE.S@MOVE.LPATNEXT(A2),PATFHDR(A1)Unlinkthisentryfromfreelist$ENABLE_INTERRUPTS‰Unmaskinterrupts*¦InitializePATentriesCLR.L‚PATNEXT(A2)$CLR.L‚PATTCB(A2)‰Indicateexecnode5MOVE.L#PATBIGDELTA,PATDELTA(A2)MakedeltaverybigCLR.L‚PATINTV(A2)3LEA„DUMY(PC),A3ˆAddressofproceduretoreschedule'MOVE.LA3,PATASR(A2)†Executionaddress(CLR.W‚PATOPT(A2)‰Options-notperiodic4MOVE.L#PATDUMMYID,PATARID(A2)PluginthedummyID4MOVE.W#$FFFF-$0700,PATILVL(A2)Interruptlevel=0#DISABLE_INTERRUPTSˆMaskinterrupts7MOVE.LPATHDR(A1),A3†A3pointsto1stnodeonPATlist !WHILE.LPATNEXT(A3)#0DO.S,**ŽLEA‚PATNEXT(A3),A3ƒFindlastnodeonlist6MOVE.LPATNEXT(A3),A3Findlastnodeonlist‰10/23/85ENDW 7MOVE.LA2,PATNEXT(A3)1 „LinkthisentryontoendoflistŠENDI%ŠENABLE_INTERRUPTS‰UnmaskandloseSR(ŠRTE—BacktoPATscheduler(wereallygo(*£backtoabackgroundroutinescheduled%*£byTIMEINT.‚Thisbackgroundroutine *£wastheonethatscheduledus.ŠNOPŠNOPŠEND‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9995.&.STR.EQ*‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰LIST‰PAGE:SELFTESTIDNTƒ45,0‚68xxxSYSTEMSELFTESTINTERRUPTHANDLER*ˆ*********************ˆ*SELFTEST1.00„**ˆ*’**ˆ*HLD6ƒ06/24/81‚**ˆ**********************…SELFTESTINTERRUPTROUTINE*>*…THISROUTINEISUSEDONLYTORESPONDTOASELFTESTINTERRUPT-*…ONAVERSAMODULE01(AUTOVECTOR-LEVEL2)*%*…REGISTERUSAGE:ALLREGISTERSSAVED*‰SECTIONLEVEL00*3CONTREG‚EQU„$F70030‡VERSAMODULE01CONTROLREGISTER*‰XDEFƒSELFTEST‰XREF.SSLFTSTA7*7SELFTESTTST.L‚SLFTSTA7‡ISTHISFIRSTENTRYTOROUTINE?‰BNE.S‚SELFT4‰BRANCHIFNO!‰OR.Wƒ#$700,SR‡INHIBITINTERRUPTS-‰MOVEM.LD0-D7/A0-A6,-(A7)‚SAVEALLREGISTERS&‰MOVE.L‚A7,SLFTSTA7ƒSAVESTACKPOINTER)‰MOVE.W‚60(A7),SR…RESTOREINTERRUPTLEVELBSELFT4ƒMOVE.L‚SLFTSTA7,A7ƒRESTOREA7INCASETHISISNOT1STENTRY*6*„CODETOCALLASELFTESTROUTINECANBEENTEREDHERE*!‰OR.W„#$700,SR†INHIBITINTERRUPTS'‰MOVE.B‚CONTREG,D0„GETCONTROLREGISTER%‰OR.B„#$20,D0‡SETBITTOTURNOFFLED/‰MOVE.B‚D0,CONTREG„PUTITINTOCONTROLREGISTER4‰MOVE.L‚SLFTSTA7,A7ƒRELOADA7(MAYBEITWASCHANGED)0‰MOVEM.L(A7)+,D0-D7/A0-A7ƒRESTOREALLREGISTERS%‰CLR.LƒSLFTSTA7†CLEARENTRYFLAGWORD ‰RTE“GOBACK‰ENDNN*2'MK68901 TIMEINT AF??  TIMEINT SAHHL  =/*=/*†MK68901.TIMEINT.AF=/*-=/* Chain file to assemble MK68901.TIMEINT.SA=/*:=/* If no output argument is specified for the listing the1=/* chain file will default to MK68901.TIMEINT.LS=/*=/IFC \1ƒ=ARGMK68901.TIMEINT.LS=/ENDIF2 =/*E=ASM M68010.M68010.SA/MK68901.TIMEINT.SA,MK68901.TIMEINT.RO,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9999.MK68901.MK68901.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9999.M68XXX.TIMEINT.AI=/*}=/*=ENDNNNNN7ŠPAGE**ˆINCLUDEFILES**ˆINCLUDE9995.&.STR.EQ*ˆINCLUDE9995.&.BAB.EQ*ˆINCLUDE9995.&.PAT.EQ!*ˆINCLUDE9999.MK68901.MK68901.EQ*ˆINCLUDE9995.&.TR1RTCD.EQ*ˆINCLUDE9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQ ŠINCLUDE9999.MK68901.MK68901.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.INTERRUP.MCŠLISTŠPAGE@TIMEINTƒIDNTƒ45,0ŒTIMERINTERRUPTHANDLERFORM146818CLOCKCHIP*$*‰COPYRIGHTED1983BYMOTOROLA,INC.*.*†TIMERINTERRUPT-OCCURSONCEEACH10.000MS**•01/18/83‚(SFF5)*•04/07/83‚(7616)*:*•08/15/83‚SteveFranck--ChangedtoexitthroughCOMINT.*ŠSECTIONLEVEL00*ŠPAGE ŠXDEFƒTIMEINT ŠXREF.SDATEŠXREF.SPATBEGŠXREF.SPREEMPT_FLAGŠXREF.SPTMADDRŠXREF.STIMEOUTŠXREF.STIMESLICŠXREF.STIMINTRŠXREF.STIMINTVŠXREF.STIMINTV4ŠXREF.STINTFLAG ŠXREFƒTRACERŠXREF.STRACFLAGŠXREF.STIME_LEFT ŠXREFƒBKG_SCHEDULE ŠXREFƒCKEXPA ŠXREFƒCKDELAYŠXREFƒPAT_RM_1ST_NODEŠPAGE**0TIMEINTƒMOVEM.LD0-D1/A0-A1,-(A7)SAVEREGISTERS ŠMOVE.LPTMADDR,A0‰TIMERADDRESS)ŠBCLRƒ#5,MFP_ISRA(A0)„Cleartheinterrupt!ŠMOVE.WSR,D0ŽForlaterunmasking ŠCLR.L‚D1ŠDISABLE_INTERRUPTSˆMask$ŠMOVE.WTIMINTR,D1‰microsecondsoverŠSUB.W‚D1,TIMINTV4ŠIF…‚THEN.S4ADD.W‚#1000,TIMINTV4‚Setusecrollovercounterback3SUB.L‚#1,TIME_LEFT„AccountforpassageofextramsŠENDI7ŠMOVE.WTIMINTV,D1‰NumberofmselapsedsincelasttickŠSUB.L‚D1,TIME_LEFT‡msupdateŠMOVE.WD0,SRŽUnmaskŠTST.L‚TIME_LEFT *‰INCLUDE9999.M68XXX.TIMEINT.AIŠINCLUDE9999.M68XXX.TIMEINT.AIŠENDN2 @M'NOMMU J'NOMMUC h'VM03 †'VM04 ¤'VME101 Ê'VME110 è'VME120 'VME130 ,'VME133 J'VMES10 q'Z8036 —'NOMMU LOADMMU AFVV  LOADMMU SA__ v  =/*=/*†NOMMU.LOADMMU.AF=/*+=/* Chain file to assemble NOMMU.LOADMMU.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to NOMMU.LOADMMU.LS=/*=/IFC \1ƒ=ARGNOMMU.LOADMMU.LS=/ENDIF=/*0=ASM NOMMU.LOADMMU.SA,NOMMU.LOADMMU.RO,\1;MRZ=50=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TST.EQ=/*}=/*=ENDNNNNNNN‰PAGE‰NOLIST‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TST.EQ‰LIST)**,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------@*ˆ07/26/85‚JulieHoban„AddedADD_SEG_TO_MMUsubroutine.Replaced+*¡UNLDMMUsubroutinewithDEL_SEG_FROM_MMU.:*ˆ01/25/84‚MSLŒSplitroutineintotworoutinesinorderto%*¡supportboththeRTEandRTSexits.*ˆ03/30/81‚HLD6‹Rev2.00*ˆ09/18/80‚HLD6*O*******************************************************************************‰PAGE ‰SECTION2 ‰OPT…CL **‚XDEF's*‰XDEFƒADD_SEG_TO_MMU‰XDEFƒADD_SEG2 ‰XDEFƒCRASN ‰XDEFƒDEASN‰XDEFƒDEL_SEG_FROM_MMU ‰XDEFƒLOADMMU‰XDEFƒLOADMMUI‰XDEFƒMMUFAULT **‚XREF's*‰XREF.SMMUHERE‰XREF.SMMULOAD ‰XREFƒTRACER‰XREF.STRACFLAG **‚INCLUDEDFILES:**ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TST.EQ*‰PAGEO********************************************************************************D*ˆCRASN,DEASN,LOADMMU,MMUFAULTsubroutinesforboardswithoutMMU*G*ˆThesearedummyentrypoints--wedon'treallyhaveanMMU,butother@*ˆexecroutinesaregoingtobecallingusattheseentrypoints)*ˆbecausetheydon'tknowthere'snoMMU.*WT`#O******************************************************************************* CRASN:DEASN:LOADMMU MMUFAULT:&ŠRTS—Justreturn--he'llneverknow.... O********************************************************************************D*ˆADD_SEG_TO_MMUandDEL_SEG_FROM_MMUsubroutinesforboardsw/oMMU*G*ˆThesearedummyentrypoints--wedon'treallyhaveanMMU,butother@*ˆexecroutinesaregoingtobecallingusattheseentrypointsG*ˆbecausetheydon'tknowthere'snoMMU.Thecallersoftheseroutines/*ˆrequirethattheconditioncodesbeset.*O******************************************************************************* ADD_SEG_TO_MMU: ADD_SEG2:DEL_SEG_FROM_MMU:&‰CMP.L…D0,D0Setconditioncodes<EQ>,%‰RTS›Andreturn--he'llneverknow.... O*********************************************************************************‚LOADMMUImustexitwithRTE*O******************************************************************************* LOADMMUI ‰RTE—RETURN ‰ENDNNN3 'NOMMUC LOADMMU AFtt  LOADMMU SA}}›  =/*=/*†NOMMUC.LOADMMU.AF=/*,=/* Chain file to assemble NOMMUC.LOADMMU.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to NOMMUC.LOADMMU.LS=/*=/IFC \1ƒ=ARGNOMMUC.LOADMMU.LS=/ENDIF=/*2=ASM NOMMUC.LOADMMU.SA,NOMMUC.LOADMMU.RO,\1;MRZ=50=/*{ Included files are:=/*ƒ9995.&.UTILITY.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TST.EQ=/*}=/*=ENDNNNNNNl‰NOLIST‰INCLUDEƒ9995.&.UTILITY.MC‰INCLUDEƒ9995.&.STR.EQ‰INCLUDEƒ9995.&.TST.EQ‰LISTGLOADMMU‚IDNT‚45,0…LOADMMUSUBROUTINESFORBOARDSWITHCACHEWITHOUTMMU‰SPCƒ1O*********************************************************************************ˆNOMMUC.LOADMMU*?*ˆSubroutinestoaddsegmentsanddeletesegmentsfromtheMMU.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*'*ˆEntry:„A5=targettask'sTSTaddress*’D5=offsettoTSTMMUentry*!*ˆRegisterusage:…01234567*™DŒP*™AŒP**™P=entryparameter*™R=returnedparameter*™S=savedandrestored*™*=destroyed**D*ˆExit:‚RTStocaller‚(ADD_SEG_TO_MMUANDDEL_SEG_FROM_MMUmust4 have*conditioncodesset)**,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------@*ˆ07/26/85‚JulieHoban„AddedADD_SEG_TO_MMUsubroutine.Replaced+*¡UNLDMMUsubroutinewithDEL_SEG_FROM_MMU.<*ˆ01/25/85‚SJFŒAddedcalltoflushcachetoUNLDMMUroutine.:*ˆ01/25/84‚MSLŒSplitroutineintotworoutinesinorderto%*¡supportboththeRTEandRTSexits.*ˆ03/30/81‚HLD6‹Rev2.00*ˆ09/18/80‚HLD6*O*******************************************************************************‰PAGE ‰SECTION2 ‰OPT…CL **‚XDEF's*‰XDEFƒADD_SEG_TO_MMU‰XDEFƒADD_SEG2 ‰XDEFƒCRASN ‰XDEFƒDEASN‰XDEFƒDEL_SEG_FROM_MMU ‰XDEFƒLOADMMU‰XDEFƒLOADMMUI‰XDEFƒMMUFAULT **‚XREF's*‰XREFƒFLUSH_ON_CONTEXT_SWITCH ‰XREF.SMMUHERE‰XREF.SMMULOAD ‰XREFƒTRACER‰XREF.STRACFLAG**‚INCLUDEDFILES:**ˆINCLUDEƒ9995.&.UTILITY.MC*ˆINCLUDEƒ9995.&.STR.EQ*ˆINCLUDEƒ9995.&.TST.EQ*‰PAGEO********************************************************************************5*ˆLOADMMUsubroutineforboardswithCACHEandnoMMU*O******************************************************************************* LOADMMU:*uW~E*„FLUSHTHEUSERCACHE.*‰BSR‡FLUSH_ON_CONTEXT_SWITCH ‰RTS—RETURN O********************************************************************************3*ˆLOADMMUIroutineforboardswithCACHEandnoMMU*O******************************************************************************* LOADMMUI:**„FLUSHTHEUSERCACHE.*‰BSR‡FLUSH_ON_CONTEXT_SWITCH ‰RTE—RETURN O********************************************************************************>*ˆDEL_SEG_FROM_MMUsubroutineforboardswithCACHEandnoMMU*A*ˆThecallerofthisroutinerequiresthattheconditioncodesbe *ˆset.*O******************************************************************************* DEL_SEG_FROM_MMU:**„FLUSHTHEUSERCACHE.* ‰PUSH.L‚A5‰BSR…FLUSH_ON_CONTEXT_SWITCH ‰POP.LƒA5&‰CMP.LƒD0,D0‘Setconditioncodes,‰RTS›Andreturn.‰PAGEO********************************************************************************E*ˆCRASN,DEASN,MMUFAULTsubroutinesforboardswithCACHEandnoMMU*G*ˆThesearedummyentrypoints--wedon'treallyhaveanMMU,butother@*ˆexecroutinesaregoingtobecallingusattheseentrypoints)*ˆbecausetheydon'tknowthere'snoMMU.*O******************************************************************************* CRASN:DEASN: MMUFAULT:&ŠRTS—Justreturn--he'llneverknow.... O********************************************************************************<*ˆADD_SEG_TO_MMUsubroutineforboardswithCACHEandnoMMU*G*ˆThisisadummyentrypoint--wedon'treallyhaveanMMU,butotherB*ˆexecroutinesaregoingtobecallingusbecausetheydon'tknow>*ˆthere'snoMMU.Thecallerofthisroutinerequiresthatthe*ˆconditioncodesbeset.*O******************************************************************************* ADD_SEG_TO_MMU: ADD_SEG2:&‰CMP.L…D0,D0Setconditioncodes,%‰RTS›Andreturn--he'llneverknow.... ‰END'VM03 KILLER AF’’  KILLER SA›› z  4 =/*=/*†VM03.KILLER.AF=/*>=/* Chain file to assemble VM03.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to VM03.KILLER.LS=/*=/IFC \1ƒ=ARGVM03.KILLER.LS=/ENDIF=ARG \1,VM03.KILLER.RO=/*B=ASM M68010.M68010.SA/M68XXX.KILLER.SA/VM03.KILLER.SA,\2,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*}=/*=ENDNNNNNNЉLIST‰PAGE‰SPCƒ1$*–VM03-BOARDDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.VM03.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚TurnontheBoardFailLED!*’2.‚Outputsystemcrashmessage.A*ˆItalsocontainsanequatefortheamountoftimestodecrementD*ˆacounterinaloopinordertodelayforapprox.one-halfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BRAfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------9*ˆ03/27/86‚JulieHoban„Movedoutputmessageroutinehere.(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 *ˆINCLUDEFILES**‰NOLIST‰OPT…CL‰LIST * *ˆEQUATES*HALFSEC‚EQU‡$4FFFF&CREG…EQU‡$F80100VM03CONTROLREGISTER‰PAGE*-*ˆBoardSpecificCode-turnonBoardFailLED*KILLER3: *‰AND.W…#$FFBF,CREGŒTurnonBoardFailLED.*C*ˆIfFirmw5 aredebuggerhasTRAP#15I/O-useittodisplaymessage*KILLOOP: @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 7‰MOVE.L‚TRP15TYP,D1‹GetTRAP#15capabilityflagsinD12‰BTST„#T15IO,D1TestforPHOENIXTRAP#15support.,‰IFƒƒTHEN.SŒIfyes,thenoutputmessage.*F*ˆTRAP#15PHOENIXformat-usesA5,A6topointtostring,endstring+1*.‹LEA…MSGCRASH(PC),A5…Startof'SYSTEMCRASHED'&‹LEA…ENDCRASH(PC),A6…Endofstring+1 “Iœ2,‹TRAP15‚BUGTRP15,KILLER4„DopseudoTRAP#15.KILLER4:)‹DC.W„5“Outputstring,noaddedCRorLF. #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D2Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 8OUTLOOP„ROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter)‹MOVE.L‚A7,A5A5=startofoutputstring-*ŸA6=endofstring+1(setupbyHXTOASCI)‹TRAP15‚BUGTRP15,OUTNEXTOUTNEXT:#‹DC.W„5“Outputstring,noCRorLF. PAGE#*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹DBRA„D2,OUTLOOPŠOutputall8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack. -‹BSR…KILLDLAYŒDelayhereforflashingeffect. *‹LEA…MSGBLANK(PC),A5…Startofblankstring,‹LEA…ENDBLANK(PC),A6…Endofblankstring+1 +‹TRAP15‚BUGTRP15,KILLER5„DopseudoTRAP#15KILLER5:#‹DC.W„5“Outputstring,noCRorLF. #*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹BSR…KILLDLAYŒDelayhereforflashingeffect. 5‹BRA…KILLOOPBranchbacktocreateaflashingmessage ‰ELSE.S @KILLER8:ƒBRA„KILLER8‰NoTRAP#15I/Oavailable,soloopforever. ‰ENDI ‰ENDNN'VM04 KILLER AF°°  KILLER SA¹¹…  5 =/*=/*†VM04.KILLER.AF=/*>=/* Chain file to assemble VM04.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the-=/* chain file will default to VM04.KILLER.LS=/*=/IFC \1ƒ=ARGVM04.KILLER.LS=/ENDIF=ARG \1,VM04.KILLER.RO=/*B=ASM M68020.M68020.SA/M68XXX.KILLER.SA/VM04.KILLER.SA,\2,\1;MRZ=65=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*ƒ9999.VM04.CTRLSTAT.EQ=/*}=/*=ENDNNNNN¨‰LIST‰PAGE‰SPCƒ1$*–VM04-BOARDDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.VM04.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚TurnontheBoardFailLED.1*’2.‚Writesahex'F'tothefrontpaneldisplay.!*’3.‚Outputsystemcrashmessage.A*ˆItalsocontainsanequatefortheamountoftimestodecrementD*ˆacounterinaloopinordertodelayforapprox.one-halfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BRAfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------9*ˆ03/27/86‚JulieHoban„Movedoutputmessageroutinehere.NNN6 N±º4Â7(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 *ˆINCLUDEFILES**ˆINCLUDEƒ9999.VM04.CTRLSTAT.EQ*‰NOLIST‰INCLUDEƒ9999.VM04.CTRLSTAT.EQ‰OPT…CL‰LIST**ˆXREF's* ‰XREF.S‚PANEL * *ˆEQUATES*HALFSEC‚EQU‡$5FFFFPANLF„SET‡$0F–LEDVALUE"F"‰PAGE*-*ˆBoardSpecificCode-turnonBoardFailLED*KILLER3: *‰MOVE.B‚#PANLF,PALADRŒSETPANELLEDTO"F" *‰BSET.B‚#CT4BF,CNT4ŽTURNONBOARDFAILLED KILLOOP:*C*ˆIfFirmwaredebuggerhasTRAP#15I/O-useittodisplaymessage* @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 7‰MOVE.L‚TRP15TYP,D1‰GetTRAP#15capabilityflagsinD13‰BTST„#ALT15IO,D1‰TestforAUSTINTRAP#15support.'‰IFƒ„THEN.S‰Ifyes,outputmessage. &PEA‡ENDCRASHˆEndofcrashmessage+1NNN'PEA‡MSGCRASHˆStartof'SYSTEMCRASHED' +TRAP15„BUGTRP15,KILLER6ƒDoPseudoTRAP#15KILLER6:$DC.W†$21Outputstring,noCRorLF #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D0Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 9OUTLOOP2ƒROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter'‹MOVE.L‚A6,-(A7)ŒA6=endofstring+1‹MOVE.L‚A7,-(A7))‹ADD.Lƒ#4,(A7)Startingaddressofstring-‹TRAP15‚BUGTRP15,OUTNXT2„OutputthecharacterOUTNXT2:%‹DC.W„$21‘Outputstring,noCRorLF. PAGE#*ˆTHEDEBUGGERRETURNSCONTROLHERE .‹DBRA„D0,OUTLOOP2‰Outputall8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack.  -BSR‡KILLDLAYˆDelayhereforflashingeffect. %PEA‡ENDBLANKˆEndofblankstring+1#PEA‡MSGBLANKˆStartofblankstring +TRAP15„BUGTRP15,KILLER7ƒDoPseudoTRAP#15KILLER7:$DC.W†$21Outputstring,noCRorLF #*ŠTHEDEBUGGERRETURNSCONTROLHERE -BSR‡KILLDLAYˆDelayhereforflashingeffect. 5BRA‡KILLOOP‰Nowloopbacktocreateflashingeffect. ŠELSE.S @KILLER8:ƒBRA„KILLER8‰NoTRAP#15I/Oavailable,soloopforever. ŠENDI  ‰END6 NN'VME101 KILLER AFÖÖ  KILLER SAßß z  =/*=/*†VME101.KILLER.AF=/*@=/* Chain file to assemble VME101.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to VME101.KILLER.LS=/*=/IFC \1ƒ=ARGVME101.KILLER.LS=/ENDIF=ARG \1,VME101.KILLER.RO=/*D=ASM M68000.M68000.SA/M68XXX.KILLER.SA/VME101.KILLER.SA,\2,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*}=/*=ENDNNNNNΉLIST‰PAGE‰SPCƒ1&*–VME101-BOARDDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.VME101.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚Turnont7 heBoardFailLED.*’2.‚Write'F'tothedisplay.!*’3.‚Outputsystemcrashmessage.A*ˆItalsocontainsanequatefortheamountoftimestodecrementD*ˆacounterinaloopinordertodelayforapprox.one-halfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BRAfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------9*ˆ03/27/86‚JulieHoban„Movedoutputmessageroutinehere.(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 ‰NOLIST‰OPT…CL‰LIST * *ˆEQUATES*HALFSEC‚EQU‡$4FFFF'MCR†EQU‡$FE00F1‘VME101controlregister ‰PAGE*-*ˆBoardSpecificCode-turnonBoardFailLED*KILLER3: #‰MOVE.L‚#MCR,A1’CONTROLREGADDRESS-‰MOVE.B‚#$9F,(A1)DISABLEINTERRUPTSANDTURN*©ONTHEFAILLIGHT *C*ˆIfFirmwaredebuggerhasTRAP#15I/O-useittodisplaymessage*KILLOOP: @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 *F*ˆTRAP#15PHOENIXformat-usesA5,A6topointtostring,endstring+1*.‹LEA…MSGCRASH(PC),A5…Startof'SYSTEMCRASHED'×Fà5&‹LEA…ENDCRASH(PC),A6…Endofstring+1 ,‹TRAP15‚BUGTRP15,KILLER4„DopseudoTRAP#15.KILLER4:+‹DC.W„$14‘Outputstring,noaddedCRorLF. :‹MOVE.B‚#$9F,(A1)‹Disableinterrupts/Output'F'todisplay #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D2Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 8OUTLOOP„ROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter)‹MOVE.L‚A7,A5A5=startofoutputstring-*ŸA6=endofstring+1(setupbyHXTOASCI)‹TRAP15‚BUGTRP15,OUTNEXTOUTNEXT:%‹DC.W„$14‘Outputstring,noCRorLF. :‹MOVE.B‚#$9F,(A1)‹Disableinterrupts/Output'F'todisplay #*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹DBRA„D2,OUTLOOPŠOutputall8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack. -‹BSR…KILLDLAYŒDelayhereforflashingeffect. *‹LEA…MSGBLANK(PC),A5…Startofblankstring,‹LEA…ENDBLANK(PC),A6…Endofblankstring+1 +‹TRAP15‚BUGTRP15,KILLER5„DopseudoTRAP#15KILLER5:%‹DC.W„$14‘Outputstring,noCRorLF. :‹MOVE.B‚#$9F,(A1)‹Disableinterrupts/Output'F'todisplay #*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹BSR…KILLDLAYŒDelayhereforflashingeffect. 5‹BRA…KILLOOPBranchbacktocreateaflashingmessage  ‰ENDNN7 'VME110 KILLER AFôô  KILLER SAýýy  =/*=/*†VME110.KILLER.AF=/*@=/* Chain file to assemble VME110.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to VME110.KILLER.LS=/*=/IFC \1ƒ=ARGVME110.KILLER.LS=/ENDIF=ARG‚\1,VME110.KILLER.RO=/*D=ASM M68000.M68000.SA/M68XXX.KILLER.SA/VME110.KILLER.SA,\2,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*}=/*=ENDNNNNNì‰LIST‰PAGE‰SPCƒ1&*–VME110-BOARDDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.VME110.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚TurnontheBoardFailLED./*’2.‚Outputthemessageusingtrap#15,code6.A*ˆItalsocontainsanequatefortheamountoftimestodecrementD*ˆacounterinaloopinordertodelayforapprox.one-halfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BRAfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---8 ------------------------------------------9*ˆ03/27/86‚JulieHoban„Movedoutputmessageroutinehere.(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 ‰NOLIST‰OPT…CL‰LIST * *ˆEQUATES*HALFSEC‚EQU‡$5FFFF'MCR†EQU‡$FE8021‘VME110controlregister‰PAGE*-*ˆBoardSpecificCode-turnonBoardFailLED*KILLER3: #‰MOVE.L‚#MCR,A1’CONTROLREGADDRESS0‰MOVE.B‚#$10,(A1)DISABLEINTERRUPTSANDTURNON *©FAILLED.*C*ˆIfFirmwaredebuggerhasTRAP#15I/O-useittodisplaymessage*KILLOOP: @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 7‰MOVE.L‚TRP15TYP,D1‹GetTRAP#15capabilityflagsinD12‰BTST„#T15IO,D1TestforPHOENIXTRAP#15support.,‰IFƒƒTHEN.SŒIfyes,thenoutputmessage.*F*ˆTRAP#15PHOENIXformat-usesA5,A6topointtostring,endstring+1*.‹LEA…MSGCRASH(PC),A5…Startof'SYSTEMCRASHED'õFþ3&‹LEA…ENDCRASH(PC),A6…Endofstring+1 ,‹TRAP15‚BUGTRP15,KILLER4„DopseudoTRAP#15.KILLER4:)‹DC.W„6“Outputstring,noaddedCRorLF. #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D2Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 8OUTLOOP„ROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter)‹MOVE.L‚A7,A5A5=startofoutputstring-*ŸA6=endofstring+1(setupbyHXTOASCI)‹TRAP15‚BUGTRP15,OUTNEXTOUTNEXT:#‹DC.W„6“Outputstring,noCRorLF. PAGE#*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹DBRA„D2,OUTLOOPŠOutputall8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack. -‹BSR…KILLDLAYŒDelayhereforflashingeffect. *‹LEA…MSGBLANK(PC),A5…Startofblankstring,‹LEA…ENDBLANK(PC),A6…Endofblankstring+1 +‹TRAP15‚BUGTRP15,KILLER5„DopseudoTRAP#15KILLER5:#‹DC.W„6“Outputstring,noCRorLF. #*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹BSR…KILLDLAYŒDelayhereforflashingeffect. 5‹BRA…KILLOOPBranchbacktocreateaflashingmessage ‰ELSE.S @KILLER8:ƒBRA„KILLER8‰NoTRAP#15I/Oavailable,soloopforever. ‰ENDI NN‰ENDN8 NNNNNN'VME120 KILLER AF  KILLER SA##  =/*=/*†VME120.KILLER.AF=/*@=/* Chain file to assemble VME120.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to VME120.KILLER.LS=/*=/IFC \1ƒ=ARGVME120.KILLER.LS=/ENDIF=ARG \1,VME120.KILLER.RO=/*D=ASM M68010.M68010.SA/M68XXX.KILLER.SA/VME120.KILLER.SA,\2,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*ƒ9999.VME12X.BOARD.EQ=/*}=/*=ENDNNN9 NN‰LIST‰PAGE‰SPCƒ1;*ƒVME120,VME121,VME122,VME123ƒBOARDINDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.VME120.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚TurnontheBoardFailLED.!*’2.‚Outputsystemcrashmessage.A*ˆItalsocontainsanequatefortheamountoftimestodecrementD*ˆacounterinaloopinordertodelayforapprox.one-halfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BRAfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------9*ˆ03/27/86‚JulieHoban„Movedoutputmessageroutinehere.(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE**ˆINCLUDEFILES**ˆINCLUDEƒ9999.VME12X.BOARD.EQ*‰NOLIST‰INCLUDEƒ9999.VME12X.BOARD.EQ‰OPT…CL‰LIST * *ˆEQUATES*HALFSEC‚EQU‡$5FFFF‰PAGE ‰SECTION2*-*ˆBoardSpecificCode-turnonBoardFailLED*KILLER3: &‰BSET.B‚#BRDFAIL,CREGŒTURNFAILLEDONA*NOTE:‚ThiswillalsoturnontheSYSFAILLEDontheMVME050,if;*itisinthesystem.‚The050monitorstheVMEbusSYSFAIL*<*line,andturnsonitsfailLEDifanyoneinthesystemis*assertingSYSFAIL*.  *C*ˆIfFirmwaredebuggerhasTRAP#15I/O-useittodisplaymessage*KILLOOP: @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 7‰MOVE.L‚TRP15TYP,D1‹GetTRAP#15capabilityflagsinD1H$:2‰BTST„#T15IO,D1TestforPHOENIXTRAP#15support.,‰IFƒƒTHEN.SŒIfyes,thenoutputmessage.*F*ˆTRAP#15PHOENIXformat-usesA5,A6topointtostring,endstring+1*.‹LEA…MSGCRASH(PC),A5…Startof'SYSTEMCRASHED'&‹LEA…ENDCRASH(PC),A6…Endofstring+1 ,‹TRAP15‚BUGTRP15,KILLER4„DopseudoTRAP#15.KILLER4:)‹DC.W„5“Outputstring,noaddedCRorLF. #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D2Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 8OUTLOOP„ROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter)‹MOVE.L‚A7,A5A5=startofoutputstring-*ŸA6=endofstring+1(setupbyHXTOASCI)‹TRAP15‚BUGTRP15,OUTNEXTOUTNEXT:#‹DC.W„5“Outputstring,noCRorLF. PAGE#*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹DBRA„D2,OUTLOOPŠOutput9 all8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack. -‹BSR…KILLDLAYŒDelayhereforflashingeffect. *‹LEA…MSGBLANK(PC),A5…Startofblankstring,‹LEA…ENDBLANK(PC),A6…Endofblankstring+1 +‹TRAP15‚BUGTRP15,KILLER5„DopseudoTRAP#15KILLER5:#‹DC.W„5“Outputstring,noCRorLF. #*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹BSR…KILLDLAYŒDelayhereforflashingeffect. 5‹BRA…KILLOOPBranchbacktocreateaflashingmessage ‰ELSE.S @KILLER8:ƒBRA„KILLER8‰NoTRAP#15I/Oavailable,soloopforever. ‰ENDI ‰ENDN'VME130 KILLER AF88  KILLER SAAA ~  =/*=/*†VME130.KILLER.AF=/*@=/* Chain file to assemble VME130.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to VME130.KILLER.LS=/*=/IFC \1ƒ=ARGVME130.KILLER.LS=/ENDIF=ARG \1,VME130.KILLER.RO=/*D=ASM M68020.M68020.SA/M68XXX.KILLER.SA/VME130.KILLER.SA,\2,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*ƒ9999.VME13X.CTRLSTAT.EQ=/*}=/*=ENDNNNNN: 0‰LIST‰PAGE‰SPCƒ1&*–VME130-BOARDDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.VME130.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚TurnontheBoardFailLED.!*’2.‚Outputsystemcrashmessage.C*ˆItalsocontainsanequatefortheamountoftimestodecrementa;*ˆcounterinalooptodelayapproximatelyonehalfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BRAfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------9*ˆ03/27/86‚JulieHoban„Movedoutputmessageroutinehere.(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 *ˆINCLUDEFILES**ˆ9999.VME13X.CTRLSTAT.EQ*‰NOLIST ‰INCLUDE‚9999.VME13X.CTRLSTAT.EQ‰OPT…CL‰LIST * *ˆEQUATES*HALFSEC‚EQU‡$5FFFF‰PAGE*-*ˆBoardSpecificCode-turnonBoardFailLED* KILLER3:.‰MOVE.L‚#CNT5,A1‘ADDRESSOFCONTROLREGISTER5$‰BSET.B‚#CT5BF,(A1)ŽTURNFAILLEDON *C*ˆIfFirmwaredebuggerhasTRAP#15I/O-useittodisplaymessage*KILLOOP: @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 7‰MOVE.L‚TRP15TYP,D1‰GetTRAP#15capabilityflagsinD13‰BTST„#ALT15IO,D1‰TestforAUSTINTRAP#15support.'‰IFƒ„THEN.S‰Ifyes,outputmessage. &PEA‡ENDCRASHˆEndofcrashmessage+1'PEA‡MSGCRASHˆStartof'SYSTEMCRASHED' +TRAP15„BUGTRP15,KILLER6ƒDoPseudoTRAP#15KILLER6:9LB3$DC.W†$21Outputstring,noCRorLF #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D0Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 9OUTLOOP2ƒROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter'‹MOVE.L‚A6,-(A7)ŒA6=endofstring+1‹MOVE.L‚A7,-(A7))‹ADD.Lƒ#4,(A7)Startingaddressofstring-‹TRAP15‚BUGTRP15,OUTNXT2„OutputthecharacterOUTNXT2:%‹DC.W„$21‘Outputstring,noCRorLF. PAGE#*ˆTHEDEBUGGERRETURNSCONTROLHERE .‹DBRA„D0,OUTLOOP2‰Outputall8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack.  -BSR‡KILLDLAYˆDelayhereforflashingeffect. %PEA‡ENDBLANKˆEndofblankstring+1#PEA‡MSGBLANKˆStartofblankstring +TRAP15„BUGTRP15,KILLER7ƒDoPseudoTRAP#15KILLER7:$DC.W†$21Outputstring,noCRorLF #*ŠTHEDEBUGGERRETURNSCONTROLHERE -BSR‡KILLDLAYˆDelayhereforflashingeffect. 5BRA‡KILLOOP‰Nowloopbacktocreateflashingeffect. ŠELSE.S @KILLER8:ƒBRA„KILLER8‰NoTRAP#15I/Oavailable,soloopforever. ŠENDI  ‰END: NN'VME133 TIMEINT AFVV  KILLER AF__  KILLER SAhh }  =/*=/*†VME133.TIMEINT.AF=/*,=/* Chain file to assemble VME133.TIMEINT.SA=/*:=/* If no output argument is specified for the listing the0=/* chain file will default to VME133.TIMEINT.LS=/*=/IFC \1ƒ=ARGVME133.TIMEINT.LS=/ENDIF=/*D=ASM M68020.M68020.SA/MK68901.TIMEINT.SA,VME133.TIMEINT.RO,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9999.MK68901.MK68901.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9999.M68XXX.TIMEINT.AI=/*}=/*=ENDNNNNNN=/*=/*†VME133.KILLER.AF=/*@=/* Chain file to assemble VME133.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to VME133.KILLER.LS=/*=/IFC \1ƒ=ARG‚VME133.KILLER.LS; =/ENDIF=ARG‚\1,VME133.KILLER.RO=/*D=ASM M68020.M68020.SA/M68XXX.KILLER.SA/VME133.KILLER.SA,\2,\1;MRZ=80=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*ƒ9999.MK68901.MK68901.EQ=/*ƒ9999.VME133.BOARD.EQ=/*}=/*=ENDNNNNNW‰LIST‰PAGE‰SPCƒ1O*********************************************************************************ˆ9999.VME133.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:*’1.‚TurnontheBoardFailLED. *’2.‚Outputsystemcrashmessage*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=*ˆEntry:„BRAfromboard-independentKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------1*ˆ03/27/86‚JAHŒMovedoutputmessageroutinehere. *ˆ11/27/85‚BAWŒOriginalwriting.*O*******************************************************************************‰PAGE *ˆINCLUDEFILES**ˆINCLUDEƒ9999.VME133.BOARD.EQ*‰NOLIST ‰INCLUDEƒ9999.MK68901.MK68901.EQ‰INCLUDEƒ9999.VME133.BOARD.EQ‰OPT…CL‰LIST* *‚EQUATES*HALFSEC‚EQU‡$5FFFF‰PAGE ‰SECTION2*-*ˆBoardSpecificCode-turnonBoardFailLED*KILLER3: &‰BSET.B‚#BRDFAIL,CREGŒTURNFAILLEDONA*NOTE:‚ThiswillalsoturnontheSYSFAILLEDontheMVME050,if;*itisinthesystem.‚The050monitorstheVMEbusSYSFAIL*<*line,andturnsonitsfailLEDifanyoneinthesystemis*assertingSYSFAIL*. *C*ˆIfFirmwaredebuggerhasTRAP#15I/O-useittodisplaymessage*KILLOOP: @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 7‰MOVE.L‚TRP15TYP,D1‰GetTRAP#15capabilityflagsinD13‰BTST„#ALT15IO,D1‰TestforAUSTINTRAP#15support.'‰IFƒ„THEN.S‰Ifyes,outputmessage. &PEA‡ENDCRASHˆEndofcrashmessage+1'PEA‡MSGCRASHˆStartof'SYSTEMCRASHED' +TRAP15„BUGTRP15,KILLER6ƒDoPseudoTRAP#15KILLER6:; `Ki3$DC.W†$21Outputstring,noCRorLF #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D0Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 9OUTLOOP2ƒROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter'‹MOVE.L‚A6,-(A7)ŒA6=endofstring+1‹MOVE.L‚A7,-(A7))‹ADD.Lƒ#4,(A7)Startingaddressofstring-‹TRAP15‚BUGTRP15,OUTNXT2„OutputthecharacterOUTNXT2:%‹DC.W„$21‘Outputstring,noCRorLF. PAGE#*ˆTHEDEBUGGERRETURNSCONTROLHERE .‹DBRA„D0,OUTLOOP2‰Outputall8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack.  -BSR‡KILLDLAYˆDelayhereforflashingeffect. %PEA‡ENDBLANKˆEndofblankstring+1#PEA‡MSGBLANKˆStartofblankstring +TRAP15„BUGTRP15,KILLER7ƒDoPseudoTRAP#15KILLER7:$DC.W†$21Outputstring,noCRorLF #*ŠTHEDEBUGGERRETURNSCONTROLHERE -BSR‡KILLDLAYˆDelayhereforflashingeffect. 5BRA‡KILLOOP‰Nowloopbacktocreateflashingeffect. ŠELSE.S @KILLER8:ƒBRA„KILLER8‰NoTRAP#15I/Oavailable,soloopforever. ŠENDI  ‰ENDNN'VMES10 KILLER AF}}  KILLER SA†† ‚  =/*=/*†VMES10.KILLER.AF=/*@=/* Chain file to assemble VMES10.KILLER.SA and M68XXX.KILLER.SA=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to VMES10.KILLER.LS=/*=/IFC \1ƒ=ARGVMES10.KILLER.LS=/ENDIF=ARG \1,VMES10.KILLER.RO=/*D=ASM M68010.M68010.SA/M68XXX.KILLER.SA/VMES10.KILLER.SA,\2,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.KILL.MC=/*ƒ9995.&.STR.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TRAP15.MC=/*ƒ9999.&.KILLEXEC.EQ=/*}=/*=END< NNNNNu‰LIST‰PAGE‰SPCƒ1&*–VMES10-BOARDDEPENDANTKILLERCODE‰SPC1O*********************************************************************************ˆ9999.VMES10.KILLER.SA*2*ˆThismodulecontainsboardspecificroutinesto:.*’1.‚WouldturnonboardfailLEDifavailable.2*’2.‚Containsoutputmessageviatrap#15,code6.NNNNNN~ ‡J-A*ˆItalsocontainsanequatefortheamountoftimestodecrementD*ˆacounterinaloopinordertodelayforapprox.one-halfsecond.*E*ˆEnvironment:‚PartoftheRMS68KexecfortheMotorola68000family."*–Copyright1985byMotorola,Inc.*=< *ˆEntry:„BRAfromboard-independantKILLER(M68XXX.KILLER.SA)**ˆExit:…Noexit.*,*ˆRevisionhistory(addnewchangestotop).*ˆDate†Author‰ChangesF*ˆ--------‚-------------‚---------------------------------------------9*ˆ03/27/86‚JulieHoban„Movedoutputmessageroutinehere.(*ˆ10/03/85‚ChuckSmith„Originalwriting.*O*******************************************************************************‰PAGE ‰SECTION2 *ˆINCLUDEFILES**‰NOLIST‰OPT…CL‰LIST * *ˆEQUATES*HALFSEC‚EQU‡$4FFFF‰PAGE*-*ˆBoardSpecificCode-turnonBoardFailLED*KILLER3: #*ˆNoboardfailLEDfortheVME/10. *C*ˆIfFirmwaredebuggerhasTRAP#15I/O-useittodisplaymessage*KILLOOP: @*ˆTherearetwogeneralTRAP#15formatsforFirmwaredebuggers:;*ˆPrimary(PHOENIX)andAlternate(AUSTIN).‚Duringtheboot8*ˆsequencetheformatispassedbythebuginaregister=*ˆandendsupinSYSPAR(althoughwefoundsomebugsdon'tso"*ˆIPLhaskindlysaveditforus). ‰CLR.LƒD0 7‰MOVE.L‚TRP15TYP,D1‹GetTRAP#15capabilityflagsinD12‰BTST„#T15IO,D1TestforPHOENIXTRAP#15support.,‰IFƒƒTHEN.SŒIfyes,thenoutputmessage.*F*ˆTRAP#15PHOENIXformat-usesA5,A6topointtostring,endstring+1*.‹LEA…MSGCRASH(PC),A5…Startof'SYSTEMCRASHED'&‹LEA…ENDCRASH(PC),A6…Endofstring+1 ,‹TRAP15‚BUGTRP15,KILLER4„DopseudoTRAP#15.KILLER4:)‹DC.W„6“Outputstring,noaddedCRorLF. #*ˆTHEDEBUGGERRETURNSCONTROLHERE$*ˆNowoutputtheaddressofCRASHSAV !‹MOVE.L‚#7,D2Output8characters)‹LEA…CRASHSAV,A0‰MakesureCRASHSAVinA0 ‹MOVE.L‚A0,D30‹SUB.Lƒ#2,A7MakeroomonstackforASCIIchars. 8OUTLOOP„ROL.Lƒ#4,D3GetnextHEXnibblereadytoconvert‹MOVE.B‚D3,D1GetnibbleinD1(‹MOVE.L‚A7,A6A6=whereoutputistogo,‹BSR…HXTOASCIŒConvertHEXtoASCIIcharacter)‹MOVE.L‚A7,A5A5=startofoutputstring-*ŸA6=endofstring+1(setupbyHXTOASCI)‹TRAP15‚BUGTRP15,OUTNEXTOUTNEXT:#‹DC.W„6“Outputstring,noCRorLF. PAGE#*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹DBRA„D2,OUTLOOPŠOutputall8charactersyet?*¦Branchbackifno.‹ADD.Lƒ#2,A7Cleanupstack. -‹BSR…KILLDLAYŒDelayhereforflashingeffect. *‹LEA…MSGBLANK(PC),A5…Startofblankstring,‹LEA…ENDBLANK(PC),A6…Endofblankstring+1 +‹TRAP15‚BUGTRP15,KILLER5„DopseudoTRAP#15KILLER5:#‹DC.W„6“Outputstring,noCRorLF. #*ŠTHEDEBUGGERRETURNSCONTROLHERE -‹BSR…KILLDLAYŒDelayhereforflashingeffect. 5‹BRA…KILLOOPBranchbacktocreateaflashingmessage ‰ELSE.S @KILLER8:ƒBRA„KILLER8‰NoTRAP#15I/Oavailable,soloopforever. ‰ENDI ‰END        NNNN'Z8036 TIMEINT AF££  TIMEINT SA¬¬F  = =/*=/*†Z8036.TIMEINT.AF=/*5=/* Chain file to assemble Z8036.TIMEINT.SA for 68020=/*:=/* If no output argument is specified for the listing the/=/* chain file will default to Z8036.TIMEINT.LS=/*=/IFC \1ƒ=ARGZ8036.TIMEINT.LS=/ENDIF=/*A=ASM M68020.M68020.SA/Z8036.TIMEINT.SA,Z8036.TIMEINT.RO,\1;MRZ=60=/*{ Included files are:=/*ƒ9995.&.STR.EQ=/*ƒ9999.Z8036.Z8036.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.INTERRUP.MC=/*ƒ9999.M68XXX.TIMEINT.AI=/*}=/*=ENDNNNNN›ŠPAGE**ˆINCLUDEFILES**ˆINCLUDE9995.&.STR.EQ*ˆINCLUDE9999.Z8036.Z8036.EQ*ˆINCLUDE9995.&.BAB.EQ*ˆINCLUDE9995.&.PAT.EQ*ˆINCLUDE9995.&.TR1RTCD.EQ*ˆINCLUDE9995.&.INTERRUP.MC*ŠNOLISTŠINCLUDE9995.&.STR.EQŠINCLUDE9999.Z8036.Z8036.EQŠINCLUDE9995.&.BAB.EQŠINCLUDE9995.&.PAT.EQŠINCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.INTERRUP.MCŠLIST@TIMEINTƒIDNTƒ45,0ŒTIMERINTERRUPTHANDLERFORM146818CLOCKCHIP*$*‰COPYRIGHTED1983BYMOTOROLA,INC.*.*†TIMERINTERRUPT-OCCURSONCEEACH15.625MS**•01/18/83‚(SFF5)*•04/07/83‚(7616)*:*•08/15/83‚SteveFranck--ChangedtoexitthroughCOMINT.*ŠSECTIONLEVEL00* ŠXDEFƒTIMEINT ŠXREF.SDATEŠXREF.SPATBEGŠXREF.SPREEMPT_FLAGŠXREF.SPTMADDRŠXREF.STIME_LEFTŠXREF.STIMEOUTŠXREF.STIMESLICŠXREF.STIMINTVŠXREF.STIMINTV4ŠXREF.STINTFLAG ŠXREFƒTRACERŠXREF.STRACFLAG ŠXREFƒBKG_SCHEDULE ŠXREFƒCKEXPA ŠXREFƒCKDELAYŠXREFƒPAT_RM_1ST_NODE**CLRINT„SET„$24CLEARINT= ERRUPT*¥RESUMECOUNTDOWN 0TIMEINTƒMOVEM.LD0-D1/A0-A1,-(A7)SAVEREGISTERS ŠMOVE.LPTMADDR,A0‰TIMERADDRESS/ŠMOVE.B#CLRINT,C1CSR(A0)‚CLEARTIMERINTERRUPT -ŠMOVE.WSR,-(A7)‹ValuetouseinunmasklaterŠDISABLE_INTERRUPTSˆMask /ŠCLR.L‚D1‘SubtractfromTIME_LEFTthenumberof4ŠMOVE.WTIMINTV,D1‰millisecondsbetweentimerticks.ŠSUB.L‚D1,TIME_LEFT‡*ŠMOVE.W(A7)+,SR‹Unmask+ŠTST.L‚TIME_LEFTŠDoweneedtofireanode? *‰INCLUDE9999.M68XXX.TIMEINT.AIŠINCLUDE9999.M68XXX.TIMEINT.AIŠENDN¤GNNNNNNNNNNN> NNNNNNNNNNNNNNNN> NNNNNNNNNNNNNNNN? NNNNNNNNNNNNNNNN? NNNNNNNNNNNNNNNN@ NNNNNNNNNNNNNNNN@ NNNNNNNNNNNNNNNNA NNNNNNNNNNNNNNNNA NNNNNNNNNNNNNNNNB NNNNNNNNNNNNNNNNB NNNNNNNNNNNNNNNNC NNNNNNNNNNNNNNNNC NNNNNNNNNNNNNNNND NNNNNNNNNNNNNNNND NNNNNNNNNNNNNNNNE NNNNNNNNNNNNNNNNE NNNNNNNNNNNNNNNNF NNNNNNNNNNNNNNNNF NNNNNNNNNNNNNNNNG NNNNNNNNNNNNNNNNG NNNNNNNNNNNNNNNNH NNNNNNNNNNNNNNNNH NNNNNNNNNNNNNNNNI NNNNNNNNNNNNNNNNI NNNNNNNNNNNNNNNNJ NNNNNNNNNNNNNNNNJ NNNNNNNNNNNNNNNNK NNNNNNNNNNNNNNNNK NNNNNNNNNNNNNNNNL NNNNNNNNNNNNNNNNL NNNNNNNNNNNNNNNNM NNNNNNNNNNNNNNNNM NNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNO NNNNNNNNNNNNNNNNO NNNNNNNNNNNNNNNN