IMD 1.17: 11/11/2014 13:06:40 82VKXBVERDOS B* VERSADOS/RMS68K OBJECT 4.3 SN=39358 11 OF 11  BT1182VKXBVERDOS 0420¾x->>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…WhenincorporatinganydriversduringSYSGEN„<<<<<<<?*‚>>>>>>>…thatrequirememoryallocatedforthemasperƒ<<<<<<<?*‚>>>>>>>…thedriverpackageinstructions-thisistheƒ<<<<<<<,*‚>>>>>>>…spotthefile(s)gointo!!–<<<<<<<*‚>>>>>>>µ<<<<<<<=*‚>>>>>>>…Thisisalsothespotforcodeforadriver…<<<< <<<>*‚>>>>>>>…that‚requiresothertypesofinitialization,ƒ<<<<<<<0*‚>>>>>>>…such‚asclearinganinterrupt.‘<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>‘MERGEITHERE—<<<<<<<*<*ˆWhenyouwritethecodethatistobemergedhere,wrapit*ˆaroundwiththefollowing:*:*ˆAtthebeginning,withDRVRxOUTreferringtoyourunique*ˆlabel,putthiscode:*'*‹PEA„DRVRxOUT(PC)„IFBUSERROROCCURS,*¢RETURNORGOONTONEXT*¢DRIVER'SINITIALIZATION**‹MOVE.W#'BE',-(A7)…SAVE'BUSERROR'FLAG*9*ˆTheninsertthecodetodowhatyouneedtodoforthis*ˆparticulardriver.**ˆAttheend,putthis:***‹LEA„6(A7),A7ˆREMOVEBUSERRORFROMSTACK*DRVRxOUTƒEQU„**=*ˆInthisway,ifthecodeforonedrivercausesabuserror,.*ˆthecodeforotherdriverswillbeexecuted.*E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<G***********************************************************************‰END éééééé ‰SECTIONƒ8 ŠRTS  ŠENDééééé ééR4VECTTBLƒIDNTƒ5,1RMS68KvectortablefortheVME110.O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***?***…ROUTINE:‚VECTTBL--RMS68KVECTORTABLEFORTHEVME110.Œ******É***J***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***G***‡Copyright1983byMotorola,Inc.‚ThisversionisfortheVME110‚*** ***‡monoboardmicrocomputer.ª******É***E***…FUNCTION:‚ThistablegetslinkedwithRMS68K.‚Whenthesystem…***C***‡boots,theexecinitializerfindsthistableandusesitto‡***:***‡takeovervectorsintheprocessor'svectortable.******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‚Changes@*…--------‚------‚----------------------------------------------*…10/25/83ƒSJF„Initialwriting.*  *E*‚XREF's.‚NotethattherearemanymoreXREF'screatedbyinvocations8*‚oftheVECTORmacro;thoseXREF'sarenotlistedhere.*.ŠXREFƒCOMINTCommoninterrupthandlerroutine.   **‚Includedfiles:*5*‰9995.&.STR.EQThesectionnumbertouseisinhere.*ŠNOLISTŠINCLUDE9995.&.STR.EQŠLISTŠPAGE*E*‚TheVECTORmacrodefinesentriesinthevectortable.‚Theformatis%*‰VECTOR‚,5*‚Therearetwospecialvaluesfor:,*‰0=COMINT(thecommoninterrupthandler).(*‰1=don'ttakeoverthevectoratall.E*‚Entriesinthevectortablemustbeassignedinorder--thatis,theB*‚vector#'sintheVECTORinvocationsmustbeinascendingorder.H*‚InthecasewheretwocontiguousVECTORinvocationsleaveagapinthe[5d<l(K*‚vector#'s,thosevector#'sinthegapwillbeassignedthesamehandler9*‚asthatofthelowervector#ofthepair.‚Forexample,+*‰VECTOR$23,0ŽPoints$23to$27toCOMINT.-*‰VECTOR$28,1ŽLeaves$28to$2Fastheyare.-*‰VECTOR$30,ROUTINE1‡Points$30toROUTINE1.G*‚Ifthegaptobefilledhasasecondparameterotherthan0or1,theJ*‚addressassignedtothevectorwillbeincrementedby2foreachvector:7*‰VECTOR$23,XŽPoints$23toX,$24toX+2,$25toX+4.$*‰VECTOR$26,0ŽPoints$26toCOMINT.'*‚Theendofthelistissignifiedbya*‰DC.Lƒ0F*‚andthesecondparameterofthelastpriorVECTORinvocationwillbeK*‚appliedtoallfurthervectors,upto$FF.‚Again,ifthesecondparameterK*‚wasnota0or1,theaddressassignedtothevectorswillbeincremented#*‚by2foreachvectorinsequence.* VECTOR„MACROŒIFLEƒ\1-VECT_NUM0ŽFAILƒ499ŒVector#'smustbeinascendingorder!ŽMEXITŒENDCŒIFNCƒ'\2','0'ŽIFNCƒ'\2','1'XREFƒ\2ŽENDCŒENDCVECT_NUM„SET„\1 ŒDC.Lƒ\1<<24+\2ŠENDM  * *‚Firstsetupthetableheader.*ŠSECTIONLEVEL00  0ŠDC.Lƒ'!VCT'Dumpeyecatcherfor'VeCtorTable.'2ŠDC.LƒCOMINTPuttheaddressofCOMINTheresothe"*§execinitializercanfindit;he#*§isn'tlinkedwiththeexec,sohe*§wouldn'tknowotherwise.ŠPAGE*)*‚Herearetheactualvectorassignments.I*‚NoticethatwhetherornottheillegalinstructionvectoristakenoverE*‚byRMS68Kiscontrolledbyansysgenparameter.‚DuringRMSGEN,this$*‚parameterissubstitutedsuchthatA*„0=theexecshouldleavetheillegalinstructionvectoralone.?*„1=theexecshouldtakeovertheillegalinstructionvector.J*‚YoumightwanttheexectoleavetheillegalinstructionvectoraloneifI*‚youwanttousetheROMdebugger,sinceitusesillegalinstructionsas*‚breakpoints.* 8VECT_NUM‚SET„1’Initializethevectornumberto1sothat&*§thelowestvectornumberthatcanbe*§setafterwardsis2. ŠVECTOR$02,PROGINT2‡Buserror.#ŠVECTOR$03,PROGINT3‡Addresserror.$*§Ifwe'renotsupposedtotakeover/ŠIFEQƒ\ILLINSTRŠtheillegalinstructionvector,9ŠVECTOR$04,1Žleavetheillegalinstructionvectoralone.ŠENDC–*!*§Ifwearesupposedtotakeover/ŠIFNEƒ\ILLINSTRŠtheillegalinstructionvector,>ŠVECTOR$04,PROGINT4‡takeovertheillegalinstructionvector.ŠENDC–*#ŠVECTOR$05,PROGINT5‡Divisionby0.+*‚insequence„$06,PROGINT6ŠCHKinstruction.-*‚insequence„$07,PROGINT7ŠTRAPVinstruction./*‚insequence„$08,PROGINT8ŠPrivilegeviolation.'ŠVECTOR$09,PROGINT9‡Instructiontrace.8ŠVECTOR$0A,PROGINTA‡Reservedinstructionopcodes$AXXX.>*‚insequence„$0B,PROGINTBŠReservedinstructionopcodes$FXXX.'ŠVECTOR$0C,0Ž($0C-$17gotoCOMINT.)'ŠVECTOR$18,SPURINTˆSpuriousinterrupt.)ŠVECTOR$19,0ŽI/OchannelIRQ1*(COMINT).)ŠVECTOR$1A,0ŽI/OchannelIRQ2*(COMINT).)ŠVECTOR$1B,0ŽI/OchannelIRQ3*(COMINT).)ŠVECTOR$1C,0ŽI/OchannelIRQ4*(COMINT).-ŠVECTOR$1D,0ŽACIA(6850)interrupt(COMINT).)ŠVECTOR$1E,TIMEINTˆPTM‚(6840)interrupt.9ŠVECTOR$1F,1ŽSoftwareabortand/orVMEbusACFAIL*and/or(*§VMEbusSYSFAIL*.‚Weessentiallyignore&*§ACFAIL*andSYSFAIL*,andleavethis'*§vectorpointingtothebug'ssoftware*§abortroutine.ŠVECTOR$20,TRAP0ŠTRAP#0.ŠVECTOR$21,TRAP1ŠTRAP#1.#ŠVECTOR$22,TRPVCT2ˆTRAP#2to#15.'ŠVECTOR$30,0Ž($30-$FFgotoCOMINT.)  !ŠDC.Lƒ0’(Endoftableindicator.)   ŠENDééC‚******************************************************************&‚*SysgencommandfileVME110.RMS.CD *C‚******************************************************************‚*‚INCLUDE…C8OC.SYSPAR.CI‚**‰RMS†=$40000AddresswhereRMS68Kstarts.‚*D‚*‚NowindicatewhetherornottheexecshouldtakeovertheillegalD‚*‚instructionvector.‚IfyouaregoingtobeusingtheROMdebuggerF‚*‚tosetbreakpoints,thenyou'llwanttheillegalinstructionvectorC‚*‚leftasthedebuggerhasitset.‚InanenvironmentwheretheROMC‚*‚debuggerwillnotbeused,youwillwantRMS68Ktofieldillegal‚*‚instructionsasexceptions.‚*.‰ILLINSTR=1’Illegalinstructionvectorflag:#‚*¨0=RMSshouldnottakeitover.‚*¨1=RMSshould…takeitover.N‚*****************************************************************************‚**‚*ˆNowwegeneratetheRMS68Kloadmodule.‚*N‚*****************************************************************************‚*‚*‚*‚*(‚*‚NowcreateaVECTTBL forthissystem.‚*‰SUBS†VME110.VECTTBL.AG:‰ASM‡VME110.VECTTBL.AG,VME110.VECTTBL.RO,VME110.VECTTBL.TF‚*‚*‚Nowlinkitalltogether.‚*‰RMS0LO‚=\RMS‰RMS0HI‚=\RMS+$FF‰RMS2LO‚=\RMS+$100‰SUBS†VME110.RMS.LG‚LINKˆVME110.RMS.LG‚=DEL.&.SYSPAR.RO(‚=COPY‡VME110.VECTTBL.TF,VME110.RMS.LL;A ‚=COPY‡SYSGEN.TF,VME110.RMS.LL;A‚=DELƒ*.*.TF;Y‚*‚END‰ éét.=/*=/*†Importantnote:5=/*†TheorderoftheINPUTmodulesforthisLINKmust=/*†beasspecifiedbelow.=/*=LINK ,\LINK2TF,\LINKLS;IXMHRINPUT M68XXX.INIT.ROINPUT VME110.INITIO1.ROEND=ENDééééééé} =/*=/*†Importantnote:5=/*†TheorderoftheINPUTmodulesforthisLINKmust=/*†beasspecifiedbelow.=/*=LINK ,INIT,\LINKLS;HAMIXSSEGMENT .INT:8 \INTSTRINPUT \LINK1TFINPUT VME110.INITIO2.ROINPUT M68XXX.INITDAT.ROINPUT C8OC.SYSPAR.ROEND=END éééééé† =/*7=/*†VME110.RMS.LG--RMSGENlinkchainfileforRMS68K.=/*=/*2=LINK ,VME110.RMS.LO,VME110.RMS.LL;H,M,I,X,-U,Z=40SEGRMS0:0\RMS0LO,\RMS0HISEGRMS2:2,3,4,5,6,7,15‚\RMS2LOINPUTˆ&.SYSPAR.ROINPUTƒM68XXX.RMS.ROINPUTƒVME110.VECTTBL.ROIN†M68XXX.AKRQST.ROIN†M68XXX.ASQALOC.ROIN†M68XXX.ASQEVENT.ROIN†M68XXX.ASQFREE.ROIN†M68XXX.ASQREAD.ROIN†M68XXX.ASQSTATS.ROIN†M68XXX.ASRINT.ROIN†M68XXX.ATSEM.ROIN†M68XXX.BKG.ROIN†M68XXX.CDIR.ROIN†M68XXX.CISR.ROIN†M68XXX.CKDELAY.ROIN†M68XXX.CKEXPAT.ROIN†M68XXX.CMR.ROIN†M68000.COMINT.ROIN†M68XXX.DCLSHAR.ROIN†M68XXX.DELAY.ROIN†M68XXX.DEMON.ROIN†M68XXX.DERQST.ROIN†M68XXX.DESEM.ROIN†M68000.DISPATCH.ROIN†M68XXX.DSEGX.ROIN†M68XXX.DSERVE.ROIN†M68XXX.DSRVX.ROIN†M68XXX.EQDQ.ROIN†M68XXX.EXABRT.ROIN†M68000.EXCEPT.ROIN†M68XXX.EXMMSK.ROIN†M68XXX.EXMON.ROIN†M68XXX.EXMONVR.ROIN†M68XXX.EXQEVENT.ROIN†M68XXX.EXRQPA.ROIN†M68XXX.FNDGSEG.ROIN†M68XXX.FNDTSEG.ROIN†M68XXX.FNDUSEM.ROIN†M68XXX.GETTCB.ROIN†M68XXX.GTDTIM.ROIN†VME110.KILLER.ROIN‡NOMMU.LOADMMU.ROIN†M68XXX.LOGPHY.ROIN†M68XXX.PAGEALOC.ROIN†M68XXX.PAGEFREE.ROIN†M68XXX.PAUSE.ROIN†M68XXX.PSTATE.ROIN†M68000.PVSEM.ROIN†M68XXX.RCVSA.ROIN‡M6840.RDTIMER.ROIN†M68XXX.READY.ROIN†M68XXX.RELINQ.ROIN†M68XXX.RESUME.ROIN†M68XXX.REXMON.ROIN†M68XXX.RQSTPA.ROIN†M68XXX.RSTATE.ROIN†M68XXX.RTEVENT.ROIN†M68XXX.SEGALOC.ROIN†M68XXX.SEGDEAL.ROIN†M68XXX.SEGSHAR.ROIN†M68XXX.SELFTEST.ROIN†M68XXX.SERVE.ROIN†M68XXX.SETPRI.ROIN†M68XXX.SGSEM.ROIN†M68000.SINT.ROIN†M68XXX.SNAPTRAC.ROIN†M68XXX.SPURINT.ROIN†M68XXX.STDTIM.ROIN†M68000.SUPER.ROIN†M68XXX.SUSPEND.ROIN†M68XXX.TABLE1.ROIN†M68XXX.TERM.ROIN†M68XXX.TFRSEG.ROIN‡M6840.TIMEINT.ROIN†M68XXX.TRACER.ROIN†M68000.TRAP0.ROIN†M68000.TRAP1.ROIN†M68XXX.TSKATTR.ROIN†M68XXX.TSKBORN.ROIN†M68XXX.TSKINFO.ROIN†M68XXX.TSKMOVE.ROIN†M68XXX.TSKSTART.ROIN†M68XXX.TSKWAIT.ROIN†M68XXX.USERVECT.ROIN†M68XXX.WAKEUP.RO\˜ IN†M68XXX.WTEVENT.ROINPUTƒM68XXX.RMSPATCH.ROEND=ENDéééééééO1VECTTBL ASYST'VME110 XVECTTBLAG!ƒRMS68K vector table for the VME110.Š2pPROGINT2 pPROGINT3 pPROGINT4 pPROGINT5 pPROGINT9 pPROGINTA pTIMEINT pSPURINT pTRAP0 pTRAP1 pCOMINT pTRPVCT2 "Xr3?p!VCT(,,,,, , ,,, ,!,"04éééééé  'VM01 RMS CDµµ4VECTTBL AG¾¾ŽINITIO AG×׃RMS LGðð`INT LG VECTTBL RO  C‚******************************************************************$‚*SysgencommandfileVM01.RMS.CD *C‚******************************************************************‚*‚INCLUDE…C8OC.SYSPAR.CI‚*(‰RMS†=$E00AddresswhereRMS68Kstarts.‚*‚*‚NOTE:;‚*‚TherearetwoversionsofVM01boardavailable.‚Theonly?‚*‚differenceisthesizeofon-boardRAM.VM01-1has32Kbytes,A‚*‚VM01-2has64Kbytes.‚AllVM01relatedfilesareset-upforthe?‚*‚64Kversion.Forthe32kversionsettheaboveRMSparameter9‚*‚to$10E00.RMSmustbelinkedtoruninoff-boardram.‚*D‚*‚NowindicatewhetherornottheexecshouldtakeovertheillegalD‚*‚instructionvector.‚IfyouaregoingtobeusingtheROMdebuggerF‚*‚tosetbreakpoints,thenyou'llwanttheillegalinstructionvectorC‚*‚leftasthedebuggerhasitset.‚InanenvironmentwheretheROMC‚*‚debuggerwillnotbeused,youwillwantRMS68Ktofieldillegal‚*‚instructionsasexceptions.‚*.‰ILLINSTR=1’Illegalinstructionvectorflag:#‚*¨0=RMSshouldnottakeitover.‚*¨1=RMSshould…takeitover.N‚*****************************************************************************‚**‚*ˆNowwegeneratetheRMS68Kloadmodule.‚*N‚*****************************************************************************‚*‚*‚*‚*(‚*‚NowcreateaVECTTBLforthissystem.‚*‰SUBS†VM01.VECTTBL.AG4‰ASM‡VM01.VECTTBL.AG,VM01.VECTTBL.RO,VM01.VECTTBL.TF‚*‚*‚Nowlinkitalltogether.‚*‰RMS0LO‚=\RMS‰RMS0HI‚=\RMS+$FF‰RMS2LO‚=\RMS+$100‰SUBS†VM01.RMS.LG‚LINKˆVM01.RMS.LG‚=DEL.&.SYSPAR.RO$‚=COPY‡VM01.VECTTBL.TF,VM01.RMS.LL;A‚=COPY‡SYSGEN.TF,VM01.RMS.LL;A‚=DELƒ*.*.TF;Y‚*‚END‰ é­52VECTTBLƒIDNTƒ5,1RMS68KvectortablefortheVM01.O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***=***…ROUTINE:‚VECTTBL--RMS68KVECTORTABLEFORTHEVM01.Ž******É***J***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***E***‡Copyright1983byMotorola,Inc.‚Thisversionis fortheVM01„*** ***‡monoboardmicrocomputer.ª******É***E***…FUNCTION:‚ThistablegetslinkedwithRMS68K.‚Whenthesystem…***C***‡boots,theexecinitializerfindsthistableandusesitto‡***:***‡takeovervectorsintheprocessor'svectortable.******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------+*…10/25/83‚DickVanderlinRevisionforVM01(*…10/4/83‚SteveFranckƒInitialwriting.*  *E*‚XREF's.‚NotethattherearemanymoreXREF'screatedbyinvocations8*‚oftheVECTORmacro;thoseXREF'sarenotlistedhere.*.ŠXREFƒCOMINTCommoninterrupthandlerroutine.   **‚Includedfiles:*5*‰9995.&.STR.EQThesectionnumbertouseisinhere.*ŠNOLISTŠINCLUDE9995.&.STR.EQŠLISTŠPAGE*E*‚TheVECTORmacrodefinesentriesinthevectortable.‚Theformatis%*‰VECTOR‚,5*‚Therearetwospecialvaluesfor:,*‰0=COMINT(thecommoninterrupthandler).(*‰1=don'ttakeoverthevectoratall.E*‚Entriesinthevectortablemustbeassignedinorder--thatis,theB*‚vector#'sintheVECTORinvocationsmustbeinascendingorder.¶5¿9Ç!H*‚InthecasewheretwocontiguousVECTORinvocationsleaveagapintheK*‚vector#'s,thosevector#'sinthegapwillbeassignedthesamehandler9*‚asthatofthelowervector#ofthepair.‚Forexample,+*‰VECTOR$23,0ŽPoints$23to$27toCOMINT.-*‰VECTOR$28,1ŽLeaves$28to$2Fastheyare.-*‰VECTOR$30,ROUTINE1‡Points$30toROUTINE1.G*‚Ifthegaptobefilledhasasecondparameterotherthan0or1,theJ*‚addressassignedtothevectorwillbeincrementedby2foreachvector:7*‰VECTOR$23,XŽPoints$23toX,$24toX+2,$25toX+4.$*‰VECTOR$26,0ŽPoints$26toCOMINT.'*‚Theendofthelistissignifiedbya*‰DC.Lƒ0F*‚andthesecondparameterofthelastpriorVECTORinvocationwillbeK*‚appliedtoallfurthervectors,upto$FF.‚Again,ifthesecondparameterK*‚wasnota0or1,theaddressassignedtothevectorswillbeincremented#*‚by2foreachvectorinsequence.* VECTOR„MACROŒIFLEƒ\1-VECT_NUM0ŽFAILƒ499ŒVector#'smustbeinascendingorder!ŽMEXITŒENDCŒIFNCƒ'\2','0'ŽIFNCƒ'\2','1'XREFƒ\2ŽENDCŒENDCVECT_NUM„SET„\1ŒDC.Lƒ\1<<24+\2ŠENDM  * *‚Firstsetupthetableheader.*ŠSECTIONLEVEL00  0ŠDC.Lƒ'!VCT'Dumpeyecatcherfor'VeCtorTable.'2ŠDC.LƒCOMINTPuttheaddressofCOMINTheresothe"*§execinitializercanfindit;he#*§isn'tlinkedwiththeexec,sohe*§wouldn'tknowotherwise.ŠPAGE*)*‚Herearetheactualvectorassignments.I*‚NoticethatwhetherornottheillegalinstructionvectoristakenoverE*‚byRMS68Kiscontrolledbyansysgenparameter.‚DuringRMSGEN,this$*‚parameterissubstitutedsuchthatA*„0=theexecshouldleavetheillegalinstructionvectoralone.?*„1=theexecshouldtakeovertheillegalinstructionvector.J*‚YoumightwanttheexectoleavetheillegalinstructionvectoraloneifI*‚youwanttousetheROMdebugger,sinceitusesillegalinstructionsas*‚breakpoints.* 8VECT_NUM‚SET„1’Initializethevectornumberto1sothat&*§thelowestvectornumberthatcanbe*§setafterwardsis2. ŠVECTOR$02,PROGINT2‡Buserror.#ŠVECTOR$03,PROGINT3‡Addresserror.$*§Ifwe'renotsupposedtotakeover/ŠIFEQƒ\ILLINSTRŠtheillegalinstructionvector,9ŠVECTOR$04,1Žleavetheil legalinstructionvectoralone.ŠENDC–*!*§Ifwearesupposedtotakeover/ŠIFNEƒ\ILLINSTRŠtheillegalinstructionvector,>ŠVECTOR$04,PROGINT4‡takeovertheillegalinstructionvector.ŠENDC–*#ŠVECTOR$05,PROGINT5‡Divisionby0.+*‚insequence„$06,PROGINT6ŠCHKinstruction.-*‚insequence„$07,PROGINT7ŠTRAPVinstruction./*‚insequence„$08,PROGINT8ŠPrivilegeviolation.'ŠVECTOR$09,PROGINT9‡Instructiontrace.8ŠVECTOR$0A,PROGINTA‡Reservedinstructionopcodes$AXXX.>*‚insequence„$0B,PROGINTBŠReservedinstructionopcodes$FXXX.'ŠVECTOR$0C,0Ž($0C-$17gotoCOMINT.)'ŠVECTOR$18,SPURINTˆSpuriousinterrupt.'ŠVECTOR$19,0Ž($19-$1BgotoCOMINT.)*ŠVECTOR$1C,TIMEINTˆM6840timerinterrupt.'ŠVECTOR$1D,0Ž($1D-$1EgotoCOMINT.)8ŠVECTOR$1F,1ŽSoftwareabort(leaveitpointingtobug).ŠVECTOR$20,TRAP0ŠTRAP#0.ŠVECTOR$21,TRAP1ŠTRAP#1.#ŠVECTOR$22,TRPVCT2ˆTRAP#2to#15.'ŠVECTOR$30,0Ž($30-$8CgotoCOMINT.)'ŠVECTOR$95,0Ž($95-$FFgotoCOMINT.)!ŠDC.Lƒ0’(Endoftableindicator.)ŠENDéé‰INCLUDE9999.M6840.M6840.EQ ‰SECTIONƒ8‰PAGE*J*‚ThiscodeisneededtosatisfyINIT,whichisboard-independentandmust/*‚calluponustodotheboard-dependentstuff.**„InitializetheMMU.*5ŠXDEFƒINITMMUŒIt'seasyforustoinitializetheMMU,$INITMMUƒRTS—sincewedon'thaveone. **„Startthetimerrunning.*+ŠXREF.SCRASHSAV‹ThesearefoundinSYSPAR.ŠXREF.SEXCSTACKŠXREF.SPTMADDRŠXREF.STIMESLICŠXREF.STIMINTVŠXREF.STIMINTV4 &ŠXREFƒCLOCKFRQ‹ThesearefoundinIND. ŠXREFƒTIMERAŠXREFƒTIMINTVA ŠXREFƒTIMSLIC 1ŠXDEFƒTIMERSTŒEntrypointtoSTARTTIMERroutine.TIMERSTDŠMOVE.LTIMSLIC(PC),TIMESLIC‚Setthesysgenparameterwhichdictates%*§the#oftimerticspertimeslice.'‰MOVE.LTIMERA(PC),A1‡GETTIMERADDRESS#‰MOVE.LA1,PTMADDRŠSAVEITFOREXEC$‰BEQ.S‚TIMER_EXITŠBRANCHIFNOTIMER)‰PEA„TIMERBE(PC)‰WHERETOGOONBUSERROR$‰MOVE.W#'BE',-(A7)‰SETBUSERRFLAG3‰MOVE.B#$01,CR2SR(A1)†ALLOWWRITETOCONTROLREG1&‰MOVE.B#$01,CR13(A1)‡ALLTIMERSRESET$‰MOVE.L#CLOCKFRQ,D0ˆCLOCKFREQUENCY‰DIVUƒ#4,D0DIVIDEBY4#‰SUB.W‚#1,D0CLOCKINTERRUPTSAT-1*‰MOVE.WTIMINTVA(PC),D1…INTERRUPTINTERVAL ‰MOVE.WD1,TIMINTVŠSAVEFOREXEC‰MULUƒ#4,D1MULTIPLYBY4*‰SUB.W‚#1,D1SUBTRACT1-TIMERGOESTO-1!‰MOVE.WD1,TIMINTV4‰SAVEFOREXEC‰LSL.W‚#8,D1PUTINHIGHBYTE)‰ADD.W‚D1,D0VALUEFORTIMER3(2HALVES)‰MOVEP‚D0,MSBT3(A1)ˆSETTIMER34‰MOVE.W#256,D0VALUEFORTIMER1(OVERFLOWCOUNTER)‰MOVEP‚D0,MSBT1(A1)ˆSETTIMER18‰MOVE.B#$00,CR2SR(A1)†ALLOWWRITETOCONTROLREGISTER3;‰MOVE.B#$C6,CR13(A1)‡T3--INTERNALCLOCK,INTERRUPTENABLED,*£OUTPUTENABLED,8-BITMODE8‰MOVE.B#$01,CR2SR(A1)†ALLOWWRITETOCONTROLREGISTER1;‰MOVE.B#$00,CR13(A1)‡T1--EXTERNALCLOCK,ENABLEALLTIMERS3‰ADDQ.L#6,SPEverythingwentOK;justgetthatbus4‰BRA.S‚TIMER_EXITŠerrorjunkoffthestackandexit.*;TIMERBE‚MOVE.L‚#CRASHSAV,PTMADDR‚USEDUMPPOINTERFORTIMER TIMER_EXITRTS–ReturntoINIT.ŠPAGE ‰SECTIONƒ8Ï@Ø<à .***********************************************(*†SUBROUTINEUSEDTOINITIALIZEIOPORTS*;*ˆTHISROUTINEMUSTBEMODIFIEDFORSYSTEMBEINGINITIALZED* ‰XDEF„INITIO INITIOƒEQU…**/*…INITIALIZESERIALPORT2(FORVERSAMODULE01)*ŒOR‚IPCFOREXORMACS*+‰PEA„INITIOR(PC)„RETURNIFBUSERROROCCURS)‰MOVE.W#'BE',-(A7)„SAVE'BUSERROR'FLAG$‰TST.B‚$F7001FˆREADCOMMANDREGISTER+‰MOVE.B#$4E,$F7001DƒINITMODEREG1PORT2+‰MOVE.B#$3E,$F7001DƒINITMODEREG2PORT25‰MOVE.B#$36,$F7001FƒRESETANDENABLERECEIVERPORT2$‰TST.B…$F70017ƒREADCOMMANDREGISTER+‰MOVE.B„#$4E,$F70015ˆINITMODEREG1PORT1+‰MOVE.B„#$3E,$F70015ˆINITMODEREG2PORT15‰MOVE.B„#$36,$F70017‡RESETANDENABLERECEIVERPORT13‰MOVE.B#$BF,$F70030ƒENABLEVMINTERRUPTSFORPORT2)‰LEA„6(A7),A7‡REMOVEBUSERRORFROMSTACK INITIOR‚RTS‰PAGEE*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…WhenincorporatinganydriversduringSYSGEN„<<<<<<<?*‚>>>>>>>…thatrequirememoryallocatedforthemasperƒ<<<<<<<?*‚>>>>>>>…thedriverpackageinstructions-thisistheƒ<<<<<<<,*‚>>>>>>>…spotthefile(s)gointo!!–<<<<<<<*‚>>>>>>>µ<<<<<<<=*‚>>>>>>>…Thisisalsothespotforcodeforadriver…<<<<<<<>*‚>>>>>>>…that‚requiresothertypesofinitialization,ƒ<<<<<<<0*‚>>>>>>>…such‚asclearinganinterrupt.‘<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>‘MERGEITHERE—<<<<<<<*<*ˆWhenyouwritethecodethatistobemergedhere,wrapit*ˆaroundwiththefollowing:*:*ˆAtthebeginning,withDRVRxOUTreferringtoyourunique*ˆlabel,putthiscode:*'*‹PEA„DRVRxOUT(PC)„IFBUSERROROCCURS,*¢RETURNORGOONTONEXT*¢DRIVER'SINITIALIZATION**‹MOVE.W#'BE',-(A7)…SAVE'BUSERROR'FLAG*9*ˆTheninsertthecodetodowhatyouneedtodoforthis*ˆparticulardriver.**ˆAttheend,putthis:***‹LEA„6(A7),A7ˆREMOVEBUSERRORFROMSTACK*DRVRxOUTƒEQU„**=*ˆInthisway,ifthecodeforonedrivercausesabuserror,.*ˆthecodeforotherdriverswillbeexecuted.*E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<G*********************************************************************** ŠRTS‰ENDéééééé =/*5=/*†VM01.RMS.LG--RMSGENlinkchainfileforRMS68K.=/*=/*.=LINK ,VM01.RMS.LO,VM01.RMS.LL;H,M,I,X,-U,Z=40SEGRMS0:0\RMS0LO,\RMS0HISEGRMS2:2,3,4,5,6,7,15‚\RMS2LOINPUTƒ&.SYSPAR.ROINPUTƒM68XXX.RMS.ROINPUT…VM01.VECTTBL.ROIN†M68XXX.AKRQST.ROIN†M68XXX.ASQALOC.ROIN†M68XXX.ASQEVENT.ROIN†M68XXX.ASQFREE.ROIN†M68XXX.ASQREAD.ROIN†M68XXX.ASQSTATS.ROIN†M68XXX.ASRINT.ROIN†M68XXX.ATSEM.ROIN†M68XXX.BKG.ROIN†M68XXX.CDIR.ROIN†M68XXX.CISR.ROIN†M68XXX.CKDELAY.ROIN†M68XXX.CKEXPAT.ROIN†M68XXX.CMR.ROIN†M68000.COMINT.ROIN†M68XXX.DCLSHAR.ROIN†M68XXX.DELAY.ROIN†M68XXX.DEMON.ROIN†M68XXX.DERQST.ROIN†M68XXX.DESEM.ROIN†M68000.DISPATCH.ROIN†M68XXX.DSEGX.ROIN†M68XXX.DSERVE.ROIN†M68XXX.DSRVX.ROIN†M68XXX.EQDQ.ROIN†M68XXX.EXABRT.ROIN†M68000.EXCEPT.ROIN†M68XXX.EXMMSK.ROIN†M68XXX.EXMON.ROIN†M68XXX.EXMONVR.ROIN†M68XXX.EXQEVENT.ROIN†M68XXX.EXRQPA.ROIN†M68XXX.FNDGSEG.ROIN†M68XXX.FNDTSEG.ROIN†M68XXX.FNDUSEM.ROIN†M68XXX.GETTCB.ROIN†M68XXX.GTDTIM.ROIN†M68XXX.KILLER.ROIN‡NOMMU.LOADMMU.ROIN†M68XXX.LOGPHY.ROIN†M68XXX.PAGEALOC.ROIN†M68XXX.PAGEFREE.ROIN†M68XXX.PAUSE.ROIN†M68XXX.POWRFAIL.ROIN†M68XXX.PSTATE.ROIN†M68000.PVSEM.ROIN†M68XXX.RCVSA.ROIN‡M6840.RDTIMER.ROIN†M68XXX.READY.ROIN†M68XXX.RELINQ.ROIN†M68XXX.RESUME.ROIN†M68XXX.REXMON.ROIN†M68XXX.RQSTPA.ROIN†M68XXX.RSTATE.ROIN†M68XXX.RTEVENT.ROIN†M68XXX.SEGALOC.ROIN†M68XXX.SEGDEAL.ROIN†M68XXX.SEGSHAR.ROIN†M68XXX.SELFTEST.ROIN†M68XXX.SERVE.ROIN†M68XXX.SETPRI.ROIN†M68XXX.SGSEM.ROIN†M68000.SINT.ROIN†M68XXX.SNAPTRAC.ROIN†M68XXX.SPURINT.ROIN†M68XXX.STDTIM.ROIN†M68000.SUPER.ROIN†M68XXX.SUSPEND.ROIN†M68XXX.TABLE1.ROIN†M68XXX.TERM.ROIN†M68XXX.TFRSEG.ROIN‡M6840.TIMEINT.ROIN†M68XXX.TRACER.ROIN†M68000.TRAP0.ROIN†M68000.TRAP1.ROIN†M68XXX.TSKATTR.ROIN†M68XXX.TSKBORN.ROIN†M68XXX.TSKINFO.ROIN†M68XXX.TSKMOVE.ROIN†M68XXX.TSKSTART.ROIN†M68XXX.TSKWAIT.ROIN†M68XXX.USERVECT.ROIN†M68XXX.WAKEUP.ROè]ñIN†M68XXX.WTEVENT.ROINPUTƒM68XXX.RMSPATCH.ROEND=ENDéééééé é=/*=/*†Importantnote:5=/*†TheorderoftheINPUTmodulesforthisLINKmust=/*†beasspecifiedbelow.=/*=LINK ,INIT,\LINKLS;HAMIXSSEGMENT .INT:8 \INTSTRINPUT M68XXX.INIT.ROINPUT VM01.INITIO.ROINPUT M68XXX.INITDAT.ROINPUT C8OC.SYSPAR.ROEND=ENDééééééù M1VECTTBL ASYST'VM01 XVECTTBLAG7%!ƒRMS68K vector table for the VM01.Š2pPROGINT2 pPROGINT3 pPROGINT4 pPROGINT5 pPROGINT9 pPROGINTA pTIMEINT pSPURINT pTRAP0 pTRAP1 pCOMINT pTRPVCT2 "Pj3?’!VCT(,,,,, , ,,, ,!,"0•4éééé éé'VM02 RMS CD-VECTTBL AG   INITIO1 AG99 INITIO2 AGRR9INITIO AG[[ÖRMS LG||`INT1 LG INT2 LG–– VECTTBL ROŸŸC‚******************************************************************$‚*SysgencommandfileVM02.RMS.CD *C‚******************************************************************‚*‚INCLUDE…C8OC.SYSPAR.CI‚*(‰RMS†=$E00AddresswhereRMS68Kstarts.‚*D‚*‚NowindicatewhetherornottheexecshouldtakeovertheillegalD‚*‚instructionvector.‚IfyouaregoingtobeusingtheROMdebuggerF‚*‚tosetbreakpoints,thenyou'llwanttheillegalinstructionvectorC‚*‚leftasthedebuggerhasitset.‚InanenvironmentwheretheROMC‚*‚debuggerwillnotbeused,youwillwantRMS68Ktofieldillegal‚*‚instructionsasexceptions.‚*.‰ILLINSTR=1’Illegalinstructionvectorflag:#‚*¨0=RMSshouldnottakeitover.‚*¨1=RMSshould…takeitover.N‚*****************************************************************************‚**‚*ˆNowwegeneratetheRMS68Kloadmodule.‚*N‚*****************************************************************************‚*‚*‚*‚*(‚*‚NowcreateaVECTTBLforthissystem.‚*‰SUBS†VM02.VECTTBL.AG4‰ASM‡VM02.VECTTBL.AG,VM02.VECTTBL.RO,VM02.VECTTBL.TF‚*‚*‚Nowlinkitalltogether.‚*‰RMS0LO‚=\RMS‰RMS0HI‚=\RMS+$FF‰RMS2LO‚=\RMS+$100‰SUBS†VM02.RMS.LG‚LINKˆVM02.RMS.LG‚=DEL.&.SYSPAR.RO$‚=COPY‡VM02.VECTTBL.TF,VM02.RMS.LL;A‚=COPY‡SYSGEN.TF,VM02.RMS.LL;A‚=DELƒ*.*.TF;Y‚*‚END‰ éé.  2VECTTBLƒIDNTƒ5,1RMS68KvectortablefortheVM02.O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***=***…ROUTINE:‚VECTTBL--RMS68KVECTORTABLEFORTHEVM02.Ž******É***J***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***E***‡Copyright1983byMotorola,Inc.‚ThisversionisfortheVM02„*** ***‡monoboardmicrocomputer.ª******É***E***…FUNCTION:‚ThistablegetslinkedwithRMS68K.‚Whenthesystem…***C***‡boots,theexecinitializerfindsthistableandusesitto‡***:***‡takeovervectorsintheprocessor'svectortable.******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------(*…10/4/83‚SteveFranckƒInitialwriting.*  *E*‚XREF's.‚NotethattherearemanymoreXREF'screatedbyinvocations8*‚oftheVECTORmacro;thoseXREF'sarenotlistedhere.*.ŠXREFƒCOMINTCommoninterrupthandlerroutine.   **‚Includedfiles:*5*‰9995.&.STR.EQThesectionnumbertouseisinhere.*ŠNOLISTŠINCLUDE9995.&.STR.EQŠLISTŠPAGE*E*‚TheVECTORmacrodefinesentriesinthevectortable.‚Theformatis%*‰VECTOR‚,5*‚Therearetwospecialvaluesfor:,*‰0=COMINT(thecommoninterrupthandler).(*‰1=don'ttakeoverthevectoratall.E*‚Entriesinthevectortablemustbeassignedinorder--thatis,theB*‚vector#'sintheVECTORinvocationsmustbeinascendingorder.H*‚InthecasewheretwocontiguousVECTORinvocationsleaveagapinthe5!<)0K*‚vector#'s,thosevector#'sinthegapwillbeassignedthesamehandler9*‚asthatofthelowervector#ofthepair.‚Forexample,+*‰VECTOR$23,0ŽPoints$23to$27toCOMINT.-*‰VECTOR$28,1ŽLeaves$28to$2Fastheyare.-*‰VECTOR$30,ROUTINE1‡Points$30toROUTINE1.G*‚Ifthegaptobefilledhasasecondparameterotherthan0or1,theJ*‚addressassignedtothevectorwillbeincrementedby2foreachvector:7*‰VECTOR$23,XŽPoints$23toX,$24toX+2,$25toX+4.$*‰VECTOR$26,0ŽPoints$26toCOMINT.'*‚Theendofthelistissignifiedbya*‰DC.Lƒ0F*‚andthesecondparameterofthelastpriorVECTORinvocationwillbeK*‚appliedtoallfurthervectors,upto$FF.‚Again,ifthesecondparameterK*‚wasnota0or1,theaddressassignedtothevectorswillbeincremented#*‚by2foreachvectorinsequence.* VECTOR„MACROŒIFLEƒ\1-VECT_NUM0ŽFAILƒ499ŒVector#'smustbeinascendingorder!ŽMEXITŒENDCŒIFNCƒ'\2','0'ŽIFNCƒ'\2','1'XREFƒ\2ŽENDCŒENDCVECT_NUM„SET„\1ŒDC.Lƒ\1<<24+\2ŠENDM  * *‚Firstsetupthetableheader.*ŠSECTIONLEVEL00  0ŠDC.Lƒ'!VCT'Dumpeyecatcherfor'VeCtorTable.'2ŠDC.LƒCOMINTPuttheaddressofCOMINTheresothe"*§execinitializercanfindit;he#*§isn'tlinkedwiththeexec,sohe*§wouldn'tknowotherwise.ŠPAGE*)*‚Herearetheactualvectorassignments.I*‚NoticethatwhetherornottheillegalinstructionvectoristakenoverE*‚byRMS68Kiscontrolledbyansysgenparameter.‚DuringRMSGEN,this$*‚parameterissubstitutedsuchthatA*„0=theexecshouldleavetheillegalinstructionvectoralone.?*„1=theexecshouldtakeovertheillegalinstructionvector.J*‚YoumightwanttheexectoleavetheillegalinstructionvectoraloneifI*‚youwa  nttousetheROMdebugger,sinceitusesillegalinstructionsas*‚breakpoints.* 8VECT_NUM‚SET„1’Initializethevectornumberto1sothat&*§thelowestvectornumberthatcanbe*§setafterwardsis2. ŠVECTOR$02,PROGINT2‡Buserror.#ŠVECTOR$03,PROGINT3‡Addresserror.$*§Ifwe'renotsupposedtotakeover/ŠIFEQƒ\ILLINSTRŠtheillegalinstructionvector,9ŠVECTOR$04,1Žleavetheillegalinstructionvectoralone.ŠENDC–*!*§Ifwearesupposedtotakeover/ŠIFNEƒ\ILLINSTRŠtheillegalinstructionvector,>ŠVECTOR$04,PROGINT4‡takeovertheillegalinstructionvector.ŠENDC–*#ŠVECTOR$05,PROGINT5‡Divisionby0.+*‚insequence„$06,PROGINT6ŠCHKinstruction.-*‚insequence„$07,PROGINT7ŠTRAPVinstruction./*‚insequence„$08,PROGINT8ŠPrivilegeviolation.'ŠVECTOR$09,PROGINT9‡Instructiontrace.8ŠVECTOR$0A,PROGINTA‡Reservedinstructionopcodes$AXXX.>*‚insequence„$0B,PROGINTBŠReservedinstructionopcodes$FXXX.'ŠVECTOR$0C,0Ž($0C-$17gotoCOMINT.)'ŠVECTOR$18,SPURINTˆSpuriousinterrupt.'ŠVECTOR$19,0Ž($19-$1BgotoCOMINT.)*ŠVECTOR$1C,TIMEINTˆM6840timerinterrupt.'ŠVECTOR$1D,0Ž($1D-$1EgotoCOMINT.)8ŠVECTOR$1F,1ŽSoftwareabort(leaveitpointingtobug).ŠVECTOR$20,TRAP0ŠTRAP#0.ŠVECTOR$21,TRAP1ŠTRAP#1.#ŠVECTOR$22,TRPVCT2ˆTRAP#2to#15.'ŠVECTOR$30,0Ž($30-$8CgotoCOMINT.)/ŠVECTOR$8D,POWRFAIL‡ACFAIL*fromtheVERSAbus.9ŠVECTOR$8E,KILLER‰ThisvectoriswhatyouassigntoVM02$*§interruptsourcesyoudon'texpect#*§togooff;ittakesustoKILLER.)ŠVECTOR$8F,0ŽI/OchannelIRQ1*(COMINT).)ŠVECTOR$90,0ŽI/OchannelIRQ2*(COMINT).)ŠVECTOR$91,0ŽI/OchannelIRQ3*(COMINT).)ŠVECTOR$92,0ŽI/OchannelIRQ4*(COMINT).<ŠVECTOR$93,KILLER‰BusClearinterruptfromVERSAbusI/F.‚We%*§shouldn'tbegettingthis,sincewe'*§useblocktransfermodeonlyifthere%*§arenootherpotentialbusmasters.0ŠVECTOR$94,CMRSFAIL‡SYSFAIL*fromtheVERSAbus. 'ŠVECTOR$95,0Ž($95-$FFgotoCOMINT.)  !ŠDC.Lƒ0’(Endoftableindicator.)   ŠEND‰INCLUDE9999.M6840.M6840.EQ ‰SECTIONƒ8‰XREF†VM02TBLFoundinINITIO2‰PAGE*J*‚ThiscodeisneededtosatisfyINIT,whichisboard-independentandmust/*‚calluponustodotheboard-dependentstuff.**„InitializetheMMU.*5ŠXDEFƒINITMMUŒIt'seasyforustoinitializetheMMU,$INITMMUƒRTS—sincewedon'thaveone. **„Startthetimerrunning.*+ŠXREF.SCRASHSAV‹ThesearefoundinSYSPAR.ŠXREF.SEXCSTACKŠXREF.SPTMADDRŠXREF.STIMESLICŠXREF.STIMINTVŠXREF.STIMINTV4 &ŠXREFƒCLOCKFRQ‹ThesearefoundinIND. ŠXREFƒTIMERAŠXREFƒTIMINTVA ŠXREFƒTIMSLIC 1ŠXDEFƒTIMERSTŒEntrypointtoSTARTTIMERroutine.TIMERSTDŠMOVE.LTIMSLIC(PC),TIMESLIC‚Setthesysgenparameterwhichdictates%*§the#oftimerticspertimeslice.'‰MOVE.LTIMERA(PC),A1‡GETTIMERADDRESS#‰MOVE.LA1,PTMADDRŠSAVEITFOREXEC$‰BEQ.S‚TIMER_EXITŠBRANCHIFNOTIMER)‰PEA„TIMERBE(PC)‰WHERETOGOONBUSERROR$‰MOVE.W#'BE',-(A7)‰SETBUSERRFLAG3‰MOVE.B#$01,CR2SR(A1)†ALLOWWRITETOCONTROLREG1&‰MOVE.B#$01,CR13(A1)‡ALLTIMERSRESET$‰MOVE.L#CLOCKFRQ,D0ˆCLOCKFREQUENCY‰DIVUƒ#4,D0DIVIDEBY4#‰SUB.W‚#1,D0CLOCKINTERRUPTSAT-1*‰MOVE.WTIMINTVA(PC),D1…INTERRUPTINTERVAL ‰MOVE.WD1,TIMINTVŠSAVEFOREXEC‰MULUƒ#4,D1MULTIPLYBY4*‰SUB.W‚#1,D1SUBTRACT1-TIMERGOESTO-1!‰MOVE.WD1,TIMINTV4‰SAVEFOREXEC‰LSL.W‚#8,D1PUTINHIGHBYTE)‰ADD.W‚D1,D0VALUEFORTIMER3(2HALVES)‰MOVEP‚D0,MSBT3(A1)ˆSETTIMER34‰MOVE.W#256,D0VALUEFORTIMER1(OVERFLOWCOUNTER)‰MOVEP‚D0,MSBT1(A1)ˆSETTIMER18‰MOVE.B#$00,CR2SR(A1)†ALLOWWRITETOCONTROLREGISTER3;‰MOVE.B#$C6,CR13(A1)‡T3--INTERNALCLOCK,INTERRUPTENABLED,*£OUTPUTENABLED,8-BITMODE8‰MOVE.B#$01,CR2SR(A1)†ALLOWWRITETOCONTROLREGISTER1;‰MOVE.B#$00,CR13(A1)‡  T1--EXTERNALCLOCK,ENABLEALLTIMERS3‰ADDQ.L#6,SPEverythingwentOK;justgetthatbus4‰BRA.S‚TIMER_EXITŠerrorjunkoffthestackandexit.*;TIMERBE‚MOVE.L‚#CRASHSAV,PTMADDR‚USEDUMPPOINTERFORTIMER TIMER_EXITRTS–ReturntoINIT.ŠPAGE1@:1B0 ‰XDEF„INITIO-‰XREF„CTRLREG…VERSAmodule-02controlregister ‰XREF„MEMTABL4‰XREF„DPRVAO†dualportedRAMVERSAbusaddressoffset ‰SECTIONƒ8.************************************************ƒValuetoputinVM02controlregister.ƒ*.***********************************************(CTRL†SET„%000VERSAbusintlevel(none).;CTRL†SET„0<<3+CTRLŠVERSAbusintacknowledgemask(disable).CTRL†SET„1<<10+CTRL‰Write-protectVM02RAMfromVERSAbus?(no)2CTRL†SET„1<<11+CTRL‰I/Ochannelintmask(enable).@CTRL†SET„%0000<<12+CTRL…AddressmodifiersforVERSAbusaccesses. INITIOƒEQU…**=*…INITIALIZEVERSAMODULE-02VECTORTABLEINHIGHON-BOARDRAM*)‰LEA„MEMTABL(PC),A1STARTOFMEMORYTABLE+‰MOVE.L6(A1),D0‡ENDADDRESSOFPARTITION0%‰ADD.L#1,D0‹MAYBEXXFFFTYPENUMBER#‰BCLR#0,D0ŒFORCEXX000TYPENUMBER$‰SUB.L#1,D0‹FORCEXXFFFTYPENUMBER4‰AND.L#$FFFFF000,D0ƒGETOFFSETTOVM02VECTORTABLE1‰LEAVM02TBL(PC),A1„GETVM02IMAGEOFTHEVECTORS‰MOVE.L#0,A2ŠCLEARFORUSE‰MOVE.L#3,D4ˆNUMBEROFGROUPS4INITIOL1MOVE.W(A1)+,A2…GETOFFSETTOGROUPADDRESS‰ADD.LD0,A2ŠACTUALADDRESS%‰MOVE.L#7,D3‰NUMBEROFENTRIES/GROUP-INITIOL2MOVE.W(A1)+,-(A2)ƒSTORETHEVECTORS(‰SUB.L#1,D3‹DECREMENTNUMBEROFENTRIES$‰BNE.SINITIOL2‡BRANCHTILMOVEDALL'‰SUB.L#1,D4ŠDECREMENTNUMBEROFGROUPS+‰BNE.SINITIOL1†BRANCHIFMOREGROUPSTODO‰MOVE.LD0,A2‹GETOFFSET)‰ADD.L#$FF0,A2‡POINTTOCONTROLREGISTER;ŠMOVE.LA2,CTRLREG‰SaveaddrofcontrolregisterinSYSPAR.9ŠMOVEƒ#CTRL,(A2)‰Setcontrolregisterthewaywewantit. *8*‚SetdualportedRAMVERSAbusaddressoffsetinSYSPAR.*1ŠMOVE.L#\DPRVAO,DPRVAO„PuttheoffsetinSYSPAR.  E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…WhenincorporatinganydriversduringSYSGEN„<<<<<<<?*‚>>>>>>>…thatrequirememoryallocatedforthemasperƒ<<<<<<<?*‚>>>>>>>…thedriverpackageinstructions-thisistheƒ<<<<<<<,*‚>>>>>>>…spotthefile(s)gointo!!–<<<<<<<*‚>>>>>>>µ<<<<<<<=*‚>>>>>>>…Thisisalsothespotforcodeforadriver…<<<<<<<>*‚>>>>>>>…that‚requiresothertypesofinitialization,ƒ<<<<<<<0*‚>>>>>>>…such‚asclearinganinterrupt.‘<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>‘MERGEITHERE—<<<<<<<*<*ˆWhenyouwritethecodethatistobemergedhere,wrapit*ˆaroundwiththefollowing:*:*ˆAtthebeginning,withDRVRxOUTreferringtoyourunique*ˆlabel,putthiscode:*'*‹PEA„DRVRxOUT(PC)„IFBUSERROROCCURS,*¢RETURNORGOONTONEXT*¢DRIVER'SINITIALIZATION**‹MOVE.W#'BE',-(A7)…SAVE'BUSERROR'FLAG*9*ˆTheninsertthecodetodowhatyouneedtodoforthis*ˆparticulardriver.**ˆAttheend,putthis:***‹LEA„6(A7),A7ˆREMOVEBUSERRORFROMSTACK*DRVRxOUTƒEQU„**=*ˆInthisway,ifthecodeforonedrivercausesabuserror,.*ˆthecodeforotherdriverswillbeexecuted.*E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<G******  *****************************************************************‰ENDé ‰SECTIONƒ8 ‰XDEF†VM02TBLŠRTS‰PAGE*(*ˆVECTORNUMBERTABLEFORVERSAMODULE-020*ˆTHEREARE3GROUPSOFVECTORNUMBERSSTOREDAT%*ˆTHEHIGHLOCATIONSOFONBOARDRAM.5*ˆTHESEVECTORNUMBERSARESTOREDFROMTOPTOBOTTOM.*ˆTABLESTRUCTURE:*’DC.WENDADDRESS+2OFGROUPX*’DC.W7THVECTORNUMBER*’.*’.*’DC.W1STVECTORNUMBER* VM02TBLƒEQUƒ* **‚Group0vectors.*:‰DC.W‚$1000‰Offsetto2+lastofgroup0vectorsonVM02.#‰DC.W\KILVECT‡IRQ7-KILLERROUTINE#‰DC.W\KILVECT‡IRQ6-KILLERROUTINE#‰DC.W\KILVECT‡IRQ5-KILLERROUTINE#‰DC.W\KILVECT‡IRQ4-KILLERROUTINE#‰DC.W\KILVECT‡IRQ3-KILLERROUTINE#‰DC.W\KILVECT‡IRQ2-KILLERROUTINE#‰DC.W\KILVECT‡IRQ1-KILLERROUTINE **‚Group1vectors.*9‰DC.W$FF0‹Offsetto2+lastofgroup1vectorsonVM02.@‰DC.W\KILVECT‡71/3:‚ACFAILfromtheVERSAbus;sendtoKILLER.+‰DC.W\SERPTSˆ61/3:‚NEC7201serialports."‰DC.W\PTMVECT‡51/3:‚M6840timer.:‰DC.W\BCLRV‰41/3:‚Busclear…fromVM02busarbiterlogic.@‰DC.W\KILVECT‡31/3:‚BusavailablefromVM02busarbiterlogic;*«sendtoKILLER.>‰DC.W\KILVECT‡21/3:‚VERSAbusinterruptacknowledged;sendto *«KILLER.-‰DC.W\FAILŠ11/3:‚SYSFAILfromtheVERSAbus. **‚Group2vectors.*8‰DC.W$FE0‹Offsetto2+lastofgroup2vectoronVM02."‰DC.W\SWABRTˆIRQ7-SOFTWAREABORT#‰DC.W\KILVECT‡IRQ6-KILLERROUTINE2‰DC.W\IOCVEC4‡IRQ5-I/OCHANNELINTERRUPTLEVEL42‰DC.W\IOCVEC3‡IRQ4-I/OCHANNELINTERRUPTLEVEL32‰DC.W\IOCVEC2‡IRQ3-I/OCHANNELINTERRUPTLEVEL22‰DC.W\IOCVEC1‡IRQ2-I/OCHANNELINTERRUPTLEVEL15‰DC.W\KILVECT‡IRQ1-KILLERROUTINE-UNASSIGNEDVECTOR  ‰ENDéJ:‰INCLUDE9999.M6840.M6840.EQ ‰SECTIONƒ8‰PAGE*J*‚ThiscodeisneededtosatisfyINIT,whichisboard-independentandmust/*‚calluponustodotheboard-dependentstuff.**„InitializetheMMU.*5ŠXDEFƒINITMMUŒIt'seasyforustoinitializetheMMU,$INITMMUƒRTS—sincewedon'thaveone. **„Startthetimerrunning.*+ŠXREF.SCRASHSAV‹ThesearefoundinSYSPAR.ŠXREF.SEXCSTACKŠXREF.SPTMADDRŠXREF.STIMESLICŠXREF.STIMINTVŠXREF.STIMINTV4 &ŠXREFƒCLOCKFRQ‹ThesearefoundinIND. ŠXREFƒTIMERAŠXREFƒTIMINTVA ŠXREFƒTIMSLIC 1ŠXDEFƒTIMERSTŒEntrypointtoSTARTTIMERroutine.TIMERSTDŠMOVE.LTIMSLIC(PC),TIMESLIC‚Setthesysgenparameterwhichdictates%*§the#oftimerticspertimeslice.'‰MOVE.LTIMERA(PC),A1‡GETTIMERADDRESS#‰MOVE.LA1,PTMADDRŠSAVEITFOREXEC$‰BEQ.S‚TIMER_EXITŠBRANCHIFNOTIMER)‰PEA„TIMERBE(PC)‰WHERETOGOONBUSERROR$‰MOVE.W#'BE',-(A7)‰SETBUSERRFLAG3‰MOVE.B#$01,CR2SR(A1)†ALLOWWRITETOCONTROLREG1&‰MOVE.B#$01,CR13(A1)‡ALLTIMERSRESET$‰MOVE.L#CLOCKFRQ,D0ˆCLOCKFREQUENCY‰DIVUƒ#4,D0DIVIDEBY4#‰SUB.W‚#1,D0CLOCKINTERRUPTSAT-1*‰MOVE.WTIMINTVA(PC),D1…INTERRUPTINTERVAL ‰MOVE.WD1,TIMINTVŠSAVEFOREXEC‰MULUƒ#4,D1MULTIPLYBY4*‰SUB.W‚#1,D1SUBTRACT1-TI  MERGOESTO-1!‰MOVE.WD1,TIMINTV4‰SAVEFOREXEC‰LSL.W‚#8,D1PUTINHIGHBYTE)‰ADD.W‚D1,D0VALUEFORTIMER3(2HALVES)‰MOVEP‚D0,MSBT3(A1)ˆSETTIMER34‰MOVE.W#256,D0VALUEFORTIMER1(OVERFLOWCOUNTER)‰MOVEP‚D0,MSBT1(A1)ˆSETTIMER18‰MOVE.B#$00,CR2SR(A1)†ALLOWWRITETOCONTROLREGISTER3;‰MOVE.B#$C6,CR13(A1)‡T3--INTERNALCLOCK,INTERRUPTENABLED,*£OUTPUTENABLED,8-BITMODE8‰MOVE.B#$01,CR2SR(A1)†ALLOWWRITETOCONTROLREGISTER1;‰MOVE.B#$00,CR13(A1)‡T1--EXTERNALCLOCK,ENABLEALLTIMERS3‰ADDQ.L#6,SPEverythingwentOK;justgetthatbus4‰BRA.S‚TIMER_EXITŠerrorjunkoffthestackandexit.*;TIMERBE‚MOVE.L‚#CRASHSAV,PTMADDR‚USEDUMPPOINTERFORTIMER TIMER_EXITRTS–ReturntoINIT.ŠPAGE ‰XDEF„INITIOS@\2dBl#-‰XREF„CTRLREG…VERSAmodule-02controlregister ‰XREF„MEMTABL4‰XREF„DPRVAO†dualportedRAMVERSAbusaddressoffset ‰SECTIONƒ8.************************************************ƒValuetoputinVM02controlregister.ƒ*.***********************************************(CTRL†SET„%000VERSAbusintlevel(none).;CTRL†SET„0<<3+CTRLŠVERSAbusintacknowledgemask(disable).CTRL†SET„1<<10+CTRL‰Write-protectVM02RAMfromVERSAbus?(no)2CTRL†SET„1<<11+CTRL‰I/Ochannelintmask(enable).@CTRL†SET„%0000<<12+CTRL…AddressmodifiersforVERSAbusaccesses. INITIOƒEQU…**=*…INITIALIZEVERSAMODULE-02VECTORTABLEINHIGHON-BOARDRAM*)‰LEA„MEMTABL(PC),A1STARTOFMEMORYTABLE+‰MOVE.L6(A1),D0‡ENDADDRESSOFPARTITION0%‰ADD.L#1,D0‹MAYBEXXFFFTYPENUMBER#‰BCLR#0,D0ŒFORCEXX000TYPENUMBER$‰SUB.L#1,D0‹FORCEXXFFFTYPENUMBER4‰AND.L#$FFFFF000,D0ƒGETOFFSETTOVM02VECTORTABLE1‰LEAVM02TBL(PC),A1„GETVM02IMAGEOFTHEVECTORS‰MOVE.L#0,A2ŠCLEARFORUSE‰MOVE.L#3,D4ˆNUMBEROFGROUPS4INITIOL1MOVE.W(A1)+,A2…GETOFFSETTOGROUPADDRESS‰ADD.LD0,A2ŠACTUALADDRESS%‰MOVE.L#7,D3‰NUMBEROFENTRIES/GROUP-INITIOL2MOVE.W(A1)+,-(A2)ƒSTORETHEVECTORS(‰SUB.L#1,D3‹DECREMENTNUMBEROFENTRIES$‰BNE.SINITIOL2‡BRANCHTILMOVEDALL'‰SUB.L#1,D4ŠDECREMENTNUMBEROFGROUPS+‰BNE.SINITIOL1†BRANCHIFMOREGROUPSTODO‰MOVE.LD0,A2‹GETOFFSET)‰ADD.L#$FF0,A2‡POINTTOCONTROLREGISTER;ŠMOVE.LA2,CTRLREG‰SaveaddrofcontrolregisterinSYSPAR.9ŠMOVEƒ#CTRL,(A2)‰Setcontrolregisterthewaywewantit. *8*‚SetdualportedRAMVERSAbusaddressoffsetinSYSPAR.*1ŠMOVE.L#\DPRVAO,DPRVAO„PuttheoffsetinSYSPAR.  E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…WhenincorporatinganydriversduringSYSGEN„<<<<<<<?*‚>>>>>>>…thatrequirememoryallocatedforthemasperƒ<<<<<<<?*‚>>>>>>>…thedriverpackageinstructions-thisistheƒ<<<<<<<,*‚>>>>>>>…spotthefile(s)gointo!!–<<<<<<<*‚>>>>>>>µ<<<<<<<=*‚>>>>>>>…Thisisalsothespotforcodeforadriver…<<<<<<<>*‚>>>>>>>…that‚requiresothertypesofinitialization,ƒ<<<<<<<0*‚>>>>>>>…such‚asclearinganinterrupt.‘<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>‘MERGEITHERE—<<<<<<<*<*ˆWhenyouwritethecodethatistobemergedhere,wrapit*ˆaroundwiththefollowing:*:*ˆAtthebeginning,withDRVRxOUTreferringtoyourunique*ˆlabel,putthiscode:*'*‹PEA„DRVRxOUT(PC)„IFBUSERROROCCURS,*¢RETURNORGOONTONEXT*¢DRIVER  'SINITIALIZATION**‹MOVE.W#'BE',-(A7)…SAVE'BUSERROR'FLAG*9*ˆTheninsertthecodetodowhatyouneedtodoforthis*ˆparticulardriver.**ˆAttheend,putthis:***‹LEA„6(A7),A7ˆREMOVEBUSERRORFROMSTACK*DRVRxOUTƒEQU„**=*ˆInthisway,ifthecodeforonedrivercausesabuserror,.*ˆthecodeforotherdriverswillbeexecuted.*E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<G*********************************************************************** ŠRTS‰PAGE*(*ˆVECTORNUMBERTABLEFORVERSAMODULE-020*ˆTHEREARE3GROUPSOFVECTORNUMBERSSTOREDAT%*ˆTHEHIGHLOCATIONSOFONBOARDRAM.5*ˆTHESEVECTORNUMBERSARESTOREDFROMTOPTOBOTTOM.*ˆTABLESTRUCTURE:*’DC.WENDADDRESS+2OFGROUPX*’DC.W7THVECTORNUMBER*’.*’.*’DC.W1STVECTORNUMBER* VM02TBLƒEQUƒ* **‚Group0vectors.*:‰DC.W‚$1000‰Offsetto2+lastofgroup0vectorsonVM02.#‰DC.W\KILVECT‡IRQ7-KILLERROUTINE#‰DC.W\KILVECT‡IRQ6-KILLERROUTINE#‰DC.W\KILVECT‡IRQ5-KILLERROUTINE#‰DC.W\KILVECT‡IRQ4-KILLERROUTINE#‰DC.W\KILVECT‡IRQ3-KILLERROUTINE#‰DC.W\KILVECT‡IRQ2-KILLERROUTINE#‰DC.W\KILVECT‡IRQ1-KILLERROUTINE **‚Group1vectors.*9‰DC.W$FF0‹Offsetto2+lastofgroup1vectorsonVM02.@‰DC.W\KILVECT‡71/3:‚ACFAILfromtheVERSAbus;sendtoKILLER.+‰DC.W\SERPTSˆ61/3:‚NEC7201serialports."‰DC.W\PTMVECT‡51/3:‚M6840timer.:‰DC.W\BCLRV‰41/3:‚Busclear…fromVM02busarbiterlogic.@‰DC.W\KILVECT‡31/3:‚BusavailablefromVM02busarbiterlogic;*«sendtoKILLER.>‰DC.W\KILVECT‡21/3:‚VERSAbusinterruptacknowledged;sendto *«KILLER.-‰DC.W\FAILŠ11/3:‚SYSFAILfromtheVERSAbus. **‚Group2vectors.*8‰DC.W$FE0‹Offsetto2+lastofgroup2vectoronVM02."‰DC.W\SWABRTˆIRQ7-SOFTWAREABORT#‰DC.W\KILVECT‡IRQ6-KILLERROUTINE2‰DC.W\IOCVEC4‡IRQ5-I/OCHANNELINTERRUPTLEVEL42‰DC.W\IOCVEC3‡IRQ4-I/OCHANNELINTERRUPTLEVEL32‰DC.W\IOCVEC2‡IRQ3-I/OCHANNELINTERRUPTLEVEL22‰DC.W\IOCVEC1‡IRQ2-I/OCHANNELINTERRUPTLEVEL15‰DC.W\KILVECT‡IRQ1-KILLERROUTINE-UNASSIGNEDVECTOR  ‰ENDééé=/*5=/*†VM02.RMS.LG--RMSGENlinkchainfileforRMS68K.=/*=/*.=LINK ,VM02.RMS.LO,VM02.RMS.LL;H,M,I,X,-U,Z=40SEGRMS0:0\RMS0LO,\RMS0HISEGRMS2:2,3,4,5,6,7,15‚\RMS2LOINPUTˆ&.SYSPAR.ROINPUTƒM68XXX.RMS.ROINPUT…VM02.VECTTBL.ROIN†M68XXX.AKRQST.ROIN†M68XXX.ASQALOC.ROIN†M68XXX.ASQEVENT.ROIN†M68XXX.ASQFREE.ROIN†M68XXX.ASQREAD.ROIN†M68XXX.ASQSTATS.ROIN†M68XXX.ASRINT.ROIN†M68XXX.ATSEM.ROIN†M68XXX.BKG.ROIN†M68XXX.CDIR.ROIN†M68XXX.CISR.ROIN†M68XXX.CKDELAY.ROIN†M68XXX.CKEXPAT.ROIN†M68XXX.CMR.ROIN†M68000.COMINT.ROIN†M68XXX.DCLSHAR.ROIN†M68XXX.DELAY.ROIN†M68XXX.DEMON.ROIN†M68XXX.DERQST.ROIN†M68XXX.DESEM.ROIN†M68000.DISPATCH.ROIN†M68XXX.DSEGX.ROIN†M68XXX.DSERVE.ROIN†M68XXX.DSRVX.ROIN†M68XXX.EQDQ.ROIN†M68XXX.EXABRT.ROIN†M68000.EXCEPT.ROIN†M68XXX.EXMMSK.ROIN†M68XXX.EXMON.ROIN†M68XXX.EXMONVR.ROIN†M68XXX.EXQEVENT.ROIN†M68XXX.EXRQPA.ROIN†M68XXX.FNDGSEG.ROIN†M68XXX.FNDTSEG.ROIN†M68XXX.FNDUSEM.ROIN†M68XXX.GETTCB.RO  IN†M68XXX.GTDTIM.ROIN†M68XXX.KILLER.ROIN‡NOMMU.LOADMMU.ROIN†M68XXX.LOGPHY.ROIN†M68XXX.PAGEALOC.ROIN†M68XXX.PAGEFREE.ROIN†M68XXX.PAUSE.ROIN†M68XXX.POWRFAIL.ROIN†M68XXX.PSTATE.ROIN†M68000.PVSEM.ROIN†M68XXX.RCVSA.ROIN‡M6840.RDTIMER.ROIN†M68XXX.READY.ROIN†M68XXX.RELINQ.ROIN†M68XXX.RESUME.ROIN†M68XXX.REXMON.ROIN†M68XXX.RQSTPA.ROIN†M68XXX.RSTATE.ROIN†M68XXX.RTEVENT.ROIN†M68XXX.SEGALOC.ROIN†M68XXX.SEGDEAL.ROIN†M68XXX.SEGSHAR.ROIN†M68XXX.SELFTEST.ROIN†M68XXX.SERVE.ROIN†M68XXX.SETPRI.ROIN†M68XXX.SGSEM.ROIN†M68000.SINT.ROIN†M68XXX.SNAPTRAC.ROIN†M68XXX.SPURINT.ROIN†M68XXX.STDTIM.ROIN†M68000.SUPER.ROIN†M68XXX.SUSPEND.ROIN†M68XXX.TABLE1.ROIN†M68XXX.TERM.ROIN†M68XXX.TFRSEG.ROIN‡M6840.TIMEINT.ROIN†M68XXX.TRACER.ROIN†M68000.TRAP0.ROIN†M68000.TRAP1.ROIN†M68XXX.TSKATTR.ROIN†M68XXX.TSKBORN.ROIN†M68XXX.TSKINFO.ROIN†M68XXX.TSKMOVE.ROIN†M68XXX.TSKSTART.ROIN†M68XXX.TSKWAIT.ROIN†M68XXX.USERVECT.ROIN†M68XXX.WAKEUP.ROt]}IN†M68XXX.WTEVENT.ROINPUTƒM68XXX.RMSPATCH.ROEND=ENDééééééé=/*=/*†Importantnote:5=/*†TheorderoftheINPUTmodulesforthisLINKmust=/*†beasspecifiedbelow.=/*=LINK ,\LINK2TF,\LINKLS;IXMHRINPUT M68XXX.INIT.ROINPUT VM02.INITIO1.ROEND=ENDéé  ééééé… =/*=/*†Importantnote:5=/*†TheorderoftheINPUTmodulesforthisLINKmust=/*†beasspecifiedbelow.=/*=LINK ,INIT,\LINKLS;HAMIXSSEGMENT .INT:8 \INTSTRINPUT \LINK1TFINPUT VM02.INITIO2.ROINPUT M68XXX.INITDAT.ROINPUT C8OC.SYSPAR.ROEND=ENDééééééŽ M1VECTTBL ASYST'VM02 XVECTTBLAG5!ƒRMS68K vector table for the VM02.«2pPOWRFAIL pPROGINT2 pPROGINT3 pPROGINT4 pPROGINT5 pPROGINT9 pPROGINTA pTIMEINT pSPURINT pTRAP0 pTRAP1 pKILLER pCOMINT pTRPVCT2 pCMRSFAIL "pz3?’À  !VCT(,,,,, , ,,, ,!,"0,,Ž‘30’,“,”•4éééééé—'VMES10 RMS CD¬¬-VECTTBL AGµµ§INITIO1 AGÖÖ@ÛINITIO2 AG aSAVEIO AG00ñRMS LGQQ`INT1 LGbb INT2 LGkk VECTTBL ROttC‚******************************************************************&‚*SysgencommandfileVMES10.RMS.CD *C‚******************************************************************‚*‚INCLUDE…CAOE.SYSPAR.CI‚*)‰RMS†=$1000ŽAddresswhereRMS68Kstarts.‚*D‚*‚NowindicatewhetherornottheexecshouldtakeovertheillegalD‚*‚instructionvector.‚IfyouaregoingtobeusingtheROMdebuggerF‚*‚tosetbreakpoints,thenyou'llwanttheillegalinstructionvectorC‚*‚leftasthedebuggerhasitset.‚InanenvironmentwheretheROMC‚*‚debuggerwillnotbeused,youwillwantRMS68Ktofieldillegal‚*‚instructionsasexceptions.‚*.‰ILLINSTR=1’Illegalinstructionvectorflag:#‚*¨0=RMSshouldnottakeitover.‚*¨1=RMSshould…takeitover.N‚*****************************************************************************‚**‚*ˆNowwegeneratetheRMS68Kloadmodule.‚*N‚*****************************************************************************‚*‚*‚*‚*(‚*‚NowcreateaVECTTBL  forthissystem.‚*‰SUBS†VMES10.VECTTBL.AG:‰ASM‡VMES10.VECTTBL.AG,VMES10.VECTTBL.RO,VMES10.VECTTBL.TF‚*‚*‚Nowlinkitalltogether.‚*‰RMS0LO‚=\RMS‰RMS0HI‚=\RMS+$FF‰RMS2LO‚=\RMS+$100‰SUBS†VMES10.RMS.LG‚LINKˆVMES10.RMS.LG‚=DEL.&.SYSPAR.RO(‚=COPY‡VMES10.VECTTBL.TF,VMES10.RMS.LL;A ‚=COPY‡SYSGEN.TF,VMES10.RMS.LL;A‚=DELƒ*.*.TF;Y‚*‚END‰ éé¤.4VECTTBLƒIDNTƒ5,1RMS68KvectortablefortheVME/10.O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***>***…ROUTINE:‚VECTTBL--RMS68KVECTORTABLEFORTHEVME/10******É***J***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***G***‡Copyright1983byMotorola,Inc.‚ThisversionisfortheVME/10‚***"***‡microcomputerworkstation.¨******É***E***…FUNCTION:‚ThistablegetslinkedwithRMS68K.‚Whenthesystem…***C***‡boots,theexecinitializerfindsthistableandusesitto‡***:***‡takeovervectorsintheprocessor'svectortable.******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‚Changes@*…--------‚------‚----------------------------------------------*…10/24/83ƒSJF„Initialwriting.*  *E*‚XREF's.‚NotethattherearemanymoreXREF'screatedbyinvocations8*‚oftheVECTORmacro;thoseXREF'sarenotlistedhere.*.ŠXREFƒCOMINTCommoninterrupthandlerroutine.   **‚Includedfiles:*5*‰9995.&.STR.EQThesectionnumbertouseisinhere.*ŠNOLISTŠINCLUDE9995.&.STR.EQŠLISTŠPAGE*E*‚TheVECTORmacrodefinesentriesinthevectortable.‚Theformatis%*‰VECTOR‚,5*‚Therearetwospecialvaluesfor:,*‰0=COMINT(thecommoninterrupthandler).(*‰1=don'ttakeoverthevectoratall.E*‚Entriesinthevectortablemustbeassignedinorder--thatis,theB*‚vector#'sintheVECTORinvocationsmustbeinascendingorder.H*‚InthecasewheretwocontiguousVECTORinvocationsleaveagapinthe­5¶<¾.Æ K*‚vector#'s,thosevector#'sinthegapwillbeassignedthesamehandler9*‚asthatofthelowervector#ofthepair.‚Forexample,+*‰VECTOR$23,0ŽPoints$23to$27toCOMINT.-*‰VECTOR$28,1ŽLeaves$28to$2Fastheyare.-*‰VECTOR$30,ROUTINE1‡Points$30toROUTINE1.G*‚Ifthegaptobefilledhasasecondparameterotherthan0or1,theJ*‚addressassignedtothevectorwillbeincrementedby2foreachvector:7*‰VECTOR$23,XŽPoints$23toX,$24toX+2,$25toX+4.$*‰VECTOR$26,0ŽPoints $26toCOMINT.'*‚Theendofthelistissignifiedbya*‰DC.Lƒ0F*‚andthesecondparameterofthelastpriorVECTORinvocationwillbeK*‚appliedtoallfurthervectors,upto$FF.‚Again,ifthesecondparameterK*‚wasnota0or1,theaddressassignedtothevectorswillbeincremented#*‚by2foreachvectorinsequence.* VECTOR„MACROŒIFLEƒ\1-VECT_NUM0ŽFAILƒ499ŒVector#'smustbeinascendingorder!ŽMEXITŒENDCŒIFNCƒ'\2','0'ŽIFNCƒ'\2','1'XREFƒ\2ŽENDCŒENDCVECT_NUM„SET„\1ŒDC.Lƒ\1<<24+\2ŠENDM  * *‚Firstsetupthetableheader.*ŠSECTIONLEVEL00  0ŠDC.Lƒ'!VCT'Dumpeyecatcherfor'VeCtorTable.'2ŠDC.LƒCOMINTPuttheaddressofCOMINTheresothe"*§execinitializercanfindit;he#*§isn'tlinkedwiththeexec,sohe*§wouldn'tknowotherwise.ŠPAGE*)*‚Herearetheactualvectorassignments.I*‚NoticethatwhetherornottheillegalinstructionvectoristakenoverE*‚byRMS68Kiscontrolledbyansysgenparameter.‚DuringRMSGEN,this$*‚parameterissubstitutedsuchthatA*„0=theexecshouldleavetheillegalinstructionvectoralone.?*„1=theexecshouldtakeovertheillegalinstructionvector.J*‚YoumightwanttheexectoleavetheillegalinstructionvectoraloneifI*‚youwanttousetheROMdebugger,sinceitusesillegalinstructionsas*‚breakpoints.* 8VECT_NUM‚SET„1’Initializethevectornumberto1sothat&*§thelowestvectornumberthatcanbe*§setafterwardsis2. ŠVECTOR$02,PROGINT2‡Buserror.#ŠVECTOR$03,PROGINT3‡Addresserror.$*§Ifwe'renotsupposedtotakeover/ŠIFEQƒ\ILLINSTRŠtheillegalinstructionvector,9ŠVECTOR$04,1Žleavetheillegalinstructionvectoralone.ŠENDC–*!*§Ifwearesupposedtotakeover/ŠIFNEƒ\ILLINSTRŠtheillegalinstructionvector,>ŠVECTOR$04,PROGINT4‡takeovertheillegalinstructionvector.ŠENDC–*#ŠVECTOR$05,PROGINT5‡Divisionby0.+*‚insequence„$06,PROGINT6ŠCHKinstruction.-*‚insequence„$07,PROGINT7ŠTRAPVinstruction./*‚insequence„$08,PROGINT8ŠPrivilegeviolation.'ŠVECTOR$09,PROGINT9‡Instructiontrace.8ŠVECTOR$0A,PROGINTA‡Reservedinstructionopcodes$AXXX.>*‚insequence„$0B,PROGINTBŠReservedinstructionopcodes$FXXX.'ŠVECTOR$0C,0Ž($0C-$17gotoCOMINT.)'ŠVECTOR$18,SPURINTˆSpuriousinterrupt.'ŠVECTOR$19,0Ž($19-$1FgotoCOMINT.)ŠVECTOR$20,TRAP0ŠTRAP#0.ŠVECTOR$21,TRAP1ŠTRAP#1.#ŠVECTOR$22,TRPVCT2ˆTRAP#2to#15.'ŠVECTOR$30,0Ž($30-$3FgotoCOMINT.):ŠVECTOR$40,KILLER‰BusClearinterruptfromVMEbusI/F.‚We%*§shouldn'tbegettingthis,sincewe&*§areusing'releaseonrequest'mode.)ŠVECTOR$41,0ŽI/OchannelIRQ1*(COMINT)..ŠVECTOR$42,0Ž'Characteravailable'from2661.)ŠVECTOR$43,0ŽI/OchannelIRQ2*(COMINT).)ŠVECTOR$44,0ŽI/OchannelIRQ3*(COMINT).)ŠVECTOR$45,0ŽI/OchannelIRQ4*(COMINT).-ŠVECTOR$46,POWRFAIL‡ACFAIL*fromtheVMEbus.#ŠVECTOR$47,0Ž($47goestoCOMINT.)5ŠVECTOR$48,0ŽAcknowledgementofinterrupttoVMEbus,(*§andVMEbusavailable;wedisablethese'*§interrupts,sowedon'texpecttouse'*§thisvector.‚However,ifataskwants'*§togenerateVMEbusinterrupts,hecan)*§enablethe'interruptacknowledge'mask$*§andclaimthisinterrupt.‚(COMINT)+ŠVECTOR$49,KILLER‰DMAIRQ*fromtheVMEbus.,ŠVECTOR$4A,0Ž'Transmitterempty'from2661.9ŠVECTOR$4B,KILLER‰M68451memorymanagementunit.‚Getting'*§oneofthesemeanssomething'swrong.,ŠVECTOR$4C,TIMEINTˆM146818realtimeclock..ŠVECTOR$4D,CMRSFAIL‡SYSFAIL*fromtheVMEbus.8ŠVECTOR$4E,1ŽSoftwareabort(leaveitpointingtobug).'ŠVECTOR$4F,0Ž($4F-$FFgotoCOMINT.)  !ŠDC.Lƒ0’(Endoftableindicator.)   ŠENDé éééééé6INITIO„IDNTƒ5,1RMS68KI/OinitializerfortheVME/10.O*******************************************************************************O*******************************************************************************O**********************************************************************************É***A***…ROUTINE:‚INITIO--RMS68KI/OINITIALIZERFORTHEVME/10.Š******É***J***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***(***‡Copyright1983byMotorola,Inc.¢******É***D***…FUNCTION:‚RoutinesfromthismodulearecalledbytheRMS68K‡***E***‡routineINITduringsysteminitialization.‚Allboard-specific„***.***‡initializationisdoneinthismodule.œ******É***G***…NOTES:‚ThismoduleisSUBSed,ASMed,andLINKedatSYSGENtime.„***?***‡Allmoduleswillrunatlevel7andinsupervisormode.‹******É***O*******************************************************************************O*******************************************************************************O******************************************************************************* *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‚ChangesI*…--------‚------‚-------------------------------------------------------4*†3/6/84ƒSJF„Makebit7ofCR1a0ratherthana1.?*†1/10/84ƒMSL„VerifythatUIP(update-in-progress)bitisclear&*—beforereadingreal-timeclockchip.*…11/7/83ƒSJF„Initialwriting.* * *‚XDEF's.*,ŠXDEFƒINITMMUŒRoutinetoinitializetheMMU.,ŠXDEFƒTIMERSTŒRoutinetostartupthetimer.3ŠXDEFƒINITIORoutinetosetupalltheotherboard-*§specifichardware. * *‚XREF's.* *…Routines:)ŠXREFƒKILLERRoutinetocrashthesystem.*…ParametersfromINITDAT:0ŠXREFƒMMUAddrofMMU;0ifwe'renotusingone.-ŠXREFƒTIMSLICŒ#oftimerticspertimeslice.+ŠXREFƒTIMERAAddroftimerchip(MC146818).ŠXREFƒTIMINTVAŠXREFƒCLOCKFRQ*…SYSPARvariables:6ŠXREF.SMMUHEREŒAddrofMMU;0ifwe'renotusingone.Î4×AßDç?ï;÷0ÿ=90ŠXREF.SFRST451ŒAddroffirstMMUinthesystem./ŠXREF.SLAST451ŒAddroflast‚MMUinthesystem.7ŠXREF.SCURR451ŒPtrtoMMULOADMMUshouldlookatnext.7ŠXREF.SCURRSDCurrentsegmentdescriptor#intheMMU.7ŠXREF.SDPRVAODual-PortedRamVersabu sAddressOffset.ŠXREF.SDATEDate.ŠXREF.STIMEODTimeofday.0ŠXREF.STIMESLIC‹#oftimerticspertimeslice.7ŠXREF.STIMINTVŒTimeintervalbetweentimerinterrupts..ŠXREF.SPTMADDRŒAddroftimerchip(MC146818). *„Others:.ŠXREFƒCRASHSAV‹PlacetoSAVEinfoifweCRASH.ŠXREFƒDATEGOFromINITIO2.AG  **‚Includedfiles:**‰9995.&.UTILITY.MC*‰9999.M68451.M68451.EQ*‰9999.M146818.M146818.EQ*ŠNOLISTŠINCLUDE9995.&.UTILITY.MCŠINCLUDE9999.M68451.M68451.EQ ŠINCLUDE9999.M146818.M146818.EQŠLISTŠPAGEO*******************************************************************************O**********************************************************************************É***7***…ROUTINE:‚INITMMU--INITIALIZETHEM68451MMUs.”******É***G***…FUNCTION:‚VerifiestheexistenceofoneormoreM68451MMUsand„***'***‡setsthemupforusebyRMS68K.£******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒPƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆD******‡A:ƒPƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³***+***‡Supervisormode,interruptlevel7.Ÿ******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É***O*******************************************************************************O*^*****************************************************************************  ŠSECTION8ŠOPT„BRS INITMMU: 1ŠSAVEƒD0/D1/A0/A1ˆSaveregisterswe'llblowaway. &‰MOVE.L‚MMU(PC),MMUHERE†ADDRESSOFMMU‰BEQ.SƒN68451XŽBRANCHIFNOMMU#‰MOVE.L‚MMU(PC),A0‹A0-->FIRSTMMU(‰PEA…KILLERCRASHIFFIRSTMMUNOTTHERE'‰MOVE.W‚#'BE',-(A7)ŠBUSERRORSWITCHON,‰MOVE.B‚(A0),D0ŽVERIFYPRESENCEOFFIRSTMMU8‰MOVE.L‚A0,FRST451‹SAVEADDRESSOFFIRST68451INSYSPAR.‰MOVE.L‚A0,CURR451‹IT'SALSOTHECURRENT68451(‰MOVE.L‚#1,CURRSDŒSEGMENTDESCRIPTOR#1#‰LEA…N68451U(PC),A1‡ADDRESSOFEXIT6‰MOVE.L‚A1,2(A7)EXITIFBUSERRORWHILECOUNTINGMMUs%‰MOVE.W‚#3,D0FOURPOSSIBLELASTMMUsN68451B1‰MOVE.B‚(A0),D1ŽEXITTHROUGHBUSERRORIFNONEXT.‰MOVE.L‚A0,LAST451‹CURRENTMAYBETHELASTMMU)‰ADD.Lƒ#$40,A0ŽSETTOCHECKNEXTMMUSLOT‰DBRA„D0,N68451B‹LOOPTILLDONE+‰ADD.Lƒ#6,A7BUSERRORPOINTEROFFOFSTACK *I*‚UnloadsegmentdescriptersinallMMU's,incaseRESETwasn'tperformed*‚priortoboot.*N68451U'ŠMOVE.LFRST451,A1ŠPointtofirst68451$ŠMOVE.B#1,D0Segmentdescriptor#1UNLD10%ŠMOVE.BD0,DP(A1)‹Pointtodescriptor-ŠMOVE.B#0,SSR(A1)ŠElseclearthisdescriptorUNLDNEXTŠ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 **‚Exit.*9N68451XƒRESTORED0/D1/A0/A1‡Restoreregistersandreturn.ŠRTS—*ŠPAGEO*********************************************************************************ˆSTARTTIMER„(146818TIMER)* *G*‚Thismacrowillverifythatabyteiswithinaspecifiedrange.‚IfitH*‚isnotwithintherange,abranchistakentoRANGE_ERR.‚ThesyntaxisD*„CHECK_RANGE.,,F*‚DistanceisSforshortbranches,Lforlongbranches,ornothingif*‚thedefaultwilldo.6*‚Thebytetocheckistreatedasanunsignedinteger.*CHECK_RANGE MACRO ŠCMP.B‚\2,\1ŠBLO.\0RANGE_ERR ŠCMP.B‚\3,\1ŠBHI.\0RANGE_ERRŠENDM  TIMERST:E‰MOVE.LTIMSLIC(PC),TIMESLIC‚#TIMERINTERRUPTSBEFORETASKINTERRUPT'‰MOVE.LTIMERA(PC),A1‡GETTIMERADDRESS#‰MOVE.LA1,PTMADDRŠSAVEITFOREXEC!‰BEQ.L‚TIMERBEBRANCHIFNOTIMER)‰PEA„TIMERBE(PC)‰WHERETOGOONBUSERROR$‰MOVE.W#'BE',-(A7)‰SETBUSERRFLAG*4*ˆGetsystemtimeanddatefrombatterybackedtimer* UIP_LOOP:0‰BTST†#7,REGAWaituntilUIPbitisclearbefore#‰BNE.S…UIP_LOOPŒreadingtimerchip. *‰CLR.L…D1’Prepareforfollowingshortload'‰MOVE.B„HRS(A1),D1ŠGethoursfromtimerŠCHECK _RANGE.LD1,#0,#230‰MOVE.L„#3600*1000,D2‡Addendisonehour'smsecs+‰CLR.L…D0’CalculationwilltakeplaceinD0*‰BRA.S…CALCLOOPŒStartthecalculationloopCALCHRS)‰ADD.L…D2,D0Addonehour'smsecstotimeCALCLOOP*‰DBRA†D1,CALCHRSŠLoopuntilhourscomputed*‰CLR.W…D1’Prepareforfollowingshortload*‰MOVE.B„MINS(A1),D1‰GetminutesfromtimerŠCHECK_RANGED1,#0,#59)‰MULU.W„#60,D1ŽConvertminutestoseconds*‰CLR.L…D2’Prepareforfollowingshortload*‰MOVE.B„SECS(A1),D2‰GetsecondsfromtimerŠCHECK_RANGED2,#0,#59‰ADD.L…D2,D1D1=totalseconds‰MULU.W„#1000,D1ŒD1=totalmsecs!‰ADD.L…D1,D0D0=grandtotalmsecs#‰MOVE.L„D0,TIMEOD‹Storeitforexec (‰CLR.L…D0’Preparetoformgregoriandate'‰MOVE.B„YEAR(A1),D0‰GetyearfromtimerŠCHECK_RANGED0,#0,#99‰ADD.W…#1900,D0ŒYear=1900+YY‰SWAP†D0’D0=YYYY0000 ‰MOVE.B„MONTH(A1),D0ˆD0=YYYY00MMŠCHECK_RANGED0,#1,#12‰LSL.W…#8,D0D0=YYYYMM00"‰MOVE.B„DAYOMTH(A1),D0†D0=YYYYMMDDŠCHECK_RANGED0,#1,#31 *I*‚Thetimeanddatelookreasonable,solet'sgoaheadandkeepthoseforG*‚ourown(thechipmustnothavelostpowersincelasttime).‚Wecan'tI*‚tellforsurewhetherthechiplostpower,eventhoughthere'sabitinJ*‚thechipthatsaysso,becausethebughasalreadyreadtheinformation,*‚makingitunavailabletous.* ‰BSR.L…DATEGOŽConverttoordinal!‰MOVE.L„D0,DATEGivedatetoexec ŠBRA.S‚GO_TIMER *H*‚Ifwecomehere,oneofthefieldsreadfromtheclockchipiswhacko.*‚Setsystemtimeanddayto0.*-RANGE_ERRMOVE.L#0,TIMEODŠTimeofday<--0.ŠMOVE.L#0,DATEŒDate<--0. **ˆNowstarttimerticking*KGO_TIMERMOVEƒTIMINTVA(PC),TIMINTV‚SavetimerinterruptintervalinSYSPAR.4‰MOVE.B#$A,REGA(A1)ˆSELECTPERIODICACTIVATIONRATE0‰MOVE.BREGC(A1),D0‰RESETANYPENDINGINTERRUPTS&‰MOVE.B#$46,REGB(A1)‡ENABLETHETIMER.‰ADD.L‚#6,A7REMOVE'BE'ANDBUSERRORADDRESS‰RTS˜BACKTOINIT*CTRL1…SET„%00<<5+CTRL1‡Cursorselection(weleavethisalone).CTRL1…SET„0<<7+CTRL1‰Reserved.  0************************************************,*ƒValuetoputinVMEC1controlregister2ƒ*0************************************************ 0CTRL2…SET„0<<0MaskforMMUinterrupt(disable).;CTRL2…SET„0<<1+CTRL2‰Maskfor'transmitterempty'interrupt$*§fromthe2661connectingustothe*§keyboard(disable).>CTRL2…SET„0<<2+CTRL2‰Maskfor'busclear'interrupt(disable).CTRL5…SET„1<<4+CTRL5‰Maskforlocalresourcetimeout(enable).6CTRL5…SET„1<<5+CTRL5‰MaskforVMEbustimeout(enable).;CTRL5…SET„0<<6+CTRL5‰Addressmodifieralteration(disable).=CTRL5…SET„1<<7+CTRL5‰Boardfailcontrol(we'reOK).‚Whenthis'*§bitis0,SYSFAIL*isassertedonthe *§VMEbus.  0************************************************,*ƒValuetoputinVMEC1controlregister6ƒ*0************************************************ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…WhenincorporatinganydriversduringSYSGEN„<<<<<<<?*‚>>>>>>>…thatrequirememoryallocatedforthemasperƒ<<<<<<<?*‚>>>>>>>…thedriverpackageinstructions-thisistheƒ<<<<<<<,*‚>>>>>>>…spotthefile(s)gointo!!–<<<<<<<*‚>>>>>>>µ<<<<<<<=*‚>>>>>>>…Thisisalsothespotforcodeforadriver…<<<<<<<>*‚>>>>>>>…that‚requiresothertypesofinitialization,ƒ<<<<<<<0*‚>>>>>>>…such‚asclearinganinterrupt.‘<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>‘MERGEITHERE—<<<<<<<*<*ˆWhenyouwritethecodethatistobemergedhere,wrapit*ˆaroundwiththefollowing:*:*ˆAtthebeginning,withDRVRxOUTreferringtoyourunique*ˆlabel,putthiscode:*'*‹PEA„DRVRxOUT(PC)„IFBUSERROROCCURS,*¢RETURNORGOONTONEXT*¢DRIVER'SINITIALIZATION**‹MOVE.W#'BE',-(A7)…SAVE'BUSERROR'FLAG*9*ˆTheninsertthecodetodowhatyouneedtodoforthis*ˆparticulardriver.**ˆAttheend,putthis:***‹LEA„6(A7),A7ˆREMOVEBUSERRORFROMSTACK*DRVRxOUTƒEQU„**=*ˆInthisway,ifthecodeforonedrivercausesabuserror,.*ˆthecodeforotherdriverswillbeexecuted.*E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<G***********************************************************************G***********************************************************************‰ENDéééééééO*********************************************************************************ˆVMES10.INITIO2.AG*O******************************************************************************* ‰SECTIONƒ8ŠRTS‰PAGE O****************************** *************************************************2*ˆDATECONVERSIONSFROMONEBINARYFORMTOANOTHER*Ç6*ˆORDINALDATE-->DAYNUMBERWHEREDAY1=JAN11980***ˆCALL *’BSR‡DATEGO*¦BINARYGREGORIAN-YYYYMMDD*§TO*¦BINARYORDINALƒ-DAYNUMBER*ˆINPUT'*’D0=DATETOBECONVERTED--YYYYMMDD**ˆOUTPUT#*’D0=CONVERTEDDATE‡--DAYNUMBER*O******************************************************************************* ‰SECTIONƒ8**ˆNON-LEAPDAYSBEFORETABLE¥*Ç=DATEDBNLDC.W0,31,59,90,120,151,181,212,243,273,304,334,365Œ*Ç*ˆLEAPDAYSBEFORETABLE©*ÇFIRSTMMU(‰PEA…KILLERCRASHIFFIRSTMMUNOTTHERE'‰MOVE.W‚#'BE',-(A7)ŠBUSERRORSWITCHON,‰MOVE.B‚(A0),D0ŽVERIFYPRESENCEOFFIRSTMMU8‰MOVE.L‚A0,FRST451‹SAVEADDRESSOFFIRST68451INSYSPAR.‰MOVE.L‚A0,CURR451‹IT'SALSOTHECURRENT68451(‰MOVE.L‚#1,CURRSDŒSEGMENTDESCRIPTOR#1#‰LEA…N68451X(PC),A1‡ADDRESSOFEXIT6‰MOVE.L‚A1,2(A7)EXITIFBUSERRORWHILECOUNTINGMMUs%‰MOVE.W‚#3,D0FOURPOSSIBLELASTMMUsN68451B1‰MOVE.B‚(A0),D1ŽEXITTHROUGHBUSERRORIFNONEXT.‰MOVE.L‚A0,LAST451‹CURRENTMAYBETHELASTMMU)‰ADD.Lƒ#$40,A0ŽSETTOCHECKNEXTMMUSLOT‰DBRA„D0,N68451B‹LOOPTILLDONE+‰ADD.Lƒ#6,A7BUSERRORPOINTEROFFOFSTACKN68451X‰RTSšBACKTOINIT‰PAGE**ˆSTARTTIMER„(146818TIMER)*‰XREF†CRASHSAV‰XREF.S„TIMESLIC‰XREF.S„TIMINTV‰XREF.S„TIMINTV4‰XREF.S„PTMADDR ‰XREF†TIMSLIC‰XREF†TIMERA,TIMINTVA‰XREF†CLOCKFRQ* ‰XDEFƒTIMERSTTIMERSTE‰MOVE.LTIMSLIC(PC),TIMESLIC‚#TIMERINTERRUPTSBEFORETASKINTERRUPT'‰MOVE.LTIMERA(PC),A1‡GETTIMERADDRESS#‰MOVE.LA1,PTMADDRŠSAVEITFOREXEC‰BEQ„TIMERBEBRANCHIFNOTIMER)‰PEA„TIMERBE(PC)‰WHERETOGOONBUSERROR$‰MOVE.W#'BE',-(A7)‰SETBUSERRFLAG*4*ˆGetsystemtimeanddatefrombatterybackedtimer*6‰MOVE.B„REGD(A1),D1‰ReadregdjusttoinsureVRTison6‰MOVE.B„#$82,REGB(A1)‡Besurenoupdates,24hourmodeTIMERWT(O1>9BA#/‰BTST†#7,REGA(A1)‰Isanupdateinprogressnow?‰BNE.S…TIMERWTBranchifyes *‰CLR.L…D1’Prepareforfollowingshortload'‰MOVE.B„HRS(A1),D1ŠGethoursfromtimer0‰MOVE.L„#3600*1000,D2‡Addendisonehour'smsecs+‰CLR.L…D0’CalculationwilltakeplaceinD0*‰BRA.S…CALCLOOPŒStartthecalculationloopCALCHRS)‰ADD.L…D2,D0Addonehour'smsecstotimeCALCLOOP*‰DBRA†D1,CALCHRSŠLoopuntilhourscomputed*‰CLR.W…D1’Prepareforfollowingshortload*‰MOVE.B„MINS(A1),D1‰Getminutesfromtimer)‰MULU.W„#60,D1ŽConvertminutestoseconds*‰CLR.L…D2’Prepareforfollowingshortload*‰MOVE.B„SECS(A1),D2‰Getsecondsfromtimer‰ADD.L…D2,D1D1=totalseconds‰MULU.W„#1000,D1ŒD1=totalmsecs!‰ADD.L…D1,D0D0=grandtotalmsecs#‰MOVE.L„D0,TIMEOD‹Storeitforexec (‰CLR.L…D0’Preparetoformgregoriandate'‰MOVE.B„YEAR(A1),D0‰Getyearfromtimer‰ADD.W…#1900,D0ŒYear=1900+YY‰SWAP†D0’D0=YYYY0000 ‰MOVE.B„MONTH(A1),D0ˆD0=YYYY00MM‰LSL.W…#8,D0D0=YYYYMM00"‰MOVE.B„DAYOMTH(A1),D0†D0=YYYYMMDD‰BSR‡DATEGOŽConverttoordinal!‰MOVE.L„D0,DATEGivedatetoexec**ˆNowstarttimerticking**‰MOVE.WTIMINTVA(PC),D1…INTERRUPTINTERVAL ‰MOVE.WD1,TIMINTVŠSAVEFOREXEC4‰MOVE.B#$A,REGA(A1)ˆSELECTPERIODICACTIVATIONRATE0‰MOVE.BREGC(A1),D0‰RESETANYPENDINGINTERRUPTS&‰MOVE.B#$46,REGB(A1)‡ENABLETHETIMER.‰ADD.L‚#6,A7REMOVE'BE'ANDBUSERRORADDRESS‰RTS˜BACKTOINIT*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…WhenincorporatinganydriversduringSYSGEN„<<<<<<<?*‚>>>>>>>…thatrequirememoryallocatedforthemasperƒ<<<<<<<?*‚>>>>>>>…thedriverpackageinstructions-thisistheƒ<<<<<<<,*‚>>>>>>>…spotthefile(s)gointo!!–<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>µ<<<<<<<E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<)ŠLEA„6(A7),A7‡REMOVEBUSERRORFROMSTACK INITIORƒRTSO*******************************************************************************2*ˆDATECONVERSIONSFROMONEBINARYFORMTOANOTHER*Ç6*ˆORDINALDATE-->DAYNUMBERWHEREDAY1=JAN11980***ˆCALL *’BSR‡DATEGO*¦BINARYGREGORIAN-YYYYMMDD*§TO*¦BINARYORDINALƒ-DAYNUMBER*ˆINPUT'*’D0=DATETOBECONVERTED--YYYYMMDD**ˆOUTPUT#*’D0=CONVERTEDDATE‡--DAYNUMBER*O*********************************************************************************ˆNON-LEAPDAYSBEFORETABLE¥*Ç=DATEDBNLDC.W0,31,59,90,120,151,181,212,243,273,304,334,365Œ*Ç*ˆLEAPDAYSBEFORETABLE©*Ç,5*‚Therearetwospecialvaluesfor:,*‰0=COMINT(thecommoninterrupthandler).(*‰1=don'ttakeoverthevectoratall.E*‚Entriesinthevectortablemustbeassignedinorder--thatis,theB*‚vector#'sintheVECTORinvocationsmustbeinascendingorder.H*‚InthecasewheretwocontiguousVECTORinvocationsleaveagapinthe‚5‹<“3K*‚vector#'s,thosevector#'sinthegapwillbeassignedthesamehandler9*‚asthatofthelowervector#ofthepair.‚Forexample,+*‰VECTOR$23,0ŽPoints$23to$27toCOMINT.-*‰VECTOR$28,1ŽLeaves$28to$2Fastheyare.-*‰VECTOR$30,ROUTINE1‡Points$30toROUTINE1.G*‚Ifthegaptobefilledhasasecondparameterotherthan0or1,theJ*‚addressassignedtothevectorwillbeincrementedby2foreachvector:7*‰VECTOR$23,XŽPoints$23toX,$24toX+2,$25toX+4.$*‰VECTOR$26,0ŽPoints$26toCOMINT.'*‚Theendofthelistissignifiedbya*‰DC.Lƒ0F*‚andthesecondparameterofthelastpriorVECTORinvocationwillbeK*‚appliedtoallfurthervectors,upto$FF.‚Again,ifthesecondparameterK*‚wasnota0or1,theaddressassignedtothevectorswillbeincremented#*‚by2foreachvectorinsequence.* VECTOR„MACROŒIFLEƒ\1-VECT_NUM0ŽFAILƒ499ŒVector#'smustbeinascendingorder!ŽMEXITŒENDCŒIFNCƒ'\2','0'ŽIFNCƒ'\2','1'XREFƒ\2ŽENDCŒENDCVECT_NUM„SET„\1ŒDC.Lƒ\1<<24+\2ŠENDM  * *‚Firstsetupthetableheader.*ŠSECTIONLEVEL00  0ŠDC.Lƒ'!VCT'Dumpeyecatcherfor'VeCtorTable.'2ŠDC.LƒCOMINTPuttheaddressofCOMINTheresothe"*§execinitializercanfindit;he#*§isn'tlinkedwiththeexec,sohe*§wouldn'tknowotherwise.ŠPAGE*)*‚Herearetheactualvectorassignments.I*‚NoticethatwhetherornottheillegalinstructionvectoristakenoverE*‚byRMS68Kiscontrolledbyansysgenparameter.‚DuringRMSGEN,this$*‚parameterissubstitutedsuchthatA*„0=theexecshouldleavetheillegalinstructionvectoralone.?*„1=theexecshouldtakeovertheillegalinstructionvector.J*‚YoumightwanttheexectoleavetheillegalinstructionvectoraloneifI*‚youwanttousetheROMdebugger,sinceitusesillegalinstructionsas*‚breakpoints.* 8VECT_NUM‚SET„1’Initializethevectornumberto1sothat&*§thelowestvectornumberthatcanbe*§setafterwardsis2. ŠVECTOR$02,PROGINT2‡Buserror.#ŠVECTOR$03,PROGINT3‡Addresserror.$*§Ifwe'renotsupposedtotakeover/ŠIFEQƒ\ILLINSTRŠtheillegalinstructionvector,9ŠVECTOR$04,1Žleavetheillegalinstructionvectoralone.ŠENDC–*!*§Ifwearesupposedtotakeover/ŠIFNEƒ\ILLINSTRŠtheillegalinstructionvector,>ŠVECTOR$04,PROGINT4‡takeovertheillegalinstructionvector.ŠENDC–*#ŠVECTOR$05,PROGINT5‡Divisionby0.+*‚insequence„$06,PROGINT6ŠCHKinstruction.-*‚insequence„$07,PROGINT7ŠTRAPVinstruction./*‚insequence„$08,PROGINT8ŠPrivilegeviolation.'ŠVECTOR$09,PROGINT9‡Instructiontrace.8ŠVECTOR$0A,PROGINTA‡Reservedinstructionopcodes$AXXX.>*‚insequence„$0B,PROGINTBŠReservedinstructionopcodes$FXXX.'ŠVECTOR$0C,0Ž($0C-$17gotoCOMINT.)'ŠVECTOR$18,SPURINTˆSpuriousinterrupt.'ŠVECTOR$19,0Ž($19-$1FgotoCOMINT.)ŠVECTOR$20,TRAP0ŠTRAP#0.ŠVECTOR$21,TRAP1ŠTRAP#1.#ŠVECTOR$22,TRPVCT2ˆTRAP#2to#15.'ŠVECTOR$30,0Ž($30-$3FgotoCOMINT.)0ŠVECTOR$40,CMRSFAIL‡SYSFAIL*fromtheVERSAbus.<ŠVECTOR$41,KILLER‰AcknowledgementofinterrupttoVERSAbus;%*§Wemaskthisinterrupt,sowedon't*§expecttousethisvector.<ŠVECTOR$42,KILLER‰BusClearinterruptfromVERSAbusI/F.‚We%*§shouldn'tbegettingthis,sincewe'*§useblocktransfermodeonly ifthere%*§arenootherpotentialbusmasters.-ŠVECTOR$43,0ŽNEC7201serialports(COMINT).,ŠVECTOR$44,TIMEINTˆM146818realtimeclock.7ŠVECTOR$45,0ŽM6840programmabletimermodule(COMINT)./ŠVECTOR$46,POWRFAIL‡ACFAIL*fromtheVERSAbus.9ŠVECTOR$47,KILLER‰M68451memorymanagementunit.‚Getting'*§oneofthesemeanssomething'swrong.#ŠVECTOR$48,0Ž($48goestoCOMINT.))ŠVECTOR$49,0ŽI/OchannelIRQ1*(COMINT).)ŠVECTOR$4A,0ŽI/OchannelIRQ2*(COMINT).)ŠVECTOR$4B,0ŽI/OchannelIRQ3*(COMINT).)ŠVECTOR$4C,0ŽI/OchannelIRQ4*(COMINT).8ŠVECTOR$4D,1ŽSoftwareabort(leaveitpointingtobug).'ŠVECTOR$4E,0Ž($4E-$FFgotoCOMINT.)  !ŠDC.Lƒ0’(Endoftableindicator.)   ŠEND4INITIO„IDNTƒ5,1RMS68KI/OinitializerfortheVM03.O*******************************************************************************O*******************************************************************************O**********************************************************************************É***E***…ROUTINE:‚INITIO--RMS68KI/OINITIALIZERFORTHEVM03BOARD.†******É***J***…ENVIRONMENT:‚PartoftheRMS68KexecfortheMotorola68000family.***(***‡Copyright1983byMotorola,Inc.¢******É***D***…FUNCTION:‚RoutinesfromthismodulearecalledbytheRMS68K‡***E***‡routineINITduringsysteminitialization.‚Allboard-specific„***.***‡initializationisdoneinthismodule.œ******É***G***…NOTES:‚ThismoduleisSUBSed,ASMed,andLINKedatSYSGENtime.„***?***‡Allmoduleswillrunatlevel7andinsupervisormode.‹******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‚ChangesI*…--------‚------‚-------------------------------------------------------*…10/13/83ƒSJF„Initialwriting.?*†1/10/84ƒMSL„VerifythatUIP(update-in-progress)bitisreset&*—beforereadingrealtimeclockchip.* * *‚XDEF's.*,ŠXDEFƒINITMMUŒRoutinetoinitializetheMMU.,ŠXDEFƒTIMERSTŒRoutinetostartupthetimer.3ŠXDEFƒINITIORoutinetosetupalltheotherboard-*§specifichardware. * *‚XREF's.* *…Routines:)ŠXREFƒKILLERRoutinetocrashthesystem.*…ParametersfromINITDAT:0ŠXREFƒMMUAddrofMMU;0ifwe'renotusingone.-ŠXREFƒTIMSLICŒ#oftimerticspertimeslice.+ŠXREFƒTIMERAAddroftimerchip(MC146818).4ŠXREFƒTIMINTVA‹#ofmillisecondsbetweentimertics.4ŠXREFƒCLOCKFRQ‹Frequencyofclock(tosetuptimer).*…SYSPARvariables:6ŠXREF.SMMUHEREŒAddrofMMU;0ifwe'renotusingone.›3¤E¬C´?¼2Ä0ŠXREF.SFRST451ŒAddroffirstMMUinthesystem./ŠXREF.SLAST451ŒAddroflast‚MMUinthesystem.7ŠXREF.SCURR451ŒPtrtoMMULOADMMUshouldlookatnext.7ŠXREF.SCURRSDCurrentsegmentdescriptor#intheMMU.7ŠXREF.SDPRVAODual-PortedRamVersabusAddressOffset.ŠXREF.SDATEDate.ŠXREF.STIMEODTimeofday.0ŠXREF.STIMESLIC‹#oftimerticspertimeslice.7ŠXREF.STIMINTVŒTimeintervalbetweentimerinterrupts..ŠXREF.SPTMADDRŒAddroftimerchip(MC146818). *„Others:.ŠXREFƒCRASHSAV‹PlacetoSAVEinfoifweCRASH.ŠXREFƒDATEGOFromINITIO2.AG  **‚Includedfiles:**‰9995.&.UTILITY.MC*‰9999.M68451.M68451.EQ*‰9999.M146818.M146818.EQ*ŠNOLISTŠINCLUDE9995.&.UTILITY.MCŠINCLUDE9999.M68451.M68451.EQ ŠINCLUDE9999.M146818.M146818.EQŠLISTŠPAGEO*v*****************************************************************************O**********************************************************************************É***6***…ROUTINE:‚INITMMU--INITIALIZETHEM68 451MMU.•******É***F***…FUNCTION:‚VerifiestheexistenceoftheM68451MMUandsetsit…******‡upforusebyRMS68K.­******É******…NOTES:¾******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆD******‡A:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³***+***‡Supervisormode,interruptlevel7.Ÿ******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É***O*******************************************************************************O*^*****************************************************************************  ŠSECTION8ŠOPT„BRS INITMMU: +ŠSAVEƒD0/A0ŽSaveregisterswe'llblowaway. *!*‚ArewesupposedtohaveanMMU?*BŠMOVE.LMMU(PC),MMUHERE„SettheSYSPARparameterwhichtellswhere8ŠIF…THENŠtheMMUis.‚Ifthere'ssupposedtobeone, ***‚Yes;setuptheotherSYSPARparameters.*)ŠMOVE.LMMU(PC),A0‰A0<--ptrtotheMMU.8ŠMOVE.LA0,FRST451‰Ouronly68451isobviouslythefirst9ŠMOVE.LA0,LAST451‰68451,thelast68451,andthecurrentŠMOVE.LA0,CURR451‰68451.7ŠMOVE.L#1,CURRSDŠThecurrentsegmentdescriptoris#1. *@*‚Clearallsegmentdescriptorsexcepttheonewe'reusing(#0).*5ŠPEA„KILLERSetupforustogotoKILLERifwegetaŠPUSHƒ#'BE'Žbuserror.<ŠFORD0=#1TO#31DO…Forsegmentdescriptors1through31,*ŠMOVE.BD0,DP(A0)Š.‚Selectthedescriptor.7ŠMOVE.B#0,SSR(A0)‰.‚Initializeitsoitwon'tbeused.ŠENDF–*2ŠADD.L‚#6,SPŽGetthebuserrorjunkoffthestack. ŠENDI **‚Exit.*,ŠRESTORED0/A0Restoreregistersandreturn.ŠRTS—*ŠPAGEO*********************************************************************************ˆSTARTTIMER„(146818TIMER)* *G*‚Thismacrowillverifythatabyteiswithinaspecifiedrange.‚IfitH*‚isnotwithintherange,abranchistakentoRANGE_ERR.‚ThesyntaxisD*„CHECK_RANGE.,,F*‚DistanceisSforshortbranches,Lforlongbranches,ornothingif*‚thedefaultwilldo.6*‚Thebytetocheckistreatedasanunsignedinteger.*CHECK_RANGE MACRO ŠCMP.B‚\2,\1ŠBLO.\0RANGE_ERR ŠCMP.B‚\3,\1ŠBHI.\0RANGE_ERRŠENDM  TIMERST:E‰MOVE.LTIMSLIC(PC),TIMESLIC‚#TIMERINTERRUPTSBEFORETASKINTERRUPT'‰MOVE.LTIMERA(PC),A1‡GETTIMERADDRESS#‰MOVE.LA1,PTMADDRŠSAVEITFOREXEC!‰BEQ.L‚TIMERBEBRANCHIFNOTIMER)‰PEA„TIMERBE(PC)‰WHERETOGOONBUSERROR$‰MOVE.W#'BE',-(A7)‰SETBUSERRFLAG*4*ˆGetsystemtimeanddatefrombatterybackedtimer* UIP_LOOP:.‰BTST†#7,REGAWaitforUIPbittoresetbefore#‰BNE.S…UIP_LOOPŒreadingclockchip. *‰CLR.L…D1’Prepareforfollowingshortload'‰MOVE.B„HRS(A1),D1ŠGethoursfromtimerŠCHECK_RANGE.LD1,#0,#230‰MOVE.L„#3600*1000,D2‡Addendisonehour'smsecs+‰CLR.L…D0’CalculationwilltakeplaceinD0*‰BRA.S…CALCLOOPŒStartthecalculationloopCALCHRS)‰ADD.L…D2,D0Addonehour'smsecstotimeCALCLOOP*‰DBRA†D1,CALCHRSŠLoopuntilhourscomputed*‰CLR.W…D1’Prepareforfollowingshortload*‰MOVE.B„MINS(A1),D1‰GetminutesfromtimerŠCHECK_RANGED1,#0,#59)‰MULU.W„#60,D1ŽConvertminutestoseconds*‰CLR.L…D2’Prepareforfollowingshortload*‰MOVE.B„SECS(A1),D2‰GetsecondsfromtimerŠCHECK_RANGED2,#0,#59‰ADD.L…D2,D1D1=totalseconds‰MULU.W„#1000,D1ŒD1=totalmsecs!‰ADD.L…D1,D0D0=grandtotalmsecs#‰MOVE.L„D0,TIMEOD‹Storeitforexec (‰CLR.L…D0’Preparetoformgregoriandate'‰MOVE.B„YEAR(A1),D0‰GetyearfromtimerŠCHECK_RANGED0,#0,#99‰ADD.W…#1900,D0ŒYear=1900+YY‰SWAP†D0’D0=YYYY0000 ‰MOVE.B„MONTH(A1),D0ˆD0=YYYY00MMŠCHECK_RANGED0,#1,#12‰LSL.W…#8,D0D0=YYYYMM00"‰MOVE.B„DAYOMTH(A1),D0†D0=YYYYMMDDŠCHECK_RANGED0,#1,#31 *I*‚Thetimeanddatelookreasonable,solet'sgoaheadandkeepthoseforG*‚ourown(thechipmustnothavelostpowersincelasttime).‚Wecan'tI*‚tellforsurewhetherthechiplostpower,eventhoughthere'sabitinJ*‚thechipthatsa ysso,becausethebughasalreadyreadtheinformation,*‚makingitunavailabletous.* ‰BSR.L…DATEGOŽConverttoordinal!‰MOVE.L„D0,DATEGivedatetoexec ŠBRA.S‚GO_TIMER *H*‚Ifwecomehere,oneofthefieldsreadfromtheclockchipiswhacko.*‚Setsystemtimeanddayto0.*-RANGE_ERRMOVE.L#0,TIMEODŠTimeofday<--0.ŠMOVE.L#0,DATEŒDate<--0. **ˆNowstarttimerticking*KGO_TIMERMOVEƒTIMINTVA(PC),TIMINTV‚SavetimerinterruptintervalinSYSPAR.4‰MOVE.B#$A,REGA(A1)ˆSELECTPERIODICACTIVATIONRATE0‰MOVE.BREGC(A1),D0‰RESETANYPENDINGINTERRUPTS&‰MOVE.B#$46,REGB(A1)‡ENABLETHETIMER.‰ADD.L‚#6,A7REMOVE'BE'ANDBUSERRORADDRESS‰RTS˜BACKTOINIT*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…WhenincorporatinganydriversduringSYSGEN„<<<<<<<?*‚>>>>>>>…thatrequirememoryallocatedforthemasperƒ<<<<<<<?*‚>>>>>>>…thedriverpackageinstructions-thisistheƒ<<<<<<<,*‚>>>>>>>…spotthefile(s)gointo!!–<<<<<<<*‚>>>>>>>µ<<<<<<<=*‚>>>>>>>…Thisisalsothespotforcodeforadriver…<<<<<<<>*‚>>>>>>>…that‚requiresothertypesofinitialization,ƒ<<<<<<<0*‚>>>>>>>…such‚asclearinganinterrupt.‘<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>‘MERGEITHERE—<<<<<<<*<*ˆWhenyouwritethecodethatistobemergedhere,wrapit*ˆaroundwiththefollowing:*:*ˆAtthebeginning,withDRVRxOUTreferringtoyourunique*ˆlabel,putthiscode:*'*‹PEA„DRVRxOUT(PC)„IFBUSERROROCCURS,*¢RETURNORGOONTONEXT*¢DRIVER'SINITIALIZATION**‹MOVE.W#'BE',-(A7)…SAVE'BUSERROR'FLAG*9*ˆTheninsertthecodetodowhatyouneedtodoforthis*ˆparticulardriver.**ˆAttheend,putthis:***‹LEA„6(A7),A7ˆREMOVEBUSERRORFROMSTACK*DRVRxOUTƒEQU„**=*ˆInthisway,ifthecodeforonedrivercausesabuserror,.*ˆthecodeforotherdriverswillbeexecuted.*E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<G***********************************************************************    ‰END éééé ‰SECTIONƒ8ŠRTS‰PAGEO*******************************************************************************2*ˆDATECONVERSIONSFROMONEBINARYFORMTOANOTHER*Ç6*ˆORDINALDATE-->DAYNUMBERWHEREDAY1=JAN11980***ˆCALL *’BSR‡DATEGO*¦BINARYGREGORIAN-YYYYMMDD*§TO*¦BINARYORDINALƒ-DAYNUMBER*ˆINPUT'*’D0=DATETOBECONVERTED--YYYYMMDD**ˆOUTPUT#*’D0=CONVERTEDDATE‡--DAYNUMBER*O*********************************************************************************ˆXDEF*‰XDEF†DATEGOŽToINITIO1.AG***ˆNON-LEAPDAYSBEFORETABLE¥*Ç=DATEDBNLDC.W0,31,59,90,120,151,181,212,243,273,304,334,365Œ*Ç*ˆLEAPDAYSBEFORETABLE©*Ç éééééééééééééééé> éééééééééééééééé? éééééééééééééééé? éééééééééééééééé@ éééééééééééééééé@ ééééééééééééééééA ééééééééééééééééA ééééééééééééééééB ééééééééééééééééB ééééééééééééééééC ééééééééééééééééC ééééééééééééééééD ééééééééééééééééD ééééééééééééééééE ééééééééééééééééE ééééééééééééééééF ééééééééééééééééF ééééééééééééééééG ééééééééééééééééG ééééééééééééééééH ééééééééééééééééH ééééééééééééééééI ééééééééééééééééI ééééééééééééééééJ ééééééééééééééééJ ééééééééééééééééK ééééééééééééééééK ééééééééééééééééL ééééééééééééééééL ééééééééééééééééM ééééééééééééééééM ééééééééééééééééN ééééééééééééééééN ééééééééééééééééO ééééééééééééééééO éééééééééééééééé