IMD 1.17: 11/11/2014 12:57:29 82VKXBVERDOS B* VERSADOS/RMS68K OBJECT 4.3 SN=39358 8 OF 11  BT0882VKXBVERDOS 0420¿q-‰MOVE.L#\NUSRDAC,D3‡getnumberofinterruptlevelspermodule$‰MOVE.LD2,D4Žsavenumberofmodules!‰MULUƒD3,D4ŽgetnumberofDAC-IDs-‰MULUƒ#DACIDLNG,D4‡get#ofbytesforDAC-IDs%‰ADD.L‚#DACNTRY,D4ˆaddinheadersize)‰MULUƒ#IOLNG,D2‰get#ofbytesforIOmap,‰ADD.L‚D4,D2Ž#ofbytesneededforDACtable‰MOVE.LD2,D5Žsave#ofbytes'‰ADD.L‚#255,D2Œrounduptopageboundry‰ASR.L‚#8,D2Ž#ofpagesneeded'‰BMI.S‚DACERRbranchifnegative,error)‰MOVE.L#0,A0Žclearforallocatingmemory)‰MOVE.WD2,A0Žnumberofpagestoallocate-‰MOVE.L#T0PAGAL,D0ˆpageallocationdirective"‰TRAPƒ#0‘callRMS68Ktogetmemory"‰BRA.S‚DACOKŽbranchifgoodreturn1DACERRƒMOVE.L#32,D0fatalerror-gostopsystem‰TRAPƒ#08DACOK„MOVE.L#'!DAC',DACEYE(A0)setDACtableeyecatcher)‰MOVE.WD5,DACLNG(A0)†#ofbytesintable5‰MOVE.W#DACNTRY,DACOFST(A0)offsettoDAC-IDentries&‰MOVE.WD4,DACIO(A0)†offsettoIOmaps'‰CLR.B‚DACNAL(A0)‰noDACsallocatedyet,‰MOVE.L#\NDAC1,D4ŠgetnumberofDACmodules/‰MULUƒ#\NUSRDAC,D4‡getnumberofDAC-IDentries-‰MOVE.BD4,DACNMAX(A0)…maxnumberofDAC-ID's6‰MOVE.LA0,DACTBLŠsavetableaddressinsystemparams.0‰LEA„DACID(A0),A0‡startaddressoftableentries/‰SUB.W‚#DACNTRY,D5ˆnumberofbytestosettoFF‰ASR.W‚#1,D5Žnumberofwords3‰MOVE.W#$FFFF,D4Šstorethisinallentrylocations&DACCLRƒMOVE.WD4,(A0)+‹settheentries2( ‰SUB.W‚#1,D5Ždecrementcounter ‰BNE.S‚DACCLRbranchifnotdone NODACSƒEQU„*‰ENDC*‰ENDéééééééH1DR605 ASREL' D605 SA!'A„MVME605 DAC DRIVER 8/04/832pDACTBL (œF3 šÜ4022484 44ÐHçþ m""y(F3 ³üf |ü¤`„R) ) ²) l|ú¤`l2)²im|õ¤`ì#­F3 XA3¼\3¼\3¼\3¼ 2)6) $-"´±gXASfô) J±F3 0kXCSfô`”#‚0B-¤LßNuB…,*:*"mPaˆ` NqB€0<Nu&FB€J-¤F3 g-¤`T(y( ”!DACg0<ü`@ *, t °´ gBSfò0<ý`""LÓÂpAúF3 þä<+¼XWÈÿüfXˆ0Nð0<ô6€NuHçþQaxfDB‡B‚B0+o2 @n,43 BF3 n:ÄüX‚Jq j R‡#Ž TAS@nÜ`40<ö`.0<÷`(0<ý`"0<þJGg6<ÿÿBF3 43ÄüX‚3ƒ TASGnìPLß`@>,, (-"¸´pg XGSfô0<ýNurB‚F3 ½ñfa3¼ÿÿ\R‚ ‚fæB€`þ m"01¼¼Nu/ >+c F3 c &_0<÷`ÊSG\‹2 Ac &_0<ö`´4,:ÊüSB/ "Naú`NqLßBF3 0<` F6,$t0"WX‰Âü½ñg Lß 0<ò`l61"_*JXg. ‚ü<F3 Ìü4Hõ¯`p$ „“É2hÿþAúJ2<p"N@`6`þ/8„0à\„0QÊÿÀQÏÿZ0&_J@F3 kg NpN@``þa4B@6€B€Nu6€NuHç?>|øÿBB AÄü4Lð¯ pÂüF3 a¢Lß|üNsHçÿþ N&( B‚4< HB‚ü4pN@``LßÿNu`øfJ…g i6p3 N@`` J…gJ0PfT—T—NuNu4ééé 0;1FTDAC ASREL' D605LIB SA!)„DAC subroutinesB2ILOC ŒIDACCLS ,IDAOPEN IDACNVT >)’F3 Hç€paP$¼B€0*ã€\€2€ KpF32&_Nu k (j)žF3 Hç€pab$¼B€0*å€\€2€ Kp,, (-"¸´pg \GSfô0<ýNuB4pNuHçþ/>,, F3 (-"¸´pg \GSfô0<ý`B† ôp.LßNuHçþ/>,, "-"²´pg \GF3 Sfô0<ý`BBBA tp4pÂBƒ.LßNurB‚½ñf 01a3¼ÿÿ\R‚ ‚F3 fâB€`þ m"NuHçþBƒrB‚B€0+6+g½ñfƒJCfa`R‚\F3 ‚fà0<ò`B€Lß`²/ $m"$_Nu/ $m"±$_Nu/ $m"0+@ÿgF3 Ê$_NuHçþBƒrB‚B€0+6g½ñf¤ƒJCfa¸`R‚\ ‚fà`ŒLßF3 B€`DHçþB…BƒrB‚B€0+6@ÿg½ñfÿbƒJCfa€`\R‚`ä7E`ÿPF3 0<ô``ø6€NuŸü /KB†BƒB‚B€0+J@gpB…:3`/E. ߯.aÌÎüF3 XG½ñpf2&3`g4\FAúTB-)$/Hçÿþ"Cp"N@`` aþèLßÿS@`¨B€0<öF3 `B€0<ø`LßÿB€0<ñ`&oB€ßü `ÿdHçÿþ*A…ÿ($< F3 aB aþœÈüD XD$y(,mPB‡* ,-&* ¼ƒg Ôü4Sk`î02@a$LßF3 ÿNsQB¯RoJEgçïSE`ô:/PNu02@ff(-"a ` NpN@F3 NuHçÿþ NpN@``LßÿNu`øfJ…g i6pN@`` J…gJ0PfT—T—NuHçF3 þŸü $y(B‡* -&* °ƒg Ôü4Sk`î/J$< /BB„pÞü 3 Lßþ|ÿþNu4éŠ;1FTACO ASREL' D615LIB SA!3!„ACO subroutines`2IACOPEN IACOOFF RIACOCLS .IACOPLS nIACOSTA `IACOOUT @)¾F3 Hç€pa‚$¼B€0*å€\€2€ Kp:ÄüX‚Jq jBR‡63/C&/a^ @ýg03ƒ #Ž XAS@nÄF3 a| @ýgB€`40<ö`.0<÷`(0<ý`"0<þJGg6<ÿÿB43ÄüX‚3ƒ XASGnìF3 PLß`øHçþ/>,, (-"¸´pg \GSfô0<ý`B† ôp.LßNuHçF3 þ/>,, "-"²´pg \GSfô0<ý`BBBA tp4pÂBƒ.LßNu>,F3 , (-"¸´pg \GSfô0<ýNuB4pNurB‚½ñf 01a3¼ÿÿ\R‚ ‚F3 fâB€`: m"NuHçþBƒrB‚B€0+6+g½ñfƒJCfa`R‚\ ‚F3 fà0<ò`B€Lß`î/ $m"$_NuHçþBƒrB‚B€0+6g½ñfȃJCF3 fa`R‚\ ‚fà`°LßB€`¤/ $m"±$_NuHçþB…BƒrB‚B€0+6@F3 ÿg½ñfÿxƒJCfa`\R‚`ä7E`ÿf/ $m"0+@ÿgÊ$_Nu0EúÿªJ’g"HüB2ü"Ú2ü B™B™p,, (-"¸´pgG Sfò0<ý`(B† oQF3 f ´p` ôp` g ôp.LßNu ´pa`îýþÿþ ï÷ÿ÷F3 HçÿþB€Jk4g gpgP@B2;Æ €x騃ÿá‹‚ƒ‚€F3 aLßÿNuB€âÞ;ªPÃ4pà‰ƒ4pà‰ƒ4pÿ≀ƒ4pNuHçþ/>,, F3 "-"²´pgG Sfò0<ý`Ð@Æ|BBBA tpÐFD¨ÈBFB4pF3 ÂB€4p€èƒFDÉBBBAè(FD¨ (ÈBFB4pÂB(€4F3 p@è ƒ(FDÉ(J(J(JJ((ä€4p@( ä€4p F3 @ ( ä€4p @ (ä€4p @B€FÆ.LßNu>,, (-"¸´pF3 gG Sfò0<ýNuB´pB´pNurB‚½ñf01a3¼ÿÿ\R‚ ‚fàB€F3 `À m" lV¨èf ff<`< nF3 ¨ Nu n¨`ò n¨`æ¨ `à Q€¨ ¨è ¨NuHçF3 þBƒrB‚B€0+6+g½ñf"81gƒJCfa&`R‚\ ‚fÔ0,f2`2)aü0aüTNuÿÿHçþrB‚B€0+ @ÿn®g0½ñF3 fþ:81fþ4fþ,Ä3„HçÿþaLßÿR‚\ ‚fÀ`ÿrCúF3 aÿ~Nuþ÷Ÿü /KB†BƒB‚B€0+J@gŠB…:3`/E. ߯.a¦ÎüF3 XG½ñpfB61pg@&+gBAúdB-)$/"CHçÿþp"N@``.LßÿHçÿþ F3 aý’LßÿS@`–B€<ö`"B€<ù`B€<ø`LßÿB€8ñ`&oB€ßü `DF3 Hçÿþ*A…ÿa aý˜LßÿNsQB¯RoJEg çïSE`ò:/PF3 Nu6€Nup N@fJ…g i6pN@`` J…gJ0PfT—T—NupN@`NqT—NuHçþF3 ŸüB¯ $y(B‡* -&* °ƒg ÔøSk”`ì/J$< aÆ/BB„F3  gtR¯ ÈüD XD$y(,r@02@@gJ. Þ$Aú8B-)àHÀüF3 "|2@NVÿ¸H×ÿp"N@``L×ÿ(nBÿaþL×ÿN^` $/a" / ÞüF3 LßþJ€g |`|ÿþNu02@f(-"aVNu` NpN@Nu m"F3 ( g ( f„RB( g( fpRB(g(fdRB(gF3 (fRRB(g(fFRB(g(f4RB( g( f&RBF3 ( g( fRBNuJ(NuJ(NuJNuJ(NuHçÿþ$< BƒB„B†F3 ÈüDAÿ*A"m"$y(B‡ -* ** °…g ÔøSFgJ`î,r@2@gF3 )gHçÿþaþÊLßÿ`)fHçÿþaþ²Lßÿ‚ÿ(JBaûúLßÿNs3 Hçÿþ NpN@``LßÿNu`ø4éé O*******************************************************************************O*********************************************************************************‡9992.&.D625GEN.CI*:*‡CommandsinlcudedintothesysgencommandfileSYSCMD.CDB*‡toincludetheMVME625devicedriverintoVERSAdosfortheVM03.* DR625R‚=*MSGMSG‡STARTOFMVME625DRIVERMSG†SUBS.&.D625IOC.AI†SUBS.&.D625.LG†LINK.&.D625.LG †PROCESSD625 †ENDD625…IFEQˆ\LINKLSWˆ=COPY‡\LINKLS,\WORKLS;A…ENDCO*******************************************************************************O*******************************************************************************éééééøG************************************************************************&*Codetobeincludedin‚IOCINT.AGƒfor,*’buildingtheCCB'sfortheMVME625boards.*G************************************************************************G*======================================================================*@* THIS IS THE CODE NEEDED TO SET UP A CCB FOR ONE MVME625 BOARD.*@* Add a CCB definition for each additional board in your system.E* An additional board may be placed at an offset of $2 bytes from the@* first, for example, on the VME110, two boards may be placed at?* $FE6001 and $FE6003, provided these addresses do not conflict+* with any other board's memory mapped I/O.A* Note that the memory mapped I/O address must be unique for eachB* board, must not conflict with any other board in the system, andB*mustmatchtheon-boardjumperselections.‚SincethisboarddoesG* not generate interrupts it may be nice to choose the lowest interrupt5* level and software priority level for CCB chaining.*C* DEVADD changes depending on whether you are using the VM02, VM03,* VME110, or VME/10.* * Example:*ˆVME110†VM02‡VM03†VME/10!*ˆ$FE6001…$F80001„$FA0001ƒ$F1C001*G*======================================================================*<*ˆSet"DCO"tostartaddressoftheMVME625driver(obtained*’intheSYSGENprocess):0‰IFNE‚\NDCO1ˆassembleifhaveanyMVME625boardsDCO†EQU‡\DR625R*?*ˆSet"DEVADD"tomemorymappedI/OaddressforthisDCOboard:DEVADDƒSET‡\IOBASE+$1*=*ˆSetupDCOCCB's(forjustoneDCOboard,inthisexample).8 CDB XOPEXC,'DCO1',$80,254,DCO,0,DEVADD,1,INT1,LVL1,$50,&0,0,0,0,0,0,0,0,0,0,0‰ENDC**I********************************************************************** *****0;1FTRIO ASREL' RIOLIB SA!A%„RIO subroutines~2IRIOPEN IRIOOFF RIRIOCLS .IRIOPLS ŠIRIOENB nIRIODSB |IRIOSTA `IRIOOUT @)ÜF3 Hç€pa $¼B€0*å€\€2€ Kpconvenience, this release includes several files which contain@either the actual code to be added or a sample of the code whichconvenience, this release includes several files which contain@either the actual code to be added or a sample of the code which*CDB=ChannelDataBlock:‚usedbyIOCItoallocatechannels.*O******************************************************************************* **,*‚MacrotodefineaChannelDataBlock(CDB)8*‚UsedbyIOCItoallocatechannels;equatesareinLV5.*/CDBLNEQU$2E„LengthoftheCDBdatastructure. CDB MACRO*DC.L*+CDBLN„PointertonextCDBinlist.*D C.W\1‰OptionsfortheALLOCATEcommand.DC.L\2‰Channelmnemonic.DC.B\3‰Channeltype.4DC.B\4‰Maskedinterruptmaximuminstructioncount.$DC.L\5‰Physicaladdressofdriver.FDC.L\6‰Supervisorchannel'smnemonic(onlyifbit3ofoptionsset).?DC.L\7‰Physicaladdressofdeviceinmemory-mappedI/Ospace.?DC.W\8‰#ofbytesdeviceoccupiesinmemory-mappedI/Ospace.DC.B\9‰Vectornumber.DC.B\A‰Pollingpriority.DC.B\B‰Softwarepriority.DC.B\C‰Segmentcount.(DC.W\D‰Pollingbyteoffset.--[#1]--DC.B\E‰Pollingmask.DC.B\F‰Pollingtestvalue.7DC.W\G‰Offsetfromphysicaldeviceaddressforreset.DC.B\H‰Valueforreset.DC.B0ŠReserved.(DC.W\I‰Pollingbyteoffset.--[#2]--DC.B\J‰Pollingmask.DC.B\K‰Pollingtestvalue.7DC.W\L‰Offsetfromphysicaldeviceaddressforreset.DC.B\M‰Valueforreset.DC.B0ŠReserved.  ENDMééÆ,N==============================================================================B====‚NEWSFILEFORRIO(REMOTEINPUT/OUTPUT)DRIVERRELEASE‚====N============================================================================== SOURCE CODE RELEASE:  @RIO Driver Release 1.0 is compatible with RMS68K Release 4.1 andwith OEM-VERSAdos Release 4.1.   /This release consists of the following files -- ‰RIODriverfiles:'“9993..RIODRV.SA…RIOdriversourcefile/“9993..RIOASM.AF…RIOdriverassemblychainfile'“9993..RIODRV.RO…RIOdriverobjectfile,“9993..STDMACRO.SAƒMacrosusedinRIOdriver3“9993..TESTE.SA†ExampleprogramusingRIOdriverin©wait_for_eventmode.$“9993..TESTE.AF†Assemblychainfile. ‰Fileforallocatingmemory:“9993..RIOMEM.SA ‰SampleSYSGENfiles:)“9993..RIOGEN.CF…SampleSYSGENchainfile+“9993..RIOCMD.SA…SampleSYSGENcommandfile /‰Filestobemodifiedforsystemconfiguration: “9993..RIOIOC.SA…CCBallocations “9993..RIOCOD.SA…SYSGENcommands -‰FilestobemergedintoSYSGENcommandfile:1“9993..LNKRIO.LF…ChainfiletolinkinRIOdriver.“9993..LIOCINT.LF„ChainfiletolinkinIOCINT-“9993..LNKTEST.LF„ChainfiletolinkinTESTE ‰FilesassembledduringSYSGEN:3“9993..IOCINT.SA…CCBallocationroutinesourcefile3“9993..IOCVM.SA†MacrodefinitionforCCBallocation ‰FORTRANinterfacesubroutines:“9993..RIOLIB.SA…Sourcefile$“9993..RIOLIB.AF…Assemblychainfile“9993..RIOLIB.RO…Objectfile ‰"News"file:“9993..RIOSNEWS.NW ‰Systemequatefiles:$“9995..RIO.EQˆRIOdriverequatefile “9995..STR.EQˆRMS68Kequatefile2“9995..TCB.EQˆTaskControlBlock(TCB)equatefile5“9995..CCB.EQˆChannelControlBlock(CCB)equatefile!“9995..TIMER.EQ†Timerequatefile1“9995..NOL.EQˆInhibitlistingcommandsourcefile!“9995..TR1.EQˆTrap#1equatefile “9995..EXE.EQˆRMS68Kequatefile'“9995..LV5.EQˆLevel5(CMR)equatefile2“9995.C8OC.SYSPAR.ROSystemparametersobjectfile   ÏAØ2à1è*ð JNOTE:‚Allfilesonusernumber0ofthisdisketteshouldbecopiedtoyourKsystem disk user 0 since references to user 0 in the chain files, etc., areJunderstood by the operating system to be referring to user 0 of the systemKdisk.‚Thevolumenamewasleftoffoffilereferencesinthesechainfiles,Letc., to make it easier to copy files to any volume and use them from there.EC8OC.SYSPAR.RO, which normally resides in user number 9999, should be;copied to the same user number that RADDRV.RO is copied to.   ITheRIOdriversourcefileis:‚RIODRV.SA.‚Toassemblethisfile,usetheKchainfile:‚RIOASM.AF.‚Thefollowingequatefilesareusedintheassembly of RIODRV: “9995..STR.EQ “9995..TCB.EQ “9995..CCB.EQ “9995..LV5.EQ “9995..RIO.EQ   AIn order to incorporate the RIO driver into your system, you willGhavetoaddseveralitemstothestandardSYSGENcommandfile.‚Foryour@convenience, this release contains a sample SYSGEN command file.DYou will be able to modify the sample code and merge it in with your SYSGEN code.  &The RIO driver requires the following:<‰1)‚Memorymustbeallocatedfortheinternaldrivertables.:‰2)‚Achannelcontrolblock(CCB)mustbecreatedforeach5interruptlevelforwhichtheRIOboardisjumpered.   IThe size of the memory area set aside for the driver tables is determined9bytwovariablesasspecifiedbyyouintheSYSGEN.‚These$variables are "NRIO", and "NRIOINT". 6NRIO†ThisisthenumberofRIOboardswhichwillbeon6Šthesystem.‚Sincetherecanbenomorethan16boards8ŠontheI/OChannel(whichiswheretheRIOboardsare),#Šthemaximumvalueof"NRIO"is16. GNRIOINTƒThisvariableissettothenumberofhardwareinterruptlevels>ŠforwhichtheRIOboardswillbejumpered.‚Theminimumnumber'Šisoneandthemaximumnumberisfour. :Note that if you set either of these variables larger thanHactuallyneeded,thesystemwillstilloperatenormally.‚ThiswouldjustCresult in having more memory allocated for internal tables than was necessary. JThevariablesNRIOandNRIOINTaredefinedinthefileRIOCOD.SA.‚YouwillGhave to edit this file to reflect the correct values of these variablesAforyourparticularconfiguration.‚Thisfileistobemergedintoyour SYSGEN command file.   AThe code to allocate memory for the RIO driver internal tables isGcontainedinthefileRIOMEM.SA.‚ThisfileshouldbemergedintactintoCINTIOV2.SA,whichisafilealreadyinyoursystem.‚ThecommentsinIINTIOV2 indicate the location into which the RIOMEM code is to be merged.   EYour SYSGEN will set up a task which will allocate the CCB's (channel@control blocks) for the RIO boards during system initialization.IThe file IOCINT.SA is included in this release to simplify the allocation2oftheCCB's.‚ThefileRIOIOC.SAhasbeenincluded5to give you an example of the set-up used to pass theDinformation on each RIO board to the program which builds the CCB's.DAfter modifying RIOIOC to correspond to your configuration, you will7merge parts of this file into your SYSGEN command file. The file IOCVM.SA containsGthe macro definition of "CDB", which is invoked by IOCINT to set up theGinformationneededtobuildtheCCB's.‚Whensettingupthe"CDB"calls,remember the following: '1)ƒTheRIO-IDisa4-charactermnemonicE…suchas"RIO1"forthefirstRIO1board,"RIO2"forthesecond,etc. DThe parameter PCDRV in your sysgen command file must be changed from from a 0 to a 1. -- PCDRV = 1 --  %RIOGEN.CF is a sample of a chain file-used to perform a SYSGEN with the RIO driver.FThefile‚RIOCMD.SA‚isasampleSYSGENcommandfile.‚NearthemiddleofKthis file, the commands added to link the RIO driver into the system can befound.= RIOCMD.SA is an example of a command file for the RIO driver?withRMS68K.‚TheRIOdrivermayalsobeSYSGENedwithVERSAdos.     CRIOLIB.SA‚and‚RIOLIB.RO‚aretheFORTRAN-callablesubroutineswhich,Gwhen called by the user program, will invoke the appropriate RIO driver function.  FTESTE.SA is an example program written in assembly language which uses?theRIOdriver.‚Thepurposeinprovidingthetestprogramisto?give the user a relatively simple way to check out a new system/with software which is known to work correctly. 3To use the test program as is, provide an RIO board:with input relays in locations 0,1,2,3 and 10, and provideDoutputrelaysinlocations5,7,8,and9.‚Connectanelectronicpulse@generator to input 0, with the ON pulse time of 10 milliseconds,Lamp5willalternateon/offatthepulserepetitionrate.<„>Lamps7,8,9willturnontogetherateachinputONpulse,9†thenwillgooutinsequence7-8-9(theyareonchannels†performingpulsedoutput). EChannel 0 is set to cause an interrupt on falling edge, so it's inputBneeds to be low (OFF) for the period of the debounce time which isB512milliseconds.‚Withthepulsegeneratorsetasdescribedabove,?thisrequirementismet.‚IftheinputpulseOFFtimeisreducedCto below 512 milliseconds, the debounce requirement will not be met%and the input signal will be ignored. milliseconddebounce.‚Tomakechannel1signalsberecognized,The test program disables channel 1 interrupts after recievingA10 interrupts on that channel, then re-enables them after another610 interrupts (which must come in on another channel). AThe test program sets channel 2 for interrupt on rising edge withBno debounce, and sets channel 3 for interrupt on falling edge with no debounce. EChannel 10 is set for input with interrupts disabled, and will return>it's input state to the 'returned command status' field in theRIO parameter block. FSince the test program is configured to recieve interrupt notificationBvia a 'queued event', each recognized interrupt will place a dummy@messageinthetesttaskA.S.Q..‚Theroutine'TESTIRQ'movestheAmessage from the ASQ (which is not directly acessable by the user?task'TESTE')tothetaskrecieverbuffer,definedasRCVBUF‚inTESTE. N==============================================================================        éééé =/*=/*4=/*†COMMANDFILETODOSYSGENFORTESTING‚RIOdriver=/* =ARG RIOCMD =ARG \1,RIOLST.LS,RIOSYS.SY,FIX:=DEL \2=/**=/*†USINGNEWVERSIONOF'SYSGEN'12/15/81=/*=/RA=0=SYSGEN \1,\4/\3,\2 WE NOW HAVE =/IF RA=0=/*‘SYSGENCOMPLETE"=/*†NOWCOPYALL.LSAND.LLFILES=/*=SPOOL PRINT \2,#PR=/ENDIF=TIME=ENDééééééøC*******************************************************************-MSG*Samplesystemgeneration(SYSGEN)for—*MSG*„RMS68KplusRIOdriver.¢*CMSG ***************************************************************MSGKLISTFILE="RIOLST.LS"„LISTINGFILEOFALLSYSGENOUTPUT(SETINCHAINFILE) IOBINT4=$74 IOBINT3=$73 IOBINT2=$72 IOBINT1=$71MSGDEFINEOTHERVARIABLEINFO.2UDR=0ŽNO.OFPAGESINUSERDEFINEDDIRECTIVETABLEGST=1ŽNO.OFPAGESINGSTUST=1ŽNO.OFPAGESINUST#TRACE=4ŒNO.OFPAGESINTRACETABLE%IOV=1ŽNO.OFPAGESINIOVECTORTABLE'PAT=2ŽSIZEOFPERIODICACTIVATIONTABLETRCFLAG=$C000†TRACEFLAGS*ˆSETFORSYSTEMUSINGVM02 ƒMMUADR=0ƒTIMADR=$F70000 ƒWHERLOAD=0 ƒCLOCK=800 ƒPANLADR=0ƒBUGTRAC=$F000BCDMSG ****************************************************************!SYSDATE="06/15/82"ƒDATEOFSYSGEN&SYSNAME="RIOSYS" OPERATING SYSTEM NAMEREVISION="REV1.00"‰REVISIONMMU=\MMUADRˆMMUADDRESSTIMER=\TIMADR†TIMERADDR.CLOCKFRQ=\CLOCK„CLOCKFREQUENCY TIMSLIC=2 TIMINTV=10 PANEL=\PANLADR„FRONTPANELADDR./MEMEND1=$20000„MAXIMUMENDOFON-BOARDMEMORY'MEMEND2=$20000„STARTOFOFF-BOARDRAM%MEMEND3=$40000„ENDOFOFF-BOARDRAM ƒPC=$E00 ƒSTACK=$C00ƒSTARTRMS=$F00 †DPRVAO=0L*===========================================================================FMSG====================‚LNKRMSV2.CF,RMSV2.LO,AND‚RMSV2.LLƒMUSTBE=MSG====================‚OBTAINEDFROMYOURSYSTEMDISK‚...<*…LINKLNKRMSV2.CF‡(USETHISIFYOUNEEDTORELINKRMSV2.RO)†PROCESSRMSV2 †ENDRMSV2G*…=COPYRMSV2.LL,\LISTFILE;A„(USETHISIFYOUWANTALOADMAPOFRMSV2)MSG ====================M*============================================================================*O****************** *************************************************************O*******************************************************************************O*********************************************************************************‡RIOdriverstuff...9 5*¦(fromRIOCOD.SA)*NRIO=1Œ#OFRIOboards.NRIOINT=1Š#OFINTERRUPTLEVELSPERI/OMODULE‰MSG‡STARTOFRIODRIVER‰RIODRVREQU*‰SUBSLNKRIO.CF ‰LINKLNKRIO‰PROCESSRIODRV‰ENDRIO‰=COPYRIODRV.LL,\LISTFILE;AO*******************************************************************************O*******************************************************************************O******************************************************************************* MEMBEG = *$MSGSTARTOFI/OCHANNELINITIALIZER TASK IOCI STATE='READ' SESSION=1 PRIORITY=$DA IOCISTR=* SUBS IOCINT#ASM IODVM/IOCINT,IOCINT,IOCINT;Z=50ƒ=COPYIOCINT.LS,\LISTFILE;ASUBS LIOCINT.CF LINK LIOCINTƒ=COPYIOCINT.LL,\LISTFILE;AEND IOCIMSGŽSTARTOFSYSTEMINITIALIZER PROCESS INITINTSTR=* KILVECT=142 SERPTS=140 PTMVECT=28FAIL=141 SWABRT=31 BCLRV=147ƒSUBSINDV,INTIOV2,INTLKV2.CFƒASMINDV,INDV,INDV=COPY INDV.LS,\LISTFILE;A(ƒASM0..EQUTIMER/INTIOV2,INTIOV2,INTIOV2=COPY INTIOV2.LS,\LISTFILE;AƒLINKINTLKV2.CFƒ=COPYINIT.LL,\LISTFILE;AEND INITAMSG *************************************************************MSG*ŠENDƒOF‚SYSGEN™*AMSG *************************************************************MSG*»*MSG*»*)MSG*„WENOWHAVEASYSTEMFILECALLEDƒ\3MSG*»*AMSG *************************************************************éé*J*=========================================================================*=*‚CodeaddedtoallocatememoryfortableusedbyRIOdriver.=*‚Thiscodeistomergedintotheapproprateinitializerfile4*‚aspertheinstructionsreceivedwiththisdriver.@*‚Edittheinitializerfile.Positiontothecorrectlineinthe<*‚file.MergethisfilebytheEditcommand:MERGERIOMEM.SA**K*==========================================================================6‰XREF„RIOTBL…SYSPARlocationcontainingRIOTBLaddress‰BRA.SƒRIOMEM1&‰INCLUDE9995.&.RIO.EQ‡RIOequatefile* ŠSECTION‚8ŠMOVE.L#\NRIOINT,D3‡getnumberofinterruptlevelspermodule$ŠMOVE.LD2,D4Žsavenumberofmodules!ŠMULUƒD3,D4ŽgetnumberofRIO-IDs-ŠMULUƒ#RIOIDLNG,D4‡get#ofbytesforRIO-IDs%ŠADD.L‚#RIONTRY,D4ˆaddinheadersize+ŠMULUƒ#PIALNG,D2‰get#ofbytesforPIAmap,ŠADD.L‚D4,D2Ž#ofbytesneededforRIOtableŠMOVE.LD2,D5Žsave#ofbytes'ŠADD.L‚#255,D2ŒrounduptopageboundryŠASR.L‚#8,D2Ž#ofpagesneeded'ŠBMI.S‚RIOERRbranchifnegative,error)ŠMOVE.L#0,A0Žclearforallocatingmemory)ŠMOVE.WD2,A0Žnumberofpagestoallocate'ŠMOVE.L#4,D0Žpageallocationdirective"ŠTRAPƒ#0‘callRMS68Ktogetmemory"ŠBRA.S‚RIOOKŽbranchifgoodreturn.RIOERR„BSR„KILLERfatalerror-gostopsystem8RIOOK…MOVE.L#'!RIO',RIOEYE(A0)setRIOtableeyecatcher)ŠMOVE.WD5,RIOLNG(A0)†#ofbytesintable 5ŠMOVE.W#RIONTRY,RIOOFST(A0)offsettoRIO-IDentries(ŠMOVE.WD4,RIOPIA(A0)†offsettoPIAmaps'ŠCLR.B‚RIONAL(A0)‰noRIOsallocatedyet+ŠMOVE.L#\NRIO,D4ŠgetnumberofRIOmodules/ŠMULUƒ#\NRIOINT,D4‡getnumberofRIO-IDentries-ŠMOVE.BD4,RIONMAX(A0)…maxnumberofRIO-ID's6ŠMOVE.LA0,RIOTBLŠsavetableaddressinsystemparams.0ŠLEA„RIOID(A0),A0‡startaddressoftableentries/ŠSUB.W‚#RIONTRY,D5ˆnumberofbytestosettoFFŠASR.W‚#1,D5Žnumberofwords/3ŠMOVE.W#$FFFF,D4Šstorethisinallentrylocations&RIOCLR„MOVE.WD4,(A0)+‹settheentriesŠSUB.W‚#1,D5Ždecrementcounter ŠBNE.S‚RIOCLRbranchifnotdone NORIOS„EQU„*ééééééék' RIOCOD SA//RIOIOC SA88RIOONEWSNWAA!ÕLNKRIO LGjjLNKTEST LGssD605NEWSNW||‡D605 LG••D605GEN CIžžD615GEN CI§§D615MEM AG°°9D615MEM CIÁÁ D615MEM LGÊÊD615NEWSNWÓÓÞD625MEM AGôô5D625MEM CI D625MEM LGD625NEWSNW*BD610INT AGHHD610INT CIaa D610INT LGjjO*******************************************************************************O*********************************************************************************‡RIOdriverstuff...*¦(fromRIOCOD.SA)*NRIO=1Œ#OFRIOboards.NRIOINT=1Š# OFINTERRUPTLEVELSPERI/OMODULE‰MSG‡STARTOFRIODRIVER‰RIODRVREQU*‰SUBSLNKRIO.CF ‰LINKLNKRIO‰PROCESSRIODRV‰ENDRIO‰=COPYRIODRV.LL,\LISTFILE;AO*******************************************************************************O*******************************************************************************  ééééé'G************************************************************************9*ˆSamplecodetobeinsertedinto‚IOCINT.SA‚tosetupfor(*’buildingtheCCB'sfortheRIOboards.*G************************************************************************G*======================================================================*E* THIS IS THE CODE NEEDED TO SET UP THE CCB'S FOR JUST ONE RIO BOARD.*G*======================================================================*8*ˆSet"RIO"tostartaddressoftheRIOdriver(obtained*’intheSYSGENprocess):RIO†EQU‡\RIODRVR*?*ˆSet"DEVADD"tomemorymappedI/OaddressforthisRIOboard:DEVADD SET $F80001*=*ˆSetupRIOCCB's(forjustoneRIOboard,inthisexample).6 CDB XOPEXC,'RIO1',$80,254,RIO,0,DEVADD,31,INT3,4,$50,&0,0,0,0,0,0,0,0,0,0,0**I*************************************************************************    éééé 0N==============================================================================B====‚NEWSFILEFORRIO(REMOTEINPUT/OUTPUT)DRIVERRELEASE‚====N============================================================================== OBJECT CODE RELEASE:  @RIO Driver Release 1.0 is compatible with RMS68K Release 4.1 andwith OEM-VERSAdos Release 4.1.   /This release consists of the following files -- ‰RIODriverfiles:'“9993..RIODRV.RO…RIOdriverobjectfile3“9993..TESTE.SA†ExampleprogramusingRIOdriverin©wait_for_eventmode.#“9993..TESTE.AF†Assemblychainfile$“9995..RIO.EQˆRIOdriverequatefile ‰Fileforallocatingmemory:“9993..RIOMEM.SA ‰SampleSYSGENfiles:)“9993..RIOGEN.CF…SampleSYSGENchainfile+“9993..RIOCMD.SA…SampleSYSGENcommandfile /‰Filestobemodifiedforsystemconfiguration: “9993..RIOIOC.SA…CCBallocations “9993..RIOCOD.SA…SYSGENcommands -‰FilestobemergedintoSYSGENcommandfile:1“9993..LNKRIO.LF…ChainfiletolinkinRIOdriver.“9993..LIOCINT.LF„ChainfiletolinkinIOCINT-“9993..LNKTEST.LF„ChainfiletolinkinTESTE ‰FilesassembledduringSYSGEN:3“9993..IOCINT.SA…CCBallocationroutinesourcefile3“9993..IOCVM.SA†MacrodefinitionforCCBallocation ‰FORTRANinterfacesubroutines:“9993..RIOLIB.RO…Objectfile“9993..RIOLIB.SA…Sourcefile$“9993..RIOLIB.AF…Assemblychainfile ‰"News"file:“9993..RIOONEWS.NW ‰Systemequatefiles: “9995..STR.EQˆRMS68Kequatefile2“9995..TCB.EQˆTaskControlBlock(TCB)equatefile5“9995..CCB.EQˆChannelControlBlock(CCB)equatefile!“9995..TIMER.EQ†Timerequatefile1“9995..NOL.EQˆInhibitlistingcommandsourcefile!“9995..TR1.EQˆTrap#1equatefile “9995..EXE.EQˆRMS68Kequatefile'“9995..LV5.EQˆLevel5(CMR)equatefile2“9999.C8OC.SYSPAR.ROSystemparametersobjectfile   JNOTE:‚Allfilesonusernumber0ofthisdisketteshouldbecopiedtoyourKsystem disk user 0 since references to user 0 in the chain files, etc., are9?B2J/R)Z Junderstood by the operating system to be referring to user 0 of the systemKdisk.‚Thevolumenamewasleftoffoffilereferencesinthesechainfiles,Letc., to make it easier to copy files to any volume and use them from there.NThe file C8OC.SYSPAR.RO should be copied to the same user number as RIODRV.RO.     AIn order to incorporate the RIO driver into your system, you willGhavetoaddseveralitemstothestandardSYSGENcommandfile.‚Foryour@convenience, this release contains a sample SYSGEN command file.DYou will be able to modify the sample code and merge it in with your SYSGEN code.  &The RIO driver requires the following:<‰1)‚Memorymustbeallocatedfortheinternaldrivertables.:‰2)‚Achannelcontrolblock(CCB)mustbecreatedforeach5interruptlevelforwhichtheRIOboardisjumpered.   IThe size of the memory area set aside for the driver tables is determined9bytwovariablesasspecifiedbyyouintheSYSGEN.‚These$variables are "NRIO", and "NRIOINT". 6NRIO†ThisisthenumberofRIOboardswhichwillbeon6Šthesystem.‚Sincetherecanbenomorethan16boards8ŠontheI/OChannel(whichiswheretheRIOboardsare),#Šthemaximumvalueof"NRIO"is16. GNRIOINTƒThisvariableissettothenumberofhardwareinterruptlevels>ŠforwhichtheRIOboardswillbejumpered.‚Theminimumnumber'Šisoneandthemaximumnumberisfour. :Note that if you set either of these variables larger thanHactuallyneeded,thesystemwillstill operatenormally.‚ThiswouldjustCresult in having more memory allocated for internal tables than was necessary. JThevariablesNRIOandNRIOINTaredefinedinthefileRIOCOD.SA.‚YouwillGhave to edit this file to reflect the correct values of these variablesFforyourparticularconfiguration.ƒThisfileistobemergedintoyourSYSGEN command file.    AThe code to allocate memory for the RIO driver internal tables isGcontainedinthefileRIOMEM.SA.‚ThisfileshouldbemergedintactintoCINTIOV2.SA,whichisafilealreadyinyoursystem.‚ThecommentsinIINTIOV2 indicate the location into which the RIOMEM code is to be merged.   EYour SYSGEN will set up a task which will allocate the CCB's (channel@control blocks) for the RIO boards during system initialization.IThe file IOCINT.SA is included in this release to simplify the allocation2oftheCCB's.‚ThefileRIOIOC.SAhasbeenincluded5to give you an example of the set-up used to pass theDinformation on each RIO board to the program which builds the CCB's.GAfter modifying RIOIOC.SA to correspond to your configuration, you will.merge this file into your SYSGEN command file. The file IOCVM.SA containsGthe macro definition of "CDB", which is invoked by IOCINT to set up theGinformationneededtobuildtheCCB's.‚Whensettingupthe"CDB"calls,remember the following: '1)ƒTheRIO-IDisa4-charactermnemonicE…suchas"RIO1"forthefirstRIO1board,"RIO2"forthesecond,etc.  %RIOGEN.CF is a sample of a chain file-used to perform a SYSGEN with the RIO driver.FThefile‚RIOCMD.SA‚isasampleSYSGENcommandfile.‚NearthemiddleofKthis file, the commands added to link the RIO driver into the system can befound.= RIOCMD.SA is an example of a command file for the RIO driver?withRMS68K.‚TheRIOdrivermayalsobeSYSGENedwithVERSAdos.    CRIOLIB.SA‚and‚RIOLIB.RO‚aretheFORTRAN-callablesubroutineswhich,Gwhen called by the user program, will invoke the appropriate RIO driver function.  FTESTE.SA is an example program written in assembly language which uses?theRIOdriver.‚Thepurposeinprovidingthetestprogramisto?give the user a relatively simple way to check out a new system/with software which is known to work correctly. 3To use the test program as is, provide an RIO board:with input relays in locations 0,1,2,3 and 10, and provideDoutputrelaysinlocations5,7,8,and9.‚Connectanelectronicpulse@generator to input 0, with the ON pulse time of 10 milliseconds,Lamp5willalternateon/offatthepulserepetitionrate.<„>Lamps7,8,9willturnontogetherateachinputONpulse,9†thenwillgooutinsequence7-8-9(theyareonchannels†performingpulsedoutput). EChannel 0 is set to cause an interrupt on falling edge, so it's inputBneeds to be low (OFF) for the period of the debounce time which isB512milliseconds.‚Withthepulsegeneratorsetasdescribedabove,?thisrequirementismet.‚IftheinputpulseOFFtimeisreducedCto below 512 milliseconds, the debounce requirement will not be met%and the input signal will be ignored. milliseconddebounce.‚Tomakechannel1signalsberecognized,The test program disables channel 1 interrupts after recievingA10 interrupts on that channel, then re-enables them after another610 interrupts (which must come in on another channel). AThe test program sets channel 2 for in terrupt on rising edge withBno debounce, and sets channel 3 for interrupt on falling edge with no debounce. EChannel 10 is set for input with interrupts disabled, and will return>it's input state to the 'returned command status' field in theRIO parameter block. FSince the test program is configured to recieve interrupt notificationBvia a 'queued event', each recognized interrupt will place a dummy@messageinthetesttaskA.S.Q..‚Theroutine'TESTIRQ'movestheAmessage from the ASQ (which is not directly acessable by the user?task'TESTE')tothetaskrecieverbuffer,definedasRCVBUF‚inTESTE. N==============================================================================        éééééé=LINK ,RIODRV,RIODRV;MIXHSEG RIO1:8 \RIODRVR INPUT RIODRVINPUT 9999.C8OC.SYSPAR.ROEND=ENDééééé ééb=LINK ,TEST,TEST;MIXHSSEG SEG0:0,6,7 \TESTST SEG SEG1:8,9SEG SER2:10,11,12,13,14,15 IN TESTE.ROEND=ENDééééééékN==============================================================================@====‚NEWSFILEFORDAC…(MVME605-D/ABOARD)‰DRIVERRELEASE‚====N============================================================================== HThis driver is compatible with both RMS68K Release 4.3 and VERSAdos 4.3.   .This driver consists of the following files -- ‰MVME605driverfiles: )9992..D605.SA†MVME605driversourcefile)9992..D605.RO†MVME605driverobjectfile19992..D605.AF†MVME605driverassemblychainfile  ‰Filesforallocatingmemory: /9992..D605MEM.CIŠFileincludedatSYSGENtime./9992..D605MEM.AGŠFileassembledatSYSGENtime/9992..D605MEM.LGŠFileforlinkingD605MEMinto §INITIO1.RO   !‰Files‚forsystemconfiguration: "9992.&.D605GEN.CIˆSYSGENcommands"9992.&.D605IOC.AIˆCCBallocations09992.&.D605.LG‹Chainfiletolinkinthedriver  ‰FORTRANinterfacesubroutines:9992..D605LIB.SA…Sourcefile%9992..D605LIB.AF…Assemblycha infile9992..D605LIB.RO…Objectfile  ‰"News"file:9992..D605NEWS.NW HTheMVME605driversourcefileis::9992..D605.SA.‚Toassemblethisfile"use the chain file :9992..D605.AF.8The following files are used in the assembly of D605.SA: 9995..STR.EQ 9995..TCB.EQ 9995..CCB.EQ 9995..LV5.EQ9995..RTDC.EQ9995..D605.EQ  >In order to incorporate this driver into your system, you will@have to set some parameters in the standard SYSGEN command file.GFor your convenience, this release includes several files which contain@either the actual code to be added or a sample of the code which‰(2)SetthevariablesNDAC1andNUSRDAC‚intheSYSCMD.CDfile'fortheprocessorboardyouareusing. 5‰(3)SetthevariablePCDRV=1intheSYSCMD.CDfile'fortheprocessorboardyouareusing. 8‰(4)CheckthefileD605IOC.AItobesurethattheCCB'sconformtoyourconfiguration.   FWhen setting up the "CDB" calls please note that each DAC-ID must haveCauniquename.‚ThisisalsothenameanyapplicationtaskwoulduseBtoaddressthedriverforaboard.‚Thememory-mappedI/Oaddresses"are also different for each board.   >After configuring your system and creating a VERSAdos with the>MVME605 driver included, you may want to run the provided testIn order to incorporate this driver into your system, you willIhavetosetsomeparametersinthestandardSYSGENcommandfile.‚Foryour>convenience, this release includes several files which contain@either the actual code to be added or a sample of the code whichAfter configuring your system and creating a VERSAdos with the>MVME615 driver included, you may want to run the provided testprogram.  FTESTAC.SA is an assembly language test program which tests the MVME615Cdriver. This program provides as complete and comprehensive test ofCthe driver as is possible. It tests combinations of opens, outputs,Fpulses, closes, status, and error tests, and checks outputs and errors@forcorrectness.‚PleaseedititbeforeassemblingtospecifytheIcorrect ACO-ID and memory-mapped I/O address to match your configuration.   ETESTAC.SA is assembled with the chain file TESTAC.AF, and linked with1the file TESTAC.LF. The load module is TESTAC.LO.   GTo use the test program TESTAC.LO, provide an MVME615 board with output indicators on channels 0 thru 7.  +The tests made on the board are as follows:  <‰TEST1individuallyopenseachchannelontheboard,outputs7toit,checksstatus,turnsitoff,checksstatus,and5closes.Anyerrorsintheprocessareprintedonthe terminal. >‰TEST2individuallyopenseachchannel,outputstoit&checks8statusuntilallareon.Thenitindividuallyturnsoff9eachchannel&checksstatusuntilallareoff.Itturns'alloutputsbackonforthenexttest. ?‰TEST3closesthechannels.TheOPERATORofthetestmustcheckthattheoutputsturnoff. =‰TEST4opensallchannels,turnsthechannelsallon,delays,$turnsallchannelsoff,andcloses. @‰TEST5individuallyopenseachchannel,commandsapulseoutput,8delayslongenoughtobeabletoseethepulseend,andcloses. ?‰TEST6opensfourchannels,commandspulseoutputsofdifferent9lengthstoeachsimultaneously,delaystobeabletoseeithappen,andcloses. A‰TEST7openschanneltwowith"queueevent"configuration,pulses:output,waitsforqueueevent,verifiesthemessagesent, andcloses.  ?‰TEST8openschannelonewith"waitforwake-up"configuration,.pulsesoutput,waitsforwake-up,andcloses. ;‰TEST9trysOUTPUTONwithchannelsclosedandverifiesthecommanderror.6trysOUTPUTOFFwithchannelsclosedandverifiesthecommanderror.7tryscheckingSTATUSwithchannelsclosedandverifiesthecommanderror.8trysPULSEoutputwiththechannelsclosedandverifiesthecommanderror. =‰TEST10trysopeninginvalidchannelnumbersandverifiesthecommanderrors.7(zerochannels,morethaneightchannels,channel#9,(andtwochannelswiththesamenumber). :‰TEST11opensvalidch annelsandtrysinvalidcommandsandverifieserrors.(commands0,6,7,&9). =‰TEST12trysopeningchannelsandthenopeningthemagainandverifiestheerror.  ;‰Thenthechannelsareclosed.Ifalltestsaresuccessful,3amessageisprintedsayingso.Ifanytestfails,anerrormessageisprinted.<‰Ifasecondboardisonthesystem,itreturnstoTEST1and(repeatsthetestsforthesecondboard.=‰Inaddition,iftwoboardsarepresent,athirdpassthrough6thetestsalternatesbetweentheboardstocheckbothatthesametime.  ‰ENDN==============================================================================N==============================================================================éJ*=========================================================================*A*‚CodeaddedtoallocatememoryfortableusedbyMVME625driver.7*‚ThiscodeisassembledandlinkedduringSYSGENtime.*K*========================================================================== ‰IFNE„\NDCO15T0PAGAL‚EQU…4‹Pageallocationdirective#forTrap0.6‰XREF„DCOTBL…SYSPARlocationcontainingDCOTBLaddress ‰XDEF„D625MEM'‰INCLUDE9995.&.D625.EQ„DCOequatefile* ‰SECTION8 D625MEM‚EQU‡*In order to incorporate this driver into your system, you willIhavetosetsomeparametersinthestandardSYSGENcommandfile.‚Foryour>convenience, this release includes several files which contain@either the actual code to be added or a sample of the code which‰(2)SetthevariablesNDCO1andNUSRDCO‚intheSYSCMD.CDfile'fortheprocessorboardyouareusing. 5‰(3)SetthevariablePCDRV=1intheSYSCMD.CDfile'fortheprocessorboardyouareusing. 8‰(4)CheckthefileD625IOC.AItobesurethattheCCB'sconformtoyourconfiguration. FWhen setting up the "CDB" calls please note that each DCO-ID must haveCauniquename.‚ThisisalsothenameanyapplicationtaskwoulduseBtoaddressthedriverforaboard.‚Thememory-mappedI/Oaddresses"are also different for each board.  >After configuring your system and creating a VERSAdos with the>MVME625 driver included, you may want to run the provided test‰TEST2individuallyopenseachchannel,outputstoit&checks8statusuntilallareon.Thenitindividuallyturnsoff9eachchannel&checksstatusuntilallareoff.Itturns'alloutputsbackonforthenexttest. ?‰TEST3closesthechannels.TheOPERATORofthetestmustcheckthattheoutputsturnoff. =‰TEST4opensallchannels,turnsthechannelsallon,delays,$turnsallchannelsoff,andcloses. @‰TEST5individuallyopenseachchannel,commandsapulseoutput,8delayslongenoughtobeabletoseethepulseend,andcloses. ?‰TEST6opensfourchannels,commandspulseoutputsofdifferent9lengthstoeachsimultaneously,delaystobeabletoseeithappen,andcloses. A‰TEST7openschanneltwowith"queueevent"configuration,pulses:output,waitsforqueueevent,verifiesthemessagesent, andcloses.  ?‰TEST8openschannelonewith"waitforwake-up"configuration,.pulsesoutput,waitsforwake-up,andcloses. ;‰TEST9trysOUTPUTONwithchannelsclosedandverifiesthecommanderror.6trysOUTPUTOFFwithchannelsclosedandverifiesthecommanderror.7tryscheckingSTATUSwithchannelsclosedandverifiesthecommanderror.8trysPULSEoutputwiththechannelsclosedandverifiesthecommanderror. =‰TEST10trysopeninginvalidchannelnumbersandverifiesthecommanderrors.7(zerochannels,morethaneightchannels,channel#9,(andtwochannelswiththesamenumber). :‰TEST11opensvalidchannelsandtrysinvalidcommandsandverifieserrors.(commands0,6,7,&9). =‰TEST12trysopeningchannelsandthenopeningthemagainandverifiestheerror.  ;‰Thenthechannelsareclosed.Ifalltestsaresuccessful,3amessageisprintedsayingso.Ifanytestfails,anerrormessageisprinted.<‰Ifasecondboardisonthesystem,itreturnstoTEST1and(repeatsthetestsforthesecondboard.=‰Inaddition,iftwoboardsarepresent,athirdpassthrough6thetestsalternatesbetweentheboardstocheckbothatthesametime.      JD625LIB.SA is assembled using the D625LIB.AF chain file. D625LIB.RO is theEFORTRAN-callable subroutine which, when called by the user program orJFORTRAN test program, will invoke the appropriate MVME625 driver function.   BTSTDCO.SA is a FORTRAN example test program which uses the driver.EThe purpose in providing the FORTRAN test program is to give the userEa relatively simple way to check out a new system with software whichis known to work correctly.   FTSTDCO.SA, TSTDLY.SA, and TSTPR1.SA are Fortran compiled with the fileAFCMP.CF. File FLNK.CF links the test routines with D625LIB.RO andFFORTLIB.RO (and FORTVMC.RO for the VMC or VME systems) and creates theprogram TSTR.LO.  CTo use test program TSTR.LO, provide a board with output indicators+on channels 0 thru 7. Then RUN the program.  BThe result will be observable on the output indicators as follows:  ?‰indicators0thru7willturnonindividuallyatapproximately‰onesecondintervals.“FORN=1to8OPENchannelN-1turnonindicatorN-1waitonesecondreadoutputstatusverifyindicatorN-1onturnoffindicatorN-1CLOSE“NEXTN A‰indicators0thru7willturnononeatatimeuntilallareon.“FORN=1to8OPENchannelN-1turnonindicatorN-1waitonesecondreadoutputstatus"verifyindicators0toN-1areon“NEXTN“waitonesecond“CLOSE“waitonesecond “readstatus“verifyoutputsareoff "‰indicators‚0thru7willturnon. “OPENall“turnonallindicators“waitonesecond“turnOFFallindicators“verifyallindicatorsareoff“CLOSE ,‰indicatorswillbePULSEDononeatatime.4‰(defaultconfiguration-nowake-uporqueueevent) “OPENall “FORN=1TO8PULSEindicatorN-1waitonesecond“NEXTN“CLOSE 7‰CLOSEallchannelsandtryallcommands.Verifyerror.“DCOUT‚command “DCOOFFƒ" “DCOSTAƒ" “DCOPLSƒ" “DCOPENƒ"6‰TryDCOPENafteritisalreadyopenandverifyerror.  ;‰Checkforasecondboardonthesystemandrepeatthetest‰ifoneispresent.  ‰ENDN==============================================================================N==============================================================================éééééN************************* START OF FILE D610INT.AG ***************************„IFNEƒ\NVME610+\NVME620 ŠNOFORMATŠPAGE*‰INCLUDE&.D610INT.AG0PAGAL…EQU„4ŽRMS68KPAGALTrap0directivenumber3KILLER„EQU„32RMS68KKILLERTrap0directivenumberŠOPTƒCRE N*******************************************************************************:*‹InterruptProcessingQueueAllocationandInitialization+*fortheInputModule(VME610/620)Driver*M*ƒThissectionofcodeallocatesmemoryfortheInterruptQueueControlTableM* and the Interrupt Processing Queue used by the Input Module Driver. First aO* page of memory is allocated for the control table and the base address of theJ* table is stored in the INPTBL field of SYSPAR for later retrieval by theN* drivers initialization routine. The table is then initialized and the memoryO* required for the Interrupt Processing Queue is calculated and allocated basedJ* on the SYSGEN parameter D610QSIZ. If all of the required pages of memoryO* cannot be allocated, RMS68K routine KILLER is called to force a system crash.*>*ƒThiscodeislinkedintothe‚SystemInitializerasdescribedK* in the SYSgen instructions for the driver. In the following code, symbolsM* preceeded by a backslash '\' character are user specified SYSgen parametersK* that are replaced with numeric values by the SYSgen SUBS command prior toO* assembly of this source. The parameters are assumed to have been validated inA* in a separate assembly performed earlier in the SYSgen process.*O*******************************************************************************ŠSPC„25ŠXREFƒINPTBLThissymbolisanaddresswithinSYSPAR. ŠXDEFƒD610INTŠSPC„2 ŠSECTION8ŠSPC„28D610QSIZ‚EQU„\D610QSIZThisisthesizeoftheInterrupt&*£ProcessingQueueintermsofmaximum,*£numberofentriesthequeueistocontain.ŠSPC„2ŠINCLUDE‚9995.&.BAB.EQ*‰INCLUDE‚9995.&.BAB.EQŠINCLUDE‚9995.&.D610INTQ.EQ*‰INCLUDE‚9995.&.D610INTQ.EQ ŠSECTION‚8ŠSPC„2 D610INT‚EQU‡* @0I6Q9INPMEM„CLR.L‚D0“Clearallregisterstobeusedincalling3ŠMOVE.LD0,A0ŽtheRMS68Kmemoryallocationroutine. ŠMOVE.LD0,A1 ŠMOVE.LD0,A6ŠSPC„22ŠADD.W‚#1,A0CallRMS68KroutinePAGALtoallocate9ŠMOVE.B#PAGAL,D0Š256bytes(1page)ofmemoryforglobal*ŠTRAPƒ#0‘variablestorage.Ifnomemoryis7ŠBRA.S‚INPM010Œavailable,callRMS68KroutineKILLERto!ŠBSR.S‚INPMKILL‹crashthesystem.ŠSPC„2>INPM010ƒMOVE.LA0,INPTBLŒSavetheglobalvariableareaaddress3ŠMOVE.LA0,A4ŽreturnedbyPAGALintheinputdriver'*£tablepointer(INPTBL)withinSYSPAR.-*£MakeapermanentcopyoftheaddressinA3.ŠSPC„24ŠMOVE.W#63,D0CleartheglobalvariableareatoallINPM020ƒCLR.L‚(A0)+Žzeros.ŠDBRAƒD0,INPM020ŠPAGEI*ƒThefollowingcodeusestheInterruptQueueControlTableandallocates* memory for the queue.ŠSPC„24INPM050ƒCLR.L‚D1’ClearD1foruseasworkregister.ŠSPC„28ŠMOVE.W#D610QSIZ,D5‰Loadthenumberofentriesthatthe(*£InterruptQueueistocontainintoD5.ŠSPC„2<ŠMOVE.L#'IQCT',QID(A4)†InitializetheasciiIDfieldinthe(*£InterruptQueueControlTablewiththe**£mnemonic'IQCT'.Thismnemonicservesas-*£servesasavisualaideinanalysingmemory*£dumpsfordebugging.ŠSPC„28ŠMULUƒ#IQENTLN,D5ŠCalculatethequeuelengthinbytesby**£multiplyingthenumberofentriesinthe"*£queuebythequeueentrylength.ŠSPC„22ŠTST.B‚D5“Calculatetheminimumnumberof256byte7ŠBEQ.S‚INPM055Œmemorypagesnecessarytoaccomodatethe1ŠADD.W‚#256,D5Œspecifiednumberofqueueentries.INPM055ƒLSR.W‚#8,D5ŠSPC„23ŠMOVE.W#15,D0Calculatethebitnumberofthemost=INPM057ƒLSL.W‚#1,D5Žsignificantbitofthenumberofpagesto ŠDBCSƒD0,INPM057‰allocateinD5.ŠSPC„2/ŠBEQ.S‚INPM058ŽIfbitsotherthanjustthemost6ŠADD.W‚#1,D0Žsignificantbitofthenumberofpagesis'*£set,incrementthenumberofthemost-*£significantbittothenexthigherpowerof*£two.ŠSPC„27INPM058ƒCLR.L‚D5“Setthenumberofpagestoallocateto6ŠBSETƒD0,D5Žthelowestpoweroftwothatwillholdthe$*£requestednumberofqueueentries.ŠSPC„2=INPM060ƒMOVE.LD5,A0Loadthenumberofpagestobeallocated:ŠMOVE.L#PAGAL,D0ŠintoA0andcallRMS68KroutinePAGALto2ŠTRAPƒ#0‘obtainthememory.Iftherequiredamount6ŠBRA.S‚INPM070Œofmemoryisnotavailable,callRMS68K>INPMKILL‚MOVE.L#KILLER,D0‰routineKILLERtocrashthesystem.ŠTRAPƒ#0ŠSPC„2?INPM070ƒMOVE.LA0,QPTR(A4)ŠStoretheinterruptprocessingqueue**£baseaddressinthequeuecontroltable.ŠSPC„20ŠASL.W‚#8,D5Convertthelengthoftheinterrupt5ŠSUB.W‚#1,D5Žqueuein256bytepagestothelengthin>ŠMOVE.WD5,QWAMSK(A4)†bytes.Formthequeuewraparoundmaskby)*£decrementingthequeuelengthandstore&*£themaskinthequeuecontrolentry.ŠSPC„2K*ƒThisistheendoftheInputModuleDriversysteminitializationroutine.*ŠFORMATM*****************************************************************************„ENDCK************************‚ENDOFFILED610INT.AG***************************‰ENDéé éF‚MSG†*****************************************************************$‚MSG†*‚610/620„driverinitializationE‚MSG†****************************************************************‚SUBS…D610INT.AG,D610INT.LG!‚ASM†D610INT.AG,D610INT.RO,\ASMLS ‚IFEQ…\ASMLSW‹=COPY…\ASMLS,\WORKLS;A‚ENDC‚LINK…D610INT.LG‚IFEQƒ\LINKLSW‰=COPY…\LINKLS,\WORKLS;A‚ENDC‹=COPY…\LINK2TF,\LINK1TF;YééééééY =LINK ,\LINK2TF,\LINKLS;IXMHRINPUT„\LINK1TFINPUT„D610INT.ROEND=END ééééé ééb' D610NEWSNWww!µC********************************************************************Á*;*†NewsFilefortheVME610/620AC/DCInputModuleDriver„**Á*C******************************************************************* GThis driver is compatible with both RMS68K Release 4.3 and VERSAdos 4.3 4This driver package consists of the following files: ‰VME610/620Driverfiles:-9992..D610.SA‹VME610/620DriverSourcefile-9992..D610.RO‹VME610/620DriverObjectfile59992..D610.AF‹VME610/620DriverAssemblyChainfile <‰FilestoallocatememoryfortheInterruptProcessingqueue/9992..D610INT.AGŠFileassembledatSYSgentime89992..D610INT.LGŠFileforlinkingD610INTintoINITIO1.39992..D610INT.CIŠFileINCLUDEdintoSYSgencommand§fileatSYSgentime. A‰FiletobeINCLUDEdintotheSYSgencommandfileatSYSgentime:$9992..D610GEN.CIŠCommandstoSYSgen ?‰FiletoLINKthedriverfordifferentsystemconfigurationsat ‹SYSgentime:9992..D610.LGŽLINKcommands F‰FiletoallocateCCB'sforVME610/620modules.ThisfileismodifiedB‰asnecessaryfor‚differentinterruptlevelsandmemoryaddresses.C‰This‚fileisincludedintheassemblyofIOCINT.AGatSYSgentime.9992..D610IOC.AI /‰Thedrivernewsfilethatyouarenowreading:9992..D610NEWS.NW F‰VME610/620DriverCommandandErrorCodeEquatefiles.TheseequatesB‹areusedbytheapplicationcodewhenmakingcallstothedriver.9995..D610CMD.EQ A‰Thefollowingfilesareusedtogeneratethedrivertestprogram9992.D610.INPTST.LO: 49992.D610.INPTST.SAˆPascalmainprogramsourcefile<9992.D610.INTSTASM.SA†SourceforassemblyprocedurescalledªfromPascalmainprogram29992.D610.INPTST.PFˆPascalcompilationchainfile*9992.D610.INTSTASM.AF†Assemblychainfile+9992.D610.INPTST.LFˆTestprogramlinkfile<9992.D610.PDOLRLIB.RO†SupplementaryPascalRun-timeLibrary G‚ThefollowingfilesareusedtoassembleandlinktheFortrancallable"driver command subroutine library:o5x0€"ˆ'  ‰9992..D610LIB.SA‰9992..D610LIB.RO‰9992..D610LIB.AF L‚ToassembletheVME610/620Driverexecutethechainfile9992..D610620.AF.9The following files are required to assemble this driver: ‰9995..STR.EQ‰9995..TR1RTCD.EQ ‰9995..TCB.EQ ‰9995..LV5.EQ ‰9995..BAB.EQ ‰9995..CCB.EQ‰9995..D610CCB.EQ‰9995..D610INTQ.EQ‰9995..D610CMD.EQ +SYSgen Procedure for the VME 610/620 Driver+------------------------------------------- <1.‚UseCOPYSGENtogetallthefilesrequiredfortheSYSgenF‚totheusernumberwheretheSYSgen‚willbeperformed(usually9100). I2.‚EdittheSYSCMD.CDfileforgeneratingtheRMS68KorVERSAdosforyourG‚targetsystem.ModifytheSYSgenparametersNVME610andNVME620.TheseH‚parametersdefinethemaximumnumberofVME610andVME620boardsthatG‚willoccupythetargetsystem.OneothersysgenparameterthatmustbeE‚modifiedisD610QSIZ.ThisparameterdefinestheminimumsizeoftheF‚interruptprocessingqueueintermsofthenumberofentriesthattheE‚queuemaycontain.Thedrivercanaccomodateamaximumof2048queueH‚entries.FormoreinformationontheInterruptProcessingQueueconsult%‚theVME610/620DriverUsersManual. D„Also,theSYSgenparameterPCDRVmustbesettoone.ThisparameterG‚specifiesthatoneormoreVME600Seriesdriversarespecifiedinthe@‚SYSgensotheI/OChannelInitializationtaskmustbeincluded. I3.‚EditthefileD610IOC.AIsothatonecalltotheCDBmacroismadeforH‚eachVME610orVME620boardthatwasspecifiedinSYSCMD.CD.EachCDBL‚mustspecifyauniquechannelmnemonic(i.e.'IN01').ThememorymappedI/O?‚addressoffsetcanbemodifiedtoreflecttheboardjumpering.5‚TheI/OchannelinterruptvectornumberandhardwareJ‚interruptlevelspecifiedforeachCDBcanalsobemodifiedifnecessary.;‚ConsulttheSYSgenUsersGuideforadditionalinformation.  K4. You may now run the SYSgen utility using your modified SYSCMD.CD file toB‚generateaRMS68KorVERSAdosbootmoduleforyourtargetsystem. I‚AlsoprovidedwiththisdriverisalibraryofFortrancallableassemblyFlanguage subroutines that allow a Fortran application program to issueIcommands directly to the VME 610/620 driver. This library is contained infile D610LIB.RO. I‚IfthedriverstargetenvironmentincludesVERSAdos,youmaywishtorunMthe driver test program INPTST.LO to verify that you have an operable SYSgen. L‚ThistestprogramallowsyoutocreatemultipletasksandtoissuecommandsGfrom these tasks to the VME 610/620 driver by responding to prompts for1input commands via a single interactive terminal. J‚Whentheprogrambeginsexecuting,theuserispromptedforthenumberofKtasks that are to be created. The tasks that are spawned are exact replicasJof one another. After each task initializes itself, it waits for a command)from the user to be issued to the driver. F‚ThenameofthefirsttesttaskisdisplayedandtheuserisaskedtoNselect a command to be issued to the driver (i.e Open, Close, Enable, Disable,KStatus, or Wait). If the Open command is selected, the user is prompted forGthe channel mnemonic of the desired VME 610/620 board and the number ofFchannel to be opened by the command. The user is then prompted for theFchannel number and configuration for each channel to be opened. If theKClose, Enable, Disable, or Status command is selected, the user is promptedIfor the VME 610/620 board channel mnemonic and the mask of channels to beHaffected by the command. After each command has been issued, the commandJstatus returned by the driver is displayed. If a Status command is issued,.the returned channel status is also displayed. G‚Afterthecommandstatusisreturned,theuserispromptedforanotherLcommand for the same task. The program will continue to request commands forLthe same test task until a CR only is entered in response to the prompt. The Guser will then be prompted for commands to the next test task. When theKprogram has prompted for commands for each of the test tasks, it begins theJcycle again by prompting for commands for the first task. This loop may beKterminated by pressing the break key on the terminal after all open channelassignments have been closed. L‚Onceaninterruptchannelhasbeenopenedandinterruptshavebeenenabled,Ithe user may connect an input source to the channel to test the interruptFmechanism. Whenever an interrupt generating condition is detected on aKchannel (as specified in the channel configuration), the driver informs theLtest task that opened the channel of the interrupt via an event to the tasksLASQ or by issuing a WAKEUP to the task. When an interrupt event is received,Mthe task provides an external acknowledgement of the interrupt by pulsing oneFoutputs of a VME 625 Digital Output board that is assumed to reside atKaddress $FE6001 of the I/O channel. This pulse may be detected via standardJoscilloscope or by other available means. The program will accomodate uptoKtwo VME 610/620 boards with assumed channel mnemonics of 'IN01' and 'IN02'.NThe acknowledge pulse is sent to a unique VME 625 output for each interruptingchannel as follows: "„VME610/620ƒInputChannel„VME625…mnemonic‰NumberˆOutput"„-----------ƒ-------------„------- †IN0100 †IN0111 †IN0122 †IN0133 †IN0204 †IN0215 †IN0226 †IN0237 G‚WhenataskistobenotifiedofaninterruptviaaWakeup,aslightlyMdifferent procedure is used. After the channel has been opened and interruptsKhave been enabled, the user enters a Wait command to the task that assignedIthe channel. This command causes the task to be placed in a Wait state soKthat it can respond to the Wakeup to be issued to the driver. When a WakeupBis received, the test task pulses output 7 of the VME 625 board toGacknowledge the interrupt. Since only output 7 is used to acknowledge aNWakeup, receiving of Wakeup's by multiple tasks will result in all acknowledgeNpulses being superimposed on output 7. Also once a task has been placed in theNWait state, issuing a new command to the same task will cause the test program1to be suspended until the task recieves a Wakeup.    éééééé 'D610 INPTST LF¤¤INPTST PF­­INPTST SA¶¶ÒINTSTASMAFÇÇINTSTASMSAÐÐ'MINPTST LOñ6PDOLRLIBRO,, INTSTASMROAAINPTST ROFF INPTST PCSS;INPTST PO;INPTST LSÍÍ]ù=/*$=/*†PARAMETER01ˆLINKOUTPUTLISTING=/*+=/*†DEFAULTPARAMETER01-->D610.INPTST.LL=/*=/IFC \1=ARG D610.INPTST.LL=/ENDIF=/*=LINK ,D610.INPTST.LO,\1;HIMXSEG CODE(RL):0-9SEG SEG2(L):15INPUT D610.INPTST.ROINPUT D610.INTSTASM.ROLIBƒ0.&.PASVMDOS.ROLIBƒD610.PDOLRLIB.ROLIBƒ0.&.PASCALIB.RO TASK‚INP0ATTR‚P PRIO‚$7F,$7FENDééééééœ=PASCAL D610.INPTST.SA,,\1;O=POPTIM D610.INPTST.=PASCAL2 D610.INPTST.PO;L=END éé ééééé¥"program Input_Test (input,output); const ƒWAIT„=0; ƒOPEN„=1; ƒCLOSEƒ=2; ƒSTAT„=5; ƒENABLE‚=6; ƒDISABLE=7; typeƒbyte=-128..+127;ƒword=-32768..+32767; ƒopen_cdb=packedrecordchan_no:word;config‚:wordŽend; ƒcommand=packedrecordstatus:word; codeƒ:word;casebooleanof’true‚:(chan_mask:word);’false:(chan_cnt‚:word; ›cdb‡:array[0..7]ofopen_cdb)end; ƒinit_IO=packedrecorddone_flag:word; code…:byte;sub_code:byte;unused_1:word;(mnemonic:packedarray[1..4]ofchar;)unused_2:packedarray[1..12]ofbyte;cmd_adr‚:^command;cmd_len‚:wordend; )ƒtask_name=packedarray[1..4]ofchar; varƒcmd_blk…:command;ƒcmd_char„:string[8];ƒtask_ID…:task_name;ƒtask_cnt,i:integer;ƒinit_blk„:init_IO;ƒin_char…:char; *procedure p$force (var fil:text); forward; 4procedure clone_tasks (task_cnt : integer); forward; .function send_command (var init_blk : init_IO;*—vartask_ID:task_name):word;forward;{$E}function hex_in : word; varƒnum_str:string[6];ƒnum,i‚:word;ƒerrorƒ:boolean; beginƒrepeat†begin ‰error:=FALSE;‰readln(num_str); ‰num:=0;‰i:=1; #‰while(i<=length(num_str))and7(((num_str[i]>='0')and(num_str[i]<='9'))or7‘((num_str[i]>='A')and(num_str[i]<='F'))ƒ)doŒbeginifnum_str[i]>='A'9’thennum:=num*16+ord(num_str[i])-ord('A')+105’elsenum:=num*16+ord(num_str[i])-ord('0'); i:=i+1Œend;‰ifi<=length(num_str)thenŒbeginerror:=TRUE;+write('Invalidhexnumber-reenter>');p$force(output)Œend†endƒuntilerror=FALSE;ƒhex_in:=num end;{$E} procedure hex_out ( num : word); varƒnum_str:string[4];ƒi,j…:integer; begin ƒnum_str:='„';ƒfori:=4downto1do†begin‰j:=nummod16;‰num:=numdiv16; ‰ifj>=10®k·h,Œthennum_str[i]:=chr(j-10+ord('A'))'Œelsenum_str[i]:=chr(j+ord('0'))†end;ƒwriteln(num_str)end;{$E}procedure enter_command; varƒstatus„:word; ƒi‰:integer; beginƒwithinit_blk.cmd_adr^do„begin†casecm d_char[1]of‰'W':code:=WAIT;‰'O':code:=OPEN;‰'C':code:=CLOSE;‰'E':code:=ENABLE;‰'D':code:=DISABLE;‰'S':code:=STAT†end;†ifcode<>WAITthenˆbegin%Šwrite('Enterchannelmnemonic>');Šp$force(output);Šreadln(init_blk.mnemonic);Šifcode<>OPEN then”{AllcommandsexceptOPEN}begin*“write('Enterchannelsmaskinhex.>');“p$force(output);“chan_mask:=hex_inendelse”{OPENcommand}begin /“write('Enternumberofchannelstoopen>');“p$force(output);“readln(chan_cnt); “fori:=0tochan_cnt-1do–begin#™write('Enterchannelnumber>');™p$force(output);™readln(cdb[i].chan_no);2™write('Enterchannelconfigurationinhex.>');™p$force(output);™cdb[i].config:=hex_in–end Œend‚{else} ˆend;{if},†status:=send_command(init_blk,task_ID);†ifcode<>WAITˆthen‰begin‹ifcode=STATŽthenbegin’write('ChannelStatus=');’p$force(output);’hex_out(chan_mask)end;‹write('CommandStatusis');‹p$force(output);‹hex_out(status)‰end „end‚{with}end;{$E} begin‚{main} ƒwithinit_blkdo†begin ‰code:=7;‰sub_code:=0;‰new(cmd_adr)†end; +ƒwrite('Enternumberoftasks(1-26)>');ƒp$force(output);ƒreadln(task_cnt); ƒtask_ID:='INPx'; ƒclone_tasks(task_cnt); ƒwhiletruedo†fori:=1totask_cntdo‡repeat‰begin(Œtask_id[4]:=chr(ord('A')+i-1);$Œwriteln('**Task',task_ID,'**');EŠwrite('Command(O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait)>');Œp$force(output);Œreadln(cmd_char); Œif(length(cmd_char)<>0)and+(cmd_char[1]in['W','O','C','E','D','S'])then‚enter_command‰end‡untillength(cmd_char)=0end. =/*=/*†D610.INTSTASM.AF=/*0=/* CHAIN TO ASSEMBLE PORTION OF THE VME 610/620=/*†DRIVERTESTPROGRAM.=/*)=/*†DEFAULTOUTPUTLISTINGISINTSTASM.LS=/*=/IFC \1=ARG D610.INTSTASM.LS=/ENDIF=/**=ASM D610.INTSTASM.,D610.INTSTASM.,\1;Z=80=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.TR1RTCD.EQ=/*ƒ9995.&.EXE.EQ=/*ƒ9995.&.LV5.EQ=/*ƒ9995.&.D610CMD.EQ=/*}=ENDéééééé¿ *‰INCLUDE9995.&.TR1.EQŠINCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.TR1RTCD.EQŠINCLUDE9995.&.TR1RTCD.EQ*‰INCLUDE9995.&.EXE.EQŠINCLUDE9995.&.EXE.EQ*‰INCLUDE9995.&.LV5.EQŠINCLUDE9995.&.LV5.EQ*‰INCLUDE9995.&.D610CMD.EQŠINCLUDE9995.&.D610CMD.EQŠPAGE*H* VME 610/620 Driver Assembly language test routines. These routines are;* called from a Pascal test task that performs terminal I/OŠSPC„2 ŠSECTION9ŠXDEFƒCLONE_TA I*‚CreatethespecifiednumberoftesttasksthatsharethecodeandstackL* segments of the PASCAL program that is calling this routine. Then allocate.* an ASQ for each task and start them running. ,CLONE_TA‚MOVE.L(A7)+,A4‹SavereturnaddressŠSPC„2$ŠMOVE.L(A7)+,D7‹Savetaskcount-1 ŠSUB.L‚#1,D7ŠSPC„2:ŠLEA.L‚-100(A7),A7ˆAllocateparameterblockspaceonstackŠSPC„27ŠMOVE.LA7,A0ŽStoreCRTCBparameterblockaddressinA0ŠSPC„2'*‚InitializeCreateTCBparameterblock @ŠMOVE.L#'INPA',CRTTSK(A0)ƒNametasksalphabeticallywithinsameŠCLR.L‚CRTSES(A0)‰sessionŠSPC„23ŠMOVE.W#CTOPMP,CRTOPT(A0)PropogatemonitoroptionŠSPC„21ŠMOVE.B#$7F,CRTIPR(A0)„Runtaskatmax.priorityŠMOVE.B#$7F,CRTLPR(A0)ŠSPC„2-ŠMOVE.W#$2000,CRTATT(A0)‚TaskdumpattributeŠSPC„2.ŠLEA.L‚TASKENT(PC),A1…TaskentrypointaddressŠMOVE.LA1,CRTENT(A0)ŠSPC„2ŠMOVE.W#0,CRTUID(A0)†User0ŠSPC„2* Create TCB's %ŠMOVE.WD7,D1ŽInitializeloopcounterŠSPC„2)TCBLOOPƒMOVE.L#CRTCB,D0ŠIssueCRTCBcallŠTRAPƒ#1 ŠBEQ.S‚TCBOK ŠBSR„ERRORŠSPC„2ETCBOK…ADD.B‚#1,CRTTSK+3(A0)„Updatetasknameandloopuntilalltasks#ŠDBRAƒD1,TCBLOOP‰havebeencreated.ŠSPC„25* Initialize Share Segment directive parameter block. #ŠMOVE.L#'INPA',SEGTCB(A0)ƒTaskname<ŠMOVE.W#SGOPPA,SEGOPT(A0)ƒLogical=physicaladdressoptionŠSPC„23ŠMOVE.W#SGATSS,SEGATT(A0)ƒSessionsharablesegmentŠSPC„2,* Share code and data segments to each task. %ŠMOVE.LD7,D1ŽInitializeloopcounter ŠMOVE.LA7,A1ŠSPC„2ÈHÑIÙ9áBéB=SEGLOOPƒMOVE.L#SHRSEG,D0‰SharethecodesegmenttoeachtaskŠMOVE.L#'CODE',SEGNAM(A1) ŠMOVE.LA1,A0ŠTRAPƒ#1 ŠBEQ.S‚SEG010 ŠBSR„ERRORŠSPC„2DSEG010„MOVE.L#SHRSEG,D0‰SharethePASCALstacksegmenttoeachtaskŠMOVE.L#'SEG2',SEGNAM(A1) ŠMOVE.LA1,A0ŠTRAPƒ#1 ŠBEQ.S‚SEG020 ŠBSR„ERRORŠSPC„2FSEG020„ADD.B‚#1,SEGTCB+3(A1)†LoopuntilbothsegmentshavebeensharedŠDBRAƒD1,SEGLOOP‰toalltasks.ŠSPC„2)* Initialize Allocate ASQ parameter block ŠMOVE.LA1,A0,ŠMOVE.L#'INPA',ASQTSK(A0)„InitialtasknameŠSPC„2AŠMOVE.B#AQSTQE+AQSTRE+8,ASQSTA(A0)ASR/ASQenabled,noregistersŠSPC„23ŠMOVE.B#16,ASQMML(A0)…Max.eventlength=16bytesŠSPC„2.ŠMOVE.L#2048,ASQQLN(A0)ƒASQlength=2KbytesŠSPC„2-ŠLEA.L‚INTASR(PC),A1†DefaulttointerruptASRŠMOVE.LA1,ASQASR(A0)ŠSPC„2* Allocate ASQs for each task %ŠMOVE.LD7,D1ŽInitializeloopcounterŠSPC„25ASQLOOPƒMOVE.L#GTASQ,D0ƒIssueAllocateASQdirectiveŠTRAPƒ#1 ŠBEQ.S‚ASQ010 ŠBSR„ERRORŠSPC„2EASQ010„ADD.B‚#1,ASQTSK+3(A0)†LoopuntilanASQhasbeenallocatedforŠDBRAƒD1,ASQLOOP‰eachtask.ŠSPC„2'*Initialize Start Task parameter block. :ŠMOVE.L#'INPA',STRTSK(A0)ƒStarttaskswithoutpassingany+ŠMOVE.W#0,STROPT(A0)†initializeregisters.ŠSPC„2* Start all tasks *ŠMOVE.LD7,D1Initializetheloopcounter.ŠSPC„2#STARTLPƒMOVE.L#START,D0ŠStarttaskŠTRAPƒ#1ŠBEQ.S‚STRT010 ŠBSR„ERRORŠSPC„2DSTRT010ƒADD.B‚#1,STRTSK+3(A0)„LoopuntilalltaskshavebeenstartedŠDBRAƒD1,STARTLPŠSPC„2* Task startup completeŠSPC„2-ŠLEA.L‚100(A7),A7‰RestoreentrystackpointerŠSPC„2+ŠJMP„(A4)ReturntocallingPASCALroutine.ŠSPC„2ŠPAGEŠXDEFƒSEND_COMŠSPC„2K* This routine passes the address of an Initiate I/O parameter block to oneM* of t he test tasks in an event that is queued to the task. After sending theM* command event, the routine waits for the test task to set a flag indicatingM* that the command has been issued to the driver and the return status can beH* read from the command parameter block. The routine then returns to theN* calling PASCAL routine with the command status as the function return value. :SEND_COM‚MOVEM.L(A7)+,A1/A2/A4„Pullparametersfromstack*¤A1=Returnaddress*¤A2=TaskIDaddress*¤A4=InitiateI/OPBaddressŠSPC„2>ŠLEA.L‚-100(A7),A7ˆAllocateparameterblockspaceonthestackŠSPC„2-* Initialize the Queue Event parameter block. 6ŠMOVE.LA7,A0ŽSaveparameterblockbaseaddressinA0.ŠSPC„2?ŠMOVE.L(A2),QEVTSK(A0)†CopythetaskIDpassedfromthePASCAL'*£routinetothedestinationtaskname.ŠSPC„2@ŠMOVE.W#QVOPAS,QEVOPT(A0)ƒSetthecommandprocessingASRofthe?ŠLEA.L‚CMDASR(PC),A2†tasttasktobethealternateASRTserviceŠMOVE.LA2,QEVIAD(A0)†address.ŠSPC„2?ŠLEA.L‚QEVIAD+4(A0),A2†Loadtheeventbufferaddress(following=ŠMOVE.LA2,QEVPKT(A0)†theparameterblock)intotheparameter*£block.ŠSPC„22ŠCLR.W‚(A4)+Clearthecommandconpletionflagand(*£updatethepointertotheInitiateI/O*£parameterblockbaseaddress.ŠSPC„2;ŠMOVE.W#$0603,(A2)+‰Eventlength=6bytes,Eventcode=3ŠMOVE.LA4,(A2)+ŠSPC„2@ŠMOVE.W#CMDLEN,XIOPLN(A4)ƒAssumethatthelengthofthecommand'*£blockisstandard(i.e.notanOPEN) ŠSPC„29ŠMOVE.LXIOCPK(A4),A2‡Getthecommandblockbaseaddress.ŠSPC„2BŠCMP.W‚#INOPEN,CMDCOD(A2)‚IfthecommandisnotOPEN,thestandard/ŠBNE.S‚QUECMDlengthalreadyloadediscorrect.ŠSPC„2:ŠMOVE.WCMDNCO(A2),D1ˆCalculatethecorrectlengthforthe:ŠMULUƒ#OPNCDB,D1‰OPENcommandparameterblockandstorein)ŠADD.L‚#CMDCHL,D1‰theInitiateI/Oblock.ŠMOVE.WD1,XIOPLN(A4)ŠSPC„2AQUECMD„MOVE.L#QEVNT,D0‹Queuethecommandeventtothetesttask.ŠTRAPƒ#1ŠBEQ.S‚ACKLOOP ŠBSR„ERRORŠSPC„2;ACKLOOPƒTST.B‚-2(A4)Loopuntilthecommandcompletionflag+ŠBEQ„ACKLOOPŒhasbeensetbythetesttask.ŠSPC„22ŠLEA.L‚100(A7),A7‹Restoretheentrystackpointer.ŠSPC„2=ŠMOVE.WCMDSTA(A2),(A7)†Savethecommandcompletionstatusin(*£thefunctionreturnwordonthestack.ŠSPC„2/ŠJMP„(A1)‘ReturntothecallingPASCALroutine.ŠSPC„2ŠPAGEJ*‚ThisisthetesttaskthatissuescommandstothedriverasspecifiedbyL* the controlling PASCAL task. The test task handles interrupt notificationsN* sent by the driver. The user is notified of the interrupt via LEDs connected:* to an MVME 625 Digital Output module on the I/O channel. 5VME625„EQU„$FE6001ŒVME625moduleI/Ochanneladdress (* Allocate Stack Segment parameter block SEGBLK„DC.Lƒ0’Taskname…(self)ŠDC.Lƒ0’Sessionnumber(self)6ŠDC.WƒSGOPPALogicalAddress=Physicaladdressoption)ŠDC.WƒSGATRWRead/WriteSegmantattributeŠDC.Lƒ'STAK'Segmentname)ŠDC.Lƒ0’Segmentaddress(ReturnedbyRMS)ŠDC.Lƒ$100SegmentlengthŠSPC„2* Test task entry point* Allocate a stack segment >TASKENTƒMOVE.L#GTSEG,D0ŠAllocateastacksegmentof256bytesŠLEA.L‚SEGBLK(PC),A0ŠTRAPƒ#1 ŠBEQ.S‚TSK010 ŠBSR„ERRORŠSPC„2BTSK010„LEA.L‚$F8(A0),A7‰Initializethestackpointertotheendof*£thestacksegment.ŠSPC„2CTSKWTEVT‚MOVE.L#WTEVNT,D0‹Waitforacommandeventoraninterrupt*ŠTRAPƒ#1‘eventtobeprocessedintheASR.ŠBEQ.S‚TSKWTEVT ŠBSR„ERRORŠSPC„2I*‚Controlreachesherewhentheuserhasissuedacommandforthetaskto* enter the wait state. ;TSKWAITƒMOVE.L#WAIT,D0ŒPlacethetaskintoaWAITstateso0ŠTRAPƒ#1‘interruptsmaybeprocessedonchannels*£usingWAKEUP.ŠSPC„23ŠBSETƒ#7,VME625ŒPulseLED7ontheVME625boardto8ŠBCLRƒ#7,VME625ŠindicatethatawakeuphasbeenreceivedŠSPC„26ŠBRA.S‚TSKWAITŽThislooprepeatsuntilacommandevent*£isqueuedtothetesttask.ŠPAGE* Command event ASR 3CMDASR„SUB.L‚#16,A7Allocatestacktoreceiveevent ŠMOVE.LA7,A0ŠSPC „21ŠMOVE.L#RDEVNT,D0ŠReadcommandeventintobufferŠTRAPƒ#1 ŠBEQ.S‚CMD020 ŠBSR.S‚ERRORŠSPC„28CMD020„MOVE.LEVQTXT(A0),A0‡Loadeventtextbaseaddress ŠADD.L‚#16,A7=ŠMOVE.LXIOCPK(A0),A1ˆLoadInputCommandParameterBlockbase *£addressŠSPC„27ŠTST.W‚CMDCOD(A1)ŠIfthecommandcodeiszero,thetest3ŠBEQ.S‚CMDWAITŒtaskistobeputintoaWAITstate.ŠSPC„2* Issue command to the driver. 5ŠMOVE.L#CMR,D0ŒIssuetheInitiateI/OcommandtoCMRŠTRAPƒ#1 ŠBEQ.S‚CMD030ŠSPC„2=ŠMOVE.WD0,CMDSTA(A1)ˆIfanerrorisreturnebyCMR,copythe'*£errorcodeintotheIPBstatusfield.ŠSPC„24* Signal supervisor task that command was completed. FCMD030„MOVE.W#$FFFF,-2(A0)†SetthecommandcompletionflagandreturnŠRTR—fromtheeventŠSPC„2* Put task in WAIT state CCMDWAITƒLEA.L‚TSKWAIT(PC),A1‡Changetheeventreturnaddresstothe'ŠMOVE.LA1,2(A7)‹WAITloopentrypoint.ŠSPC„25ŠMOVE.W#$FFFF,-2(A0)ˆSetthecommandcompletionflagŠSPC„2;ŠMOVE.L#SETASQ,D0‹EnabletheASRandASQsocommandevents4ŠMOVE.L#5,A0ŽmaybeprocessedwhenaWAKEUPoccurs.ŠTRAPƒ#1 ŠBEQ.S‚CMD010 ŠBSR.S‚ERRORŠSPC„20CMD010„RTR˜ReturntotheWAITstateloopuntila+*£commandeventiswaitingandaWAKEUPhas(*£beenissuedtothetaskbythedriver.ŠPAGE* Interrupt Event ASR 3INTASR„SUB.L‚#16,A7Allocatestacktoreceiveevent ŠMOVE.LA7,A0ŠSPC„2)ŠMOVE.L#RDEVNT,D0‰ReadeventintobufferŠTRAPƒ#1 ŠBEQ.S‚INT010 ŠBSR.S‚ERRORŠSPC„2;INT010„MOVE.B3(A0),D0‹LoadtheinterruptingchannalnumberŠSPC„28ŠCMP.L‚#'IN02',4(A0)ˆIfthefirstmoduleisinterrupting1ŠBNE.S‚INT020leavethechannelnumberunchanged.ŠSPC„21ŠADD.B‚#4,D0Ifthesecondmoduleisinterrupting!*£addfourtothechannelnumber.ŠSPC„28INT020„BSETƒD0,VME625ŒPulsetheLEDcorrespondingtothe(ŠBCLRƒD0,VME625Šmodifiedchannelnumber.ŠSPC„2ŠADD.L‚#16,A7RestorestackŠSPC„2ŠRTR™ReturnfromeventŠSPC„2;ERROR…MOVE.L(A7)+,A0Abortthetaskifanunexpectederror9ŠMOVE.L#ABORT,D0Šoccurs.Theaddressofwherertheerror3ŠTRAPƒ#1‘occurredisstoredinA0fortheSCTabort *£message.ŠSPC„2ŠENDINP04ŸàCODE" SEG2"ÿÿÿÿ!"5ÿÿ$@&IpAú¨NAf¼.HßüB "K*O,OB•Hí(+I6Hí0@+B:;C>;FH+G0Bm4¼ `J(HÙüÿ$HGê`+Kp&üÿÿÿÿB›+K+Ll2<€0<ìBµX@YAbö&Jr`B›YfúAúv%H,Aú6%H0Aú„%H8Aúš%HJf @fpBNNCíK& –‰CCaZJfR@  g ;fÿz;@" ;fXa =faôg ,fò  g. Zg( Ae" [dCíK( ˜‰ -fDDHã‰Gíj7„aÀ  f¨JgŒáƒåƒaf() ˜©„‰ ƒŠclÖ„ƒÿBAíB¨BB¨BhBh B¨!|SEG2 pNAfþAí!CBB¨1| B¨!|SEG2 1| pNAfýè–„ƒŠ`BƒaÞ,iÝüˆÝÃKí¼0<¼=%U@fú.N*O$iGê`+Kp&üÿÿÿÿB›+K+i l&Jr`B›YfúAú´%H,Aút%H0AúÂ%H8AúØ%HHíÿÿ|+o t <+@xaÿ:`ÿ H@0-4H@,NAB€BIúT am zn ,gè4k6 -fÀ`Ög0ƒgÁ` =fRŠa`  f@` NuBƒ:< &J $g am zn 4gˆ`6 am zn 4k6gãƒ(åƒÖ„ÖSEf΂ am zn 4jè  f" am zn +ÿþNu:< am zn  am zn 4k´fgŒ_郆SEfÌ`ÿz€€€@@ P€@  €@HÄR„„ÿÿÿþŸÄŸü ¿íb O÷H pNNOï .·HNu.LÐ2*(-0a®a+D0Nu"_. HÂ&g&<…(„QR„Dÿþ$O•ĵíldEïµíle•ílØŠaÿz!OEïP/JEò8ÿ/JA??B$O eTgv`gvC)C BjBBjBªL@O(-0fgA@aJf<gJ-(ga Xat`aúgJ-$ga @a\`aâgaÄ`8°m"b"?S@å@@,J5LŸg ga a$` ga¤`aŠgNq5A+D0NÑHçØžMê$gpÿS@å@@,Aõ|B€(@AõJa\$€ÿ€üLßyg/p(NNg g%m6*HBB|g€BNÁ Nupa |&8%m:*NuH瀀Aê$0¼€NCgNN *&o|&BjFB*K*E f|'` f|'`|'BjDLßNu.LÐ2*aHaxB f† fpÀj& g fa  g4/ &Ja Æ5 c ¼5‚a ˜a>H‚?a Æ2&_g*8 gAê0¼NBgNN` ap÷Áj&a AìB’5ANup`‚.LÐ ª2*a’ fFa pj&aV*8 &g, g&Aê$0¼€NCg f0¼NCf0¼€NCgNNa –B’A€ a ¬CòO%I5ANup` f?*8 &g pøÀj&€W5@&0Nu/(-0fBg<`"g<`BR ft bfì cp@NNB B)(NuB€BIúûr&H6<%B„aük$ #fÀ` ff&@€€€Nu€ü`öaÊkBfôgÚ .f R nÐ`Þ :f€@`Ð (f€`Ä )fª@`¸g Jfžf˜ggŒfF*H Kf  am zn (g24f.f. gD gô .fRˆ`*Rˆ`DÀ` 6<Gîa&4<aškÌ`À`Â&<€€€ am zn 4k^f0fR *g2À  am zn 4kR .fâ`JÆü Ö`¤ ƒ€f4 .fÄÀ6<ÿþ` ƒ€g ƒ'cÀ` =C ` À`À4<aÚk 6< Gî aN4<aÂkô n& f| 6< Gîa(4<aœkÎ (g 6<Gîa 4<a~k° (f¨BBBC am zn 4kD )gg8 Pn2AéK†AB`ÈBÿg BnÀ BcÀ=C `JÀÀÀBÿ BcÀ`.Rˆ6<Gîap4<aæk$< Gî &Â&Â&Â&Â6ÂBn $B|gÀ4B|gÀJ€NuJCfBA`$ am zn SC /f À<€`4Nu4HB€€»ÈgF am zn 4k.f(f @À`< *fÀÁSCn¾€€`$HB´CfÀ`< (*ÿþf<*`ÂSCnúNuJ€jÀ`QBgQBÀ`ÀBgÀNug g ³êga° ‰Nu%| 8%| .f %m@0%mD4` g%m6*NuHçùÀ./ T¯ a( ‚DÁLߟNuHçùÀ./ T¯ aãƒjD€ €DÁLߟNu G0å@A÷X@ @fB@C÷ "fpNN&âƒjD€³ƒJjDtÿB²€dã‰R`ödÐã’â‰SdòF‚"jD‚F‚[ÁNu.LÐR’aP ‰Nu0/8/`8/0/./ Gï 2RAAÿþ sLИ@a†J@g ›aŽS@nö ‰&_$_O÷NÒHçÀ€2*fpDNN³êggS‰` g¼ `S‰`¼ %IAê0¼NBg ÆgNNa&CòO%I"jLßNuJDo ¼ aSDnôNu³êfaÿzŸRIR’Nu./ LÐ 8+ fa¸8+gp"NN„7D +ŠR€Ñ“&_BNu.a2€Nu.a"€NuHçx"aõjLÐ 8+,Oa¤B +g -f -f|ÿaºa˜ am zn aÀ,OaÎJjD€ ŠÞü"LßH`Nu.HçPBYU@a"Lß 2‚Nu./ aJAgp ÀSAnú&_NuLÐ 8+24a.µëgaBJAgîÀSA`è”A ŠNua fa$`ðNu fa¨8+gp"NNB€NuR“µëf•Ê`RеëfÄ7DNuz"Bv 0m 9op1NN`@JEoJf 0g 0ÀPÁSE`RCaÿªaÿˆ am zn 0m 9oÀ #f¬ÃJEoÀSE`RCBaÿlaÿJ am zn 9o Am0 oJ@m @op1NN`TJEoJf gÀPÁSE`RCaÿaþî am zn 9o Am0 oJm o¬E"DENuB@BAt JEoNv #f(J@gpbNN` Ac AcpbNN`4B@BA`´CnpcNNÀÂÂÂÒƒHA6HAЃSE`°H@0NuHçøÐ2+$KaHÀgS€`R€@ÿþЫS€'@fpCNNAë0¼NBgz Ægt ÂgNNA€7A gXa5´5cJaÂ7AR55H‚5 J /g RB5 J /fôRB‚aê2*aT5ALß `  ÿJ•Ê`8$k +gJ€fÁ¼ ` J€g0+HÀS€ÐŠ'@7ALß NuAê$0¼@NCgNN$-0*)Â+B0ÁNu0<…f0*NugH瀀Aê$0¼NCgNNLßNuaÞAý¿?* „6Nug0<$`g0<(`+OSH€å@@,NuAõ JHçMë$aõfLßpaù¸€ÿ€üg/p(NNNupþ`B@ _.8˜@gAðañ,"OUDg"ØYDnúm2ØNÐ$_. 0HÀ`$_. "JaNò8&RƒCÿþ(gÙS€nú`â€UÁâ€UÂg ÙS€núJg0ÙJgÙNu$_. 8TDað¾"OUDg"ØYDnúm2ØNÒ."Ga|(` ."GapB„8R„„ÿÿÿþ.‰v¸ƒl(X„"mQ‰$I&)g""C¸‘nò „ €lX‰%Q`*"€ÓÀ"Ä`""mEñH ¿ÊbpNNEêÿØQ‰$Ñ"Ä$Ñ+J ‰NuOïÿà¿íOï bpNNNu _.02RAAÿþÞÁNÐNuNVÿîB.ÿópCîÿøAíÿøN«ŠN« ØBnÿô=|ÿö?.ÿöAîÿøN«ÒN«ˆ°_m„0.ÿö 60ùm 69ùo0.ÿö 6Aùmb 6FùnZ0.ÿö 6Aùm2.ÿôHÁé6ùH‚HÂÒ‚7=Aÿô` 0.ÿôHÀé€2.ÿö6ùH‚HÂЂ€0=@ÿô0.ÿöHÀR€=@ÿö`ÿj?.ÿöAîÿøN«ÒN«ˆ°_m>|ÿóHmÿðN«XInvalid hex number - reenter > BgN« /N“ÆJ.ÿófþð=nÿôN^NuNVÿîAîÿúN«‚ -|ÿò0.HÀrN« p-@ÿö4.HÂ&N« X=B € m8.ÿô€7€@û`0.ÿô".ÿö0ûS®ÿò ®ÿòl¤HmÿðAîÿúN«ÒBgN« N« îN^ _TNÐNVÿò-mÿ®ÿö-ÿÂ`\ nÿöBh`~ nÿö1|`p nÿö1|`b nÿö1|`T nÿö1|`F nÿö1|`8?<NN WnòAú Vˆ°númæÐÐNÐCÿ¨DÿÀEÿ®OÿŽSÿÂWÿz nÿö0(HÀJ€gÂHmÿðN«XEnter channel mnemonic > BgN« /N“BpCíÿžAíÿøN« N« Ø nÿö0(HÀ €gNHmÿðN«XEnter channels mask in hex. > BgN« /N“è nÿöHhUaý0 _0€`HmÿðN«X#Enter number of channels to open > BgN« /N“” nÿöCèAíÿøN«N« ØB®ÿú nÿö0(HÀS€-@ÿò`ªHmÿðN«XEnter channel number > BgN« /N“8 nÿö .ÿúå@CðAíÿøN«N« ØHmÿðN«X&Enter channel configuration in hex. > BgN« /N“à nÿö .ÿúå@HpUaûú0 _0€R®ÿúi .ÿò°®ÿúlÿNUHmÿ˜Hmÿ¼N“l nÿö0Ÿ0(HÀJ€gx0(HÀ €f6HmÿðN«XChannel Status = BgN« /N“\ nÿö?(aüžHmÿðN«XCommand Status is BgN« /N“& nÿö?aüjN^NužüntrpAíÿðN«âAíÿðN«®trpAíÿøN«âAíÿøN«ü|ÿšB-ÿ›Aíÿ®N«ü&HmÿðN«XEnter number of tasks (1-26) > BgN« /N“šCíÿ´AíÿøN«N« ØAíÿ¼N«‚INPx/-ÿ´N“F+|ÿ¸+mÿ´ÿ’` -ÿ¸€@@ÿ¿HmÿðN«X** Task BgN« //-ÿ¼?<?<N« þ/?<*/< *BgN« N« îHmÿðN«X9Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > BgN« /N“Àp CíÿÀAíÿøN«ŠN« ØAíÿÀN«ÒN«ˆHÀJ€g,-ÿ "<ˆ€8t ?c°` m`gaûTAíÿÀN«ÒN«ˆHÀJ€fþþR­ÿ¸i -ÿ’°­ÿ¸lþì`þÖAíÿðN«ÆAíÿøN«ÆBgNN(_.S‡Oïÿœ O ¼INPAB¨1|@||1| Cú>!I1|2p NAgaàR(QÉÿð ¼INPA1| 1| ""Op#|CODE INAga®p#|SEG2 INAgašR)QÉÿÒ I ¼INPA| | !| Cú>!I"pNAgabR(QÉÿð ¼INPA1|"p NAgaBR(QÉÿðOïdNÔLßOïÿœ O ’1|€Eú˜!JEè!J B\4ü$Ì9|$l jf2*Âü\9Ap#NAgaàJ,ÿþgúOïd>’NÑ STAKpAúÿäNAga¬Oèøp$NAgúažpNAùþ`¹þ``êŸü Op"NAgav h ßü"hJigp€S@mµJ`ôNÔ4Z1FILENAME A "€PASCAL GET FILE NAME RUNTIME ROUTINE (11/6/80)2IP$FNAME ) F3 _"_"iIïBCB ) 8fR<#azEé*rabJf,<:ahB2a$<.a\TŠF3 raF<.aPra<<.aFra2>ƒNÐBJf<0RJg‚ü HA0RBAHA`è&3 aSføNu gaSfòNuÀRCNu4Q1LOOKUP A '€Pascal File Lookup Routine (11/11/80)+2IP$LOOKUP p.PALSTS p.PEDTFIL )H3@ "_ _B€0$O8D:N“I î(JfSŒ< ÑÀTˆJ@g S@fú OìÿØ O"< 0¼H3 @1|!m:1m> !m@ !mD!A!A1|SAB¨Hç,H @N“I ‚ NF3 "Lßx€ÿ€üf f  g¼`r$-(<ÿÿR  g^fôANCf¼F3 0¼NCgJNNfö gÐ gÊ g f¼`" g f¼3 ` f¼`¼.JNÑ4Y1PDEFAULT A )€V A1.10 80-04-17 FILE NAME DEFAULTING ROUTINE~2IP$1DEFAU IP$2DEFAU IP$3DEFAU IP$4DEFAU IP$5DEFAU IP$DEFAUL IP$RDEFAU IP$TDEFAU )œF3 Lï"i$j)f~*N)NktJjf#j**| 8Á`TÁF3 fBFÆpg#j**Ápg3j..Ápg#j00#j44Á#j88#j"3 <<Áf3o@AN _Þü NÐ4^1POPTION AFIX ePDOLRLIBOPTION SA‚1.20 1-6-82 ROUTINE TO PASS COMMAND LINE OPTIONS2IP$OPTION )$3 LßpEíì2gmRA`SA2ÁSfîNÐ4K1SETDIAG AFIX ePDOLRLIBSETDIAG SA (Set Chain Cmd Diag Reg 7/28/812IP$SETDIA )3 _;_4NÐ4@1DELFILE AFIX ePDOLRLIBDELFILE SAX9)Delete File 7/29/81v2IP$DELFIL IP$DELFL1 IP$DELFL2 IP$DELFL3 IP$DELFL4 IP$DELFL5 p.PCLOSPL p.PLJSR )073@ "_$_$j2*(-0N«@ª+D0Aê$0¼NCgNNNÑ4é" é,1INTSTASM ASYST'D610 INTSTASMSA U!ƒ$2ISEND_COM ôICLONE_TA ),F3 (_.S‡Oïÿœ O ¼INPAB¨1|@||1| Cú>!I1|2p F3 NAgaàR(QÉÿð ¼INPA1| 1| ""Op#|CODE INAga®p#|SEF3 G2 INAgašR)QÉÿÒ I ¼INPA| | !| Cú>!I"pNAF3 gabR(QÉÿð ¼INPA1|"p NAgaBR(QÉÿðOïdNÔLßOïÿœ O ’F3 1|€Eú˜!JEè!J B\4ü$Ì9|$l jf2*Âü\9Ap#F3 NAgaàJ,ÿþgúOïd>’NÑ STAKpAúÿäNAga¬OèøF3 p$NAgúažpNAùþ`¹þ``êŸü Op"NAgav h ßü"hJiF3 gp|ÿóHmÿðN«@Invalid hex number - reentK3€ er > BgN«@/N“J þöJ.ÿófþð=nÿôN^NuNVÿîAîÿúN«@ -|ÿòH3 0.HÀrN«@-@ÿö4.HÂ&N«@=B € m8.ÿô€7€@û`0.ÿôI3€ ".ÿö0ûS®ÿò ®ÿòl¤HmÿðAîÿúN«@BgN«@N«@N^ _TNÐNVBGKÿò-mF3 ÿ®ÿö-ÿÂ` nÿöBh` nÿö1|` nÿö1|` nÿö1|`F3 nÿö1|` nÿö1|`?<NN¤\Z WnòAú Vˆ°númæÐÐF3U@ NÐCÿ¨DÿÀEÿ®OÿŽSÿÂWÿzÈ8ðFðTðbðpð~| nÿö0(HÀJ€K3@ gHmÿðN«@Enter channel mne" monic > BgN«@/N“J ýrpCíÿžAíÿøN«I3  @N«@ nÿö0(HÀ €gNHmÿðN«@Enter channels mask in hex. > K3$ BgN«@/N“J ý nÿöHhUaý0 _0€`HmÿðN«@#Enter number of chL3€ annels to open > BgN«@/N“J üÄ nÿöCèAíÿøN«@ N«@B®ÿú nÿö0(HÀK3€ S€-@ÿò`HmÿðN«@Enter channel number > BgN«@/N“J üh nÿö .ÿúI3ˆ å@CðAíÿøN«@ N«@HmÿðN«@&Enter channel configuration in hex. L3@ > BgN«@/N“J ü nÿö .ÿúå@HpUaûú0 _0€R®ÿúi ÿVª¨ .ÿò°®ÿúlÿNN3´ þâþ>ÂÀUHmÿ˜Hmÿ¼N“J ûÔ nÿö0Ÿ0(HÀJ€gx0(HÀ €f6HmÿðN«@K3 @ Channel Status = BgN«@/N“J ûŒ nÿö?(aüžHmÿðN«@Command StL3@" atus is BgN«@/N“J ûV nÿö?aüjN^NužüntrpAíÿðN«@!AíÿðN«@"tJ3@! rpAíÿøN«@!AíÿøN«@#|ÿšB-ÿ›Aíÿ®N«@$&HmÿðN«@Enter number oM3 f tasks (1-26) > BgN«@/N“J úÊCíÿ´AíÿøN«@%N«@Aíÿ¼N«@INPx/-ÿ´K3@ N“J ú¢+|ÿ¸+mÿ´ÿ’` -ÿ¸€@@ÿ¿HmÿðN«@** Task BgN«@//-J3D ÿ¼?<?<N«@&/?<*/< *BgN«@N«@HmÿðN«@9Command (O-pen,C-lJ3@ ose,E-nable,D-isable,S-tatus,W-ait ) > BgN«@/N“J ùðp CíÿÀAíÿøN«J3¢€ @N«@AíÿÀN«@N«@HÀJ€g,-ÿ "<ˆ€8t ?c°` m`gK3@ aûTAíÿÀN«@N«@HÀJ€fþþR­ÿ¸i þô  -ÿ’°­ÿ¸lþì`þÖAíÿðN«@'Aíÿø3@ N«@'BgNN4éé 2.30  OTX\`dhlptx|€„ˆSEND_COMCLONE_TAP$FORCE ÿÿ????????#    CW')0(nÿÿE 5Motorola Pascal 2.30 INPTST .SA 03/21/83 10:22:50E #program Input_Test (input,output); E  E const INPUT_TEXQXIE  WAIT = 0; E  OPEN = 1; E  CLOSE = 2; E  STAT = 5; E  ENABLE = 6; E  DISABLE = 7; E  E type E  byte = -128..+127; E  word = -32768..+32767; E  E  open_cdb = packed record E  chan_no : word; E  config : word E   end; E  E  command = packed record E  status : word; E  code : word; E  case boolean of E . true : (chan_mask : word); E - false : (chan_cnt : word; E A cdb : array [0..7] of open_cdb) E  end; E  E  init_IO = packed record E  done_flag: word; E  code : byte; E sub_code : byte; E ! unused_1 : word; E "7 mnemonic : packed array [1..4] of char; E #8 unused_2 : packed array [1..12] of byte; E $$ cmd_adr : ^command; E % cmd_len : word E & end; E ' E (, task_name = packed array [1..4] of char; E ) E *var E + cmd_blk : command; E , cmd_char : string[8]; E - task_ID : task_name; E . task_cnt, i : integer; E / init_blk : init_IO; E 0 in_char : char; E 1 E 2+procedure p$force (var fil:text); forward; E 3 E 45procedure clone_tasks (task_cnt : integer); forward; E 5 E 6/function send_command (var init_blk : init_IO; E 7A  var task_ID : task_name) : word; forward; E 8{$E} E 9function hex_in : word; E : E ;var E < num_str : string[6]; E = num ,i : word; E > error : boolean; E ? E @begin E A repeat E B  begin E C E D error := FALSE; HEX_IN k?ƒÿÿÿóBE E readln (num_str); mfQAÿÿÿøAÿÿÿøBE F num := 0; ƒÿÿÿôBE G i := 1; ƒÿÿÿöBE H E I, while ( i <= length (num_str)) and E JF ( (( num_str[i] >= '0' ) and ( num_str[i] <= '9' )) or E KJ (( num_str[i] >= 'A' ) and ( num_str[i] <= 'F' )) ) do Œ?(CFÿÿÿözQFÿÿÿø(*5= AÿÿÿøFÿÿÿöB0†C5= AÿÿÿøFÿÿÿöB9?(*5= AÿÿÿøFÿÿÿöBA(C5= AÿÿÿøFÿÿÿöBF?E L begin E M$ if num_str[i] >= 'A' E NK then num := num * 16 + ord (num_str[i]) - ord ('A') + 10 (*5= AÿÿÿøFÿÿÿöBAE OG else num := num # * 16 + ord (num_str[i]) - ord ('0'); ƒÿÿÿô7OFÿÿÿôB5= AÿÿÿøFÿÿÿö‰ ?ƒÿÿÿô0OFÿÿÿôB5= AÿÿÿøFÿÿÿöE P  i := i + 1 E Q end; ? ƒÿÿÿö3Fÿÿÿö‰E R' if i <= length (num_str) then ?( CFÿÿÿözQFÿÿÿøE S begin E T error := TRUE; ƒÿÿÿóBE U: write ('Invalid hex number - reenter > '); •!QAÿÿÿðB Invalid hex number - reenter > BE V p$force (output) E W end QAÿÿÿðE X end E Y until error = FALSE; ? ($FÿÿÿóBE Z hex_in := num E [ E \end; ƒFÿÿÿôlE ]{$E} E ^!procedure hex_out ( num : word); E _ E `var E a  num_str : string[4]; E b i,j : integer; E c E dbegin E e E f num_str := ' ';  HEX_OUT ƒ ÿÿÿúB  E g for i :=4 downto 1 do ƒÿÿÿòB)ÿÿÿÿƒÿÿÿîB‰E h begin E i j := num mod 16; ? ƒÿÿÿöLFBE j num := num div 16; ƒFBE k if j >= 10 E l8 then num_str[i] := chr (j - 10 + ord ('A')) (*FÿÿÿöB E m3 else num_str[i] := chr (j + ord ('0')) 3= AÿÿÿúFÿÿÿò37Fÿÿÿö‰E n end; ?3= AÿÿÿúFÿÿÿò30Fÿÿÿö?ƒÿÿÿòFÿÿÿò?( DFÿÿÿòFÿÿÿîE o writeln (num_str) E pend; ?•QAÿÿÿðFÿÿÿúBlE q{$E} E rprocedure enter_command; E s E tvar E u status : word; E v i : integer; E w E xbegin E y with init_blk.cmd_adr^ do ENTER_COƒÿÿÿöFÿÿÿ®E z begin E { case cmd_char[1] of ™FÿÿÿÂE | 'W' : code := WAIT; ?3FÿÿÿöBE } 'O' : code := OPEN; ‰?3FÿÿÿöBE ~ 'C' : code := CLOSE; ‰?3FÿÿÿöBE  'E' : code := ENABLE; ‰?3FÿÿÿöBE € 'D' : code := DISABLE; ‰?3FÿÿÿöBE  'S' : code := STAT E ‚ end; ‰?3FÿÿÿöB‰?%QB?‹C‹D‹E‹O‹S‹WE ƒ if code <> WAIT then ?( S5FÿÿÿöBE „ begin E …/ write ('Enter channel mnemonic > '); •QAÿÿÿðB Enter channel mnemonic > BE † p$force (output); QAÿÿÿðE ‡& readln (init_blk.mnemonic); mgQAÿÿÿøAÿÿÿžBE ˆ if code <> OPEN E ‰@  then {All commands except OPEN} (!S5FÿÿÿöBE Š begin E ‹= write ('Enter channels mask in hex. > '); • QAÿÿÿðB Enter channels mask in hex. > BE Œ% p$force (output); QAÿÿÿðE ' chan_mask := hex_in E Ž end 3FÿÿÿöQE 4 else  {OPEN command} ‰"E  begin E ‘ E ’B write ('Enter number of channels to open > '); ?!•%QAÿÿÿðB #Enter number of channels to open > BE “% $  p$force (output); QAÿÿÿðE ”& readln (chan_cnt); mcQAÿÿÿø3FÿÿÿöE • E –1 for i := 0 to chan_cnt - 1 do ƒÿÿÿúB)ƒÿÿÿò5Fÿÿÿö‰$E — begin E ˜< write ('Enter channel number > '); ?#•QAÿÿÿðB Enter channel number > BE ™+  p$force (output); QAÿÿÿðE š2 readln (cdb[i].chan_no); mcQAÿÿÿø= 3FÿÿÿöFÿÿÿúE ›K write ('Enter channel configuration in hex. > '); •(QAÿÿÿðB &Enter channel configuration in hex. > BE œ+ p$force (output); QAÿÿÿðE 1 cdb[i].config := hex_in E ž end 3= 3FÿÿÿöFÿÿÿúQE Ÿ end {else} ƒÿÿÿú4%Fÿÿÿú?$(#,FÿÿÿúFÿÿÿòE   end;{if} E ¡2 status := send_command (init_blk, task_ID); ?%?"? FÿÿÿöQAÿÿÿ˜Aÿÿÿ¼E ¢ if code <> WAIT E £ then (&S5FÿÿÿöBE ¤ begin E ¥ if code = STAT E ¦ then ('$5FÿÿÿöBE § begin E ¨/ write ('Channel Status = '); •QAÿÿÿðB Channel Status = BE ©$ p$force (output); QAÿÿÿðE ª% hex_out(chan_mask) E « end; Q5FÿÿÿöE ¬) write ('Command Status is '); ?'•QAÿÿÿðB Command Status is BE ­ p$force (output); QAÿÿÿðE ® hex_out (status) E ¯ end Q5FÿÿÿöE ° end {with} E ±end; ?&lE ²{$E} E ³begin {main} E ´ E µ with init_blk do (INPUT_TE0QAÿÿÿðBBBqQAÿÿÿð0QAÿÿÿøBBBpQAÿÿÿøE ¶ begin E · code := 7; ƒÿÿÿšBE ¸ sub_code := 0; ƒÿÿÿ›BE ¹ new (cmd_adr) E º end; T&QAÿÿÿ®E » E ¼. write ('Enter number of tasks (1-26) > '); •!QAÿÿÿðB Enter number of tasks (1-26) > BE ½ p$force (output); QAÿÿÿðE ¾ readln ( task_cnt); mdQAÿÿÿøAÿÿÿ´E ¿ E À task_ID := 'INPx'; ƒ ÿÿÿ¼B INPxE Á E  clone_tasks (task_cnt); QFÿÿÿ´E à E Ä while true do Œ?*E Å for i := 1 to task_cnt do ƒÿÿÿ¸B)ƒÿÿÿ’Fÿÿÿ´‰-E Æ repeat E Ç begin E È4 task_id[4] := chr (ord ('A') + i - 1 ); ?,k?/ƒÿÿÿ¿3@Fÿÿÿ¸E É0 writeln ('** Task ',task_ID,' **'); •–• QAÿÿÿðB ** Task BF ÿÿÿ¼BBB  **BE ÊO write ('Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > '); •;QAÿÿÿðB 9Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > BE Ë p$force (output); QAÿÿÿðE Ì readln (cmd_char); mfQAÿÿÿøAÿÿÿÀB E Í, if (len$ gth (cmd_char) <> 0) and E Î: (cmd_char[1] in ['W','O','C','E','D','S']) E Ï# then enter_command (0Sz QFÿÿÿÀB(06ÿÿÿà_ FÿÿÿÂB ˆ€8E Ð end QE Ñ# until length (cmd_char) = 0 E Òend. ?0(/$z QFÿÿÿÀBƒÿÿÿ¸4.Fÿÿÿ¸?-(,,Fÿÿÿ¸Fÿÿÿ’?.‰*?+ QAÿÿÿð QAÿÿÿø‚ŠAÿÿÿðB ** Task BF ÿÿÿ¼BBB  **BE ÊO write ('Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > '); •;QAÿÿÿðB 9Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > BE Ë p$force (output); QAÿÿÿðE Ì readln (cmd_char); mfQAÿÿÿøAÿÿÿÀB E Í, if (len 2.30  Œ‘•™¡¥©­±µ¹½ÁÅSEND_COMCLONE_TAP$FORCE ÿÿ????????   CW')0(nÿÿ% E 5Motorola Pascal 2.30 INPTST .SA 03/21/83 10:22:50E #program Input_Test (input,output); E  E const INPUT_TEXQXIE  WAIT = 0; E  OPEN = 1; E  CLOSE = 2; E  STAT = 5; E  ENABLE = 6; E  DISABLE = 7; E  E type E  byte = -128..+127; E  word = -32768..+32767; E  E  open_cdb = packed record E  chan_no : word; E  config : word E   end; E  E  command = packed record E  status : word; E  code : word; E  case boolean of E . true : (chan_mask : word); E - false : (chan_cnt : word; E A cdb : array [0..7] of open_cdb) E  end; E  E  init_IO = packed record E  done_flag: word; E  code : byte; E sub_code : byte; E ! unused_1 : word; E "7 mnemonic : packed array [1..4] of char; E #8 unused_2 : packed array [1..12] of byte; E $$ cmd_adr : ^command; E % cmd_len : word E & end; E ' E (, task_name = packed array [1..4] of char; E ) E *var E + cmd_blk : command; E , cmd_char : string[8]; E - task_ID : task_name; E . task_cnt, i : integer; E / init_blk : init_IO; E 0 in_char : char; E 1 E 2+procedure p$force (var fil:text); forward; E 3 E 45procedure clone_tasks (task_cnt : integer); forward; E 5 E 6/function send_command (var init_blk : init_IO; E 7A  var task_ID : task_name) : word; forward; E 8{$E} E 9function hex_in : word; E : E ;var E < num_str : string[6]; E = num ,i : word; E > error : boolean; E ? E @begin E A repeat E B  begin E C E D error := FALSE; HEX_IN k?ƒÿÿÿóBE E readln (num_str); mfQAÿÿÿøAÿÿÿøBE F num := 0; ƒÿÿÿôBE G i := 1; ƒÿÿÿöBE H E I, while ( i <= length (num_str)) and E JF ( (( num_str[i] >= '0' ) and ( num_str[i] <= '9' )) or E KJ (( num_str[i] >= 'A' ) and ( num_str[i] <= 'F' )) ) do Œ?(CFÿÿÿözQFÿÿÿø(*5ÿÿÿî= AÿÿÿøFÿÿÿöB0†C5ˆÿÿÿîB9?(*5ÿÿÿî= AÿÿÿøFÿÿÿöBA(C5ˆÿÿÿîBF?E L begin E M$ if num_str[i] >= 'A' E NK then num := num * 16 + ord (num_str[i]) - ord ('A') + 10 (*5ÿÿÿî= AÿÿÿøFÿÿÿöBAE OG else num := num * 16 + ord (num_str[i]) - ord ('0'); ƒÿÿÿô7Fÿÿÿô5ˆÿÿÿî‰ ?ƒÿÿÿô0Fÿÿÿô5= AÿÿÿøFÿÿÿöE P i := i + 1 E Q end; ? ƒÿÿÿö3Fÿÿÿö‰E R' if i <= length (num_str) then ?( CFÿÿÿözQFÿÿÿøE S begin E T error := TRUE; ƒÿÿÿóBE U: write ('Invalid hex number - reenter > '); •!QAÿÿÿðB Invalid hex number - reenter > BE V p$force (output) E W end QAÿÿÿðE X %  end E Y until error = FALSE; ? ($FÿÿÿóBE Z hex_in := num E [ E \end; ƒFÿÿÿôlE ]{$E} E ^!procedure hex_out ( num : word); E _ E `var E a num_str : string[4]; E b i,j : integer; E c E dbegin E e E f num_str := ' ';  HEX_OUT ƒ ÿÿÿúB  E g for i :=4 downto 1 do ƒÿÿÿòB)E h begin E i j := num mod 16; ? ƒÿÿÿöLFBE j num := num div 16; ƒFBE k if j >= 10 E l8 then num_str[i] := chr (j - 10 + ord ('A')) (*FÿÿÿöB E m3 else num_str[i] := chr (j + ord ('0')) 3= AÿÿÿúFÿÿÿò37Fÿÿÿö‰E n end; ?3= AÿÿÿúFÿÿÿò30Fÿÿÿö?ƒÿÿÿòFÿÿÿò?( DFÿÿÿòBE o writeln (num_str) E pend; ?•QAÿÿÿðFÿÿÿúBlE q{$E} E rprocedure enter_command; E s E tvar E u status : word; E v i : integer; E w E xbegin E y with init_blk.cmd_adr^ do ENTER_COƒÿÿÿöFÿÿÿ®E z begin E { case cmd_char[1] of ™FÿÿÿÂE | 'W' : code := WAIT; ?3FÿÿÿöBE } 'O' : code := OPEN; ‰?3FÿÿÿöBE ~ 'C' : code := CLOSE; ‰?3FÿÿÿöBE  'E' : code := ENABLE; ‰?3FÿÿÿöBE € 'D' : code := DISABLE; ‰?3FÿÿÿöBE  'S' : code := STAT E ‚ end; ‰?3FÿÿÿöB‰?%QB?‹C‹D‹E‹O‹S‹WE ƒ if code <> WAIT then ?( S5FÿÿÿöBE „ begin E …/ write ('Enter channel mnemonic > '); •QAÿÿÿðB Enter channel mnemonic > BE †  p$force (output); QAÿÿÿðE ‡& readln (init_blk.mnemonic); mgQAÿÿÿøAÿÿÿžBE ˆ if code <> OPEN E ‰@ then {All commands except OPEN} (!S5FÿÿÿöBE Š begin E ‹= write ('Enter channels mask in hex. > '); • QAÿÿÿðB Enter channels mask in hex. > BE Œ%  p$force (output); QAÿÿÿðE ' chan_mask := hex_in E Ž end 3FÿÿÿöQE 4 else {OPEN command} ‰"E  begin E ‘ E ’B write ('Enter number of channels to open > '); ?!•%QAÿÿÿðB #Enter number of channels to open > BE “% p$force (output); QAÿÿÿðE ”& readln (chan_cnt); mcQAÿÿÿø3FÿÿÿöE • E –1 for i := 0 to chan_cnt - 1 do ƒÿÿÿúB)ƒÿÿÿò5Fÿÿÿö‰$E —  begin E ˜< write ('Enter channel number > '); ?#•QAÿÿÿðB Enter channel number > BE ™+ p$force (output); QAÿÿÿðE š2 readln (cdb[i].chan_no); mcQAÿÿÿø= 3FÿÿÿöFÿÿÿúE ›K write ('Enter channel configuration in hex. > '); •(Q& AÿÿÿðB &Enter channel configuration in hex. > BE œ+ p$force (output); QAÿÿÿðE 1 cdb[i].config := hex_in E ž end 3= 3FÿÿÿöFÿÿÿúQE Ÿ end {else} ƒÿÿÿú4%Fÿÿÿú?$(#,FÿÿÿúFÿÿÿòE   end;{if} E ¡2 status := send_command (init_blk, task_ID); ?%?"? FÿÿÿöQAÿÿÿ˜Aÿÿÿ¼E ¢ if code <> WAIT E £ then (&S5FÿÿÿöBE ¤ begin E ¥ if code = STAT E ¦ then ('$5FÿÿÿöBE § begin E ¨/ write ('Channel Status = '); •QAÿÿÿðB Channel Status = BE ©$ p$force (output); QAÿÿÿðE ª%  hex_out(chan_mask) E « end; Q5FÿÿÿöE ¬) write ('Command Status is '); ?'•QAÿÿÿðB Command Status is BE ­ p$force (output); QAÿÿÿðE ® hex_out (status) E ¯ end Q5FÿÿÿöE ° end {with} E ±end; ?&lE ²{$E} E ³begin {main} E ´ E µ with init_blk do  (INPUT_TE0QAÿÿÿðBBBqQAÿÿÿð0QAÿÿÿøBBBpQAÿÿÿøE ¶ begin E · code := 7; ƒÿÿÿšBE ¸ sub_code := 0; ƒÿÿÿ›BE ¹ new (cmd_adr) E º end; T&QAÿÿÿ®E » E ¼. write ('Enter number of tasks (1-26) > '); •!QAÿÿÿðB Enter number of tasks (1-26) > BE ½ p$force (output); QAÿÿÿðE ¾ readln ( task_cnt); mdQAÿÿÿøAÿÿÿ´E ¿ E À task_ID := 'INPx'; ƒ ÿÿÿ¼B INPxE Á E  clone_tasks (task_cnt); QFÿÿÿ´E à E Ä while true do Œ?*E Å for i := 1 to task_cnt do ƒÿÿÿ¸B)ƒÿÿÿ’Fÿÿÿ´‰-E Æ repeat E Ç begin E È4  task_id[4] := chr (ord ('A') + i - 1 ); ?,k?/ƒÿÿÿ¿3@Fÿÿÿ¸E É0 writeln ('** Task ',task_ID,' **'); •–• QAÿÿÿðB ** Task BF ÿÿÿ¼BBB  **BE ÊO write ('Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > '); •;QAÿÿÿðB 9Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > BE Ë p$force (output); QAÿÿÿðE Ì readln (cmd_char); mfQAÿÿÿøAÿÿÿÀB E Í, if (length (cmd_char) <> 0) and E Î: (cmd_char[1] in ['W','O','C','E','D','S']) E Ï# then enter_command (0Sz QFÿÿÿÀB(06ÿÿÿà_ FÿÿÿÂB ˆ€8E Ð end QE Ñ# until length (cmd_char) = 0 E Òend. ?0(/$z QFÿÿÿÀBƒÿÿÿ¸4.Fÿÿÿ¸?-(,,Fÿÿÿ¸Fÿÿÿ’?.‰*?+ QAÿÿÿð QAÿÿÿø‚ŠAÿÿÿðB ** Task BF ÿÿÿ¼BBB  **BE ÊO write ('Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) > '); •;QAÿÿÿðB 9Command (O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait ) >&  BE Ë p$force (output); QAÿÿÿðE Ì readln (cmd_char); mfQAÿÿÿøAÿÿÿÀB E Í, if (length (cmd_char) <> 0) and E Î: (cmd_cha  OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡1 5¥*MotorolaPascal‚2.30ƒINPTST‚.SA03/21/8310:22:50¢0&¥*programInput_Test(input,output);µ1¥*×2 ¥*constÒ3¯XREF„8:.PLJSR¥*ƒWAIT„=0;È4¥*ƒOPEN„=1;È5¥*ƒCLOSEƒ=2;È6¥*ƒSTAT„=5;È7¥*ƒENABLE‚=6;È8¥*ƒDISABLE=7;È9¥*Ö10 ¥*typeÒ11¥*ƒbyte=-128..+127;Á12¥*ƒword=-32768..+32767;½13¥*Ö14¥*ƒopen_cdb=packedrecord»15¥*chan_no:word;¸16¥*config‚:word¹17 ¥*Žend;Ä18¥*Ö19¥*ƒcommand=packedrecord¼20¥*status:word;¹21¥*codeƒ:word;¹22¥*casebooleanof¸23 ¥*’true‚:(chan_mask:word);©24¥*’false:(chan_cnt‚:word;ª25%¥*›cdb‡:array[0..7]ofopen_cdb)–26 ¥*end;Ã27¥*Ö28¥*ƒinit_IO=packedrecord¼29¥*done_flag:word;·30¥*code…:byte;·31¥*sub_code:byte;·32¥*unused_1:word;·33-¥*mnemonic:packedarray[1..4]ofchar; 34.¥*unused_2:packedarray[1..12]ofbyte;Ÿ35¥*cmd_adr‚:^command;³36¥*cmd_len‚:word¸37 ¥*end;Å38 É,Î*ÒÖÚÞ(â"æê%îò#öúþ! !##!"&¥*Ö39.¥*ƒtask_name=packedarray[1..4]ofchar;«40¥*Ö41¥*varÓ42¥*ƒcmd_blk…:command;½43¥*ƒcmd_char„:string[8];»44¥*ƒtask_ID…:task_name;»45¥*ƒtask_cnt,i:integer;½46¥*ƒinit_blk„:init_IO;½47¥*ƒin_char…:char;À48¥*Ö49/¥*procedurep$force(varfil:text);forward;¬50¥*Ö519¥*procedureclone_tasks(task_cnt:integer);forward;¢52¥*Ö533¥*functionsend_command(varinit_blk:init_IO;¨54/¥*—vartask_ID:task_name):word;forward;–55   OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡2 ¥*{$E}Ò56¥*functionhex_in:word;¿57¥*Ö58¥*varÓ59¥*ƒnum_str:string[6];¿60¥*ƒnum,i‚:word;Ä61¥*ƒerrorƒ:boolean;Á62¥*Ö63 ¥*beginÑ64 ¥*ƒrepeatÍ65 ¥*†beginË66¥*Ö67¥*‰error:=FALSE;¾6800000000USER4…EQUƒ* 00000000†4E56FFEE˜LINK„A6,#-1800000004L3ˆEQU…*!00000004†422EFFF3˜CLR.Bƒ-13(A6)¥*‰readln(num_str);¼6900000008†7008MOVEQƒ#8,D0!0000000A†43EEFFF8˜LEA…-8(A6),A1!0000000E†41EDFFF8˜LEA…-8(A5),A0¯XREF„8:.PRDS…(00000012†4EAB****˜JSR….PRDS-.PLJSR(A3)¯XREF„8:.PRLN…(00000016†4EAB****˜JSR….PRLN-.PLJSR(A3)¥*‰num:=0;Ä700000001A†426EFFF4˜CLR…-12(A6) ¥*‰i:=1;Æ71(0000001E†3D7C0001FFF6“MOVE„#1,-10(A6)¥*Ö72(¥*‰while(i<=length(num_str))and«73<¥*(((num_str[i]>='0')and(num_str[i]<='9'))or‘74<¥*‘((num_str[i]>='A')and(num_str[i]<='F'))ƒ)do7500000024L4ˆEQU…*&00000024†3F2EFFF6˜MOVE„-10(A6),-(A7)!00000028†41EEFFF8˜LEA…-8(A6),A0¯XREF„8:.PLODS„)0000002C†4EAB****˜JSR….PLODS-.PLJSR(A3)¯XREF„8:.PSLEN„)00000030†4EAB****˜JSR….PSLEN-.PLJSR(A3)00000034†B05FCMP…(A7)+,D000000036†6D**BLT…L5(00000038-003A302EFFF6˜MOVE„-10(A6),D010000003C-003E0C36003000F9“CMP.Bƒ#48,-7(A6,D0)00000042-00446D**BLT…L7100000044-00480C36003900F9“CMP.Bƒ#57,-7(A6,D0)0000004A-004E6F**BLE…L60000004C-0052˜L7ˆEQU…*(0000004C-0052302EFFF6˜MOVE„-10(A6),D0100000050-00560C36004100F9“CMP.Bƒ#65,-7(A6,D0)00000056-005C6D**BLT…L5100000058-00600C36004600F9“CMP.Bƒ#70,-7(A6,D0)0000005E-00666E**BGT…L500000060-006A˜L6ˆEQU…* ¥*ŒbeginÅ76¥*ifnum_str[i]>='A'³77>¥*’thennum:=num*16+ord(num_str[i])-ord('A')+10Œ78   OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡3 (00000060-006A302EFFF6˜MOVE„-10(A6),D0100000064-006E0C36004100F9“CMP.Bƒ#65,-7(A6,D0)0000006A-00746D**BLT…L8:' ¥*’elsenum:=num*16+ord(num_str[i])-ord('0');79(0000006C-0078322EFFF4˜MOVE„-12(A6),D100000070-007C48C1EXT.LƒD100000072-007EE981ASL.Lƒ#4,D1,00000074-0080143600F9˜MOVE.B‚-7(A6,D0),D200000078-00844882EXT…D20000007A-008648C2EXT.LƒD20000007C-0088D282ADD.LƒD2,D1)0000007E-008A048100000037”SUB.Lƒ#55,D1(00000084-00903D41FFF4˜MOVE„D1,-12(A6)00000088-009460**BRA…L90000008A-0098˜L8ˆEQU…*(0000008A-0098302EFFF4˜MOVE„-12(A6),D00000008E-009C48C0EXT.LƒD000000090-009EE980ASL.Lƒ#4,D0(00000092-00A0322EFFF6˜MOVE„-10(A6),D1,00000096-00A4143610F9˜MOVE.B‚-7(A6,D1),D20000009A-00A84882EXT…D20000009C-00AA48C2EXT.LƒD20000009E-00ACD082ADD.LƒD2,D0)000000A0-00AE048000000030”SUB.Lƒ#48,D0(000000A6-00B43D40FFF4˜MOVE„D0,-12(A6)¥*i:=i+1½80 ¥*Œend;Æ81000000AA-00B8˜L9ˆEQU…*(000000AA-00B8302EFFF6˜MOVE„-10(A6),D0000000AE-00BC48C0EXT.LƒD0 000000B0-00BE5280ADDQ.L‚#1,D0(000000B2-00C03D40FFF6˜MOVE„D0,-10(A6)000000B6-00C46000****˜BRA…L4#¥*‰ifi<=length(num_str)then°82000000BA-00C8˜L5ˆEQU…*+000000BA-00C83F2EFFF6˜MOVE„-10(A6),-(A7)&000000BE-00CC41EEFFF8˜LEA…-8(A6),A0.000000C2-00D04EAB****˜JSR….PLODS-.PLJSR(A3).000000C6-00D44EAB****˜JSR….PSLEN-.PLJSR(A3) 000000CA-00D8B05FCMP…(A7)+,D0000000CC-00DA6D**BLT…L10 ¥*ŒbeginÅ83¥*error:=TRUE;¹84/000000CE-00DE1D7C0001FFF3“MOVE.B‚#1,-13(A6)0¥*write('Invalidhexnumber-reenter>');85$000000D4-00E4486DFFF0˜PEA…-16(A5)¯XREF„8:.PLDCS„.000000D8-00E84EAB****˜JSR….PLDCS-.PLJSR(A3)000000DC-00EC001FDC.W„314000000DE-00EE¢DC.B„'Invalidhexnumber-reenter>'000000FE-010E4267CLR…-(A7)¯XREF„8:.PWRS…-00000100-01104EAB****˜JSR….PWRS-.PLJSR(A3)¥*p$force(output)·86 ¥*ŒendÇ87#00000104-01142F08MOVE.L‚A0,-(A7)00000106-01164E93JSR…(A3)   OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡4 #00000108-0118********™DC.L„USER1-* ¥*†endÍ88¥*ƒuntilerror=FALSE;¿890000010C-011C˜L10‡EQU…*&0000010C-011C4A2EFFF3˜TST.Bƒ-13(A6)00000110-01206600****˜BNE…L3¥*ƒhex_in:=numÆ90¥*Ö91 ¥*end;Ò92000000114-01243D6EFFF40008“MOVE„-12(A6),8(A6)0000011A-012A4E5EUNLK„A60000011C-012C4E75RTS† ¥*{$E}Ò93%¥*procedurehex_out(num:word);¶94¥*Ö95¥*varÓ96¥*ƒnum_str:string[4];¿97¥*ƒi,j…:integer;Á98¥*Ö99 ¥*beginÐ100¥*Õ101¥*ƒnum_str:='„';À10200000120USER5…EQUƒ* 00000120†4E56FFEE˜LINK„A6,#-18!00000124†41EEFFFA˜LEA…-6(A6),A0¯XREF„8:.PSTCV„)00000128†4EAB****˜JSR….PSTCV-.PLJSR(A3)0000012C†0006DC.W„60000012E†0004DC.W„400000130§DC.B„'„'¥*ƒfori:=4downto1do½103.00000134†2D7C00000004FFF2MOVE.L‚#4,-14(A6) ¥*†beginÊ104¥*‰j:=nummod16;¼1050000013CL13‡EQU…*!0000013C†302E0008˜MOVE„8(A6),D000000140†48C0EXT.LƒD000000142†7210MOVEQƒ#16,D1¯XREF„8:.PMODJ„)00000144†4EAB****˜JSR….PMODJ-.PLJSR(A3)00000148†0000DC.W„0%0000014A†2D40FFF6˜MOVE.L‚D0,-10(A6)¥*‰num:=numdiv16;º106!0000014E†342E0008˜MOVE„8(A6),D200000152†48C2EXT.LƒD200000154†2601MOVE.L‚D1,D3¯XREF„8:.PDVJ…(00000156†4EAB****˜JSR….PDVJ-.PLJSR(A3)0000015A†0002DC.W„2!0000015C†3D420008˜MOVE„D2,8(A6)¥*‰ifj>=10Â1072¥*Œthennum_str[i]:=chr(j-10+ord('A'))ž108$00000160†0C800000000A”CMP.Lƒ#10,D000000166†6D**BLT…L16-¥*Œelsenum_str[i]:=chr(j+ord('0'))£109(00000168-016A382EFFF4˜MOVE„-12(A6),D4)0000016C-016E068000000037”ADD.Lƒ#55,D0   OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡5 ,00000172-01741D8040FB˜MOVE.B‚D0,-5(A6,D4)00000176-017860**BRA…L17 ¥*†end;Ë11000000178-017C˜L16‡EQU…*(00000178-017C302EFFF4˜MOVE„-12(A6),D0*0000017C-0180222EFFF6˜MOVE.L‚-10(A6),D1)00000180-0184068100000030”ADD.Lƒ#48,D1,00000186-018A1D8100FB˜MOVE.B‚D1,-5(A6,D0)0000018A-018E˜L17‡EQU…**0000018A-018E53AEFFF2˜SUBQ.L‚#1,-14(A6)0000018E-0192˜L14‡EQU…*20000018E-01920CAE00000001' FFF2CMP.Lƒ#1,-14(A6)00000196-019A6C**BGE…L13¥*ƒwriteln(num_str)Á111 ¥*end;Ñ11200000198-019E˜L15‡EQU…*$00000198-019E486DFFF0˜PEA…-16(A5)&0000019C-01A241EEFFFA˜LEA…-6(A6),A0.000001A0-01A64EAB****˜JSR….PLODS-.PLJSR(A3)000001A4-01AA4267CLR…-(A7)-000001A6-01AC4EAB****˜JSR….PWRS-.PLJSR(A3)¯XREF„8:.PWLN…-000001AA-01B04EAB****˜JSR….PWLN-.PLJSR(A3)000001AE-01B44E5EUNLK„A6#000001B0-01B6205FMOVE.L‚(A7)+,A0 000001B2-01B8548FADDQ.L‚#2,A7000001B4-01BA4ED0JMP…(A0) ¥*{$E}Ñ113¥*procedureenter_command;½114¥*Õ115 ¥*varÒ116¥*ƒstatus„:word;Á117¥*ƒi‰:integer;¾118¥*Õ119 ¥*beginÐ120 ¥*ƒwithinit_blk.cmd_adr^do¹121000001B6USER6…EQUƒ* 000001B6†4E56FFF2˜LINK„A6,#-14/000001BA†2D6DFFAEFFF6“MOVE.L‚-82(A5),-10(A6) ¥*„beginÌ122¥*†casecmd_char[1]of¼123%000001C0†102DFFC2˜MOVE.B‚-62(A5),D0000001C4†60**BRA…T1¥*‰'W':code:=WAIT;¹124000001C6-01C8˜L26‡EQU…**000001C6-01C8206EFFF6˜MOVE.L‚-10(A6),A0"000001CA-01CC42680002˜CLR…2(A0)¥*‰'O':code:=OPEN;¹125000001CE-01D060**BRA…L25000001D0-01D4˜L27‡EQU…**000001D0-01D4206EFFF6˜MOVE.L‚-10(A6),A0+000001D4-01D8317C00010002“MOVE„#1,2(A0)¥*‰'C':code:=CLOSE;¸126000001DA-01DE60**BRA…L25000001DC-01E2˜L28‡EQU…**000001DC-01E2206EFFF6˜MOVE.L‚-10(A6),A0+000001E0-01E6317C00020002“MOVE„#2,2(A0)   OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡6 ¥*‰'E':code:=ENABLE;·127000001E6-01EC60**BRA…L25000001E8-01F0˜L29‡EQU…**000001E8-01F0206EFFF6˜MOVE.L‚-10(A6),A0+000001EC-01F4317C00060002“MOVE„#6,2(A0)¥*‰'D':code:=DISABLE;¶128000001F2-01FA60**BRA…L25000001F4-01FE˜L30‡EQU…**000001F4-01FE206EFFF6˜MOVE.L‚-10(A6),A0+000001F8-0202317C00070002“MOVE„#7,2(A0)¥*‰'S':code:=STATº129 ¥*†end;Ë130000001FE-020860**BRA…L2500000200-020C˜L31‡EQU…**00000200-020C206EFFF6˜MOVE.L‚-10(A6),A0+00000204-0210317C00050002“MOVE„#5,2(A0)0000020A-021660**BRA…L250000020C-021A˜L24‡EQU…*&0000020C-021A3F3C0001˜MOVE„#1,-(A7)00000210-021E4E4ETRAP„#1400000212-02200003DC.W„300000214-0222˜L23‡EQU…*00000222T1ˆEQU…* 00000222†0C000057˜CMP.Bƒ#87,D000000226†6E**BGT…L24&00000228-022A41FA000C˜LEA…12(PC),A0 0000022C-022E5688ADDQ.L‚#3,A0"0000022E-0230B018CMP.Bƒ(A0)+,D000000230-02326EFABGT…*-400000232-02346D**BLT…L2400000234-0238D0D0ADD…(A0),A000000236-023A4ED0JMP…(A0)00000238†0043DC.W„670000023A†FFA8DC.W„-880000023C†0044DC.W„680000023E†FFC0DC.W„-6400000240†0045DC.W„6900000242†FFAEDC.W„-8200000244†004FDC.W„7900000246†FF8EDC.W„-11400000248†0053DC.W„830000024A†FFC2DC.W„-620000024C†0057DC.W„870000024E†FF7ADC.W„-134¥*†ifcode<>WAITthen»13100000250L25‡EQU…*%00000250†206EFFF6˜MOVE.L‚-10(A6),A0!00000254†30280002˜MOVE„2(A0),D000000258†48C0EXT.LƒD00000025A†4A80TST.LƒD00000025C†67**BEQ…L32 ¥*ˆbeginÈ132+¥*Šwrite('Enterchannelmnemonic>');§133$0000025E-0260486DFFF0˜PEA…-16(A5).00000262-02644EAB****˜JSR….PLDCS-.PLJSR(A3)00000266-02680019DC.W„25.00000268-026A¢DC.B„'Enterchannelmnemonic>'   OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡7 00000282-02844267CLR…-(A7)-00000284-02864EAB****˜JSR….PWRS-.PLJSR(A3)¥*Šp$force(output);º134#00000288-028A2F08MOVE.L‚A0,-(A7)0000028A-028C4E93JSR…(A3)#0000028C-028E********™DC.L„USER1-*"¥*Šreadln(init_blk.mnemonic);°13500000290-02927004MOVEQƒ#4,D0'00000292-029443EDFF9E˜LEA…-98(A5),A1&00000296-029841EDFFF8˜LEA…-8(A5),A0¯XREF„8:.PRDV…-0000029A-029C4EAB****˜JSR….PRDV-.PLJSR(A3)-0000029E-02A04EAB****˜JSR….PRLN-.PLJSR(A3)¥*Šifcode<>OPEN¼136&¥*then”{AllcommandsexceptOPEN}–137*000002A2-02A4206EFFF6˜MOVE.L‚-10(A6),A0&000002A6-02A830280002˜MOVE„2(A0),D0000002AA-02AC48C0EXT.LƒD0(000002AC-02AE0C8000000001”CM( P.Lƒ#1,D0000002B2-02B467**BEQ…L33 ¥*beginÀ1380¥*“write('Enterchannelsmaskinhex.>');™139$000002B4-02B8486DFFF0˜PEA…-16(A5).000002B8-02BC4EAB****˜JSR….PLDCS-.PLJSR(A3)000002BC-02C0001EDC.W„303000002BE-02C2¢DC.B„'Enterchannelsmaskinhex.>'000002DC-02E04267CLR…-(A7)-000002DE-02E24EAB****˜JSR….PWRS-.PLJSR(A3)¥*“p$force(output);±140#000002E2-02E62F08MOVE.L‚A0,-(A7)000002E4-02E84E93JSR…(A3)#000002E6-02EA********™DC.L„USER1-*¥*“chan_mask:=hex_in¯141 ¥*endÂ142*000002EA-02EE206EFFF6˜MOVE.L‚-10(A6),A0"000002EE-02F248680004˜PEA…4(A0) 000002F2-02F6558FSUBQ.L‚#2,A7"000002F4-02F86100****˜BSR…USER4!000002F8-02FC301FMOVE„(A7)+,D0#000002FA-02FE205FMOVE.L‚(A7)+,A0 000002FC-03003080MOVE„D0,(A0)¥*else”{OPENcommand}¢143000002FE-030260**BRA…L34 ¥*beginÀ144¥*Õ1455¥*“write('Enternumberofchannelstoopen>');”14600000300-0306˜L33‡EQU…*$00000300-0306486DFFF0˜PEA…-16(A5).00000304-030A4EAB****˜JSR….PLDCS-.PLJSR(A3)00000308-030E0023DC.W„3580000030A-0310¢DC.B„'Enternumberofchannelstoopen>'0000032E-03344267CLR…-(A7)-00000330-03364EAB****˜JSR….PWRS-.PLJSR(A3)¥*“p$force(output);±147#00000334-033A2F08MOVE.L‚A0,-(A7)00000336-033C4E93JSR…(A3)#00000338-033E********™DC.L„USER1-*   OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡8 ¥*“readln(chan_cnt);°148*0000033C-0342206EFFF6˜MOVE.L‚-10(A6),A0%00000340-034643E80004˜LEA…4(A0),A1&00000344-034A41EDFFF8˜LEA…-8(A5),A0¯XREF„8:.PRDI…-00000348-034E4EAB****˜JSR….PRDI-.PLJSR(A3)-0000034C-03524EAB****˜JSR….PRLN-.PLJSR(A3)¥*Õ149$¥*“fori:=0tochan_cnt-1do¥150%00000350-035642AEFFFA˜CLR.Lƒ-6(A6)*00000354-035A206EFFF6˜MOVE.L‚-10(A6),A0&00000358-035E30280004˜MOVE„4(A0),D00000035C-036248C0EXT.LƒD0 0000035E-03645380SUBQ.L‚#1,D0*00000360-03662D40FFF2˜MOVE.L‚D0,-14(A6)00000364-036A60**BRA…L36 ¥*–beginº151)¥*™write('Enterchannelnumber>');š15200000366-036E˜L35‡EQU…*$00000366-036E486DFFF0˜PEA…-16(A5).0000036A-03724EAB****˜JSR….PLDCS-.PLJSR(A3)0000036E-03760017DC.W„23,00000370-0378¢DC.B„'Enterchannelnumber>'00000388-03904267CLR…-(A7)-0000038A-03924EAB****˜JSR….PWRS-.PLJSR(A3)¥*™p$force(output);«153#0000038E-03962F08MOVE.L‚A0,-(A7)00000390-03984E93JSR…(A3)#00000392-039A********™DC.L„USER1-*¥*™readln(cdb[i].chan_no);¤154*00000396-039E206EFFF6˜MOVE.L‚-10(A6),A0)0000039A-03A2202EFFFA˜MOVE.L‚-6(A6),D00000039E-03A6E540ASL…#2,D0(000003A0-03A843F00006˜LEA…6(A0,D0),A1&000003A4-03AC41EDFFF8˜LEA…-8(A5),A0-000003A8-03B04EAB****˜JSR….PRDI-.PLJSR(A3)-000003AC-03B44EAB****˜JSR….PRLN-.PLJSR(A3)8¥*™write('Enterchannelconfigurationinhex.>');‹155$000003B0-03B8486DFFF0˜PEA…-16(A5).000003B4-03BC4EAB****˜JSR….PLDCS-.PLJSR(A3)000003B8-03C00026DC.W„38;000003BA-03C2¢DC.B„'Enterchannelconfigurationinhex.>'000003E0-03E84267CLR…-(A7)-000003E2-03EA4EAB****˜JSR….PWRS-.PLJSR(A3)¥*™p$force(output);«156#000003E6-03EE2F08MOVE.L‚A0,-(A7)000003E8-03F04E93JSR…(A3)#000003EA-03F2********™DC.L„USER1-*¥*™cdb[i].config:=hex_in¥157 ¥*–end¼158*000003EE-03F6206EFFF6˜MOVE.L‚-10(A6),A0)000003F2-03FA202EFFFA˜MOVE.L‚-6(A6),D0000003F6-03FEE540ASL…#2,D0%000003F8-040048700008˜PEA…8(A0,D0) 000003FC-0404558FSUBQ.L‚#2,A7"000003FE-04066100****˜BSR…USER4!00000402-040A301FMOVE„(A7)+,D0   OM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page‡9 #00000404-040C205FMOVE.L‚(A7)+,A0 00000406-040E3080MOVE„D0,(A0)¥*Œend‚{else}¾159)00000408-041052AEFFFA˜ADDQ.L‚#1,-6(A6)0000040C-041469**BVS…L370000040E-0418˜L36‡EQU…**0000040E-0418202EFFF2˜MOVE.L‚-14(A6),D0(00000412-041CB0AEFFFA˜CMP.Lƒ-6(A6),D0 00000416-04206C00****˜BGE…L35¥*ˆend;{if}Å1602¥*†status:=send_command(init_blk,task_ID);( ¤1610000041A-0424˜L37‡EQU…*0000041A-0424˜L34‡EQU…*0000041A-0424˜L32‡EQU…* 0000041A-0424558FSUBQ.L‚#2,A7%0000041C-0426486DFF98˜PEA…-104(A5)$00000420-042A486DFFBC˜PEA…-68(A5)00000424-042E4E93JSR…(A3)#00000426-0430********™DC.L„USER3-**0000042A-0434206EFFF6˜MOVE.L‚-10(A6),A0#0000042E-0438309FMOVE„(A7)+,(A0)¥*†ifcode<>WAITÀ162 ¥*ˆthenÉ163&00000430-043A30280002˜MOVE„2(A0),D000000434-043E48C0EXT.LƒD000000436-04404A80TST.LƒD000000438-044267**BEQ…L38 ¥*‰beginÇ164¥*‹ifcode=STAT¼165 ¥*ŽthenÃ166&0000043A-044630280002˜MOVE„2(A0),D00000043E-044A48C0EXT.LƒD0(00000440-044C0C8000000005”CMP.Lƒ#5,D000000446-045266**BNE…L39 ¥*beginÀ167#¥*’write('ChannelStatus=');§168$00000448-0456486DFFF0˜PEA…-16(A5).0000044C-045A4EAB****˜JSR….PLDCS-.PLJSR(A3)00000450-045E0011DC.W„17&00000452-0460¢DC.B„'ChannelStatus='00000464-04724267CLR…-(A7)-00000466-04744EAB****˜JSR….PWRS-.PLJSR(A3)¥*’p$force(output);²169#0000046A-04782F08MOVE.L‚A0,-(A7)0000046C-047A4E93JSR…(A3)#0000046E-047C********™DC.L„USER1-*¥*’hex_out(chan_mask)±170 ¥*end;Á171*00000472-0480206EFFF6˜MOVE.L‚-10(A6),A0)00000476-04843F280004˜MOVE„4(A0),-(A7)"0000047A-04886100****˜BSR…USER5$¥*‹write('CommandStatusis');­1720000047E-048C˜L39‡EQU…*$0000047E-048C486DFFF0˜PEA…-16(A5).00000482-04904EAB****˜JSR….PLDCS-.PLJSR(A3)00000486-04940012DC.W„18'00000488-0496¢DC.B„'CommandStatusis'   PM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page†10 0000049A-04A84267CLR…-(A7)-0000049C-04AA4EAB****˜JSR….PWRS-.PLJSR(A3)¥*‹p$force(output);¹173#000004A0-04AE2F08MOVE.L‚A0,-(A7)000004A2-04B04E93JSR…(A3)#000004A4-04B2********™DC.L„USER1-*¥*‹hex_out(status)º174 ¥*‰endÉ175*000004A8-04B6206EFFF6˜MOVE.L‚-10(A6),A0#000004AC-04BA3F10MOVE„(A0),-(A7)"000004AE-04BC6100****˜BSR…USER5¥*„end‚{with}Æ176 ¥*end;Ñ177000004B2-04C0˜L38‡EQU…*000004B2-04C04E5EUNLK„A6000004B4-04C24E75RTS† ¥*{$E}Ñ178¥*begin‚{main}È179¥*Õ180¥*ƒwithinit_blkdoÂ181000004BC.PMAIN„EQUƒ*000004BC†0001DC.W„1000004BE†9EFC006E˜SUB…#110,A7000004C2†7401MOVEQƒ#1,D2000004C4†7205MOVEQƒ#5,D1000004C6†7000MOVEQƒ#0,D0"000004C8†41EDFFF0˜LEA…-16(A5),A0¯XREF„8:.PIFD…(000004CC†4EAB****˜JSR….PIFD-.PLJSR(A3)"000004D0†41EDFFF0˜LEA…-16(A5),A0¯XREF„8:.PRWT…(000004D4†4EAB****˜JSR….PRWT-.PLJSR(A3)000004D8†7401MOVEQƒ#1,D2000004DA†7206MOVEQƒ#6,D1000004DC†7000MOVEQƒ#0,D0!000004DE†41EDFFF8˜LEA…-8(A5),A0(000004E2†4EAB****˜JSR….PIFD-.PLJSR(A3)!000004E6†41EDFFF8˜LEA…-8(A5),A0¯XREF„8:.PRST…(000004EA†4EAB****˜JSR….PRST-.PLJSR(A3) ¥*†beginÊ182¥*‰code:=7;Â183+000004EE†1B7C0007FF9A“MOVE.B‚#7,-102(A5)¥*‰sub_code:=0;¾184"000004F4†422DFF9B˜CLR.Bƒ-101(A5)¥*‰new(cmd_adr)¿185 ¥*†end;Ë186"000004F8†41EDFFAE˜LEA…-82(A5),A0¯XREF„8:.PNEW…(000004FC†4EAB****˜JSR….PNEW-.PLJSR(A3)00000500†0026DC.W„38¥*Õ1871¥*ƒwrite('Enternumberoftasks(1-26)>');¨18800000502†486DFFF0˜PEA…-16(A5))00000506†4EAB****˜JSR….PLDCS-.PLJSR(A3)0000050A†001FDC.W„31/0000050C§DC.B„'Enternumberoftasks(1-26)>'   PM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page†11 0000052C†4267CLR…-(A7)(0000052E†4EAB****˜JSR….PWRS-.PLJSR(A3)¥*ƒp$force(output);Á18900000532†2F08MOVE.L‚A0,-(A7)00000534†4E93JSR…(A3)00000536†********™DC.L„USER1-*¥*ƒreadln(task_cnt);¿190"0000053A†43EDFFB4˜LEA…-76(A5),A1!0000053E†41EDFFF8˜LEA…-8(A5),A0¯XREF„8:.PRDJ…(00000542†4EAB****˜JSR….PRDJ-.PLJSR(A3)(00000546†4EAB****˜JSR….PRLN-.PLJSR(A3)¥*Õ191¥*ƒtask_ID:='INPx';À192"0000054A†41EDFFBC˜LEA…-68(A5),A0)0000054E†4EAB****˜JSR….PSTCV-.PLJSR(A3)00000552†0004DC.W„400000554§DC.B„'INPx'¥*Õ193¥*ƒclone_tasks(task_cnt);»194(00000558†2F2DFFB4˜MOVE.L‚-76(A5),-(A7)0000055C†4E93JSR…(A3)0000055E†********™DC.L„USER2-*¥*Õ195¥*) ƒwhiletruedoÅ19600000562L42‡EQU…* ¥*†fori:=1totask_cntdo¶197.00000562†2B7C00000001FFB8MOVE.L‚#1,-72(A5)00000056A†2B6DFFB4FF92“MOVE.L‚-76(A5),-110(A5)00000570†60**BRA…L45 ¥*‡repeatÈ198 ¥*‰beginÇ199.¥*Œtask_id[4]:=chr(ord('A')+i-1);¢20000000572-0574˜L44‡EQU…*00000572-0574˜L47‡EQU…**00000572-0574202DFFB8˜MOVE.L‚-72(A5),D0)00000576-0578068000000040”ADD.Lƒ#64,D0*0000057C-057E1B40FFBF˜MOVE.B‚D0,-65(A5)*¥*Œwriteln('**Task',task_ID,'**');¦201$00000580-0582486DFFF0˜PEA…-16(A5).00000584-05864EAB****˜JSR….PLDCS-.PLJSR(A3)00000588-058A0008DC.W„80000058A-058C¢DC.B„'**Task'00000592-05944267CLR…-(A7)-00000594-05964EAB****˜JSR….PWRS-.PLJSR(A3)#00000598-059A2F08MOVE.L‚A0,-(A7)-0000059A-059C2F2DFFBC˜MOVE.L‚-68(A5),-(A7)&0000059E-05A03F3C0004˜MOVE„#4,-(A7)&000005A2-05A43F3C0004˜MOVE„#4,-(A7)¯XREF„8:.PWRV…-000005A6-05A84EAB****˜JSR….PWRV-.PLJSR(A3)#000005AA-05AC2F08MOVE.L‚A0,-(A7)*000005AC-05AE3F3C2A00˜MOVE„#10752,-(A7)1000005B0-05B22F3C0003202A”MOVE.L‚#204842,-(A7)000005B6-05B84267CLR…-(A7)-000005B8-05BA4EAB****˜JSR….PWRS-.PLJSR(A3)-000005BC-05BE4EAB****˜JSR….PWLN-.PLJSR(A3)   PM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page†12 K¥*Šwrite('Command(O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait)>');‡202$000005C0-05C2486DFFF0˜PEA…-16(A5).000005C4-05C64EAB****˜JSR….PLDCS-.PLJSR(A3)000005C8-05CA0039DC.W„57N000005CA-05CC¢DC.B„'Command(O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait)>'00000604-06064267CLR…-(A7)-00000606-06084EAB****˜JSR….PWRS-.PLJSR(A3)¥*Œp$force(output);¸203#0000060A-060C2F08MOVE.L‚A0,-(A7)0000060C-060E4E93JSR…(A3)#0000060E-0610********™DC.L„USER1-*¥*Œreadln(cmd_char);·204 00000612-0614700AMOVEQƒ#10,D0'00000614-061643EDFFC0˜LEA…-64(A5),A1&00000618-061A41EDFFF8˜LEA…-8(A5),A0-0000061C-061E4EAB****˜JSR….PRDS-.PLJSR(A3)-00000620-06224EAB****˜JSR….PRLN-.PLJSR(A3)&¥*Œif(length(cmd_char)<>0)andª2051¥*(cmd_char[1]in['W','O','C','E','D','S'])œ206¥*then‚enter_command³207'00000624-062641EDFFC0˜LEA…-64(A5),A0.00000628-062A4EAB****˜JSR….PLODS-.PLJSR(A3).0000062C-062E4EAB****˜JSR….PSLEN-.PLJSR(A3)00000630-063248C0EXT.LƒD000000632-06344A80TST.LƒD000000634-063667**BEQ…L48*00000636-063A102DFFC2˜MOVE.B‚-62(A5),D0%0000063A-063E04000020˜SUB.Bƒ#32,D0/0000063E-0642223C00888038”MOVE.L‚#8945720,D1!00000644-06487400MOVEQ.L#0,D2%00000646-064A0C00003F˜CMP.Bƒ#63,D00000064A-064E6304BLS…*+60000064C-0650B000CMP.BƒD0,D00000064E-0652600CBRA…*+14%00000650-06540C000020˜CMP.Bƒ#32,D000000654-06586D04BLT…*+600000656-065A0101BTST„D0,D100000658-065C6002BRA…*+40000065A-065E0102BTST„D0,D20000065C-066067**BEQ…L48 ¥*‰endÉ208"0000065E-06646100****˜BSR…USER6"¥*‡untillength(cmd_char)=0³209 ¥*end.Ñ21000000662-0668˜L48‡EQU…*'00000662-066841EDFFC0˜LEA…-64(A5),A0.00000666-066C4EAB****˜JSR….PLODS-.PLJSR(A3).0000066A-06704EAB****˜JSR….PSLEN-.PLJSR(A3)0000066E-067448C0EXT.LƒD000000670-06764A80TST.LƒD0 00000672-06786600****˜BNE…L47*00000676-067C52ADFFB8˜ADDQ.L‚#1,-72(A5)0000067A-068069**BVS…L460000067C-0684˜L45‡EQU…*+0000067C-0684202DFF92˜MOVE.L‚-110(A5),D0)00000680-0688B0ADFFB8˜CMP.Lƒ-72(A5),D0 00000684-068C6C00****˜BGE…L44   PM68000PascalCompilerPhase2version‚2.30…INPTST‚.PO03/21/8310:23:14¢Page†13 00000688-0690˜L46‡EQU…* 00000688-06906000****˜BRA…L420000068C-0694˜L43‡EQU…*'0000068C-069441EDFFF0˜LEA…-16(A5),A0¯XREF„8:.PCLO…-00000690-06984EAB****˜JSR….PCLO-.PLJSR(A3)&00000694-069C41EDFFF8˜LEA…-8(A5),A0-00000698-06A04EAB****˜JSR….PCLO-.PLJSR(A3)0000069C-06A44267CLR…-(A7)0000069E-06A64E4ETRAP„#14000006A0-06A80004DC.W„4¯END"¥***Totalof1700bytesgenerated ) éé'D615 TESTAC AF66 TESTAC LF??TESTAC SAHH“¨TESTAC RO!!TESTAC LO2=/* =/*†TESTAC.AF=/*6=/* CHAIN TO ASSEMBLE ACO DRIVER TEST ROUTINE 'TESTAC'=/*=/IFC \1=ARG D615.TESTAC.LS=/ENDIF=/*,=ASM D615.TESTAC.SA,D615.TESTAC.RO,\1;MRZ=70=/*{ Included files are:=/*ƒ--none--=/*}=ENDééééééé.=/IFC \1=ARG D615.TESTAC.LL=/ENDIF=LINK ,D615.TESTAC.LO,\1;HMIX SEG SEG0:0INPUT D615.TESTAC.ROEND=END* ééééééé7B*„ThisisTESTAC,arelocatableprogramthatteststheACOdriver.*$*„Copyrighted1983byMotorola,Inc.E**********************************************************************B*‚ThisprogramsetsupfortaskACO1andverifiesitexists.Ifit;*‚doesitproceedswiththetest,ifnotittrystaskACO2./*‚Ifeithertaskismissing,itskipsthetest.éééééé* @I0QJYa<iLqPy5@‰>‘6™¡>©,±)¹AÁUÉ6ÑÙTáéKñVù1! V*:*‚Thisprogramperformsthefollowingtestsonthedriver:*9*ˆTEST1‚-‚individuallyopenseachchannel,outputstoit,-*’checksstatus,turnsitoff,checksstatus, *’andcloses.9*ˆTEST2‚-‚individuallyopenseachchannel,outputstoit,1*’checksstatus,continuesuntilallareon.Then,*’individuallyturnsoffeachchannel,checks0*’status,continuesuntilallareoff.Turnsall%*’channelsbackonforthenexttest.7*ˆTEST3‚-‚closesthechannels,OPERATORmustcheckthey *’turnedoff.4*ˆTEST4‚-‚opensallchannels,turnsallchannelson,-*’delays,turnsallchannelsoff,andcloses.9*ˆTEST5‚-‚individuallyopenseachchannel,commandspulse*’output,delays,andcloses.7*ˆTEST6‚-‚opensfourchannels,commandspulseoutputof3*’differentlengthstoeachsimultaneously,delays,*’closeschannels.;*ˆTEST7-ƒopenschanneltwowithqueueeventconfiguration,'*’pulsesoutput,waitsforqueueevent,)*’verifiesmessagesent,closeschannels.:*ˆTEST8‚-‚openschannelonewithwaitforwake-upconfig.,'*’pulsesoutput,waitsforwake-up,and*’closeschannels.:*ˆTEST9‚-‚trysoutputONwithchannelsclosedandverifies*’error.3*’trysoutputOFFwithchannelsclosedandverifies*’error./*’tryscheckingstatuswithchannelsclosedand*’verifieserror.,*’tryspulseoutputwithchannelsclosedand*’verifieserror.<*ˆTEST10-‚trysopeninginvalidchannelnumbersandverifies3*’errors.(ZEROchannels,morethaneightchannels,"*’channel#9,sametwochannels).:*ˆTEST11-‚openschannelandtrysinvalidcommands(0,6,*’7,>8)andverifieserrors.=*ˆTEST12-‚trysopeningchannelswhentheyarealreadyopened*’andverifieserror.*>*ˆIfitpassedthesetestsitreturnstothetoptosetupfor2*’taskACO2.IfthiswasfortaskACO2,itsetsup$*’totestbothtaskssimultaneously.7*ˆIFALLTESTSARESUCCESSFUL,printsmessageattesting0*’tothatfact.Ifanytestfails,ERRORmessage$*’isprintedandtestisterminated.*D********************************************************************‰PAGE*5IOADR0ƒEQU‡$F80000VM02basememmapI/Ochanaddress5IOADR1ƒEQU‡$FA0000VM03basememmapI/Ochanaddress7IOADR2ƒEQU‡$FE6000VME110basememmapI/Ochanaddress7IOADR3ƒEQU‡$F1C000VME/10basememmapI/Ochanaddress* ‰SECTIONƒ0*TEST…LEA‡STACK(PC),A7‰LEA‡INITIO(PC),A0.‰CLR.W…DUALFG-INITIO(A0)ƒcleardualtestflags‰CLR.W…DUALCK-INITIO(A0)**SETUPA.S.Q.*!‰MOVE.L„#31,D0Žstagecommandcode-‰LEA‡ASQBLOCK(PC),A0…stagecommandparameters.‰LEA‡TESTIRQ(PC),A1†initializesaddr.ofasync*‰MOVE.L„A1,ASQLA-ASQBLOCK(A0)‚servicertn.‰TRAP†#1 ‰BNE‡FAULT11*‰MOVE.L„#'ACO1',D0(TNAME„LEA‡INITIO(PC),A0‡SETUPTASKNAME‰MOVE.L„D0,ACOPAR-INITIO(A0)‰MOVE.L„D0,TMSG-INITIO(A0)*!TRYBTHƒLEA‡SMSG24(PC),A1‡spaceup‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1†again‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*.‰LEA‡SMSG1(PC),A1ˆoutputstartoftestmessage‰LEA‡EMSG1(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1‡spaceup‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)+‰MOVE.W„#CLSLNG,A1ŠINSURECHANNEL(S)CLOSED$‰MOVE.W„A1,CMDL-INITIO(A0)‚TOSTART.‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT16*‰PAGE* *…OPENTHECHANNELSINDIVIDUALLY*5TEST1„LEA‡SMSG2(PC),A1‡output'open&output'message‰LEA‡EMSG2(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)initializeparameters‰LEA‡INITIO(PC),A0*‰MOVE.W„#1,ONCMD1-INITIO(A0)'ON'bitmask,‰MOVE.W„#1,OFFCMD1-INITIO(A0)'OFF'bitmask2‰MOVE.W„#1,STATSHF-INITIO(A0)statusreq.bitmask+ é;OPNLP„MOVE.W„EVNTCNT(PC),D0†OPENCHANNEL(eventcountholds‰LEA‡INITIO(PC),A0‡channel#)+‰MOVE.W„D0,OPNCH-INITIO(A0)channeltoopen‰LEA‡OPNCMDS(PC),A1,‰MOVE.L„A1,CMDA-INITIO(A0)‚parameterstoCMR‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*+‰LEA‡INITIO(PC),A0‡OUTPUTTOCHANNELOPENED‰LEA‡ONCMD(PC),A1,‰MOVE.L„A1,CMDA-INITIO(A0)‚parameterstoCMR ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#500,A0500MS‰TRAP†#1 ‰BNE‡FAULT15*!‰LEA‡OPNLP(PC),A1ˆloopbackaddr.&‰LEA‡TEST1B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggleééééé*%TEST1BƒLEA‡INITIO(PC),A0‡CHECKSTATUS/‰MOVE.W„STATSHF(PC),D0†movechanneltocheckto1‰MOVE.W„D0,STAT-INITIO(A0)‚statusparameterblock‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT3*3‰MOVE.W„STAT(PC),D0‰doesstatuscheckwithbitthat"‰CMP.W…ONCMD1(PC),D0‡shouldbeon? ‰BNE‡FAULT4*#‰LEA‡INITIO(PC),A0‡TURNOFFCHANNEL‰LEA‡OFFCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT5*‰LEA‡INITIO(PC),A0‡CHECKSTATUS/‰MOVE.W„STATSHF(PC),D0†movechanneltocheckto1‰MOVE.W„D0,STAT-INITIO(A0)‚statusparameterblock‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT3*.‰MOVE.W„STAT(PC),D0‰doesstatuscheckshowbit#‰BNE‡FAULT4Žstillon?ifso,error.*#‰LEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST1B(PC),A1‡loopbackaddr.&‰LEA‡TEST1C(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST1CƒLEA‡INITIO(PC),A0>‰ASL.W…ONCMD1-INITIO(A0)ƒshift'ON'channelbitmaskoneplace/‰ASL.W…OFFCMD1-INITIO(A0)‚shift'OFF'ƒ"…"ƒ"„"„"0‰ASL.W…STATSHF-INITIO(A0)‚shiftstatus‚"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrementeventcounter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0done? ‰BMI‡OPNLP*‰PAGEé+ é*2*„OUTPUTTOCHANNELSSEQUENTIALLYUNTILALLAREON*5TEST2„LEA‡SMSG3(PC),A1‡output'outputtoall'message‰LEA‡EMSG3(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)initializeparameters‰LEA‡INITIO(PC),A06‰MOVE.W„#1,ONCMD1-INITIO(A0)‚bitmaskfor'ON'channel9‰MOVE.W„#1,STATSHF-INITIO(A0)bitmaskforstatuschannel)OPNLP2ƒMOVE.W„EVNTCNT(PC),D0†OPENCHANNEL‰LEA‡INITIO(PC),A0‰MOVE.W„D0,OPNCH-INITIO(A0)/‰LEA‡INITIO(PC),A0‡pointtoCMRparameterblock‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*+‰LEA‡INITIO(PC),A0‡OUTPUTTOCHANNELOPENED‰LEA‡ONCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#500,A0500MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP2(PC),A1‡loopbackaddr.&‰LEA‡TEST2A(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*1TEST2AƒLEA‡INITIO(PC),A0‡CHECKSTATUSOFCHANNELS‰MOVE.W„STATSHF(PC),D0‰MOVE.W„D0,STAT-INITIO(A0)‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT3*&‰MOVE.W„STAT(PC),D0‰doesstatuscheck?‰CMP.W…STATSHF(PC),D0 ‰BNE‡FAULT4*"‰LEA‡TEST2A(PC),A1‡loopbackaddr.&‰LEA‡TEST2B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST2BƒLEA‡INITIO(PC),A0>‰ASL.W…ONCMD1-INITIO(A0)ƒshift'ON'channelbitmaskoneplace‰ORI‡#$10,CCRŒsetXbit/‰ROXL.W„STATSHF-INITIO(A0)‚addstatusƒ"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrementeventcounter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0done? ‰BMI‡OPNLP2*7TEST2CƒLEA‡SMSG39(PC),A1‡output'turnoffseq.'message‰LEA‡EMSG39(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)initializeparameters‰LEA‡INITIO(PC),A08‰MOVE.W„#1,OFFCMD1-INITIO(A0)‚bitmaskfor'OFF'channel9‰MOVE.W„#1,STATSHF-INITIO(A0)bitmaskforstatuschannel*)OPNLP3ƒLEA‡INITIO(PC),A0‡TURNOFFCHANNEL‰LEA‡OFFCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT5*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#500,A0500MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP3(PC),A1‡loopbackaddr.&‰LEA‡TEST2D(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*0TEST2DƒLEA‡INITIO(PC),A0‡CHECKSTATUSOFCHANNEL‰MOVE.W„STATSHF(PC),D0‰MOVE.W„D0,STAT-INITIO(A0)‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT3*&‰MOVE.W„STAT(PC),D0‰doesstatuscheck? ‰BNE‡FAULT4*"‰LEA‡TEST2D(PC),A1‡loopbackaddr.&‰LEA‡TEST2E(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST2EƒLEA‡INITIO(PC),A0@‰ASL.W…OFFCMD1-INITIO(A0)‚shift'OFF'channelbitmaskoneplace0‰ASL.W…STATSHF-INITIO(A0)‚shiftstatus‚"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrementeventcounter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0done? ‰BMI‡OPNLP3*+TEST2FƒLEA‡INITIO(PC),A0‡OUTPUTTOCHANNELS‰LEA‡ONCMDA(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST2F(PC),A1‡loopbackaddr.%‰LEA‡TEST3(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle, **%**************************************ƒCLOSETEST–*%**************************************-TEST3„LEA‡SMSG4(PC),A1‡output'close'message‰LEA‡EMSG4(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*)TEST3AƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST3A(PC),A1‡loopbackaddr.%‰LEA‡TEST4(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle*‰PAGE$*„TURNONALLOUTPUTS,THENTURNOFF*9TEST4„LEA‡SMSG5(PC),A1‡output'turnon,turnoff'message‰LEA‡EMSG5(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15**TEST4AƒLEA‡INITIO(PC),A0‡OPENALLCHANNELS/‰LEA‡OPNCMD(PC),A1‡pointtoCMRparameterblock‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*,‰LEA‡INITIO(PC),A0‡OUTPUTTOCHANNELSOPENED‰LEA‡ONCMDA(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*ééé0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST4A(PC),A1‡loopbackaddr.&‰LEA‡TEST4B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle**TEST4BƒLEA‡INITIO(PC),A0‡TURNOFFCHANNELS‰LEA‡OFFCMDA(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT5*#‰LEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST4B(PC),A1‡loopbackaddr.%‰LEA‡TEST5(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle*‰PAGE*„PULSEEACHOUTPUTINTURN*2TEST5„LEA‡SMSG6(PC),A1‡output'pulseeach'message‰LEA‡EMSG6(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0‰CLR.W…0(A0)initializeevntcnt)OPNLP4ƒMOVE.W„EVNTCNT(PC),D0†OPENCHANNEL/‰LEA‡INITIO(PC),A0‡pointtoCMRparameterblock+‰MOVE.W„D0,OPNCH-INITIO(A0)channeltoopen,‰MOVE.W„D0,PLSO1-INITIO(A0)channeltopulse‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*‰LEA‡INITIO(PC),A0‰LEA‡PLSO(PC),A1‰PULSEOUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT10*é, é0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP4(PC),A1‡loopbackaddr.&‰LEA‡TEST5A(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*)TEST5AƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST5A(PC),A1‡loopbackaddr.&‰LEA‡TEST5B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST5BƒLEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrementeventcounter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0done? ‰BMI‡OPNLP4*‰PAGE#*„PULSEFOUROUTPUTSSIMULTANEOUSLY*6TEST6„LEA‡SMSG32(PC),A1†output'pulsesimult.'message‰LEA‡EMSG32(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1500,A0Œ1500MS‰TRAP†#1 ‰BNE‡FAULT15*&TEST6AƒLEA‡INITIO(PC),A0‡OPENCHANNELS‰LEA‡OPNCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*‰LEA‡INITIO(PC),A0‰LEA‡PLSTWO(PC),A1‰PULSEOUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#PLSTLG,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT10*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#500,A0500MS‰TRAP†#1 ‰BNE‡FAULT15*éé"‰LEA‡TEST6A(PC),A1‡loopbackaddr.&‰LEA‡TEST6B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST6BƒMOVE.L„#21,D0ŽDELAY‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*)TEST6CƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST6C(PC),A1‡loopbackaddr.%‰LEA‡TEST7(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle*‰PAGE+*„PULSEOUTPUTTWOANDGENERATEQUEUEEVENT*6TEST7„LEA‡SMSG7(PC),A1‡output'pulseoutput2'message‰LEA‡EMSG7(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST7AƒLEA‡RCVBUF(PC),A0‡ensureRCVBUFzeroedout‰MOVE.L„#0,0(A0)‰MOVE.L„#0,4(A0)‰MOVE.L„#0,8(A0)*‰LEA‡INITIO(PC),A09‰MOVE.W„#0,OPNCNF-INITIO(A0)setupconfig.(queueevent)‰MOVE.W„#2,D0OPENCHANNELTWO+‰MOVE.W„D0,OPNCH-INITIO(A0)‚channeltoopen,‰MOVE.W„D0,PLSO1-INITIO(A0)‚channeltopulse‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*‰LEA‡INITIO(PC),A0‰LEA‡PLSO(PC),A1‰PULSEOUTPUTéé- é‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT10*+WAITQ„MOVE.L„#36,D0Žrequestwaitforevent.$‰TRAP†#1’tobeissuedbyACOdriver. ‰BNE‡FAULT13*4‰MOVE.L„RCVBUF(PC),D0‡verifymessagereturnedbyASQ4‰CMP.L…#$0C010002,D0‡$0C01 ‰BNE‡FAULT6‰MOVE.L„RCVBUF+4(PC),D0‰CMP.L…ACOPAR(PC),D0‡ACO-ID ‰BNE‡FAULT6‰MOVE.L„RCVBUF+8(PC),D0,‰AND.L…#$FFFFFF00,D0‡maskoffloworderbyte0‰CMP.L…#IOADR0,D0ŠVM02memorymappedI/Oaddress ‰BEQ.S…TEST710‰CMP.L…#IOADR1,D0ŠVM03memorymappedI/Oaddress ‰BEQ.S…TEST722‰CMP.L…#IOADR2,D0ŠVME110memorymappedI/Oaddress ‰BEQ.S…TEST732‰CMP.L…#IOADR3,D0ŠVME/10memorymappedI/Oaddress ‰BNE‡FAULT6*‰LEA‡SMSG43(PC),A1‰LEA‡EMSG43(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TEST74ééééTEST71ƒLEA‡SMSG40(PC),A1‰LEA‡EMSG40(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TEST74TEST72ƒLEA‡SMSG41(PC),A1‰LEA‡EMSG41(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TEST74TEST73ƒLEA‡SMSG42(PC),A1‰LEA‡EMSG42(PC),A2 ‰BSR‡MSGOUT2TEST74ƒLEA‡SMSG38(PC),A1‡output'asqverified'msg‰LEA‡EMSG38(PC),A2 ‰BSR‡MSGOUT*"‰LEA‡TEST7A(PC),A1‡loopbackaddr.&‰LEA‡TEST7B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*)TEST7BƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST7B(PC),A1‡loopbackaddr.&‰LEA‡TEST7C(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*6TEST7CƒMOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰PAGE'*…PULSEOUTPUTONEANDGENERATEWAKE-UP3TEST8„LEA‡SMSG8(PC),A1‡output'pulseled1'message‰LEA‡EMSG8(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST8AƒLEA‡INITIO(PC),A0‡pointtoCMRpara.block5‰MOVE.W„#1,OPNCNF-INITIO(A0)setupconfig.(wake-up)‰MOVE.W„#1,D0OPENCHANNELONE+‰MOVE.W„D0,OPNCH-INITIO(A0)‚channeltoopen,‰MOVE.W„D0,PLSO1-INITIO(A0)‚channeltopulse‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*‰LEA‡INITIO(PC),A0é- é‰LEA‡PLSO(PC),A1‰PULSEOUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT10*-WAITW„MOVE.L„#19,D0Žrequestwaitforwake-up.$‰TRAP†#1’tobeissuedbyACOdriver. ‰BNE‡FAULT130‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST8A(PC),A1‡loopbackaddr.&‰LEA‡TEST8B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*)TEST8BƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST8B(PC),A1‡loopbackaddr.&‰LEA‡TEST8C(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*6TEST8CƒLEA‡INITIO(PC),A0‡restoredefaultconfiguration ‰MOVE.W„#$8000,OPNCNF-INITIO(A0)2‰MOVE.W„#0,OPNCH-INITIO(A0)restorechannelselect1‰MOVE.W„#1,STAT-INITIO(A0)‚restorestatuschannel3‰MOVE.W„#1,OFFCMD1-INITIO(A0)‚restoreoffcmdchan.*‰PAGE#*„TRYCOMMANDSWITHCHANNELSCLOSED7TEST9„LEA‡SMSG9(PC),A1‡output'trywithclosed'message‰LEA‡EMSG9(PC),A2 ‰BSR‡MSGOUT*ééé0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST9AƒLEA‡INITIO(PC),A0‡OUTPUTTOCLOSEDCHANNEL‰LEA‡ONCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1)‰MOVE.W„ONCMD(PC),D0ˆreadreturnedstatus(‰CMP.W…#$F2,D0verifycorrecterrorcode ‰BNE‡FAULT2 ‰LEA‡SMSG12(PC),A1‡outputokmsg‰LEA‡EMSG12(PC),A2 ‰BSR‡MSGOUT*#‰LEA‡INITIO(PC),A0‡TURNOFFCHANNEL‰LEA‡OFFCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„OFFCMD(PC),D0‡readreturnedstatus(‰CMP.W…#$F2,D0verifycorrecterrorcode ‰BNE‡FAULT5‰LEA‡SMSG14(PC),A1‡offokmsg‰LEA‡EMSG14(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‡CHECKSTATUS‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1+‰MOVE.W„STATCMD(PC),D0†readreturnedstatus(‰CMP.W…#$F2,D0verifycorrecterrorcode ‰BNE‡FAULT3ééé. é ‰LEA‡SMSG16(PC),A1‡statusokmsg‰LEA‡EMSG16(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‰LEA‡PLSO(PC),A1‰PULSEOUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1(‰MOVE.W„PLSO(PC),D0‰readreturnedstatus(‰CMP.W…#$F6,D0verifycorrecterrorcode ‰BNE‡FAULT10*"‰LEA‡TEST9A(PC),A1‡loopbackaddr.&‰LEA‡TEST9B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*%TEST9BƒLEA‡SMSG18(PC),A1‡pulseokmsg‰LEA‡EMSG18(PC),A2 ‰BSR‡MSGOUT*‰PAGE*ƒTRYTOOPENINVALIDCHANNELS6TEST10ƒLEA‡SMSG11(PC),A1‡output'tryinvalidchannels'‰LEA‡EMSG11(PC),A2 ‰BSR‡MSGOUT0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*3TEST10A‚LEA‡INITIO(PC),A0‡TRYTOOPENZEROCHANNELS‰LEA‡OPNCH0(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNCHL,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1%‰MOVE.W„OPNCH0(PC),D0‡readcmdstatus‰CMP.W…#$F7,D0 ‰BNE‡FAULT7*3‰LEA‡INITIO(PC),A0‡TRYTOOPENMORETHAN8CHANNELS‰LEA‡OPNMOR(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNML,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1%‰MOVE.W„OPNMOR(PC),D0‡readcmdstatus‰CMP.W…#$F7,D0 ‰BNE‡FAULT7*,‰LEA‡INITIO(PC),A0‡TRYTOOPENCHANNEL#>8‰LEA‡OPNCH9(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNC9L,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1%‰MOVE.W„OPNCH9(PC),D0‡readcmdstatus‰CMP.W…#$F6,D0 ‰BNE‡FAULT7*éé0‰LEA‡INITIO(PC),A0‡TRYTOOPENSAMETWOCHANNELS‰LEA‡OPNTW(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNTL,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1$‰MOVE.W„OPNTW(PC),D0ˆreadcmdstatus‰CMP.W…#$FE,D0 ‰BNE‡FAULT7*#‰LEA‡TEST10A(PC),A1†loopbackaddr.'‰LEA‡TEST10B(PC),A2†continueonforward‰BRA‡FLOPtestfortoggle*6TEST10B‚LEA‡SMSG36(PC),A1‡output'invalidchannelsok'‰LEA‡EMSG36(PC),A2 ‰BSR‡MSGOUT*‰PAGE*„TRYTOUSEINVALIDCOMMANDS*2TEST11ƒLEA‡SMSG25(PC),A1‡output'tryinvalidcmds'‰LEA‡EMSG25(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*&TEST11A‚LEA‡INITIO(PC),A0‡OPENCHANNEL‰MOVE.W„#1,OPNCH-INITIO(A0)‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*$‰LEA‡INITIO(PC),A0‡INVALIDCOMMAND0‰LEA‡INVCM0(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#4,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„INVCM0(PC),D0‡readreturnedstatus‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*$‰LEA‡INITIO(PC),A0‡INVALIDCOMMAND6‰LEA‡INVCM6(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#4,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„INVCM6(PC),D0‡readreturnedstatus‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*$‰LEA‡INITIO(PC),A0‡INVALIDCOMMAND7‰LEA‡INVCM7(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#4,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„INVCM7(PC),D0‡readreturnedstatus‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*&‰LEA‡INITIO(PC),A0‡INVALIDCOMMAND>8‰LEA‡INVCM9(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#4,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„INVCM9(PC),D. 0‡readreturnedstatus‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*#‰LEA‡TEST11A(PC),A1†loopbackaddr.'‰LEA‡TEST11B(PC),A2†continueonforward‰BRA‡FLOPtestfortoggle*-TEST11B‚LEA‡SMSG26(PC),A1‡invalidcmdsokmsg‰LEA‡EMSG26(PC),A2 ‰BSR‡MSGOUT*‰PAGE*„TRYOPENANDALREADYOPENED9TEST12ƒLEA‡SMSG20(PC),A1†output'trywithopened'message‰LEA‡EMSG20(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*6TEST12A‚LEA‡INITIO(PC),A0‡pointtoCMRparameterblock(‰MOVE.W„#0,OPNCH-INITIO(A0)OPENCHANNEL‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*/‰LEA‡INITIO(PC),A0‡pointtoCMRparameterblock‰LEA‡OPNCMDS(PC),A1)‰MOVE.L„A1,CMDA-INITIO(A0)‚TRYOPENagain‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1+‰MOVE.W„OPNCMDS(PC),D0‡readreturnedstatus‰CMP.W…#$FE,D0 ‰BNE.S…FAULT1*#‰LEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*#‰LEA‡TEST12A(PC),A1†loopbackaddr.%‰LEA‡TESTC(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle*1*************************************************éé*„TESTCOMPLETED*1************************************************* TESTC„LEA‡SMSG24(PC),A1‡spaceup‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUTéééééé/ é*1‰LEA‡SMSG23(PC),A1†output'testcomplete'message‰LEA‡EMSG23(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1†spaceup‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*#NEXT…MOVE.W„DUALFG(PC),D0‡flagset? ‰BNE‡TERM.NEXTA„MOVE.L„ACOPAR(PC),D0‡tryforsecondtask‰CMP.L…#'ACO1',D0‰BNE‡TERMAdone‰MOVE.L„#'ACO2',D0‰BRA‡TNAMEsetupsecondtask*‰PAGE*#FAULT1ƒLEA‡SMSG22(PC),A1‡openerror‰LEA‡EMSG22(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT2ƒLEA‡SMSG13(PC),A1‡outputerror‰LEA‡EMSG13(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT3ƒLEA‡SMSG17(PC),A1‡statuserror‰LEA‡EMSG17(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM+FAULT4ƒLEA‡SMSG28(PC),A1‡statuscheckerror‰LEA‡EMSG28(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM"FAULT5ƒLEA‡SMSG15(PC),A1‡offerror‰LEA‡EMSG15(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM*FAULT6ƒLEA‡SMSG10(PC),A1‡ASQmessageerror‰LEA‡EMSG10(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM.FAULT7ƒLEA‡SMSG21(PC),A1‡invalidchannelerror‰LEA‡EMSG21(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM$FAULT8ƒLEA‡SMSG33(PC),A1‡closeerror‰LEA‡EMSG33(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM.FAULT9ƒLEA‡SMSG27(PC),A1‡invalidcmderrormsg‰LEA‡EMSG27(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT10‚LEA‡SMSG19(PC),A1‡pulseerror‰LEA‡EMSG19(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM#FAULT11‚LEA‡SMSG30(PC),A1‡ASQerror‰LEA‡EMSG30(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TERM#FAULT12‚LEA‡SMSG29(PC),A1‡ASQerror‰LEA‡EMSG29(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM6FAULT13‚LEA‡SMSG31(PC),A1‡WAKE-UPorQUEUEEVENTerror‰LEA‡EMSG31(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM2FAULT14‚LEA‡SMSG34(PC),A1‡IOS(trap#2)callerror‰LEA‡EMSG34(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM*FAULT15‚LEA‡SMSG35(PC),A1‡calldelayerror‰LEA‡EMSG35(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM/FAULT16‚LEA‡SMSG37(PC),A1‡non-existanttaskmsg‰LEA‡EMSG37(PC),A2 ‰BSR.S…MSGOUT(‰LEA‡DUALFG(PC),A0‡setflagtoeliminate‰ADD.W…#1,(A0)dualtest ‰BRA‡NEXTA**„DE-ACTIVATESELF*0TERMA„LEA‡INITIO(PC),A0‡testfordualboardtest‰TST.W…DUALFG-INITIO(A0) ‰BNE.S…TERM4‰MOVE.W„#1,DUALFG-INITIO(A0)‚setupfordualbdtest‰MOVE.W„#1,DUALCK-INITIO(A0)!‰MOVE.L„#'ACO1',ACOPAR-INITIO(A0)*‰MOVE.L„#'ACO1',TMSG-INITIO(A0)‚setupmsg‰MOVE.W„#'&2',TMSG+4-INITIO(A0) ‰BRA‡TRYBTH*%TERM…MOVE.L„#32,D0ŽDE-ALLOCATEA.S.Q.‰TRAP†#1**‰MOVE.L„#15,D0ŽNOWDE-ACTIVATESELF(EXIT)‰TRAP†#1**„MESSAGEOUTPUTSUBROUTINE*ééééé/ é/MSGOUTƒLEA‡MSG(PC),A0Šoutputmessagepointedto(‰MOVE.L„A1,X1-MSG(A0)‡byA1,endedbyA2‰MOVE.L„A2,X2-MSG(A0)‰TRAP†#2 ‰BNE‡FAULT14‰RTS*1FLOP…LEA‡INITIO(PC),A0‡togglebetweenACO1&ACO2‰MOVE.W„DUALCK-INITIO(A0),D0 ‰BEQ.S…FLOP2continueonifzero‰CMP.W…#1,D0seeif=1 ‰BNE.S…FLOP11‰MOVE.W„#2,DUALCK-INITIO(A0)‚is=1,setupfor2!‰MOVE.L„#'ACO2',ACOPAR-INITIO(A0)‰JMP‡(A1)loopback6FLOP1„MOVE.W„#1,DUALCK-INITIO(A0)‚is=2,setupfor1!‰MOVE.L„#'ACO1',ACOPAR-INITIO(A0))FLOP2„JMP‡(A2)continueonwithnexttest*-*ƒMOVETHEASQMESSAGEFROMTHEASQTORCVBUF*8TESTIRQ‚EQU‡*‰entrypointmovingdatafromASQtoRCVBUF!‰MOVE.L„#34,D0„stagecommandcode‰LEA‡RCVBUF(PC),A0‰TRAP†#1 ‰BNE‡FAULT12*„RETURNFROMEVENT!‰MOVE.L„#37,D0„stagecommandcode ‰MOVE.W„#1,A0‰TRAP†#1*‰PAGE**„CMRparameterblock*INITIOƒDC.B†7,0,0,0ACOPARƒDC.L†'ACO1'„TASKNAME ‰DC.L†0,0,0*CMDA…DC.L†0‰addressofACOparameterblockCMDL…DC.W†0‰commandlength**„A.S.Q.parameterblock*ASQBLOCKEQU‡*‰DC.L†0‰taskname‰DC.L†0‰dummyfield*‰DC.B†5‰ASQ&ASRenabled=initialstatus"‰DC.B†16ˆlengthofmessageforASQ‰DC.L†16ˆstoragefor4events?ASQLA„DC.L†TESTIRQƒlogicaladdressoftargettaskasyncsvcrtn‰DC.L†0‰dummyfieldASQLNGƒEQU‡*-ASQBLOCK*0*„ACOparameterblocktoopenindividualchannel*OPNCMDS‚DC.W†0‰returnedstatus‰DC.W†1‰OPENcommandcode‰DC.W†1‰open1channelOPNCH„DC.W†0‰channel#/OPNCNFƒDC.W†$8000…DefaultchannelconfigurationOPNLNGS‚EQU‡*-OPNCMDSlength***„ACOparameterblocktoopenALLchannels*OPNCMDƒDC.W†0‰returnedstatus‰DC.W†1‰OPENcommandcode‰DC.W†8‰open8channels*‰DC.W†0,$8000ƒCHAN0,defaultconfiguration‰DC.W†1,$8000ƒCHAN1,ƒ"‰"‰DC.W†2,$8000ƒCHAN2,ƒ"‰"‰DC.W†3,$8000ƒCHAN3,ƒ"‰"‰DC.W†4,$8000ƒCHAN4,ƒ"‰"‰DC.W†5,$8000ƒCHAN5,ƒ"‰"‰DC.W†6,$8000ƒCHAN6,ƒ"‰"‰DC.W†7,$8000ƒCHAN7,ƒ"‰"OPNLNGƒEQU‡*-OPNCMD‚length*#*ƒparameterblockforCLOSEcommand*CLSCMDƒDC.W†0‰returnedstatus‰DC.W†2‰CLOSEcommand(CLSLNGƒEQU‡*-CLSCMD‚closecommandlength*$*…ACOparameterblockforONcommand* ONCMD„EQU‡*‰DC.W†0‰returnedcommandstatus‰DC.W†3‰OUTPUTONcommand,ONCMD1ƒDC.W†1‰bitmaskofchanneltoturnON* ONCMDAƒEQU‡*‰DC.W†0‰returnedcommandstatus‰DC.W†3‰OUTPUTONcommand,‰DC.W†$00FF…bitmasktoturnONallchannels*%*…ACOparameterblockforOFFcommand* OFFCMDƒEQU‡*&‰DC.W†0‰returncommandstatuslocation‰DC.W†4‰OFFcommand.OFFCMD1‚DC.W†1‰bitmaskofchanneltoturnOFF* OFFCMDA‚EQU‡*&‰DC.W†0‰returncommandstatuslocation‰DC.W†4‰OFFcommand-‰DC.W†$00FF…bitmasktoturnOFFallchannels*$*„parameterblockforSTATUScommand* STATCMD‚EQU‡*‰DC.W†0‰returnedcommandstatus‰DC.W†5‰STATUScommand2STAT…DC.W†1‰bitmask&readstatusofchannels0-7*:*„ACOparameterblocktodo1000msPULSEonselectedchan*PLSO…DC.W†0‰returnedcmdstatus‰DC.W†8‰PULSEcommandcode‰DC.W†1‰onechannelPLSO1„DC.W†1‰pulsechannel#‰DC.L†500‡500mspulse*7*„parameterblocktoPULSEfourchannelssimultaneously*!PLSTWOƒDC.W†0‰returnedcmdstatus‰DC.W†8‰PULSEcommandcode‰DC.W†4‰fourchannels‰DC.W†4‰chan.#4‰DC.L†250‡250ms‰DC.W†5‰chan.#5‰DC.L†500‡500ms‰DC.W†6‰chan.#6‰DC.L†750‡750ms‰DC.W†7‰chan.#7‰DC.L†1000†1000msPLSTLGƒEQU‡*-PLSTWO*"*„INVALIDCHANNELparameterblocks*!OPNCH0ƒDC.W†0‰returnedcmdstatus‰DC.W†1‰OPENcommandcode‰DC.W†0‰openzerochannels‰DC.W†0‰channel0‰DC.W†$8000…config.OPNCHLƒEQU‡*-OPNCH0*!OPNCH9ƒDC.W†0‰returnedcmdstatus‰DC.W†1‰OPENcmdcode‰DC.W†1‰openonechannel‰DC.W†9‰openchannel#90 ‰DC.W†$8000…config.OPNC9LƒEQU‡*-OPNCH9* OPNTW„DC.W†0‰returnedcmdstatus‰DC.W†1‰OPENcmdcode‰DC.W†3‰openthreechan.‰DC.W†1,$8000ƒchan,config.‰DC.W†2,$8000ƒchan,config.‰DC.W†2,$8000ƒchan,config.OPNTL„EQU‡*-OPNTW*!OPNMORƒDC.W†0‰returnedcmdstatus‰DC.W†1‰OPENcmdcode‰DC.W†9‰open9channels‰DC.W†0,$8000ƒchan,config.‰DC.W†1,$8000ƒchan,config.‰DC.W†2,$8000ƒchan,config.‰DC.W†3,$8000ƒchan,config.‰DC.W†4,$8000ƒchan,config.‰DC.W†5,$8000ƒchan,config.‰DC.W†6,$8000ƒchan,config.‰DC.W†7,$8000ƒchan,config.‰DC.W†8,$8000ƒchan,config.OPNML„EQU‡*-OPNMOR*#*…INVALIDCOMMANDSparameterblocks*!INVCM0ƒDC.W†0‰returnedcmdstatus‰DC.W†0‰invalidcommand0*!INVCM6ƒDC.W†0‰returnedcmdstatus‰DC.W†6‰invalidcommand6*!INVCM7ƒDC.W†0‰returnedcmdstatus‰DC.W†7‰invalidcommand7*!INVCM9ƒDC.W†0‰returnedcmdstatus"‰DC.W†9‰invalidcmdgreaterthan8**„IOSMESSAGEparameterblock*MSG†DC.B†0‰Dataxfercode=0‰DC.B†2‰Writedata‰DC.W†0‰Options-none‰DC.B†0‰Status ‰DC.B†6‰LUN‰DC.W†0‰reserved‰DC.L†0‰randomrecordcountX1‡DC.L†0‰bfrstartaddr.X2‡DC.L†0‰bfrendaddr.‰DC.L†0‰lengthofdataxfer ‰DC.L†0‰completion/serviceaddr.*‰PAGE *„MESSAGES*6SMSG1„DC.W†'**********ACOUTPUTTESTPROGRAM******'TMSG…DC.W†'ACO1‚' EMSG1„EQU‡*-1*ééé8SMSG2„DC.W†'‚OPEN&OUTPUTTOEACHCHANNELINDIVIDUALLY' EMSG2„EQU‡*-1*9SMSG3„DC.W†'‚OPEN&OUTPUTEACHCHANNELUNTILALLAREON' EMSG3„EQU‡*-1*5SMSG4„DC.W†'‚CLOSECHANNELS,OUTPUTSSHOULDTURNOFF' EMSG4„EQU‡*-1*0SMSG5„DC.W†'‚TURNONALLOUTPUTS,THENTURNOFF' EMSG5„EQU‡*-1*'SMSG6„DC.W†'‚PULSEEACHOUTPUTINTURN' EMSG6„EQU‡*-1*5SMSG7„DC.W†'‚PULSEOUTPUT2ANDGENERATEQUEUEEVENT' EMSG7„EQU‡*-1*1SMSG8„DC.W†'‚PULSEOUTPUT1ANDGENERATEWAKE-UP' EMSG8„EQU‡*-1*/SMSG9„DC.W†'‚TRYCOMMANDSWITHCHANNELSCLOSED' EMSG9„EQU‡*-1**SMSG10ƒDC.W†'‚INVALIDASQMESSAGE-ERROR'EMSG10ƒEQU‡*-1*+SMSG11ƒDC.W†'‚TRYTOOPENINVALIDCHANNELS'EMSG11ƒEQU‡*-1*4SMSG12ƒDC.W†'‚CALLOUTPUTANDCHANNELSCLOSED-OK!'EMSG12ƒEQU‡*-1*ééé0 é"SMSG13ƒDC.W†'‚CALLOUTPUT-ERROR'EMSG13ƒEQU‡*-1*1SMSG14ƒDC.W†'‚CALL‚OFFƒANDCHANNELSCLOSED-OK!'EMSG14ƒEQU‡*-1*SMSG15ƒDC.W†'‚CALLOFF-ERROR'EMSG15ƒEQU‡*-1*4SMSG16ƒDC.W†'‚CALLSTATUSANDCHANNELSCLOSED-OK!'EMSG16ƒEQU‡*-1*"SMSG17ƒDC.W†'‚CALLSTATUS-ERROR'EMSG17ƒEQU‡*-1*3SMSG18ƒDC.W†'‚CALLPULSE‚ANDCHANNELSCLOSED-OK!'EMSG18ƒEQU‡*-1*!SMSG19ƒDC.W†'‚CALLPULSE-ERROR'EMSG19ƒEQU‡*-1*4SMSG20ƒDC.W†'‚TRYCALLOPENANDALREADYOPENED-OK!'EMSG20ƒEQU‡*-1*&SMSG21ƒDC.W†'‚INVALIDCHANNEL-ERROR'EMSG21ƒEQU‡*-1* SMSG22ƒDC.W†'‚CALLOPEN-ERROR'EMSG22ƒEQU‡*-1*9SMSG23ƒDC.W†'‚******TESTCOMPLETEDSUCCESSFULLY*******'EMSG23ƒEQU‡*-1*SMSG24ƒDC.W†'‚'EMSG24ƒEQU‡*-1**SMSG25ƒDC.W†'‚TRYTOUSEINVALIDCOMMANDS'EMSG25ƒEQU‡*-1**SMSG26ƒDC.W†'‚CALL„INVALID„COMMANDS„-‚OK!'EMSG26ƒEQU‡*-1*&SMSG27ƒDC.W†'‚INVALIDCOMMAND-ERROR'EMSG27ƒEQU‡*-1*#SMSG28ƒDC.W†'‚STATUSCHECK-ERROR'EMSG28ƒEQU‡*-1*"SMSG29ƒDC.W†'‚A.S.Q.MOVE‚-ERROR'EMSG29ƒEQU‡*-1*SMSG30ƒDC.W†'‚A.S.Q.-ERROR'EMSG30ƒEQU‡*-1*$SMSG31ƒDC.W†'‚WAKEUPORQUEUEERROR'EMSG31ƒEQU‡*-1*9SMSG32ƒDC.W†'‚PULSECHANNELS4,5,6,&7SIMULTANEOUSLY'EMSG32ƒEQU‡*-1*!SMSG33ƒDC.W†'‚CALLCLOSE-ERROR'EMSG33ƒEQU‡*-1*#SMSG34ƒDC.W†'‚TRAP#2(IOS)ERROR'EMSG34ƒEQU‡*-1*!SMSG35ƒDC.W†'‚CALLDELAY-ERROR'EMSG35ƒEQU‡*-1**SMSG36ƒDC.W†'‚CALL„INVALID„CHANNELS„-‚OK!'EMSG36ƒEQU‡*-1*‰PAGE*:SMSG37ƒDC.W†'---NON-EXISTANTTASK/BOARD-------^'EMSG37ƒEQU‡*-1*&SMSG38ƒDC.W†'‚A.S.Q.MESSAGEVERIFIED'EMSG38ƒEQU‡*-1*-SMSG39ƒDC.W†'‚TURNOFFCHANNELSSEQUENTIALLY'EMSG39ƒEQU‡*-1*SMSG40ƒDC.W†'‚VM02'EMSG40ƒEQU‡*-1*éSMSG41ƒDC.W†'‚VM03'EMSG41ƒEQU‡*-1*SMSG42ƒDC.W†'‚VME110'EMSG42ƒEQU‡*-1*SMSG43ƒDC.W†'‚VME/10'EMSG43ƒEQU‡*-1*‰PAGE*EVNTCNT‚DS.W†1‰eventcounter!STATSHF‚DS.W†1‰statusbitshifter1DUALFGƒDS.W†1‰dualboardtestflag(1=donottest)CúÐEúÍa 2Cú ¬Eú ×a &Cú¸Eúµa Aú lCú È!I2|1Ip!I2| 1IpCúÿÔEú` >Aú ~áètáè Aú|RP0:v @kÿxAú `Cú Æ!I2|F31Ip!I2| 1IpCúÐEúÍa 2Cú ¬Eú ×a &Cú¸Eúµa Aú lCú È!I2|1Ip!I2| 1IpCúÿÔEú` >Aú ~áètáè Aú|RP0:v @kÿxAú `Cú Æ!I2|1Ip!I2| 1Ip²6ºÂ>Ê,Ò)ÚAâUê6òúT KV1"!*V2*:*‚Thisprogramperformsthefollowingtestsonthedriver:*9*ˆTEST1‚-‚individuallyopenseachchannel,outputstoit,-*’checksstatus,turnsitoff,checksstatus, *’andcloses.9*ˆTEST2‚-‚individuallyopenseachchannel,outputstoit,1*’checksstatus,continuesuntilallareon.Then,*’individuallyturnsoffeachchannel,checks0*’status,continuesuntilallareoff.Turnsall%*’channelsbackonforthenexttest.7*ˆTEST3‚-‚closesthechannels,OPERATORmustcheckthey *’turnedoff.4*ˆTEST4‚-‚opensallchannels,turnsallchannelson,-*’delays,turnsallchannelsoff,andcloses.9*ˆTEST5‚-‚individuallyopenseachchannel,commandspulse*’output,delays,andcloses.7*ˆTEST6‚-‚opensfourchannels,commandspulseoutputof3*’differentlengthstoeachsimultaneously,delays,*’closeschannels.;*ˆTEST7-ƒopenschanneltwowithqueueeventconfiguration,'*’pulsesoutput,waitsforqueueevent,)*’verifiesmessagesent,closeschannels.:*ˆTEST8‚-‚openschannelonewithwaitforwake-upconfig.,'*’pulsesoutput,waitsforwake-up,and*’closeschannels.:*ˆTEST9‚-‚trysoutputONwithchannelsclosedandverifies*’error.3*’trysoutputOFFwithchannelsclosedandverifies*’error./*’tryscheckingstatuswithchannelsclosedand*’verifieserror.,*’tryspulseoutputwithchannelsclosedand*’verifieserror.<*ˆTEST10-‚trysopeninginvalidchannelnumbersandverifies3*’errors.(ZEROchannels,morethaneightchannels,"*’channel#9,sametwochannels).:*ˆTEST11-‚openschannelandtrysinvalidcommands(0,6,*’7,>8)andverifieserrors.=*ˆTEST12-‚trysopeningchannelswhentheyarealreadyopened*’andverifieserror.*>*ˆIfitpassedthesetestsitreturnstothetoptosetupfor2*’taskDCO2.IfthiswasfortaskDCO2,itsetsup$*’totestbothtaskssimultaneously.7*ˆIFALLTESTSARESUCCESSFUL,printsmessageattesting0*’tothatfact.Ifanytestfails,ERRORmessage$*’isprintedandtestisterminated.*D********************************************************************‰PAGE*5IOADR0ƒEQU‡$F80000VM02basememmapI/Ochanaddress5IOADR1ƒEQU‡$FA0000VM03basememmapI/Ochanaddress7IOADR2ƒEQU‡$FE6000VME110basememmapI/Ochanaddress7IOADR3ƒEQU‡$F1C000VME/10basememmapI/Ochanaddress* ‰SECTIONƒ0*TEST…LEA‡STACK(PC),A7‰LEA‡INITIO(PC),A0.‰CLR.W…DUALFG-INITIO(A0)ƒcleardualtestflags‰CLR.W…DUALCK-INITIO(A0)**SETUPA.S.Q.*!‰MOVE.L„#31,D0Žstagecommandcode-‰LEA‡ASQBLOCK(PC),A0…stagecommandparameters.‰LEA‡TESTIRQ(PC),A1†initializesaddr.ofasync*‰MOVE.L„A1,ASQLA-ASQBLOCK(A0)‚servicertn.‰TRAP†#1 ‰BNE‡FAULT11*‰MOVE.L„#'DCO1',D0(TNAME„LEA‡INITIO(PC),A0‡SETUPTASKNAME‰MOVE.L„D0,DCOPAR-INITIO(A0)‰MOVE.L„D0,TMSG-INITIO(A0)*!TRYBTHƒLEA‡SMSG24(PC),A1‡spaceup‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1†again‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*.‰LEA‡SMSG1(PC),A1ˆoutputstartoftestmessage‰LEA‡EMSG1(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1‡spaceup‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)+‰MOVE.W„#CLSLNG,A1ŠINSURECHANNEL(S)CLOSED$‰MOVE.W„A1,CMDL-INITIO(A0)‚TOSTART.‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT16*‰PAGE* *…OPENTHECHANNELSINDIVIDUALLY*5TEST1„LEA‡SMSG2(PC),A1‡output'open&output'message‰LEA‡EMSG2(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT4 15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)initializeparameters‰LEA‡INITIO(PC),A0*‰MOVE.W„#1,ONCMD1-INITIO(A0)'ON'bitmask,‰MOVE.W„#1,OFFCMD1-INITIO(A0)'OFF'bitmask2‰MOVE.W„#1,STATSHF-INITIO(A0)statusreq.bitmaské;OPNLP„MOVE.W„EVNTCNT(PC),D0†OPENCHANNEL(eventcountholds‰LEA‡INITIO(PC),A0‡channel#)+‰MOVE.W„D0,OPNCH-INITIO(A0)channeltoopen‰LEA‡OPNCMDS(PC),A1,‰MOVE.L„A1,CMDA-INITIO(A0)‚parameterstoCMR‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*+‰LEA‡INITIO(PC),A0‡OUTPUTTOCHANNELOPENED‰LEA‡ONCMD(PC),A1,‰MOVE.L„A1,CMDA-INITIO(A0)‚parameterstoCMR ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#500,A0500MS‰TRAP†#1 ‰BNE‡FAULT15*!‰LEA‡OPNLP(PC),A1ˆloopbackaddr.&‰LEA‡TEST1B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggleééééé*%TEST1BƒLEA‡INITIO(PC),A0‡CHECKSTATUS/‰MOVE.W„STATSHF(PC),D0†movechanneltocheckto1‰MOVE.W„D0,STAT-INITIO(A0)‚statusparameterblock‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT3*3‰MOVE.W„STAT(PC),D0‰doesstatuscheckwithbitthat"‰CMP.W…ONCMD1(PC),D0‡shouldbeon? ‰BNE‡FAULT4*#‰LEA‡INITIO(PC),A0‡TURNOFFCHANNEL‰LEA‡OFFCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT5*‰LEA‡INITIO(PC),A0‡CHECKSTATUS/‰MOVE.W„STATSHF(PC),D0†movechanneltocheckto1‰MOVE.W„D0,STAT-INITIO(A0)‚statusparameterblock‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT3*.‰MOVE.W„STAT(PC),D0‰doesstatuscheckshowbit#‰BNE‡FAULT4Žstillon?ifso,error.*#‰LEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST1B(PC),A1‡loopbackaddr.&‰LEA‡TEST1C(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST1CƒLEA‡INITIO(PC),A0>‰ASL.W…ONCMD1-INITIO(A0)ƒshift'ON'channelbitmaskoneplace/‰ASL.W…OFFCMD1-INITIO(A0)‚shift'OFF'ƒ"…"ƒ"„"„"0‰ASL.W…STATSHF-INITIO(A0)‚shiftstatus‚"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrementeventcounter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0done? ‰BMI‡OPNLP*‰PAGE4 éé*2*„OUTPUTTOCHANNELSSEQUENTIALLYUNTILALLAREON*5TEST2„LEA‡SMSG3(PC),A1‡output'outputtoall'message‰LEA‡EMSG3(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)initializeparameters‰LEA‡INITIO(PC),A06‰MOVE.W„#1,ONCMD1-INITIO(A0)‚bitmaskfor'ON'channel9‰MOVE.W„#1,STATSHF-INITIO(A0)bitmaskforstatuschannel)OPNLP2ƒMOVE.W„EVNTCNT(PC),D0†OPENCHANNEL‰LEA‡INITIO(PC),A0‰MOVE.W„D0,OPNCH-INITIO(A0)/‰LEA‡INITIO(PC),A0‡pointtoCMRparameterblock‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*+‰LEA‡INITIO(PC),A0‡OUTPUTTOCHANNELOPENED‰LEA‡ONCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#500,A0500MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP2(PC),A1‡loopbackaddr.&‰LEA‡TEST2A(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*1TEST2AƒLEA‡INITIO(PC),A0‡CHECKSTATUSOFCHANNELS‰MOVE.W„STATSHF(PC),D0‰MOVE.W„D0,STAT-INITIO(A0)‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT3*&‰MOVE.W„STAT(PC),D0‰doesstatuscheck?‰CMP.W…STATSHF(PC),D0 ‰BNE‡FAULT4*"‰LEA‡TEST2A(PC),A1‡loopbackaddr.&‰LEA‡TEST2B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST2BƒLEA‡INITIO(PC),A0>‰ASL.W…ONCMD1-INITIO(A0)ƒshift'ON'channelbitmaskoneplace‰ORI‡#$10,CCRŒsetXbit/‰ROXL.W„STATSHF-INITIO(A0)‚addstatusƒ"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrementeventcounter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0done? ‰BMI‡OPNLP2*7TEST2CƒLEA‡SMSG39(PC),A1‡output'turnoffseq.'message‰LEA‡EMSG39(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)initializeparameters‰LEA‡INITIO(PC),A08‰MOVE.W„#1,OFFCMD1-INITIO(A0)‚bitmaskfor'OFF'channel9‰MOVE.W„#1,STATSHF-INITIO(A0)bitmaskforstatuschannel*)OPNLP3ƒLEA‡INITIO(PC),A0‡TURNOFFCHANNEL‰LEA‡OFFCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT5*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#500,A0500MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP3(PC),A1‡loopbackaddr.&‰LEA‡TEST2D(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*0TEST2DƒLEA‡INITIO(PC),A0‡CHECKSTATUSOFCHANNEL‰MOVE.W„STATSHF(PC),D0‰MOVE.W„D0,STAT-INITIO(A0)‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT3*&‰MOVE.W„STAT(PC),D0‰doesstatuscheck? ‰BNE‡FAULT4*"‰LEA‡TEST2D(PC),A1‡loopbackaddr.&‰LEA‡TEST2E(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST2EƒLEA‡INITIO(PC),A0@‰ASL.W…OFFCMD1-INITIO(A0)‚shift'OFF'channelbitmaskoneplace0‰ASL.W…STATSHF-INITIO(A0)‚shiftstatus‚"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrementeventcounter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0done? ‰BMI‡OPNLP3*+TEST2FƒLEA‡INITIO(PC),A0‡OUTPUTTOCHANNELS‰LEA‡ONCMDA(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)5 ‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST2F(PC),A1‡loopbackaddr.%‰LEA‡TEST3(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle**%**************************************ƒCLOSETEST–*%**************************************-TEST3„LEA‡SMSG4(PC),A1‡output'close'message‰LEA‡EMSG4(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*)TEST3AƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST3A(PC),A1‡loopbackaddr.%‰LEA‡TEST4(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle*‰PAGE$*„TURNONALLOUTPUTS,THENTURNOFF*9TEST4„LEA‡SMSG5(PC),A1‡output'turnon,turnoff'message‰LEA‡EMSG5(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15**TEST4AƒLEA‡INITIO(PC),A0‡OPENALLCHANNELS/‰LEA‡OPNCMD(PC),A1‡pointtoCMRparameterblock‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*,‰LEA‡INITIO(PC),A0‡OUTPUTTOCHANNELSOPENED‰LEA‡ONCMDA(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*ééé0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST4A(PC),A1‡loopbackaddr.&‰LEA‡TEST4B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle**TEST4BƒLEA‡INITIO(PC),A0‡TURNOFFCHANNELS‰LEA‡OFFCMDA(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT5*#‰LEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST4B(PC),A1‡loopbackaddr.%‰LEA‡TEST5(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle*‰PAGE*„PULSEEACHOUTPUTINTURN*2TEST5„LEA‡SMSG6(PC),A1‡output'pulseeach'message‰LEA‡EMSG6(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0‰CLR.W…0(A0)initializeevntcnt)OPNLP4ƒMOVE.W„EVNTCNT(PC),D0†OPENCHANNEL/‰LEA‡INITIO(PC),A0‡pointtoCMRparameterblock+‰MOVE.W„D0,OPNCH-INITIO(A0)channeltoopen,‰MOVE.W„D0,PLSO1-INITIO(A0)channeltopulse‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*‰LEA‡INITIO(PC),A0‰LEA‡PLSO(PC),A1‰PULSEOUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT10*5 éé0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP4(PC),A1‡loopbackaddr.&‰LEA‡TEST5A(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*)TEST5AƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST5A(PC),A1‡loopbackaddr.&‰LEA‡TEST5B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST5BƒLEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrementeventcounter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0done? ‰BMI‡OPNLP4*‰PAGE#*„PULSEFOUROUTPUTSSIMULTANEOUSLY*6TEST6„LEA‡SMSG32(PC),A1†output'pulsesimult.'message‰LEA‡EMSG32(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1500,A0Œ1500MS‰TRAP†#1 ‰BNE‡FAULT15*&TEST6AƒLEA‡INITIO(PC),A0‡OPENCHANNELS‰LEA‡OPNCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*‰LEA‡INITIO(PC),A0‰LEA‡PLSTWO(PC),A1‰PULSEOUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#PLSTLG,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT10*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#500,A0500MS‰TRAP†#1 ‰BNE‡FAULT15*éé"‰LEA‡TEST6A(PC),A1‡loopbackaddr.&‰LEA‡TEST6B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*TEST6BƒMOVE.L„#21,D0ŽDELAY‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*)TEST6CƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST6C(PC),A1‡loopbackaddr.%‰LEA‡TEST7(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle*‰PAGE+*„PULSEOUTPUTTWOANDGENERATEQUEUEEVENT*6TEST7„LEA‡SMSG7(PC),A1‡output'pulseoutput2'message‰LEA‡EMSG7(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST7AƒLEA‡RCVBUF(PC),A0‡ensureRCVBUFzeroedout‰MOVE.L„#0,0(A0)‰MOVE.L„#0,4(A0)‰MOVE.L„#0,8(A0)*‰LEA‡INITIO(PC),A09‰MOVE.W„#0,OPNCNF-INITIO(A0)setupconfig.(queueevent)‰MOVE.W„#2,D0OPENCHANNELTWO+‰MOVE.W„D0,OPNCH-INITIO(A0)‚channeltoopen,‰MOVE.W„D0,PLSO1-INITIO(A0)‚channeltopulse‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*‰LEA‡INITIO(PC),A0‰LEA‡PLSO(PC),A1‰PULSEOUTPUTé6 éé‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT10*+WAITQ„MOVE.L„#36,D0Žrequestwaitforevent.$‰TRAP†#1’tobeissuedbyDCOdriver. ‰BNE‡FAULT13*4‰MOVE.L„RCVBUF(PC),D0‡verifymessagereturnedbyASQ4‰CMP.L…#$0C010002,D0‡$0C01 ‰BNE‡FAULT6‰MOVE.L„RCVBUF+4(PC),D0‰CMP.L…DCOPAR(PC),D0‡DCO-ID ‰BNE‡FAULT6‰MOVE.L„RCVBUF+8(PC),D0,‰AND.L…#$FFFFFF00,D0‡maskoffloworderbyte0‰CMP.L…#IOADR0,D0ŠVM02memorymappedI/Oaddress ‰BEQ.S…TEST710‰CMP.L…#IOADR1,D0ŠVM03memorymappedI/Oaddress ‰BEQ.S…TEST722‰CMP.L…#IOADR2,D0ŠVME110memorymappedI/Oaddress ‰BEQ.S…TEST732‰CMP.L…#IOADR3,D0ŠVME/10memorymappedI/Oaddress ‰BNE‡FAULT6*‰LEA‡SMSG43(PC),A1‰LEA‡EMSG43(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TEST74ééééTEST71ƒLEA‡SMSG40(PC),A1‰LEA‡EMSG40(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TEST74TEST72ƒLEA‡SMSG41(PC),A1‰LEA‡EMSG41(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TEST74TEST73ƒLEA‡SMSG42(PC),A1‰LEA‡EMSG42(PC),A2 ‰BSR‡MSGOUT2TEST74ƒLEA‡SMSG38(PC),A1‡output'asqverified'msg‰LEA‡EMSG38(PC),A2 ‰BSR‡MSGOUT*"‰LEA‡TEST7A(PC),A1‡loopbackaddr.&‰LEA‡TEST7B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*)TEST7BƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST7B(PC),A1‡loopbackaddr.&‰LEA‡TEST7C(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*6TEST7CƒMOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*‰PAGE'*…PULSEOUTPUTONEANDGENERATEWAKE-UP3TEST8„LEA‡SMSG8(PC),A1‡output'pulseled1'message‰LEA‡EMSG8(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST8AƒLEA‡INITIO(PC),A0‡pointtoCMRpara.block5‰MOVE.W„#1,OPNCNF-INITIO(A0)setupconfig.(wake-up)‰MOVE.W„#1,D0OPENCHANNELONE+‰MOVE.W„D0,OPNCH-INITIO(A0)‚channeltoopen,‰MOVE.W„D0,PLSO1-INITIO(A0)‚channeltopulse‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*‰LEA‡INITIO(PC),A06 éé‰LEA‡PLSO(PC),A1‰PULSEOUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT10*-WAITW„MOVE.L„#19,D0Žrequestwaitforwake-up.$‰TRAP†#1’tobeissuedbyDCOdriver. ‰BNE‡FAULT130‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEECHANNEL‰MOVE.L„#1000,A0Œ1000MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST8A(PC),A1‡loopbackaddr.&‰LEA‡TEST8B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*)TEST8BƒLEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*"‰LEA‡TEST8B(PC),A1‡loopbackaddr.&‰LEA‡TEST8C(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*6TEST8CƒLEA‡INITIO(PC),A0‡restoredefaultconfiguration ‰MOVE.W„#$8000,OPNCNF-INITIO(A0)2‰MOVE.W„#0,OPNCH-INITIO(A0)restorechannelselect1‰MOVE.W„#1,STAT-INITIO(A0)‚restorestatuschannel3‰MOVE.W„#1,OFFCMD1-INITIO(A0)‚restoreoffcmdchan.*‰PAGE#*„TRYCOMMANDSWITHCHANNELSCLOSED7TEST9„LEA‡SMSG9(PC),A1‡output'trywithclosed'message‰LEA‡EMSG9(PC),A2 ‰BSR‡MSGOUT*ééé0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST9AƒLEA‡INITIO(PC),A0‡OUTPUTTOCLOSEDCHANNEL‰LEA‡ONCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1)‰MOVE.W„ONCMD(PC),D0ˆreadreturnedstatus(‰CMP.W…#$F2,D0verifycorrecterrorcode ‰BNE‡FAULT2 ‰LEA‡SMSG12(PC),A1‡outputokmsg‰LEA‡EMSG12(PC),A2 ‰BSR‡MSGOUT*#‰LEA‡INITIO(PC),A0‡TURNOFFCHANNEL‰LEA‡OFFCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„OFFCMD(PC),D0‡readreturnedstatus(‰CMP.W…#$F2,D0verifycorrecterrorcode ‰BNE‡FAULT5‰LEA‡SMSG14(PC),A1‡offokmsg‰LEA‡EMSG14(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‡CHECKSTATUS‰LEA‡STATCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#6,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1+‰MOVE.W„STATCMD(PC),D0†readreturnedstatus(‰CMP.W…#$F2,D0verifycorrecterrorcode ‰BNE‡FAULT3éé7 éé ‰LEA‡SMSG16(PC),A1‡statusokmsg‰LEA‡EMSG16(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‰LEA‡PLSO(PC),A1‰PULSEOUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1(‰MOVE.W„PLSO(PC),D0‰readreturnedstatus(‰CMP.W…#$F6,D0verifycorrecterrorcode ‰BNE‡FAULT10*"‰LEA‡TEST9A(PC),A1‡loopbackaddr.&‰LEA‡TEST9B(PC),A2‡continueonforward‰BRA‡FLOPtestfortoggle*%TEST9BƒLEA‡SMSG18(PC),A1‡pulseokmsg‰LEA‡EMSG18(PC),A2 ‰BSR‡MSGOUT*‰PAGE*ƒTRYTOOPENINVALIDCHANNELS6TEST10ƒLEA‡SMSG11(PC),A1‡output'tryinvalidchannels'‰LEA‡EMSG11(PC),A2 ‰BSR‡MSGOUT0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*3TEST10A‚LEA‡INITIO(PC),A0‡TRYTOOPENZEROCHANNELS‰LEA‡OPNCH0(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNCHL,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1%‰MOVE.W„OPNCH0(PC),D0‡readcmdstatus‰CMP.W…#$F7,D0 ‰BNE‡FAULT7*3‰LEA‡INITIO(PC),A0‡TRYTOOPENMORETHAN8CHANNELS‰LEA‡OPNMOR(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNML,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1%‰MOVE.W„OPNMOR(PC),D0‡readcmdstatus‰CMP.W…#$F7,D0 ‰BNE‡FAULT7*,‰LEA‡INITIO(PC),A0‡TRYTOOPENCHANNEL#>8‰LEA‡OPNCH9(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNC9L,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1%‰MOVE.W„OPNCH9(PC),D0‡readcmdstatus‰CMP.W…#$F6,D0 ‰BNE‡FAULT7*éé0‰LEA‡INITIO(PC),A0‡TRYTOOPENSAMETWOCHANNELS‰LEA‡OPNTW(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNTL,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1$‰MOVE.W„OPNTW(PC),D0ˆreadcmdstatus‰CMP.W…#$FE,D0 ‰BNE‡FAULT7*#‰LEA‡TEST10A(PC),A1†loopbackaddr.'‰LEA‡TEST10B(PC),A2†continueonforward‰BRA‡FLOPtestfortoggle*6TEST10B‚LEA‡SMSG36(PC),A1‡output'invalidchannelsok'‰LEA‡EMSG36(PC),A2 ‰BSR‡MSGOUT*‰PAGE*„TRYTOUSEINVALIDCOMMANDS*2TEST11ƒLEA‡SMSG25(PC),A1‡output'tryinvalidcmds'‰LEA‡EMSG25(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*&TEST11A‚LEA‡INITIO(PC),A0‡OPENCHANNEL‰MOVE.W„#1,OPNCH-INITIO(A0)‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*$‰LEA‡INITIO(PC),A0‡INVALIDCOMMAND0‰LEA‡INVCM0(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#4,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„INVCM0(PC),D0‡readreturnedstatus‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*$‰LEA‡INITIO(PC),A0‡INVALIDCOMMAND6‰LEA‡INVCM6(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#4,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„INVCM6(PC),D0‡readreturnedstatus‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*$‰LEA‡INITIO(PC),A0‡INVALIDCOMMAND7‰LEA‡INVCM7(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#4,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*7 ‰MOVE.W„INVCM7(PC),D0‡readreturnedstatus‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*&‰LEA‡INITIO(PC),A0‡INVALIDCOMMAND>8‰LEA‡INVCM9(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0) ‰MOVE.W„#4,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1*‰MOVE.W„INVCM9(PC),D0‡readreturnedstatus‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*#‰LEA‡TEST11A(PC),A1†loopbackaddr.'‰LEA‡TEST11B(PC),A2†continueonforward‰BRA‡FLOPtestfortoggle*-TEST11B‚LEA‡SMSG26(PC),A1‡invalidcmdsokmsg‰LEA‡EMSG26(PC),A2 ‰BSR‡MSGOUT*‰PAGE*„TRYOPENANDALREADYOPENED9TEST12ƒLEA‡SMSG20(PC),A1†output'trywithopened'message‰LEA‡EMSG20(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAYSOOPERATORCANSEEMESSAGE‰MOVE.L„#1200,A0Œ1200MS‰TRAP†#1 ‰BNE‡FAULT15*6TEST12A‚LEA‡INITIO(PC),A0‡pointtoCMRparameterblock(‰MOVE.W„#0,OPNCH-INITIO(A0)OPENCHANNEL‰LEA‡OPNCMDS(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*/‰LEA‡INITIO(PC),A0‡pointtoCMRparameterblock‰LEA‡OPNCMDS(PC),A1)‰MOVE.L„A1,CMDA-INITIO(A0)‚TRYOPENagain‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1+‰MOVE.W„OPNCMDS(PC),D0‡readreturnedstatus‰CMP.W…#$FE,D0 ‰BNE.S…FAULT1*#‰LEA‡INITIO(PC),A0‡CLOSECHANNEL(S)‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#CLSLNG,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT8*#‰LEA‡TEST12A(PC),A1†loopbackaddr.%‰LEA‡TESTC(PC),A2ˆcontinueonforward‰BRA‡FLOPtestfortoggle*1*************************************************éé*„TESTCOMPLETED*1************************************************* TESTC„LEA‡SMSG24(PC),A1‡spaceup‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUTééééé8 éé*1‰LEA‡SMSG23(PC),A1†output'testcomplete'message‰LEA‡EMSG23(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1†spaceup‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*#NEXT…MOVE.W„DUALFG(PC),D0‡flagset? ‰BNE‡TERM.NEXTA„MOVE.L„DCOPAR(PC),D0‡tryforsecondtask‰CMP.L…#'DCO1',D0‰BNE‡TERMAdone‰MOVE.L„#'DCO2',D0‰BRA‡TNAMEsetupsecondtask*‰PAGE*#FAULT1ƒLEA‡SMSG22(PC),A1‡openerror‰LEA‡EMSG22(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT2ƒLEA‡SMSG13(PC),A1‡outputerror‰LEA‡EMSG13(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT3ƒLEA‡SMSG17(PC),A1‡statuserror‰LEA‡EMSG17(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM+FAULT4ƒLEA‡SMSG28(PC),A1‡statuscheckerror‰LEA‡EMSG28(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM"FAULT5ƒLEA‡SMSG15(PC),A1‡offerror‰LEA‡EMSG15(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM*FAULT6ƒLEA‡SMSG10(PC),A1‡ASQmessageerror‰LEA‡EMSG10(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM.FAULT7ƒLEA‡SMSG21(PC),A1‡invalidchannelerror‰LEA‡EMSG21(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM$FAULT8ƒLEA‡SMSG33(PC),A1‡closeerror‰LEA‡EMSG33(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM.FAULT9ƒLEA‡SMSG27(PC),A1‡invalidcmderrormsg‰LEA‡EMSG27(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT10‚LEA‡SMSG19(PC),A1‡pulseerror‰LEA‡EMSG19(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM#FAULT11‚LEA‡SMSG30(PC),A1‡ASQerror‰LEA‡EMSG30(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TERM#FAULT12‚LEA‡SMSG29(PC),A1‡ASQerror‰LEA‡EMSG29(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM6FAULT13‚LEA‡SMSG31(PC),A1‡WAKE-UPorQUEUEEVENTerror‰LEA‡EMSG31(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM2FAULT14‚LEA‡SMSG34(PC),A1‡IOS(trap#2)callerror‰LEA‡EMSG34(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM*FAULT15‚LEA‡SMSG35(PC),A1‡calldelayerror‰LEA‡EMSG35(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM/FAULT16‚LEA‡SMSG37(PC),A1‡non-existanttaskmsg‰LEA‡EMSG37(PC),A2 ‰BSR.S…MSGOUT(‰LEA‡DUALFG(PC),A0‡setflagtoeliminate‰ADD.W…#1,(A0)dualtest ‰BRA‡NEXTA**„DE-ACTIVATESELF*0TERMA„LEA‡INITIO(PC),A0‡testfordualboardtest‰TST.W…DUALFG-INITIO(A0) ‰BNE.S…TERM4‰MOVE.W„#1,DUALFG-INITIO(A0)‚setupfordualbdtest‰MOVE.W„#1,DUALCK-INITIO(A0)!‰MOVE.L„#'DCO1',DCOPAR-INITIO(A0)*‰MOVE.L„#'DCO1',TMSG-INITIO(A0)‚setupmsg‰MOVE.W„#'&2',TMSG+4-INITIO(A0) ‰BRA‡TRYBTH*%TERM…MOVE.L„#32,D0ŽDE-ALLOCATEA.S.Q.‰TRAP†#1**‰MOVE.L„#15,D0ŽNOWDE-ACTIVATESELF(EXIT)‰TRAP†#1**„MESSAGEOUTPUTSUBROUTINE*éééé8 éé/MSGOUTƒLEA‡MSG(PC),A0Šoutputmessagepointedto(‰MOVE.L„A1,X1-MSG(A0)‡byA1,endedbyA2‰MOVE.L„A2,X2-MSG(A0)‰TRAP†#2 ‰BNE‡FAULT14‰RTS*1FLOP…LEA‡INITIO(PC),A0‡togglebetweenDCO1&DCO2‰MOVE.W„DUALCK-INITIO(A0),D0 ‰BEQ.S…FLOP2continueonifzero‰CMP.W…#1,D0seeif=1 ‰BNE.S…FLOP11‰MOVE.W„#2,DUALCK-INITIO(A0)‚is=1,setupfor2!‰MOVE.L„#'DCO2',DCOPAR-INITIO(A0)‰JMP‡(A1)loopback6FLOP1„MOVE.W„#1,DUALCK-INITIO(A0)‚is=2,setupfor1!‰MOVE.L„#'DCO1',DCOPAR-INITIO(A0))FLOP2„JMP‡(A2)continueonwithnexttest*-*ƒMOVETHEASQMESSAGEFROMTHEASQTORCVBUF*8TESTIRQ‚EQU‡*‰entrypointmovingdatafromASQtoRCVBUF!‰MOVE.L„#34,D0„stagecommandcode‰LEA‡RCVBUF(PC),A0‰TRAP†#1 ‰BNE‡FAULT12*„RETURNFROMEVENT!‰MOVE.L„#37,D0„stagecommandcode ‰MOVE.W„#1,A0‰TRAP†#1*‰PAGE**„CMRparameterblock*INITIOƒDC.B†7,0,0,0DCOPARƒDC.L†'DCO1'„TASKNAME ‰DC.L†0,0,0*CMDA…DC.L†0‰addressofDCOparameterblockCMDL…DC.W†0‰commandlength**„A.S.Q.parameterblock*ASQBLOCKEQU‡*‰DC.L†0‰taskname‰DC.L†0‰dummyfield*‰DC.B†5‰ASQ&ASRenabled=initialstatus"‰DC.B†16ˆlengthofmessageforASQ‰DC.L†16ˆstoragefor4events?ASQLA„DC.L†TESTIRQƒlogicaladdressoftargettaskasyncsvcrtn‰DC.L†0‰dummyfieldASQLNGƒEQU‡*-ASQBLOCK*0*„DCOparameterblocktoopenindividualchannel*OPNCMDS‚DC.W†0‰returnedstatus‰DC.W†1‰OPENcommandcode‰DC.W†1‰open1channelOPNCH„DC.W†0‰channel#/OPNCNFƒDC.W†$8000…DefaultchannelconfigurationOPNLNGS‚EQU‡*-OPNCMDSlength***„DCOparameterblocktoopenALLchannels*OPNCMDƒDC.W†0‰returnedstatus‰DC.W†1‰OPENcommandcode‰DC.W†8‰open8channels*‰DC.W†0,$8000ƒCHAN0,defaultconfiguration‰DC.W†1,$8000ƒCHAN1,ƒ"‰"‰DC.W†2,$8000ƒCHAN2,ƒ"‰"‰DC.W†3,$8000ƒCHAN3,ƒ"‰"‰DC.W†4,$8000ƒCHAN4,ƒ"‰"‰DC.W†5,$8000ƒCHAN5,ƒ"‰"‰DC.W†6,$8000ƒCHAN6,ƒ"‰"‰DC.W†7,$8000ƒCHAN7,ƒ"‰"OPNLNGƒEQU‡*-OPNCMD‚length*#*ƒparameterblockforCLOSEcommand*CLSCMDƒDC.W†0‰returnedstatus‰DC.W†2‰CLOSEcommand(CLSLNGƒEQU‡*-CLSCMD‚closecommandlength*$*…DCOparameterblockforONcommand* ONCMD„EQU‡*‰DC.W†0‰returnedcommandstatus‰DC.W†3‰OUTPUTONcommand,ONCMD1ƒDC.W†1‰bitmaskofchanneltoturnON* ONCMDAƒEQU‡*‰DC.W†0‰returnedcommandstatus‰DC.W†3‰OUTPUTONcommand,‰DC.W†$00FF…bitmasktoturnONallchannels*%*…DCOparameterblockforOFFcommand* OFFCMDƒEQU‡*&‰DC.W†0‰returncommandstatuslocation‰DC.W†4‰OFFcommand.OFFCMD1‚DC.W†1‰bitmaskofchanneltoturnOFF* OFFCMDA‚EQU‡*&‰DC.W†0‰returncommandstatuslocation‰DC.W†4‰OFFcommand-‰DC.W†$00FF…bitmasktoturnOFFallchannels*$*„parameterblockforSTATUScommand* STATCMD‚EQU‡*‰DC.W†0‰returnedcommandstatus‰DC.W†5‰STATUScommand2STAT…DC.W†1‰bitmask&readstatusofchannels0-7*:*„DCOparameterblocktodo1000msPULSEonselectedchan*PLSO…DC.W†0‰returnedcmdstatus‰DC.W†8‰PULSEcommandcode‰DC.W†1‰onechannelPLSO1„DC.W†1‰pulsechannel#‰DC.L†500‡500mspulse*7*„parameterblocktoPULSEfourchannelssimultaneously*!PLSTWOƒDC.W†0‰returnedcmdstatus‰DC.W†8‰PULSEcommandcode‰DC.W†4‰fourchannels‰DC.W†4‰chan.#4‰DC.L†250‡250ms‰DC.W†5‰chan.#5‰DC.L†500‡500ms‰DC.W†6‰chan.#6‰DC.L†750‡750ms‰DC.W†7‰chan.#7‰DC.L†1000†1000msPLSTLGƒEQU‡*-PLSTWO*"*„INVALIDCHANNELparameterblocks*!OPNCH0ƒDC.W†0‰9 returnedcmdstatus‰DC.W†1‰OPENcommandcode‰DC.W†0‰openzerochannels‰DC.W†0‰channel0‰DC.W†$8000…config.OPNCHLƒEQU‡*-OPNCH0*!OPNCH9ƒDC.W†0‰returnedcmdstatus‰DC.W†1‰OPENcmdcode‰DC.W†1‰openonechannel‰DC.W†9‰openchannel#9‰DC.W†$8000…config.OPNC9LƒEQU‡*-OPNCH9* OPNTW„DC.W†0‰returnedcmdstatus‰DC.W†1‰OPENcmdcode‰DC.W†3‰openthreechan.‰DC.W†1,$8000ƒchan,config.‰DC.W†2,$8000ƒchan,config.‰DC.W†2,$8000ƒchan,config.OPNTL„EQU‡*-OPNTW*!OPNMORƒDC.W†0‰returnedcmdstatus‰DC.W†1‰OPENcmdcode‰DC.W†9‰open9channels‰DC.W†0,$8000ƒchan,config.‰DC.W†1,$8000ƒchan,config.‰DC.W†2,$8000ƒchan,config.‰DC.W†3,$8000ƒchan,config.‰DC.W†4,$8000ƒchan,config.‰DC.W†5,$8000ƒchan,config.‰DC.W†6,$8000ƒchan,config.‰DC.W†7,$8000ƒchan,config.‰DC.W†8,$8000ƒchan,config.OPNML„EQU‡*-OPNMOR*#*…INVALIDCOMMANDSparameterblocks*!INVCM0ƒDC.W†0‰returnedcmdstatus‰DC.W†0‰invalidcommand0*!INVCM6ƒDC.W†0‰returnedcmdstatus‰DC.W†6‰invalidcommand6*!INVCM7ƒDC.W†0‰returnedcmdstatus‰DC.W†7‰invalidcommand7*!INVCM9ƒDC.W†0‰returnedcmdstatus"‰DC.W†9‰invalidcmdgreaterthan8**„IOSMESSAGEparameterblock*MSG†DC.B†0‰Dataxfercode=0‰DC.B†2‰Writedata‰DC.W†0‰Options-none‰DC.B†0‰Status ‰DC.B†6‰LUN‰DC.W†0‰reserved‰DC.L†0‰randomrecordcountX1‡DC.L†0‰bfrstartaddr.X2‡DC.L†0‰bfrendaddr.‰DC.L†0‰lengthofdataxfer ‰DC.L†0‰completion/serviceaddr.*‰PAGE *„MESSAGES*6SMSG1„DC.W†'**********DCOUTPUTTESTPROGRAM******'TMSG…DC.W†'DCO1‚' EMSG1„EQU‡*-1*ééé8SMSG2„DC.W†'‚OPEN&OUTPUTTOEACHCHANNELINDIVIDUALLY' EMSG2„EQU‡*-1*9SMSG3„DC.W†'‚OPEN&OUTPUTEACHCHANNELUNTILALLAREON' EMSG3„EQU‡*-1*5SMSG4„DC.W†'‚CLOSECHANNELS,OUTPUTSSHOULDTURNOFF' EMSG4„EQU‡*-1*0SMSG5„DC.W†'‚TURNONALLOUTPUTS,THENTURNOFF' EMSG5„EQU‡*-1*'SMSG6„DC.W†'‚PULSEEACHOUTPUTINTURN' EMSG6„EQU‡*-1*5SMSG7„DC.W†'‚PULSEOUTPUT2ANDGENERATEQUEUEEVENT' EMSG7„EQU‡*-1*1SMSG8„DC.W†'‚PULSEOUTPUT1ANDGENERATEWAKE-UP' EMSG8„EQU‡*-1*/SMSG9„DC.W†'‚TRYCOMMANDSWITHCHANNELSCLOSED' EMSG9„EQU‡*-1**SMSG10ƒDC.W†'‚INVALIDASQMESSAGE-ERROR'EMSG10ƒEQU‡*-1*+SMSG11ƒDC.W†'‚TRYTOOPENINVALIDCHANNELS'EMSG11ƒEQU‡*-1*4SMSG12ƒDC.W†'‚CALLOUTPUTANDCHANNELSCLOSED-OK!'EMSG12ƒEQU‡*-1*éé9 éé"SMSG13ƒDC.W†'‚CALLOUTPUT-ERROR'EMSG13ƒEQU‡*-1*1SMSG14ƒDC.W†'‚CALL‚OFFƒANDCHANNELSCLOSED-OK!'EMSG14ƒEQU‡*-1*SMSG15ƒDC.W†'‚CALLOFF-ERROR'EMSG15ƒEQU‡*-1*4SMSG16ƒDC.W†'‚CALLSTATUSANDCHANNELSCLOSED-OK!'EMSG16ƒEQU‡*-1*"SMSG17ƒDC.W†'‚CALLSTATUS-ERROR'EMSG17ƒEQU‡*-1*3SMSG18ƒDC.W†'‚CALLPULSE‚ANDCHANNELSCLOSED-OK!'EMSG18ƒEQU‡*-1*!SMSG19ƒDC.W†'‚CALLPULSE-ERROR'EMSG19ƒEQU‡*-1*4SMSG20ƒDC.W†'‚TRYCALLOPENANDALREADYOPENED-OK!'EMSG20ƒEQU‡*-1*&SMSG21ƒDC.W†'‚INVALIDCHANNEL-ERROR'EMSG21ƒEQU‡*-1* SMSG22ƒDC.W†'‚CALLOPEN-ERROR'EMSG22ƒEQU‡*-1*9SMSG23ƒDC.W†'‚******TESTCOMPLETEDSUCCESSFULLY*******'EMSG23ƒEQU‡*-1*SMSG24ƒDC.W†'‚'EMSG24ƒEQU‡*-1**SMSG25ƒDC.W†'‚TRYTOUSEINVALIDCOMMANDS'EMSG25ƒEQU‡*-1**SMSG26ƒDC.W†'‚CALL„INVALID„COMMANDS„-‚OK!'EMSG26ƒEQU‡*-1*&SMSG27ƒDC.W†'‚INVALIDCOMMAND-ERROR'EMSG27ƒEQU‡*-1*#SMSG28ƒDC.W†'‚STATUSCHECK-ERROR'EMSG28ƒEQU‡*-1*"SMSG29ƒDC.W†'‚A.S.Q.MOVE‚-ERROR'EMSG29ƒEQU‡*-1*SMSG30ƒDC.W†'‚A.S.Q.-ERROR'EMSG30ƒEQU‡*-1*$SMSG31ƒDC.W†'‚WAKEUPORQUEUEERROR'EMSG31ƒEQU‡*-1*9SMSG32ƒDC.W†'‚PULSECHANNELS4,5,6,&7SIMULTANEOUSLY'EMSG32ƒEQU‡*-1*!SMSG33ƒDC.W†'‚CALLCLOSE-ERROR'EMSG33ƒEQU‡*-1*#SMSG34ƒDC.W†'‚TRAP#2(IOS)ERROR'EMSG34ƒEQU‡*-1*!SMSG35ƒDC.W†'‚CALLDELAY-ERROR'EMSG35ƒEQU‡*-1**SMSG36ƒDC.W†'‚CALL„INVALID„CHANNELS„-‚OK!'EMSG36ƒEQU‡*-1*‰PAGE*:SMSG37ƒDC.W†'---NON-EXISTANTTASK/BOARD-------^'EMSG37ƒEQU‡*-1*&SMSG38ƒDC.W†'‚A.S.Q.MESSAGEVERIFIED'EMSG38ƒEQU‡*-1*-SMSG39ƒDC.W†'‚TURNOFFCHANNELSSEQUENTIALLY'EMSG39ƒEQU‡*-1*SMSG40ƒDC.W†'‚VM02'EMSG40ƒEQU‡*-1*éSMSG41ƒDC.W†'‚VM03'EMSG41ƒEQU‡*-1*SMSG42ƒDC.W†'‚VME110'EMSG42ƒEQU‡*-1*SMSG43ƒDC.W†'‚VME/10'EMSG43ƒEQU‡*-1*‰PAGE*EVNTCNT‚DS.W†1‰eventcounter!STATSHF‚DS.W†1‰statusbitshifter1DUALFGƒDS.W†1‰dualboardtestflag(1=donottest)<ÏüBrx><Ïü5¼x%|><WG5GJGm"~ *N¹XØBr~Þª%GjlÞ><ÏüBrx*><Ïü5¼x*><ÏüBrx.><Ïü5¼x.><ÏüBrx.><ÏüBrx4><Ïü5¼x4><ÏüBrx4><ÏüBrx:><Ïü5¼x:><ÏüBrx:><ÏüBrx@><Ïü5¼x@%|><WG5GJGm"~ *N¹XØBr@~Þª%GjlÞ><Ïü5¼xz><Ïü5¼xz><Ïü5¼xz><Ïü5¼xz><Ïü5¼xz><Ïü5¼?xz><Ïü5¼xz><Ïü5¼ÿxz><Ïü5¼xf><Ïü5¼xf><Ïü5¼xf><Ïü5¼xf><Ïü5¼xf><Ïü5¼ xf><Ïü5¼@xf><Ïü5¼€xf>< Ïü5¼ÿxf>< Ïü5¼€xf3üFGì3#ËP3üDAùDN¹âN¹ ô3üFCì3#ÉP3üDAùDN¹âN¹ ô3üFAì#ÈP3üDAùDN¹â#üfAêŒ#ÈjAùfN¹ N¹ ô3üFAì3#ÈP3üDAùDN¹âN¹ ô3üFAì3#ÈP3üDAùDN¹âN¹ ô><ÏüHjŒHrx*N¹²><ÏüJrx*gP3üFGì9#ËP3üDAùDN¹â#üfAêŒ#ÈjAùfN¹ N¹ ô` l3üFGìU#ËP3üDAùDN¹âN¹ ô%|><SG5GJGm¬><Ïü5¼x><Ïü,*S†5†x><Ïü<< Íü5²hfx><ÏüHjŒHrxN¹„><ÏüJrxg,3üFGì„#ËP3üDAùDN¹âN¹ ô><Ïü| *N¹Xà5²fx.><ÏüHjŒHrx.N¹Ä><ÏüJrx.g,3üFGìš#ËP3üDAùDN¹âN¹ ôN¹><Ïü| *N¹Xà5²fx:><ÏüHjŒHrx:N¹ä><Ïü| *N¹Xà<2x:œrfJFg HjN¹š><Ïü| *N¹Xà5²fx4><ÏüHjŒHrx4N¹Ö><ÏüHjŒHrx*N¹²~Þª%GjlþX3üFGì¯#ËP3üDAùDN¹âN¹ ô%|><SG5GJGmü><Ïü5¼x><Ïü,*S†5†x><Ïü<< Íü5²hfx><ÏüHjŒHrxN¹„><Ïü| *N¹Xà5²fx.><ÏüHjŒHrx.N¹ÄN¹><Ïü| *N¹Xà5²zx:><ÏüHjŒHrx:N¹ä><Ïü| *N¹Xà<2x:œrzJFg.*S‡%GHjN¹š~Þª%Gjlÿ3üFGìâ#ËP3üDAùDN¹âN¹ ôN¹><ÏüHjŒHrx*N¹²N¹3üFGì#ËP3üDAùDN¹âN¹ ô><Ïü5¼xBª”%|><YGHÇü5GJGmL~ *N¹XØ5ª–.*R‡| N¹Xà>< Ïü5²xf.*”R‡%G”~Þª%Gjl´><ÏüHjŒHrxN¹„><Ïü<< Íü5²hfx.><ÏüHjŒHrx.N¹ÄN¹><Ïü<< Íü5²hfx4><ÏüHjŒHrx4N¹Ö><ÏüHjŒHrx*N¹²3üFGì5#ËP3üDAùDN¹âN¹ ô%|><SG5GJGm¾><Ïü5¼x><Ïü,*S†5†x><Ïü<< Íü5²hfx><ÏüHjŒHrxN¹„><Ïü5¼x@><Ïü,*S†5†x@><ÏüBrx@><Ïü5¼ôx@><ÏüHjŒHrx@N¹òN¹N¹~Þª%GjlÿF><ÏüHjŒHrx*N¹²3üFGìS#ËP3üDAùDN¹âN¹ ô><ÏüHjŒHrx*N¹²><ÏüJrx*f.3üFGìy#ËP3üDAùDN¹âN¹ ô`,3üFGì #ËP3üDAùDN¹âN¹ ô><Ïü5¼x.><ÏüHjŒHrx.N¹Ä><ÏüJrx.g.3üFGì·#ËP3üDAùDN¹âN¹ ô`,3üFGìÞ#ËP3üDAùDN¹âN¹ ô><Ïü5¼x4><ÏüHjŒHrx4N¹Ö><ÏüJrx4g.3üFGìó#ËP3üDAùDN¹âN¹ ô`,3üFGì#ËP3üDAùDN¹âN¹ ô><Ïü5¼x:><ÏüHjŒHrx:N¹ä><ÏüJrx:g.3üFGì/#ËP3üDAùDN¹âN¹ ô`,3üFGìV#ËP3üDAùDN¹âN¹ ô><Ïü5¼x@><Ïü5¼x@><ÏüBrx@><Ïü5¼ x@><ÏüHjŒHrx@N¹ò><ÏüJrx@g.3üFGìn#ËP3üDAùDN¹âN¹ ô`,3üFGì•#ËP3üDAùDN¹âN¹ ô><Ïü5¼x><Ïü5¼x><Ïü<< Íü5²hfx><ÏüHjŒHrxN¹„3üFGì¬#ËP3üDAùDN¹âN¹ ô><Ïü5¼x><Ïü: 5¼x><Ïü<< Íü5²hfx><ÏüHjŒHrxN¹„><ÏüJrxg.3üFGìÑ#ËP3üDAùDN¹âN¹ ô`,3üFGìø#ËP3üDAùDN¹âN¹ ô3üFGì3#ËP3üDAùDN¹âN¹ ô3üFCì#ÉP3üDAùDN¹âN¹ ô3üFAì3#ÈP3üDAùDN¹âN¹ ô <HjŒHl:N¹UÚJf <HjŒHl>N¹Ud`ñÌpN¹1z(' ***** DC OUTPUT MODULE TEST PROGRAM ****** ',A4)(' ')(' NON-EXISTANT TASK - ',A4)(' OPEN & OUTPUT TO EACH CHANNEL INDIVIDUALLY')(' CALL OPEN - ERROR')(' CALL OUT - ERROR')(' OPEN & OUTPUT TO EACH CHANNEL UNTIL ALL ARE ON')(' CLOSE CHANNELS, OUTPUTS SHOULD TURN OFF')(' TURN ON ALL OUTPUTS, THEN TURN OFF')(' PULSE EACH OUTPUT IN TURN')(' TRY COMMANDS WITH CHANNELS CLOSED')(' CALL CLOSE AND CHANNELS CLOSED--OK')(' CALL CLOSE - ERROR')(' CALL OUT AND CHANNELS CLOSED--OK')(' CALL OUT - ERROR')(' CALL OFF AND CHANNELS CLOSED--OK')(' CALL OFF - ERROR')(' CALL STATUS AND CHANNELS CLOSED-OK')(' CALL STATUS - ERROR')(' CALL PULSE AND CHANNELS CLOSED--OK')(' CALL PULSE - ERROR')(' TRY CALL OPEN AND ALREADY OPENED')(' CALL OPEN AND CHANNELS ARE OPEN-OK')(' CALL OPEN - ERROR')('********* TEST COMPLETED **********')LDCO1DCO2DCO2Hçÿ~IùMï43üFGì#ËP3üDAùDN¹â#üf#îjAùfN¹ N¹ ôLß~ÿ _ßüNÐ(' STATUS ERROR-BIT ',I1)Hçÿ~Iù„EùMï4%|><dSG5GJGm:%|><^SG5GJGm~Þª%Gjlî~Þª%GjlÆLß~ÿNuHç€pa‚$¼B€0*å€\€2€ Kp f$Jgb A (Df"Oi.i.3|P` (Ff ((føCèaˆ :g )fâ ÿþbØRAÿþ?AN" "O|€-|0Aé,NCf¨|@-|0NCf–Jg¢ A :f˜Cèa"JAgŠ"O||3|).g3|d‰|i1#|B€0)NS@SA#|#@ AéR©R¸NBfQÉÿò3|NBgpB)N^NupB)0N^NupN^NuB€N^Nu #fj*¼ (,g""MÐüpØ ,g ;g  g gQÈÿä`ø;| +| +| +| +| ;| B€Nu"G"i<*©;i+i+i +| +| ;|FT :g* Am. Zb‚"Hp :gQÈÿø`Jp"ManJ@fdÐü .g"Ha¬ A'bN I;A .fB .gpCía8J@f0 .f*ÐüpCía"J@f .fÐüpCía J@fB€NupNu @b2¼ `"¼ @c#|  Am$ ZbØ 0m ; 9c Am ZbQÈÿäpNuB€NuB€B 0m 9bÃü Ò@`æNu)| 2Cì2RˆB ;g ,g  g  g ØRA AoÞJAfSˆ`üEE19|,Aì,NC|@-9|."< )A8)A<)A@)AD9AHNCg pB,0Nu|l1l.9lL9lN B€NuHçÿþEí@$|Œ *ÿ†f5|ex|zNº„|ÿ†5PÐü*g5P%h CúÊ%IlÐü `^*f"25A Ao Aco$5|fx|zNº,5|*g5|ÐüCú 6*gCú|5PÐü%IlCú¼*gCúâ%P<Ðü%IhCú!X*f@Cú+Œ%|*g%PÐü%|*g%PÐü*g%P%Ipr"jlN‘J@gT f*g"j`Nºh*g"j`NºV*g j0€*f €5|†.R/Ia²%L0pNuB‚‚"jb*f ü QÊÿú&+$"jba€%L0pNu‘ê,5Hv&*,–Œgad"j(*g.&*,–ª(C3C2¼4*t Bÿf(5|ux|zNºT4 Bg5|tx|zNº<4*tB5Bt0<Nuƒ*fÉIÙQËÿü*fÉINu *ÿ[f|[ *ðUg`Æ *ŒgN *[fl *ÿUg*Ua¤ @gT|ðUNu&j@ )f5|hx|zNº¤|U0<Nu&j@S‹Öü (g  gð`Öü%KD%K@`H"jpN‘B2*\ÒŒ²ª,bz(A%L02*P Ab^|[%|\|X|W|Y|VBƒ&j@CúšBBB1ÄüCú(Nñ *WfÖü%K@`Ì2*PA5APB€Nu`Þ`Ö`R` `v`Ü` `â`@`è``@`’`Ø`ê``,`º`:`L`^`z`’ `ÿ5|ix|z|{%K~Nº ä5|gx|zNº Ô5|mx|zNº Ä"aš&5|P2*LJAf 5|L Cg5CLÖü%KD%K@`þf2*NJAf 5|N Cg5CNÖü%KH%K@`þ>5|jx|xNº Va.2*NJAgA5ANJAgþ>&jH%K@`þ2*LJAgA5ALJAgþ&jD%K@`ýæ|ÿU *Œgþ&j<×ü%K@B@NuaÄ|ðV`ýèa¶|ÿV`ýÚa¨Öü%K@0<|ÿ[NuÖü%K@aˆ`ý€S‹%K@`þ¢Æü ÖA Cmý–5|kx|zNº | *Vfþ  *[g * [g *[g *[fþTJCgþN *ÿXgþD *[gþ:|ÿX5C\BC`ý0 *VfþJJCg~ *[f5CPBƒNu *ÿYgR *Xg5C^`5C\Bƒ2*\4*^ *[g$ * [g *[gJAg6JBf` *[g`6JAg"´Al.` C5C`BƒÞü`üº *[fŒNu5|kx|zNº €5|lx|zNº p +,g( +)g +/gaÿ0 *Vfýx|[`üJaÿBƒ*f5C\|$[ *ŒfJfv`ü$ *[gaþê *Vfý2 CfýÖü Nf|ÿT` Zfüæ|TÖü%K@`û¨aþ¨|[Öü%K@`û’ *[faþŠ| [Öü%K@`ût5C^|ÿYÖü%K@`û^aþ^|[Öü%K@`ûHaþH|[Öü%K@`û2aþ2|[Öü%K@`ûaþ|[Öü%K@`ûJCg *ÿVfDC5CRBCÖü%K@`úæ *Vfü2JCf6<(j0ØÃ¹ê,nü %L0Öü%K@`ú¶ *VfüJCf5|kx|zNºÀ(j0"LØÃ¹ê,nûÎÖü*fÇICÛQËÿü*fÇI%L0%K@`úZ *[gaýR *VfûšJCfûj(j0Öü"KBƒ 'g ÖüC`ð LÐñê,bû\*fÉIJCg CÙQËÿü*fÉIÖü 'f*g¤“Øü%L0`˜%K@%L0`ùÊaüÊ| [Öü%K@`ù´HçÿþCúNñ` `(`.NºÐ« @g|NºšNº¶ë +f5|‚x|zNºˆ +(g +)g +2g +3g +4f5|x|zNºP*g+ f.5|zx`+ f5|yx| z||Cë%I‚Nº+ gë « « « « « *g« 7| +fª7|I`~ +g( +#g +Zg +[g +_g +df5|€x|zNº€ë 7|  +f k f«««`0 +f7|I+ f«+ f ««B@@*fë |` ë ||*gV < *fB€&*,(j(–Œ Cm (ÀCg`ð Cm 8ÀCg`ð8€Lßÿ(j(B@Nu&j« &j*; g*(j0 +Zg$ +[g +_g +g, +#g$`äaʪ( €„o"5|gx|zNº:BkNa¦/+ "k`h/+ ë"k 1fAú”'HRH'H `( 0fAú‚'HRH'H ` +g(Aúj'H'H AëNBJkNf¹Éf 'IOï`®'I «f¼ `JkNgSŒ IS@RHØQÈÿü"_¼ 'I ` JkNfS€'@ Nu kNf °«gSŒ'L AëNBgF*g +Êf||NBg *f +Âgˆ5|„x|z`t|(k%L(%L0*fþ kNf"LÓë$%I,S‰'I `þ6"k Òü%I, +$"k lþD@HÀ j(ÐÁ< *fBAÁQÈÿü`ýúp`5|†x|zpÞüLßþNuHçÿþCúNñ` ``Nº~ @g5|x|zNºX +f5|ƒx|zNº@*g+ f05|zx`+ f 5|yx| z||Cë%I‚Nº*g> +(g6 +)g. +2g& +3g +4g7|` +fR7|dI`7|d  +f7|dIë*fë+ f«+ f ««|*g$| +g +g +g||B€0*J@gj5|Šx| z||Cê%I‚Nº'@(j((€*gŠ < *fB€&*,(j(–Œ Cm (ÀCg`ð Cm 8ÀCg`ð8€ Af*g (j(B€0*(€(j( AfØü%L0Lßÿ(j(B@NupÞüLßþ(j(%L0Nu&jAë*ga&J€fNBg5|…x|z`Â*fÿF`ÿ~0¼NBJf0¼B€` Ég Âf0¼B€NuHçÿþEí@$&j +gfÈ7|,NC7|@,7|.NC|7|(k"LÒü…%I,(ü** F(üORTR8üANü Bƒ92~Cù2€ f 92Cù2†ÙQËÿü&ƹ2zg"*,’Œ¶Ao6 o CØQËÿüSŒ'L |AëNBg5|Œx|zNºB g|NBfÞLßÿNuNº èpAù2rNAÿÿÿPAUSE STOP üHçÿþ`HçÿþEí@5@x|zfêzNVÿê.ª0/j(/j,/jb jfjgj[?j\"j$&j ")2²«2g ©PR 2f&I +g *zfè7|,NC7|@,7|.NC(k%L(%L0"LÒü…%I,"L"<„ü QÉÿú(ü** E(üRRORØü%L0|[5|\Cêx%Ib|f|gHçNº ÈLß4*x”y5ˆCú œBƒÄü61 Cút81 CúÚÒÄ(j0Øüa®Øü*zgBƒ*{"j~a”%L0*zgB|[5|\0* @co5|\Cê%Ib|fHçNº :Lߨê\Øü%L0*zg2| [5|\"jCé%Ib|fHçNºŠLߨü%L0*zg*| [*|CfÆü5C\"j‚%IbHçNºPLß||7|·ê$fAúØ'HTH'H AëNB'j(SŒ'L AëNB·ê$f &j +g°7|@,7|.Aë,NCgœ*zgB5|x|z%W0%o(%o,%o bofogo[5o\N^LßÿNuNº B€B0*xüd2áIB@H@ü éH‚@H@‚@p ANAJCgC¹ê0gÙQËÿôNu d RECURSIVE CALL UNIT NO. OUT OF RANGE END OF RECORD FORMAT CODE MISSING INVALID CHARACTER IN FORMAT NEST OUT OF RANGE IN FORMAT NUMBER OUT OF RANGE IN FORMAT ILLEGAL DESCRIPTORS IN FORMAT ILLEGAL SIGN WITHOUT SCALE FACTOR INVALID DECIMAL CHARACTER INVALID CHARACTER INVALID HEXADECIMAL CHARACTER FIXED OVERFLOW FLOATING OVERFLOW FLOATING UNDERFLOW NOT ENOUGH RECORDS UNFORMATED READ TOO MANY RECORDS UNFORMATED WRITE ASSIGN MISSING INSUFFICIENT MEMORY FOR BUFFER ERROR RETURN ON FHS READ NOT SUPORTED DEVICE WRITE NOT SUPORTED DEVICE BACKSPACE NOT SUPORTED DEVICE REWIND NOT SUPORTED DEVICE ENDFILE NOT SUPORTED DEVICE DIRECT ACCESS NOT SUPORTED SEQUENTIAL ACCESS NOT SUPORTED UNFORMATED NOT SUPORTED ILLEGAL DIRECT WITHOUT OPEN STMT. ALREADY ACCESSED DIRECT ALREADY ACCESSED SEQUENTIAL I/O ERROR AT SEQUENTIAL ACCESS I/O ERROR AT DIRECT ACCESS END OF FILE ALREADY OPENED ILLEGAL RECORD FORMAT RECORD LENGTH OF OPEN STMT GT OF FILE RECORD NUMBER LE 0 NO FORMATTING FILE I/O ERROR AT PAUSE OR STOP ERROR OCCURED AT CLOSE OUT OF RANGE OF ARRAY ELEMENT INSUFFICIENT MEMORY ZERO DIVIDE SOURCE ERROR REAL ZERO DIVIDE DOUBLE PRECISION ZERO DIVIDE INTEGER ZERO DIVIDE REAL POWER BASE=0,EXP=<0 DOUBLE PRECISION POWER BASE=0,EXP=<0 INTEGER POWER BASE=0,EXP=<0 SQRT ARG.<0 DSQRT ARG.<0 EXP ARG.>=127LOG(2) DEXP ARG.>=1023LOG(2) ALOG ARG.=<0 DLOG ARG.=<0 ALOG10 ARG.=<0 DLOG10 ARG.=<0 SIN ARG.>=10**6 DSIN ARG.>=10**14 COS ARG.>=10**6 DCOS ARG.>=10**14 TAN ARG. TOO LARGE DTAN ARG. TOO LARGE ARSIN ABS ARG.>1 DARSIN ABS ARG.>1 ATAN ABS ARG. TOO LARGE DATAN ABS ARG. TOO LARGE ATAN2(X/Y) ARG.X=Y=0 DATAN2(X/Y) ARG.X=Y=0 ATAN2(X/Y) ARG. Y TOO LARGE DATAN2(X/Y) ARG. Y TOO LARGE &4Hd€ž¼Þø (7I\¡°Ïãü4Ok†¥½ß÷2MYh~¤·Êåü.:GHIJKL]zާÌèô+8E< Tcs…•§ºÎßñ "7Mi†‡ˆ‰Š‹ŒŽ‘"#"" & %  Hçÿþ&j·üg8|,|-Aë,NCg @gk05|x|†zNºô&S·êfÀLßÿNu/&j·üf&j8 Ъˆ°ª4nj`€0*°+fDB@ +g0<"j8%I(%I0'I"j4 kNg"j8ÒëN%I,S‰'I %K"Nu&S·êfª"j8 Ъˆ°ª4o5|wx|zNºóZ"“&‰&I`&‹(KØü"*ˆAüQÉÿú%K%@8jj1|,|€-0<`ÿ\Aë,NCg jxgNuk05|vx|zNºòê j (1g Aè1Cë1³gÒ+Lg7|„N|k1k.7kL7kN kNg"kÒëNS‰'I Nu"j4S‰'I NuHçÿþBA*[Cú$1N» LßÿNu0f$R€¾€NVÿð(j0"L-LÿüÒê\-Iÿø-jbÿôB@*f=@ÿò=|ÿð*NNº°N^NuNVÿè|ÿè&jb g|ÿÿè(j0-Lÿì:*\=Eÿê*NNºÂ(j0&LÖê\B@0*^ÖÀÖÇÐGg~ÖêR¹ËbtÐjRJ@lD  gdB€S‹ :m8 @¹Ëb €`âBƒ6*\C&LÖÃCcQËÿú¼1RG`†6*^ÖG&LÖê\ÖÃDƒCü QËÿú0*^ÐGÐjRD@J@oÈ2*^4*\”@n"LÒê\Bƒ6Ckh<0QËÿú`^&LÖÂ"LÒê\Bƒ6´Ao6Ck + ÿÿg#` <0—üQËÿè´Amg$<.6–AC#QËÿü`6–BC<0QËÿú<.&I³Ìc<0&I³Ìc< `ö .ÿÿèf·Ìc<-` 0f ,.f¼-N^Nu6*\Cü*QËÿú`êNVÿä|ÿè&jb g|ÿÿèB2*`Aÿé *fg|ÿé(j00*\j^BA.ÿéA @m¨ØÀ-Lÿì0*^@=@ÿê*NNºÚ(mÿìØíÿê , ÿÿg>$"L :m.$ :m$¹íÿìg¼0`ê(mÿìØíÿê"LSŒRG$¹íÿìfø`¶¼ *[f„JGl~B€0-ÿêD€¾@opBA-ÿéDAÒj\’j^(j0"nÿì6-ÿê¼ 0ÿGD€S‰J@g³Ìmô&ƒéQËÿú¼. ) ÿÿf|0ÿÿ .ÿÿèfÄ“ÀS‰³Ìm¾¼-`²0-ÿêjRÐG;@ÿäCíÿä+Iÿô;|ÿò;|ÿð(j0Øê\+LÿøB€-ÿé™ÀØü+LÿüNºv0-ÿð(mÿüJ@g8B2A¼+ 4-f¼-¼ @AJAm¼0ÿ@QÉÿð|Dÿÿ *fg|EÿÿBA-ÿéDAÒj\’j^ÒjR(j0 j^g4*RJBnmv¼.ÿ`Ž´j^b"&mÿì·ÌgÔBƒ6C"KS‰ÛQËÿü¼.`r6–j^C8˜jR¸Cm¦&mÿì"K“ÃB…:*^EÛQÍÿü:Eü0QÍÿú¼.`0 Acr¼.ÿCô6DCCü0QËÿú Ac¼0þ .ÿÿèf< Bb Am4gA¼-þ`"´j^b Dm¼-@þ`C¸Cm ¼-@úN^Nu(j06*\Cü*QËÿú`æ*ggNºûNugNºüÜNugNº NuNº2Nu(j0Øê\<F"jbB€ *fm `J€g<TAÿÿNuB*[ $f*f5A\(j0&jb2*\Bƒ*f’CgmØÁ`ÖACÛQËÿüNu(j0&jbØê\BC*fÖÃÆü¶j\c6*\JCg CB# m0QËNuQÉÿàèH`ÜNVÿþ&mÿô6-ÿò| ÿÿ(mÿø Cb&gB2JAlDA|-ÿÿ`"JlD|-ÿÿB€` "+B„B…B†B‡:H@8>HA<" Db Eb Fb* ‡'mB`0ˆü' "a’(*Šü' "a‚*,Œü' "ar,.Žü' Bab.HA`B‡vJAg‚ü HA0BAHA¹íÿügb0QËÿâJDfBJEf>JFf:JGf6¹íÿøf<0 .-ÿÿf ¹íÿüg0<-™íÿü;LÿðN^Nu$BBH@B@H@Ò‚NuJCkÿ4<0QËÿô`ÿ((mÿüü*¹íÿøföN^NuNVÿÈ"jb € €f4 *fg ") f "mÿìBƒ6-ÿêCü0QËÿú>-ÿêDGN^Nu *fgH"€ÿÿ€HAîI4 f4<Bãˆgô€Bvâˆâ‘QËÿúB€éJHBBB€‚`")CúÒB‡$‚ðfAú N‘><ÿà$‚ðHB€ÿÿ€C0-@ÿè-AÿìB@(HBBƒ-Bÿð-CÿôD?ð:<ÑÉÅHD DnDÞDDDHĉü :HDçDçEAú b 0@"0@ EgAú °ÐÅ DgN‘` "(Юÿð€?ðJEgm€`€ €?ðl GAú`N‘` €@$mn m GAúJN‘AîÿèN‘$€ÿÿÀ-@ÿø-AÿüBBHBèJB3oB&.ÿüã‹-Cÿü&.ÿøã“-CÿøQÊÿêCîÿø+Iÿô;|ÿòCîÿÈ+IÿüÒü +Iÿø;|ÿð/NºüÆ.G žmÿðžmÿê"mÿüÒíÿð&IB€*fÁü@°mÿêo0-ÿêÖÀZ@S‹ :m2 @³ËbR@€`äBƒ6-ÿêC&IÖÃcQËÿú|1RG&mÿìBƒ6-ÿêB€*fÁü@¶@o60CÙQËÿü°mÿêg$ * [g6-ÿê–@0ÖG¶@bCkü0QËÿúN^NuF“¸µµn@$?¹™™™™™šHçÿþBA*[Cú$1N» LßÿNu0üüüN|öHöNVÿð=|ÿð=|ÿò=|ÿô=|ÿöjfÿ÷-jbÿø&nÿø6¼ .ÿ÷g7| .ÿ÷g'|(j0"LÒê\-Iÿü*NNº†¹íÿüg5|nx|zNºç† mÿôg&5|qx|€zNºçn"mÿø2¼ÿ -ÿ÷g"¼ÿÿÿ -ÿÿðf"mÿø -ÿ÷g2DA2`"D"N^NuNVÿè=|ÿè=|ÿê=|ÿî=|ÿð=|ÿò=|ÿô|ÿöjfÿ÷-jbÿø(j0"LÒê\-Iÿü*NNºN^Nu*ggNºþÖNugNºÿ–NugNº NuNº~NuNVÿü(j0"LÒê\-Iÿü¹îÿüg:  gô ,.ÿÿg ,Tÿÿf$"<ÿ`¹îÿüg  gô ,Tÿÿf"<ÿ`B"jb *fmb "N^NuN^NuB€"€#AN^NuB*[ $f*f5A\(j0&jb2*\Bƒ*f’CgmØÁ`ÖADAÖÃAü QÉÿú&jbCÜQËÿüNu(j0Øê\&jbB€*fJ@gb@üQÈÿúBƒ6*\B@*fÀü¶@m6JCg<C$ f *ÿTfQËÿîNu < 0mT 9c FbH @ÿÿQËNu$ f *ÿTfQËÿîNu 0m 9c Fb éÑ#QËÿ”Nu5|px|z|{Cìÿÿ%I~NºåB€¹íÿüfNu mÿòf +fSŒNu -fSŒNuSŒ` gÎ +g -f|ÿÿð`SŒ¹íÿüfNu 1m 9b2-ÿòA;Aÿò`( 0g gSŒNu2-ÿòJAgÀ 0gÐ *ÿTg²`Æ4-ÿô Bg B;Bÿô`œ"mÿø6-ÿö Cm"b:(ã„ix*å…ipØ…ijØ€id"„`ÿn8ãDiX:åEiRØEiNØ@iJ2„`ÿT(*)B‚ãÕ‚ã„i4Ø‚i0,.B‚ãÕ‚ãJBƒãÕƒå„iØ‚iÚ‡Ù†iÚ€Ùƒi "„#E`ÿ;|ÿô`ÿNVÿò=mÿöÿú-mÿøÿüCîÿò+Iÿø;|ÿö-|ÿò-|ÿöNºþŠ;mÿôÿê¹íÿüf2-ÿê’j^;Aÿê`: Eg4 Dg. +g( -g" .g +g¶ -f|ÿÿî`¦2-ÿê’j^;Aÿê`Ð Eg( Dg"5|ox|zNVÿþ@ÿþ|{%O~Nºã ¹íÿügº  fØü`ì +gL -f|ÿÿî`> 0m® 9b¨SŒ`.;|ÿòNºý²2-ÿòA mÿêf’mÿô“mÿê¹íÿüg^`ÿFCíÿè+Iÿø;|ÿö;|ÿè;|ÿò;|ÿôNºýj¹íÿüg5|ox|z|{%L~Nºâ`2-ÿè -ÿÿîfDAÓmÿê` 2-ÿê’jR;AÿêCîÿò"<B‚&f6QÉÿø"<$< &)fQÉÿöB€"nÿü"€ .ÿúgØ#@`Д‚ <3BéHH@ Bg6nD‚B&â‹"ƒ&)â“#CQÊÿî`B&)ã‹#C&ã“"ƒQÊÿî&ƒ€ƒ")B‚4-ÿêH ‚g¤…ü 6HB BlB C C"nH CÿÞm^ÅüÇüCú¶ BgAú®ÐÂN‘JCg^AúÐÃN‘$BBHBèJ8< é¨è¨JCmB€ Bÿlú`DB€ BÿËo JBl4ÀDBB„â‰dxâˆdÁQÊÿîB‚Ò„Ñ‚B‚`$BBHBèJ8< é¨è¨ nÿúfvBÿB Bÿlš Bÿèo°À8HDHA8HAçˆç‰çŒJBnBDBB„8B‚è¨e`"HA2HAHD0g€gâˆR‚eî€(<骀‚`€(<骀‚"nÿü"€ nÿúg#A -ÿÿðf"nÿüÑN^Nu5|rx <€ nÿúg <ðB` 5|sxB€B|€zNºßô`¦=Û|ßÙ×½»>. è&Ö•>EyŽâ0Œ:>z×òš¼¯I>°Æ÷ µí>äøµˆãhñ?6âëC-?PbMÒñ©ü?„záG®{?¹™™™™™š?ð@$@Y@@@È@øjA.„€AcÐA—ׄAÍÍeWUÜ/ôGÜk*} IpË èðX’h‹pæ+ ¥nÂøóa ¸ò°a® | Í ¤‘ë’àçÉî¼DSó®5‘õ´âé?]¢‚S¬ ù¹æh/ 䃑˜äBÝMç U aÖ©Áh~’N÷³ |ƒç­No"™›úXÏ$£R›§Ñžº&¶~œ{n}(Ê/çj?”}*Þ|_{Ø„,ñ¾½õx²ù/¨rŸÃݼ1 ?syö3+ÿ.äŽ45@KÙ„™r7Rø¬Ma$9fé5ž;y¶ª¬¦&=îzJÔ¸?¡l&'wWœA´HKþëŸCÇœ¡ ’B#EÛ|ßÙ×½»7ð: _ <¯xµŒ@>)>Y9 Œê@=c)ñÃ\¦BQÅ~dšDcéääÂóDFw.ºÖÝÇ=HŠüïQðû_JŸk )YÇL²I­%”Ã|NÅJ0GÆ”ýPØÈÚÆ 4)RìÚb[-UËpÒKsxW5.P–®Y&ÂÔ%oüÁ[:REå¢Î]NØÓNTs_aôޝ#JÓatç××bYcˆU12k»eœT»’ãåg°}Eq$:iÃ24Þz×àkÖXã«yRmêýâÊéoþI@4çžTr üfЬjt$…ΞzWv7ä<ˆu‘xKÐ<@inz`0…å>Y’|rØÜV¡4~…ðàGs~Hç`HçÀ o"o2H@S@tÿRB´Am ¼ `± QÈÿæLßLß/WPNuHç?t`0Hç?t`&Hç?t`Hç?t`Hç?t`Hç?tHçÀ o("o$2H@°AlÃHÁA BnTB` BnUBBCS@ Bg Bg8 BgP Bgf Bgz`RC¶Ao  g` ± g`QÈÿêUÀ`ŠRC¶Ao  g` ± g`QÈÿêSÀ`lRC¶Ao  g` ± g`QÈÿêRÀ`NRC¶Ao  g` ± g`QÈÿêTÀ`2RC¶Ao  fð`ê³fêQÈÿìVÀ`RC¶Ao  f `³fQÈÿìWÀLßLßü/WPNuNVÿÌHæ?$&(J€fJgÀJ‚fJƒg’(µ„/*.…ÿÿ‡ÿÿB@BBH@HB<<ðÀFÄF°Fgl´FgfJ@fB„Dfãã‰dÅD`êDÅJBfBDDfãã‹dÇD`ê”DÇÔ@/8<ãã‰dÅãã‹dÇQÌÿê8<HAHC $H@HBÌÀÈÂBFBDHFHDÜ„8ÈÅBDHDÜ„8ÈÇBDHDÜ„B„ÆÀÂÂÖdx"ÂÇÖd„܃d„ÎÀÊÂÞ…d(<*BEHEHGBGÞ†d„ÀÂЅЄ" d€BC8<gD6<JDgâ‰âˆdÁSD`î$(/ÔCB?ðc B¿Ðb Bðj*`2DBBèŠ B5jJBg â‰âˆdÁB`ìB€B`B <ð` €HBBB€‚gÀ €€fJfB€PLÞüN^NuHçÏA`,HçÍA`$HçËA`HçÉA`HçÇA` HçÅA`HçJ€gJg46H@HAÀÃÂÂÐÄÃH@B@Ђ`B€LßþNu= ,1TESTDC ASYST'D625 TESTDC SA X7!ƒ2 &F3Oú$Aú ÎBhBhpAú ÚCú ¨!INAf Ò CúÐEúÍa 2Cú ¬Eú ×a &Cú¸Eúµa Aú lCú È!I2|1Ip!I2| 1IpCúÿÔEú` >Aú ~áètáè Aú|RP0:v @kÿxAú `Cú Æ!I2|F31Ip!I2| 1IpCúÐEúÍa 2Cú ¬Eú ×a &Cú¸Eúµa Aú lCú È!I2|1Ip!I2| 1IpCúÿÔEú` >Aú ~áètáè Aú|RP0:v @kÿxAú `Cú Æ!I2|1Ip èNAf Cúÿ®Eú`~Aú¾Cú!I2|1Ip!I2| 1Ip C+C‚TSTDCO--TESTPROGRAMFORDCOOUTPUTBOARDC†PROGRAMTSTDCOC<†INTEGER*2OPN(19),CLSE(2),OUT(3),OFF(3),STATUS(3),PULSE(19)†INTEGER*2IHEX(10),MSK(8)†CHARACTER*4IDC †ID='DCO1' 5…OPN(1)=0 †OPN(2)=1†DO10I=3,19 †OPN(I)=0 10„CONTINUEC †CLSE(1)=0 †CLSE(2)=2C †OUT(1)=0 †OUT(2)=3 †OUT(3)=0C †OFF(1)=0 †OFF(2)=4 †OFF(3)=0C†STATUS(1)=0†STATUS(2)=5†STATUS(3)=0C †PULSE(1)=0 †PULSE(2)=8†DO15I=3,19 †PULSE(I)=0 15„CONTINUEC†MSK(1)=#01H†MSK(2)=#03H†MSK(3)=#07H†MSK(4)=#0FH†MSK(5)=#1FH†MSK(6)=#3FH†MSK(7)=#7FH†MSK(8)=#FFHC†IHEX(1)=#01H†IHEX(2)=#02H†IHEX(3)=#04H†IHEX(4)=#08H†IHEX(5)=#10H†IHEX(6)=#20H†IHEX(7)=#40H†IHEX(8)=#80H†IHEX(9)=#FFH†IHEX(10)=#8000HC †WRITE(6,60) †WRITE(6,60)C†WRITE(6,50)ID=50„FORMAT('*****DCOUTPUTMODULETESTPROGRAM******',A4) †WRITE(6,60) †WRITE(6,60)60„FORMAT('‚')C0C‡SEEIFTASKEXISTSBEFORERUNNINGTHISSECTIONC†CALLDCOCLS(ID,CLSE)†IF(CLSE(1))70,90,7070„WRITE(6,75)ID&75„FORMAT('NON-EXISTANTTASK-',A4) †GOTO1350C90„WRITE(6,100):100ƒFORMAT('OPEN&OUTPUTTOEACHCHANNELINDIVIDUALLY')C †DO400I=1,8 †OPN(3)=1 †OPN(4)=I-1†OPN(5)=IHEX(10)†CALLDCOPEN(ID,OPN)CˆCHECKCOMMANDSTATUS†IF(OPN(1))105,120,105105ƒWRITE(6,110)!110ƒFORMAT('CALLOPEN-ERROR')120ƒOUT(3)=IHEX(I)†CALLDCOOUT(ID,OUT)CˆCHECKCOMMANDSTATUS†IF(OUT(1))125,140,125125ƒWRITE(6,130) 130ƒFORMAT('CALLOUT-ERROR')C140ƒCALLDELAYC†STATUS(3)=IHEX(I)†CALLDCOSTA(ID,STATUS)#†IF(STATUS(3)-IHEX(I))150,200,150C150ƒCALLERRPR1(I)200ƒOFF(3)=IHEX(I)†CALLDCOOFF(ID,OFF)†CALLDCOCLS(ID,CLSE) 400ƒCONTINUEC†WRITE(6,500)>500ƒFORMAT('OPEN&OUTPUTTOEACHCHANNELUNTILALLAREON')C †DO600I=1,8 †OPN(3)=1 †OPN(4)=I-1†OPN(5)=IHEX(10)†CALLDCOPEN(ID,OPN)ËqÔcÜ(†OUT(3)=IHEX(I)†CALLDCOOUT(ID,OUT)C †CALLDELAYC†STATUS(3)=MSK(I)†CALLDCOSTA(ID,STATUS)"†IF(STATUS(3)-MSK(I))550,600,550550ƒCALLERRPR1(I-1) 600ƒCONTINUEC†WRITE(6,620)7620ƒFORMAT('CLOSECHANNELS,OUTPUTSSHOULDTURNOFF') †CALLDELAY†CALLDCOCLS(ID,CLSE) †CALLDELAYC†WRITE(6,750)2750ƒFORMAT('TURNONALLOUTPUTS,THENTURNOFF')C †OPN(3)=8†K=0†DO800I=4,18,2 †OPN(I)=K†OPN(I+1)=IHEX(10)†K=K+1 800ƒCONTINUE†CALLDCOPEN(ID,OPN)†OUT(3)=IHEX(9)†CALLDCOOUT(ID,OUT)C †CALLDELAY†OFF(3)=IHEX(9)†CALLDCOOFF(ID,OFF)†CALLDCOCLS(ID,CLSE)C†WRITE(6,950))950ƒFORMAT('PULSEEACHOUTPUTINTURN')C†DO1000I=1,8 †OPN(3)=1 †OPN(4)=I-1†OPN(5)=IHEX(10)†CALLDCOPEN(ID,OPN) †PULSE(3)=1†PULSE(4)=I-1 †PULSE(5)=0†PULSE(6)=500†CALLDCOPLS(ID,PULSE)C †CALLDELAY †CALLDELAY 1000‚CONTINUE†CALLDCOCLS(ID,CLSE)C†WRITE(6,1030)11030‚FORMAT('TRYCOMMANDSWIT? HCHANNELSCLOSED')C†CALLDCOCLS(ID,CLSE)†IF(CLSE(1))1090,1070,10901070‚WRITE(6,1080)31080‚FORMAT('CALLCLOSEANDCHANNELSCLOSED--OK') †GOTO10951090‚WRITE(6,1093)#1093‚FORMAT('CALLCLOSE-ERROR')C1095‚OUT(3)=1†CALLDCOOUT(ID,OUT)†IF(OUT(1))1040,1060,10401040‚WRITE(6,1050)01050‚FORMAT('CALL‚OUT‚ANDCHANNELSCLOSED--OK') †GOTO10651060‚WRITE(6,1063)!1063‚FORMAT('CALLOUT-ERROR')C1065‚OFF(3)=1†CALLDCOOFF(ID,OFF)†IF(OFF(1))1100,1120,11001100‚WRITE(6,1110)11110‚FORMAT('CALL‚OFF‚ANDCHANNELSCLOSED--OK') †GOTO11251120‚WRITE(6,1123)!1123‚FORMAT('CALLOFF-ERROR')C1125‚STATUS(3)=1†CALLDCOSTA(ID,STATUS)†IF(STATUS(1))1130,1150,11301130‚WRITE(6,1140)21140‚FORMAT('CALLSTATUSANDCHANNELSCLOSED-OK') †GOTO11551150‚WRITE(6,1153)$1153‚FORMAT('CALLSTATUS-ERROR')C1155‚PULSE(3)=1 †PULSE(4)=1 †PULSE(5)=0†PULSE(6)=10†CALLDCOPLS(ID,PULSE)†IF(PULSE(1))1160,1180,11601160‚WRITE(6,1170)21170‚FORMAT('CALLPULSEANDCHANNELSCLOSED--OK') †GOTO11851180‚WRITE(6,1183)#1183‚FORMAT('CALLPULSE-ERROR')C1185‚OPN(3)=1 †OPN(4)=1†OPN(5)=IHEX(10)†CALLDCOPEN(ID,OPN)C†WRITE(6,1190)01190‚FORMAT('TRYCALLOPENANDALREADYOPENED')C †OPN(3)=1 †OPN(4)=1†OPN(5)=IHEX(10)†CALLDCOPEN(ID,OPN)†IF(OPN(1))1200,1220,12001200‚WRITE(6,1210)21210‚FORMAT('CALLOPENANDCHANNELSAREOPEN-OK') †GOTO12251220‚WRITE(6,1222)"1222‚FORMAT('CALLOPEN-ERROR')C1225‚WRITE(6,60)C†WRITE(6,1300)31300‚FORMAT('*********TESTCOMPLETED**********')C †WRITE(6,60)CCˆSEEIFSECONDBOARDTOTESTC#1350‚IF(ID.EQ.'DCO2')GOTO15001400‚ID='DCO2'†GOTO5C 1500‚STOP†ENDééééC:C ********************************************************C†SUBROUTINEDELAY C–DELAYAPPROXIMATELYONESECOND†DO30J=1,100†DO20K=1,350 20„CONTINUE 30„CONTINUE†RETURN†ENDééé? ééééä C:C ********************************************************C†SUBROUTINEERRPR1(I)†WRITE(6,10)I#10„FORMAT('STATUSERROR-BIT',I1)†RETURN†ENDéééééééí,1TSTDCO FFIX H TSTDCO ROñ2G.FESC7 F.FESC6 I.FMAIN O.FZWRK O.FCOML `h.FRMUI h.FIINT h.FINIT h.FRMVC h.FRCPC h.FIPST h.FIFNL h.FILST iERRPR1 iDCOOFF iDELAY iDCOSTA iDCOPLS iDCOPEN iDCOCLS 52iDCOOUT &.FEIOP <)š'˜/`Ÿ@3 ÙüX <HjŒHl6N¹(><ÏüBrx><Ïü5¼x%|@3 ><WG5GJGm"~ *N¹(Br~Þª%GjlÞ><ÏüBrx*>3 ><Ïü5¼x*><ÏüBrx.><Ïü@ 5¼x.><ÏüBrx.><B3 ÏüBrx4><Ïü5¼x4><ÏüBrx4><ÏüBrx:><Ïü5¼x:>3 ><ÏüBrx:><ÏüBrx@><Ïü5¼x@%|><WG5G@3 JGm"~ *N¹(Br@~Þª%GjlÞ><Ïü5¼xz><Ïü>3 5¼xz><Ïü5¼xz><Ïü5¼xz><Ïü5¼xz><Ïü>3 5¼?xz><Ïü5¼xz><Ïü5¼ÿxz><Ïü5¼xf><Ïü>3 5¼xf><Ïü5¼xf><Ïü5¼xf><Ïü5¼xf><Ïü>3 5¼ xf><Ïü5¼@xf><Ïü5¼€xf>< Ïü5¼ÿxf>< ÏüP3J¤H 5¼€xf3ü,!Gì3#Ë,! 3ü(!Aù(!N¹(N¹(3ü,!Cì3#É,! 3ü(!N3T‰Q Aù(!N¹(N¹(3ü,!Aì#È,! 3ü(!Aù(!N¹(#ü,!"AêŒ#È,!&T3T‰Tˆ Aù,!"N¹(N¹(3ü,!Aì3#È,! 3ü(!Aù(!N¹(N¹(3ü,!Aì3#È,! D3*€  3ü(!Aù(!N¹(N¹(><ÏüHjŒHrx*N¹(><ÏüJrx*gP3ü,!V3¢*„ Gì9#Ë,! 3ü(!Aù(!N¹(#ü,!"AêŒ#È,!&Aù,!"N¹(N¹(` l3ü,!D3¨ GìU#Ë,! 3ü(!Aù(!N¹(N¹(%|><SG5GJGm¬><Ïü@3 5¼x><Ïü,*S†5†x><Ïü<< Íü5²hfx><ÏüHjŒH3J  HrxN¹(><ÏüJrxg,3ü,!Gì„#Ë,! 3ü(!Aù(!N¹(N¹(><J3 Ïü| *N¹,5²fx.><ÏüHjŒHrx.N¹( ><ÏüJrx.g,3ü,!H3ª Gìš#Ë,! 3ü(!Aù(!N¹(N¹(N¹(><Ïü| *N¹,5²fx:><D3€ ÏüHjŒHrx:N¹(><Ïü| *N¹,<2x:œrfJFg HjN¹(><B3 Ïü| *N¹,5²fx4><ÏüHjŒHrx4N¹(><ÏüHjŒHrx*F3@%P N¹(~Þª%GjlþX3ü,!Gì¯#Ë,! 3ü(!Aù(!N¹(N¹(>3 %|><SG5GJGmü><Ïü5¼x><Ïü,*S†5†x>3 ><Ïü<< Íü5²hfx><ÏüHjŒHrxN¹(><Ïü| *H3@€@ N¹,5²fx.><ÏüHjŒHrx.N¹( N¹(><Ïü| *N¹,5²zx:B3@ ><ÏüHjŒHrx:N¹(><Ïü| *N¹,<2x:œrzJFg.*S‡F3"P %GHjN¹(~Þª%Gjlÿ3ü,!Gìâ#Ë,! 3ü(!Aù(!F3TH N¹(N¹(N¹(><ÏüHjŒHrx*N¹(N¹(3ü,!Gì#Ë,! 3ü(!>3T Aù(!N¹(N¹(><Ïü5¼xBª”%|><YGHÇü5GJGB3 mL~ *N¹(5ª–.*R‡| N¹,>< Ïü5²xf.*”R‡%G”B3 ~Þª%Gjl´><ÏüHjŒHrxN¹(><Ïü<< Íü5²hfx.@3P ><ÏüHjŒHrx.N¹( N¹(><Ïü<< Íü5²hfx4><ÏüHjŒF3‰P Hrx4N¹(><ÏüHjŒHrx*N¹(3ü,!Gì5#Ë,! 3ü(!Aù(!N¹(>3@ N¹(%|><SG5GJGm¾><Ïü5¼x><Ïü,*S†B3 5†x><Ïü<< Íü5²hfx><ÏüHjŒHrxN¹(><Ïü5¼x@>3 ><Ïü,*S†5†x@><ÏüBrx@><Ïü5¼ôx@><ÏüHjŒ>3 Hrx@N¹(N¹(N¹(~Þª%GjlÿF><ÏüHjŒHrx*N¹(F3"U@ 3ü,!GìS#Ë,! 3ü(!Aù(!N¹(N¹(><ÏüHjŒHrx*N¹(><P3¨ˆ ÏüJrx*f.3ü,!Gìy#Ë,! 3ü(!Aù(!N¹(N¹(`,3ö  ü,!Gì #Ë,! >3*€@ 3ü(!Aù(!N¹(N¹(><Ïü5¼x.><ÏüHjŒHrx.N¹( ><P3¨ˆ ÏüJrx.g.3ü,!Gì·#Ë,! 3ü(!Aù(!N¹(N¹(`,3ü,!GìÞ#Ë,! >3*€@ 3ü(!Aù(!N¹(N¹(><Ïü5¼x4><ÏüHjŒHrx4N¹(><P3¨ˆ ÏüJrx4g.3ü,!Gìó#Ë,! 3ü(!Aù(!N¹(N¹(`,3ü,!Gì#Ë,! >3*€@ 3ü(!Aù(!N¹(N¹(><Ïü5¼x:><ÏüHjŒHrx:N¹(><P3¨ˆ ÏüJrx:g.3ü,!Gì/#Ë,! 3ü(!Aù(!N¹(N¹(`,3ü,!GìV#Ë,! @3*€ 3ü(!Aù(!N¹(N¹(><Ïü5¼x@><Ïü5¼x@><Ïü@ Brx@D3€ ><Ïü5¼ x@><ÏüHjŒHrx@N¹(><ÏüJrx@g.3ü,!GìnJ3J¢%P #Ë,! 3ü(!Aù(!N¹(N¹(`,3ü,!Gì•#Ë,! 3ü(!Aù(!N¹(N¹(@3 ><Ïü5¼x><Ïü5¼x><Ïü<< Íü5²hfx><ÏüH3‰T HjŒHrxN¹(3ü,!Gì¬#Ë,! 3ü(!Aù(!N¹(N¹(><Ïü5¼x>3 ><Ïü5¼x><Ïü<< Íü5²hfx><ÏüHjŒHrxN¹(L3Dª ><ÏüJrxg.3ü,!GìÑ#Ë,! 3ü(!Aù(!N¹(N¹(`,3ü,!GìøR3J¤J¤ #Ë,! 3ü(!Aù(!N¹(N¹(3ü,!Gì3#Ë,! 3ü(!Aù(!N¹(N¹(3ü,!L3©¨ Cì#É,! 3ü(!Aù(!N¹(N¹(3ü,!Aì3#È,! 3ü(!Aù(!N¹(N¹(<3€€ <HjŒHl:N¹,2Jf <HjŒHl>N¹(`ñÌpN¹(D3 (' ***** DC OUTPUT MODULE TEST PROGRAM ****** ',A4)(' ')(' NOD3 N-EXISTANT TASK - ',A4)(' OPEN & OUTPUT TO EACH CHANNEL INDIVID3 DUALLY')(' CALL OPEN - ERROR')(' CALL OUT - ERROR')(' OPEN & OD3 UTPUT TO EACH CHANNEL UNTIL ALL ARE ON')(' CLOSE CHANNELS, OUTD3 PUTS SHOULD TURN OFF')(' TURN ON ALL OUTPUTS, THEN TURN OFF')(D3 ' PULSE EACH OUTPUT IN TURN')(' TRY COMMANDS WITH CHANNELS CLOD3 SED')(' CALL CLOSE AND CHANNELS CLOSED--OK')(' CALL CLOSE - ERD3 ROR')(' CALL OUT AND CHANNELS CLOSED--OK')(' CALL OUT - ERROD3 R')(' CALL OFF AND CHANNELS CLOSED--OK')(' CALL OFF - ERROR'D3 )(' CALL STATUS AND CHANNELS CLOSED-OK')(' CALL STATUS - ERRORD3 ')(' CALL PULSE AND CHANNELS CLOSED--OK')(' CALL PULSE - ERRORD3 ')(' TRY CALL OPEN AND ALREADY OPENED')(' CALL OPEN AND CHANNED3 LS ARE OPEN-OK')(' CALL OPEN - ERROR')('********* TEST COMPLET"3 ED **********')LDCO1DCO2DCO24éé7=FORTRAN D625.TSTDCO.SA,D625.TSTDCO.RO,;A,S,COA,PWI=1207=FORTRAN D625.TSTPR1.SA,D625.TSTPR1.RO,;A,S,COA,PWI=1207=FORTRAN D625.TSTDLY.SA,D625.TSTDLY.RO,;A,S,COA,PWI=120=ENDéééééA éé=LINK ,D625.TSTR.LO,#PR;SHMIXSEG SEG0:9,6,7 $60000 SEG SEG1:8 SEG SEG2:15INPUT D625.TSTDCO.ROINPUT D625.TSTPR1.ROINPUT D625.TSTDLY.ROINPUT D625LIB.ROLIBƒ0..FORTVMC.ROEND=ENDééééééé ,1DELAY FFIX H TSTDLY RO;2i.FMAIN g.FESC7 f.FESC6 IDELAY )j' B3 Hçÿ~Iù, jEù(Mï4%|><dSG5GJGm:%|><^SG5G43 JGm~Þª%Gjlî~Þª%GjlÆLß~ÿNu4ééA éééééééé$,1ERRPR1 FFIX H TSTPR1 ROk2i.FMAIN g.FESC7 f.FESC6 IERRPR1 h.FILST h.FIFNL h.FIINT .FEIOP <)€'X3‰Q( Hçÿ~Iù, fMï43ü,Gì#Ë, 3ü(Aù(N¹(#ü,"#î,&Aù,"3P N¹(N¹(Lß~ÿ _ßüNÐ 3 (' STATUS ERROR-BIT ',I1)4éB éééééééé4'CAOE D605 LGPPB =LINK ,D605.LO,\LINKLS;MIXHSEG DAC1:8 \DR605R INPUT D605.ROINPUT 9999.CAOE.SYSPAR.ROEND=ENDéééééééH'C8OC D605 LG]]=LINK ,D605.LO,\LINKLS;MIXHSEG DAC1:8 \DR605R INPUT D605.ROINPUT 9999.C8OC.SYSPAR.ROEND=ENDééC éééééU' DMSL CDjj“DMSM CDƒƒ OEMLINK CD””˜LINKALL CD­­LINKMAINCD¶¶LINKONLYCD¿¿NETEXG CDÈÈ SNETVME10CDÙÙ HNOLINK CDêêNOLNK CDóó KPRIMARY CD  SPAR1300CD  SPAR400 CD   SPAR800 CD   SYSGEN CF ( (BINET LO iLLOADV2 LO ¶ ‚*******************‚*FILE=DMSL.CDƒ*‚*******************.‚V2OFF…=0ŒVM02Memoryoffset(onbus)-dummy/‚V2SYSP„=0ŒVM02SYSPAR.AGareaaddress-dummy‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚ConfigurationParameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰,‚MAXSEC„=10‹Maximum#ofsecondarystations#‚DLBR†=57600ˆDataLink'sBaudRate)‚FSSTN…=1ŒFirstSecondaryStationNumber&‚SSINC…=1ŒSecondaryStationINCrement!‚TXRTRY„=20‹TransmitRetryCount ‚RCRTRY„=12‹ReceiveRetryCount,‚MXOBF…=7ŒMaximumNumberofOutboundFrames8‚RCTOV…=2ŒReceiveTimeoutValue(1=50Msec)(9/9/83ES)$‚RTRDLY„=15‹RetryDelay(1=50Msec)%‚TXDLY…=0ŒTransmitDelay(1=50Msec)/‚PFDLY…=200ŠPollPoweredOffDelay(1=50Msec)8‚PNDLY…=2ŒPollPoweredOnDelay(1=50Msec)(9/7/83ES)‚TXPDS…=2Œ#ofTransmitPads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†BufferQueueConfigurationParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰ ‚NUMBUF„=100Š#Buffersinqueue4‚SZDBUF„=256ŠSizeofdatablockcontainedinbuffer-‚FQULWM„=25‹FreeQueueUser'sLowWaterMark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&C .SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************4‚MSG‰*SYSTEMGENERATION(SYSGEN)COMMANDFILEFOR*'‚MSG‰*„VM02BOARDINEXORMACSCHASSIS—*@‚MSG‰***********************************************************‚MSG‰@‚MSG‰***********************************************************!‚MSG‰*ŠRMS68KSYSGENPARAMETERS—*@‚MSG‰***********************************************************‚MSG‰‚GST‡=0ŒNO.OFPAGESINGSTb7k?s‚UST‡=0ŒNO.OFPAGESINUST‚UDR‡=1ŒNO.OFPAGESINUDR'‚TRACE…=10‹NO.OFPAGESINTRACETABLE(‚IOV‡=0ŒNO.OFPAGESINIOVECTORTABLE*‚PAT‡=2ŒSIZEOFPERIODICACTIVATIONTABLE‚TRCFLAGƒ=$0000ˆTRACEFLAGS‚BUGTRACƒ=$F00F3A‚MMU‡=0ŒMMUADDRESS‚TIMER…=$F70000†TIMERADDR.‚CLOCKFRQ‚=800ŠCLOCKFREQUENCY ‚TIMSLICƒ=2 ‚TIMINTVƒ=10‚PANEL…=0ŒFRONTPANELADDR.0‚MEMEND1ƒ=$20000‡MAXIMUMENDOFON-BOARDMEMORY ‚MEMEND2ƒ=0 ‚MEMEND3ƒ=0‚WHERLOAD‚=$0 ‚PCˆ=\RMS0LO‚PROCESS…NETVM02.RMS.LO+‚=COPY‡9999.NETVM02.RMS.LO,NETVM02.RMS.LO;Y&‚=COPY‡9999.NETVM02.RMS.LL,SYSASM.LS;A‚END‰RMS ‚MEMBEG„=*‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*2‚MSG‰*†LinkInitializationTask---VM02.INET.LOŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰?‚V2G1IR1ƒ=$1FFE2‡*Group2,IRQ1VectorNumberAddress(Word)?‚V2G1IR2ƒ=$1FFE4‡*Group2,IRQ2VectorNumberAddress(Word)?‚V2G1IR3ƒ=$1FFE6‡*Group2,IRQ3VectorNumberAddress(Word)?‚V2G1IR4ƒ=$1FFE8‡*Group2,IRQ4VectorNumberAddress(Word)?‚V2G1IR5ƒ=$1FFEA‡*Group2,IRQ5VectorNumberAddress(Word)?‚V2G1IR6ƒ=$1FFEC‡*Group2,IRQ6VectorNumberAddress(Word)‚SUBSˆVM02.VEC7201.AG0‚ASM‰VM02.VEC7201.AG,VM02.VEC7201.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚TASKˆVM02.INET.LO,INET ‚SESSIONƒ=10‚V2BSTR„=*ŒINETV2LoadAddress‚SUBSˆGEN.INETV2.LG‚STATE…='READ'‚PRIORITY‚=$C8‚LINKˆGEN.INETV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚END‰INETV2‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*$‚MSG‰*ŒSTARTOFSYSTEMINITIALIZER’*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰ ‚PROCESS…INIT ‚INTSTR„=*1‚KILVECTƒ=142ŠKillerroutine-unassignedvector‚SERPTS„=140ŠSerialports-BIOS‚PTMVECTƒ=28‹PTM-timer‚BCLRV…=142ŠBCLRVIRQroutine%‚FAIL†=141ŠSYSFAIL-POWERFAILroutine3‚DPRVAO„=0ŒDualportedRAMVERSAdosaddressoffset‚SWABRT„=31‹Softwareabort2‚IOCVEC4ƒ=146ŠIRQ5-I/Ochannelinterruptlevel42‚IOCVEC3ƒ=145ŠIRQ4-I/Ochannelinterruptlevel32‚IOCVEC2ƒ=144ŠIRQ3-I/Ochannelinterruptlevel22‚IOCVEC1ƒ=143ŠIRQ2-I/Ochannelinterruptlevel18‚HOGMODEƒ=0ŒDon'tkeepVERSAbusinblocktransfermode.4‚PAGESIZE‚=256ŠSizeinbytesofonepageofmemory."‚ASN‡=0ŒNumberofaddressspaces.)‚LINKLS„="&.SYSGEN.TF"Linklistingfile D‚SUBSˆ9999.M68XXX.INITDAT.AG,9999.VM02.INITIO.AG,9999.NETVM02.INT.LG 6‚ASM‰M68XXX.INITDAT.AG,M68XXX.INITDAT.RO,&.SYSGEN.TF;R ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LG;A .‚ASM‰VM02.INITIO.AG,VM02.INITIO.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚LINKˆNETVM02.INT.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚END‰SINTV2 ‚MSG‰@‚MSG‰***********************************************************‚MSG‰*ŠENDƒOF‚SYSGEN—*@‚MSG‰***********************************************************‚MSG‰*¹*3‚MSG‰*„WENOWHAVEASYSTEMFILECALLEDƒNETV2B.SY‰*‚MSG‰*¹*@‚MSG‰***********************************************************D ééé‚******************‚*FILEDMSM.CDƒ*‚******************,‚V2OFF…=$FC0000†VM02Memoryoffset(onbus)+‚V2SYSP„=$1500ˆVM02SYSPAR.AGareaaddress‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚*‚*‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*:‚MSG‰*†LinkLOADV2Task---LOADV2.LO‚(BootsVM02board)*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.LOADV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚ConfigurationParameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰,‚MAXSEC„=10‹Maximum#ofsecondarystations#‚DLBR†=57600ˆDataLink'sBaudRate)‚FSSTN…=1ŒFirstSecondaryStationNumber&‚SSINC…=1ŒSecondaryStationINCrement!‚TXRTRY„=20‹TransmitRetryCount ‚RCRTRY„=12‹ReceiveRetryCount,‚MXOBF…=7ŒMaximumNumberofOutboundFrames,‚RCTOV…=8ŒReceiveTimeoutValue(1=50Msec)$‚RTRDLY„=15‹RetryDelay(1=50Msec)%‚TXDLY…=0ŒTransmitDelay(1=50Msec)/‚PFDLY…=200ŠPollPoweredOffDelay(1=50Msec),‚PNDLY…=1ŒPollPoweredOnDelay(1=50Msec)‚TXPDS…=16‹#ofTransmitPads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*2‚MSG‰*†NetworkServicesConfigurationParametersŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰&‚MAXLNAUƒ=10‹Maximum#oflocalNAU's=‚MAXNAMEƒ=30‹Maximum#ofNetworkNames(ifprimary-maxin ‚*˜network)/‚MAXCONNƒ=$20ŠMaximum#ofLogicalConnections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†BufferQueueConfigurationParametersŽ*‚MSG‰*¹*{>„@‚MSG‰***********************************************************‚MSG‰ ‚NUMBUF„=100Š#Buffersinqueue4‚SZDBUF„=256ŠSizeofdatablockcontainedinbuffer-‚FQULWM„=25‹FreeQueueUser'sLowWaterMark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*-‚MSG‰*†LinkInitializationTask---INET.LO*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.INET.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚END‰éD éééé‚*******************‚*FILE=EMLINK.CD*‚*******************.‚V2OFF…=0ŒVM02Memoryoffset(onbus)-dummy/‚V2SYSP„=0ŒVM02SYSPAR.AGareaaddress-dummy‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚ConfigurationParameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚*;‚*‹TheparameterMAXSECshouldbeequaltotwicethenumber'‚*‹ofHDS400sthatyouwantconfigured.‚*+‚MAXSEC„=2ŒMaximum#ofsecondarystations#‚DLBR†=57600ˆDataLink'sBaudRate)‚FSSTN…=1ŒFirstSecondaryStationNumber&‚SSINC…=1ŒSecondaryStationINCrement!‚TXRTRY„=20‹TransmitRetryCount ‚RCRTRY„=12‹ReceiveRetryCount,‚MXOBF…=7ŒMaximumNumberofOutboundFrames,‚RCTOV…=8ŒReceiveTimeoutValue(1=50Msec)$‚RTRDLY„=15‹RetryDelay(1=50Msec)%‚TXDLY…=0ŒTransmitDelay(1=50Msec)/‚PFDLY…=200ŠPollPoweredOffDelay(1=50Msec),‚PNDLY…=1ŒPollPoweredOnDelay(1=50Msec)‚TXPDS…=16‹#ofTransmitPads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†BufferQueueConfigurationParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚NUMBUF„=50‹#Buffersinqueue4‚SZDBUF„=256ŠSizeofdatablockcontainedinbuffer-‚FQULWM„=25‹FreeQueueUser'sLowWaterMark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************4‚MSG‰*SYSTEMGENERATION(SYSGEN)COMMANDFILEFOR*'‚MSG‰*„VM02BOARDINEXORMACSCHASSIS—*@‚MSG‰***********************************************************‚MSG‰@‚MSG‰***********************************************************!‚MSG‰*ŠRMS68KSYSGENPARAMETERS—*Œ8•@!@‚MSG‰***********************************************************‚MSG‰‚GST‡=0ŒNO.OFPAGESINGST‚UST‡=0ŒNO.OFPAGESINUST‚UDR‡=1ŒNO.OFPAGESINUDR'‚TRACE…=10‹NO.OFPAGESINTRACETABLE(‚IOV‡=0ŒNO.OFPAGESINIOVECTORTABLE*‚PAT‡=2ŒSIZEOFPERIODICACTIVATIONTABLE‚TRCFLAGƒ=$0000ˆTRACEFLAGS‚BUGTRACƒ=$F00F3A‚MMU‡=0ŒMMUADDRESS‚TIMER…=$F70000†TIMERADDR.‚CLOCKFRQ‚=800ŠCLOCKFREQUENCY ‚TIMSLICƒ=2 ‚TIMINTVƒ=10‚PANEL…=0ŒFRONTPANELADDR.0‚MEMEND1ƒ=$20000‡MAXIMUMENDOFON-BOARDMEMORY ‚MEMEND2ƒ=0 ‚MEMEND3ƒ=0‚WHERLOAD‚=$0 ‚PCˆ=\RMS0LO‚PROCESS…NETVM02.RMS.LO+‚=COPY‡9999.NETVM02.RMS.LO,NETVM02.RMS.LO;Y&‚=COPY‡9999.NETVM02.RMS.LL,SYSASM.LS;A‚END‰RMS ‚MEMBEG„=*‚MSG‰@‚MSG‰*******************E ****************************************‚MSG‰*¹*2‚MSG‰*†LinkInitializationTask---VM02.INET.LOŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰?‚V2G1IR1ƒ=$1FFE2‡*Group2,IRQ1VectorNumberAddress(Word)?‚V2G1IR2ƒ=$1FFE4‡*Group2,IRQ2VectorNumberAddress(Word)?‚V2G1IR3ƒ=$1FFE6‡*Group2,IRQ3VectorNumberAddress(Word)?‚V2G1IR4ƒ=$1FFE8‡*Group2,IRQ4VectorNumberAddress(Word)?‚V2G1IR5ƒ=$1FFEA‡*Group2,IRQ5VectorNumberAddress(Word)?‚V2G1IR6ƒ=$1FFEC‡*Group2,IRQ6VectorNumberAddress(Word)‚SUBSˆVM02.VEC7201.AG0‚ASM‰VM02.VEC7201.AG,VM02.VEC7201.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚TASKˆVM02.INET.LO,INET ‚SESSIONƒ=10‚V2BSTR„=*ŒINETV2LoadAddress‚SUBSˆGEN.INETV2.LG‚STATE…='READ'‚PRIORITY‚=$C8‚LINKˆGEN.INETV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚END‰INETV2‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*$‚MSG‰*ŒSTARTOFSYSTEMINITIALIZER’*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰ ‚PROCESS…INIT ‚INTSTR„=*1‚KILVECTƒ=142ŠKillerroutine-unassignedvector‚SERPTS„=140ŠSerialports-BIOS‚PTMVECTƒ=28‹PTM-timer‚BCLRV…=142ŠBCLRVIRQroutine%‚FAIL†=141ŠSYSFAIL-POWERFAILroutine3‚DPRVAO„=0ŒDualportedRAMVERSAdosaddressoffset‚SWABRT„=31‹Softwareabort2‚IOCVEC4ƒ=146ŠIRQ5-I/Ochannelinterruptlevel42‚IOCVEC3ƒ=145ŠIRQ4-I/Ochannelinterruptlevel32‚IOCVEC2ƒ=144ŠIRQ3-I/Ochannelinterruptlevel22‚IOCVEC1ƒ=143ŠIRQ2-I/Ochannelinterruptlevel18‚HOGMODEƒ=0ŒDon'tkeepVERSAbusinblocktransfermode.3‚PAGESIZE‚=256ŠSizeinbytesofonepageofmemory!‚ASN‡=0ŒNumberofaddressspaces)‚LINKLS„="&.SYSGEN.TF"Linklistingfile D‚SUBSˆ9999.M68XXX.INITDAT.AG,9999.VM02.INITIO.AG,9999.NETVM02.INT.LG 6‚ASM‰M68XXX.INITDAT.AG,M68XXX.INITDAT.RO,&.SYSGEN.TF;R ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A .‚ASM‰VM02.INITIO.AG,VM02.INITIO.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚LINKˆNETVM02.INT.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚END‰INTV2 ‚MSG‰@‚MSG‰***********************************************************‚MSG‰*ŠENDƒOF‚SYSGEN—*@‚MSG‰***********************************************************‚MSG‰*¹*3‚MSG‰*„WENOWHAVEASYSTEMFILECALLEDƒNETV2B.SY‰*‚MSG‰*¹*@‚MSG‰***********************************************************ééé‚*********************‚*FILE=LINKALL.CD‚*‚*********************‚SYSTYPE‚="LINKALL"‚*ééE éééé饂*********************‚*FILE=LINKMAIN.CD*‚*********************‚SYSTYPE‚="LINKMAIN"‚*éééééé鮂*********************‚*FILE=LINKONLY.CD*‚*********************‚SYSTYPE‚="LINKONLY"‚*F ééééééé·‚******************‚*FILENETEXG.CD*‚******************,‚V2OFF…=$FC0000†VM02Memoryoffset(onbus)+‚V2SYSP„=$1500ˆVM02SYSPAR.AGareaaddress‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚*‚*‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*:‚MSG‰*†LinkLOADV2Task---LOADV2.LO‚(BootsVM02board)*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.LOADV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚ConfigurationParameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚*;‚*‹TheparameterMAXSECshouldbeequaltotwicethenumber'‚*‹ofHDS400sthatyouwantconfigured.‚*+‚MAXSEC„=2ŒMaximum#ofsecondarystations#‚DLBR†=57600ˆDataLink'sBaudRate)‚FSSTN…=1ŒFirstSecondaryStationNumber&‚SSINC…=1ŒSecondaryStationINCrement!‚TXRTRY„=20‹TransmitRetryCount‚RCRTRY„=4ŒReceiveRetryCount,‚MXOBF…=7ŒMaximumNumberofOutboundFrames,‚RCTOV…=8ŒReceiveTimeoutValue(1=50Msec)$‚RTRDLY„=15‹RetryDelay(1=50Msec)%‚TXDLY…=0ŒTransmitDelay(1=50Msec)/‚PFDLY…=200ŠPollPoweredOffDelay(1=50Msec),‚PNDLY…=1ŒPollPoweredOnDelay(1=50Msec)‚TXPDS…=2Œ#ofTransmitPads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*2‚MSG‰*†NetworkServicesConfigurationParametersŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰&‚MAXLNAUƒ=10‹Maximum#oflocalNAU's=‚MAXNAMEƒ=30‹Maximum#ofNetworkNames(ifprimary-maxin ‚*˜network).‚MAXCONNƒ=20‹Maximum#ofLogicalConnections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰F À>É@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†BufferQueueConfigurationParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚NUMBUF„=50‹#Buffersinqueue4‚SZDBUF„=256ŠSizeofdatablockcontainedinbuffer,‚FQULWM„=7ŒFreeQueueUser'sLowWaterMark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*-‚MSG‰*†LinkInitializationTask---INET.LO*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.INET.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚END‰ééééé‚********************‚*FILENETVME10.CD*‚********************‚MSG‰‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚ConfigurationParameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰+‚MAXSEC„=2ŒMaximum#ofsecondarystations#‚DLBR†=57600ˆDataLink'sBaudRate)‚FSSTN…=1ŒFirstSecondaryStationNumber&‚SSINC…=1ŒSecondaryStationINCrement!‚TXRTRY„=20‹TransmitRetryCount‚RCRTRY„=4ŒReceiveRetryCount,‚MXOBF…=7ŒMaximumNumberofOutboundFrames,‚RCTOV…=8ŒReceiveTimeoutValue(1=50Msec)$‚RTRDLY„=15‹RetryDelay(1=50Msec)%‚TXDLY…=0ŒTransmitDelay(1=50Msec)/‚PFDLY…=200ŠPollPoweredOffDelay(1=50Msec),‚PNDLY…=1ŒPollPoweredOnDelay(1=50Msec)‚TXPDS…=2Œ#ofTransmitPads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*2‚MSG‰*†NetworkServicesConfigurationParametersŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰&‚MAXLNAUƒ=10‹Maximum#oflocalNAU's=‚MAXNAMEƒ=30‹Maximum#ofNetworkNames(ifprimary-maxin ‚*˜network).‚MAXCONNƒ=20‹Maximum#ofLogicalConnections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†BufferQueueConfigurationParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚NUMBUF„=50‹#Buffersinqueue4‚SZDBUF„=256ŠSizeofdatablockcontainedinbuffer,‚FQULWM„=7ŒFreeQueueUser'sLowWaterMark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQG .AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*-‚MSG‰*†LinkInitializationTask---INET.LO*‚MSG‰*¹*Ñ;Ú@‚MSG‰***********************************************************‚MSG#‚IOCVEC1ƒ=$41Š*IRQ1VectorNumber#‚IOCVEC2ƒ=$43Š*IRQ2VectorNumber#‚IOCVEC3ƒ=$44Š*IRQ3VectorNumber#‚IOCVEC4ƒ=$45Š*IRQ4VectorNumberD‚VEC7201ƒ=\IOCVEC4…*NEC7201isstrappedfortheIRQ4Vectoronthe ‚*˜MVME400‚SUBSˆVMES10.VEC7201.AG4‚ASM‰VMES10.VEC7201.AG,VMES10.VEC7201.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚LINKˆGEN.INETVME1.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚ENDéééééé‚*********************‚*FILE=NOLINK.CDƒ*‚*********************‚SYSTYPE‚="NOLINK"‚*éééééG ééâ‚******************‚*FILE=NOLINK.CD*‚******************,‚V2OFF…=$FC0000†VM02Memoryoffset(onbus)+‚V2SYSP„=$1500ˆVM02SYSPAR.AGareaaddress‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;AB‚MSG‰*************************************************************‚MSG‰*»*&‚MSG‰*†SDLC‚ConfigurationParameters—*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰+‚MAXSEC„=3ŒMaximum#ofsecondarystations#‚DLBR†=57600ˆDataLink'sBaudRate)‚FSSTN…=1ŒFirstSecondaryStationNumber&‚SSINC…=1ŒSecondaryStationINCrement ‚TXRTRY„=8ŒTransmitRetryCount‚RCRTRY„=4ŒReceiveRetryCount,‚MXOBF…=7ŒMaximumNumberofOutboundFrames,‚RCTOV…=4ŒReceiveTimeoutValue(1=50Msec)$‚RTRDLY„=15‹RetryDelay(1=50Msec)%‚TXDLY…=0ŒTransmitDelay(1=50Msec)/‚PFDLY…=200ŠPollPoweredOffDelay(1=50Msec),‚PNDLY…=1ŒPollPoweredOnDelay(1=50Msec)‚TXPDS…=2Œ#ofTransmitPads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰B‚MSG‰*************************************************************‚MSG‰*»*2‚MSG‰*†NetworkServicesConfigurationParametersŒ*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰&‚MAXLNAUƒ=20‹Maximum#oflocalNAU's=‚MAXNAMEƒ=30‹Maximum#ofNetworkNames(ifprimary-maxin ‚*˜network).‚MAXCONNƒ=20‹Maximum#ofLogicalConnections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰B‚MSG‰*************************************************************‚MSG‰*»*.‚MSG‰*†BufferQueueConfigurationParameters*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰‚NUMBUF„=50‹#Buffersinqueue4‚SZDBUF„=256ŠSizeofdatablockcontainedinbuffer,‚FQULWM„=7ŒFreeQueueUser'sLowWaterMark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰ë:ôB‚MSG‰*************************************************************‚MSG‰*»*-‚MSG‰*†LinkInitializationTask---INET.LO‘*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰?‚V2G1IR1ƒ=$1FFE2‡*Group2,IRQ1VectorNumberAddress(Word)?‚V2G1IR2ƒ=$1FFE4‡*Group2,IRQ2VectorNumberAddress(Word)?‚V2G1IR3ƒ=$1FFE6‡*Group2,IRQ3VectorNumberAddress(Word)?‚V2G1IR4ƒ=$1FFE8‡*Group2,IRQ4VectorNumberAddress(Word)?‚V2G1IR5ƒ=$1FFEA‡*Group2,IRQ5VectorNumberAddress(Word)?‚V2G1IR6ƒ=$1FFEC‡*Group2,IRQ6VectorNumberAddress(Word)‚SUBSˆVM02.VEC7201.AG0‚ASM‰VM02.VEC7201.AG,VM02.VEC7201.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚LINKˆGEN.INETNOL.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚ENDH éééé‚*********************‚*FILE=PRIMARY.CD‚*‚*********************‚STATION‚="PRIMARY"‚*éééééééü‚********************‚*FILE=SPAR1300.CD*‚********************‚*OldfilenamewasSYSPARSE‚*ƒRunsonaVM02systemwithNETBUG(firmwaretohandledownloading)@‚***************************************************************8‚*SYSPARparameters-VM02systemactingasSDLClink‰*@‚***************************************************************3‚RMS0LO„=$1700ˆRMSbootheader(Seg0lowaddress)‚STACK…=$1500L‚STARTRMS‚=\RMS0LO+$100‚BeginningofRMScode-(Onesectoraboveboothdr)‚=DELˆ&.SYSPAR.RO(‚=COPY‡9999.C13O15.SYSPAR.RO,&.SYSPAR.RO H ééééé ‚*******************‚*FILE=SPAR400.CD*‚*******************‚*OldfilenamewasSYSPAR#‚*ƒRunsonanormalEXORmacssystem@‚***************************************************************(‚*SYSPARparameters-EXORmacssystem™*@‚***************************************************************‚=DELˆ&.SYSPAR.RO&‚=COPY‡9999.C4O9.SYSPAR.RO,&.SYSPAR.RO éééééé  ‚*******************‚*FILE=SPAR800.CD*‚*******************‚*OldfilenamewasSYSPARV4‚*ƒRunsonaVM02systemwithouttheNETBUGfirmware@‚***************************************************************>‚*SYSPARparameters-VM02systemactI ingasphoneyEXORmacsƒ*@‚***************************************************************‚=DELˆ&.SYSPAR.RO&‚=COPY‡9999.C8OC.SYSPAR.RO,&.SYSPAR.RO éééééé   =OPT K,-N=/*********************=/*SYSGEN.CF‰*ƒMnemonic=\1=/*********************=USE :.&=OPT N=OPT O$=/* Options used in this chain file:?=/*‡J-InhibitSBARGechoingofcommandsreadfromchainfile.3=/*‡K-Inhibittranslationoflowertouppercase.,=/*‡N-Inhibitechoofchainfilecommands.A=/*‡O-Overrideschainfileabortwhenutilityerrorterminates.=/*=/*==/*Insuretwoarguments.‚Secondargumentdefaultsto'#NULL'=/*=/RX=\0 =/IF RX = 0 ƒ=ARGNOARGƒ=/RX=\0=/ENDIF =/IF RX = 1ƒ=ARG\1,#NULLƒ=/RX=\0=/ENDIF =/IF RX > 2ƒ=ARG‚NOARG,#NULL=/ENDIF=/*$=/* See if we have a valid mnemonic.2=/*ƒIfnotavalidmnemonic,putouthelpmessage.=/RX=0=/IFEQ "GMADPRI"\1ƒ=/RX=1=/ENDIF=/IFEQ "GMADSEC"\1ƒ=/RX=1=/ENDIF=/IFEQ "HDS4PRI"\1ƒ=/RX=1=/ENDIF=/IFEQ "HDS4SEC"\1ƒ=/RX=1=/ENDIF=/IFEQ "VME10PRI"\1ƒ=/RX=1=/ENDIF=/IFEQ "EXOR/MULTI/UTIL/DMS"\1ƒ=/RX=1=/ENDIF=/IFEQ "EXOR/MULTI/LINK/DMS"\1ƒ=/RX=1=/ENDIF"=/IFEQ "EXOR/SINGLE/UTIL/NOLINK"\1ƒ=/RX=1=/ENDIF"=/IFEQ "VM02/SINGLE/UTIL/NOLINK"\1ƒ=/RX=1=/ENDIF=/IFEQ "VME10/LINK"\1ƒ=/RX=1=/ENDIF=/IFEQ "EXOR/MULTI/UTIL/HDS"\1ƒ=/RX=1=/ENDIF=/IFEQ "EXOR/MULTI/LINK/HDS"\1ƒ=/RX=1=/ENDIF=/* =/IF RX=0ƒ=OPT-Nƒ=/*‘***HELPMESSAGE***ƒ=/*7ƒ=/*Noargumentoraninvalidargumentwasspecified-=ƒ=/*ƒThischainfilemustberestartedwithavalidargument.3ƒ=/*ƒAdescriptionofthecallingsequencefollows.<ƒ=/*ƒTypetocontinueafteraframehasbeendisplayed.ƒ=/*ƒ=/*Callingsequence:ƒ=/*ƒ=SYSGEN.CFarg1,arg2ƒ=/*ƒ=/*†arg1†=Mnemonicƒ=/*†arg2†=Outputfile/deviceDƒ=/*ƒArg1isoptional.‚Ifnotspecified,ahelpmessagewillappear.Aƒ=/*ƒArg2willtypicallybe'#NULL'or'#PR'-defaultsto#NULL.ƒ=/&ƒ=/*1ƒ=/*SYSGEN.CFwillperformthesysgenassociated!ƒ=/*„withthespecifiedmnemonic.ƒ=/*2ƒ=/*Themnemonic(arg1)isofthefollowingform:I  [ ). 1, 9/ A4 I@ QI YH a4ƒ=/*„system/processormode/outputtype/qualificationƒ=/*'ƒ=/*Example:‚arg1=EXOR/MULTI/UTIL/HDSƒ=/*5ƒ=/*Thiswouldgenjusttheutilities(LOADV2.LOand)ƒ=/*INET.LOtorunonanEXORmacssystem/ƒ=/*inthemulti-processormode(VM02boardin5ƒ=/*thesamechassistoperformlink).‚Thequalifier6ƒ=/*oftestwoulddistinguishitasaparticulartest6ƒ=/*configuration.ThesystemwouldbeforanHDS400.ƒ=/&ƒ=/*ƒ=/*LegalMnemonics:ƒ=/*†"GMADPRI"4ƒ=/*ŠPreparetheSDLCGMADprimarystationsoftware.:ƒ=/*ŠFouruser-initiatedstepsarerequired.‚One,runthis;ƒ=/*Šchainfilewith"GMADPRI"option.‚Itwillgeneratethe9ƒ=/*ŠproperSDLCobjectfilefortheGMADprimarystation3ƒ=/*Šenvironment.‚Two,runtheSYSGEN.CFchainfile/ƒ=/*ŠwithoptionEXOR/MULTI/LINK/DMSwhichwill;ƒ=/*ŠcreatetheVM02loadimagefileNETV2B.SY.‚Three,copy<ƒ=/*Šthisloadimagefiletouser0,NOCATALOGNAME,ofthe=ƒ=/*ŠGMADsystem.‚Four,re-IPLtheGMADsystem(loadsthenew:ƒ=/*ŠNETV2B.SYmoduleintotheVM02andbeginsexecution).ƒ=/*Stationtypeˆ=primaryƒ=/*MPUtypeŒ=68000ƒ=/*Residentboardtype=VM02ƒ=/&ƒ=/*†"GMADSEC";ƒ=/*ŠPreparetheSDLCGMADsecondarystationsoftware.‚Four;ƒ=/*Šuser-initiatedstepsarerequired.‚One,runthischain9ƒ=/*Šfilewiththe"GMADSEC"option.‚Itwillgeneratethe;ƒ=/*ŠproperSDLCobjectfilefortheGMADsecondarystation6ƒ=/*Šenvironment.‚Two,copytheSDLCSEC.ROobjectfile=ƒ=/*Š(whichthischainfilejustcreated)totheGMADsystem.=ƒ=/*ŠThree,runtheGEN.CFchainfileonthatsystemwiththe=ƒ=/*ŠargumentPSDLcreatingthesecondarystationloadmodule;ƒ=/*ŠPSDL.PSDL.SYcontainingthenewSDLCdriver.‚Four,re-;ƒ=/*Šsetthesecondarystation(s)causingadownloadofthe"ƒ=/*Šnewdriverintoeachofthem.ƒ=/*Stationtypeˆ=secondaryƒ=/*MPUtypeŒ=68000ƒ=/*Residentboardtype=VM02ƒ=/&ƒ=/*†"HDS4PRI"7ƒ=/*ŠPreparetheSDLCHDS-400primarystationsoftware.:ƒ=/*ŠFouruser-initiatedstepsarerequired.‚One,runthis;ƒ=/*Šchainfilewith"HDS4PRI"option.‚Itwillgeneratethe<ƒ=/*ŠproperSDLCobjectfilefortheHDS-400primarystation3ƒ=/*Šenvironment.‚Two,runtheSYSGEN.CFchainfile/ƒ=/*ŠwithoptionEXOR/MULTI/LINK/HDSwhichwill;ƒ=/*ŠcreatetheVM02loadimagefileNETV2B.SY.‚Three,copy<ƒ=/*Šthisloadimagefiletouser0,NOCATALOGNAME,ofthe=ƒ=/*ŠHDS-400hostingsystem.‚Four,re-IPLtheHDS-400hosting=ƒ=/*Šsystem(loadsthenewNETV2B.SYmoduleintotheVM02andƒ=/*Šbeginsexecution).ƒ=/*Stationtypeˆ=primaryƒ=/*MPUtypeŒ=68000ƒ=/*Residentboardtype=VM02ƒ=/&ƒ=/*†"HDS4SEC"9ƒ=/*ŠPreparetheSDLCHDS-400secondarystationsoftware.9ƒ=/*ŠTwouser-initiatedstepsarerequired.‚One,runthis:ƒ=/*ŠchainfilewhichwillgeneratetheproperSDLCobject8ƒ=/*ŠfilefortheHDS-400secondarystationenvironment.9ƒ=/*ŠTwo,incorporatethenewSDLCobjectmoduleintothe1ƒ=/*ŠHDS-400system.(SeeHDS-400documentation).ƒ=/*Stationtypeˆ=secondaryƒ=/*MPUtypeŒ=68000ƒ=/*Residentboardtype=VM02ƒ=/&ƒ=/*†"VME10PRI"6ƒ=/*ŠPreparetheSDLCVME/10primarystationsoftware.:ƒ=/*ŠFouruser-initiatedstepsarerequired.‚One,runthis:ƒ=/*ŠchainfilewhichwillgeneratetheproperSDLCobject:ƒ=/*ŠfilefortheVME/10primarystationenvironment.‚Two,?ƒ=/*ŠruntheSYSGEN.CFchainfilewiththe"VME10/LINK"option.;ƒ=/*ŠThiswillgeneratetheVMES10.INET.LOmoduleneededto?ƒ=/*Šinitiatenewworkservices/SDLC.‚Three,moveVMES10.INET.LO9ƒ=/*ŠtothetargetVMES10system.‚Four,reboottheVMES10(ƒ=/*Šsystemtoexecutethenewsoftware.ƒ=/*Stationtypeˆ=primaryƒ=/*MPUtypeŒ=68010"ƒ=/*Residentboardtype=MVME400ƒ=/&ƒ=/*†"EXOR/MULTI/UTIL/J DMS"Aƒ=/*ŠRunsonanEXORmacssystemasprimarystation.‚Asof1-11-835ƒ=/*ŠitcontainedtheversionofNWCTwhichcontainedƒ=/*Šuploadlogic.;ƒ=/*ŠThesystemisassumedtohaveaVM02boardinthesame>ƒ=/*ŠchassistoperformtheSDLClink.‚Thissysgenwillrunonƒ=/*ŠaGMADDMSsystem:<ƒ=/*ŒLOADV2.LOƒ-LoadstheVM02withtheSDLClinksoftware.;ƒ=/*ŒINET.LO…-InitializesnetworkservicesontheEXORmacs ƒ=/*œboard.ƒ=/*ƒ=/&ƒ=/*†"EXOR/MULTI/LINK/DMS">ƒ=/*‹RunsonanEXORmacssystemontheon-boardVM02.‚Contains<ƒ=/*‹the‚SDLClinksoftware.‚ThesysgenwouldbeforanGMAD8ƒ=/*‹DMS.Thisoptionwouldproducethefollowingfiles:5ƒ=/*NETV2B.SY‚-Bootfilefortheon-boardVM02thatƒ=/*handlestheSDLClink.ƒ=/&ƒ=/*†"EXOR/SINGLE/UTIL/NOLINK"<ƒ=/*ŠRunsinanEXORmacssystemwithnoSDLClink.Taskscan=ƒ=/*Šcommunicatewitheachothervianetworkservicesrequest;ƒ=/*Šhowever.‚Thisoptionwillproducethefollowingfiles:1ƒ=/*ŒINET.LO‡-Initializationutilitytobringupƒ=/*žnetworkservices.ƒ=/&ƒ=/*†"VM02/SINGLE/UTIL/NOLINK"8ƒ=/*ŠRunsinanVM02systemwithnoSDLClink.Taskscan=ƒ=/*Šcommunicatewitheachothervianetworkservicesrequest;ƒ=/*Šhowever.‚Thisoptionwillproducethefollowingfiles:1ƒ=/*ŒINET.LO‡-Initializationutilitytobringupƒ=/*žnetworkservices.ƒ=/*ƒ=/&ƒ=/*†"VME10/LINK"4ƒ=/*ŠRunsinaVME/10systemastheprimarystation.;ƒ=/*VMES10.INET.LO-LoadModulewhichstartsandrunsthe+ƒ=/*žNTSandSDLCprimarystationsoftware.ƒ=/*ƒ=/&ƒ=/*†"EXOR/MULTI/UTIL/HDS"3ƒ=/*ŠRunsonanEXORmacssystemasprimarystation.;ƒ=/*ŠThesystemisassumedtohaveaVM02boardinthesame>ƒ=/*ŠchassistoperformtheSDLClink.‚Thesysgenwouldbefor>ƒ=/*ŠanHDS400.‚Thisoptionwouldproducethefollowingfiles:<ƒ=/*ŒLOADV2.LOƒ-LoadstheVM02withtheSDLClinksoftware.;ƒ=/*ŒINET.LO…-InitializesnetworkservicesontheEXORmacs ƒ=/*œboard.>ƒ=/*ŠNotethattheparameter'MAXSEC'thatappearsinthefile9ƒ=/*ŠNETEXG.CDshouldbesetequaltotwicethenumberof-ƒ=/*ŠHDS400systemsthatyouwantconfigured.=ƒ=/*ŠTheEXORmacssysgencommandfile9998.EXORMACS.SYSCMD.CD=ƒ=/*Šshouldhave'NOTNT'setequalto5inordertoconfigureƒ=/*ŠforHDS400.ƒ=/&ƒ=/*†"EXOR/MULTI/LINK/HDS">ƒ=/*ŠRunsonanEXORmacssystemontheon-boardVM02.‚Contains?ƒ=/*Šthe‚SDLClinksoftware.‚ThesysgenwouldbeforanHDS400.3ƒ=/*ŠThisoptionwouldproducethefollowingfiles.5ƒ=/*ŒNETV2B.SY‚-Bootfilefortheon-boardVM02thatƒ=/*handlestheSDLClink.>ƒ=/*ŠNotethattheparameter'MAXSEC'thatappearsinthefile9ƒ=/*ŠEMLINK.CDshouldbesetequaltotwicethenumberof-ƒ=/*ŠHDS400systemsthatyouwantconfigured.=ƒ=/*ŠTheEXORmacssysgencommandfile9998.EXORMACS.SYSCMD.CD=ƒ=/*Šshouldhave'NOTNT'setequalto5inordertoconfigureƒ=/*ŠforHDS400.ƒ=/&ƒ=NOARGƒ=@END=/ENDIF=/*E=/* There are four possible flavors of SYSPAR depending on the systemC=/*ƒwearerunningon.‚AnappropriateversionofaSPARxxxx.CDfileC=/*ƒismergedintothesysgencommandfilepriortothesysgen.‚TheE=/*ƒfilenamedependsonthelocationofCRASHSAVinthesystemweare1=/*ƒperformingthesysgenfor.‚Thefilenamesare:=/*<=/*Œ&.SPAR400.CDƒ-RunsandanEXORmacsboardinanEXORmacs=/*›chassis.‚CRASHSAVat$400.=/*8=/*Œ&.SPAR1300.CD‚-RunsonaVM02boardwiththeNETbug+=/*›(download)firmware.‚CRASHSAVat$1300.=/*:=/*Œ&.SPAR800.CDƒ-RunsonaVM02boardwithouttheNETbug*=/*›(download)firmware.‚CRASHSAVat$800.=/*=/*=/*F=/*Therearetwopossibilitiesforstationtype.‚TheappropriatefileC=/*ƒismergedintotheSYSGENcommandfilepriortoperformingthe=/*ƒsysgen.‚Thefilenamesare:=/*,=/*Œ&.PRIMARY.CDƒ-Runsonaprimarysystem.=/*-=/*Œ&.SECOND.CD„-Runsonasecondarysystem.=/*=/*I=/*Therearefourpossiblelinkoptionsasexplainedbelow.‚AparticularF=/*ƒJ optionisselectedbymergingtheafilewiththesamenameastheF=/*ƒoptionandextensionof'CD'intothesysgencommandfilepriorto=/*ƒthesysgen.=/*:=/*ŒLINKMAIN-‚Mainboardinamulti-processormode.‚Other#=/*šboardinchassisperformslink.2=/*ŒLINKONLY-‚Linkboardinmulti-processormode.<=/*ŒLINKALL‚-‚VMboardandVME/10systeminsingleprocessor!=/*˜modehandlingtheirownlink.>=/*ŒNOLINKƒ-‚Networkserviceswithnolinktoanotherstation.=/*D=/* Cross reference with major '.CD' files and associated link files=/*%=/*„&.NETEXG.CD•"EXOR/MULTI/UTIL/HDS"#=/*„&.DMSM.CD—"EXOR/MULTI/UTIL/DMS"=/*‡GEN.LOADV2.LG=/*Š&.LOADV2.LO=/*‡GEN.INET.LG =/*Š&.INET.LO=/*%=/*„&.EMLINK.CD•"EXOR/MULTI/LINK/HDS"#=/*„&.DMSL.CD—"EXOR/MULTI/LINK/DMS"=/*‡GEN.INETV2.LG=/*ŠVM02.INET.LO=/*‡NETVM02.INT.LG=/*ŠBootfileNETV2B.SY=/*B=/*„&.NOLNK.CDŠ"EXOR/SINGLE/UTIL/NOLINK""VM02/SINGLE/UTIL/NOLINK"=/*‡GEN.INETNOL.LG=/*Š&.INETNOL.LO=/*"=/*„&.GEN.NETVME10.CD"VME10/LINK"=/*‡GEN.INETVME1.LG=/*ŠVMES10.INET.LO=/*!=/*‚Loadmodulefileexplanation:=/*‡&.LOADV2.LO==/*‹CodewhichrunsonanEXORmacssystemandloadsNETV2B.SY1=/*‹intoaVM02whichisintheEXORmacschassis.=/*‡xx.INET.LO;=/*‹Taskwhichinitializednetworkservices.‚Maybepartof>=/*‹abootfile(NETV2B.SY)whichisdownloadedtoasecondary!=/*‹systemorastandalonetask.=/*‡&.NETV2B.SY9=/*‹Filewhichisdownloadedtoaremotesystem.‚Includes4=/*‹RMSandnetworkinitializationtask(xx.INET.LO)=/* =/IF RX=1ƒ=DEL&.S.LS/&.SYSASM.LS=/ENDIF=/RX=0F=/*-------------------------------------------------------------------F=/*------------------------------------------------------------------- =OPT -K,NE=/* Preliminary sysgens to configure SDLC secondary station software.<=/*ƒInstructionsforuseappearinthesubroutinechainfile.9=/*ƒLegalnmenonicsare:‚"GMADPRI"‚-GMADprimarysystem.&=/*™"GMADSEC"‚-GMADsecondarysystem.&=/*™"HDS4PRI"‚-HDS400primarysystem.(=/*™"HDS4SEC"‚-HDS400secondarysystem.=/*™"VME10PRI"-VME/10system=/IFEQ "GMADPRI"\1ƒ=SYSGENSDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF(ƒ=COPYSDLC.GMADPRI.RO,SDLC.SDLCPRI.RO;YMƒ=/*SDLC.GMADPRI.ROisnowreadyforuseastheGMADprimarystationdriver.)ƒ=/*SDLC.SDLCPRI.ROisaduplicatecopy.=/ENDIF=/IFEQ "GMADSEC"\1ƒ=SYSGENSDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF(ƒ=COPYSDLC.GMADSEC.RO,SDLC.SDLCSEC.RO;YJƒ=/*GMADSEC.ROisnowreadyforuseastheGMADsecondarystationdriver.$ƒ=/*SDLCSEC.ROisaduplicatecopy.=/ENDIF=/IFEQ "HDS4PRI"\1ƒ=SYSGENSDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF(ƒ=COPYSDLC.HDS4PRI.RO,SDLC.SDLCPRI.RO;YHƒ=/*SDLC.HDS4PRI.ROisnowreadyforuseastheHDS-400primarystation1ƒ=/*driver.‚SDLC.SDLCPRI.ROisaduplicatecopy.=/ENDIF=/IFEQ "HDS4SEC"\1ƒ=SYSGENSDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF(ƒ=COPYSDLC.HDS4SEC.RO,SDLC.SDLCPRI.RO;YGƒ=/*SDLC.HDS4SEC.ROisnowreadyforuseastheHDS-4002ndarystation1ƒ=/*driver.‚SDLC.SDLCPRI.ROisaduplicatecopy.=/ENDIF=/IFEQ "VME10PRI"\1ƒ=SYSGENSDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIFEƒ=/*SDLC.VME10.ROisnowreadyforuseastheVME/10primarystation=/ENDIFF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "EXOR/MULTI/UTIL/DMS"\1ƒ=OPT-N(ƒ=COPYSDLC.GMADPRI.RO,SDLC.SDLCPRI.RO;YIƒ=SYSGEN&.SPAR400.CD/&.PRIMARY.CD/&.LINKMAIN.CD/&.DMSM.CD,/&.B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF-ƒ=/*Createdfilesare:‚&.LOADV2.LO,&.INET.LO=/ENDIF=OPT NF=/*---------------------------------------K ----------------------------F=/*-------------------------------------------------------------------=/IFEQ "EXOR/MULTI/LINK/DMS"\1ƒ=OPT-NMƒ=SYSGEN&.SPAR1300.CD/&.PRIMARY.CD/&.LINKONLY.CD/&.DMSL.CD,/NETV2B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF#ƒ=/*Createdfilesare:&.NETV2B.SY=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------"=/IFEQ "EXOR/SINGLE/UTIL/NOLINK"\1ƒ=OPT-NHƒ=SYSGEN&.SPAR400.CD/&.PRIMARY.CD/&.NOLINK.CD/&.NOLNK.CD,/&.B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF$ƒ=/*Createdfilesare:&.INETNOL.LO=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------"=/IFEQ "VM02/SINGLE/UTIL/NOLINK"\1ƒ=OPT-NFƒ=SYSGEN&.SPAR800.CD/&.PRIMARY.CD/&.NOLINK.CD/&.NOLNK.CD,/B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF$ƒ=/*Createdfilesare:&.INETNOL.LOƒ=OPTN=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "VME10/LINK"\1ƒ=OPT-N?ƒ=SYSGEN&.PRIMARY.CD/&.LINKALL.CD/&.NETVME10.CD,/&.B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF&ƒ=/*Createdfilesare:‚VMES10.INET.LO=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "EXOR/MULTI/UTIL/HDS"\1ƒ=OPT-NKƒ=SYSGEN&.SPAR400.CD/&.PRIMARY.CD/&.LINKMAIN.CD/&.NETEXG.CD,/&.B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF9ƒ=/*Createdfilesare:‚&.LOADV2.LO,&.INET.LO,&.NETV2B.SY=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "EXOR/MULTI/LINK/HDS"\1ƒ=OPT-N(ƒ=COPYSDLC.HDS4PRI.RO,SDLC.SDLCPRI.RO;YO =SYSGEN &.SPAR1300.CD/&.PRIMARY.CD/&.LINKONLY.CD/&.EMLINK.CD,/NETV2B.SY,&.S.LSƒ=/RX=1ƒ=/IFRD<$C000†=/R?†=/*ErrorsinSYSGEN†=@ENDƒ=/ENDIF#ƒ=/*Createdfilesare:&.NETV2B.SY=/ENDIF=/*F=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=OPT -N =/IF RX=1ƒ=/*,ƒ=/*Copylistingfiletooutputfile/deviceƒ=/IFEQ"#NULL"\2ƒ=/ELSE‡=DEL&.SGLIST.LS‡=LIST&.S.LS,&.SGLIST.LS;H ‡SYSGEN:‚"\1" ‡=COPY&.SYSASM.LS,&.SGLIST.LS;A‡=COPY&.SGLIST.LS,\2;Y"‡=/*Listinghasbeenroutedto\2ƒ=/ENDIF=/ENDIFF=/*-------------------------------------------------------------------=OPT O=ENDééééK éINET ˜?ÿÿÿÿÿÀSDLC!€SSCT!ÀINET? ÿÿÿÿ !>?Kÿÿ`þa@×Ns@ç/ |"x JJ¸ FfÿýFï|Jé kòfÿýSi n kF|B© n&i —ü€×ø FÓfÿý#S © gÿýFïB“B«B«B« "_FßNuRi fÿý© gÿýFïB/&|ÿÿÿÿ"_FßNua@×Ns@ç|/ "x JFï|Jé kòfÿý0) °i oPSi nk@B© n i ‘ü€Ñø FÐfÿý#P © gÿýFïBB¨B¨B¨ "_FßNuRi fÿý© gÿýFïB/ |ÿÿÿÿ"_FßNua@×Ns@çB/BgB§JAoÿý`aÿNf| —.ˆRoQÉÿê| _2n |ÿÿÿÿFßNua@×Ns@ç/ ±ügÿý"x JBFï|Jé kòfÿý © gÿý‘ø FÑü€#H J© nfJi fÿý‘ü€#H nRi oÿý© gÿýFï"_ |ÿÿÿÿFßNua@×Ns  @J€g aÿt`ò |ÿÿÿÿNua@×Ns@ç±ügÿýJ¸ Fgaª|FßNuB€( "x ""iD ÿg°gÓüXJfò|FßNuBhB( B( Bi|$iJ©fEé#H$ˆBiF×a¢| |ÿÿÿÿFßNua@×Ns@ç gÿý"x JBF×|Jé kôfÿý ) g@$@Õø F‘ø F$ˆ#H © gÿýF× 8 *g @pÀü&Að hpN@ |ÿÿÿÿFßNu‘ø F#H Ñü€#H © gÿýF×`¼a@×Ns@ç|"x JF×|Jé kôfÿý ) €J€g, @Ñø FJfB© Ðfÿý#P © gÿýF×BFßNu© gÿýF× |ÿÿÿÿB/FßNu.,<¡aüäg <ÿT—` 1GFa Nu.,<¢`Ú|a NuB‡,<£`Æ/ "y JB‘ù FJé BkúCé B €J€g"@Óù F fô"ˆ"y J© B` /×"Ÿ‘"_NuNuJ¹ >kŽz, n6pN@` Nq=|Ns(FB,B,B€g$f ” gm op`".Tfp`&AAúLåˆÑðNJg,@ þgÿÿg ÿNqì=@,g Na ªNsù >?|Ns(pÚ’²Ì"¨xÖ*y &B€-=@éHè c^ @ e@@00=@B€ y JJ( Ag<PìNu0,@}ÿgpNuì f J®TgpNu*y &aÄg fÖ* f"*gȲ®TgÖ`Àa, -fp Nu$@Bj %l5lm Bª&nT fVê "y * )fp Nu&@‰€€ü& @ÿnè@ j |'J'NBkB«B«B«B«"k +gê * g2aBft3i&Hç0$HaÊLß %L)Kê * g6`"ê ëì%K-KTª g*y *+S&­+K*y &+R$­+JB€Nu0,@À°lgpNu*,,, n6pN@`Nqp Nu ¬kò+ ftJ+ fë$ka’+g*+ fìAëa^f B¬!Lë B€Nu*y &$ka:fî3i&$HaÆ&nTëë `¶aöB€Nu0,@€°lgpNu|a |ìNu0,@À°lgpNu(,:,aúf*-f”- fpNu!m y .*¨!M*y &a\g @fØ* fpNu<<ÿÿJ+ fp Nu<* y .J¨fp Nu$ka`fô3F&$H?aì<&nTaØí;F+L$B€Nu/ *y &$ka&g*_Nu$H W3h&)a¦&nT*_­í +@@RfR`ð@ìB€Nu0,@„°lgpNu faÄgNu(,:,aÒfð|!anJ«f/ Iëa>B«"(_ìNu0,@€°lgpNu +g*@|!a,gìNu|!aÖföJ«gÉJIë|!aîB«IëaâB«"ÉJ$kB«B«"F«ë B«B®TafB€ìNu0,@‘°lgpNu Ng Aì pN@``*,,, h6pN@` Nqp NupNu, fFa¶fÀ- fp - g B†-a2 NuAí2a†f–B¬!Lí6a¨B€NuKë -g*@JmHgòAí2aTfÿdB¬!L`ÊAëa>fÿNB¬!LB€Nu0,@€°lgpNuJ,g4afò/ |Ií2a°­6­ 6­ 6B­8(_ìB€Nu/ |Iëa‚B«"`â0,@é°lgpNu Ng Aì pN@``*,,, h6pN@`Nqp NuJ¬oöaŽfÆ- fp - g B†-a NuAía^fœB¬!Lía B€NupAì o, ~n&QÈÿð",4,Eí g$@²ªfô´jfîpNupNuB€Nuaõg <ÿNuCèB‘¼ ÑÑ||Bi|#B)BiB(1|(-G #|.NTS #Té3l#j3j3j j #l 3l$3l&B€NuAí< g @`øB’ Ší6* fgRmHB€Nu*y *B€S€Àü&Gõ+gB€Nup NuKë M -g*@¾- fð¼-fêB€NupNuKë, -g *@²-fòB€NupNuKë -g M*@¸­ fðºmfêB€NupNu *g&"@*y *Aí g°‰g @`ôBi ‘"­+I*y &2* Cí I fNu"@²i fðB© ‘"­+I`â- fV-fN y .»Èeÿÿ Ш €J»Àbÿÿ y .Aë (g °g @`ò!m y .*¨!MKøNuB€"(g A¹Èfôp`ðJ€Nu2* *y &Aí g @²h fôè `ìNu2* *y &Aí g @²h fô¨ `ìNu2* *yL  &Aí g @²h fôè ¨ ¨ `àNu y .J¨gÿÿ*h»Èeÿÿ Ш €J»Àbÿÿ!U MCèJBX³Ènú*«;k +l ;lAë (g @`ö!MNu gÿÿ !TCBfÿÿ(-f/ pN@"_Nu-f - g BmBm4`Bmí F- g y .Aèÿô (g°g @`ò!mBm6Bm -<- f>ÑRmgú+l0í |B)Bi, g éí XˆY€XG3m\ˆ]€°­0mÑ -0­ Þ@"m,"ä‰$B` ÙQÉÿü`ÙQÊÿüÑ­,‘­0J’g/a¸$_-gÿ8`4- ga€`Bì­  UaöŒ­+l gí- ga4`ìa\`þ6aT(_Nu- f4 fî+l,+l0X­,Y­0B€08 U@"Ò¬ƒÀfr;A*aèÌg nþxí $H“m*- f|"li B- J-fi Bm( ) f 2)Aóÿ;A( -0Aê.‡ nB‡-(Á¾x b ÁA`þ¬í B‡>8  € A`þm AêB€08 B‡BjB* 2-(g0ÁT‡U€°­0mþ` -0èÿþB* `þNGíB¬ +g&@`ö'LNu&x .B­Gëÿô +g&@`ö'MNu5G-f| BjB* m -gG ¾- f / av*_Nu JaèffNup N@/ -6gÆ-6g¼(m8- 6g<$m8 ¾jg€`ÿÿaÐJ€oâ0< m@&-D(¶€l(„™­DÙ¬,äŽD` ÙQÎÿü`ÙQÌÿüJ€g|fí 6+H@g,­ 6­ 6a¨ì Uaó­ 6ga `þ> Jaåô`þ4(_Nu/$m< JaýNu/ « g +f ë `ë AëaðþB¬!L(_$@"L'jg*ë `"/ « gÊ +gÄ$L"@'igë  kz,) h6pN@`Nqé|  k(Iañ„(J`° F*x * ª!j!j !j éê k(IañNpÀü&Aõ h(Jañ:(_Nu&nT + g=|Ns 9 :gX&@IúN +g*@|#añÜgì`<|#aó†f4$kB«B«"F«ë B«að>#ë :`¦†aå€f*$y &B‡J*f( $H( ga `ÿda:`ÿ^&x .L Gëÿô +g&*@'mB­-fÞ­ aø>- gÌNsHçôJjgfJjf^CêJk°B€)S€Àü&*x *GõJ«g+f+ g0 Jaã`p)áH+ )áIKë$-g*B°mfð²mfê- fÄg )fžaíd-6f +"g+@8 @'h"B¨í6aúÞLß/NuHçôCêpÀü&*x *Gõ*k *— gJjf¦* * Aí< g @²( fô´( fî`ÿ:B Ší6* fgRmH`ÿj Jaâ&­ g,/ (m$ìì+l$gí  UaîöaöÊ(_`ÿT"<ÿ`"<ÿ`"<ÿ*x &Cêp1² QÈÿø3A B‘¼ ÑÑ||Bi|#B)BiBjBª5|4-G `þ2"$ & (Aú0<NAg.H瀀 |`6 DATAB˜³ÈnúNu,HOî€ OCîaêHîŠB®¢~Aî¦1|ÿÿCè"!IB¨Aè^QÏÿèaà~Aî1|ÿÿCè"!IB¨AèJQÏÿè~AîF1|ÿÿB¨Aè"QÏÿðpýNAIî„*L -g (@,gì+lB¬&lkJ,fž f|ÿÿ`Ä gH瀀 |`H&l ÿÿgp Aú(Cú4°gAè³ÈnôH瀀 |` (Nû.NTS2.SSCr)m+L`ÿZaô |d0<NA`ÿ>€ oH瀀 |`ÂAú åˆÑðüNФ¤¤šš¤€ oH瀀 |`‚Aú åˆÑðüNÐŠŠŠØØŠ&L€ oH瀀 |`@Aú åˆÑðüNÐ"""öÿÿþÐÿÿþÐ+°+gtadfÿ "úÿ0< I0ÛQÈÿü|ÿÿal`þVaºfþæ0< J4ÛQÈÿü|ÿÿ(HB,aNajgeô`”g |ÿÿ`þ ƒgðÔ&L`Œalfþ˜0< J"K4ÙQÈÿü!k !k!k !k|ÿÿ(HB,aæageô`,g |ÿÿ`ý°a€`ý¨ÔfýÔJ,gýÌ`ÿ LCîÎ$I$üSSCT$ü P.B$ü. ER4üR $:ÖÂraÜÂraÔÂraÌÂraÄÂra¼Âra´Âra¬`DCúbEú "<Ca$:†EîÎ$Â$Â$ Kra‚Âr azAèÂrapÂrajÂr adü ¼ CîÎ" ’‰RaÐ|ÿÿ`üÔSSCT Error- Code STS BCT R E C # R TH RH Data èaaSAfîNu o^0ÀNu0<NA~Aî¦ (ÿÿf ¼B(1|Bh!|<aaTAè^QÏÿÒNuCî„ )g"@`öB¨#HNu~Eî *ÿÿf Bj"jB€NuEêJQÏÿæpÿNupJ.™f)@¼ Bª%|( JažaäNu/Jg ÿgDü`/ |è0<NA _DüLßNu~EîF *ÿÿfBjB€NuEê"QÏÿêpÿNuAú0<NAg.H瀀 |`è DATA2B˜³ÈnúNu,HOî@ OCî2aêHî~¾Aîž~B0pQÏÿúB®æ~Aîê1|ÿÿCè"!IB¨Aè2QÏÿèa œ~Aî|ÿÿCè"!IB¨AèJQÏÿèAî(¼Aîú¼Cî!I!|~AÖCè"!I!|B¨AèJQÏÿæ~CAîÚCú ÙQÏÿü`”@ ÿÿ NETLOAD SA`@ ÿÿ SY`A IîÈ*L -gJ(@,gî+lB¬ gT gâ g  g ,`¦)m+L`´a B`°a < |,0<NA`˜|ÿÿ`à |™0<NAJ,fÿÿ&l ,lî+ a þ0+@ðÿ @€f˜|ÿÿB++ a ægB€+ Aîž°`€B€+ Aîž0gÿÿ jhCì2 ,€Ѫx0ÙU€núCê| jh",ÒˆÓüÿ²‰d ,€Ѫh`ÿ"Aê(0¼1|`I!I“üÿ!I NBgˆB/(JCú(EúNa FAÔ0¼NC0¼NC a¦$La @`þÐUPLOAD ABORTED (DISK I/O ERROR) - STATION $UPLOAD ABORTED (RIM RECEIVED) - STATION $R¨Aê|"HÓü³Áb0Ù`ø%Hh+gþT/ (JCúEú$a œ$_`UPLOAD FINISHED - STATION $AÒ0¼NCB€a ‚`þ+ gH gžažfýì|ÿÿB©BiBi 3k + g0 Sg@ —g$ “gJ`ýÀ|ÿÿ+ a fý®B*g`ý¦|“ %|ab`ý|S %|aL`ýz¼¡@ a@aPfö`ýd|ÿÿ+ a¦fJJ*ggS*gfýF+ Aîž0g (JCúþŽEúþ²a €AÔ0¼NC0¼NC$L`AÒ0¼NCava¨fýk ¼¢aÆaÖg |ÿÿ`üä+ aâfüØ(JatgB,f`üÈB©BiBi 3k | %|êal|g+ a’ga^$Lað`ü€Aî|PHç0a`)JlLß J€jJCúEúCa è$LaÀ`üPSYNTAX ERROR IN NETLOAD.SA FILE - DOWNLOAD ABORTED J¬lgä)|ÿÿÿÿp)|ÿÿÿÿtHç0$llaì @gTfT Df&oB€+ Aîžðfð`Ì Lf ƒÿÿÿ)Cp`º Nfƒÿƒÿÿÿ)Ct`¢Lß `Lß `ÿ,B€+ Aîž0gL ¬ÿÿÿÿpg@ ¬ÿÿÿÿtg4ð°pJAîÚNA .Úa0a-@âCì "üULODB€+ aú.äa˜Cì2üDU.åaˆ .Þ€üê`€ÿÿ€ü<$€ÿajHB0ab8¼AÔNC ,t€ÿàˆ)@$9|8¼ÀB(NCga”B+ Aîž°`|Aì|)HhB¬xB¬0Cì|B©Bi3k | |€|#lt#lpEìD%I%|a(CúEú!a¦`úJUPLOAD BEGUN - STATION $B€Aîž+ °M ðCì|B©BiBi 3k | B€+ aøgaÄ$LaV`ùæAî/MÔ)| )| )| )| a Ö,_AÔNCga‚$La`ù¤$LaDg a\$La`ù!|Cê||€|AêŒ#h8#h<#h3|'#h8EêD%I%|"a`ù>, .gJ4k`ÊÀ6<ÿþ` ƒ€g ƒ'cÀ` =C ` À`À4<aX6< Gî at4<aD n& f| 6< GîaR4<a" (g6<Gîa84<a (fœBBBC4kJ )gg> Pn8AéK†AB`Ø4Bÿg BnÀ BcÀ=C `HÀÀÀBÿ BcÀ`,Rˆ6<Gîa¬4<a|$< Gî &Â&Â&Â&Â6ÂBn $B|gÀ$fÀ fÀ fÀ fÀ fÀ4B|gÀg :f€J€Lß<NuJ€jÀX`’QBgQBÀ`ÀBgÀNu4HB€€»Èg64k.f(f @À`< *fÀÁSCn΀€`$HB´CfÀ`< (*ÿþf<*`ÂSCnúNu/ &HIúîB€B"@$@JFf <@@@(_Nua¬J€j €€`šR‹·Èf€@ ;g6  g0a°"H&HazJ€j€€`j ,f€`äR‹·Èf "|€@  g> ;g€  `6$H&HaVk nö€€€`  g ,gâ`êR‹·Èf $|€@(_Nua k0fö #gð€ NuSF4NuJFfò€ÀNu  gNuaê`ôHçB€BIúä ,gø4k6 -fÀ`æg0ƒgÁ` =fRŠa`  f@` Lß NuBƒ:< &J $gN4gˆ`&4k&gã‹/å‹ÖŸÖSEnÞ‚4jø  f"+ÿþNu:<4käfgÌ_郆M SEnÜ`º€€€@@ P€@  €@ Aú0<NAg.H瀀 |`Ø DATAfB˜³ÈnúNu,HOî€ OCîfaê=|ÿÿ´Aú R-H¸Aî´0<:NAgH瀀 |`‚pÿNA@çî·Aî´0<:NADßgrHzb@ç/:mLßgNwDßX`.Please kill network first - then initialize Hç`CúÿÌEúÿôa bLß`úH瀀 |`ö®·Hz @ç/:õLßgNwDßXAú0< NAgH瀀 |`º SSCT"HAú0<NAgH瀀 |`Ž-|SSCT˜-zþŠœ=|¸¬=|ª-I®Aî˜0< NAgH瀀 |`VŸüp O/ EúÊ0ÚQÈÿü$_ O$zþ@!J0<NAßügH瀀 |`-|NWCT˜-zþœÓüJ-I®Aî˜0< NAgH瀀 |`æŸüp O/ Eúj0ÚQÈÿü$_ O$zýÔ!J0<NAßügH瀀 | `¨AúH0<NAgNH瀀 | `Ž€`SSCTSSCT SSCTNWCT SSCTSSCTa LgH瀀 | `:AHz@@ç/:;LßgNwDßX <_B-@ rXÂúg-@$B-A(ÐHzh@ç/:ùLßgNwDßX-@,2:ØÂüB-A0Ð-@42:¼Âü&B-A8Ð-@<2:¦ÂüJB-A@ÐHz@ç/:LßgNwDßX-@DrÒzŽ=ALHz>@ç/:aLßgNwDßXÂú^ÿB-AHÐ=zLN=zJP=| ˆ-|.NTWŒ-@”Aî€0<NAgH瀀 | `ð*H Hz&@ç/:ñLßgNwDßXÑ®,Ñ®4Ñ®-|SSCTR-zû V-|NWCTZ-zû^=|ÿÿ´Aú4-H¸Aî´0<:NAgH瀀 |`ÌHzr@ç/:Ñ LßgNwDßXpÿNAgH瀀 |`œî·=|ÿÿ´Aî´0<:NA=|ÿÿ´Aú -H¸Bn¶Aî´p:NAgH瀀 |`\pÿNAHzJ@ç/:]LßgNwDßX=|ÿþ´ nbÑüP-H¸î·Aî´0<:NAgH瀀 |`=|ÿý´ nbÑüX-H¸®·Aî´0<:NAgH瀀 |`ÔpÿNAgH瀀 |`Àî·=|ÿÿ´Aî´0<:NA-|€ -|SSCT-zùž-|Aî NC-|SSCT¼-zù‚À=| ÄnÑ-|SSCTî-zùhúAî¼0< NA-|NWCT-zùT-|Aî NC-|NWCT¼-zù8À-|NWCTî-zù*ú-z*ÒAî¼0< NA‘È€0<NA0<NA   á Èd(n,(¼!NNT)n0 nAìCì" Ò¬  ‰ IC貉nô(n4(¼!NAT)n8 AìCì" Ò¬  ‰ ICè&²‰nô(n<(¼!LCT)n@ AìCì" Ò¬  ‰ ICèJ²‰nô*( ¡f a·(0a¹P`¬ ¢f a·2a¹b`š £f a·Ba¹d`ˆ fa·`ÿ|a¶ê`ÿtB@09 2€y 4€y 6€y 8=@Ns!MAILüMAILB:û gJJ¹ Jf9÷?²`2/Aúÿ¬pNAf$ 9ü"€ÿÿÿ €RUNfÿAúÿžpNA _NuAÖ!I !J0¼1|1|B¨Bh B¨NBNuLOADôÿÿÿÿÿ€SEG0 ÿÿÿÿ ÿÿ@ ÿÿ NETLOAD SA`@ ÿÿ N SA`A!VM02Waiting for VM board to become ready VM board now ready - proceeding OúýŠMúýAúþ^Cúþ©Hî¸Aúþ Cúÿ›HîAî„0¼@NCgazAî¬NBganAî„0¼NC/Múý¢AúþaÎ,_€ÿ€üg <aBAúý‚NCga6AúýžNBga*Kúþ2-m€"-<à‰á‰Ò­8-A<-|ü8pAúýŠNAgaú(|Ùüü ”WAITgCúþîEúÿAúýHè NBAøˆpNA`ÚAúüìJ¨ gCúþìEúÿHè NBAúý <üЭ8!@ :ý0кý0S€!@!|NBga~=|ÿÿ@Aú”-HDAúýp:NAgadpÿNAga\îC=|ÿÿ@Aúüîp:NA(|Ùüü)zü)|9|' (¼REDYAødp" RUNgNA`ì‘È€0<NAHîHpAúüžNDLúü–H瀀0<NA#üü F#üü J <€ ѹ JNsHç8 .gJ4k`ÊÀ6<ÿþ` ƒ€g ƒ'cÀ` =C ` À`À4<aX6< Gî at4<aD n& f| 6< GîaR4<a" (g6<Gîa84<a (fœBBBC4kJ )gg> Pn8AéK†AB`Ø4Bÿg BnÀ BcÀ=C `HÀÀÀBÿ BcÀ`,Rˆ6<Gîa¬4<a|$< Gî &Â&Â&Â&Â6ÂBn $B|gÀ$fÀ fÀ fÀ fÀ fÀ4B|gÀg :f€J€Lß<NuJ€jÀX`’QBgQBÀ`ÀBgÀNu4HB€€»Èg64k.f(f @À`< *fÀÁSCn΀€`$HB´CfÀ`< (*ÿþf<*`ÂSCnúNu€€€@@ P€@  €@éééééééN ééééééééééééééééO ééééééééééééééééO éééééééééééééééé