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‡get�number�of�interrupt�levels�per�module$‰MOVE.L�D2,D4Žsave�number�of�modules!‰MULUƒD3,D4Žget�number�of�DAC-IDs-‰MULUƒ#DACIDLNG,D4‡get�#�of�bytes�for�DAC-IDs%‰ADD.L‚#DACNTRY,D4ˆadd�in�header�size)‰MULUƒ#IOLNG,D2‰get�#�of�bytes�for�IO�map,‰ADD.L‚D4,D2Ž#�of�bytes�needed�for�DAC�table‰MOVE.L�D2,D5Žsave�#�of�bytes'‰ADD.L‚#255,D2Œround�up�to�page�boundry‰ASR.L‚#8,D2Ž#�of�pages�needed'‰BMI.S‚DACERR�branch�if�negative,�error)‰MOVE.L�#0,A0Žclear�for�allocating�memory)‰MOVE.W�D2,A0Žnumber�of�pages�to�allocate-‰MOVE.L�#T0PAGAL,D0ˆpage�allocation�directive"‰TRAPƒ#0‘call�RMS68K�to�get�memory"‰BRA.S‚DACOKŽbranch�if�good�return1DACERRƒMOVE.L�#32,D0�fatal�error�-�go�stop�system‰TRAPƒ#08DACOK„MOVE.L�#'!DAC',DACEYE(A0)�set�DAC�table�eyecatcher)‰MOVE.W�D5,DACLNG(A0)†#�of�bytes�in�table5‰MOVE.W�#DACNTRY,DACOFST(A0)�offset�to�DAC-ID�entries&‰MOVE.W�D4,DACIO(A0)†offset�to�IO�maps'‰CLR.B‚DACNAL(A0)‰no�DACs�allocated�yet,‰MOVE.L�#\NDAC1,D4Šget�number�of�DAC�modules/‰MULUƒ#\NUSRDAC,D4‡get�number�of�DAC-ID�entries-‰MOVE.B�D4,DACNMAX(A0)…max�number�of�DAC-ID's6‰MOVE.L�A0,DACTBLŠsave�table�address�in�system�params.0‰LEA„DACID(A0),A0‡start�address�of�table�entries/‰SUB.W‚#DACNTRY,D5ˆnumber�of�bytes�to�set�to�FF‰ASR.W‚#1,D5Žnumber�of�words3‰MOVE.W�#$FFFF,D4Šstore�this�in�all�entry�locations&DACCLRƒMOVE.W�D4,(A0)+‹set�the�entries2( ‰SUB.W‚#1,D5Ždecrement�counter ‰BNE.S‚DACCLR�branch�if�not�done 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 °´ gBS�fò0<ý`""LÓÂpAúF3 þä<+¼XWÈÿüfXˆ0Nð0<ô6€NuHçþQ�axfDB‡B‚B�0+o2 @n,43 BF3 n:ÄüX‚Jq j R‡#Ž TAS@nÜ`40<ö`.0<÷`(0<ý`"0<þJGg6<ÿÿB�F3 43ÄüX‚3ƒ TASGnìP�Lß`@>,, (-"¸´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 ÿNsQ�B¯RoJEgçïSE`ô:/P�Nu02@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<ÿÿB�43ÄüX‚3ƒ XASGnìF3 P�Lß`ø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@B�2;Æ €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ßÿNsQ�B¯RoJEg çïSE`ò:/P�F3 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ßÿ‚ÿ(JB�aûúLßÿNs3 Hçÿþ NpN@``LßÿNu`ø4éé O*******************************************************************************O*********************************************************************************‡9992.&.D625GEN.CI*:*‡Commands�inlcuded�into�the�sysgen�command�file�SYSCMD.CDB*‡to�include�the�MVME625�device�driver�into�VERSAdos�for�the�VM03.* DR625R‚=�*MSGMSG‡START�OF�MVME625�DRIVERMSG†SUBS�.&.D625IOC.AI†SUBS�.&.D625.LG†LINK�.&.D625.LG †PROCESS�D625 †END�D625…IFEQˆ\LINKLSWˆ=COPY‡\LINKLS,\WORKLS;A…ENDCO*******************************************************************************O*******************************************************************************éééééøG************************************************************************&*�Code�to�be�included�in‚IOCINT.AGƒfor,*’building�the�CCB's�for�the�MVME625�boards.*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*�must�match�the�on-board�jumper�selections.‚Since�this�board�doesG* 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"�to�start�address�of�the�MVME625�driver�(obtained*’in�the�SYSGEN�process):0‰IFNE‚\NDCO1ˆassemble�if�have�any�MVME625�boardsDCO†EQU‡\DR625R*?*ˆSet�"DEVADD"�to�memory�mapped�I/O�address�for�this�DCO�board:DEVADDƒSET‡\IOBASE+$1*=*ˆSet�up�DCO�CCB's�(for�just�one�DCO�board,�in�this�example).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�=�Channel�Data�Block:‚used�by�IOCI�to�allocate�channels.*O******************************************************************************* **,*‚Macro�to�define�a�Channel�Data�Block�(CDB)8*‚Used�by�IOCI�to�allocate�channels;�equates�are�in�LV5.*/CDBLN�EQU�$2E„Length�of�the�CDB�data�structure. CDB MACRO*�DC.L�*+CDBLN„Pointer�to�next�CDB�in�list.*�D C.W�\1‰Options�for�the�ALLOCATE�command.�DC.L�\2‰Channel�mnemonic.�DC.B�\3‰Channel�type.4�DC.B�\4‰Masked�interrupt�maximum�instruction�count.$�DC.L�\5‰Physical�address�of�driver.F�DC.L�\6‰Supervisor�channel's�mnemonic�(only�if�bit�3�of�options�set).?�DC.L�\7‰Physical�address�of�device�in�memory-mapped�I/O�space.?�DC.W�\8‰#�of�bytes�device�occupies�in�memory-mapped�I/O�space.�DC.B�\9‰Vector�number.�DC.B�\A‰Polling�priority.�DC.B�\B‰Software�priority.�DC.B�\C‰Segment�count.(�DC.W�\D‰Polling�byte�offset.�--�[#1]�--�DC.B�\E‰Polling�mask.�DC.B�\F‰Polling�test�value.7�DC.W�\G‰Offset�from�physical�device�address�for�reset.�DC.B�\H‰Value�for�reset.�DC.B�0ŠReserved.(�DC.W�\I‰Polling�byte�offset.�--�[#2]�--�DC.B�\J‰Polling�mask.�DC.B�\K‰Polling�test�value.7�DC.W�\L‰Offset�from�physical�device�address�for�reset.�DC.B�\M‰Value�for�reset.�DC.B�0ŠReserved.  ENDMééÆ,N==============================================================================B====‚NEWS�FILE�FOR�RIO�(REMOTE�INPUT�/�OUTPUT)�DRIVER�RELEASE‚====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 -- ‰RIO�Driver�files:'“9993..RIODRV.SA…RIO�driver�source�file/“9993..RIOASM.AF…RIO�driver�assembly�chain�file'“9993..RIODRV.RO…RIO�driver�object�file,“9993..STDMACRO.SAƒMacros�used�in�RIO�driver3“9993..TESTE.SA†Example�program�using�RIO�driver�in©wait_for_event�mode.$“9993..TESTE.AF†Assembly�chain�file. ‰File�for�allocating�memory:“9993..RIOMEM.SA ‰Sample�SYSGEN�files:)“9993..RIOGEN.CF…Sample�SYSGEN�chain�file+“9993..RIOCMD.SA…Sample�SYSGEN�command�file /‰Files�to�be�modified�for�system�configuration: “9993..RIOIOC.SA…CCB�allocations “9993..RIOCOD.SA…SYSGEN�commands -‰Files�to�be�merged�into�SYSGEN�command�file:1“9993..LNKRIO.LF…Chain�file�to�link�in�RIO�driver.“9993..LIOCINT.LF„Chain�file�to�link�in�IOCINT-“9993..LNKTEST.LF„Chain�file�to�link�in�TESTE ‰Files�assembled�during�SYSGEN:3“9993..IOCINT.SA…CCB�allocation�routine�source�file3“9993..IOCVM.SA†Macro�definition�for�CCB�allocation ‰FORTRAN�interface�subroutines:“9993..RIOLIB.SA…Source�file$“9993..RIOLIB.AF…Assembly�chain�file“9993..RIOLIB.RO…Object�file ‰"News"�file:“9993..RIOSNEWS.NW ‰System�equate�files:$“9995..RIO.EQˆRIO�driver�equate�file “9995..STR.EQˆRMS68K�equate�file2“9995..TCB.EQˆTask�Control�Block�(TCB)�equate�file5“9995..CCB.EQˆChannel�Control�Block�(CCB)�equate�file!“9995..TIMER.EQ†Timer�equate�file1“9995..NOL.EQˆInhibit�listing�command�source�file!“9995..TR1.EQˆTrap�#1�equate�file “9995..EXE.EQˆRMS68K�equate�file'“9995..LV5.EQˆLevel�5�(CMR)�equate�file2“9995.C8OC.SYSPAR.RO�System�parameters�object�file   ÏAØ2à1è*ð JNOTE:‚All�files�on�user�number�0�of�this�diskette�should�be�copied�to�yourKsystem 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.‚The�volume�name�was�left�off�of�file�references�in�these�chain�files,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.   IThe�RIO�driver�source�file�is:‚RIODRV.SA�.‚To�assemble�this�file,�use�theKchain�file:‚RIOASM.AF�.‚The�following�equate�files�are�used�in�the�assembly 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 willGhave�to�add�several�items�to�the�standard�SYSGEN�command�file.‚For�your@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)‚Memory�must�be�allocated�for�the�internal�driver�tables.:‰2)‚A�channel�control�block�(CCB)�must�be�created�for�each5�interrupt�level�for�which�the�RIO�board�is�jumpered.   IThe size of the memory area set aside for the driver tables is determined9by�two�variables�as�specified�by�you�in�the�SYSGEN.‚These$variables are "NRIO", and "NRIOINT". 6NRIO†This�is�the�number�of�RIO�boards�which�will�be�on6Šthe�system.‚Since�there�can�be�no�more�than�16�boards8Šon�the�I/O�Channel�(which�is�where�the�RIO�boards�are),#Šthe�maximum�value�of�"NRIO"�is�16. GNRIOINTƒThis�variable�is�set�to�the�number�of�hardware�interrupt�levels>Šfor�which�the�RIO�boards�will�be�jumpered.‚The�minimum�number'Šis�one�and�the�maximum�number�is�four. :Note that if you set either of these variables larger thanHactually�needed,�the�system�will�still�operate�normally.‚This�would�justCresult in having more memory allocated for internal tables than was necessary. JThe�variables�NRIO�and�NRIOINT�are�defined�in�the�file�RIOCOD.SA.‚You�willGhave to edit this file to reflect the correct values of these variablesAfor�your�particular�configuration.‚This�file�is�to�be�merged�intoyour SYSGEN command file.   AThe code to allocate memory for the RIO driver internal tables isGcontained�in�the�file�RIOMEM.SA.‚This�file�should�be�merged�intact�intoCINTIOV2.SA,�which�is�a�file�already�in�your�system.‚The�comments�inIINTIOV2 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 allocation2of�the�CCB's.‚The�file�RIOIOC.SA�has�been�included5to 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 theGinformation�needed�to�build�the�CCB's.‚When�setting�up�the�"CDB"�calls,remember the following: '1)ƒThe�RIO-ID�is�a�4-character�mnemonicE…such�as�"RIO1"�for�the�first�RIO1�board,�"RIO2"�for�the�second,�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.FThe�file‚RIOCMD.SA‚is�a�sample�SYSGEN�command�file.‚Near�the�middle�ofKthis 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?with�RMS68K.‚The�RIO�driver�may�also�be�SYSGENed�with�VERSAdos.     CRIOLIB.SA‚and‚RIOLIB.RO‚are�the�FORTRAN-callable�subroutines�which,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?the�RIO�driver.‚The�purpose�in�providing�the�test�program�is�to?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 provideDoutput�relays�in�locations�5,7,8,�and�9.‚Connect�an�electronic�pulse@generator to input 0, with the ON pulse time of 10 milliseconds,�Lamp�5�will�alternate�on�/�off�at�the�pulse�repetition�rate.<„>�Lamps�7,8,9�will�turn�on�together�at�each�input�ON�pulse,9†then�will�go�out�in�sequence�7-8-9�(they�are�on�channels†performing�pulsed�output). 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 isB512�milliseconds.‚With�the�pulse�generator�set�as�described�above,?this�requirement�is�met.‚If�the�input�pulse�OFF�time�is�reducedCto below 512 milliseconds, the debounce requirement will not be met%and the input signal will be ignored. millisecond�debounce.‚To�make�channel�1�signals�be�recognized,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@message�in�the�test�task�A.S.Q..‚The�routine�'TESTIRQ'�moves�theAmessage from the ASQ (which is not directly acessable by the user?task�'TESTE')�to�the�task�reciever�buffer,�defined�as�RCVBUF‚inTESTE. N==============================================================================        éééé =/*=/*4=/*†COMMAND�FILE�TO�DO�SYSGEN�FOR�TESTING‚RIO�driver=/* =ARG RIOCMD =ARG \1,RIOLST.LS,RIOSYS.SY,FIX:=DEL \2=/**=/*†USING�NEW�VERSION�OF�'SYSGEN'�12/15/81=/*=/RA=0=SYSGEN \1,\4/\3,\2 WE NOW HAVE =/IF RA=0=/*‘SYSGEN�COMPLETE"=/*†NOW�COPY�ALL�.LS�AND�.LL�FILES=/*=SPOOL PRINT \2,#PR=/ENDIF=TIME=ENDééééééøC*******************************************************************-MSG�*�Sample�system�generation�(SYSGEN)�for—*MSG�*„RMS68K�plus�RIO�driver.¢*CMSG ***************************************************************MSGKLISTFILE�="RIOLST.LS"„LISTING�FILE�OF�ALL�SYSGEN�OUTPUT�(SET�IN�CHAIN�FILE) IOBINT4=$74 IOBINT3=$73 IOBINT2=$72 IOBINT1=$71MSG�DEFINE�OTHER�VARIABLE�INFO.2UDR=0ŽNO.�OF�PAGES�IN�USER�DEFINED�DIRECTIVE�TABLEGST=1ŽNO.�OF�PAGES�IN�GSTUST=1ŽNO.�OF�PAGES�IN�UST#TRACE=4ŒNO.�OF�PAGES�IN�TRACE�TABLE%IOV=1ŽNO.�OF�PAGES�IN�IO�VECTOR�TABLE'PAT=2ŽSIZE�OF�PERIODIC�ACTIVATION�TABLETRCFLAG=$C000†TRACE�FLAGS*ˆSET�FOR�SYSTEM�USING�VM02 ƒMMUADR=0ƒTIMADR=$F70000 ƒWHERLOAD=0 ƒCLOCK=800 ƒPANLADR=0ƒBUGTRAC�=�$F000BCDMSG ****************************************************************!SYSDATE="06/15/82"ƒDATE�OF�SYSGEN&SYSNAME="RIOSYS" OPERATING SYSTEM NAMEREVISION="REV�1.00"‰REVISIONMMU=\MMUADRˆMMU�ADDRESSTIMER=\TIMADR†TIMER�ADDR.CLOCKFRQ=\CLOCK„CLOCK�FREQUENCY TIMSLIC=2 TIMINTV=10 PANEL=\PANLADR„FRONT�PANEL�ADDR./MEMEND1�=�$20000„MAXIMUM�END�OF�ON-BOARD�MEMORY'MEMEND2�=�$20000„START�OF�OFF-BOARD�RAM%MEMEND3�=�$40000„END�OF�OFF-BOARD�RAM ƒPC�=�$E00 ƒSTACK�=�$C00ƒSTARTRMS�=�$F00 †DPRVAO�=�0L*===========================================================================FMSG�====================‚LNKRMSV2.CF�,�RMSV2.LO�,�AND‚RMSV2.LLƒMUST�BE=MSG�====================‚OBTAINED�FROM�YOUR�SYSTEM�DISK‚.�.�.<*…LINK�LNKRMSV2.CF‡(USE�THIS�IF�YOU�NEED�TO�RELINK�RMSV2.RO)†PROCESS�RMSV2 †END�RMSV2G*…=COPY�RMSV2.LL,\LISTFILE;A„(USE�THIS�IF�YOU�WANT�A�LOAD�MAP�OF�RMSV2)MSG ====================M*============================================================================*O****************** *************************************************************O*******************************************************************************O*********************************************************************************‡RIO�driver�stuff�.�.�.9 5*¦(from�RIOCOD.SA)*NRIO=1Œ#�OF�RIO�boards.NRIOINT=1Š#�OF�INTERRUPT�LEVELS�PER�I/O�MODULE‰MSG‡START�OF�RIO�DRIVER‰RIODRVR�EQU�*‰SUBS�LNKRIO.CF ‰LINK�LNKRIO‰PROCESS�RIODRV‰END�RIO‰=COPY�RIODRV.LL,\LISTFILE;AO*******************************************************************************O*******************************************************************************O******************************************************************************* MEMBEG = *$MSG�START�OF�I/O�CHANNEL�INITIALIZER TASK IOCI STATE='READ' SESSION=1 PRIORITY=$DA IOCISTR=* SUBS IOCINT#ASM IODVM/IOCINT,IOCINT,IOCINT;Z=50ƒ=COPY�IOCINT.LS,\LISTFILE;ASUBS LIOCINT.CF LINK LIOCINTƒ=COPY�IOCINT.LL,\LISTFILE;AEND IOCIMSGŽSTART�OF�SYSTEM�INITIALIZER PROCESS INITINTSTR=* KILVECT=142 SERPTS=140 PTMVECT=28FAIL=141 SWABRT=31 BCLRV=147ƒSUBS�INDV,INTIOV2,INTLKV2.CFƒASM�INDV,INDV,INDV=COPY INDV.LS,\LISTFILE;A(ƒASM�0..EQUTIMER/INTIOV2,INTIOV2,INTIOV2=COPY INTIOV2.LS,\LISTFILE;AƒLINK�INTLKV2.CFƒ=COPY�INIT.LL,\LISTFILE;AEND INITAMSG *************************************************************MSG�*ŠE�N�DƒO�F‚S�Y�S�G�E�N™*AMSG *************************************************************MSG�*»*MSG�*»*)MSG�*„WE�NOW�HAVE�A�SYSTEM�FILE�CALLEDƒ\3MSG�*»*AMSG *************************************************************éé*J*=========================================================================*=*‚Code�added�to�allocate�memory�for�table�used�by�RIO�driver.=*‚This�code�is�to�merged�into�the�approprate�initializer�file4*‚as�per�the�instructions�received�with�this�driver.@*‚Edit�the�initializer�file.�Position�to�the�correct�line�in�the<*‚file.�Merge�this�file�by�the�Edit�command:�MERGE�RIOMEM.SA**K*==========================================================================6‰XREF„RIOTBL…SYSPAR�location�containing�RIOTBL�address‰BRA.SƒRIOMEM1&‰INCLUDE�9995.&.RIO.EQ‡RIO�equate�file* ŠSECTION‚8ŠMOVE.L�#\NRIOINT,D3‡get�number�of�interrupt�levels�per�module$ŠMOVE.L�D2,D4Žsave�number�of�modules!ŠMULUƒD3,D4Žget�number�of�RIO-IDs-ŠMULUƒ#RIOIDLNG,D4‡get�#�of�bytes�for�RIO-IDs%ŠADD.L‚#RIONTRY,D4ˆadd�in�header�size+ŠMULUƒ#PIALNG,D2‰get�#�of�bytes�for�PIA�map,ŠADD.L‚D4,D2Ž#�of�bytes�needed�for�RIO�tableŠMOVE.L�D2,D5Žsave�#�of�bytes'ŠADD.L‚#255,D2Œround�up�to�page�boundryŠASR.L‚#8,D2Ž#�of�pages�needed'ŠBMI.S‚RIOERR�branch�if�negative,�error)ŠMOVE.L�#0,A0Žclear�for�allocating�memory)ŠMOVE.W�D2,A0Žnumber�of�pages�to�allocate'ŠMOVE.L�#4,D0Žpage�allocation�directive"ŠTRAPƒ#0‘call�RMS68K�to�get�memory"ŠBRA.S‚RIOOKŽbranch�if�good�return.RIOERR„BSR„KILLER�fatal�error�-�go�stop�system8RIOOK…MOVE.L�#'!RIO',RIOEYE(A0)�set�RIO�table�eyecatcher)ŠMOVE.W�D5,RIOLNG(A0)†#�of�bytes�in�table 5ŠMOVE.W�#RIONTRY,RIOOFST(A0)�offset�to�RIO-ID�entries(ŠMOVE.W�D4,RIOPIA(A0)†offset�to�PIA�maps'ŠCLR.B‚RIONAL(A0)‰no�RIOs�allocated�yet+ŠMOVE.L�#\NRIO,D4Šget�number�of�RIO�modules/ŠMULUƒ#\NRIOINT,D4‡get�number�of�RIO-ID�entries-ŠMOVE.B�D4,RIONMAX(A0)…max�number�of�RIO-ID's6ŠMOVE.L�A0,RIOTBLŠsave�table�address�in�system�params.0ŠLEA„RIOID(A0),A0‡start�address�of�table�entries/ŠSUB.W‚#RIONTRY,D5ˆnumber�of�bytes�to�set�to�FFŠASR.W‚#1,D5Žnumber�of�words/3ŠMOVE.W�#$FFFF,D4Šstore�this�in�all�entry�locations&RIOCLR„MOVE.W�D4,(A0)+‹set�the�entriesŠSUB.W‚#1,D5Ždecrement�counter ŠBNE.S‚RIOCLR�branch�if�not�done 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*********************************************************************************‡RIO�driver�stuff�.�.�.*¦(from�RIOCOD.SA)*NRIO=1Œ#�OF�RIO�boards.NRIOINT=1Š#� OF�INTERRUPT�LEVELS�PER�I/O�MODULE‰MSG‡START�OF�RIO�DRIVER‰RIODRVR�EQU�*‰SUBS�LNKRIO.CF ‰LINK�LNKRIO‰PROCESS�RIODRV‰END�RIO‰=COPY�RIODRV.LL,\LISTFILE;AO*******************************************************************************O*******************************************************************************  ééééé'G************************************************************************9*ˆSample�code�to�be�inserted�into‚IOCINT.SA‚to�set�up�for(*’building�the�CCB's�for�the�RIO�boards.*G************************************************************************G*======================================================================*E* THIS IS THE CODE NEEDED TO SET UP THE CCB'S FOR JUST ONE RIO BOARD.*G*======================================================================*8*ˆSet�"RIO"�to�start�address�of�the�RIO�driver�(obtained*’in�the�SYSGEN�process):RIO†EQU‡\RIODRVR*?*ˆSet�"DEVADD"�to�memory�mapped�I/O�address�for�this�RIO�board:DEVADD SET $F80001*=*ˆSet�up�RIO�CCB's�(for�just�one�RIO�board,�in�this�example).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====‚NEWS�FILE�FOR�RIO�(REMOTE�INPUT�/�OUTPUT)�DRIVER�RELEASE‚====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 -- ‰RIO�Driver�files:'“9993..RIODRV.RO…RIO�driver�object�file3“9993..TESTE.SA†Example�program�using�RIO�driver�in©wait_for_event�mode.#“9993..TESTE.AF†Assembly�chain�file$“9995..RIO.EQˆRIO�driver�equate�file ‰File�for�allocating�memory:“9993..RIOMEM.SA ‰Sample�SYSGEN�files:)“9993..RIOGEN.CF…Sample�SYSGEN�chain�file+“9993..RIOCMD.SA…Sample�SYSGEN�command�file /‰Files�to�be�modified�for�system�configuration: “9993..RIOIOC.SA…CCB�allocations “9993..RIOCOD.SA…SYSGEN�commands -‰Files�to�be�merged�into�SYSGEN�command�file:1“9993..LNKRIO.LF…Chain�file�to�link�in�RIO�driver.“9993..LIOCINT.LF„Chain�file�to�link�in�IOCINT-“9993..LNKTEST.LF„Chain�file�to�link�in�TESTE ‰Files�assembled�during�SYSGEN:3“9993..IOCINT.SA…CCB�allocation�routine�source�file3“9993..IOCVM.SA†Macro�definition�for�CCB�allocation ‰FORTRAN�interface�subroutines:“9993..RIOLIB.RO…Object�file“9993..RIOLIB.SA…Source�file$“9993..RIOLIB.AF…Assembly�chain�file ‰"News"�file:“9993..RIOONEWS.NW ‰System�equate�files: “9995..STR.EQˆRMS68K�equate�file2“9995..TCB.EQˆTask�Control�Block�(TCB)�equate�file5“9995..CCB.EQˆChannel�Control�Block�(CCB)�equate�file!“9995..TIMER.EQ†Timer�equate�file1“9995..NOL.EQˆInhibit�listing�command�source�file!“9995..TR1.EQˆTrap�#1�equate�file “9995..EXE.EQˆRMS68K�equate�file'“9995..LV5.EQˆLevel�5�(CMR)�equate�file2“9999.C8OC.SYSPAR.RO�System�parameters�object�file   JNOTE:‚All�files�on�user�number�0�of�this�diskette�should�be�copied�to�yourKsystem 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.‚The�volume�name�was�left�off�of�file�references�in�these�chain�files,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 willGhave�to�add�several�items�to�the�standard�SYSGEN�command�file.‚For�your@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)‚Memory�must�be�allocated�for�the�internal�driver�tables.:‰2)‚A�channel�control�block�(CCB)�must�be�created�for�each5�interrupt�level�for�which�the�RIO�board�is�jumpered.   IThe size of the memory area set aside for the driver tables is determined9by�two�variables�as�specified�by�you�in�the�SYSGEN.‚These$variables are "NRIO", and "NRIOINT". 6NRIO†This�is�the�number�of�RIO�boards�which�will�be�on6Šthe�system.‚Since�there�can�be�no�more�than�16�boards8Šon�the�I/O�Channel�(which�is�where�the�RIO�boards�are),#Šthe�maximum�value�of�"NRIO"�is�16. GNRIOINTƒThis�variable�is�set�to�the�number�of�hardware�interrupt�levels>Šfor�which�the�RIO�boards�will�be�jumpered.‚The�minimum�number'Šis�one�and�the�maximum�number�is�four. :Note that if you set either of these variables larger thanHactually�needed,�the�system�will�still �operate�normally.‚This�would�justCresult in having more memory allocated for internal tables than was necessary. JThe�variables�NRIO�and�NRIOINT�are�defined�in�the�file�RIOCOD.SA.‚You�willGhave to edit this file to reflect the correct values of these variablesFfor�your�particular�configuration.ƒThis�file�is�to�be�merged�into�yourSYSGEN command file.    AThe code to allocate memory for the RIO driver internal tables isGcontained�in�the�file�RIOMEM.SA.‚This�file�should�be�merged�intact�intoCINTIOV2.SA,�which�is�a�file�already�in�your�system.‚The�comments�inIINTIOV2 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 allocation2of�the�CCB's.‚The�file�RIOIOC.SA�has�been�included5to 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 theGinformation�needed�to�build�the�CCB's.‚When�setting�up�the�"CDB"�calls,remember the following: '1)ƒThe�RIO-ID�is�a�4-character�mnemonicE…such�as�"RIO1"�for�the�first�RIO1�board,�"RIO2"�for�the�second,�etc.  %RIOGEN.CF is a sample of a chain file-used to perform a SYSGEN with the RIO driver.FThe�file‚RIOCMD.SA‚is�a�sample�SYSGEN�command�file.‚Near�the�middle�ofKthis 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?with�RMS68K.‚The�RIO�driver�may�also�be�SYSGENed�with�VERSAdos.    CRIOLIB.SA‚and‚RIOLIB.RO‚are�the�FORTRAN-callable�subroutines�which,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?the�RIO�driver.‚The�purpose�in�providing�the�test�program�is�to?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 provideDoutput�relays�in�locations�5,7,8,�and�9.‚Connect�an�electronic�pulse@generator to input 0, with the ON pulse time of 10 milliseconds,�Lamp�5�will�alternate�on�/�off�at�the�pulse�repetition�rate.<„>�Lamps�7,8,9�will�turn�on�together�at�each�input�ON�pulse,9†then�will�go�out�in�sequence�7-8-9�(they�are�on�channels†performing�pulsed�output). 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 isB512�milliseconds.‚With�the�pulse�generator�set�as�described�above,?this�requirement�is�met.‚If�the�input�pulse�OFF�time�is�reducedCto below 512 milliseconds, the debounce requirement will not be met%and the input signal will be ignored. millisecond�debounce.‚To�make�channel�1�signals�be�recognized,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@message�in�the�test�task�A.S.Q..‚The�routine�'TESTIRQ'�moves�theAmessage from the ASQ (which is not directly acessable by the user?task�'TESTE')�to�the�task�reciever�buffer,�defined�as�RCVBUF‚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==============================================================================@====‚NEWS�FILE�FOR�DAC…(MVME605�-�D/A�BOARD)‰DRIVER�RELEASE‚====N============================================================================== HThis driver is compatible with both RMS68K Release 4.3 and VERSAdos 4.3.   .This driver consists of the following files -- ‰MVME605�driver�files: )�9992..D605.SA†MVME605�driver�source�file)�9992..D605.RO†MVME605�driver�object�file1�9992..D605.AF†MVME605�driver�assembly�chain�file  ‰Files�for�allocating�memory: /�9992..D605MEM.CIŠFile�included�at�SYSGEN�time./�9992..D605MEM.AGŠFile�assembled�at�SYSGEN�time/�9992..D605MEM.LGŠFile�for�linking�D605MEM�into §INITIO1.RO   !‰Files‚for�system�configuration�: "�9992.&.D605GEN.CIˆSYSGEN�commands"�9992.&.D605IOC.AIˆCCB�allocations0�9992.&.D605.LG‹Chain�file�to�link�in�the�driver  ‰FORTRAN�interface�subroutines:�9992..D605LIB.SA…Source�file%�9992..D605LIB.AF…Assembly�cha in�file�9992..D605LIB.RO…Object�file  ‰"News"�file:�9992..D605NEWS.NW HThe�MVME605�driver�source�file�is:�:9992..D605.SA.‚To�assemble�this�file"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.EQ�9995..RTDC.EQ�9995..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)�Set�the�variables�NDAC1�and�NUSRDAC‚in�the�SYSCMD.CD�file'�for�the�processor�board�you�are�using. 5‰(3)�Set�the�variable�PCDRV�=�1�in�the�SYSCMD.CD�file'�for�the�processor�board�you�are�using. 8‰(4)�Check�the�file�D605IOC.AI�to�be�sure�that�the�CCB's�conform�to�your�configuration.   FWhen setting up the "CDB" calls please note that each DAC-ID must haveCa�unique�name.‚This�is�also�the�name�any�application�task�would�useBto�address�the�driver�for�a�board.‚The�memory-mapped�I/O�addresses"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 willIhave�to�set�some�parameters�in�the�standard�SYSGEN�command�file.‚For�your>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@for�correctness.‚Please�edit�it�before�assembling�to�specify�theIcorrect 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:  <‰TEST1�individually�opens�each�channel�on�the�board,�outputs7�to�it,�checks�status,�turns�it�off,�checks�status,�and5�closes.�Any�errors�in�the�process�are�printed�on�the �terminal. >‰TEST2�individually�opens�each�channel,�outputs�to�it�&�checks8�status�until�all�are�on.�Then�it�individually�turns�off9�each�channel�&�checks�status�until�all�are�off.�It�turns'�all�outputs�back�on�for�the�next�test. ?‰TEST3�closes�the�channels.�The�OPERATOR�of�the�test�must�check�that�the�outputs�turn�off. =‰TEST4�opens�all�channels,�turns�the�channels�all�on,�delays,$�turns�all�channels�off,�and�closes. @‰TEST5�individually�opens�each�channel,�commands�a�pulse�output,8�delays�long�enough�to�be�able�to�see�the�pulse�end,�and�closes. ?‰TEST6�opens�four�channels,�commands�pulse�outputs�of�different9�lengths�to�each�simultaneously,�delays�to�be�able�to�see�it�happen,�and�closes. A‰TEST7�opens�channel�two�with�"queue�event"�configuration,�pulses:�output,�waits�for�queue�event,�verifies�the�message�sent, �and�closes.  ?‰TEST8�opens�channel�one�with�"wait�for�wake-up"�configuration,.�pulses�output,�waits�for�wake-up,�and�closes. ;‰TEST9�trys�OUTPUT�ON�with�channels�closed�and�verifies�the�command�error.6�trys�OUTPUT�OFF�with�channels�closed�and�verifies�the�command�error.7�trys�checking�STATUS�with�channels�closed�and�verifies�the�command�error.8�trys�PULSE�output�with�the�channels�closed�and�verifies�the�command�error. =‰TEST10�trys�opening�invalid�channel�numbers�and�verifies�the�command�errors.7�(zero�channels,�more�than�eight�channels,�channel�#�9,(�and�two�channels�with�the�same�number). :‰TEST11�opens�valid�ch annels�and�trys�invalid�commands�and�verifies�errors.�(�commands�0,�6,�7,�&�9). =‰TEST12�trys�opening�channels�and�then�opening�them�again�and�verifies�the�error.  ;‰Then�the�channels�are�closed.�If�all�tests�are�successful,3�a�message�is�printed�saying�so.�If�any�test�fails,�an�error�message�is�printed.<‰If�a�second�board�is�on�the�system,�it�returns�to�TEST1�and(�repeats�the�tests�for�the�second�board.=‰In�addition,�if�two�boards�are�present,�a�third�pass�through6�the�tests�alternates�between�the�boards�to�check�both�at�the�same�time.  ‰ENDN==============================================================================N==============================================================================éJ*=========================================================================*A*‚Code�added�to�allocate�memory�for�table�used�by�MVME625�driver.7*‚This�code�is�assembled�and�linked�during�SYSGEN�time.*K*========================================================================== ‰IFNE„\NDCO15T0PAGAL‚EQU…4‹Page�allocation�directive�#�for�Trap�0.6‰XREF„DCOTBL…SYSPAR�location�containing�DCOTBL�address ‰XDEF„D625MEM'‰INCLUDE�9995.&.D625.EQ„DCO�equate�file* ‰SECTION�8 D625MEM‚EQU‡*In order to incorporate this driver into your system, you willIhave�to�set�some�parameters�in�the�standard�SYSGEN�command�file.‚For�your>convenience, this release includes several files which contain@either the actual code to be added or a sample of the code which‰(2)�Set�the�variables�NDCO1�and�NUSRDCO‚in�the�SYSCMD.CD�file'�for�the�processor�board�you�are�using. 5‰(3)�Set�the�variable�PCDRV�=�1�in�the�SYSCMD.CD�file'�for�the�processor�board�you�are�using. 8‰(4)�Check�the�file�D625IOC.AI�to�be�sure�that�the�CCB's�conform�to�your�configuration. FWhen setting up the "CDB" calls please note that each DCO-ID must haveCa�unique�name.‚This�is�also�the�name�any�application�task�would�useBto�address�the�driver�for�a�board.‚The�memory-mapped�I/O�addresses"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‰TEST2�individually�opens�each�channel,�outputs�to�it�&�checks8�status�until�all�are�on.�Then�it�individually�turns�off9�each�channel�&�checks�status�until�all�are�off.�It�turns'�all�outputs�back�on�for�the�next�test. ?‰TEST3�closes�the�channels.�The�OPERATOR�of�the�test�must�check�that�the�outputs�turn�off. =‰TEST4�opens�all�channels,�turns�the�channels�all�on,�delays,$�turns�all�channels�off,�and�closes. @‰TEST5�individually�opens�each�channel,�commands�a�pulse�output,8�delays�long�enough�to�be�able�to�see�the�pulse�end,�and�closes. ?‰TEST6�opens�four�channels,�commands�pulse�outputs�of�different9�lengths�to�each�simultaneously,�delays�to�be�able�to�see�it�happen,�and�closes. A‰TEST7�opens�channel�two�with�"queue�event"�configuration,�pulses:�output,�waits�for�queue�event,�verifies�the�message�sent, �and�closes.  ?‰TEST8�opens�channel�one�with�"wait�for�wake-up"�configuration,.�pulses�output,�waits�for�wake-up,�and�closes. ;‰TEST9�trys�OUTPUT�ON�with�channels�closed�and�verifies�the�command�error.6�trys�OUTPUT�OFF�with�channels�closed�and�verifies�the�command�error.7�trys�checking�STATUS�with�channels�closed�and�verifies�the�command�error.8�trys�PULSE�output�with�the�channels�closed�and�verifies�the�command�error. =‰TEST10�trys�opening�invalid�channel�numbers�and�verifies�the�command�errors.7�(zero�channels,�more�than�eight�channels,�channel�#�9,(�and�two�channels�with�the�same�number). :‰TEST11�opens�valid�channels�and�trys�invalid�commands�and�verifies�errors.�(�commands�0,�6,�7,�&�9). =‰TEST12�trys�opening�channels�and�then�opening�them�again�and�verifies�the�error.  ;‰Then�the�channels�are�closed.�If�all�tests�are�successful,3�a�message�is�printed�saying�so.�If�any�test�fails,�an�error�message�is�printed.<‰If�a�second�board�is�on�the�system,�it�returns�to�TEST1�and(�repeats�the�tests�for�the�second�board.=‰In�addition,�if�two�boards�are�present,�a�third�pass�through6�the�tests�alternates�between�the�boards�to�check�both�at�the�same�time.      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:  ?‰indicators�0�thru�7�will�turn�on�individually�at�approximately‰one�second�intervals.“FOR�N�=�1�to�8�OPEN�channel�N-1�turn�on�indicator�N-1�wait�one�second�read�output�status�verify�indicator�N-1�on�turn�off�indicator�N-1�CLOSE“NEXT�N A‰indicators�0�thru�7�will�turn�on�one�at�a�time�until�all�are�on.“FOR�N�=�1�to�8�OPEN�channel�N-1�turn�on�indicator�N-1�wait�one�second�read�output�status"�verify�indicators�0�to�N-1�are�on“NEXT�N“wait�one�second“CLOSE“wait�one�second “read�status“verify�outputs�are�off "‰indicators‚0�thru�7�will�turn�on. “OPEN�all“turn�on�all�indicators“wait�one�second“turn�OFF�all�indicators“verify�all�indicators�are�off“CLOSE ,‰indicators�will�be�PULSED�on�one�at�a�time.4‰(default�configuration�-�no�wake-up�or�queue�event) “OPEN�all “FOR�N�=�1�TO�8�PULSE�indicator�N-1�wait�one�second“NEXT�N“CLOSE 7‰CLOSE�all�channels�and�try�all�commands.�Verify�error.“DCOUT‚command “DCOOFFƒ" “DCOSTAƒ" “DCOPLSƒ" “DCOPENƒ"6‰Try�DCOPEN�after�it�is�already�open�and�verify�error.  ;‰Check�for�a�second�board�on�the�system�and�repeat�the�test‰if�one�is�present.  ‰ENDN==============================================================================N==============================================================================éééééN************************* START OF FILE D610INT.AG ***************************„IFNEƒ\NVME610+\NVME620 ŠNOFORMATŠPAGE*‰INCLUDE�&.D610INT.AG0PAGAL…EQU„4ŽRMS68K�PAGAL�Trap�0�directive�number3KILLER„EQU„32�RMS68K�KILLER�Trap�0�directive�numberŠOPTƒCRE N*******************************************************************************:*‹Interrupt�Processing�Queue�Allocation�and�Initialization+*�for�the�Input�Module�(VME�610/620)�Driver*M*ƒThis�section�of�code�allocates�memory�for�the�Interrupt�Queue�Control�TableM* 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.*>*ƒThis�code�is�linked�into�the‚System�Initializer�as�describedK* 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ƒINPTBL�This�symbol�is�an�address�within�SYSPAR. ŠXDEFƒD610INTŠSPC„2 ŠSECTION�8ŠSPC„28D610QSIZ‚EQU„\D610QSIZ�This�is�the�size�of�the�Interrupt&*£Processing�Queue�in�terms�of�maximum,*£number�of�entries�the�queue�is�to�contain.Š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“Clear�all�registers�to�be�used�in�calling3ŠMOVE.L�D0,A0Žthe�RMS68K�memory�allocation�routine. ŠMOVE.L�D0,A1 ŠMOVE.L�D0,A6ŠSPC„22ŠADD.W‚#1,A0�Call�RMS68K�routine�PAGAL�to�allocate9ŠMOVE.B�#PAGAL,D0Š256�bytes�(1�page)�of�memory�for�global*ŠTRAPƒ#0‘variable�storage.�If�no�memory�is7ŠBRA.S‚INPM010Œavailable,�call�RMS68K�routine�KILLER�to!ŠBSR.S‚INPMKILL‹crash�the�system.ŠSPC„2>INPM010ƒMOVE.L�A0,INPTBLŒSave�the�global�variable�area�address3ŠMOVE.L�A0,A4Žreturned�by�PAGAL�in�the�input�driver'*£table�pointer�(INPTBL)�within�SYSPAR.-*£Make�a�permanent�copy�of�the�address�in�A3.ŠSPC„24ŠMOVE.W�#63,D0�Clear�the�global�variable�area�to�allINPM020ƒCLR.L‚(A0)+Žzeros.ŠDBRAƒD0,INPM020ŠPAGEI*ƒThe�following�code�uses�the�Interrupt�Queue�Control�Table�and�allocates* memory for the queue.ŠSPC„24INPM050ƒCLR.L‚D1’Clear�D1�for�use�as�work�register�.ŠSPC„28ŠMOVE.W�#D610QSIZ,D5‰Load�the�number�of�entries�that�the(*£Interrupt�Queue�is�to�contain�into�D5.ŠSPC„2<ŠMOVE.L�#'IQCT',QID(A4)†Initialize�the�ascii�ID�field�in�the(*£Interrupt�Queue�Control�Table�with�the**£mnemonic�'IQCT'.�This�mnemonic�serves�as-*£serves�as�a�visual�aide�in�analysing�memory*£dumps�for�debugging.ŠSPC„28ŠMULUƒ#IQENTLN,D5ŠCalculate�the�queue�length�in�bytes�by**£multiplying�the�number�of�entries�in�the"*£queue�by�the�queue�entry�length.ŠSPC„22ŠTST.B‚D5“Calculate�the�minimum�number�of�256�byte7ŠBEQ.S‚INPM055Œmemory�pages�necessary�to�accomodate�the1ŠADD.W‚#256,D5Œspecified�number�of�queue�entries.INPM055ƒLSR.W‚#8,D5ŠSPC„23ŠMOVE.W�#15,D0�Calculate�the�bit�number�of�the�most=INPM057ƒLSL.W‚#1,D5Žsignificant�bit�of�the�number�of�pages�to ŠDBCSƒD0,INPM057‰allocate�in�D5.ŠSPC„2/ŠBEQ.S‚INPM058ŽIf�bits�other�than�just�the�most6ŠADD.W‚#1,D0Žsignificant�bit�of�the�number�of�pages�is'*£set,�increment�the�number�of�the�most-*£significant�bit�to�the�next�higher�power�of*£two.ŠSPC„27INPM058ƒCLR.L‚D5“Set�the�number�of�pages�to�allocate�to6ŠBSETƒD0,D5Žthe�lowest�power�of�two�that�will�hold�the$*£requested�number�of�queue�entries.ŠSPC„2=INPM060ƒMOVE.L�D5,A0�Load�the�number�of�pages�to�be�allocated:ŠMOVE.L�#PAGAL,D0Šinto�A0�and�call�RMS68K�routine�PAGAL�to2ŠTRAPƒ#0‘obtain�the�memory.�If�the�required�amount6ŠBRA.S‚INPM070Œof�memory�is�not�available,�call�RMS68K>INPMKILL‚MOVE.L�#KILLER,D0‰routine�KILLER�to�crash�the�system.ŠTRAPƒ#0ŠSPC„2?INPM070ƒMOVE.L�A0,QPTR(A4)ŠStore�the�interrupt�processing�queue**£base�address�in�the�queue�control�table.ŠSPC„20ŠASL.W‚#8,D5�Convert�the�length�of�the�interrupt5ŠSUB.W‚#1,D5Žqueue�in�256�byte�pages�to�the�length�in>ŠMOVE.W�D5,QWAMSK(A4)†bytes.�Form�the�queue�wraparound�mask�by)*£decrementing�the�queue�length�and�store&*£the�mask�in�the�queue�control�entry.ŠSPC„2K*ƒThis�is�the�end�of�the�Input�Module�Driver�system�initialization�routine.*ŠFORMATM*****************************************************************************„ENDCK************************‚END�OF�FILE�D610INT.AG�***************************‰ENDéé éF‚MSG†*****************************************************************$‚MSG†*‚610/620„driver�initializationE‚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********************************************************************Á*;*†News�File�for�the�VME�610/620�AC/DC�Input�Module�Driver„**Á*C******************************************************************* GThis driver is compatible with both RMS68K Release 4.3 and VERSAdos 4.3 4This driver package consists of the following files: ‰VME�610/620�Driver�files:-�9992..D610.SA‹VME�610/620�Driver�Source�file-�9992..D610.RO‹VME�610/620�Driver�Object�file5�9992..D610.AF‹VME�610/620�Driver�Assembly�Chain�file <‰Files�to�allocate�memory�for�the�Interrupt�Processing�queue/�9992..D610INT.AGŠFile�assembled�at�SYSgen�time8�9992..D610INT.LGŠFile�for�linking�D610INT�into�INITIO1.3�9992..D610INT.CIŠFile�INCLUDEd�into�SYSgen�command§file�at�SYSgen�time. A‰File�to�be�INCLUDEd�into�the�SYSgen�command�file�at�SYSgen�time:$�9992..D610GEN.CIŠCommands�to�SYSgen ?‰File�to�LINK�the�driver�for�different�system�configurations�at ‹SYSgen�time:�9992..D610.LGŽLINK�commands F‰File�to�allocate�CCB's�for�VME�610/620�modules.�This�file�is�modifiedB‰as�necessary�for‚different�interrupt�levels�and�memory�addresses.C‰This‚file�is�included�in�the�assembly�of�IOCINT.AG�at�SYSgen�time.�9992..D610IOC.AI /‰The�driver�news�file�that�you�are�now�reading:�9992..D610NEWS.NW F‰VME�610/620�Driver�Command�and�Error�Code�Equate�files.�These�equatesB‹are�used�by�the�application�code�when�making�calls�to�the�driver.�9995..D610CMD.EQ A‰The�following�files�are�used�to�generate�the�driver�test�program�9992.D610.INPTST.LO�: 4�9992.D610.INPTST.SAˆPascal�main�program�source�file<�9992.D610.INTSTASM.SA†Source�for�assembly�procedures�calledªfrom�Pascal�main�program2�9992.D610.INPTST.PFˆPascal�compilation�chain�file*�9992.D610.INTSTASM.AF†Assembly�chain�file+�9992.D610.INPTST.LFˆTest�program�link�file<�9992.D610.PDOLRLIB.RO†Supplementary�Pascal�Run-time�Library G‚The�following�files�are�used�to�assemble�and�link�the�Fortran�callable"driver command subroutine library:o5x0€"ˆ'�  ‰9992..D610LIB.SA‰9992..D610LIB.RO‰9992..D610LIB.AF L‚To�assemble�the�VME�610/620�Driver�execute�the�chain�file�9992..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.‚Use�COPYSGEN�to�get�all�the�files�required�for�the�SYSgenF‚to�the�user�number�where�the�SYSgen‚will�be�performed�(usually�9100). I2.‚Edit�the�SYSCMD.CD�file�for�generating�the�RMS68K�or�VERSAdos�for�yourG‚target�system.�Modify�the�SYSgen�parameters�NVME610�and�NVME620.�TheseH‚parameters�define�the�maximum�number�of�VME�610�and�VME�620�boards�thatG‚will�occupy�the�target�system.�One�other�sysgen�parameter�that�must�beE‚modified�is�D610QSIZ.�This�parameter�defines�the�minimum�size�of�theF‚interrupt�processing�queue�in�terms�of�the�number�of�entries�that�theE‚queue�may�contain.�The�driver�can�accomodate�a�maximum�of�2048�queueH‚entries.�For�more�information�on�the�Interrupt�Processing�Queue�consult%‚the�VME�610/620�Driver�Users�Manual. D„Also,�the�SYSgen�parameter�PCDRV�must�be�set�to�one.�This�parameterG‚specifies�that�one�or�more�VME�600�Series�drivers�are�specified�in�the@‚SYSgen�so�the�I/O�Channel�Initialization�task�must�be�included. I3.‚Edit�the�file�D610IOC.AI�so�that�one�call�to�the�CDB�macro�is�made�forH‚each�VME�610�or�VME�620�board�that�was�specified�in�SYSCMD.CD.�Each�CDBL‚must�specify�a�unique�channel�mnemonic�(i.e.�'IN01').�The�memory�mapped�I/O?‚address�offset�can�be�modified�to�reflect�the�board�jumpering.5‚The�I/O�channel�interrupt�vector�number�and�hardwareJ‚interrupt�level�specified�for�each�CDB�can�also�be�modified�if�necessary.;‚Consult�the�SYSgen�Users�Guide�for�additional�information.  K4. You may now run the SYSgen utility using your modified SYSCMD.CD file toB‚generate�a�RMS68K�or�VERSAdos�boot�module�for�your�target�system. I‚Also�provided�with�this�driver�is�a�library�of�Fortran�callable�assemblyFlanguage subroutines that allow a Fortran application program to issueIcommands directly to the VME 610/620 driver. This library is contained infile D610LIB.RO. I‚If�the�drivers�target�environment�includes�VERSAdos,�you�may�wish�to�runMthe driver test program INPTST.LO to verify that you have an operable SYSgen. L‚This�test�program�allows�you�to�create�multiple�tasks�and�to�issue�commandsGfrom these tasks to the VME 610/620 driver by responding to prompts for1input commands via a single interactive terminal. J‚When�the�program�begins�executing,�the�user�is�prompted�for�the�number�ofKtasks 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‚The�name�of�the�first�test�task�is�displayed�and�the�user�is�asked�toNselect 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‚After�the�command�status�is�returned,�the�user�is�prompted�for�anotherLcommand 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‚Once�an�interrupt�channel�has�been�opened�and�interrupts�have�been�enabled,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: "„VME�610/620ƒInput�Channel„VME�625…mnemonic‰NumberˆOutput"„-----------ƒ-------------„------- †IN01�0�0 †IN01�1�1 †IN01�2�2 †IN01�3�3 †IN02�0�4 †IN02�1�5 †IN02�2�6 †IN02�3�7 G‚When�a�task�is�to�be�notified�of�an�interrupt�via�a�Wakeup,�a�slightlyMdifferent 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ÍÍ]ù=/*$=/*†PARAMETER�01ˆLINK�OUTPUT�LISTING=/*+=/*†DEFAULT�PARAMETER�01�-->�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�=�packed�record�chan_no�:�word;�config‚:�wordŽend; ƒcommand�=�packed�record�status�:�word; �codeƒ:�word;�case�boolean�of’true‚:�(chan_mask�:�word);’false�:�(chan_cnt‚:�word; ›cdb‡:�array�[0..7]�of�open_cdb)�end; ƒinit_IO�=�packed�record�done_flag:�word; �code…:�byte;�sub_code�:�byte;�unused_1�:�word;(�mnemonic�:�packed�array�[1..4]�of�char;)�unused_2�:�packed�array�[1..12]�of�byte;�cmd_adr‚:�^command;�cmd_len‚:�word�end; )ƒtask_name�=�packed�array�[1..4]�of�char; 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;*—var�task_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Œbegin�if�num_str[i]�>=�'A'9’then�num�:=�num�*�16�+�ord�(num_str[i])�-�ord�('A')�+�105’else�num�:=�num�*�16�+�ord�(num_str[i])�-�ord�('0'); �i�:=�i�+�1Œend;‰if�i�<=�length�(num_str)�thenŒbegin�error�:=�TRUE;+�write�('Invalid�hex�number�-�reenter�>�');�p$force�(output)Œend†endƒuntil�error�=�FALSE;ƒhex_in�:=�num end;{$E} procedure hex_out ( num : word); varƒnum_str�:�string[4];ƒi,j…:�integer; begin ƒnum_str�:=�'„';ƒfor�i�:=4�downto�1�do†begin‰j�:=�num�mod�16;‰num�:=�num�div�16; ‰if�j�>=�10®k·h,Œthen�num_str[i]�:=�chr�(j�-�10�+�ord�('A'))'Œelse�num_str[i]�:=�chr�(j�+�ord�('0'))†end;ƒwriteln�(num_str)end;{$E}procedure enter_command; varƒstatus„:�word; ƒi‰:�integer; beginƒwith�init_blk.cmd_adr^�do„begin†case�cm d_char[1]�of‰'W'�:�code�:=�WAIT;‰'O'�:�code�:=�OPEN;‰'C'�:�code�:=�CLOSE;‰'E'�:�code�:=�ENABLE;‰'D'�:�code�:=�DISABLE;‰'S'�:�code�:=�STAT†end;†if�code�<>�WAIT�thenˆbegin%Šwrite�('Enter�channel�mnemonic�>�');Šp$force�(output);Šreadln�(init_blk.mnemonic);Šif�code�<>�OPEN �then”{All�commands�except�OPEN}�begin*“write�('Enter�channels�mask�in�hex.�>�');“p$force�(output);“chan_mask�:=�hex_in�end�else”{OPEN�command}�begin /“write�('Enter�number�of�channels�to�open�>�');“p$force�(output);“readln�(chan_cnt); “for�i�:=�0�to�chan_cnt�-�1�do–begin#™write�('Enter�channel�number�>�');™p$force�(output);™readln�(cdb[i].chan_no);2™write�('Enter�channel�configuration�in�hex.�>�');™p$force�(output);™cdb[i].config�:=�hex_in–end Œend‚{else} ˆend;{if},†status�:=�send_command�(init_blk,�task_ID);†if�code�<>�WAITˆthen‰begin‹if�code�=�STATŽthen�begin’write�('Channel�Status�=�');’p$force�(output);’hex_out(chan_mask)�end;‹write�('Command�Status�is�');‹p$force�(output);‹hex_out�(status)‰end „end‚{with}end;{$E} begin‚{main} ƒwith�init_blk�do†begin ‰code�:=�7;‰sub_code�:=�0;‰new�(cmd_adr)†end; +ƒwrite�('Enter�number�of�tasks�(1-26)�>�');ƒp$force�(output);ƒreadln�(�task_cnt); ƒtask_ID�:=�'INPx'; ƒclone_tasks�(task_cnt); ƒwhile�true�do†for�i�:=�1�to�task_cnt�do‡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‡until�length�(cmd_char)�=�0end. =/*=/*†D610.INTSTASM.AF=/*0=/* CHAIN TO ASSEMBLE PORTION OF THE VME 610/620=/*†DRIVER�TEST�PROGRAM.=/*)=/*†DEFAULT�OUTPUT�LISTING�IS�INTSTASM.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éééééé¿ *‰INCLUDE�9995.&.TR1.EQŠINCLUDE�9995.&.TR1.EQ*‰INCLUDE�9995.&.TR1RTCD.EQŠINCLUDE�9995.&.TR1RTCD.EQ*‰INCLUDE�9995.&.EXE.EQŠINCLUDE�9995.&.EXE.EQ*‰INCLUDE�9995.&.LV5.EQŠINCLUDE�9995.&.LV5.EQ*‰INCLUDE�9995.&.D610CMD.EQŠINCLUDE�9995.&.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 ŠSECTION�9ŠXDEFƒCLONE_TA I*‚Create�the�specified�number�of�test�tasks�that�share�the�code�and�stackL* 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‹Save�return�addressŠSPC„2$ŠMOVE.L�(A7)+,D7‹Save�task�count�-�1 ŠSUB.L‚#1,D7ŠSPC„2:ŠLEA.L‚-100(A7),A7ˆAllocate�parameter�block�space�on�stackŠSPC„27ŠMOVE.L�A7,A0ŽStore�CRTCB�parameter�block�address�in�A0ŠSPC„2'*‚Initialize�Create�TCB�parameter�block @ŠMOVE.L�#'INPA',CRTTSK(A0)ƒName�tasks�alphabetically�within�sameŠCLR.L‚CRTSES(A0)‰sessionŠSPC„23ŠMOVE.W�#CTOPMP,CRTOPT(A0)�Propogate�monitor�optionŠSPC„21ŠMOVE.B�#$7F,CRTIPR(A0)„Run�task�at�max.�priorityŠMOVE.B�#$7F,CRTLPR(A0)ŠSPC„2-ŠMOVE.W�#$2000,CRTATT(A0)‚Task�dump�attributeŠSPC„2.ŠLEA.L‚TASKENT(PC),A1…Task�entry�point�addressŠMOVE.L�A1,CRTENT(A0)ŠSPC„2ŠMOVE.W�#0,CRTUID(A0)†User�0ŠSPC„2* Create TCB's %ŠMOVE.W�D7,D1ŽInitialize�loop�counterŠSPC„2)TCBLOOPƒMOVE.L�#CRTCB,D0ŠIssue�CRTCB�callŠTRAPƒ#1 ŠBEQ.S‚TCBOK ŠBSR„ERRORŠSPC„2ETCBOK…ADD.B‚#1,CRTTSK+3(A0)„Update�task�name�and�loop�until�all�tasks#ŠDBRAƒD1,TCBLOOP‰have�been�created.ŠSPC„25* Initialize Share Segment directive parameter block. #ŠMOVE.L�#'INPA',SEGTCB(A0)ƒTaskname<ŠMOVE.W�#SGOPPA,SEGOPT(A0)ƒLogical�=�physical�address�optionŠSPC„23ŠMOVE.W�#SGATSS,SEGATT(A0)ƒSession�sharable�segmentŠSPC„2,* Share code and data segments to each task. %ŠMOVE.L�D7,D1ŽInitialize�loop�counter ŠMOVE.L�A7,A1ŠSPC„2ÈHÑIÙ9áBéB=SEGLOOPƒMOVE.L�#SHRSEG,D0‰Share�the�code�segment�to�each�taskŠMOVE.L�#'CODE',SEGNAM(A1) ŠMOVE.L�A1,A0ŠTRAPƒ#1 ŠBEQ.S‚SEG010 ŠBSR„ERRORŠSPC„2DSEG010„MOVE.L�#SHRSEG,D0‰Share�the�PASCAL�stack�segment�to�each�taskŠMOVE.L�#'SEG2',SEGNAM(A1) ŠMOVE.L�A1,A0ŠTRAPƒ#1 ŠBEQ.S‚SEG020 ŠBSR„ERRORŠSPC„2FSEG020„ADD.B‚#1,SEGTCB+3(A1)†Loop�until�both�segments�have�been�sharedŠDBRAƒD1,SEGLOOP‰to�all�tasks.ŠSPC„2)* Initialize Allocate ASQ parameter block ŠMOVE.L�A1,A0,ŠMOVE.L�#'INPA',ASQTSK(A0)„Initial�task�nameŠSPC„2AŠMOVE.B�#AQSTQE+AQSTRE+8,ASQSTA(A0)�ASR/ASQ�enabled,�no�registersŠSPC„23ŠMOVE.B�#16,ASQMML(A0)…Max.�event�length�=�16�bytesŠSPC„2.ŠMOVE.L�#2048,ASQQLN(A0)ƒASQ�length�=�2K�bytesŠSPC„2-ŠLEA.L‚INTASR(PC),A1†Default�to�interrupt�ASRŠMOVE.L�A1,ASQASR(A0)ŠSPC„2* Allocate ASQs for each task %ŠMOVE.L�D7,D1ŽInitialize�loop�counterŠSPC„25ASQLOOPƒMOVE.L�#GTASQ,D0ƒIssue�Allocate�ASQ�directiveŠTRAPƒ#1 ŠBEQ.S‚ASQ010 ŠBSR„ERRORŠSPC„2EASQ010„ADD.B‚#1,ASQTSK+3(A0)†Loop�until�an�ASQ�has�been�allocated�forŠDBRAƒD1,ASQLOOP‰each�task.ŠSPC„2'*Initialize Start Task parameter block. :ŠMOVE.L�#'INPA',STRTSK(A0)ƒStart�tasks�without�passing�any+ŠMOVE.W�#0,STROPT(A0)†initialize�registers.ŠSPC„2* Start all tasks *ŠMOVE.L�D7,D1�Initialize�the�loop�counter.ŠSPC„2#STARTLPƒMOVE.L�#START,D0ŠStart�taskŠTRAPƒ#1ŠBEQ.S‚STRT010 ŠBSR„ERRORŠSPC„2DSTRT010ƒADD.B‚#1,STRTSK+3(A0)„Loop�until�all�tasks�have�been�startedŠDBRAƒD1,STARTLPŠSPC„2* Task startup completeŠSPC„2-ŠLEA.L‚100(A7),A7‰Restore�entry�stack�pointerŠSPC„2+ŠJMP„(A4)�Return�to�calling�PASCAL�routine.Š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„Pull�parameters�from�stack*¤A1�=�Return�address*¤A2�=�Task�ID�address*¤A4�=�Initiate�I/O�PB�addressŠSPC„2>ŠLEA.L‚-100(A7),A7ˆAllocate�parameter�block�space�on�the�stackŠSPC„2-* Initialize the Queue Event parameter block. 6ŠMOVE.L�A7,A0ŽSave�parameter�block�base�address�in�A0.ŠSPC„2?ŠMOVE.L�(A2),QEVTSK(A0)†Copy�the�task�ID�passed�from�the�PASCAL'*£routine�to�the�destination�task�name.ŠSPC„2@ŠMOVE.W�#QVOPAS,QEVOPT(A0)ƒSet�the�command�processing�ASR�of�the?ŠLEA.L‚CMDASR(PC),A2†tast�task�to�be�the�alternate�ASRT�serviceŠMOVE.L�A2,QEVIAD(A0)†address.ŠSPC„2?ŠLEA.L‚QEVIAD+4(A0),A2†Load�the�event�buffer�address�(following=ŠMOVE.L�A2,QEVPKT(A0)†the�parameter�block)�into�the�parameter*£block.ŠSPC„22ŠCLR.W‚(A4)+�Clear�the�command�conpletion�flag�and(*£update�the�pointer�to�the�Initiate�I/O*£parameter�block�base�address.ŠSPC„2;ŠMOVE.W�#$0603,(A2)+‰Event�length�=�6�bytes,�Event�code�=�3ŠMOVE.L�A4,(A2)+ŠSPC„2@ŠMOVE.W�#CMDLEN,XIOPLN(A4)ƒAssume�that�the�length�of�the�command'*£block�is�standard�(i.e.�not�an�OPEN�) ŠSPC„29ŠMOVE.L�XIOCPK(A4),A2‡Get�the�command�block�base�address.ŠSPC„2BŠCMP.W‚#INOPEN,CMDCOD(A2)‚If�the�command�is�not�OPEN,�the�standard/ŠBNE.S‚QUECMD�length�already�loaded�is�correct.ŠSPC„2:ŠMOVE.W�CMDNCO(A2),D1ˆCalculate�the�correct�length�for�the:ŠMULUƒ#OPNCDB,D1‰OPEN�command�parameter�block�and�store�in)ŠADD.L‚#CMDCHL,D1‰the�Initiate�I/O�block.ŠMOVE.W�D1,XIOPLN(A4)ŠSPC„2AQUECMD„MOVE.L�#QEVNT,D0‹Queue�the�command�event�to�the�test�task.ŠTRAPƒ#1ŠBEQ.S‚ACKLOOP ŠBSR„ERRORŠSPC„2;ACKLOOPƒTST.B‚-2(A4)�Loop�until�the�command�completion�flag+ŠBEQ„ACKLOOPŒhas�been�set�by�the�test�task.ŠSPC„22ŠLEA.L‚100(A7),A7‹Restore�the�entry�stack�pointer.ŠSPC„2=ŠMOVE.W�CMDSTA(A2),(A7)†Save�the�command�completion�status�in(*£the�function�return�word�on�the�stack.ŠSPC„2/ŠJMP„(A1)‘Return�to�the�calling�PASCAL�routine.ŠSPC„2ŠPAGEJ*‚This�is�the�test�task�that�issues�commands�to�the�driver�as�specified�byL* 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ŒVME�625�module�I/O�channel�address (* Allocate Stack Segment parameter block SEGBLK„DC.Lƒ0’Task�name…(self)ŠDC.Lƒ0’Session�number(self)6ŠDC.WƒSGOPPA�Logical�Address�=�Physical�address�option)ŠDC.WƒSGATRW�Read/Write�Segmant�attributeŠDC.Lƒ'STAK'�Segment�name)ŠDC.Lƒ0’Segment�address�(Returned�by�RMS)ŠDC.Lƒ$100�Segment�lengthŠSPC„2* Test task entry point* Allocate a stack segment >TASKENTƒMOVE.L�#GTSEG,D0ŠAllocate�a�stack�segment�of�256�bytesŠLEA.L‚SEGBLK(PC),A0ŠTRAPƒ#1 ŠBEQ.S‚TSK010 ŠBSR„ERRORŠSPC„2BTSK010„LEA.L‚$F8(A0),A7‰Initialize�the�stack�pointer�to�the�end�of*£the�stack�segment.ŠSPC„2CTSKWTEVT‚MOVE.L�#WTEVNT,D0‹Wait�for�a�command�event�or�an�interrupt*ŠTRAPƒ#1‘event�to�be�processed�in�the�ASR.ŠBEQ.S‚TSKWTEVT ŠBSR„ERRORŠSPC„2I*‚Control�reaches�here�when�the�user�has�issued�a�command�for�the�task�to* enter the wait state. ;TSKWAITƒMOVE.L�#WAIT,D0ŒPlace�the�task�into�a�WAIT�state�so0ŠTRAPƒ#1‘interrupts�may�be�processed�on�channels*£using�WAKEUP.ŠSPC„23ŠBSETƒ#7,VME625ŒPulse�LED�7�on�the�VME�625�board�to8ŠBCLRƒ#7,VME625Šindicate�that�a�wakeup�has�been�receivedŠSPC„26ŠBRA.S‚TSKWAITŽThis�loop�repeats�until�a�command�event*£is�queued�to�the�test�task.ŠPAGE* Command event ASR 3CMDASR„SUB.L‚#16,A7�Allocate�stack�to�receive�event ŠMOVE.L�A7,A0ŠSPC „21ŠMOVE.L�#RDEVNT,D0ŠRead�command�event�into�bufferŠTRAPƒ#1 ŠBEQ.S‚CMD020 ŠBSR.S‚ERRORŠSPC„28CMD020„MOVE.L�EVQTXT(A0),A0‡Load�event�text�base�address ŠADD.L‚#16,A7=ŠMOVE.L�XIOCPK(A0),A1ˆLoad�Input�Command�Parameter�Block�base *£addressŠSPC„27ŠTST.W‚CMDCOD(A1)ŠIf�the�command�code�is�zero,�the�test3ŠBEQ.S‚CMDWAITŒtask�is�to�be�put�into�a�WAIT�state.ŠSPC„2* Issue command to the driver. 5ŠMOVE.L�#CMR,D0ŒIssue�the�Initiate�I/O�command�to�CMRŠTRAPƒ#1 ŠBEQ.S‚CMD030ŠSPC„2=ŠMOVE.W�D0,CMDSTA(A1)ˆIf�an�error�is�returne�by�CMR,�copy�the'*£error�code�into�the�IPB�status�field.ŠSPC„24* Signal supervisor task that command was completed. FCMD030„MOVE.W�#$FFFF,-2(A0)†Set�the�command�completion�flag�and�returnŠRTR—from�the�eventŠSPC„2* Put task in WAIT state CCMDWAITƒLEA.L‚TSKWAIT(PC),A1‡Change�the�event�return�address�to�the'ŠMOVE.L�A1,2(A7)‹WAIT�loop�entry�point.ŠSPC„25ŠMOVE.W�#$FFFF,-2(A0)ˆSet�the�command�completion�flagŠSPC„2;ŠMOVE.L�#SETASQ,D0‹Enable�the�ASR�and�ASQ�so�command�events4ŠMOVE.L�#5,A0Žmay�be�processed�when�a�WAKEUP�occurs.ŠTRAPƒ#1 ŠBEQ.S‚CMD010 ŠBSR.S‚ERRORŠSPC„20CMD010„RTR˜Return�to�the�WAIT�state�loop�until�a+*£command�event�is�waiting�and�a�WAKEUP�has(*£been�issued�to�the�task�by�the�driver.ŠPAGE* Interrupt Event ASR 3INTASR„SUB.L‚#16,A7�Allocate�stack�to�receive�event ŠMOVE.L�A7,A0ŠSPC„2)ŠMOVE.L�#RDEVNT,D0‰Read�event�into�bufferŠTRAPƒ#1 ŠBEQ.S‚INT010 ŠBSR.S‚ERRORŠSPC„2;INT010„MOVE.B�3(A0),D0‹Load�the�interrupting�channal�numberŠSPC„28ŠCMP.L‚#'IN02',4(A0)ˆIf�the�first�module�is�interrupting1ŠBNE.S‚INT020�leave�the�channel�number�unchanged.ŠSPC„21ŠADD.B‚#4,D0�If�the�second�module�is�interrupting!*£add�four�to�the�channel�number.ŠSPC„28INT020„BSETƒD0,VME625ŒPulse�the�LED�corresponding�to�the(ŠBCLRƒD0,VME625Šmodified�channel�number.ŠSPC„2ŠADD.L‚#16,A7�Restore�stackŠSPC„2ŠRTR™Return�from�eventŠSPC„2;ERROR…MOVE.L�(A7)+,A0�Abort�the�task�if�an�unexpected�error9ŠMOVE.L�#ABORT,D0Šoccurs.�The�address�of�wherer�the�error3ŠTRAPƒ#1‘occurred�is�stored�in�A0�for�the�SCT�abort *£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›Y�fú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¨B�B¨BhBh B¨!|SEG2 pNAfþAí!CB�B¨1| B¨!|SEG2 1| pNAfýè–„ƒŠ`BƒaÞ,iÝüˆÝÃKí¼0<¼=%U@fú.N*O$iGê`+Kp&üÿÿÿÿB›+K+i l&Jr`B›Y�fúAú´%H,Aút%H0AúÂ%H8AúØ%HHíÿÿ|+o t <+@xaÿ:`ÿ H@0-4H@,NAB€B�Iú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 p�j&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€B�Iúû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€³ƒJ�jD�tÿ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€Ñ“&_B�Nu.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 +g�J€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^ _T�NÐ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ÿöHhU�aý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ÿö .ÿúå@HpU�aûú0 _0€R®ÿúi .ÿò°®ÿúlÿNU�Hmÿ˜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,<:ahB�2a$<.a\TŠF3 raF<.aPra<<.aFra2>ƒNÐBJ�f<0RJ�g‚ü 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^ _T�NÐ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ÿöHhU�aý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ÿö .ÿúå@HpU�aûú0 _0€R®ÿúi ÿVª¨ .ÿò°®ÿúlÿNN3´ þâþ>ÂÀU�Hmÿ˜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  OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡1 5¥*Motorola�Pascal‚2.30ƒINPTST‚.SA�03/21/83�10:22:50¢0&¥*program�Input_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�=�packed�record»15¥*�chan_no�:�word;¸16¥*�config‚:�word¹17 ¥*Žend;Ä18¥*Ö19¥*ƒcommand�=�packed�record¼20¥*�status�:�word;¹21¥*�codeƒ:�word;¹22¥*�case�boolean�of¸23 ¥*’true‚:�(chan_mask�:�word);©24¥*’false�:�(chan_cnt‚:�word;ª25%¥*›cdb‡:�array�[0..7]�of�open_cdb)–26 ¥*�end;Ã27¥*Ö28¥*ƒinit_IO�=�packed�record¼29¥*�done_flag:�word;·30¥*�code…:�byte;·31¥*�sub_code�:�byte;·32¥*�unused_1�:�word;·33-¥*�mnemonic�:�packed�array�[1..4]�of�char; 34.¥*�unused_2�:�packed�array�[1..12]�of�byte;Ÿ35¥*�cmd_adr‚:�^command;³36¥*�cmd_len‚:�word¸37 ¥*�end;Å38 É,Î*ÒÖÚÞ(â"æê%îò#öúþ! !##!"&¥*Ö39.¥*ƒtask_name�=�packed�array�[1..4]�of�char;«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/¥*procedure�p$force�(var�fil:text);�forward;¬50¥*Ö519¥*procedure�clone_tasks�(task_cnt�:�integer);�forward;¢52¥*Ö533¥*function�send_command�(var�init_blk�:�init_IO;¨54/¥*—var�task_ID�:�task_name)�:�word;�forward;–55   OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡2 ¥*{$E}Ò56¥*function�hex_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;¾6800000000�USER4…EQUƒ* 00000000†4E56�FFEE˜LINK„A6,#-18�00000004�L3ˆEQU…*!00000004†422E�FFF3˜CLR.Bƒ-13(A6)�¥*‰readln�(num_str);¼6900000008†7008�MOVEQƒ#8,D0�!0000000A†43EE�FFF8˜LEA…-8(A6),A1�!0000000E†41ED�FFF8˜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†426E�FFF4˜CLR…-12(A6)� ¥*‰i�:=�1;Æ71(0000001E†3D7C�0001�FFF6“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'�))ƒ)�do�7500000024�L4ˆEQU…*&00000024†3F2E�FFF6˜MOVE„-10(A6),-(A7)�!00000028†41EE�FFF8˜LEA…-8(A6),A0�¯XREF„8:.PLODS„)0000002C†4EAB�****˜JSR….PLODS-.PLJSR(A3)�¯XREF„8:.PSLEN„)00000030†4EAB�****˜JSR….PSLEN-.PLJSR(A3)�00000034†B05F�CMP…(A7)+,D0�00000036†6D**�BLT…L5�(00000038-003A�302E�FFF6˜MOVE„-10(A6),D0�10000003C-003E�0C36�0030�00F9“CMP.Bƒ#48,-7(A6,D0)�00000042-0044�6D**�BLT…L7�100000044-0048�0C36�0039�00F9“CMP.Bƒ#57,-7(A6,D0)�0000004A-004E�6F**�BLE…L6�0000004C-0052˜L7ˆEQU…*(0000004C-0052�302E�FFF6˜MOVE„-10(A6),D0�100000050-0056�0C36�0041�00F9“CMP.Bƒ#65,-7(A6,D0)�00000056-005C�6D**�BLT…L5�100000058-0060�0C36�0046�00F9“CMP.Bƒ#70,-7(A6,D0)�0000005E-0066�6E**�BGT…L5�00000060-006A˜L6ˆEQU…* ¥*ŒbeginÅ76¥*�if�num_str[i]�>=�'A'³77>¥*’then�num�:=�num�*�16�+�ord�(num_str[i])�-�ord�('A')�+�10Œ78   OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡3 (00000060-006A�302E�FFF6˜MOVE„-10(A6),D0�100000064-006E�0C36�0041�00F9“CMP.Bƒ#65,-7(A6,D0)�0000006A-0074�6D**�BLT…L8�:' ¥*’else�num�:=�num�*�16�+�ord�(num_str[i])�-�ord�('0');�79(0000006C-0078�322E�FFF4˜MOVE„-12(A6),D1�00000070-007C�48C1�EXT.LƒD1�00000072-007E�E981�ASL.Lƒ#4,D1�,00000074-0080�1436�00F9˜MOVE.B‚-7(A6,D0),D2�00000078-0084�4882�EXT…D2�0000007A-0086�48C2�EXT.LƒD2�0000007C-0088�D282�ADD.LƒD2,D1�)0000007E-008A�0481�00000037”SUB.Lƒ#55,D1�(00000084-0090�3D41�FFF4˜MOVE„D1,-12(A6)�00000088-0094�60**�BRA…L9�0000008A-0098˜L8ˆEQU…*(0000008A-0098�302E�FFF4˜MOVE„-12(A6),D0�0000008E-009C�48C0�EXT.LƒD0�00000090-009E�E980�ASL.Lƒ#4,D0�(00000092-00A0�322E�FFF6˜MOVE„-10(A6),D1�,00000096-00A4�1436�10F9˜MOVE.B‚-7(A6,D1),D2�0000009A-00A8�4882�EXT…D2�0000009C-00AA�48C2�EXT.LƒD2�0000009E-00AC�D082�ADD.LƒD2,D0�)000000A0-00AE�0480�00000030”SUB.Lƒ#48,D0�(000000A6-00B4�3D40�FFF4˜MOVE„D0,-12(A6)�¥*�i�:=�i�+�1½80 ¥*Œend;Æ81000000AA-00B8˜L9ˆEQU…*(000000AA-00B8�302E�FFF6˜MOVE„-10(A6),D0�000000AE-00BC�48C0�EXT.LƒD0� 000000B0-00BE�5280�ADDQ.L‚#1,D0�(000000B2-00C0�3D40�FFF6˜MOVE„D0,-10(A6)�000000B6-00C4�6000�****˜BRA…L4�#¥*‰if�i�<=�length�(num_str)�then°82000000BA-00C8˜L5ˆEQU…*+000000BA-00C8�3F2E�FFF6˜MOVE„-10(A6),-(A7)�&000000BE-00CC�41EE�FFF8˜LEA…-8(A6),A0�.000000C2-00D0�4EAB�****˜JSR….PLODS-.PLJSR(A3)�.000000C6-00D4�4EAB�****˜JSR….PSLEN-.PLJSR(A3)� 000000CA-00D8�B05F�CMP…(A7)+,D0�000000CC-00DA�6D**�BLT…L10� ¥*ŒbeginÅ83¥*�error�:=�TRUE;¹84/000000CE-00DE�1D7C�0001�FFF3“MOVE.B‚#1,-13(A6)�0¥*�write�('Invalid�hex�number�-�reenter�>�');�85$000000D4-00E4�486D�FFF0˜PEA…-16(A5)�¯XREF„8:.PLDCS„.000000D8-00E8�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�000000DC-00EC�001F�DC.W„314000000DE-00EE¢DC.B„'Invalid�hex�number�-�reenter�>�'000000FE-010E�4267�CLR…-(A7)�¯XREF„8:.PWRS…-00000100-0110�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*�p$force�(output)·86 ¥*ŒendÇ87#00000104-0114�2F08�MOVE.L‚A0,-(A7)�00000106-0116�4E93�JSR…(A3)�   OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡4 #00000108-0118�********™DC.L„USER1-* ¥*†endÍ88¥*ƒuntil�error�=�FALSE;¿890000010C-011C˜L10‡EQU…*&0000010C-011C�4A2E�FFF3˜TST.Bƒ-13(A6)�00000110-0120�6600�****˜BNE…L3�¥*ƒhex_in�:=�numÆ90¥*Ö91 ¥*end;Ò92000000114-0124�3D6E�FFF4�0008“MOVE„-12(A6),8(A6)�0000011A-012A�4E5E�UNLK„A6�0000011C-012C�4E75�RTS† ¥*{$E}Ò93%¥*procedure�hex_out�(�num�:�word);¶94¥*Ö95¥*varÓ96¥*ƒnum_str�:�string[4];¿97¥*ƒi,j…:�integer;Á98¥*Ö99 ¥*beginÐ100¥*Õ101¥*ƒnum_str�:=�'„';À10200000120�USER5…EQUƒ* 00000120†4E56�FFEE˜LINK„A6,#-18�!00000124†41EE�FFFA˜LEA…-6(A6),A0�¯XREF„8:.PSTCV„)00000128†4EAB�****˜JSR….PSTCV-.PLJSR(A3)�0000012C†0006�DC.W„60000012E†0004�DC.W„400000130§DC.B„'„'¥*ƒfor�i�:=4�downto�1�do½103.00000134†2D7C�00000004�FFF2�MOVE.L‚#4,-14(A6)� ¥*†beginÊ104¥*‰j�:=�num�mod�16;¼1050000013C�L13‡EQU…*!0000013C†302E�0008˜MOVE„8(A6),D0�00000140†48C0�EXT.LƒD0�00000142†7210�MOVEQƒ#16,D1�¯XREF„8:.PMODJ„)00000144†4EAB�****˜JSR….PMODJ-.PLJSR(A3)�00000148†0000�DC.W„0%0000014A†2D40�FFF6˜MOVE.L‚D0,-10(A6)�¥*‰num�:=�num�div�16;º106!0000014E†342E�0008˜MOVE„8(A6),D2�00000152†48C2�EXT.LƒD2�00000154†2601�MOVE.L‚D1,D3�¯XREF„8:.PDVJ…(00000156†4EAB�****˜JSR….PDVJ-.PLJSR(A3)�0000015A†0002�DC.W„2!0000015C†3D42�0008˜MOVE„D2,8(A6)�¥*‰if�j�>=�10Â1072¥*Œthen�num_str[i]�:=�chr�(j�-�10�+�ord�('A'))ž108$00000160†0C80�0000000A”CMP.Lƒ#10,D0�00000166†6D**�BLT…L16�-¥*Œelse�num_str[i]�:=�chr�(j�+�ord�('0'))£109(00000168-016A�382E�FFF4˜MOVE„-12(A6),D4�)0000016C-016E�0680�00000037”ADD.Lƒ#55,D0�   OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡5 ,00000172-0174�1D80�40FB˜MOVE.B‚D0,-5(A6,D4)�00000176-0178�60**�BRA…L17� ¥*†end;Ë11000000178-017C˜L16‡EQU…*(00000178-017C�302E�FFF4˜MOVE„-12(A6),D0�*0000017C-0180�222E�FFF6˜MOVE.L‚-10(A6),D1�)00000180-0184�0681�00000030”ADD.Lƒ#48,D1�,00000186-018A�1D81�00FB˜MOVE.B‚D1,-5(A6,D0)�0000018A-018E˜L17‡EQU…**0000018A-018E�53AE�FFF2˜SUBQ.L‚#1,-14(A6)�0000018E-0192˜L14‡EQU…*20000018E-0192�0CAE�00000001�' FFF2�CMP.Lƒ#1,-14(A6)�00000196-019A�6C**�BGE…L13�¥*ƒwriteln�(num_str)Á111 ¥*end;Ñ11200000198-019E˜L15‡EQU…*$00000198-019E�486D�FFF0˜PEA…-16(A5)�&0000019C-01A2�41EE�FFFA˜LEA…-6(A6),A0�.000001A0-01A6�4EAB�****˜JSR….PLODS-.PLJSR(A3)�000001A4-01AA�4267�CLR…-(A7)�-000001A6-01AC�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¯XREF„8:.PWLN…-000001AA-01B0�4EAB�****˜JSR….PWLN-.PLJSR(A3)�000001AE-01B4�4E5E�UNLK„A6�#000001B0-01B6�205F�MOVE.L‚(A7)+,A0� 000001B2-01B8�548F�ADDQ.L‚#2,A7�000001B4-01BA�4ED0�JMP…(A0)� ¥*{$E}Ñ113¥*procedure�enter_command;½114¥*Õ115 ¥*varÒ116¥*ƒstatus„:�word;Á117¥*ƒi‰:�integer;¾118¥*Õ119 ¥*beginÐ120 ¥*ƒwith�init_blk.cmd_adr^�do¹121000001B6�USER6…EQUƒ* 000001B6†4E56�FFF2˜LINK„A6,#-14�/000001BA†2D6D�FFAE�FFF6“MOVE.L‚-82(A5),-10(A6)� ¥*„beginÌ122¥*†case�cmd_char[1]�of¼123%000001C0†102D�FFC2˜MOVE.B‚-62(A5),D0�000001C4†60**�BRA…T1�¥*‰'W'�:�code�:=�WAIT;¹124000001C6-01C8˜L26‡EQU…**000001C6-01C8�206E�FFF6˜MOVE.L‚-10(A6),A0�"000001CA-01CC�4268�0002˜CLR…2(A0)�¥*‰'O'�:�code�:=�OPEN;¹125000001CE-01D0�60**�BRA…L25�000001D0-01D4˜L27‡EQU…**000001D0-01D4�206E�FFF6˜MOVE.L‚-10(A6),A0�+000001D4-01D8�317C�0001�0002“MOVE„#1,2(A0)�¥*‰'C'�:�code�:=�CLOSE;¸126000001DA-01DE�60**�BRA…L25�000001DC-01E2˜L28‡EQU…**000001DC-01E2�206E�FFF6˜MOVE.L‚-10(A6),A0�+000001E0-01E6�317C�0002�0002“MOVE„#2,2(A0)�   OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡6 ¥*‰'E'�:�code�:=�ENABLE;·127000001E6-01EC�60**�BRA…L25�000001E8-01F0˜L29‡EQU…**000001E8-01F0�206E�FFF6˜MOVE.L‚-10(A6),A0�+000001EC-01F4�317C�0006�0002“MOVE„#6,2(A0)�¥*‰'D'�:�code�:=�DISABLE;¶128000001F2-01FA�60**�BRA…L25�000001F4-01FE˜L30‡EQU…**000001F4-01FE�206E�FFF6˜MOVE.L‚-10(A6),A0�+000001F8-0202�317C�0007�0002“MOVE„#7,2(A0)�¥*‰'S'�:�code�:=�STATº129 ¥*†end;Ë130000001FE-0208�60**�BRA…L25�00000200-020C˜L31‡EQU…**00000200-020C�206E�FFF6˜MOVE.L‚-10(A6),A0�+00000204-0210�317C�0005�0002“MOVE„#5,2(A0)�0000020A-0216�60**�BRA…L25�0000020C-021A˜L24‡EQU…*&0000020C-021A�3F3C�0001˜MOVE„#1,-(A7)�00000210-021E�4E4E�TRAP„#14�00000212-0220�0003�DC.W„300000214-0222˜L23‡EQU…*00000222�T1ˆEQU…* 00000222†0C00�0057˜CMP.Bƒ#87,D0�00000226†6E**�BGT…L24�&00000228-022A�41FA�000C˜LEA…12(PC),A0� 0000022C-022E�5688�ADDQ.L‚#3,A0�"0000022E-0230�B018�CMP.Bƒ(A0)+,D0�00000230-0232�6EFA�BGT…*-4�00000232-0234�6D**�BLT…L24�00000234-0238�D0D0�ADD…(A0),A0�00000236-023A�4ED0�JMP…(A0)�00000238†0043�DC.W„670000023A†FFA8�DC.W„-880000023C†0044�DC.W„680000023E†FFC0�DC.W„-6400000240†0045�DC.W„6900000242†FFAE�DC.W„-8200000244†004F�DC.W„7900000246†FF8E�DC.W„-11400000248†0053�DC.W„830000024A†FFC2�DC.W„-620000024C†0057�DC.W„870000024E†FF7A�DC.W„-134¥*†if�code�<>�WAIT�then»13100000250�L25‡EQU…*%00000250†206E�FFF6˜MOVE.L‚-10(A6),A0�!00000254†3028�0002˜MOVE„2(A0),D0�00000258†48C0�EXT.LƒD0�0000025A†4A80�TST.LƒD0�0000025C†67**�BEQ…L32� ¥*ˆbeginÈ132+¥*Šwrite�('Enter�channel�mnemonic�>�');§133$0000025E-0260�486D�FFF0˜PEA…-16(A5)�.00000262-0264�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�00000266-0268�0019�DC.W„25.00000268-026A¢DC.B„'Enter�channel�mnemonic�>�'   OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡7 00000282-0284�4267�CLR…-(A7)�-00000284-0286�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*Šp$force�(output);º134#00000288-028A�2F08�MOVE.L‚A0,-(A7)�0000028A-028C�4E93�JSR…(A3)�#0000028C-028E�********™DC.L„USER1-*"¥*Šreadln�(init_blk.mnemonic);°13500000290-0292�7004�MOVEQƒ#4,D0�'00000292-0294�43ED�FF9E˜LEA…-98(A5),A1�&00000296-0298�41ED�FFF8˜LEA…-8(A5),A0�¯XREF„8:.PRDV…-0000029A-029C�4EAB�****˜JSR….PRDV-.PLJSR(A3)�-0000029E-02A0�4EAB�****˜JSR….PRLN-.PLJSR(A3)�¥*Šif�code�<>�OPEN¼136&¥*�then”{All�commands�except�OPEN}–137*000002A2-02A4�206E�FFF6˜MOVE.L‚-10(A6),A0�&000002A6-02A8�3028�0002˜MOVE„2(A0),D0�000002AA-02AC�48C0�EXT.LƒD0�(000002AC-02AE�0C80�00000001”CM( P.Lƒ#1,D0�000002B2-02B4�67**�BEQ…L33� ¥*�beginÀ1380¥*“write�('Enter�channels�mask�in�hex.�>�');™139$000002B4-02B8�486D�FFF0˜PEA…-16(A5)�.000002B8-02BC�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�000002BC-02C0�001E�DC.W„303000002BE-02C2¢DC.B„'Enter�channels�mask�in�hex.�>�'000002DC-02E0�4267�CLR…-(A7)�-000002DE-02E2�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*“p$force�(output);±140#000002E2-02E6�2F08�MOVE.L‚A0,-(A7)�000002E4-02E8�4E93�JSR…(A3)�#000002E6-02EA�********™DC.L„USER1-*¥*“chan_mask�:=�hex_in¯141 ¥*�endÂ142*000002EA-02EE�206E�FFF6˜MOVE.L‚-10(A6),A0�"000002EE-02F2�4868�0004˜PEA…4(A0)� 000002F2-02F6�558F�SUBQ.L‚#2,A7�"000002F4-02F8�6100�****˜BSR…USER4�!000002F8-02FC�301F�MOVE„(A7)+,D0�#000002FA-02FE�205F�MOVE.L‚(A7)+,A0� 000002FC-0300�3080�MOVE„D0,(A0)�¥*�else”{OPEN�command}¢143000002FE-0302�60**�BRA…L34� ¥*�beginÀ144¥*Õ1455¥*“write�('Enter�number�of�channels�to�open�>�');”14600000300-0306˜L33‡EQU…*$00000300-0306�486D�FFF0˜PEA…-16(A5)�.00000304-030A�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�00000308-030E�0023�DC.W„3580000030A-0310¢DC.B„'Enter�number�of�channels�to�open�>�'0000032E-0334�4267�CLR…-(A7)�-00000330-0336�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*“p$force�(output);±147#00000334-033A�2F08�MOVE.L‚A0,-(A7)�00000336-033C�4E93�JSR…(A3)�#00000338-033E�********™DC.L„USER1-*   OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡8 ¥*“readln�(chan_cnt);°148*0000033C-0342�206E�FFF6˜MOVE.L‚-10(A6),A0�%00000340-0346�43E8�0004˜LEA…4(A0),A1�&00000344-034A�41ED�FFF8˜LEA…-8(A5),A0�¯XREF„8:.PRDI…-00000348-034E�4EAB�****˜JSR….PRDI-.PLJSR(A3)�-0000034C-0352�4EAB�****˜JSR….PRLN-.PLJSR(A3)�¥*Õ149$¥*“for�i�:=�0�to�chan_cnt�-�1�do¥150%00000350-0356�42AE�FFFA˜CLR.Lƒ-6(A6)�*00000354-035A�206E�FFF6˜MOVE.L‚-10(A6),A0�&00000358-035E�3028�0004˜MOVE„4(A0),D0�0000035C-0362�48C0�EXT.LƒD0� 0000035E-0364�5380�SUBQ.L‚#1,D0�*00000360-0366�2D40�FFF2˜MOVE.L‚D0,-14(A6)�00000364-036A�60**�BRA…L36� ¥*–beginº151)¥*™write�('Enter�channel�number�>�');š15200000366-036E˜L35‡EQU…*$00000366-036E�486D�FFF0˜PEA…-16(A5)�.0000036A-0372�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�0000036E-0376�0017�DC.W„23,00000370-0378¢DC.B„'Enter�channel�number�>�'00000388-0390�4267�CLR…-(A7)�-0000038A-0392�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*™p$force�(output);«153#0000038E-0396�2F08�MOVE.L‚A0,-(A7)�00000390-0398�4E93�JSR…(A3)�#00000392-039A�********™DC.L„USER1-*¥*™readln�(cdb[i].chan_no);¤154*00000396-039E�206E�FFF6˜MOVE.L‚-10(A6),A0�)0000039A-03A2�202E�FFFA˜MOVE.L‚-6(A6),D0�0000039E-03A6�E540�ASL…#2,D0�(000003A0-03A8�43F0�0006˜LEA…6(A0,D0),A1�&000003A4-03AC�41ED�FFF8˜LEA…-8(A5),A0�-000003A8-03B0�4EAB�****˜JSR….PRDI-.PLJSR(A3)�-000003AC-03B4�4EAB�****˜JSR….PRLN-.PLJSR(A3)�8¥*™write�('Enter�channel�configuration�in�hex.�>�');‹155$000003B0-03B8�486D�FFF0˜PEA…-16(A5)�.000003B4-03BC�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�000003B8-03C0�0026�DC.W„38;000003BA-03C2¢DC.B„'Enter�channel�configuration�in�hex.�>�'000003E0-03E8�4267�CLR…-(A7)�-000003E2-03EA�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*™p$force�(output);«156#000003E6-03EE�2F08�MOVE.L‚A0,-(A7)�000003E8-03F0�4E93�JSR…(A3)�#000003EA-03F2�********™DC.L„USER1-*¥*™cdb[i].config�:=�hex_in¥157 ¥*–end¼158*000003EE-03F6�206E�FFF6˜MOVE.L‚-10(A6),A0�)000003F2-03FA�202E�FFFA˜MOVE.L‚-6(A6),D0�000003F6-03FE�E540�ASL…#2,D0�%000003F8-0400�4870�0008˜PEA…8(A0,D0)� 000003FC-0404�558F�SUBQ.L‚#2,A7�"000003FE-0406�6100�****˜BSR…USER4�!00000402-040A�301F�MOVE„(A7)+,D0�   OM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page‡9 #00000404-040C�205F�MOVE.L‚(A7)+,A0� 00000406-040E�3080�MOVE„D0,(A0)�¥*Œend‚{else}¾159)00000408-0410�52AE�FFFA˜ADDQ.L‚#1,-6(A6)�0000040C-0414�69**�BVS…L37�0000040E-0418˜L36‡EQU…**0000040E-0418�202E�FFF2˜MOVE.L‚-14(A6),D0�(00000412-041C�B0AE�FFFA˜CMP.Lƒ-6(A6),D0� 00000416-0420�6C00�****˜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-0424�558F�SUBQ.L‚#2,A7�%0000041C-0426�486D�FF98˜PEA…-104(A5)�$00000420-042A�486D�FFBC˜PEA…-68(A5)�00000424-042E�4E93�JSR…(A3)�#00000426-0430�********™DC.L„USER3-**0000042A-0434�206E�FFF6˜MOVE.L‚-10(A6),A0�#0000042E-0438�309F�MOVE„(A7)+,(A0)�¥*†if�code�<>�WAITÀ162 ¥*ˆthenÉ163&00000430-043A�3028�0002˜MOVE„2(A0),D0�00000434-043E�48C0�EXT.LƒD0�00000436-0440�4A80�TST.LƒD0�00000438-0442�67**�BEQ…L38� ¥*‰beginÇ164¥*‹if�code�=�STAT¼165 ¥*ŽthenÃ166&0000043A-0446�3028�0002˜MOVE„2(A0),D0�0000043E-044A�48C0�EXT.LƒD0�(00000440-044C�0C80�00000005”CMP.Lƒ#5,D0�00000446-0452�66**�BNE…L39� ¥*�beginÀ167#¥*’write�('Channel�Status�=�');§168$00000448-0456�486D�FFF0˜PEA…-16(A5)�.0000044C-045A�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�00000450-045E�0011�DC.W„17&00000452-0460¢DC.B„'Channel�Status�=�'00000464-0472�4267�CLR…-(A7)�-00000466-0474�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*’p$force�(output);²169#0000046A-0478�2F08�MOVE.L‚A0,-(A7)�0000046C-047A�4E93�JSR…(A3)�#0000046E-047C�********™DC.L„USER1-*¥*’hex_out(chan_mask)±170 ¥*�end;Á171*00000472-0480�206E�FFF6˜MOVE.L‚-10(A6),A0�)00000476-0484�3F28�0004˜MOVE„4(A0),-(A7)�"0000047A-0488�6100�****˜BSR…USER5�$¥*‹write�('Command�Status�is�');­1720000047E-048C˜L39‡EQU…*$0000047E-048C�486D�FFF0˜PEA…-16(A5)�.00000482-0490�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�00000486-0494�0012�DC.W„18'00000488-0496¢DC.B„'Command�Status�is�'   PM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page†10 0000049A-04A8�4267�CLR…-(A7)�-0000049C-04AA�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*‹p$force�(output);¹173#000004A0-04AE�2F08�MOVE.L‚A0,-(A7)�000004A2-04B0�4E93�JSR…(A3)�#000004A4-04B2�********™DC.L„USER1-*¥*‹hex_out�(status)º174 ¥*‰endÉ175*000004A8-04B6�206E�FFF6˜MOVE.L‚-10(A6),A0�#000004AC-04BA�3F10�MOVE„(A0),-(A7)�"000004AE-04BC�6100�****˜BSR…USER5�¥*„end‚{with}Æ176 ¥*end;Ñ177000004B2-04C0˜L38‡EQU…*000004B2-04C0�4E5E�UNLK„A6�000004B4-04C2�4E75�RTS† ¥*{$E}Ñ178¥*begin‚{main}È179¥*Õ180¥*ƒwith�init_blk�doÂ181000004BC�.PMAIN„EQUƒ*000004BC†0001�DC.W„1000004BE†9EFC�006E˜SUB…#110,A7�000004C2†7401�MOVEQƒ#1,D2�000004C4†7205�MOVEQƒ#5,D1�000004C6†7000�MOVEQƒ#0,D0�"000004C8†41ED�FFF0˜LEA…-16(A5),A0�¯XREF„8:.PIFD…(000004CC†4EAB�****˜JSR….PIFD-.PLJSR(A3)�"000004D0†41ED�FFF0˜LEA…-16(A5),A0�¯XREF„8:.PRWT…(000004D4†4EAB�****˜JSR….PRWT-.PLJSR(A3)�000004D8†7401�MOVEQƒ#1,D2�000004DA†7206�MOVEQƒ#6,D1�000004DC†7000�MOVEQƒ#0,D0�!000004DE†41ED�FFF8˜LEA…-8(A5),A0�(000004E2†4EAB�****˜JSR….PIFD-.PLJSR(A3)�!000004E6†41ED�FFF8˜LEA…-8(A5),A0�¯XREF„8:.PRST…(000004EA†4EAB�****˜JSR….PRST-.PLJSR(A3)� ¥*†beginÊ182¥*‰code�:=�7;Â183+000004EE†1B7C�0007�FF9A“MOVE.B‚#7,-102(A5)�¥*‰sub_code�:=�0;¾184"000004F4†422D�FF9B˜CLR.Bƒ-101(A5)�¥*‰new�(cmd_adr)¿185 ¥*†end;Ë186"000004F8†41ED�FFAE˜LEA…-82(A5),A0�¯XREF„8:.PNEW…(000004FC†4EAB�****˜JSR….PNEW-.PLJSR(A3)�00000500†0026�DC.W„38¥*Õ1871¥*ƒwrite�('Enter�number�of�tasks�(1-26)�>�');¨18800000502†486D�FFF0˜PEA…-16(A5)�)00000506†4EAB�****˜JSR….PLDCS-.PLJSR(A3)�0000050A†001F�DC.W„31/0000050C§DC.B„'Enter�number�of�tasks�(1-26)�>�'   PM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page†11 0000052C†4267�CLR…-(A7)�(0000052E†4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*ƒp$force�(output);Á18900000532†2F08�MOVE.L‚A0,-(A7)�00000534†4E93�JSR…(A3)�00000536†********™DC.L„USER1-*¥*ƒreadln�(�task_cnt);¿190"0000053A†43ED�FFB4˜LEA…-76(A5),A1�!0000053E†41ED�FFF8˜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†41ED�FFBC˜LEA…-68(A5),A0�)0000054E†4EAB�****˜JSR….PSTCV-.PLJSR(A3)�00000552†0004�DC.W„400000554§DC.B„'INPx'¥*Õ193¥*ƒclone_tasks�(task_cnt);»194(00000558†2F2D�FFB4˜MOVE.L‚-76(A5),-(A7)�0000055C†4E93�JSR…(A3)�0000055E†********™DC.L„USER2-*¥*Õ195¥*) ƒwhile�true�doÅ19600000562�L42‡EQU…* ¥*†for�i�:=�1�to�task_cnt�do¶197.00000562†2B7C�00000001�FFB8�MOVE.L‚#1,-72(A5)�00000056A†2B6D�FFB4�FF92“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-0574�202D�FFB8˜MOVE.L‚-72(A5),D0�)00000576-0578�0680�00000040”ADD.Lƒ#64,D0�*0000057C-057E�1B40�FFBF˜MOVE.B‚D0,-65(A5)�*¥*Œwriteln�('**�Task�',task_ID,'�**');¦201$00000580-0582�486D�FFF0˜PEA…-16(A5)�.00000584-0586�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�00000588-058A�0008�DC.W„80000058A-058C¢DC.B„'**�Task�'00000592-0594�4267�CLR…-(A7)�-00000594-0596�4EAB�****˜JSR….PWRS-.PLJSR(A3)�#00000598-059A�2F08�MOVE.L‚A0,-(A7)�-0000059A-059C�2F2D�FFBC˜MOVE.L‚-68(A5),-(A7)�&0000059E-05A0�3F3C�0004˜MOVE„#4,-(A7)�&000005A2-05A4�3F3C�0004˜MOVE„#4,-(A7)�¯XREF„8:.PWRV…-000005A6-05A8�4EAB�****˜JSR….PWRV-.PLJSR(A3)�#000005AA-05AC�2F08�MOVE.L‚A0,-(A7)�*000005AC-05AE�3F3C�2A00˜MOVE„#10752,-(A7)�1000005B0-05B2�2F3C�0003202A”MOVE.L‚#204842,-(A7)�000005B6-05B8�4267�CLR…-(A7)�-000005B8-05BA�4EAB�****˜JSR….PWRS-.PLJSR(A3)�-000005BC-05BE�4EAB�****˜JSR….PWLN-.PLJSR(A3)�   PM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page†12 K¥*Šwrite�('Command�(O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait�)�>�');‡202$000005C0-05C2�486D�FFF0˜PEA…-16(A5)�.000005C4-05C6�4EAB�****˜JSR….PLDCS-.PLJSR(A3)�000005C8-05CA�0039�DC.W„57N000005CA-05CC¢DC.B„'Command�(O-pen,C-lose,E-nable,D-isable,S-tatus,W-ait�)�>�'00000604-0606�4267�CLR…-(A7)�-00000606-0608�4EAB�****˜JSR….PWRS-.PLJSR(A3)�¥*Œp$force�(output);¸203#0000060A-060C�2F08�MOVE.L‚A0,-(A7)�0000060C-060E�4E93�JSR…(A3)�#0000060E-0610�********™DC.L„USER1-*¥*Œreadln�(cmd_char);·204 00000612-0614�700A�MOVEQƒ#10,D0�'00000614-0616�43ED�FFC0˜LEA…-64(A5),A1�&00000618-061A�41ED�FFF8˜LEA…-8(A5),A0�-0000061C-061E�4EAB�****˜JSR….PRDS-.PLJSR(A3)�-00000620-0622�4EAB�****˜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-0626�41ED�FFC0˜LEA…-64(A5),A0�.00000628-062A�4EAB�****˜JSR….PLODS-.PLJSR(A3)�.0000062C-062E�4EAB�****˜JSR….PSLEN-.PLJSR(A3)�00000630-0632�48C0�EXT.LƒD0�00000632-0634�4A80�TST.LƒD0�00000634-0636�67**�BEQ…L48�*00000636-063A�102D�FFC2˜MOVE.B‚-62(A5),D0�%0000063A-063E�0400�0020˜SUB.Bƒ#32,D0�/0000063E-0642�223C�00888038”MOVE.L‚#8945720,D1�!00000644-0648�7400�MOVEQ.L�#0,D2�%00000646-064A�0C00�003F˜CMP.Bƒ#63,D0�0000064A-064E�6304�BLS…*+6�0000064C-0650�B000�CMP.BƒD0,D0�0000064E-0652�600C�BRA…*+14�%00000650-0654�0C00�0020˜CMP.Bƒ#32,D0�00000654-0658�6D04�BLT…*+6�00000656-065A�0101�BTST„D0,D1�00000658-065C�6002�BRA…*+4�0000065A-065E�0102�BTST„D0,D2�0000065C-0660�67**�BEQ…L48� ¥*‰endÉ208"0000065E-0664�6100�****˜BSR…USER6�"¥*‡until�length�(cmd_char)�=�0³209 ¥*end.Ñ21000000662-0668˜L48‡EQU…*'00000662-0668�41ED�FFC0˜LEA…-64(A5),A0�.00000666-066C�4EAB�****˜JSR….PLODS-.PLJSR(A3)�.0000066A-0670�4EAB�****˜JSR….PSLEN-.PLJSR(A3)�0000066E-0674�48C0�EXT.LƒD0�00000670-0676�4A80�TST.LƒD0� 00000672-0678�6600�****˜BNE…L47�*00000676-067C�52AD�FFB8˜ADDQ.L‚#1,-72(A5)�0000067A-0680�69**�BVS…L46�0000067C-0684˜L45‡EQU…*+0000067C-0684�202D�FF92˜MOVE.L‚-110(A5),D0�)00000680-0688�B0AD�FFB8˜CMP.Lƒ-72(A5),D0� 00000684-068C�6C00�****˜BGE…L44�   PM68000�Pascal�Compiler�Phase�2�version‚2.30…INPTST‚.PO�03/21/83�10:23:14¢Page†13 00000688-0690˜L46‡EQU…* 00000688-0690�6000�****˜BRA…L42�0000068C-0694˜L43‡EQU…*'0000068C-0694�41ED�FFF0˜LEA…-16(A5),A0�¯XREF„8:.PCLO…-00000690-0698�4EAB�****˜JSR….PCLO-.PLJSR(A3)�&00000694-069C�41ED�FFF8˜LEA…-8(A5),A0�-00000698-06A0�4EAB�****˜JSR….PCLO-.PLJSR(A3)�0000069C-06A4�4267�CLR…-(A7)�0000069E-06A6�4E4E�TRAP„#14�000006A0-06A8�0004�DC.W„4¯END"¥***�Total�of�1700�bytes�generated ) éé'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*„This�is�TESTAC,�a�relocatable�program�that�tests�the�ACO�driver.*$*„Copyrighted�1983�by�Motorola,�Inc.E**********************************************************************B*‚This�program�sets�up�for�task�ACO1�and�verifies�it�exists.�If�it;*‚does�it�proceeds�with�the�test,�if�not�it�trys�task�ACO2./*‚If�either�task�is�missing,�it�skips�the�test.éééééé* @I0QJYa<iLqPy5�@‰>‘6™¡>©,±)¹AÁUÉ6ÑÙTáéKñVù1! V*:*‚This�program�performs�the�following�tests�on�the�driver:*9*ˆTEST1‚-‚individually�opens�each�channel,�outputs�to�it,-*’checks�status,�turns�it�off,�checks�status, *’and�closes.9*ˆTEST2‚-‚individually�opens�each�channel,�outputs�to�it,1*’checks�status,�continues�until�all�are�on.�Then,*’individually�turns�off�each�channel,checks0*’status,�continues�until�all�are�off.�Turns�all%*’channels�back�on�for�the�next�test.7*ˆTEST3‚-‚closes�the�channels,�OPERATOR�must�check�they *’turned�off.4*ˆTEST4‚-‚opens�all�channels,�turns�all�channels�on,-*’delays,�turns�all�channels�off,�and�closes.9*ˆTEST5‚-‚individually�opens�each�channel,�commands�pulse*’output,�delays,�and�closes.7*ˆTEST6‚-‚opens�four�channels,�commands�pulse�output�of3*’different�lengths�to�each�simultaneously,�delays,*’closes�channels.;*ˆTEST7�-ƒopens�channel�two�with�queue�event�configuration,'*’pulses�output,�waits�for�queue�event,)*’verifies�message�sent,�closes�channels.:*ˆTEST8‚-‚opens�channel�one�with�wait�for�wake-up�config.,'*’pulses�output,�waits�for�wake-up,�and*’closes�channels.:*ˆTEST9‚-‚trys�output�ON�with�channels�closed�and�verifies*’error.3*’trys�output�OFF�with�channels�closed�and�verifies*’error./*’trys�checking�status�with�channels�closed�and*’verifies�error.,*’trys�pulse�output�with�channels�closed�and*’verifies�error.<*ˆTEST10�-‚trys�opening�invalid�channel�numbers�and�verifies3*’errors.�(ZERO�channels,�more�than�eight�channels,"*’channel�#�9,�same�two�channels).:*ˆTEST11�-‚opens�channel�and�trys�invalid�commands�(�0,�6,*’7,�>�8�)�and�verifies�errors.=*ˆTEST12�-‚trys�opening�channels�when�they�are�already�opened*’and�verifies�error.*>*ˆIf�it�passed�these�tests�it�returns�to�the�top�to�set�up�for2*’task�ACO2.�If�this�was�for�task�ACO2,�it�sets�up$*’to�test�both�tasks�simultaneously.7*ˆIF�ALL�TESTS�ARE�SUCCESSFUL,�prints�message�attesting0*’to�that�fact.�If�any�test�fails,�ERROR�message$*’is�printed�and�test�is�terminated.*D********************************************************************‰PAGE*5IOADR0ƒEQU‡$F80000�VM02�base�mem�map�I/O�chan�address5IOADR1ƒEQU‡$FA0000�VM03�base�mem�map�I/O�chan�address7IOADR2ƒEQU‡$FE6000�VME110�base�mem�map�I/O�chan�address7IOADR3ƒEQU‡$F1C000�VME/10�base�mem�map�I/O�chan�address* ‰SECTIONƒ0*TEST…LEA‡STACK(PC),A7‰LEA‡INITIO(PC),A0.‰CLR.W…DUALFG-INITIO(A0)ƒclear�dual�test�flags‰CLR.W…DUALCK-INITIO(A0)**�SET�UP�A.S.Q.*!‰MOVE.L„#31,D0Žstage�command�code-‰LEA‡ASQBLOCK(PC),A0…stage�command�parameters.‰LEA‡TESTIRQ(PC),A1†initializes�addr.�of�async*‰MOVE.L„A1,ASQLA-ASQBLOCK(A0)‚service�rtn.‰TRAP†#1 ‰BNE‡FAULT11*‰MOVE.L„#'ACO1',D0(TNAME„LEA‡INITIO(PC),A0‡SET�UP�TASK�NAME‰MOVE.L„D0,ACOPAR-INITIO(A0)‰MOVE.L„D0,TMSG-INITIO(A0)*!TRYBTHƒLEA‡SMSG24(PC),A1‡space�up‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1†again‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*.‰LEA‡SMSG1(PC),A1ˆoutput�start�of�test�message‰LEA‡EMSG1(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1‡space�up‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)+‰MOVE.W„#CLSLNG,A1ŠINSURE�CHANNEL(S)�CLOSED$‰MOVE.W„A1,CMDL-INITIO(A0)‚TO�START.‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT16*‰PAGE* *…OPEN�THE�CHANNELS�INDIVIDUALLY*5TEST1„LEA‡SMSG2(PC),A1‡output�'open�&�output'�message‰LEA‡EMSG2(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)�initialize�parameters‰LEA‡INITIO(PC),A0*‰MOVE.W„#1,ONCMD1-INITIO(A0)�'ON'�bit�mask,‰MOVE.W„#1,OFFCMD1-INITIO(A0)�'OFF'�bit�mask2‰MOVE.W„#1,STATSHF-INITIO(A0)�status�req.�bit�mask+ é;OPNLP„MOVE.W„EVNTCNT(PC),D0†OPEN�CHANNEL�(event�count�holds‰LEA‡INITIO(PC),A0‡channel�#�)+‰MOVE.W„D0,OPNCH-INITIO(A0)�channel�to�open‰LEA‡OPNCMDS(PC),A1,‰MOVE.L„A1,CMDA-INITIO(A0)‚parameters�to�CMR‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*+‰LEA‡INITIO(PC),A0‡OUTPUT�TO�CHANNEL�OPENED‰LEA‡ONCMD(PC),A1,‰MOVE.L„A1,CMDA-INITIO(A0)‚parameters�to�CMR ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#500,A0�500�MS‰TRAP†#1 ‰BNE‡FAULT15*!‰LEA‡OPNLP(PC),A1ˆloop�back�addr.&‰LEA‡TEST1B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggleééééé*%TEST1BƒLEA‡INITIO(PC),A0‡CHECK�STATUS/‰MOVE.W„STATSHF(PC),D0†move�channel�to�check�to1‰MOVE.W„D0,STAT-INITIO(A0)‚status�parameter�block‰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‰does�status�check�with�bit�that"‰CMP.W…ONCMD1(PC),D0‡should�be�on? ‰BNE‡FAULT4*#‰LEA‡INITIO(PC),A0‡TURN�OFF�CHANNEL‰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‡CHECK�STATUS/‰MOVE.W„STATSHF(PC),D0†move�channel�to�check�to1‰MOVE.W„D0,STAT-INITIO(A0)‚status�parameter�block‰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‰does�status�check�show�bit#‰BNE‡FAULT4Žstill�on?�if�so,�error.*#‰LEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.&‰LEA‡TEST1C(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST1CƒLEA‡INITIO(PC),A0>‰ASL.W…ONCMD1-INITIO(A0)ƒshift�'ON'�channel�bit�mask�one�place/‰ASL.W…OFFCMD1-INITIO(A0)‚shift�'OFF'ƒ"…"ƒ"„"„"0‰ASL.W…STATSHF-INITIO(A0)‚shift�status‚"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrement�event�counter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0�done? ‰BMI‡OPNLP*‰PAGEé+ é*2*„OUTPUT�TO�CHANNELS�SEQUENTIALLY�UNTIL�ALL�ARE�ON*5TEST2„LEA‡SMSG3(PC),A1‡output�'output�to�all'�message‰LEA‡EMSG3(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)�initialize�parameters‰LEA‡INITIO(PC),A06‰MOVE.W„#1,ONCMD1-INITIO(A0)‚bit�mask�for�'ON'�channel9‰MOVE.W„#1,STATSHF-INITIO(A0)�bit�mask�for�status�channel)OPNLP2ƒMOVE.W„EVNTCNT(PC),D0†OPEN�CHANNEL‰LEA‡INITIO(PC),A0‰MOVE.W„D0,OPNCH-INITIO(A0)/‰LEA‡INITIO(PC),A0‡point�to�CMR�parameter�block‰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‡OUTPUT�TO�CHANNEL�OPENED‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#500,A0�500�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP2(PC),A1‡loop�back�addr.&‰LEA‡TEST2A(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*1TEST2AƒLEA‡INITIO(PC),A0‡CHECK�STATUS�OF�CHANNELS‰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‰does�status�check?‰CMP.W…STATSHF(PC),D0 ‰BNE‡FAULT4*"‰LEA‡TEST2A(PC),A1‡loop�back�addr.&‰LEA‡TEST2B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST2BƒLEA‡INITIO(PC),A0>‰ASL.W…ONCMD1-INITIO(A0)ƒshift�'ON'�channel�bit�mask�one�place‰ORI‡#$10,CCRŒset�X�bit/‰ROXL.W„STATSHF-INITIO(A0)‚add�statusƒ"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrement�event�counter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0�done? ‰BMI‡OPNLP2*7TEST2CƒLEA‡SMSG39(PC),A1‡output�'turn�off�seq.'�message‰LEA‡EMSG39(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)�initialize�parameters‰LEA‡INITIO(PC),A08‰MOVE.W„#1,OFFCMD1-INITIO(A0)‚bit�mask�for�'OFF'�channel9‰MOVE.W„#1,STATSHF-INITIO(A0)�bit�mask�for�status�channel*)OPNLP3ƒLEA‡INITIO(PC),A0‡TURN�OFF�CHANNEL‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#500,A0�500�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP3(PC),A1‡loop�back�addr.&‰LEA‡TEST2D(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*0TEST2DƒLEA‡INITIO(PC),A0‡CHECK�STATUS�OF�CHANNEL‰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‰does�status�check? ‰BNE‡FAULT4*"‰LEA‡TEST2D(PC),A1‡loop�back�addr.&‰LEA‡TEST2E(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST2EƒLEA‡INITIO(PC),A0@‰ASL.W…OFFCMD1-INITIO(A0)‚shift�'OFF'�channel�bit�mask�one�place0‰ASL.W…STATSHF-INITIO(A0)‚shift�status‚"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrement�event�counter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0�done? ‰BMI‡OPNLP3*+TEST2FƒLEA‡INITIO(PC),A0‡OUTPUT�TO�CHANNELS‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST2F(PC),A1‡loop�back�addr.%‰LEA‡TEST3(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle, **%**************************************ƒCLOSE�TEST–*%**************************************-TEST3„LEA‡SMSG4(PC),A1‡output�'close'�message‰LEA‡EMSG4(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*)TEST3AƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.%‰LEA‡TEST4(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle*‰PAGE$*„TURN�ON�ALL�OUTPUTS,�THEN�TURN�OFF*9TEST4„LEA‡SMSG5(PC),A1‡output�'turn�on,�turn�off'�message‰LEA‡EMSG5(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15**TEST4AƒLEA‡INITIO(PC),A0‡OPEN�ALL�CHANNELS/‰LEA‡OPNCMD(PC),A1‡point�to�CMR�parameter�block‰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‡OUTPUT�TO�CHANNELS�OPENED‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST4A(PC),A1‡loop�back�addr.&‰LEA‡TEST4B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle**TEST4BƒLEA‡INITIO(PC),A0‡TURN�OFF�CHANNELS‰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‡CLOSE�CHANNEL(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‡loop�back�addr.%‰LEA‡TEST5(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle*‰PAGE*„PULSE�EACH�OUTPUT�IN�TURN*2TEST5„LEA‡SMSG6(PC),A1‡output�'pulse�each'�message‰LEA‡EMSG6(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0‰CLR.W…0(A0)�initialize�evntcnt)OPNLP4ƒMOVE.W„EVNTCNT(PC),D0†OPEN�CHANNEL/‰LEA‡INITIO(PC),A0‡point�to�CMR�parameter�block+‰MOVE.W„D0,OPNCH-INITIO(A0)�channel�to�open,‰MOVE.W„D0,PLSO1-INITIO(A0)�channel�to�pulse‰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‰PULSE�OUTPUT‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP4(PC),A1‡loop�back�addr.&‰LEA‡TEST5A(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*)TEST5AƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.&‰LEA‡TEST5B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST5BƒLEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrement�event�counter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0�done? ‰BMI‡OPNLP4*‰PAGE#*„PULSE�FOUR�OUTPUTS�SIMULTANEOUSLY*6TEST6„LEA‡SMSG32(PC),A1†output�'pulse�simult.'�message‰LEA‡EMSG32(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1500,A0Œ1500�MS‰TRAP†#1 ‰BNE‡FAULT15*&TEST6AƒLEA‡INITIO(PC),A0‡OPEN�CHANNELS‰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‰PULSE�OUTPUT‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#500,A0�500�MS‰TRAP†#1 ‰BNE‡FAULT15*éé"‰LEA‡TEST6A(PC),A1‡loop�back�addr.&‰LEA‡TEST6B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST6BƒMOVE.L„#21,D0ŽDELAY‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*)TEST6CƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.%‰LEA‡TEST7(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle*‰PAGE+*„PULSE�OUTPUT�TWO�AND�GENERATE�QUEUE�EVENT*6TEST7„LEA‡SMSG7(PC),A1‡output�'pulse�output�2'�message‰LEA‡EMSG7(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST7AƒLEA‡RCVBUF(PC),A0‡ensure�RCVBUF�zeroed�out‰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)�set�up�config.�(queue�event)‰MOVE.W„#2,D0�OPEN�CHANNEL�TWO+‰MOVE.W„D0,OPNCH-INITIO(A0)‚channel�to�open,‰MOVE.W„D0,PLSO1-INITIO(A0)‚channel�to�pulse‰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‰PULSE�OUTPUTéé- é‰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Žrequest�wait�for�event.$‰TRAP†#1’to�be�issued�by�ACO�driver. ‰BNE‡FAULT13*4‰MOVE.L„RCVBUF(PC),D0‡verify�message�returned�by�ASQ4‰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‡mask�off�low�order�byte0‰CMP.L…#IOADR0,D0ŠVM02�memory�mapped�I/O�address ‰BEQ.S…TEST710‰CMP.L…#IOADR1,D0ŠVM03�memory�mapped�I/O�address ‰BEQ.S…TEST722‰CMP.L…#IOADR2,D0ŠVME110�memory�mapped�I/O�address ‰BEQ.S…TEST732‰CMP.L…#IOADR3,D0ŠVME/10�memory�mapped�I/O�address ‰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�'asq�verified'�msg‰LEA‡EMSG38(PC),A2 ‰BSR‡MSGOUT*"‰LEA‡TEST7A(PC),A1‡loop�back�addr.&‰LEA‡TEST7B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*)TEST7BƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.&‰LEA‡TEST7C(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*6TEST7CƒMOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰PAGE'*…PULSE�OUTPUT�ONE�AND�GENERATE�WAKE-UP3TEST8„LEA‡SMSG8(PC),A1‡output�'pulse�led�1'�message‰LEA‡EMSG8(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST8AƒLEA‡INITIO(PC),A0‡point�to�CMR�para.�block5‰MOVE.W„#1,OPNCNF-INITIO(A0)�set�up�config.�(wake-up)‰MOVE.W„#1,D0�OPEN�CHANNEL�ONE+‰MOVE.W„D0,OPNCH-INITIO(A0)‚channel�to�open,‰MOVE.W„D0,PLSO1-INITIO(A0)‚channel�to�pulse‰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‰PULSE�OUTPUT‰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Žrequest�wait�for�wake-up.$‰TRAP†#1’to�be�issued�by�ACO�driver. ‰BNE‡FAULT130‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST8A(PC),A1‡loop�back�addr.&‰LEA‡TEST8B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*)TEST8BƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.&‰LEA‡TEST8C(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*6TEST8CƒLEA‡INITIO(PC),A0‡restore�default�configuration ‰MOVE.W„#$8000,OPNCNF-INITIO(A0)2‰MOVE.W„#0,OPNCH-INITIO(A0)�restore�channel�select1‰MOVE.W„#1,STAT-INITIO(A0)‚restore�status�channel3‰MOVE.W„#1,OFFCMD1-INITIO(A0)‚restore�off�cmd�chan.*‰PAGE#*„TRY�COMMANDS�WITH�CHANNELS�CLOSED7TEST9„LEA‡SMSG9(PC),A1‡output�'try�with�closed'�message‰LEA‡EMSG9(PC),A2 ‰BSR‡MSGOUT*ééé0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST9AƒLEA‡INITIO(PC),A0‡OUTPUT�TO�CLOSED�CHANNEL‰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ˆread�returned�status(‰CMP.W…#$F2,D0�verify�correct�error�code ‰BNE‡FAULT2 ‰LEA‡SMSG12(PC),A1‡output�ok�msg‰LEA‡EMSG12(PC),A2 ‰BSR‡MSGOUT*#‰LEA‡INITIO(PC),A0‡TURN�OFF�CHANNEL‰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‡read�returned�status(‰CMP.W…#$F2,D0�verify�correct�error�code ‰BNE‡FAULT5‰LEA‡SMSG14(PC),A1‡off�ok�msg‰LEA‡EMSG14(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‡CHECK�STATUS‰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†read�returned�status(‰CMP.W…#$F2,D0�verify�correct�error�code ‰BNE‡FAULT3ééé. é ‰LEA‡SMSG16(PC),A1‡status�ok�msg‰LEA‡EMSG16(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‰LEA‡PLSO(PC),A1‰PULSE�OUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1(‰MOVE.W„PLSO(PC),D0‰read�returned�status(‰CMP.W…#$F6,D0�verify�correct�error�code ‰BNE‡FAULT10*"‰LEA‡TEST9A(PC),A1‡loop�back�addr.&‰LEA‡TEST9B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*%TEST9BƒLEA‡SMSG18(PC),A1‡pulse�ok�msg‰LEA‡EMSG18(PC),A2 ‰BSR‡MSGOUT*‰PAGE*ƒTRY�TO�OPEN�INVALID�CHANNELS6TEST10ƒLEA‡SMSG11(PC),A1‡output�'try�invalid�channels'‰LEA‡EMSG11(PC),A2 ‰BSR‡MSGOUT0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*3TEST10A‚LEA‡INITIO(PC),A0‡TRY�TO�OPEN�ZERO�CHANNELS‰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‡read�cmd�status‰CMP.W…#$F7,D0 ‰BNE‡FAULT7*3‰LEA‡INITIO(PC),A0‡TRY�TO�OPEN�MORE�THAN�8�CHANNELS‰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‡read�cmd�status‰CMP.W…#$F7,D0 ‰BNE‡FAULT7*,‰LEA‡INITIO(PC),A0‡TRY�TO�OPEN�CHANNEL�#�>�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‡read�cmd�status‰CMP.W…#$F6,D0 ‰BNE‡FAULT7*éé0‰LEA‡INITIO(PC),A0‡TRY�TO�OPEN�SAME�TWO�CHANNELS‰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ˆread�cmd�status‰CMP.W…#$FE,D0 ‰BNE‡FAULT7*#‰LEA‡TEST10A(PC),A1†loop�back�addr.'‰LEA‡TEST10B(PC),A2†continue�on�forward‰BRA‡FLOP�test�for�toggle*6TEST10B‚LEA‡SMSG36(PC),A1‡output�'invalid�channels�ok'‰LEA‡EMSG36(PC),A2 ‰BSR‡MSGOUT*‰PAGE*„TRY�TO�USE�INVALID�COMMANDS*2TEST11ƒLEA‡SMSG25(PC),A1‡output�'try�invalid�cmds'‰LEA‡EMSG25(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*&TEST11A‚LEA‡INITIO(PC),A0‡OPEN�CHANNEL‰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‡INVALID�COMMAND�0‰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‡read�returned�status‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*$‰LEA‡INITIO(PC),A0‡INVALID�COMMAND�6‰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‡read�returned�status‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*$‰LEA‡INITIO(PC),A0‡INVALID�COMMAND�7‰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‡read�returned�status‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*&‰LEA‡INITIO(PC),A0‡INVALID�COMMAND�>�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‡read�returned�status‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*#‰LEA‡TEST11A(PC),A1†loop�back�addr.'‰LEA‡TEST11B(PC),A2†continue�on�forward‰BRA‡FLOP�test�for�toggle*-TEST11B‚LEA‡SMSG26(PC),A1‡invalid�cmds�ok�msg‰LEA‡EMSG26(PC),A2 ‰BSR‡MSGOUT*‰PAGE*„TRY�OPEN�AND�ALREADY�OPENED9TEST12ƒLEA‡SMSG20(PC),A1†output�'try�with�opened'�message‰LEA‡EMSG20(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*6TEST12A‚LEA‡INITIO(PC),A0‡point�to�CMR�parameter�block(‰MOVE.W„#0,OPNCH-INITIO(A0)�OPEN�CHANNEL‰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‡point�to�CMR�parameter�block‰LEA‡OPNCMDS(PC),A1)‰MOVE.L„A1,CMDA-INITIO(A0)‚TRY�OPEN�again‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1+‰MOVE.W„OPNCMDS(PC),D0‡read�returned�status‰CMP.W…#$FE,D0 ‰BNE.S…FAULT1*#‰LEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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†loop�back�addr.%‰LEA‡TESTC(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle*1*************************************************éé*„TEST�COMPLETED�*1************************************************* TESTC„LEA‡SMSG24(PC),A1‡space�up‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUTéééééé/ é*1‰LEA‡SMSG23(PC),A1†output�'test�complete'�message‰LEA‡EMSG23(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1†space�up‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*#NEXT…MOVE.W„DUALFG(PC),D0‡flag�set? ‰BNE‡TERM.NEXTA„MOVE.L„ACOPAR(PC),D0‡try�for�second�task‰CMP.L…#'ACO1',D0‰BNE‡TERMA�done‰MOVE.L„#'ACO2',D0‰BRA‡TNAME�set�up�second�task*‰PAGE*#FAULT1ƒLEA‡SMSG22(PC),A1‡open�error‰LEA‡EMSG22(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT2ƒLEA‡SMSG13(PC),A1‡output�error‰LEA‡EMSG13(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT3ƒLEA‡SMSG17(PC),A1‡status�error‰LEA‡EMSG17(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM+FAULT4ƒLEA‡SMSG28(PC),A1‡status�check�error‰LEA‡EMSG28(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM"FAULT5ƒLEA‡SMSG15(PC),A1‡off�error‰LEA‡EMSG15(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM*FAULT6ƒLEA‡SMSG10(PC),A1‡ASQ�message�error‰LEA‡EMSG10(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM.FAULT7ƒLEA‡SMSG21(PC),A1‡invalid�channel�error‰LEA‡EMSG21(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM$FAULT8ƒLEA‡SMSG33(PC),A1‡close�error‰LEA‡EMSG33(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM.FAULT9ƒLEA‡SMSG27(PC),A1‡invalid�cmd�error�msg‰LEA‡EMSG27(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT10‚LEA‡SMSG19(PC),A1‡pulse�error‰LEA‡EMSG19(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM#FAULT11‚LEA‡SMSG30(PC),A1‡ASQ�error‰LEA‡EMSG30(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TERM#FAULT12‚LEA‡SMSG29(PC),A1‡ASQ�error‰LEA‡EMSG29(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM6FAULT13‚LEA‡SMSG31(PC),A1‡WAKE-UP�or�QUEUE�EVENT�error‰LEA‡EMSG31(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM2FAULT14‚LEA‡SMSG34(PC),A1‡IOS�(trap�#2)�call�error‰LEA‡EMSG34(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM*FAULT15‚LEA‡SMSG35(PC),A1‡call�delay�error‰LEA‡EMSG35(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM/FAULT16‚LEA‡SMSG37(PC),A1‡non-existant�task�msg‰LEA‡EMSG37(PC),A2 ‰BSR.S…MSGOUT(‰LEA‡DUALFG(PC),A0‡set�flag�to�eliminate‰ADD.W…#1,(A0)�dual�test ‰BRA‡NEXTA**„DE-ACTIVATE�SELF*0TERMA„LEA‡INITIO(PC),A0‡test�for�dual�board�test‰TST.W…DUALFG-INITIO(A0) ‰BNE.S…TERM4‰MOVE.W„#1,DUALFG-INITIO(A0)‚set�up�for�dual�bd�test‰MOVE.W„#1,DUALCK-INITIO(A0)!‰MOVE.L„#'ACO1',ACOPAR-INITIO(A0)*‰MOVE.L„#'ACO1',TMSG-INITIO(A0)‚set�up�msg‰MOVE.W„#'&2',TMSG+4-INITIO(A0) ‰BRA‡TRYBTH*%TERM…MOVE.L„#32,D0ŽDE-ALLOCATE�A.S.Q.‰TRAP†#1**‰MOVE.L„#15,D0ŽNOW�DE-ACTIVATE�SELF�(EXIT)‰TRAP†#1**„MESSAGE�OUTPUT�SUBROUTINE*ééééé/ é/MSGOUTƒLEA‡MSG(PC),A0Šoutput�message�pointed�to(‰MOVE.L„A1,X1-MSG(A0)‡by�A1,�ended�by�A2‰MOVE.L„A2,X2-MSG(A0)‰TRAP†#2 ‰BNE‡FAULT14‰RTS*1FLOP…LEA‡INITIO(PC),A0‡toggle�between�ACO1�&�ACO2‰MOVE.W„DUALCK-INITIO(A0),D0 ‰BEQ.S…FLOP2�continue�on�if�zero‰CMP.W…#1,D0�see�if�=�1 ‰BNE.S…FLOP11‰MOVE.W„#2,DUALCK-INITIO(A0)‚is�=�1,�set�up�for�2!‰MOVE.L„#'ACO2',ACOPAR-INITIO(A0)‰JMP‡(A1)�loop�back6FLOP1„MOVE.W„#1,DUALCK-INITIO(A0)‚is�=�2,�set�up�for�1!‰MOVE.L„#'ACO1',ACOPAR-INITIO(A0))FLOP2„JMP‡(A2)�continue�on�with�next�test*-*ƒMOVE�THE�ASQ�MESSAGE�FROM�THE�ASQ�TO�RCVBUF*8TESTIRQ‚EQU‡*‰entry�point�moving�data�from�ASQ�to�RCVBUF!‰MOVE.L„#34,D0„stage�command�code‰LEA‡RCVBUF(PC),A0‰TRAP†#1 ‰BNE‡FAULT12*„RETURN�FROM�EVENT!‰MOVE.L„#37,D0„stage�command�code ‰MOVE.W„#1,A0‰TRAP†#1*‰PAGE**„CMR�parameter�block*INITIOƒDC.B†7,0,0,0ACOPARƒDC.L†'ACO1'„TASK�NAME ‰DC.L†0,0,0*CMDA…DC.L†0‰address�of�ACO�parameter�blockCMDL…DC.W†0‰command�length**„A.S.Q.�parameter�block*ASQBLOCK�EQU‡*‰DC.L†0‰task�name‰DC.L†0‰dummy�field*‰DC.B†5‰ASQ�&�ASR�enabled�=�initial�status"‰DC.B†16ˆlength�of�message�for�ASQ‰DC.L†16ˆstorage�for�4�events?ASQLA„DC.L†TESTIRQƒlogical�address�of�target�task�async�svc�rtn‰DC.L†0‰dummy�fieldASQLNGƒEQU‡*-ASQBLOCK*0*„ACO�parameter�block�to�open�individual�channel*OPNCMDS‚DC.W†0‰returned�status‰DC.W†1‰OPEN�command�code‰DC.W†1‰open�1�channelOPNCH„DC.W†0‰channel�#/OPNCNFƒDC.W†$8000…Default�channel�configurationOPNLNGS‚EQU‡*-OPNCMDS�length***„ACO�parameter�block�to�open�ALL�channels*OPNCMDƒDC.W†0‰returned�status‰DC.W†1‰OPEN�command�code‰DC.W†8‰open�8�channels*‰DC.W†0,$8000ƒCHAN�0,default�configuration‰DC.W†1,$8000ƒCHAN�1,ƒ"‰"‰DC.W†2,$8000ƒCHAN�2,ƒ"‰"‰DC.W†3,$8000ƒCHAN�3,ƒ"‰"‰DC.W†4,$8000ƒCHAN�4,ƒ"‰"‰DC.W†5,$8000ƒCHAN�5,ƒ"‰"‰DC.W†6,$8000ƒCHAN�6,ƒ"‰"‰DC.W†7,$8000ƒCHAN�7,ƒ"‰"OPNLNGƒEQU‡*-OPNCMD‚length*#*ƒparameter�block�for�CLOSE�command*CLSCMDƒDC.W†0‰returned�status‰DC.W†2‰CLOSE�command(CLSLNGƒEQU‡*-CLSCMD‚close�command�length*$*…ACO�parameter�block�for�ON�command* ONCMD„EQU‡*‰DC.W†0‰returned�command�status‰DC.W†3‰OUTPUT�ON�command,ONCMD1ƒDC.W†1‰bit�mask�of�channel�to�turn�ON* ONCMDAƒEQU‡*‰DC.W†0‰returned�command�status‰DC.W†3‰OUTPUT�ON�command,‰DC.W†$00FF…bit�mask�to�turn�ON�all�channels*%*…ACO�parameter�block�for�OFF�command* OFFCMDƒEQU‡*&‰DC.W†0‰return�command�status�location‰DC.W†4‰OFF�command.OFFCMD1‚DC.W†1‰bit�mask�of�channel�to�turn�OFF* OFFCMDA‚EQU‡*&‰DC.W†0‰return�command�status�location‰DC.W†4‰OFF�command-‰DC.W†$00FF…bit�mask�to�turn�OFF�all�channels*$*„parameter�block�for�STATUS�command* STATCMD‚EQU‡*‰DC.W†0‰returned�command�status‰DC.W†5‰STATUS�command2STAT…DC.W†1‰bit�mask�&�read�status�of�channels�0-7*:*„ACO�parameter�block�to�do�1000�ms�PULSE�on�selected�chan*PLSO…DC.W†0‰returned�cmd�status‰DC.W†8‰PULSE�command�code‰DC.W†1‰one�channelPLSO1„DC.W†1‰pulse�channel�#‰DC.L†500‡500�ms�pulse*7*„parameter�block�to�PULSE�four�channels�simultaneously*!PLSTWOƒDC.W†0‰returned�cmd�status‰DC.W†8‰PULSE�command�code‰DC.W†4‰four�channels‰DC.W†4‰chan.�#�4‰DC.L†250‡250�ms‰DC.W†5‰chan.�#�5‰DC.L†500‡500�ms‰DC.W†6‰chan.�#�6‰DC.L†750‡750�ms‰DC.W†7‰chan.�#�7‰DC.L†1000†1000�msPLSTLGƒEQU‡*-PLSTWO*"*„INVALID�CHANNEL�parameter�blocks*!OPNCH0ƒDC.W†0‰returned�cmd�status‰DC.W†1‰OPEN�command�code‰DC.W†0‰open�zero�channels‰DC.W†0‰channel�0‰DC.W†$8000…config.OPNCHLƒEQU‡*-OPNCH0*!OPNCH9ƒDC.W†0‰returned�cmd�status‰DC.W†1‰OPEN�cmd�code‰DC.W†1‰open�one�channel‰DC.W†9‰open�channel�#�90 ‰DC.W†$8000…config.OPNC9LƒEQU‡*-OPNCH9* OPNTW„DC.W†0‰returned�cmd�status‰DC.W†1‰OPEN�cmd�code‰DC.W†3‰open�three�chan.‰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‰returned�cmd�status‰DC.W†1‰OPEN�cmd�code‰DC.W†9‰open�9�channels‰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*#*…INVALID�COMMANDS�parameter�blocks*!INVCM0ƒDC.W†0‰returned�cmd�status‰DC.W†0‰invalid�command�0*!INVCM6ƒDC.W†0‰returned�cmd�status‰DC.W†6‰invalid�command�6*!INVCM7ƒDC.W†0‰returned�cmd�status‰DC.W†7‰invalid�command�7*!INVCM9ƒDC.W†0‰returned�cmd�status"‰DC.W†9‰invalid�cmd�greater�than�8**„IOS�MESSAGE�parameter�block*MSG†DC.B†0‰Data�xfer�code=0‰DC.B†2‰Write�data‰DC.W†0‰Options�-�none‰DC.B†0‰Status ‰DC.B†6‰LUN‰DC.W†0‰reserved‰DC.L†0‰random�record�countX1‡DC.L†0‰bfr�start�addr.X2‡DC.L†0‰bfr�end�addr.‰DC.L†0‰length�of�data�xfer ‰DC.L†0‰completion/service�addr.*‰PAGE *„MESSAGES*6SMSG1„DC.W†'**********�AC�OUTPUT�TEST�PROGRAM�******�'TMSG…DC.W†'ACO1‚' EMSG1„EQU‡*-1*ééé8SMSG2„DC.W†'‚OPEN�&�OUTPUT�TO�EACH�CHANNEL�INDIVIDUALLY' EMSG2„EQU‡*-1*9SMSG3„DC.W†'‚OPEN�&�OUTPUT�EACH�CHANNEL�UNTIL�ALL�ARE�ON' EMSG3„EQU‡*-1*5SMSG4„DC.W†'‚CLOSE�CHANNELS,�OUTPUTS�SHOULD�TURN�OFF' EMSG4„EQU‡*-1*0SMSG5„DC.W†'‚TURN�ON�ALL�OUTPUTS,�THEN�TURN�OFF' EMSG5„EQU‡*-1*'SMSG6„DC.W†'‚PULSE�EACH�OUTPUT�IN�TURN' EMSG6„EQU‡*-1*5SMSG7„DC.W†'‚PULSE�OUTPUT�2�AND�GENERATE�QUEUE�EVENT' EMSG7„EQU‡*-1*1SMSG8„DC.W†'‚PULSE�OUTPUT�1�AND�GENERATE�WAKE-UP' EMSG8„EQU‡*-1*/SMSG9„DC.W†'‚TRY�COMMANDS�WITH�CHANNELS�CLOSED' EMSG9„EQU‡*-1**SMSG10ƒDC.W†'‚INVALID�ASQ�MESSAGE�-�ERROR'EMSG10ƒEQU‡*-1*+SMSG11ƒDC.W†'‚TRY�TO�OPEN�INVALID�CHANNELS'EMSG11ƒEQU‡*-1*4SMSG12ƒDC.W†'‚CALL�OUTPUT�AND�CHANNELS�CLOSED�-�OK!'EMSG12ƒEQU‡*-1*ééé0 é"SMSG13ƒDC.W†'‚CALL�OUTPUT�-�ERROR'EMSG13ƒEQU‡*-1*1SMSG14ƒDC.W†'‚CALL‚OFFƒAND�CHANNELS�CLOSED�-�OK!'EMSG14ƒEQU‡*-1*SMSG15ƒDC.W†'‚CALL�OFF�-�ERROR'EMSG15ƒEQU‡*-1*4SMSG16ƒDC.W†'‚CALL�STATUS�AND�CHANNELS�CLOSED�-�OK!'EMSG16ƒEQU‡*-1*"SMSG17ƒDC.W†'‚CALL�STATUS�-�ERROR'EMSG17ƒEQU‡*-1*3SMSG18ƒDC.W†'‚CALL�PULSE‚AND�CHANNELS�CLOSED�-�OK!'EMSG18ƒEQU‡*-1*!SMSG19ƒDC.W†'‚CALL�PULSE�-�ERROR'EMSG19ƒEQU‡*-1*4SMSG20ƒDC.W†'‚TRY�CALL�OPEN�AND�ALREADY�OPENED�-OK!'EMSG20ƒEQU‡*-1*&SMSG21ƒDC.W†'‚INVALID�CHANNEL�-�ERROR'EMSG21ƒEQU‡*-1* SMSG22ƒDC.W†'‚CALL�OPEN�-�ERROR'EMSG22ƒEQU‡*-1*9SMSG23ƒDC.W†'‚******�TEST�COMPLETED�SUCCESSFULLY�*******'EMSG23ƒEQU‡*-1*SMSG24ƒDC.W†'‚'EMSG24ƒEQU‡*-1**SMSG25ƒDC.W†'‚TRY�TO�USE�INVALID�COMMANDS'EMSG25ƒEQU‡*-1**SMSG26ƒDC.W†'‚CALL„INVALID„COMMANDS„-‚OK!'EMSG26ƒEQU‡*-1*&SMSG27ƒDC.W†'‚INVALID�COMMAND�-�ERROR'EMSG27ƒEQU‡*-1*#SMSG28ƒDC.W†'‚STATUS�CHECK�-�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†'‚WAKEUP�OR�QUEUE�ERROR'EMSG31ƒEQU‡*-1*9SMSG32ƒDC.W†'‚PULSE�CHANNELS�4,�5,�6,�&�7�SIMULTANEOUSLY'EMSG32ƒEQU‡*-1*!SMSG33ƒDC.W†'‚CALL�CLOSE�-�ERROR'EMSG33ƒEQU‡*-1*#SMSG34ƒDC.W†'‚TRAP�#�2�(IOS)�ERROR'EMSG34ƒEQU‡*-1*!SMSG35ƒDC.W†'‚CALL�DELAY�-�ERROR'EMSG35ƒEQU‡*-1**SMSG36ƒDC.W†'‚CALL„INVALID„CHANNELS„-‚OK!'EMSG36ƒEQU‡*-1*‰PAGE*:SMSG37ƒDC.W†'-�-�-�NON-EXISTANT�TASK/BOARD�-�-�-�-�-�-�-^'EMSG37ƒEQU‡*-1*&SMSG38ƒDC.W†'‚A.S.Q.�MESSAGE�VERIFIED'EMSG38ƒEQU‡*-1*-SMSG39ƒDC.W†'‚TURN�OFF�CHANNELS�SEQUENTIALLY'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‰event�counter!STATSHF‚DS.W†1‰status�bit�shifter1DUALFGƒDS.W†1‰dual�board�test�flag(1=do�not�test)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*:*‚This�program�performs�the�following�tests�on�the�driver:*9*ˆTEST1‚-‚individually�opens�each�channel,�outputs�to�it,-*’checks�status,�turns�it�off,�checks�status, *’and�closes.9*ˆTEST2‚-‚individually�opens�each�channel,�outputs�to�it,1*’checks�status,�continues�until�all�are�on.�Then,*’individually�turns�off�each�channel,checks0*’status,�continues�until�all�are�off.�Turns�all%*’channels�back�on�for�the�next�test.7*ˆTEST3‚-‚closes�the�channels,�OPERATOR�must�check�they *’turned�off.4*ˆTEST4‚-‚opens�all�channels,�turns�all�channels�on,-*’delays,�turns�all�channels�off,�and�closes.9*ˆTEST5‚-‚individually�opens�each�channel,�commands�pulse*’output,�delays,�and�closes.7*ˆTEST6‚-‚opens�four�channels,�commands�pulse�output�of3*’different�lengths�to�each�simultaneously,�delays,*’closes�channels.;*ˆTEST7�-ƒopens�channel�two�with�queue�event�configuration,'*’pulses�output,�waits�for�queue�event,)*’verifies�message�sent,�closes�channels.:*ˆTEST8‚-‚opens�channel�one�with�wait�for�wake-up�config.,'*’pulses�output,�waits�for�wake-up,�and*’closes�channels.:*ˆTEST9‚-‚trys�output�ON�with�channels�closed�and�verifies*’error.3*’trys�output�OFF�with�channels�closed�and�verifies*’error./*’trys�checking�status�with�channels�closed�and*’verifies�error.,*’trys�pulse�output�with�channels�closed�and*’verifies�error.<*ˆTEST10�-‚trys�opening�invalid�channel�numbers�and�verifies3*’errors.�(ZERO�channels,�more�than�eight�channels,"*’channel�#�9,�same�two�channels).:*ˆTEST11�-‚opens�channel�and�trys�invalid�commands�(�0,�6,*’7,�>�8�)�and�verifies�errors.=*ˆTEST12�-‚trys�opening�channels�when�they�are�already�opened*’and�verifies�error.*>*ˆIf�it�passed�these�tests�it�returns�to�the�top�to�set�up�for2*’task�DCO2.�If�this�was�for�task�DCO2,�it�sets�up$*’to�test�both�tasks�simultaneously.7*ˆIF�ALL�TESTS�ARE�SUCCESSFUL,�prints�message�attesting0*’to�that�fact.�If�any�test�fails,�ERROR�message$*’is�printed�and�test�is�terminated.*D********************************************************************‰PAGE*5IOADR0ƒEQU‡$F80000�VM02�base�mem�map�I/O�chan�address5IOADR1ƒEQU‡$FA0000�VM03�base�mem�map�I/O�chan�address7IOADR2ƒEQU‡$FE6000�VME110�base�mem�map�I/O�chan�address7IOADR3ƒEQU‡$F1C000�VME/10�base�mem�map�I/O�chan�address* ‰SECTIONƒ0*TEST…LEA‡STACK(PC),A7‰LEA‡INITIO(PC),A0.‰CLR.W…DUALFG-INITIO(A0)ƒclear�dual�test�flags‰CLR.W…DUALCK-INITIO(A0)**�SET�UP�A.S.Q.*!‰MOVE.L„#31,D0Žstage�command�code-‰LEA‡ASQBLOCK(PC),A0…stage�command�parameters.‰LEA‡TESTIRQ(PC),A1†initializes�addr.�of�async*‰MOVE.L„A1,ASQLA-ASQBLOCK(A0)‚service�rtn.‰TRAP†#1 ‰BNE‡FAULT11*‰MOVE.L„#'DCO1',D0(TNAME„LEA‡INITIO(PC),A0‡SET�UP�TASK�NAME‰MOVE.L„D0,DCOPAR-INITIO(A0)‰MOVE.L„D0,TMSG-INITIO(A0)*!TRYBTHƒLEA‡SMSG24(PC),A1‡space�up‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1†again‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*.‰LEA‡SMSG1(PC),A1ˆoutput�start�of�test�message‰LEA‡EMSG1(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1‡space�up‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‰LEA‡CLSCMD(PC),A1‰MOVE.L„A1,CMDA-INITIO(A0)+‰MOVE.W„#CLSLNG,A1ŠINSURE�CHANNEL(S)�CLOSED$‰MOVE.W„A1,CMDL-INITIO(A0)‚TO�START.‰MOVE.L„#60,D0‰TRAP†#1 ‰BNE‡FAULT16*‰PAGE* *…OPEN�THE�CHANNELS�INDIVIDUALLY*5TEST1„LEA‡SMSG2(PC),A1‡output�'open�&�output'�message‰LEA‡EMSG2(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT4 15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)�initialize�parameters‰LEA‡INITIO(PC),A0*‰MOVE.W„#1,ONCMD1-INITIO(A0)�'ON'�bit�mask,‰MOVE.W„#1,OFFCMD1-INITIO(A0)�'OFF'�bit�mask2‰MOVE.W„#1,STATSHF-INITIO(A0)�status�req.�bit�maské;OPNLP„MOVE.W„EVNTCNT(PC),D0†OPEN�CHANNEL�(event�count�holds‰LEA‡INITIO(PC),A0‡channel�#�)+‰MOVE.W„D0,OPNCH-INITIO(A0)�channel�to�open‰LEA‡OPNCMDS(PC),A1,‰MOVE.L„A1,CMDA-INITIO(A0)‚parameters�to�CMR‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT1*+‰LEA‡INITIO(PC),A0‡OUTPUT�TO�CHANNEL�OPENED‰LEA‡ONCMD(PC),A1,‰MOVE.L„A1,CMDA-INITIO(A0)‚parameters�to�CMR ‰MOVE.W„#6,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1 ‰BNE‡FAULT2*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#500,A0�500�MS‰TRAP†#1 ‰BNE‡FAULT15*!‰LEA‡OPNLP(PC),A1ˆloop�back�addr.&‰LEA‡TEST1B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggleééééé*%TEST1BƒLEA‡INITIO(PC),A0‡CHECK�STATUS/‰MOVE.W„STATSHF(PC),D0†move�channel�to�check�to1‰MOVE.W„D0,STAT-INITIO(A0)‚status�parameter�block‰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‰does�status�check�with�bit�that"‰CMP.W…ONCMD1(PC),D0‡should�be�on? ‰BNE‡FAULT4*#‰LEA‡INITIO(PC),A0‡TURN�OFF�CHANNEL‰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‡CHECK�STATUS/‰MOVE.W„STATSHF(PC),D0†move�channel�to�check�to1‰MOVE.W„D0,STAT-INITIO(A0)‚status�parameter�block‰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‰does�status�check�show�bit#‰BNE‡FAULT4Žstill�on?�if�so,�error.*#‰LEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.&‰LEA‡TEST1C(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST1CƒLEA‡INITIO(PC),A0>‰ASL.W…ONCMD1-INITIO(A0)ƒshift�'ON'�channel�bit�mask�one�place/‰ASL.W…OFFCMD1-INITIO(A0)‚shift�'OFF'ƒ"…"ƒ"„"„"0‰ASL.W…STATSHF-INITIO(A0)‚shift�status‚"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrement�event�counter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0�done? ‰BMI‡OPNLP*‰PAGE4 éé*2*„OUTPUT�TO�CHANNELS�SEQUENTIALLY�UNTIL�ALL�ARE�ON*5TEST2„LEA‡SMSG3(PC),A1‡output�'output�to�all'�message‰LEA‡EMSG3(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)�initialize�parameters‰LEA‡INITIO(PC),A06‰MOVE.W„#1,ONCMD1-INITIO(A0)‚bit�mask�for�'ON'�channel9‰MOVE.W„#1,STATSHF-INITIO(A0)�bit�mask�for�status�channel)OPNLP2ƒMOVE.W„EVNTCNT(PC),D0†OPEN�CHANNEL‰LEA‡INITIO(PC),A0‰MOVE.W„D0,OPNCH-INITIO(A0)/‰LEA‡INITIO(PC),A0‡point�to�CMR�parameter�block‰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‡OUTPUT�TO�CHANNEL�OPENED‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#500,A0�500�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP2(PC),A1‡loop�back�addr.&‰LEA‡TEST2A(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*1TEST2AƒLEA‡INITIO(PC),A0‡CHECK�STATUS�OF�CHANNELS‰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‰does�status�check?‰CMP.W…STATSHF(PC),D0 ‰BNE‡FAULT4*"‰LEA‡TEST2A(PC),A1‡loop�back�addr.&‰LEA‡TEST2B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST2BƒLEA‡INITIO(PC),A0>‰ASL.W…ONCMD1-INITIO(A0)ƒshift�'ON'�channel�bit�mask�one�place‰ORI‡#$10,CCRŒset�X�bit/‰ROXL.W„STATSHF-INITIO(A0)‚add�statusƒ"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrement�event�counter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0�done? ‰BMI‡OPNLP2*7TEST2CƒLEA‡SMSG39(PC),A1‡output�'turn�off�seq.'�message‰LEA‡EMSG39(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0"‰CLR.W…0(A0)�initialize�parameters‰LEA‡INITIO(PC),A08‰MOVE.W„#1,OFFCMD1-INITIO(A0)‚bit�mask�for�'OFF'�channel9‰MOVE.W„#1,STATSHF-INITIO(A0)�bit�mask�for�status�channel*)OPNLP3ƒLEA‡INITIO(PC),A0‡TURN�OFF�CHANNEL‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#500,A0�500�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP3(PC),A1‡loop�back�addr.&‰LEA‡TEST2D(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*0TEST2DƒLEA‡INITIO(PC),A0‡CHECK�STATUS�OF�CHANNEL‰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‰does�status�check? ‰BNE‡FAULT4*"‰LEA‡TEST2D(PC),A1‡loop�back�addr.&‰LEA‡TEST2E(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST2EƒLEA‡INITIO(PC),A0@‰ASL.W…OFFCMD1-INITIO(A0)‚shift�'OFF'�channel�bit�mask�one�place0‰ASL.W…STATSHF-INITIO(A0)‚shift�status‚"…"ƒ"„"„"‰LEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrement�event�counter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0�done? ‰BMI‡OPNLP3*+TEST2FƒLEA‡INITIO(PC),A0‡OUTPUT�TO�CHANNELS‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST2F(PC),A1‡loop�back�addr.%‰LEA‡TEST3(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle**%**************************************ƒCLOSE�TEST–*%**************************************-TEST3„LEA‡SMSG4(PC),A1‡output�'close'�message‰LEA‡EMSG4(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*)TEST3AƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.%‰LEA‡TEST4(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle*‰PAGE$*„TURN�ON�ALL�OUTPUTS,�THEN�TURN�OFF*9TEST4„LEA‡SMSG5(PC),A1‡output�'turn�on,�turn�off'�message‰LEA‡EMSG5(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15**TEST4AƒLEA‡INITIO(PC),A0‡OPEN�ALL�CHANNELS/‰LEA‡OPNCMD(PC),A1‡point�to�CMR�parameter�block‰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‡OUTPUT�TO�CHANNELS�OPENED‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST4A(PC),A1‡loop�back�addr.&‰LEA‡TEST4B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle**TEST4BƒLEA‡INITIO(PC),A0‡TURN�OFF�CHANNELS‰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‡CLOSE�CHANNEL(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‡loop�back�addr.%‰LEA‡TEST5(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle*‰PAGE*„PULSE�EACH�OUTPUT�IN�TURN*2TEST5„LEA‡SMSG6(PC),A1‡output�'pulse�each'�message‰LEA‡EMSG6(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰LEA‡EVNTCNT(PC),A0‰CLR.W…0(A0)�initialize�evntcnt)OPNLP4ƒMOVE.W„EVNTCNT(PC),D0†OPEN�CHANNEL/‰LEA‡INITIO(PC),A0‡point�to�CMR�parameter�block+‰MOVE.W„D0,OPNCH-INITIO(A0)�channel�to�open,‰MOVE.W„D0,PLSO1-INITIO(A0)�channel�to�pulse‰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‰PULSE�OUTPUT‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡OPNLP4(PC),A1‡loop�back�addr.&‰LEA‡TEST5A(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*)TEST5AƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.&‰LEA‡TEST5B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST5BƒLEA‡EVNTCNT(PC),A0'‰ADD.W…#1,0(A0)Œincrement�event�counter‰MOVE.W„EVNTCNT(PC),D0‰CMPI.W„#8,D0�done? ‰BMI‡OPNLP4*‰PAGE#*„PULSE�FOUR�OUTPUTS�SIMULTANEOUSLY*6TEST6„LEA‡SMSG32(PC),A1†output�'pulse�simult.'�message‰LEA‡EMSG32(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1500,A0Œ1500�MS‰TRAP†#1 ‰BNE‡FAULT15*&TEST6AƒLEA‡INITIO(PC),A0‡OPEN�CHANNELS‰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‰PULSE�OUTPUT‰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ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#500,A0�500�MS‰TRAP†#1 ‰BNE‡FAULT15*éé"‰LEA‡TEST6A(PC),A1‡loop�back�addr.&‰LEA‡TEST6B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*TEST6BƒMOVE.L„#21,D0ŽDELAY‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*)TEST6CƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.%‰LEA‡TEST7(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle*‰PAGE+*„PULSE�OUTPUT�TWO�AND�GENERATE�QUEUE�EVENT*6TEST7„LEA‡SMSG7(PC),A1‡output�'pulse�output�2'�message‰LEA‡EMSG7(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST7AƒLEA‡RCVBUF(PC),A0‡ensure�RCVBUF�zeroed�out‰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)�set�up�config.�(queue�event)‰MOVE.W„#2,D0�OPEN�CHANNEL�TWO+‰MOVE.W„D0,OPNCH-INITIO(A0)‚channel�to�open,‰MOVE.W„D0,PLSO1-INITIO(A0)‚channel�to�pulse‰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‰PULSE�OUTPUTé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Žrequest�wait�for�event.$‰TRAP†#1’to�be�issued�by�DCO�driver. ‰BNE‡FAULT13*4‰MOVE.L„RCVBUF(PC),D0‡verify�message�returned�by�ASQ4‰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‡mask�off�low�order�byte0‰CMP.L…#IOADR0,D0ŠVM02�memory�mapped�I/O�address ‰BEQ.S…TEST710‰CMP.L…#IOADR1,D0ŠVM03�memory�mapped�I/O�address ‰BEQ.S…TEST722‰CMP.L…#IOADR2,D0ŠVME110�memory�mapped�I/O�address ‰BEQ.S…TEST732‰CMP.L…#IOADR3,D0ŠVME/10�memory�mapped�I/O�address ‰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�'asq�verified'�msg‰LEA‡EMSG38(PC),A2 ‰BSR‡MSGOUT*"‰LEA‡TEST7A(PC),A1‡loop�back�addr.&‰LEA‡TEST7B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*)TEST7BƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.&‰LEA‡TEST7C(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*6TEST7CƒMOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*‰PAGE'*…PULSE�OUTPUT�ONE�AND�GENERATE�WAKE-UP3TEST8„LEA‡SMSG8(PC),A1‡output�'pulse�led�1'�message‰LEA‡EMSG8(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST8AƒLEA‡INITIO(PC),A0‡point�to�CMR�para.�block5‰MOVE.W„#1,OPNCNF-INITIO(A0)�set�up�config.�(wake-up)‰MOVE.W„#1,D0�OPEN�CHANNEL�ONE+‰MOVE.W„D0,OPNCH-INITIO(A0)‚channel�to�open,‰MOVE.W„D0,PLSO1-INITIO(A0)‚channel�to�pulse‰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‰PULSE�OUTPUT‰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Žrequest�wait�for�wake-up.$‰TRAP†#1’to�be�issued�by�DCO�driver. ‰BNE‡FAULT130‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�CHANNEL‰MOVE.L„#1000,A0Œ1000�MS‰TRAP†#1 ‰BNE‡FAULT15*"‰LEA‡TEST8A(PC),A1‡loop�back�addr.&‰LEA‡TEST8B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*)TEST8BƒLEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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‡loop�back�addr.&‰LEA‡TEST8C(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*6TEST8CƒLEA‡INITIO(PC),A0‡restore�default�configuration ‰MOVE.W„#$8000,OPNCNF-INITIO(A0)2‰MOVE.W„#0,OPNCH-INITIO(A0)�restore�channel�select1‰MOVE.W„#1,STAT-INITIO(A0)‚restore�status�channel3‰MOVE.W„#1,OFFCMD1-INITIO(A0)‚restore�off�cmd�chan.*‰PAGE#*„TRY�COMMANDS�WITH�CHANNELS�CLOSED7TEST9„LEA‡SMSG9(PC),A1‡output�'try�with�closed'�message‰LEA‡EMSG9(PC),A2 ‰BSR‡MSGOUT*ééé0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*1TEST9AƒLEA‡INITIO(PC),A0‡OUTPUT�TO�CLOSED�CHANNEL‰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ˆread�returned�status(‰CMP.W…#$F2,D0�verify�correct�error�code ‰BNE‡FAULT2 ‰LEA‡SMSG12(PC),A1‡output�ok�msg‰LEA‡EMSG12(PC),A2 ‰BSR‡MSGOUT*#‰LEA‡INITIO(PC),A0‡TURN�OFF�CHANNEL‰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‡read�returned�status(‰CMP.W…#$F2,D0�verify�correct�error�code ‰BNE‡FAULT5‰LEA‡SMSG14(PC),A1‡off�ok�msg‰LEA‡EMSG14(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‡CHECK�STATUS‰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†read�returned�status(‰CMP.W…#$F2,D0�verify�correct�error�code ‰BNE‡FAULT3éé7 éé ‰LEA‡SMSG16(PC),A1‡status�ok�msg‰LEA‡EMSG16(PC),A2 ‰BSR‡MSGOUT*‰LEA‡INITIO(PC),A0‰LEA‡PLSO(PC),A1‰PULSE�OUTPUT‰MOVE.L„A1,CMDA-INITIO(A0)‰MOVE.W„#12,CMDL-INITIO(A0)‰MOVE.L„#60,D0‰TRAP†#1(‰MOVE.W„PLSO(PC),D0‰read�returned�status(‰CMP.W…#$F6,D0�verify�correct�error�code ‰BNE‡FAULT10*"‰LEA‡TEST9A(PC),A1‡loop�back�addr.&‰LEA‡TEST9B(PC),A2‡continue�on�forward‰BRA‡FLOP�test�for�toggle*%TEST9BƒLEA‡SMSG18(PC),A1‡pulse�ok�msg‰LEA‡EMSG18(PC),A2 ‰BSR‡MSGOUT*‰PAGE*ƒTRY�TO�OPEN�INVALID�CHANNELS6TEST10ƒLEA‡SMSG11(PC),A1‡output�'try�invalid�channels'‰LEA‡EMSG11(PC),A2 ‰BSR‡MSGOUT0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*3TEST10A‚LEA‡INITIO(PC),A0‡TRY�TO�OPEN�ZERO�CHANNELS‰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‡read�cmd�status‰CMP.W…#$F7,D0 ‰BNE‡FAULT7*3‰LEA‡INITIO(PC),A0‡TRY�TO�OPEN�MORE�THAN�8�CHANNELS‰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‡read�cmd�status‰CMP.W…#$F7,D0 ‰BNE‡FAULT7*,‰LEA‡INITIO(PC),A0‡TRY�TO�OPEN�CHANNEL�#�>�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‡read�cmd�status‰CMP.W…#$F6,D0 ‰BNE‡FAULT7*éé0‰LEA‡INITIO(PC),A0‡TRY�TO�OPEN�SAME�TWO�CHANNELS‰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ˆread�cmd�status‰CMP.W…#$FE,D0 ‰BNE‡FAULT7*#‰LEA‡TEST10A(PC),A1†loop�back�addr.'‰LEA‡TEST10B(PC),A2†continue�on�forward‰BRA‡FLOP�test�for�toggle*6TEST10B‚LEA‡SMSG36(PC),A1‡output�'invalid�channels�ok'‰LEA‡EMSG36(PC),A2 ‰BSR‡MSGOUT*‰PAGE*„TRY�TO�USE�INVALID�COMMANDS*2TEST11ƒLEA‡SMSG25(PC),A1‡output�'try�invalid�cmds'‰LEA‡EMSG25(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*&TEST11A‚LEA‡INITIO(PC),A0‡OPEN�CHANNEL‰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‡INVALID�COMMAND�0‰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‡read�returned�status‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*$‰LEA‡INITIO(PC),A0‡INVALID�COMMAND�6‰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‡read�returned�status‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*$‰LEA‡INITIO(PC),A0‡INVALID�COMMAND�7‰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‡read�returned�status‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*&‰LEA‡INITIO(PC),A0‡INVALID�COMMAND�>�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‡read�returned�status‰CMP.W…#$F4,D0 ‰BNE‡FAULT9*#‰LEA‡TEST11A(PC),A1†loop�back�addr.'‰LEA‡TEST11B(PC),A2†continue�on�forward‰BRA‡FLOP�test�for�toggle*-TEST11B‚LEA‡SMSG26(PC),A1‡invalid�cmds�ok�msg‰LEA‡EMSG26(PC),A2 ‰BSR‡MSGOUT*‰PAGE*„TRY�OPEN�AND�ALREADY�OPENED9TEST12ƒLEA‡SMSG20(PC),A1†output�'try�with�opened'�message‰LEA‡EMSG20(PC),A2 ‰BSR‡MSGOUT*0‰MOVE.L„#21,D0ŽDELAY�SO�OPERATOR�CAN�SEE�MESSAGE‰MOVE.L„#1200,A0Œ1200�MS‰TRAP†#1 ‰BNE‡FAULT15*6TEST12A‚LEA‡INITIO(PC),A0‡point�to�CMR�parameter�block(‰MOVE.W„#0,OPNCH-INITIO(A0)�OPEN�CHANNEL‰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‡point�to�CMR�parameter�block‰LEA‡OPNCMDS(PC),A1)‰MOVE.L„A1,CMDA-INITIO(A0)‚TRY�OPEN�again‰MOVE.W„#OPNLNGS,A1‰MOVE.W„A1,CMDL-INITIO(A0)‰MOVE.L„#60,D0ŽCMR‰TRAP†#1+‰MOVE.W„OPNCMDS(PC),D0‡read�returned�status‰CMP.W…#$FE,D0 ‰BNE.S…FAULT1*#‰LEA‡INITIO(PC),A0‡CLOSE�CHANNEL(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†loop�back�addr.%‰LEA‡TESTC(PC),A2ˆcontinue�on�forward‰BRA‡FLOP�test�for�toggle*1*************************************************éé*„TEST�COMPLETED�*1************************************************* TESTC„LEA‡SMSG24(PC),A1‡space�up‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUTééééé8 éé*1‰LEA‡SMSG23(PC),A1†output�'test�complete'�message‰LEA‡EMSG23(PC),A2 ‰BSR‡MSGOUT*‰LEA‡SMSG24(PC),A1†space�up‰LEA‡EMSG24(PC),A2 ‰BSR‡MSGOUT*#NEXT…MOVE.W„DUALFG(PC),D0‡flag�set? ‰BNE‡TERM.NEXTA„MOVE.L„DCOPAR(PC),D0‡try�for�second�task‰CMP.L…#'DCO1',D0‰BNE‡TERMA�done‰MOVE.L„#'DCO2',D0‰BRA‡TNAME�set�up�second�task*‰PAGE*#FAULT1ƒLEA‡SMSG22(PC),A1‡open�error‰LEA‡EMSG22(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT2ƒLEA‡SMSG13(PC),A1‡output�error‰LEA‡EMSG13(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT3ƒLEA‡SMSG17(PC),A1‡status�error‰LEA‡EMSG17(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM+FAULT4ƒLEA‡SMSG28(PC),A1‡status�check�error‰LEA‡EMSG28(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM"FAULT5ƒLEA‡SMSG15(PC),A1‡off�error‰LEA‡EMSG15(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM*FAULT6ƒLEA‡SMSG10(PC),A1‡ASQ�message�error‰LEA‡EMSG10(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM.FAULT7ƒLEA‡SMSG21(PC),A1‡invalid�channel�error‰LEA‡EMSG21(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM$FAULT8ƒLEA‡SMSG33(PC),A1‡close�error‰LEA‡EMSG33(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM.FAULT9ƒLEA‡SMSG27(PC),A1‡invalid�cmd�error�msg‰LEA‡EMSG27(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM%FAULT10‚LEA‡SMSG19(PC),A1‡pulse�error‰LEA‡EMSG19(PC),A2 ‰BSR‡MSGOUT ‰BRA‡TERM#FAULT11‚LEA‡SMSG30(PC),A1‡ASQ�error‰LEA‡EMSG30(PC),A2 ‰BSR‡MSGOUT ‰BRA.S…TERM#FAULT12‚LEA‡SMSG29(PC),A1‡ASQ�error‰LEA‡EMSG29(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM6FAULT13‚LEA‡SMSG31(PC),A1‡WAKE-UP�or�QUEUE�EVENT�error‰LEA‡EMSG31(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM2FAULT14‚LEA‡SMSG34(PC),A1‡IOS�(trap�#2)�call�error‰LEA‡EMSG34(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM*FAULT15‚LEA‡SMSG35(PC),A1‡call�delay�error‰LEA‡EMSG35(PC),A2 ‰BSR.S…MSGOUT ‰BRA.S…TERM/FAULT16‚LEA‡SMSG37(PC),A1‡non-existant�task�msg‰LEA‡EMSG37(PC),A2 ‰BSR.S…MSGOUT(‰LEA‡DUALFG(PC),A0‡set�flag�to�eliminate‰ADD.W…#1,(A0)�dual�test ‰BRA‡NEXTA**„DE-ACTIVATE�SELF*0TERMA„LEA‡INITIO(PC),A0‡test�for�dual�board�test‰TST.W…DUALFG-INITIO(A0) ‰BNE.S…TERM4‰MOVE.W„#1,DUALFG-INITIO(A0)‚set�up�for�dual�bd�test‰MOVE.W„#1,DUALCK-INITIO(A0)!‰MOVE.L„#'DCO1',DCOPAR-INITIO(A0)*‰MOVE.L„#'DCO1',TMSG-INITIO(A0)‚set�up�msg‰MOVE.W„#'&2',TMSG+4-INITIO(A0) ‰BRA‡TRYBTH*%TERM…MOVE.L„#32,D0ŽDE-ALLOCATE�A.S.Q.‰TRAP†#1**‰MOVE.L„#15,D0ŽNOW�DE-ACTIVATE�SELF�(EXIT)‰TRAP†#1**„MESSAGE�OUTPUT�SUBROUTINE*éééé8 éé/MSGOUTƒLEA‡MSG(PC),A0Šoutput�message�pointed�to(‰MOVE.L„A1,X1-MSG(A0)‡by�A1,�ended�by�A2‰MOVE.L„A2,X2-MSG(A0)‰TRAP†#2 ‰BNE‡FAULT14‰RTS*1FLOP…LEA‡INITIO(PC),A0‡toggle�between�DCO1�&�DCO2‰MOVE.W„DUALCK-INITIO(A0),D0 ‰BEQ.S…FLOP2�continue�on�if�zero‰CMP.W…#1,D0�see�if�=�1 ‰BNE.S…FLOP11‰MOVE.W„#2,DUALCK-INITIO(A0)‚is�=�1,�set�up�for�2!‰MOVE.L„#'DCO2',DCOPAR-INITIO(A0)‰JMP‡(A1)�loop�back6FLOP1„MOVE.W„#1,DUALCK-INITIO(A0)‚is�=�2,�set�up�for�1!‰MOVE.L„#'DCO1',DCOPAR-INITIO(A0))FLOP2„JMP‡(A2)�continue�on�with�next�test*-*ƒMOVE�THE�ASQ�MESSAGE�FROM�THE�ASQ�TO�RCVBUF*8TESTIRQ‚EQU‡*‰entry�point�moving�data�from�ASQ�to�RCVBUF!‰MOVE.L„#34,D0„stage�command�code‰LEA‡RCVBUF(PC),A0‰TRAP†#1 ‰BNE‡FAULT12*„RETURN�FROM�EVENT!‰MOVE.L„#37,D0„stage�command�code ‰MOVE.W„#1,A0‰TRAP†#1*‰PAGE**„CMR�parameter�block*INITIOƒDC.B†7,0,0,0DCOPARƒDC.L†'DCO1'„TASK�NAME ‰DC.L†0,0,0*CMDA…DC.L†0‰address�of�DCO�parameter�blockCMDL…DC.W†0‰command�length**„A.S.Q.�parameter�block*ASQBLOCK�EQU‡*‰DC.L†0‰task�name‰DC.L†0‰dummy�field*‰DC.B†5‰ASQ�&�ASR�enabled�=�initial�status"‰DC.B†16ˆlength�of�message�for�ASQ‰DC.L†16ˆstorage�for�4�events?ASQLA„DC.L†TESTIRQƒlogical�address�of�target�task�async�svc�rtn‰DC.L†0‰dummy�fieldASQLNGƒEQU‡*-ASQBLOCK*0*„DCO�parameter�block�to�open�individual�channel*OPNCMDS‚DC.W†0‰returned�status‰DC.W†1‰OPEN�command�code‰DC.W†1‰open�1�channelOPNCH„DC.W†0‰channel�#/OPNCNFƒDC.W†$8000…Default�channel�configurationOPNLNGS‚EQU‡*-OPNCMDS�length***„DCO�parameter�block�to�open�ALL�channels*OPNCMDƒDC.W†0‰returned�status‰DC.W†1‰OPEN�command�code‰DC.W†8‰open�8�channels*‰DC.W†0,$8000ƒCHAN�0,default�configuration‰DC.W†1,$8000ƒCHAN�1,ƒ"‰"‰DC.W†2,$8000ƒCHAN�2,ƒ"‰"‰DC.W†3,$8000ƒCHAN�3,ƒ"‰"‰DC.W†4,$8000ƒCHAN�4,ƒ"‰"‰DC.W†5,$8000ƒCHAN�5,ƒ"‰"‰DC.W†6,$8000ƒCHAN�6,ƒ"‰"‰DC.W†7,$8000ƒCHAN�7,ƒ"‰"OPNLNGƒEQU‡*-OPNCMD‚length*#*ƒparameter�block�for�CLOSE�command*CLSCMDƒDC.W†0‰returned�status‰DC.W†2‰CLOSE�command(CLSLNGƒEQU‡*-CLSCMD‚close�command�length*$*…DCO�parameter�block�for�ON�command* ONCMD„EQU‡*‰DC.W†0‰returned�command�status‰DC.W†3‰OUTPUT�ON�command,ONCMD1ƒDC.W†1‰bit�mask�of�channel�to�turn�ON* ONCMDAƒEQU‡*‰DC.W†0‰returned�command�status‰DC.W†3‰OUTPUT�ON�command,‰DC.W†$00FF…bit�mask�to�turn�ON�all�channels*%*…DCO�parameter�block�for�OFF�command* OFFCMDƒEQU‡*&‰DC.W†0‰return�command�status�location‰DC.W†4‰OFF�command.OFFCMD1‚DC.W†1‰bit�mask�of�channel�to�turn�OFF* OFFCMDA‚EQU‡*&‰DC.W†0‰return�command�status�location‰DC.W†4‰OFF�command-‰DC.W†$00FF…bit�mask�to�turn�OFF�all�channels*$*„parameter�block�for�STATUS�command* STATCMD‚EQU‡*‰DC.W†0‰returned�command�status‰DC.W†5‰STATUS�command2STAT…DC.W†1‰bit�mask�&�read�status�of�channels�0-7*:*„DCO�parameter�block�to�do�1000�ms�PULSE�on�selected�chan*PLSO…DC.W†0‰returned�cmd�status‰DC.W†8‰PULSE�command�code‰DC.W†1‰one�channelPLSO1„DC.W†1‰pulse�channel�#‰DC.L†500‡500�ms�pulse*7*„parameter�block�to�PULSE�four�channels�simultaneously*!PLSTWOƒDC.W†0‰returned�cmd�status‰DC.W†8‰PULSE�command�code‰DC.W†4‰four�channels‰DC.W†4‰chan.�#�4‰DC.L†250‡250�ms‰DC.W†5‰chan.�#�5‰DC.L†500‡500�ms‰DC.W†6‰chan.�#�6‰DC.L†750‡750�ms‰DC.W†7‰chan.�#�7‰DC.L†1000†1000�msPLSTLGƒEQU‡*-PLSTWO*"*„INVALID�CHANNEL�parameter�blocks*!OPNCH0ƒDC.W†0‰9 returned�cmd�status‰DC.W†1‰OPEN�command�code‰DC.W†0‰open�zero�channels‰DC.W†0‰channel�0‰DC.W†$8000…config.OPNCHLƒEQU‡*-OPNCH0*!OPNCH9ƒDC.W†0‰returned�cmd�status‰DC.W†1‰OPEN�cmd�code‰DC.W†1‰open�one�channel‰DC.W†9‰open�channel�#�9‰DC.W†$8000…config.OPNC9LƒEQU‡*-OPNCH9* OPNTW„DC.W†0‰returned�cmd�status‰DC.W†1‰OPEN�cmd�code‰DC.W†3‰open�three�chan.‰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‰returned�cmd�status‰DC.W†1‰OPEN�cmd�code‰DC.W†9‰open�9�channels‰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*#*…INVALID�COMMANDS�parameter�blocks*!INVCM0ƒDC.W†0‰returned�cmd�status‰DC.W†0‰invalid�command�0*!INVCM6ƒDC.W†0‰returned�cmd�status‰DC.W†6‰invalid�command�6*!INVCM7ƒDC.W†0‰returned�cmd�status‰DC.W†7‰invalid�command�7*!INVCM9ƒDC.W†0‰returned�cmd�status"‰DC.W†9‰invalid�cmd�greater�than�8**„IOS�MESSAGE�parameter�block*MSG†DC.B†0‰Data�xfer�code=0‰DC.B†2‰Write�data‰DC.W†0‰Options�-�none‰DC.B†0‰Status ‰DC.B†6‰LUN‰DC.W†0‰reserved‰DC.L†0‰random�record�countX1‡DC.L†0‰bfr�start�addr.X2‡DC.L†0‰bfr�end�addr.‰DC.L†0‰length�of�data�xfer ‰DC.L†0‰completion/service�addr.*‰PAGE *„MESSAGES*6SMSG1„DC.W†'**********�DC�OUTPUT�TEST�PROGRAM�******�'TMSG…DC.W†'DCO1‚' EMSG1„EQU‡*-1*ééé8SMSG2„DC.W†'‚OPEN�&�OUTPUT�TO�EACH�CHANNEL�INDIVIDUALLY' EMSG2„EQU‡*-1*9SMSG3„DC.W†'‚OPEN�&�OUTPUT�EACH�CHANNEL�UNTIL�ALL�ARE�ON' EMSG3„EQU‡*-1*5SMSG4„DC.W†'‚CLOSE�CHANNELS,�OUTPUTS�SHOULD�TURN�OFF' EMSG4„EQU‡*-1*0SMSG5„DC.W†'‚TURN�ON�ALL�OUTPUTS,�THEN�TURN�OFF' EMSG5„EQU‡*-1*'SMSG6„DC.W†'‚PULSE�EACH�OUTPUT�IN�TURN' EMSG6„EQU‡*-1*5SMSG7„DC.W†'‚PULSE�OUTPUT�2�AND�GENERATE�QUEUE�EVENT' EMSG7„EQU‡*-1*1SMSG8„DC.W†'‚PULSE�OUTPUT�1�AND�GENERATE�WAKE-UP' EMSG8„EQU‡*-1*/SMSG9„DC.W†'‚TRY�COMMANDS�WITH�CHANNELS�CLOSED' EMSG9„EQU‡*-1**SMSG10ƒDC.W†'‚INVALID�ASQ�MESSAGE�-�ERROR'EMSG10ƒEQU‡*-1*+SMSG11ƒDC.W†'‚TRY�TO�OPEN�INVALID�CHANNELS'EMSG11ƒEQU‡*-1*4SMSG12ƒDC.W†'‚CALL�OUTPUT�AND�CHANNELS�CLOSED�-�OK!'EMSG12ƒEQU‡*-1*éé9 éé"SMSG13ƒDC.W†'‚CALL�OUTPUT�-�ERROR'EMSG13ƒEQU‡*-1*1SMSG14ƒDC.W†'‚CALL‚OFFƒAND�CHANNELS�CLOSED�-�OK!'EMSG14ƒEQU‡*-1*SMSG15ƒDC.W†'‚CALL�OFF�-�ERROR'EMSG15ƒEQU‡*-1*4SMSG16ƒDC.W†'‚CALL�STATUS�AND�CHANNELS�CLOSED�-�OK!'EMSG16ƒEQU‡*-1*"SMSG17ƒDC.W†'‚CALL�STATUS�-�ERROR'EMSG17ƒEQU‡*-1*3SMSG18ƒDC.W†'‚CALL�PULSE‚AND�CHANNELS�CLOSED�-�OK!'EMSG18ƒEQU‡*-1*!SMSG19ƒDC.W†'‚CALL�PULSE�-�ERROR'EMSG19ƒEQU‡*-1*4SMSG20ƒDC.W†'‚TRY�CALL�OPEN�AND�ALREADY�OPENED�-OK!'EMSG20ƒEQU‡*-1*&SMSG21ƒDC.W†'‚INVALID�CHANNEL�-�ERROR'EMSG21ƒEQU‡*-1* SMSG22ƒDC.W†'‚CALL�OPEN�-�ERROR'EMSG22ƒEQU‡*-1*9SMSG23ƒDC.W†'‚******�TEST�COMPLETED�SUCCESSFULLY�*******'EMSG23ƒEQU‡*-1*SMSG24ƒDC.W†'‚'EMSG24ƒEQU‡*-1**SMSG25ƒDC.W†'‚TRY�TO�USE�INVALID�COMMANDS'EMSG25ƒEQU‡*-1**SMSG26ƒDC.W†'‚CALL„INVALID„COMMANDS„-‚OK!'EMSG26ƒEQU‡*-1*&SMSG27ƒDC.W†'‚INVALID�COMMAND�-�ERROR'EMSG27ƒEQU‡*-1*#SMSG28ƒDC.W†'‚STATUS�CHECK�-�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†'‚WAKEUP�OR�QUEUE�ERROR'EMSG31ƒEQU‡*-1*9SMSG32ƒDC.W†'‚PULSE�CHANNELS�4,�5,�6,�&�7�SIMULTANEOUSLY'EMSG32ƒEQU‡*-1*!SMSG33ƒDC.W†'‚CALL�CLOSE�-�ERROR'EMSG33ƒEQU‡*-1*#SMSG34ƒDC.W†'‚TRAP�#�2�(IOS)�ERROR'EMSG34ƒEQU‡*-1*!SMSG35ƒDC.W†'‚CALL�DELAY�-�ERROR'EMSG35ƒEQU‡*-1**SMSG36ƒDC.W†'‚CALL„INVALID„CHANNELS„-‚OK!'EMSG36ƒEQU‡*-1*‰PAGE*:SMSG37ƒDC.W†'-�-�-�NON-EXISTANT�TASK/BOARD�-�-�-�-�-�-�-^'EMSG37ƒEQU‡*-1*&SMSG38ƒDC.W†'‚A.S.Q.�MESSAGE�VERIFIED'EMSG38ƒEQU‡*-1*-SMSG39ƒDC.W†'‚TURN�OFF�CHANNELS�SEQUENTIALLY'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‰event�counter!STATSHF‚DS.W†1‰status�bit�shifter1DUALFGƒDS.W†1‰dual�board�test�flag(1=do�not�test)<ÏüBrx><Ïü5¼x%|�><WG5GJGm"~ *�N¹XØBr~Þª�%G�jlÞ><ÏüBrx*><Ïü5¼x*><ÏüBrx.><Ïü5¼x.><ÏüBrx.><ÏüBrx4><Ïü5¼x4><ÏüBrx4><ÏüBrx:><Ïü5¼x:><ÏüBrx:><ÏüBrx@><Ïü5¼x@%|�><WG5GJGm"~ *�N¹XØBr@~Þª�%G�jlÞ><Ïü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 Hj�N¹š><Ïü| *�N¹Xà5²fx4><ÏüHjŒHrx4N¹Ö><ÏüHjŒHrx*N¹²~Þª�%G�jlþ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¹š~Þª�%G�jlÿ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”~Þª�%G�jl´><Ïü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¹~Þª�%G�jlÿ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$J�gb A (Df"Oi.i.3|P` (Ff ((føCèaˆ :g )fâ �ÿþbØR�Aÿþ?AN" "O|€-|0Aé,NCf¨|@-|0NCf–J�g¢ 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‘B�2*\ÒŒ²ª,bz(A%L02*P Ab^|[%|\|X|W|Y|VBƒ&j@CúšB��BB1Äü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€B�0*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|ÿÿèB�2*`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@g8B�2A¼+ 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&gB�2JAlDA|-ÿÿ`"J�lD�|-ÿÿB€` "+B„B…B†B‡:H@8>HA<" Db Eb Fb* ‡'mB`0ˆü' "a’(*Šü' "a‚*,Œü' "ar,.Žü' B�ab.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ô€B�vâˆâ‘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^Nu�N^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Ø#@`Д�‚ <3�Bé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ÒKsxW�5.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ß/WP�NuHç?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ßü/WP�NuNVÿÌHæ?$&(J€fJ�gÀ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À €€fJ�fB€P�LÞüN^NuHçÏA`,HçÍA`$HçËA`HçÉA`HçÇA` HçÅA`HçJ€gJ�g46H@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--TEST�PROGRAM�FOR�DCO�OUTPUT�BOARDC†PROGRAM�TSTDCOC<†INTEGER*2�OPN(19),CLSE(2),OUT(3),OFF(3),STATUS(3),PULSE(19)†INTEGER*2�IHEX(10),MSK(8)†CHARACTER*4�IDC †ID�=�'DCO1' 5…OPN(1)�=�0 †OPN(2)�=�1†DO�10�I�=�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†DO�15�I�=�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�('�*****�DC�OUTPUT�MODULE�TEST�PROGRAM�******�',A4) †WRITE�(6,60) †WRITE�(6,60)60„FORMAT�('‚')C0C‡SEE�IF�TASK�EXISTS�BEFORE�RUNNING�THIS�SECTIONC†CALL�DCOCLS(ID,CLSE)†IF�(CLSE(1))�70,90,7070„WRITE�(6,75)�ID&75„FORMAT�('�NON-EXISTANT�TASK�-�',A4) †GO�TO�1350C90„WRITE�(6,100):100ƒFORMAT�('�OPEN�&�OUTPUT�TO�EACH�CHANNEL�INDIVIDUALLY')C †DO�400�I=1,8 †OPN(3)�=�1 †OPN(4)�=�I-1†OPN(5)�=�IHEX(10)†CALL�DCOPEN�(ID,OPN)CˆCHECK�COMMAND�STATUS†IF�(OPN(1))�105,120,105105ƒWRITE�(6,110)!110ƒFORMAT�('�CALL�OPEN�-�ERROR')120ƒOUT(3)�=�IHEX(I)†CALL�DCOOUT�(ID,OUT)CˆCHECK�COMMAND�STATUS†IF�(OUT(1))�125,140,125125ƒWRITE�(6,130) 130ƒFORMAT�('�CALL�OUT�-�ERROR')C140ƒCALL�DELAYC†STATUS(3)�=�IHEX(I)†CALL�DCOSTA�(ID,STATUS)#†IF�(STATUS(3)-IHEX(I))�150,200,150C150ƒCALL�ERRPR1�(I)200ƒOFF(3)�=�IHEX(I)†CALL�DCOOFF�(ID,OFF)†CALL�DCOCLS�(ID,CLSE) 400ƒCONTINUEC†WRITE�(6,500)>500ƒFORMAT�('�OPEN�&�OUTPUT�TO�EACH�CHANNEL�UNTIL�ALL�ARE�ON')C †DO�600�I=1,8 †OPN(3)�=�1 †OPN(4)�=�I-1†OPN(5)�=�IHEX(10)†CALL�DCOPEN�(ID,OPN)ËqÔcÜ(†OUT(3)�=�IHEX(I)†CALL�DCOOUT�(ID,OUT)C †CALL�DELAYC†STATUS(3)�=�MSK(I)†CALL�DCOSTA�(ID,STATUS)"†IF�(STATUS(3)-MSK(I))�550,600,550550ƒCALL�ERRPR1�(I-1) 600ƒCONTINUEC†WRITE�(6,620)7620ƒFORMAT�('�CLOSE�CHANNELS,�OUTPUTS�SHOULD�TURN�OFF') †CALL�DELAY†CALL�DCOCLS�(ID,CLSE) †CALL�DELAYC†WRITE�(6,750)2750ƒFORMAT�('�TURN�ON�ALL�OUTPUTS,�THEN�TURN�OFF')C †OPN(3)�=�8†K=0†DO�800�I�=�4,18,2 †OPN(I)�=�K†OPN(I+1)�=�IHEX(10)†K�=�K+1 800ƒCONTINUE†CALL�DCOPEN(ID,OPN)†OUT(3)�=�IHEX(9)†CALL�DCOOUT�(ID,OUT)C †CALL�DELAY†OFF(3)�=�IHEX(9)†CALL�DCOOFF(ID,OFF)†CALL�DCOCLS�(ID,CLSE)C†WRITE�(6,950))950ƒFORMAT�('�PULSE�EACH�OUTPUT�IN�TURN')C†DO�1000�I�=�1,8 †OPN(3)�=�1 †OPN(4)�=�I-1†OPN(5)�=�IHEX(10)†CALL�DCOPEN�(ID,OPN) †PULSE(3)�=�1†PULSE(4)�=�I-1 †PULSE(5)�=�0†PULSE(6)�=�500†CALL�DCOPLS�(ID,PULSE)C †CALL�DELAY †CALL�DELAY 1000‚CONTINUE†CALL�DCOCLS(ID,CLSE)C†WRITE�(6,1030)11030‚FORMAT('�TRY�COMMANDS�WIT? H�CHANNELS�CLOSED')C†CALL�DCOCLS(ID,CLSE)†IF�(CLSE(1))�1090,1070,10901070‚WRITE�(6,1080)31080‚FORMAT�('�CALL�CLOSE�AND�CHANNELS�CLOSED--OK') †GO�TO�10951090‚WRITE�(6,1093)#1093‚FORMAT�('�CALL�CLOSE�-�ERROR')C1095‚OUT(3)�=�1†CALL�DCOOUT(ID,OUT)†IF�(OUT(1))�1040,1060,10401040‚WRITE�(6,1050)01050‚FORMAT('�CALL‚OUT‚AND�CHANNELS�CLOSED--OK') †GO�TO�10651060‚WRITE�(6,1063)!1063‚FORMAT�('�CALL�OUT�-�ERROR')C1065‚OFF(3)�=�1†CALL�DCOOFF(ID,OFF)†IF�(OFF(1))�1100,1120,11001100‚WRITE�(6,1110)11110‚FORMAT�('�CALL‚OFF‚AND�CHANNELS�CLOSED--OK') †GO�TO�11251120‚WRITE�(6,1123)!1123‚FORMAT�('�CALL�OFF�-�ERROR')C1125‚STATUS(3)�=1†CALL�DCOSTA(ID,STATUS)†IF�(STATUS(1))�1130,1150,11301130‚WRITE�(6,1140)21140‚FORMAT('�CALL�STATUS�AND�CHANNELS�CLOSED-OK') †GO�TO�11551150‚WRITE�(6,1153)$1153‚FORMAT�('�CALL�STATUS�-�ERROR')C1155‚PULSE(3)�=�1 †PULSE(4)�=�1 †PULSE(5)�=�0†PULSE(6)�=�10†CALL�DCOPLS(ID,PULSE)†IF�(PULSE(1))�1160,1180,11601160‚WRITE�(6,1170)21170‚FORMAT('�CALL�PULSE�AND�CHANNELS�CLOSED--OK') †GO�TO�11851180‚WRITE�(6,1183)#1183‚FORMAT�('�CALL�PULSE�-�ERROR')C1185‚OPN(3)�=�1 †OPN(4)�=�1†OPN(5)�=�IHEX(10)†CALL�DCOPEN(ID,OPN)C†WRITE�(6,1190)01190‚FORMAT('�TRY�CALL�OPEN�AND�ALREADY�OPENED')C †OPN(3)�=�1 †OPN(4)�=�1†OPN(5)�=�IHEX(10)†CALL�DCOPEN(ID,OPN)†IF�(OPN(1))�1200,1220,12001200‚WRITE�(6,1210)21210‚FORMAT('�CALL�OPEN�AND�CHANNELS�ARE�OPEN-OK') †GO�TO�12251220‚WRITE�(6,1222)"1222‚FORMAT�('�CALL�OPEN�-�ERROR')C1225‚WRITE�(6,60)C†WRITE�(6,1300)31300‚FORMAT�('*********�TEST�COMPLETED�**********')C †WRITE�(6,60)CCˆSEE�IF�SECOND�BOARD�TO�TESTC#1350‚IF�(ID�.EQ.�'DCO2')�GO�TO�15001400‚ID�=�'DCO2'†GO�TO�5C 1500‚STOP†ENDééééC:C ********************************************************C†SUBROUTINE�DELAY C–DELAY�APPROXIMATELY�ONE�SECOND†DO�30�J�=�1,100†DO�20�K�=�1,350 20„CONTINUE 30„CONTINUE†RETURN†ENDééé? ééééä C:C ********************************************************C†SUBROUTINE�ERRPR1(I)†WRITE�(6,10)�I#10„FORMAT�('�STATUS�ERROR-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~Þª�%G�jlÞ><Ïü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@~Þª�%G�jlÞ><Ïü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 Hj�N¹(><B3 Ïü| *�N¹,5²fx4><ÏüHjŒHrx4N¹(><ÏüHjŒHrx*F3@%P N¹(~Þª�%G�jlþ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¹(~Þª�%G�jlÿ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 ~Þª�%G�jl´><Ïü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¹(~Þª�%G�jlÿ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ŒVM02�Memory�offset�(on�bus)�-�dummy/‚V2SYSP„=�0ŒVM02�SYSPAR.AG�area�address�-�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‚Configuration�Parameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰,‚MAXSEC„=�10‹Maximum�#�of�secondary�stations#‚DLBR†=�57600ˆData�Link's�Baud�Rate)‚FSSTN…=�1ŒFirst�Secondary�Station�Number&‚SSINC…=�1ŒSecondary�Station�INCrement!‚TXRTRY„=�20‹Transmit�Retry�Count ‚RCRTRY„=�12‹Receive�Retry�Count,‚MXOBF…=�7ŒMaximum�Number�of�Outbound�Frames8‚RCTOV…=�2ŒReceive�Timeout�Value�(1=50�Msec)�(9/9/83�ES)$‚RTRDLY„=�15‹Retry�Delay�(1=50�Msec)%‚TXDLY…=�0ŒTransmit�Delay�(1=50�Msec)/‚PFDLY…=�200ŠPoll�Powered�Off�Delay�(1=50�Msec)8‚PNDLY…=�2ŒPoll�Powered�On�Delay�(1=50�Msec)�(9/7/83�ES)‚TXPDS…=�2Œ#�of�Transmit�Pads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†Buffer�Queue�Configuration�ParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰ ‚NUMBUF„=�100Š#�Buffers�in�queue4‚SZDBUF„=�256ŠSize�of�data�block�contained�in�buffer-‚FQULWM„=�25‹Free�Queue�User's�Low�Water�Mark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&C .SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************4‚MSG‰*�SYSTEM�GENERATION�(SYSGEN)�COMMAND�FILE�FOR�*'‚MSG‰*„VM02�BOARD�IN�EXORMACS�CHASSIS—*@‚MSG‰***********************************************************‚MSG‰@‚MSG‰***********************************************************!‚MSG‰*ŠRMS68K�SYSGEN�PARAMETERS—*@‚MSG‰***********************************************************‚MSG‰‚GST‡=�0ŒNO.�OF�PAGES�IN�GSTb7k?s‚UST‡=�0ŒNO.�OF�PAGES�IN�UST‚UDR‡=�1ŒNO.�OF�PAGES�IN�UDR'‚TRACE…=�10‹NO.�OF�PAGES�IN�TRACE�TABLE(‚IOV‡=�0ŒNO.�OF�PAGES�IN�IO�VECTOR�TABLE*‚PAT‡=�2ŒSIZE�OF�PERIODIC�ACTIVATION�TABLE‚TRCFLAGƒ=�$0000ˆTRACE�FLAGS‚BUGTRACƒ=�$F00F3A‚MMU‡=�0ŒMMU�ADDRESS‚TIMER…=�$F70000†TIMER�ADDR.‚CLOCKFRQ‚=�800ŠCLOCK�FREQUENCY ‚TIMSLICƒ=�2 ‚TIMINTVƒ=�10‚PANEL…=�0ŒFRONT�PANEL�ADDR.0‚MEMEND1ƒ=�$20000‡MAXIMUM�END�OF�ON-BOARD�MEMORY ‚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‰*†Link�Initialization�Task�---�VM02.INET.LOŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰?‚V2G1IR1ƒ=�$1FFE2‡*�Group�2,�IRQ�1�Vector�Number�Address�(Word)?‚V2G1IR2ƒ=�$1FFE4‡*�Group�2,�IRQ�2�Vector�Number�Address�(Word)?‚V2G1IR3ƒ=�$1FFE6‡*�Group�2,�IRQ�3�Vector�Number�Address�(Word)?‚V2G1IR4ƒ=�$1FFE8‡*�Group�2,�IRQ�4�Vector�Number�Address�(Word)?‚V2G1IR5ƒ=�$1FFEA‡*�Group�2,�IRQ�5�Vector�Number�Address�(Word)?‚V2G1IR6ƒ=�$1FFEC‡*�Group�2,�IRQ�6�Vector�Number�Address�(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„=�*ŒINETV2�Load�Address‚SUBSˆGEN.INETV2.LG‚STATE…=�'READ'‚PRIORITY‚=�$C8‚LINKˆGEN.INETV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚END‰INETV2‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*$‚MSG‰*ŒSTART�OF�SYSTEM�INITIALIZER’*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰ ‚PROCESS…INIT ‚INTSTR„=�*1‚KILVECTƒ=�142ŠKiller�routine�-�unassigned�vector‚SERPTS„=�140ŠSerial�ports-BIOS‚PTMVECTƒ=�28‹PTM-timer‚BCLRV…=�142ŠBCLRV�IRQ�routine%‚FAIL†=�141ŠSYSFAIL-POWERFAIL�routine3‚DPRVAO„=�0ŒDual�ported�RAM�VERSAdos�address�offset‚SWABRT„=�31‹Software�abort2‚IOCVEC4ƒ=�146ŠIRQ�5-I/O�channel�interrupt�level�42‚IOCVEC3ƒ=�145ŠIRQ�4-I/O�channel�interrupt�level�32‚IOCVEC2ƒ=�144ŠIRQ�3-I/O�channel�interrupt�level�22‚IOCVEC1ƒ=�143ŠIRQ�2-I/O�channel�interrupt�level�18‚HOGMODEƒ=�0ŒDon't�keep�VERSAbus�in�block�transfer�mode.4‚PAGESIZE‚=�256ŠSize�in�bytes�of�one�page�of�memory."‚ASN‡=�0ŒNumber�of�address�spaces.)‚LINKLS„=�"&.SYSGEN.TF"�Link�listing�file 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‰*ŠE�N�DƒO�F‚S�Y�S�G�E�N—*@‚MSG‰***********************************************************‚MSG‰*¹*3‚MSG‰*„WE�NOW�HAVE�A�SYSTEM�FILE�CALLEDƒNETV2B.SY‰*‚MSG‰*¹*@‚MSG‰***********************************************************D ééé‚******************‚*�FILE�DMSM.CDƒ*‚******************,‚V2OFF…=�$FC0000†VM02�Memory�offset�(on�bus)+‚V2SYSP„=�$1500ˆVM02�SYSPAR.AG�area�address‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚*‚*‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*:‚MSG‰*†Link�LOADV2�Task�---�LOADV2.LO‚(Boots�VM02�board)�*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.LOADV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚Configuration�Parameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰,‚MAXSEC„=�10‹Maximum�#�of�secondary�stations#‚DLBR†=�57600ˆData�Link's�Baud�Rate)‚FSSTN…=�1ŒFirst�Secondary�Station�Number&‚SSINC…=�1ŒSecondary�Station�INCrement!‚TXRTRY„=�20‹Transmit�Retry�Count ‚RCRTRY„=�12‹Receive�Retry�Count,‚MXOBF…=�7ŒMaximum�Number�of�Outbound�Frames,‚RCTOV…=�8ŒReceive�Timeout�Value�(1=50�Msec)$‚RTRDLY„=�15‹Retry�Delay�(1=50�Msec)%‚TXDLY…=�0ŒTransmit�Delay�(1=50�Msec)/‚PFDLY…=�200ŠPoll�Powered�Off�Delay�(1=50�Msec),‚PNDLY…=�1ŒPoll�Powered�On�Delay�(1=50�Msec)‚TXPDS…=�16‹#�of�Transmit�Pads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*2‚MSG‰*†Network�Services�Configuration�ParametersŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰&‚MAXLNAUƒ=�10‹Maximum�#�of�local�NAU's=‚MAXNAMEƒ=�30‹Maximum�#�of�Network�Names�(if�primary�-�max�in ‚*˜network)/‚MAXCONNƒ=�$20ŠMaximum�#�of�Logical�Connections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†Buffer�Queue�Configuration�ParametersŽ*‚MSG‰*¹*{>„@‚MSG‰***********************************************************‚MSG‰ ‚NUMBUF„=�100Š#�Buffers�in�queue4‚SZDBUF„=�256ŠSize�of�data�block�contained�in�buffer-‚FQULWM„=�25‹Free�Queue�User's�Low�Water�Mark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*-‚MSG‰*†Link�Initialization�Task�---�INET.LO�*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.INET.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚END‰éD éééé‚*******************‚*FILE�=�EMLINK.CD�*‚*******************.‚V2OFF…=�0ŒVM02�Memory�offset�(on�bus)�-�dummy/‚V2SYSP„=�0ŒVM02�SYSPAR.AG�area�address�-�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‚Configuration�Parameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚*;‚*‹The�parameter�MAXSEC�should�be�equal�to�twice�the�number'‚*‹of�HDS400s�that�you�want�configured.‚*+‚MAXSEC„=�2ŒMaximum�#�of�secondary�stations#‚DLBR†=�57600ˆData�Link's�Baud�Rate)‚FSSTN…=�1ŒFirst�Secondary�Station�Number&‚SSINC…=�1ŒSecondary�Station�INCrement!‚TXRTRY„=�20‹Transmit�Retry�Count ‚RCRTRY„=�12‹Receive�Retry�Count,‚MXOBF…=�7ŒMaximum�Number�of�Outbound�Frames,‚RCTOV…=�8ŒReceive�Timeout�Value�(1=50�Msec)$‚RTRDLY„=�15‹Retry�Delay�(1=50�Msec)%‚TXDLY…=�0ŒTransmit�Delay�(1=50�Msec)/‚PFDLY…=�200ŠPoll�Powered�Off�Delay�(1=50�Msec),‚PNDLY…=�1ŒPoll�Powered�On�Delay�(1=50�Msec)‚TXPDS…=�16‹#�of�Transmit�Pads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†Buffer�Queue�Configuration�ParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚NUMBUF„=�50‹#�Buffers�in�queue4‚SZDBUF„=�256ŠSize�of�data�block�contained�in�buffer-‚FQULWM„=�25‹Free�Queue�User's�Low�Water�Mark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************4‚MSG‰*�SYSTEM�GENERATION�(SYSGEN)�COMMAND�FILE�FOR�*'‚MSG‰*„VM02�BOARD�IN�EXORMACS�CHASSIS—*@‚MSG‰***********************************************************‚MSG‰@‚MSG‰***********************************************************!‚MSG‰*ŠRMS68K�SYSGEN�PARAMETERS—*Œ8•@�!@‚MSG‰***********************************************************‚MSG‰‚GST‡=�0ŒNO.�OF�PAGES�IN�GST‚UST‡=�0ŒNO.�OF�PAGES�IN�UST‚UDR‡=�1ŒNO.�OF�PAGES�IN�UDR'‚TRACE…=�10‹NO.�OF�PAGES�IN�TRACE�TABLE(‚IOV‡=�0ŒNO.�OF�PAGES�IN�IO�VECTOR�TABLE*‚PAT‡=�2ŒSIZE�OF�PERIODIC�ACTIVATION�TABLE‚TRCFLAGƒ=�$0000ˆTRACE�FLAGS‚BUGTRACƒ=�$F00F3A‚MMU‡=�0ŒMMU�ADDRESS‚TIMER…=�$F70000†TIMER�ADDR.‚CLOCKFRQ‚=�800ŠCLOCK�FREQUENCY ‚TIMSLICƒ=�2 ‚TIMINTVƒ=�10‚PANEL…=�0ŒFRONT�PANEL�ADDR.0‚MEMEND1ƒ=�$20000‡MAXIMUM�END�OF�ON-BOARD�MEMORY ‚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‰*†Link�Initialization�Task�---�VM02.INET.LOŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰?‚V2G1IR1ƒ=�$1FFE2‡*�Group�2,�IRQ�1�Vector�Number�Address�(Word)?‚V2G1IR2ƒ=�$1FFE4‡*�Group�2,�IRQ�2�Vector�Number�Address�(Word)?‚V2G1IR3ƒ=�$1FFE6‡*�Group�2,�IRQ�3�Vector�Number�Address�(Word)?‚V2G1IR4ƒ=�$1FFE8‡*�Group�2,�IRQ�4�Vector�Number�Address�(Word)?‚V2G1IR5ƒ=�$1FFEA‡*�Group�2,�IRQ�5�Vector�Number�Address�(Word)?‚V2G1IR6ƒ=�$1FFEC‡*�Group�2,�IRQ�6�Vector�Number�Address�(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„=�*ŒINETV2�Load�Address‚SUBSˆGEN.INETV2.LG‚STATE…=�'READ'‚PRIORITY‚=�$C8‚LINKˆGEN.INETV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A ‚END‰INETV2‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*$‚MSG‰*ŒSTART�OF�SYSTEM�INITIALIZER’*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰ ‚PROCESS…INIT ‚INTSTR„=�*1‚KILVECTƒ=�142ŠKiller�routine�-�unassigned�vector‚SERPTS„=�140ŠSerial�ports-BIOS‚PTMVECTƒ=�28‹PTM-timer‚BCLRV…=�142ŠBCLRV�IRQ�routine%‚FAIL†=�141ŠSYSFAIL-POWERFAIL�routine3‚DPRVAO„=�0ŒDual�ported�RAM�VERSAdos�address�offset‚SWABRT„=�31‹Software�abort2‚IOCVEC4ƒ=�146ŠIRQ�5-I/O�channel�interrupt�level�42‚IOCVEC3ƒ=�145ŠIRQ�4-I/O�channel�interrupt�level�32‚IOCVEC2ƒ=�144ŠIRQ�3-I/O�channel�interrupt�level�22‚IOCVEC1ƒ=�143ŠIRQ�2-I/O�channel�interrupt�level�18‚HOGMODEƒ=�0ŒDon't�keep�VERSAbus�in�block�transfer�mode.3‚PAGESIZE‚=�256ŠSize�in�bytes�of�one�page�of�memory!‚ASN‡=�0ŒNumber�of�address�spaces)‚LINKLS„=�"&.SYSGEN.TF"�Link�listing�file 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‰*ŠE�N�DƒO�F‚S�Y�S�G�E�N—*@‚MSG‰***********************************************************‚MSG‰*¹*3‚MSG‰*„WE�NOW�HAVE�A�SYSTEM�FILE�CALLEDƒNETV2B.SY‰*‚MSG‰*¹*@‚MSG‰***********************************************************ééé‚*********************‚*FILE�=�LINKALL.CD‚*‚*********************‚SYSTYPE‚=�"LINKALL"‚*ééE éééé饂*********************‚*FILE�=�LINKMAIN.CD�*‚*********************‚SYSTYPE‚=�"LINKMAIN"‚*éééééé鮂*********************‚*FILE�=�LINKONLY.CD�*‚*********************‚SYSTYPE‚=�"LINKONLY"‚*F ééééééé·‚******************‚*�FILE�NETEXG.CD�*‚******************,‚V2OFF…=�$FC0000†VM02�Memory�offset�(on�bus)+‚V2SYSP„=�$1500ˆVM02�SYSPAR.AG�area�address‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚*‚*‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*:‚MSG‰*†Link�LOADV2�Task�---�LOADV2.LO‚(Boots�VM02�board)�*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.LOADV2.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚Configuration�Parameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚*;‚*‹The�parameter�MAXSEC�should�be�equal�to�twice�the�number'‚*‹of�HDS400s�that�you�want�configured.‚*+‚MAXSEC„=�2ŒMaximum�#�of�secondary�stations#‚DLBR†=�57600ˆData�Link's�Baud�Rate)‚FSSTN…=�1ŒFirst�Secondary�Station�Number&‚SSINC…=�1ŒSecondary�Station�INCrement!‚TXRTRY„=�20‹Transmit�Retry�Count‚RCRTRY„=�4ŒReceive�Retry�Count,‚MXOBF…=�7ŒMaximum�Number�of�Outbound�Frames,‚RCTOV…=�8ŒReceive�Timeout�Value�(1=50�Msec)$‚RTRDLY„=�15‹Retry�Delay�(1=50�Msec)%‚TXDLY…=�0ŒTransmit�Delay�(1=50�Msec)/‚PFDLY…=�200ŠPoll�Powered�Off�Delay�(1=50�Msec),‚PNDLY…=�1ŒPoll�Powered�On�Delay�(1=50�Msec)‚TXPDS…=�2Œ#�of�Transmit�Pads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*2‚MSG‰*†Network�Services�Configuration�ParametersŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰&‚MAXLNAUƒ=�10‹Maximum�#�of�local�NAU's=‚MAXNAMEƒ=�30‹Maximum�#�of�Network�Names�(if�primary�-�max�in ‚*˜network).‚MAXCONNƒ=�20‹Maximum�#�of�Logical�Connections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰F À>É@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†Buffer�Queue�Configuration�ParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚NUMBUF„=�50‹#�Buffers�in�queue4‚SZDBUF„=�256ŠSize�of�data�block�contained�in�buffer,‚FQULWM„=�7ŒFree�Queue�User's�Low�Water�Mark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*-‚MSG‰*†Link�Initialization�Task�---�INET.LO�*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‚LINKˆGEN.INET.LG ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚END‰ééééé‚********************‚*�FILE�NETVME10.CD�*‚********************‚MSG‰‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*&‚MSG‰*†SDLC‚Configuration�Parameters•*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰+‚MAXSEC„=�2ŒMaximum�#�of�secondary�stations#‚DLBR†=�57600ˆData�Link's�Baud�Rate)‚FSSTN…=�1ŒFirst�Secondary�Station�Number&‚SSINC…=�1ŒSecondary�Station�INCrement!‚TXRTRY„=�20‹Transmit�Retry�Count‚RCRTRY„=�4ŒReceive�Retry�Count,‚MXOBF…=�7ŒMaximum�Number�of�Outbound�Frames,‚RCTOV…=�8ŒReceive�Timeout�Value�(1=50�Msec)$‚RTRDLY„=�15‹Retry�Delay�(1=50�Msec)%‚TXDLY…=�0ŒTransmit�Delay�(1=50�Msec)/‚PFDLY…=�200ŠPoll�Powered�Off�Delay�(1=50�Msec),‚PNDLY…=�1ŒPoll�Powered�On�Delay�(1=50�Msec)‚TXPDS…=�2Œ#�of�Transmit�Pads‚SUBSˆGEN.IDLCP.AG*‚ASM‰GEN.IDLCP.AG,GEN.IDLCP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*2‚MSG‰*†Network�Services�Configuration�ParametersŠ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰&‚MAXLNAUƒ=�10‹Maximum�#�of�local�NAU's=‚MAXNAMEƒ=�30‹Maximum�#�of�Network�Names�(if�primary�-�max�in ‚*˜network).‚MAXCONNƒ=�20‹Maximum�#�of�Logical�Connections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰@‚MSG‰***********************************************************‚MSG‰*¹*.‚MSG‰*†Buffer�Queue�Configuration�ParametersŽ*‚MSG‰*¹*@‚MSG‰***********************************************************‚MSG‰‚NUMBUF„=�50‹#�Buffers�in�queue4‚SZDBUF„=�256ŠSize�of�data�block�contained�in�buffer,‚FQULWM„=�7ŒFree�Queue�User's�Low�Water�Mark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQG .AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG@‚MSG‰***********************************************************‚MSG‰*¹*-‚MSG‰*†Link�Initialization�Task�---�INET.LO�*‚MSG‰*¹*Ñ;Ú@‚MSG‰***********************************************************‚MSG#‚IOCVEC1ƒ=�$41Š*�IRQ1�Vector�Number#‚IOCVEC2ƒ=�$43Š*�IRQ2�Vector�Number#‚IOCVEC3ƒ=�$44Š*�IRQ3�Vector�Number#‚IOCVEC4ƒ=�$45Š*�IRQ4�Vector�NumberD‚VEC7201ƒ=�\IOCVEC4…*�NEC7201�is�strapped�for�the�IRQ4�Vector�on�the ‚*˜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†VM02�Memory�offset�(on�bus)+‚V2SYSP„=�$1500ˆVM02�SYSPAR.AG�area�address‚SUBSˆGEN.ILOADP.AG,‚ASM‰GEN.ILOADP.AG,GEN.ILOADP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;AB‚MSG‰*************************************************************‚MSG‰*»*&‚MSG‰*†SDLC‚Configuration�Parameters—*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰+‚MAXSEC„=�3ŒMaximum�#�of�secondary�stations#‚DLBR†=�57600ˆData�Link's�Baud�Rate)‚FSSTN…=�1ŒFirst�Secondary�Station�Number&‚SSINC…=�1ŒSecondary�Station�INCrement ‚TXRTRY„=�8ŒTransmit�Retry�Count‚RCRTRY„=�4ŒReceive�Retry�Count,‚MXOBF…=�7ŒMaximum�Number�of�Outbound�Frames,‚RCTOV…=�4ŒReceive�Timeout�Value�(1=50�Msec)$‚RTRDLY„=�15‹Retry�Delay�(1=50�Msec)%‚TXDLY…=�0ŒTransmit�Delay�(1=50�Msec)/‚PFDLY…=�200ŠPoll�Powered�Off�Delay�(1=50�Msec),‚PNDLY…=�1ŒPoll�Powered�On�Delay�(1=50�Msec)‚TXPDS…=�2Œ#�of�Transmit�Pads‚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‰*†Network�Services�Configuration�ParametersŒ*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰&‚MAXLNAUƒ=�20‹Maximum�#�of�local�NAU's=‚MAXNAMEƒ=�30‹Maximum�#�of�Network�Names�(if�primary�-�max�in ‚*˜network).‚MAXCONNƒ=�20‹Maximum�#�of�Logical�Connections‚SUBSˆGEN.INETP.AG*‚ASM‰GEN.INETP.AG,GEN.INETP.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰B‚MSG‰*************************************************************‚MSG‰*»*.‚MSG‰*†Buffer�Queue�Configuration�Parameters�*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰‚NUMBUF„=�50‹#�Buffers�in�queue4‚SZDBUF„=�256ŠSize�of�data�block�contained�in�buffer,‚FQULWM„=�7ŒFree�Queue�User's�Low�Water�Mark‚SUBSˆGEN.IBUFQ.AG*‚ASM‰GEN.IBUFQ.AG,GEN.IBUFQ.RO,&.SYSGEN.TF ‚=COPY‡&.SYSGEN.TF,&.SYSASM.LS;A‚MSG‰ë:ôB‚MSG‰*************************************************************‚MSG‰*»*-‚MSG‰*†Link�Initialization�Task�---�INET.LO‘*‚MSG‰*»*B‚MSG‰*************************************************************‚MSG‰?‚V2G1IR1ƒ=�$1FFE2‡*�Group�2,�IRQ�1�Vector�Number�Address�(Word)?‚V2G1IR2ƒ=�$1FFE4‡*�Group�2,�IRQ�2�Vector�Number�Address�(Word)?‚V2G1IR3ƒ=�$1FFE6‡*�Group�2,�IRQ�3�Vector�Number�Address�(Word)?‚V2G1IR4ƒ=�$1FFE8‡*�Group�2,�IRQ�4�Vector�Number�Address�(Word)?‚V2G1IR5ƒ=�$1FFEA‡*�Group�2,�IRQ�5�Vector�Number�Address�(Word)?‚V2G1IR6ƒ=�$1FFEC‡*�Group�2,�IRQ�6�Vector�Number�Address�(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*‚********************‚*�Old�file�name�was�SYSPARSE‚*ƒRuns�on�a�VM02�system�with�NETBUG�(firmware�to�handle�downloading)@‚***************************************************************8‚*�SYSPAR�parameters�-�VM02�system�acting�as�SDLC�link‰*@‚***************************************************************3‚RMS0LO„=�$1700ˆRMS�boot�header�(Seg�0�low�address)‚STACK…=�$1500L‚STARTRMS‚=�\RMS0LO+$100‚Beginning�of�RMS�code�-�(One�sector�above�boot�hdr)‚=DELˆ&.SYSPAR.RO(‚=COPY‡9999.C13O15.SYSPAR.RO,&.SYSPAR.RO H ééééé ‚*******************‚*FILE�=�SPAR400.CD*‚*******************‚*�Old�file�name�was�SYSPAR#‚*ƒRuns�on�a�normal�EXORmacs�system@‚***************************************************************(‚*�SYSPAR�parameters�-�EXORmacs�system™*@‚***************************************************************‚=DELˆ&.SYSPAR.RO&‚=COPY‡9999.C4O9.SYSPAR.RO,&.SYSPAR.RO éééééé  ‚*******************‚*FILE�=�SPAR800.CD*‚*******************‚*�Old�file�name�was�SYSPARV4‚*ƒRuns�on�a�VM02�system�without�the�NETBUG�firmware@‚***************************************************************>‚*�SYSPAR�parameters�-�VM02�system�actI ing�as�phoney�EXORmacsƒ*@‚***************************************************************‚=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�-�Inhibit�SBARG�echoing�of�commands�read�from�chain�file.3=/*‡K�-�Inhibit�translation�of�lower�to�upper�case.,=/*‡N�-�Inhibit�echo�of�chain�file�commands.A=/*‡O�-�Overrides�chain�file�abort�when�utility�error�terminates.=/*=/*==/*�Insure�two�arguments.‚Second�argument�defaults�to�'#NULL'=/*=/RX=\0 =/IF RX = 0 ƒ=ARG�NOARGƒ=/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=/*ƒIf�not�a�valid�mnemonic,�put�out�help�message.=/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ƒ=/*‘***�HELP�MESSAGE�***ƒ=/*7ƒ=/*�No�argument�or�an�invalid�argument�was�specified�-=ƒ=/*ƒThis�chain�file�must�be�restarted�with�a�valid�argument.3ƒ=/*ƒA�description�of�the�calling�sequence�follows.<ƒ=/*ƒType��to�continue�after�a�frame�has�been�displayed.ƒ=/*ƒ=/*�Calling�sequence:ƒ=/*ƒ=SYSGEN.CF�arg1,arg2ƒ=/*ƒ=/*†arg1†=�Mnemonicƒ=/*†arg2†=�Output�file/deviceDƒ=/*ƒArg1�is�optional.‚If�not�specified,�a�help�message�will�appear.Aƒ=/*ƒArg2�will�typically�be�'#NULL'�or�'#PR'�-�defaults�to�#NULL.ƒ=/&ƒ=/*1ƒ=/*�SYSGEN.CF�will�perform�the�sysgen�associated!ƒ=/*„with�the�specified�mnemonic.ƒ=/*2ƒ=/*�The�mnemonic�(arg1)�is�of�the�following�form:I  [ ). 1, 9/ A4 I@ QI YH a4ƒ=/*„system/processor�mode/output�type/qualificationƒ=/*'ƒ=/*�Example:‚arg1=�EXOR/MULTI/UTIL/HDSƒ=/*5ƒ=/*�This�would�gen�just�the�utilities�(LOADV2.LO�and)ƒ=/*�INET.LO�to�run�on�an�EXORmacs�system/ƒ=/*�in�the�multi-processor�mode�(VM02�board�in5ƒ=/*�the�same�chassis�to�perform�link).‚The�qualifier6ƒ=/*�of�test�would�distinguish�it�as�a�particular�test6ƒ=/*�configuration.�The�system�would�be�for�an�HDS400.ƒ=/&ƒ=/*ƒ=/*�Legal�Mnemonics:ƒ=/*†"GMADPRI"4ƒ=/*ŠPrepare�the�SDLC�GMAD�primary�station�software.:ƒ=/*ŠFour�user-initiated�steps�are�required.‚One,�run�this;ƒ=/*Šchain�file�with�"GMADPRI"�option.‚It�will�generate�the9ƒ=/*Šproper�SDLC�object�file�for�the�GMAD�primary�station3ƒ=/*Šenvironment.‚Two,�run�the�SYSGEN.CF�chain�file/ƒ=/*Šwith�option�EXOR/MULTI/LINK/DMS�which�will;ƒ=/*Šcreate�the�VM02�load�image�file�NETV2B.SY.‚Three,�copy<ƒ=/*Šthis�load�image�file�to�user�0,�NO�CATALOG�NAME,�of�the=ƒ=/*ŠGMAD�system.‚Four,�re-IPL�the�GMAD�system�(loads�the�new:ƒ=/*ŠNETV2B.SY�module�into�the�VM02�and�begins�execution).ƒ=/*�Station�typeˆ=�primaryƒ=/*�MPU�typeŒ=�68000ƒ=/*�Resident�board�type�=�VM02ƒ=/&ƒ=/*†"GMADSEC";ƒ=/*ŠPrepare�the�SDLC�GMAD�secondary�station�software.‚Four;ƒ=/*Šuser-initiated�steps�are�required.‚One,�run�this�chain9ƒ=/*Šfile�with�the�"GMADSEC"�option.‚It�will�generate�the;ƒ=/*Šproper�SDLC�object�file�for�the�GMAD�secondary�station6ƒ=/*Šenvironment.‚Two,�copy�the�SDLCSEC.RO�object�file=ƒ=/*Š(which�this�chain�file�just�created)�to�the�GMAD�system.=ƒ=/*ŠThree,�run�the�GEN.CF�chain�file�on�that�system�with�the=ƒ=/*Šargument�PSDL�creating�the�secondary�station�load�module;ƒ=/*ŠPSDL.PSDL.SY�containing�the�new�SDLC�driver.‚Four,�re-;ƒ=/*Šset�the�secondary�station(s)�causing�a�download�of�the"ƒ=/*Šnew�driver�into�each�of�them.ƒ=/*�Station�typeˆ=�secondaryƒ=/*�MPU�typeŒ=�68000ƒ=/*�Resident�board�type�=�VM02ƒ=/&ƒ=/*†"HDS4PRI"7ƒ=/*ŠPrepare�the�SDLC�HDS-400�primary�station�software.:ƒ=/*ŠFour�user-initiated�steps�are�required.‚One,�run�this;ƒ=/*Šchain�file�with�"HDS4PRI"�option.‚It�will�generate�the<ƒ=/*Šproper�SDLC�object�file�for�the�HDS-400�primary�station3ƒ=/*Šenvironment.‚Two,�run�the�SYSGEN.CF�chain�file/ƒ=/*Šwith�option�EXOR/MULTI/LINK/HDS�which�will;ƒ=/*Šcreate�the�VM02�load�image�file�NETV2B.SY.‚Three,�copy<ƒ=/*Šthis�load�image�file�to�user�0,�NO�CATALOG�NAME,�of�the=ƒ=/*ŠHDS-400�hosting�system.‚Four,�re-IPL�the�HDS-400�hosting=ƒ=/*Šsystem�(loads�the�new�NETV2B.SY�module�into�the�VM02�andƒ=/*Šbegins�execution).ƒ=/*�Station�typeˆ=�primaryƒ=/*�MPU�typeŒ=�68000ƒ=/*�Resident�board�type�=�VM02ƒ=/&ƒ=/*†"HDS4SEC"9ƒ=/*ŠPrepare�the�SDLC�HDS-400�secondary�station�software.9ƒ=/*ŠTwo�user-initiated�steps�are�required.‚One,�run�this:ƒ=/*Šchain�file�which�will�generate�the�proper�SDLC�object8ƒ=/*Šfile�for�the�HDS-400�secondary�station�environment.9ƒ=/*ŠTwo,�incorporate�the�new�SDLC�object�module�into�the1ƒ=/*ŠHDS-400�system.�(See�HDS-400�documentation).ƒ=/*�Station�typeˆ=�secondaryƒ=/*�MPU�typeŒ=�68000ƒ=/*�Resident�board�type�=�VM02ƒ=/&ƒ=/*†"VME10PRI"6ƒ=/*ŠPrepare�the�SDLC�VME/10�primary�station�software.:ƒ=/*ŠFour�user-initiated�steps�are�required.‚One,�run�this:ƒ=/*Šchain�file�which�will�generate�the�proper�SDLC�object:ƒ=/*Šfile�for�the�VME/10�primary�station�environment.‚Two,?ƒ=/*Šrun�the�SYSGEN.CF�chain�file�with�the�"VME10/LINK"�option.;ƒ=/*ŠThis�will�generate�the�VMES10.INET.LO�module�needed�to?ƒ=/*Šinitiate�newwork�services/SDLC.‚Three,�move�VMES10.INET.LO9ƒ=/*Što�the�target�VMES10�system.‚Four,�reboot�the�VMES10(ƒ=/*Šsystem�to�execute�the�new�software.ƒ=/*�Station�typeˆ=�primaryƒ=/*�MPU�typeŒ=�68010"ƒ=/*�Resident�board�type�=�MVME400ƒ=/&ƒ=/*†"EXOR/MULTI/UTIL/J DMS"Aƒ=/*ŠRuns�on�an�EXORmacs�system�as�primary�station.‚As�of�1-11-835ƒ=/*Šit�contained�the�version�of�NWCT�which�containedƒ=/*Šupload�logic.;ƒ=/*ŠThe�system�is�assumed�to�have�a�VM02�board�in�the�same>ƒ=/*Šchassis�to�perform�the�SDLC�link.‚This�sysgen�will�run�onƒ=/*Ša�GMAD�DMS�system:<ƒ=/*ŒLOADV2.LOƒ-�Loads�the�VM02�with�the�SDLC�link�software.;ƒ=/*ŒINET.LO…-�Initializes�network�services�on�the�EXORmacs ƒ=/*œboard.ƒ=/*ƒ=/&ƒ=/*†"EXOR/MULTI/LINK/DMS">ƒ=/*‹Runs�on�an�EXORmacs�system�on�the�on-board�VM02.‚Contains<ƒ=/*‹the‚SDLC�link�software.‚The�sysgen�would�be�for�an�GMAD8ƒ=/*‹DMS.�This�option�would�produce�the�following�files:5ƒ=/*�NETV2B.SY‚-�Boot�file�for�the�on-board�VM02�thatƒ=/*�handles�the�SDLC�link.ƒ=/&ƒ=/*†"EXOR/SINGLE/UTIL/NOLINK"<ƒ=/*ŠRuns�in�an�EXORmacs�system�with�no�SDLC�link.�Tasks�can=ƒ=/*Šcommunicate�with�each�other�via�network�services�request;ƒ=/*Šhowever.‚This�option�will�produce�the�following�files:1ƒ=/*ŒINET.LO‡-�Initialization�utility�to�bring�upƒ=/*žnetwork�services.ƒ=/&ƒ=/*†"VM02/SINGLE/UTIL/NOLINK"8ƒ=/*ŠRuns�in�an�VM02�system�with�no�SDLC�link.�Tasks�can=ƒ=/*Šcommunicate�with�each�other�via�network�services�request;ƒ=/*Šhowever.‚This�option�will�produce�the�following�files:1ƒ=/*ŒINET.LO‡-�Initialization�utility�to�bring�upƒ=/*žnetwork�services.ƒ=/*ƒ=/&ƒ=/*†"VME10/LINK"4ƒ=/*ŠRuns�in�a�VME/10�system�as�the�primary�station.;ƒ=/*�VMES10.INET.LO�-�Load�Module�which�starts�and�runs�the+ƒ=/*žNTS�and�SDLC�primary�station�software.ƒ=/*ƒ=/&ƒ=/*†"EXOR/MULTI/UTIL/HDS"3ƒ=/*ŠRuns�on�an�EXORmacs�system�as�primary�station.;ƒ=/*ŠThe�system�is�assumed�to�have�a�VM02�board�in�the�same>ƒ=/*Šchassis�to�perform�the�SDLC�link.‚The�sysgen�would�be�for>ƒ=/*Šan�HDS400.‚This�option�would�produce�the�following�files:<ƒ=/*ŒLOADV2.LOƒ-�Loads�the�VM02�with�the�SDLC�link�software.;ƒ=/*ŒINET.LO…-�Initializes�network�services�on�the�EXORmacs ƒ=/*œboard.>ƒ=/*ŠNote�that�the�parameter�'MAXSEC'�that�appears�in�the�file9ƒ=/*ŠNETEXG.CD�should�be�set�equal�to�twice�the�number�of-ƒ=/*ŠHDS400�systems�that�you�want�configured.=ƒ=/*ŠThe�EXORmacs�sysgen�command�file�9998.EXORMACS.SYSCMD.CD=ƒ=/*Šshould�have�'NOTNT'�set�equal�to�5�in�order�to�configureƒ=/*Šfor�HDS400.ƒ=/&ƒ=/*†"EXOR/MULTI/LINK/HDS">ƒ=/*ŠRuns�on�an�EXORmacs�system�on�the�on-board�VM02.‚Contains?ƒ=/*Šthe‚SDLC�link�software.‚The�sysgen�would�be�for�an�HDS400.3ƒ=/*ŠThis�option�would�produce�the�following�files.5ƒ=/*ŒNETV2B.SY‚-�Boot�file�for�the�on-board�VM02�thatƒ=/*�handles�the�SDLC�link.>ƒ=/*ŠNote�that�the�parameter�'MAXSEC'�that�appears�in�the�file9ƒ=/*ŠEMLINK.CD�should�be�set�equal�to�twice�the�number�of-ƒ=/*ŠHDS400�systems�that�you�want�configured.=ƒ=/*ŠThe�EXORmacs�sysgen�command�file�9998.EXORMACS.SYSCMD.CD=ƒ=/*Šshould�have�'NOTNT'�set�equal�to�5�in�order�to�configureƒ=/*Šfor�HDS400.ƒ=/&ƒ=NOARGƒ=@END=/ENDIF=/*E=/* There are four possible flavors of SYSPAR depending on the systemC=/*ƒwe�are�running�on.‚An�appropriate�version�of�a�SPARxxxx.CD�fileC=/*ƒis�merged�into�the�sysgen�command�file�prior�to�the�sysgen.‚TheE=/*ƒfilename�depends�on�the�location�of�CRASHSAV�in�the�system�we�are1=/*ƒperforming�the�sysgen�for.‚The�filenames�are:=/*<=/*Œ&.SPAR400.CDƒ-�Runs�and�an�EXORmacs�board�in�an�EXORmacs=/*›chassis.‚CRASHSAV�at�$400.=/*8=/*Œ&.SPAR1300.CD‚-�Runs�on�a�VM02�board�with�the�NETbug+=/*›(download)�firmware.‚CRASHSAV�at�$1300.=/*:=/*Œ&.SPAR800.CDƒ-�Runs�on�a�VM02�board�without�the�NETbug*=/*›(download)�firmware.‚CRASHSAV�at�$800.=/*=/*=/*F=/*�There�are�two�possibilities�for�station�type.‚The�appropriate�fileC=/*ƒis�merged�in�to�the�SYSGEN�command�file�prior�to�performing�the=/*ƒsysgen.‚The�filenames�are:=/*,=/*Œ&.PRIMARY.CDƒ-�Runs�on�a�primary�system.=/*-=/*Œ&.SECOND.CD„-�Runs�on�a�secondary�system.=/*=/*I=/*�There�are�four�possible�link�options�as�explained�below.‚A�particularF=/*ƒJ option�is�selected�by�merging�the�a�file�with�the�same�name�as�theF=/*ƒoption�and�extension�of�'CD'�into�the�sysgen�command�file�prior�to=/*ƒthe�sysgen.=/*:=/*ŒLINKMAIN�-‚Main�board�in�a�multi-processor�mode.‚Other#=/*šboard�in�chassis�performs�link.2=/*ŒLINKONLY�-‚Link�board�in�multi-processor�mode.<=/*ŒLINKALL‚-‚VM�board�and�VME/10�system�in�single�processor!=/*˜mode�handling�their�own�link.>=/*ŒNOLINKƒ-‚Network�services�with�no�link�to�another�station.=/*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=/*ŠBoot�file�NETV2B.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=/*!=/*‚Load�module�file�explanation:=/*‡&.LOADV2.LO==/*‹Code�which�runs�on�an�EXORmacs�system�and�loads�NETV2B.SY1=/*‹into�a�VM02�which�is�in�the�EXORmacs�chassis.=/*‡xx.INET.LO;=/*‹Task�which�initialized�network�services.‚May�be�part�of>=/*‹a�boot�file�(NETV2B.SY)�which�is�downloaded�to�a�secondary!=/*‹system�or�a�stand�alone�task.=/*‡&.NETV2B.SY9=/*‹File�which�is�downloaded�to�a�remote�system.‚Includes4=/*‹RMS�and�network�initialization�task�(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.<=/*ƒInstructions�for�use�appear�in�the�subroutine�chainfile.9=/*ƒLegal�nmenonics�are:‚"GMADPRI"‚-�GMAD�primary�system.&=/*™"GMADSEC"‚-�GMAD�secondary�system.&=/*™"HDS4PRI"‚-�HDS400�primary�system.(=/*™"HDS4SEC"‚-�HDS400�secondary�system.=/*™"VME10PRI"�-�VME/10�system=/IFEQ "GMADPRI"\1ƒ=SYSGEN�SDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF(ƒ=COPY�SDLC.GMADPRI.RO,SDLC.SDLCPRI.RO;YMƒ=/*�SDLC.GMADPRI.RO�is�now�ready�for�use�as�the�GMAD�primary�station�driver.)ƒ=/*�SDLC.SDLCPRI.RO�is�a�duplicate�copy.=/ENDIF=/IFEQ "GMADSEC"\1ƒ=SYSGEN�SDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF(ƒ=COPY�SDLC.GMADSEC.RO,SDLC.SDLCSEC.RO;YJƒ=/*�GMADSEC.RO�is�now�ready�for�use�as�the�GMAD�secondary�station�driver.$ƒ=/*�SDLCSEC.RO�is�a�duplicate�copy.=/ENDIF=/IFEQ "HDS4PRI"\1ƒ=SYSGEN�SDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF(ƒ=COPY�SDLC.HDS4PRI.RO,SDLC.SDLCPRI.RO;YHƒ=/*�SDLC.HDS4PRI.RO�is�now�ready�for�use�as�the�HDS-400�primary�station1ƒ=/*�driver.‚SDLC.SDLCPRI.RO�is�a�duplicate�copy.=/ENDIF=/IFEQ "HDS4SEC"\1ƒ=SYSGEN�SDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF(ƒ=COPY�SDLC.HDS4SEC.RO,SDLC.SDLCPRI.RO;YGƒ=/*�SDLC.HDS4SEC.RO�is�now�ready�for�use�as�the�HDS-400�2ndary�station1ƒ=/*�driver.‚SDLC.SDLCPRI.RO�is�a�duplicate�copy.=/ENDIF=/IFEQ "VME10PRI"\1ƒ=SYSGEN�SDLC.SYSCMD.CD,,&.S.LSƒ=/RX=1ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIFEƒ=/*�SDLC.VME10.RO�is�now�ready�for�use�as�the�VME/10�primary�station=/ENDIFF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "EXOR/MULTI/UTIL/DMS"\1ƒ=OPT�-N(ƒ=COPY�SDLC.GMADPRI.RO,SDLC.SDLCPRI.RO;YIƒ=SYSGEN�&.SPAR400.CD/&.PRIMARY.CD/&.LINKMAIN.CD/&.DMSM.CD,/&.B.SY,&.S.LSƒ=/RX=1ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF-ƒ=/*�Created�files�are:‚&.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ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF#ƒ=/*�Created�files�are:�&.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ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF$ƒ=/*�Created�files�are:�&.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ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF$ƒ=/*�Created�files�are:�&.INETNOL.LOƒ=OPT�N=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "VME10/LINK"\1ƒ=OPT�-N?ƒ=SYSGEN�&.PRIMARY.CD/&.LINKALL.CD/&.NETVME10.CD,/&.B.SY,&.S.LSƒ=/RX=1ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF&ƒ=/*�Created�files�are:‚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ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF9ƒ=/*�Created�files�are:‚&.LOADV2.LO,&.INET.LO,&.NETV2B.SY=/ENDIF=OPT NF=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=/IFEQ "EXOR/MULTI/LINK/HDS"\1ƒ=OPT�-N(ƒ=COPY�SDLC.HDS4PRI.RO,SDLC.SDLCPRI.RO;YO =SYSGEN &.SPAR1300.CD/&.PRIMARY.CD/&.LINKONLY.CD/&.EMLINK.CD,/NETV2B.SY,&.S.LSƒ=/RX=1ƒ=/IF�RD<$C000†=/R?†=/*�Errors�in�SYSGEN†=@ENDƒ=/ENDIF#ƒ=/*�Created�files�are:�&.NETV2B.SY=/ENDIF=/*F=/*-------------------------------------------------------------------F=/*-------------------------------------------------------------------=OPT -N =/IF RX=1ƒ=/*,ƒ=/*�Copy�listing�file�to�output�file/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"‡=/*�Listing�has�been�routed�to�\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ïB�B¨B¨B¨ "_FßNuRi fÿý© gÿýFïB/ |ÿÿÿÿ"_FßNua@×Ns@çB/BgB§JAoÿý`aÿNf| —.ˆRoQÉÿê| _2n |ÿÿÿÿFßNua@×Ns@ç/ ±ügÿý"x JB�Fï|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( B�i|$iJ©fEé#H$ˆBiF×a¢| |ÿÿÿÿFßNua@×Ns@ç gÿý"x JB�F×|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, @Ñø FJ�fB© Ðfÿý#P © gÿýF×B�Fß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åˆÑðN�Jg,@ þ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îÎ" ’‰R�aÐ|ÿÿ`üÔ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€B�Iúä ,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ßX�Aú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:¦ÂüJ�B-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ßX�pÿ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·B�a¹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 éééééééééééééééé