IMD 1.17: 11/11/2014 14:47:17 82VKXBVERDOS C* VERSADOS/RMS68K OBJECT 4.4 SN=48634 13 OF 22  BT13\82VKXBVERDOS 0420¿?-ŠMOVE.B�D0,CT1PL(A1)‡Give�the�chip�the�least�significant�part.3ŠLSR„#8,D0ŽGive�the�chip�the�most‚significant�part.ŠMOVE.B�D0,CT1PM(A1)‡* **ˆNow�start�timer�ticking*'‰MOVE.B�#C1EN,MCCR(A1)ˆENABLE�COUNTER�1(‰MOVE.B�#C1SR,C1CSR(A1)‡ENABLE�INTERRUPT.‰ADD.L‚#6,A7‘REMOVE�'BE'�AND�BUS�ERROR�ADDRESS !ŠRESTORE�D0/A1�Restore�registers.‰RTSšBACK�TO�INIT***;TIMERBE‚MOVE.L‚#CRASHSAV,PTMADDR‚USE�DUMP�POINTER�FOR�TIMER!ŠRESTORE�D0/A1�Restore�registers.‰RTS˜BACK�TO�INIT ***‰PAGE ‰XDEF„INITIO ‰SECTIONƒ8.**********************************************,*ƒValues�to�put�in�VM04�control�registers.�*.************************************************ˆMaster�Interrupt�Control�Reg* INTCN„SET‡$00 $INTCN„SET‡0<<0+INTCNŠ0�=�Clear�reset*¦1�=�Software�reset3INTCN„SET‡1<<1+INTCNŠEnable�right�justified�address1INTCN„SET‡0<<2+INTCNŠTimer�vector�includes�status *¦disabled2INTCN„SET‡0<<3+INTCNŠPort�B�vector�includes�status *¦disabled2INTCN„SET‡0<<4+INTCNŠPort�A�Vector�includes�status *¦disabled6INTCN„SET‡1<<5+INTCNŠ1�=�no�int.�vector�during�an�IACK*¦0�=�output�the�int.�vector6INTCN„SET‡0<<6+INTCNŠ1�=�disable�int.�from�lower�chain*¦0�=�operate�normally,INTCN„SET‡1<<7+INTCNŠEnable�master�interrupt**‚Control�reg�0*-ICNT0„SET…$00�VERSAbus�int.�vector�number�reg*£These�bits�are�enabled�during *£IACK�cycles**‚Control�reg�1*ICNT1„SET…$00�Initialize�it'ICNT1„SET…0<<0+ICNT1‰NA�(not�available)ICNT1„SET…0<<1+ICNT1‰NAICNT1„SET…0<<2+ICNT1‰NA2ICNT1„SET…0<<3+ICNT1‰Disable�VERSAbus�system�reset7ICNT1„SET…1<<4+ICNT1‰1�=�VERSAbus�32�bit�data�port�size$*£0�=�VERSAbus�16�bit�data�port�sizeICNT1„SET…0<<5+ICNT1‰NA2ICNT1„SET…1<<6+ICNT1‰Enable�RAMbus�diag.�interruptICNT1„SET…0<<7+ICNT1‰NA**‚Control�reg�2* ICNT2„SET…$00;ICNT2„SET…0<<0+ICNT2‰1�=�VERSAbus�int.�status�int.�disabled'*£0�=�VERSAbus�int.�status�int.�enabledICNT2„SET…0<<1+ICNT2‰Ack�VBIRQ1ICNT2„SET…0<<2+ICNT2‰Ack�VBIRQ2ICNT2„SET…0<<3+ICNT2‰Ack�VBIRQ3ICNT2„SET…0<<4+ICNT2‰Ack�VBIRQ4ICNT2„SET…0<<5+ICNT2‰Ack�VBIRQ5ICNT2„SET…0<<6+ICNT2‰Ack�VBIRQ6 ICNT2„SET…1<<7+ICNT2‰mask�VBIRQ7**‚Control�reg�3* ICNT3„SET…$00;ICNT3„SET…1<<0+ICNT3‰0�=�put�VERSAbus�monitor�in�test�mode.&*§1�=�VERSAbus�monitor�in�normal�mode.0ICNT3„SET…0<<1+ICNT3‰Interrupt�Request�Level�IL0ICNT3„SET…0<<2+ICNT3‰IL1ICNT3„SET…0<<3+ICNT3‰IL2*§IL0-2�corresponds�to�VBIRQx-ICNT3„SET…0<<4+ICNT3‰0�=�cache�test�mode�off.*§1�=�cache�test�mode�on.;ICNT3„SET…\SYSFAIL<<5+ICNT3‚0�=�disable�SYSFAIL�interrupts. *§1�=�enable‚SYSFAIL�interrupts.0ICNT3„SET…1<<6+ICNT3‰0�=�disable�all�interrupts.*§1�=�enable�all�interrupts.6ICNT3„SET…0<<7+ICNT3‰Disallow�VERSAbus�monitor�overrun *£interrupt**‚Control�reg�4* ICNT4„SET…$00)ICNT4„SET…0<<0+ICNT4‰1�=�SYSFAIL�asserted*£0�=�SYSFAIL�negates,ICNT4„SET…0<<1+ICNT4‰1�=�cache�read�disabled*£0�=�cache�read�enabled-ICNT4„SET…0<<2+ICNT4‰1�=�cache�write�disabled*£0�=�cache�write�enabled2ICNT4„SET…0<<3+ICNT4‰1�=�all�cache�entries�cleared*£0�=�cache�is�not�cleared3ICNT4„SET…1<<4+ICNT4‰1�=�32-bit�VERSAbus�addressing *£0�=�16-bit�VERSAbus�addressing0ICNT4„SET…1<<5+ICNT4‰1�=�enable�VERSAbus�caching *£0�=�disenable�VERSAbus�caching1ICNT4„SET…1<<6+ICNT4‰1�=�VERSAbus�monitor�enabled*£0�=�VERSAbus�monitor�cleared1ICNT4„SET…1<<7+ICNT4‰Enable�VERSAbus�monitor�test ***‚Control�register�5.*/ICNT5„SET…$0F�Begin�with�all�cacheing�disabled.(ICNT5„SET…-\CACHEUI<<0+ICNT5�If�CACHEUI,'ICNT5„SET…-\CACHEUD<<1+ICNT5�.‚CACHEUD,'ICNT5„SET…-\CACHESI<<2+ICNT5�.‚CACHESI,FICNT5„SET…-\CACHESD<<3+ICNT5�or�CACHESD�are�1,�clear�the�corresponding*§bits�to�enable�cacheing. 8ICNT5„SET�1<<4+ICNT5�0�=�let�PAL�decode�68020�addresses.(*§1�=�let�RAMbus�decode�68020�addresses. =ICNT5„SET�1<<5+ICNT5�0�=�force�RAMbus�writes�to�the�VERSAbus.%*§1�=�allow�writes�across�the�RAMbus. 'ICNT5„SET�0<<6+ICNT5�0�=�enable�RAMbus.*§1�=�disable�RAMbus. 8ICNT5„SET�1<<7+ICNT5�0�=�we�are�secondary�RAMbus�master.#*§1�=�we�are�primary�RAMbus�master.*PANL…SET�$0DŒshown�"D"�on�LED *G*‚Set�up�the�value�with�which�to�initialize�the�CACR.‚This�value�shouldD*‚cause�the�cache�to�be�flushed�and,�if�sysgen�parameter�CACHE020�so%*‚specifies,�should�enable�the�cache.*CACR_VALUE‚SETŠ1<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…When�incorporating�any�drivers�during�SYSGEN„<<<<<<<?*‚>>>>>>>…that�require�memory�allocated�for�them�as�perƒ<<<<<<<?*‚>>>>>>>…the�driver�package�instructions�-�this�is�theƒ<<<<<<<,*‚>>>>>>>…spot�the�file(s)�go�into!!–<<<<<<<*‚>>>>>>>µ<<<<<<<=*‚>>>>>>>…This�is�also�the�spot�for�code�for�a�driver…<<<<<<<>*‚>>>>>>>…that‚requires�other�types�of�initialization,ƒ<<<<<<<0*‚>>>>>>>…such‚as�clearing�an�interrupt.‘<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>‘MERGE�IT�HERE—<<<<<<<*<*ˆWhen�you�write�the�code�that�is�to�be�merged�here,�wrap�it*ˆaround�with�the�following:*:*ˆAt�the�beginning,�with�DRVRxOUT�referring�to�your�unique*ˆlabel,�put�this�code:*'*‹PEA„DRVRxOUT(PC)„IF�BUS�ERROR�OCCURS,*¢RETURN�OR�GO�ON�TO�NEXT*¢DRIVER'S�INITIALIZATION**‹MOVE.W�#'BE',-(A7)…SAVE�'BUS�ERROR'�FLAG*9*ˆThen�insert�the�code�to�do�what�you�need�to�do�for�this*ˆparticular�driver.**ˆAt�the�end,�put�this:***‹LEA„6(A7),A7ˆREMOVE�BUS�ERROR�FROM�STACK*DRVRxOUTƒEQU„**=*ˆIn�this�way,�if�the�code�for�one�driver�causes�a�bus�error,.*ˆthe�code�for�other�drivers�will�be�executed.*E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<G***********************************************************************    ‰ENDéééééé **ˆVM04.CNFGDRVR.CI*'* Configuration file for device driversO*------------------------------------------------------------------------------B* This file sets up the flags used by the "VM04.IFDRVR.CI" file to'* conditionally include device drivers.*K* The user should only have to modify this file to include/exclude drivers.E* If you add more boards/devices, you may have to increase the sysgen>* command T option for more symbols in the "&.SYSGEN.CF" file.*K* To modify specific items of a driver, edit the corresponding driver file,J* "&.xxxxDRV.CI" except as noted where one driver handles multiple boards.O*------------------------------------------------------------------------------ N******************************************************************************L*---‚BOARD/SYSTEM�DEPENDENCIES�are�included�from�the�&.VERSADOS.CD�file.�---9*�VM04.SYSTEM.CIƒadd�processor�board/system�dependencies,(*–including�local�terminals�and�printers6*�&.CNFGTASK.CI„add�O/S�task�configuration�for�ROM/RAMM***************************************************************************** O*------------------------------------------------------------------------------DNOLTERMƒ=�2Š#�of�terminals�using�VM04�(MK68564)�serial�ports;�max=�2 O*------------------------------------------------------------------------------=NOVM20„=�0Œ#�of�VM20…FDC�(floppy�only�disk�controller�boards) *¦two�board�set;�uses�IPC�driver*¦(see�"&.IPCDRV.CI")G*�NOTE:‚If�you�increase�the�number�of�floppies�on�either�the�1st�or�2nd@*ˆcontroller�boards,�you�may�need�to�edit�&.IPCDRV.CI�and�changeB*ˆthe�Z�value�from�81�to�85�so�that�the�file�IOC.VM20DRV.AG�can�be;*ˆassembled�during�sysgen.‚The�81�value�is�so�that�the�fileA*ˆIOC.VM20DRV.AG�can�be�assembled�in�a�384K�system�during�sysgen. IFGTˆ\NOVM207ƒNFV20$1ƒ=�0Œ#�of�floppy�disk�drives�on�1st�FDC;�max=�47ƒNFV20$2ƒ=�0Œ#�of�floppy�disk�drives�on�2nd�FDC;�max=�4 ?ƒVM200$1ƒ=�"'F8SDDSM'"‚Type�of�1st�floppy�disk�on�1st�FDC�boardX(a'i+q ?ƒVM201$1ƒ=�"'F8SDDSM'"‚Type�of�2nd�floppy�disk�on�1st�FDC�board?ƒVM202$1ƒ=�"'F8SDDSM'"‚Type�of�3rd�floppy�disk�on�1st�FDC�board?ƒVM203$1ƒ=�"'F8SDDSM'"‚Type�of�4th�floppy�disk�on�1st�FDC�board ?ƒVM200$2ƒ=�"'F8SDDSM'"‚Type�of�1st�floppy�disk�on�2nd�FDC�board?ƒVM201$2ƒ=�"'F8SDDSM'"‚Type�of�2nd�floppy�disk�on�2nd�FDC�board?ƒVM202$2ƒ=�"'F8SDDSM'"‚Type�of�3rd�floppy�disk�on�2nd�FDC�board?ƒVM203$2ƒ=�"'F8SDDSM'"‚Type�of�4th�floppy�disk�on�2nd�FDC�boardENDC O*------------------------------------------------------------------------------;NOVM21„=�0Œ#�of�VM21…UDC�(universal�disk�controller�boards)%*¦floppy�&�hard�disks;�two�board�set;*¦uses�IPC�driver*¦(see�"&.IPCDRV.CI")I*�NOTE:‚If�you�increase�the�number�of�hard�disk�or�floppies�on�either�the@*ˆ1st�or�2nd�controller�boards,�you�may�need�to�edit�&.IPCDRV.CIF*ˆand�change�the�Z�value�from�81�to�92�so�that�the�file�IOC.VM21DRV.AGB*ˆcan�be�assembled�during�sysgen.‚The�81�value�is�so�that�the�fileA*ˆIOC.VM21DRV.AG�can�be�assembled�in�a�384K�system�during�sysgen. IFGTˆ\NOVM215ƒNHV21$1ƒ=�0Œ#�of�hardƒdisk�drives�on�1st�UDC;�max=�47ƒNFV21$1ƒ=�0Œ#�of�floppy�disk�drives�on�1st�UDC;�max=�45ƒNHV21$2ƒ=�0Œ#�of�hardƒdisk�drives�on�2nd�UDC;�max=�47ƒNFV21$2ƒ=�0Œ#�of�floppy�disk�drives�on�2nd�UDC;�max=�4 =ƒVM210$1ƒ=�"'FXLRK25'"‚Type�of�1st�hardƒdisk�on�1st�UDC�board=ƒVM211$1ƒ=�"'RMLRK25'"‚Type�of�2nd�hardƒdisk�on�1st�UDC�board=ƒVM212$1ƒ=�"'FXCMD80'"‚Type�of�3rd�hardƒdisk�on�1st�UDC�board=ƒVM213$1ƒ=�"'RMCMD16'"‚Type�of�4th�hardƒdisk�on�1st�UDC�board ?ƒVM214$1ƒ=�"'F8SDDSM'"‚Type�of�1st�floppy�disk�on�1st�UDC�board?ƒVM215$1ƒ=�"'F8SDDSM'"‚Type�of�2nd�floppy�disk�on�1st�UDC�board?ƒVM216$1ƒ=�"'F8SDDSM'"‚Type�of�3rd�floppy�disk�on�1st�UDC�board?ƒVM217$1ƒ=�"'F8SDDSM'"‚Type�of�4 th�floppy�disk�on�1st�UDC�board =ƒVM210$2ƒ=�"'FXLRK25'"‚Type�of�1st�hardƒdisk�on�2nd�UDC�board=ƒVM211$2ƒ=�"'RMLRK25'"‚Type�of�2nd�hardƒdisk�on�2nd�UDC�board=ƒVM212$2ƒ=�"'FXCMD80'"‚Type�of�3rd�hardƒdisk�on�2nd�UDC�board=ƒVM213$2ƒ=�"'RMCMD16'"‚Type�of�4th�hardƒdisk�on�2nd�UDC�board ?ƒVM214$2ƒ=�"'F8SDDSM'"‚Type�of�1st�floppy�disk�on�2nd�UDC�board?ƒVM215$2ƒ=�"'F8SDDSM'"‚Type�of�2nd�floppy�disk�on�2nd�UDC�board?ƒVM216$2ƒ=�"'F8SDDSM'"‚Type�of�3rd�floppy�disk�on�2nd�UDC�board?ƒVM217$2ƒ=�"'F8SDDSM'"‚Type�of�4th�floppy�disk�on�2nd�UDC�boardENDC O*------------------------------------------------------------------------------8NOVM22„=�1Œ#�of�VM22…SMD�disk�controllers�boards�(single*¦board)J*�NOTE:‚If�you�increase�the�number�of�hard�disk�or�floppies,�you�will�needC*ˆto�edit�&.VM22DRV.CI�and�change�the�Z�value�from�81�to�92�so�thatF*ˆthe�file�IOC.VM22DRV.AG�can�be�assembled�during�sysgen.‚The�81�valueF*ˆis�so�that�the�file�IOC.VM22DRV.AG�can�be�assembled�in�a�384K�system*ˆduring�sysgen. IFGTˆ\NOVM222ƒNHV22$1ƒ=�2Œ#�of�hardƒdisk�drives�on�VM22;�max=�84ƒNFV22$1ƒ=�4Œ#�of�floppy�disk�drives�on�VM22;�max=�4 >ƒVM220$1ƒ=�"'FXCMD80'"‚Type�of�1st�hardƒdisk�on�1st�VM22�board>ƒVM221$1ƒ=�"'RMCMD16'"‚Type�of�2nd�hardƒdisk�on�1st�VM22�board>ƒVM222$1ƒ=�"'FXCMD80'"‚Type�of�3rd�hardƒdisk�on�1st�VM22�board>ƒVM223$1ƒ=�"'RMCMD16'"‚Type�of�4th�hardƒdisk�on�1st�VM22�board>ƒVM224$1ƒ=�"'FXCMD80'"‚Type�of�5th�hardƒdisk�on�1st�VM22�board>ƒVM225$1ƒ=�"'RMCMD16'"‚Type�of�6th�hardƒdisk�on�1st�VM22�board>ƒVM226$1ƒ=�"'FXCMD80'"‚Type�of�7th�hardƒdisk�on�1st�VM22�board>ƒVM227$1ƒ=�"'RMCMD16'"‚Type�of�8th�hardƒdisk�on�1st�VM22�board @ƒVM228$1ƒ=�"'F8SDDSM'"‚Type�of�1st�floppy�disk�on�1st�VM22�board@ƒVM229$1ƒ=�"'F8SDDSM'"‚Type�of�2nd�floppy�disk�on�1st�VM22�board@ƒVM22A$1ƒ=�"'F5DDDSI'"‚Type�of�3rd�floppy�disk�on�1st�VM22�board@ƒVM22B$1ƒ=�"'F5DDDSI'"‚Type�of�4th�floppy�disk�on�1st�VM22�boardENDC O*------------------------------------------------------------------------------7NOVM30„=�1Œ#�of�VM30…MCCM�(multi-channel�communications *¦boards)(*¦uses�IPC�driver;�has�1�printer�port/bd*¦(see�"&.IPCDRV.CI") IFGTˆ\NOVM30/ƒNTV30$1ƒ=�4Œ#�of�terminals�on�1st�MCCM;�max=�4.ƒNPV30$1ƒ=�1Œ#�of�printers‚on�1st�MCCM;�max=�1/ƒNTV30$2ƒ=�0Œ#�of�terminals�on�2nd�MCCM;�max=�4.ƒNPV30$2ƒ=�0Œ#�of�printers‚on�2nd�MCCM;�max=�1/ƒNTV30$3ƒ=�0Œ#�of�terminals�on�3rd�MCCM;�max=�4.ƒNPV30$3ƒ=�0Œ#�of�printers‚on�3rd�MCCM;�max=�1/ƒNTV30$4ƒ=�0Œ#�of�terminals�on�4th�MCCM;�max=�4.ƒNPV30$4ƒ=�0Œ#�of�printers‚on�4th�MCCM;�max=�1ENDC O*------------------------------------------------------------------------------ééééé é**ˆVM04.IFDRVR.CI*** Conditional file for VM04 device driversO*------------------------------------------------------------------------------J*‚This�file�uses�flags�setup�in�the�VM04.CNFGDRVR.CI�file�to�conditionally*‚include�device�drivers.*J*‚The�user�should�not�have�to�modify�this�file�to�include/exclude�drivers.*D*„******************************************************************?*„**‚NOTICE:‚The�following�conditionals�are�order�dependent.„**3*„**‹Do�not�change�the�order!‚Local�drivers�1st.‡**9*„**‹The�order�determines�device�number�(HD00,PR,�etc)‚***„**‹for�most�items.¤**D*„*******************************************************************>*„NOTE:‚"CN00"�thru�"CN09"�reserved�for�non�VM30�(MCCM)�ports.* IFNEˆ\NOLTERMƒINCLUDE…&.SIODRV.CIENDC* IFNEˆ\NOVM22ƒINCLUDE…&.VM22DRV.CIENDC*IFNEˆ\NOVM20+\NOVM21+\NOVM30ƒINCLUDE…&.IPCDRV.CIENDC* IFNEˆ\NOVM30?ƒ*„NOTE:‚"CNn0"�thru�"CNn3"�reserved�for�these�each�MCCM�board,+ƒ*‹where�"n"�is�the�board�number�(1,2,...).7ƒ*‹"PRn�"�is�assigned�sequentially�for�each�MCCM�board.ƒINCLUDE…&.VM30DRV.CIENDCéééy%**ˆVM04.SYSTEM.CI*L****************************************************************************>*‚This�file�contains�all�board/system�dependencies�for�VM04.Ž*&*‚It�is�called�from�"&.VERSADOS.CD".¦**Ê*E*‚The�user�should�not�have�to�modify�this�file�except�under�extreme‡**‚circumstances.º*L**************************************************************************** <*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**†ON�BOARD�RAM�ADDRESSES*>*†VMEbus�drivers�require�the�following�target�system�dependentB*†variables�to�be�defined�when�the�macro�file�DUALPORT.MC�is�used:<*†Note�that�the�ONBD$HI�parameter�may�vary�on�the�VME110�and<*†and�VME101�systems�depending�on�the�size�and�number�of�RAM<*†chips�used�on�the�processor�card.‚The�values�shown�are�the?*†minimum�requirements.�Modify�that�parameter�to�match�your�own*†system�if�different.**;ONBD$LOƒ=�$0‹Low�value�for�on-board�ram�(as�seen�by�driver)RAM$SQ„=�$0‹Difference�between�on-board�ram�address�as�seen�by*˜driver�and�device.JOFFBD$LO‚=�\ONBD$LO+\RAM$SQ�Low�value�for�on-board�ram�(as�seen�by�device)JOFFBD$HI‚=�\ONBD$HI+\RAM$SQ�High�valu�for�on-board�ram�(as�seen�by�device) FMSG‰******************************************************************MSG‰**ˆAddresses�of�timer,�etc.FMSG‰****************************************************************** #TIMER…=�$FFFB0000„Address�of�timer.3CLOCKFRQ‚=�0ŒNumber�of�clock�ticks�per�milliseco nd.5PANEL…=�$0‹Address�of�front�panel�(not�used�on�VM04).5TRCFLAGƒ=�0ŒTrace�flag.‚Zero�implies�don't�trace.‚The/*˜setting�of�bits�in�the�TRCFLAG�parameter�will1*˜control�which�events�cause�an�entry�to�be�built*˜in�the�trace�table.*˜Bit�#�in�TRCFLAG†Event *›15‘TRAP�#1*›14‘I/O�interrupt�not�claimed*°by�user�task.*›13‘Timer�interrupt.*›12‘User�trap�(2-15)*›11‘Exception *›10‘Dispatch*œ9‘I/O�interrupt�claimed�by *°user�task*œ8‘Return�from�LOADMMU*œ7‘Simulated�interrupt‚6‹-“&*œ6‘SYSFAIL�interrupt.**?SYSFAILƒ=�0ŒDetermines�whether�or�not�the�operating�system�will5*˜be�interrupted�when�SYSFAIL�is�asserted�on�the�bus.2*˜Some�intelligent�boards�will�assert�SYSFAIL�when0*˜they�experience�a�failure�of�some�kind.‚If�you5*˜have�such�boards�in�the�system,�AND�THE�DRIVERS�FOR3*˜THESE�BOARDS�HAVE�SYSFAIL�HANDLERS,�then�you�will2*˜probably�want�SYSFAIL�interrupts�enabled.‚If�the4*˜appropriate�SYSFAIL�handlers�are�not�written,�then5*˜taking�a�SYSFAIL�interrupt�will�hang�up�the�system,0*˜so�you�would�want�SYSFAIL�interrupts�disabled.!*š0�=�disable�SYSFAIL�interrupts. *š1�=‚enable�SYSFAIL�interrupts.FMSG‰******************************************************************.MSG‰**ƒLocal�terminal/printer�device�addresses#MSG‰**ƒShort�I/O�space�base�address&MSG‰**ƒShort�I/O�space�address�offsetsFMSG‰****************************************************************** :&VECTNOƒ=�$FFŠStarting�Vector�Number‚used�by�IOC.IPCDRV.AG6LTDA$01ƒ=�$FFFB0040„VM04�local�terminal�port�1�address6LTDA$02ƒ=�$FFFB0050„VM04�local�terminal�port�2�address 3SIOBASEƒ=�$FFFF0000„Base�address�of�Short�I/O�space&DEVADDƒ=�\SIOBASE.RMS.CI�file�and�has�a�value�equal!*œto�the�initial�program�counter.AMEMEND1ƒ=�$400000†Ending�addr�for�on-board‚memory�must�be�<�this.4MEMEND2ƒ=�$0‹Starting‚addr�for�off-board�memory�must *˜be�>=�this.@MEMEND3ƒ=�$0‹Ceiling�addr�for�off-board�memory�(must�be�<�this).:WHERLOAD‚=�0ŒMemory�address�where�boot�file�will�be�loaded1*˜Nonzero�on�VM01�only.‚If�nonzero,�VERSAdos�will"*˜be�moved�at�initialization�time.6NVME316ƒ=�0ŒNot�used�by�VM04�(needed�for�&.SYSINIT.CI)5CACHEF„=�0ŒNot�used�by�VM04�(needed�for�&.INITDAT.AG)7NOTNT…=�0ŒNot�used�by�VM04�(needed�for�EET.VERSADOS.CI) =CACHE020‚=�1ŒThis�flag�determines�whether�the�68020's�on-chip!*˜instruction�cache�will�be�used:*š0�=�don't�use�it. *š1�=�use�it. 7*˜The�following�flags�determine�which�types�of�accesses7*˜will�get�cached�by�the�VM04's�instruction/data�cache.1*˜In�each�case,�0�=�don't�cache�it,�1�=�cache�it.0CACHEUIƒ=�1Ž1�=�cache�user‡instruction�accesses.)CACHEUDƒ=�1Ž1�=�cache�user‡dataˆaccesses.6CACHESIƒ=�1Ž1�=�cache�supervisor�instruction�accesses./CACHESDƒ=�1Ž1�=�cache�supervisor�dataˆaccesses.  EMSG‰*****************************************************************)MSG‰**‚Parameters�about�table�sizes,�etc.EMSG‰***************************************************************** 1PAGESIZE‚=�256ŠSize�in�bytes�of�a�page�of�memory.*)ASN‡=�0Œ#�of�address�spaces--not�used�but!*˜needed�to�satisfy�&.INITDAT.AG. GMSG‰************************************ *******************************?MSG‰*ƒCopy�C20O24.SYSPAR.RO�into�&.SYSPAR.RO�to�make�it�genericAMSG‰*ƒfor�.LG�files�and�possible�for�sysgening�more�than�1�systemMSG‰*ƒper�account�#GMSG‰******************************************************************* $=COPY‡C20O24.SYSPAR.RO,&.SYSPAR.RO;Yé'VME122 COPYSGENCF§§¯aa=/*<=/*‚VME122.COPYSGEN.CF‚-‚Chain�file�to�copy�files�for�SYSGEN=/*'=/*‚--‚FORCE�CATALOG�TO�BE�SET�=�VME122 =USE :.VME122=/*D=/*†This�chainfile�copies�those�files�required�to�do�a�SYSGEN�into�a'=/*†a�specified�volume�and�user�number.=/*;=/*ƒInvoke�as:„=VME122.COPYSGEN.CF‚arg1,arg2,arg3,arg4,arg5 =/*…where:.=/*‰Arg1=�\1„Source�volume�nameŒ(must�specify).=/*‰Arg2=�\2„Target�volume�nameŒ(must�specify).=/*‰Arg3=�\3„Target�user�numberŒ(must�specify)-=/*‰Arg4=�\4„COPY�option�letter(s)‰(optional)=/*—B�=�both�copy�&�verify=/*—P�=�pack�files =/*—Y�=�overwrite�if�file�exists*=/*—N�=�skip�copy�if�file�existsƒ(default)*=/*–VT�=�verify�&�show�only�1st�difference2=/*‰Arg5=�\5„include�PCDRV�driver�filesƒ(optional)=/*—PCDRV�=�include�them=OPT N=/RX=\0=/RD=0 =/IF RX < 3…=/RD=1=/ENDIF =/IF RX > 5…=/RD=1=/ENDIF =/IF RD=0 …=/IFC�\1Š=/RD=1…=/ENDIF …=/IFC�\2Š=/RD=2…=/ENDIF …=/IFC�\3Š=/RD=3…=/ENDIF …=/IFC�\4 Š=/IFC�\5�=ARG�\1,\2,\3,N,-PCDRVŠ=/ELSE�=ARG�\1,\2,\3,N,\5Š=/ENDIF…=/ENDIF …=/IFC�\5ˆ=ARG�\1,\2,\3,\4,-PCDRV…=/ELSEˆ=/IFEQ�"PCDRV"\5ˆ=/ELSE‹=/IFEQ�"-PCDRV"\5‹=/ELSEŽ=/RD=5‹=/ENDIFˆ=/ENDIF…=/ENDIF=/ENDIFJ=/*‚Set�Arg6�so�this�file�can't�be�rerun�directly�w/o�setting�proper�args!=ARG \1,\2,\3,\4,\5,ARGS=OPT -N =/IF RD <> 0Mƒ=/*�INVOCATION�ERROR!�Insufficient,�null,�and/or�invalid�argument�specified!ƒ=/R?ƒ=END=/ENDIF *=/* ==== Start driver related file copying=/IFEQ "PCDRV"\5O=/*----------------------------------------------------------------------------"=/* Copy all RAD1 files for sysgen=/@„\1:9998.COPYGEN.RADDRV.CFO=/*----------------------------------------------------------------------------!=/* Copy all RIO files for sysgen=/@„\1:9998.COPYGEN.RIODRV.CFO=/*----------------------------------------------------------------------------$=/* Copy all VME600 files for sysgen=/@„\1:9998.COPYGEN.M600DRV.CFŸP¨(°'¸ O=/*----------------------------------------------------------------------------$=/* Copy all VME605 files for sysgen=/@„\1:9998.COPYGEN.M605DRV.CFO=/*----------------------------------------------------------------------------$=/* Copy all VME610 files for sysgen=/@„\1:9998.COPYGEN.M610DRV.CFO=/*----------------------------------------------------------------------------$=/* Copy all VME615 files for sysgen=/@„\1:9998.COPYGEN.M615DRV.CFO=/*----------------------------------------------------------------------------$=/* Copy all VME625 files for sysgen=/@„\1:9998.COPYGEN.M625DRV.CFO=/*----------------------------------------------------------------------------*=/* Copy all PCDRV common files for sysgen=/@„\1:9998.COPYGEN.PCDRV.CF=/ENDIFO=/*----------------------------------------------------------------------------,=/* Copy all driver library files for sysgen=/@„\1:9998.COPYGEN.DRVLIB.CFO=/*----------------------------------------------------------------------------(=/* Copy all MFP driver files for sysgen=/@„\1:9998.COPYGEN.MFPDRV.CFO=/*----------------------------------------------------------------------------)=/* Copy all MPSC driver files for sysgen=/@„\1:9998.COPYGEN.MPSCDRV.CFO=/*----------------------------------------------------------------------------(=/* Copy all PRT driver files for sysgen=/@„\1:9998.COPYGEN.PIADRV.CFO=/*----------------------------------------------------------------------------+=/* Copy all VME050 driver files for sysgen=/@„\1:9998.COPYGEN.M050DRV.CF=/@„\1:9998.COPYGEN.P050DRV.CF=/@„\1:9998.COPYGEN.MPCCDRV.CFO=/*----------------------------------------------------------------------------+=/* Copy all VME300 (GPIB) files for sysgen=/@„\1:9998.COPYGEN.M300DRV.CFO=/*----------------------------------------------------------------------------$=/* Copy all VME315 files for sysgen=/@„\1:9998.COPYGEN.M315DRV.CFO=/*----------------------------------------------------------------------------F=/* Copy all VME316 (VMEbus to I/O channel interface) files for sysgen=/@„\1:9998.COPYGEN.M316DEF.CFO=/*----------------------------------------------------------------------------$=/* Copy all VME320 files for sysgen=/@„\1:9998.COPYGEN.M320DRV.CFO=/*----------------------------------------------------------------------------/=/* Copy all VME435 (mag tape) files for sysgen=/@„\1:9998.COPYGEN.M435DRV.CFO=/*----------------------------------------------------------------------------7=/* Copy all RWIN1 (Winchester) driver files for sysgen=/@„\1:9998.COPYGEN.RWINDRV.CFO=/*----------------------------------------------------------------------------*=/* Copy all disk related files for sysgen=/@„\1:9998.COPYGEN.DSKPARAM.CFO=/*----------------------------------------------------------------------------=/*=/**=/* ==== Start system related file copyingO=/*-----------------------------------------------------------------------------=/*‚Copy�all�VME122�specific�files�for�sysgen=/@„\1:9998.COPYGEN.VME122.CFO=/*----------------------------------------------------------------------------!=/* Copy all EET files for sysgen=/@„\1:9998.COPYGEN.EET.CFO=/*----------------------------------------------------------------------------'=/* Copy all FHS & IOS files for sysgen=/@„\1:9998.COPYGEN.FHSIOS.CFO=/*----------------------------------------------------------------------------!=/* Copy all FMS files for sysgen=/@„\1:9998.COPYGEN.FMS.CFO=/*----------------------------------------------------------------------------$=/* Copy all LOADER files for sysgen=/@„\1:9998.COPYGEN.LOADER.CFO=/*----------------------------------------------------------------------------<=/* Copy all BEGIN/END files for sysgen (OSLIST and VERSAPT)=/@„\1:9998.COPYGEN.BEGINEND.CFO=/*----------------------------------------------------------------------------!=/* Copy all IOI files for sysgen=/@„\1:9998.COPYGEN.IOI.CF O=/*----------------------------------------------------------------------------'=/* Copy all CNFG TASK files for sysgen=/@„\1:9998.COPYGEN.CNFGTASK.CFO=/*----------------------------------------------------------------------------!=/* Copy all IOC files for sysgen=/@„\1:9998.COPYGEN.IOC.CFO=/*----------------------------------------------------------------------------!=/* Copy all .EQ files for sysgen=/@„\1:9998.COPYGEN.EQ.CFO=/*----------------------------------------------------------------------------2=/*‚Copy�all�the�rest�of�the�root�files�for�sysgen=/@„\1:9998.COPYGEN.ROOT.CFO=/*----------------------------------------------------------------------------=/*2=/*†VME122.COPYSGEN.CF‚completed.‰Have�a�nice�day!=/*N=/*‚No�"NOARG"�and�"=END"�because�independent�driver�release�items�may�follow!éééé'FMS IOI AGÌÌSaaIXR AGÕÕaaVERSADOSCIÞÞaa* *ˆFMS.IOI.AG*G*ˆThis�code�is�referenced�by�the�system�initializer.�If�FMS�is�present,B*ˆthe�desired�FMS�logic�will�be�executed.‚However,�if�the�user�hasA*ˆelected�to�remove�FMS�from�the�system,�an�immediate�return�will*ˆbe�executed.   ‰SECTION�1 ‰XDEF†FMSIOI01 FMSIOI01: �IFNE…\FMS$ ‰NOLIST‰INCLUDEƒ&.IOE.EQ‰INCLUDEƒ&.NIO.EQ‰INCLUDEƒ&.FME.EQ‰INCLUDEƒ&.FMI.EQ‰LIST ŠSECTION�1*ˆINCLUDEƒ&.IOE.EQ*ˆINCLUDEƒ&.NIO.EQ*ˆINCLUDEƒ&.FME.EQ*ˆINCLUDEƒ&.FMI.EQ  NOVDTS EQU \TOTDSK NO. OF VDT'S!NOFCBS EQU \NODIFFIL NO. OF FCB'S NOFATS EQU \NOFILES NO. OF FAT'SNODVS‚EQU�\NODEFVOL�NO.�OF�DV'S#DEFFAB EQU \DEFFAB DEFAULT FAB SIZE"DEFDAT EQU \DEFDAT DEFAULT DB SIZE ‰XREF†FMSDLEN‰PAGE**ˆOUTPUT*’D0�=�FMS�ASQ�LENGTH***D*.IOI MUST CALCULATE LENGTH OF FMS DATA SEGMENT, AS WELL AS SOME ASQE*…LENGTHS�BECAUSE�OF�RESTRICTIONS�THAT�LINK�CAN�ONLY�ADD�AND�SUBTRACT*…EXPRESSIONS�WITH�XREF'S*&*FMS STACK AREA IS FIRST PART OF FMSD- =*…STACK�SIZE�IS�DETERMINED�BY�NO.�OF�DIFFERENT�FILES�THAT�CAN*…BE�OPENED�AT�ONCE>*COMMON STACK MUST BE LARGE ENOUGH TO ACCOMODATE 12*(NOFCBS+1);*…PLUS�A�LITTLE�FOR�SUBROUTINE�CALLS�ISSUED�PRIOR�TO�DEVBSY8*…BEING�CALLED�(ABOUT�30�BYTES)�PLUS�ONE�COMPLETE�SET�OF*…REGISTERS�(66�BYTES)***ŠMOVE.L�#NOFCBS+1,D0 ŠMULUƒ#12,D0ŠADD.L‚#100,D0 ŠMOVE.L�D0,D1ŠMOVE.L�#NOVDTS,D0ŠMULUƒ#VDTLEN,D0 ŠADD.L‚D0,D1ŠMOVE.L�#NOFCBS,D0ŠMULUƒ#FCBLEN,D0 ŠADD.L‚D0,D1ŠMOVE.L�#NOFATS,D0ŠMULUƒ#FATLEN,D0 ŠADD.L‚D0,D1ŠMOVE.L�#NODVS,D0ŠMULUƒ#DVLEN,D0 ŠADD.L‚D0,D1*ŠMOVE.L�#SECSZE*(SDBSZE+DBSZE+SATSZE+1),D0ŠMULUƒ#NOVDTS,D0ŠADD.L‚D0,D1ŽD1=SEGMENT�LENGTHŠMOVE.L�D1,FMSDLEN:*CALCULATE LENGTH OF .FMS'S ASQ (EVTLEN+FHSNLN)*(NOFATS+2)ŠMOVE.L�#NOFATS+2,D0ŠMULUƒ#EVTLEN+FHSNLN,D0 ENDC‰RTS‰ENDÄT* *ˆFMS.IXR.AG*E* File of I/O XDEF's whose values are determined by sysgen parameters* .ˆXDEF‚NOVDTS,NOFCBS,NOFATS,NODVS,DEFFAB,DEFDAT NOVDTS‚EQUƒ\TOTDSK„No.�of�VDT'S!NOFCBS‚EQUƒ\NODIFFIL‚No.�of�FCB'S NOFATS‚EQUƒ\NOFILESƒNo.�of�FAT'SNODVSƒEQUƒ\NODEFVOL‚No.�of�DV'S#DEFFAB‚EQUƒ\DEFFAB„Default�FAB�size"DEFDAT‚EQUƒ\DEFDAT„Default�DB‚size ENDééééééÍ**ˆFMS.VERSADOS.CI*AMSG‰*************************************************************'MSG‰**ˆFMS�--�File�Management�System”**AMSG‰*************************************************************TASKˆ&.FMS.LO,.FMSSTATE…=�'DORM'ATTRIB„=�'CRIT'ATTRIB„=�'RTIM'ATTRIB„=�'SYST'PRIORITY‚=�$D0FMSSTR„=�*ŒFMS�load�addr. FMSASR„=�*+2ŠFMS�ASR�entry�pointSUBSˆFMS.IXR.AG"ASM‰FMS.IXR.AG,FMS.IXR.RO,\ASMLS;R IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC SUBSˆ&.FMS.LG LINKˆ&.FMS.LG IFEQ ˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCEND‰FMS#*�Build�VERSAdos‚.OSLIST.AG=COPY‡OSLIST.FMS.SI,OSLIST.AG;A5* Build VERSAdos patch chain file .VERSAPT.CF!=COPY‡VERSAPT.FMS.CF,VERSAPT.CF;AéééééÖ'EET START AGëëBaaVERSADOSCIôô Paa**ˆEET.START.AG* *ˆRoutine�to*,*’Start�the�Exit/Entry�Task�(EET)�if�present********C*******‚If�the�EET�task�is�present�in�the�system�it�will�be�started>*******‚however�if�not�present�an�immediate�return�will�occur.********ˆInput/*’A6�=�Start�address�of�I/O�common�data�segment**ˆOutput***ˆRegister�Alteration**’A0�=�Destroyed*’D0�=�Destroyed*‰PAGE**ˆINCLUDEƒ&.TR1.EQ*ˆINCLUDEƒ&.UTILITY.MC*‰NOLIST‰INCLUDEƒ&.TR1.EQ‰INCLUDEƒ&.UTILITY.MC‰LIST‰PAGE‰XDEF†EETSTART   ‰XREF†KILL‰PAGE ‰SECTION�1 …IFNE‚\EET$* BIT0…EQU‡0*EETSPB:‰DC.B†'&EET'„Target�task�name"‰DC.L†2‰Target�task�session�number‰DC.B†0‰Directive�options‰DC.L†0‰Monitor�task�name#‰DC.L†0‰Monitor�task�session�number‰DC.B†60ˆTask�startup�registers‰DS.W†0…ENDC‰PAGE EETSTART: …IFNE‚\EET$‰MOVE.L„#START,D0*œD0�=�Start�directive‰LEA‡EETSPB,A0'*œA0�=�Address�of�start�parameter�block‰TRAP†#1 *œStart�task ‰BSRNE…KILL+*œBring�system�down�if�unable�to�start�task…ENDC‰RTS*œReturn�to�caller‰END éééãC**ˆEET.VERSADOS.CI*BMSG‰**************************************************************MSG‰**ˆEET�EQU�valuesBMSG‰***************************************************************=DEFAULTƒ=�"SYS:0.&"„*System�default�volume:usernumber.catalog6SECURITY‚=�1ŒSwitch�to�indicate�if�security�package�is,*˜supported.‚Value�of�zero�excludes�package,,*˜nonzero�includes�it.‚This�package�requires*˜approximately�1K�of�memory.*;SPCCMD„=�1ŒSwitch�to�indicate�if�the�following�user�session/*˜management�commands�are�supported:‚HELP,CLOSE/*˜ASSIGN,NEWS.‚Value�of�zero�excludes�commands.-*˜This�package�requires�approximately�1/2k�of *˜memory.* ;TERMOCNT‚=�2Œ*No.�of�terminal�output�timeouts�before�logoff* =CHAINBAT‚=�1ŒSwitch�to�indicate�if�chain�and�batch�processing1*˜are�supported.‚Value�of�zero�excludes�batch�and-*˜chain;�non-zero�includes�them.‚This�package**˜requires�approximately�3-1/2K�of�memory.*8CONBATCH‚=�1ŒNumber�of�concurrent�batch�jobs�that�can�be'*˜running.‚Cannot�be�more�than�NOTASKS.*;BATCHPGE‚=�2ŒNo.�of�pages�for�batch�job�queueing.‚Each�page/*˜accomodates�32�entries.‚In�addition,�there�is**˜space�for�31�entries�minus�the�number�of*˜terminals�in�the�system.*�Auto�break�inactive*›1�-->�Auto�break�active*˜Bit�1:*›0�-->�Auto�logon�inactive*›1�-->�Auto�logon�active**MSG‰AMSG‰************************************************************* MSG‰**ˆEET�--�Entry�Exit�Task›**ì=õAMSG‰*************************************************************TASKˆ&.EET.LO,&EETSTATE…=�'DORM'ATTRIB„=�'CRIT'ATTRIB„=�'SYST' SESSIONƒ=�2PRIORITY‚=�$C8EETSTR„=�*ŒEET�load�addr.SUBSˆ&.EET.LG,&.CMDLIST.AG&ASM‰&.CMDLIST.AG,&.CMDLIST.RO,\ASMLS;R IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC LINKˆ&.EET.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCEND‰EET5* Build VERSAdos patch chain file .VERSAPT.CF!=COPY‡VERSAPT.EET.CF,VERSAPT.CF;Aé ééééé'FHS IXR AG  aa* *ˆFHS.IXR.AG*E* File of I/O XDEF's whose values are determined by sysgen parameters* ˆXDEF‚LUNS &LUNS„EQUƒ\MAXLU+1‚No.�of�LU's�per�task ENDéééééé é 'GET TASKID AGOaa**ˆGET.TASKID.AG* *ˆRoutine�to'*’Get�the�specified�task�identification*D*ˆThis�routine�is�called�by�FHS�and�IOS�during�their�initialization.E*ˆSince�IOS�and�FHS�cannot�distinguish�between�a�ROM�and�a�RAM�systemF*ˆthis�module�will�be�assembled�at�SYSGEN�time�as�this�distinction�can*ˆbe�determined�then.**‰PAGE**ˆINCLUDEƒ&.TR1.EQ*ˆINCLUDEƒ&.TR1RTCD.EQ*‰NOLIST‰INCLUDEƒ&.TR1.EQ‰INCLUDEƒ&.TR1RTCD.EQ‰LIST‰PAGE**ˆINPUT:-*’A0�=�ADDRESS�OF�GET�TASK�ID�PARAMETER�BLOCK*’A1�=�TASK�NAME*’D0�=�TASK�SESSION�NUMBER** *ˆOUTPUT:**’A0�=�FIRST‚HALF�OF�TASK�IDƒ(TCB�ADDRESS)+*’A1�=�SECOND�HALF�OF�TASK�IDƒ(SESSION�NBR)*’D0�=�RESULTS�OF�TRAP�CALL* *—....�UNLESS*%*¦THIS�IS�A�ROM�SYSTEM�AND�THE�TARGET*¦TASK�CANNOT�BE�FOUND�THEN*¦D0.B�=�NEGATIVE�ONE�(-1)**ˆRETURN�CONDITONS:*–ZERO‚-ƒSUCCESSFUL�REQUEST!*’NON-ZERO‚-�UNSUCCESSFUL�REQUEST!*’NEGATIVE‚-�UNSUCCESSFUL�REQUEST+*ŸROM�BASED�SYSTEM�WITH�TARGET�TASK�MISSING‰PAGE**ˆEXTERNAL�DEFINITIONS* ‰XDEF†GETTSKID‰PAGE ‰SECTION�0 GETTSKID:‰MOVE.L„A1,(A0)‰MOVE.L„D0,4(A0)*œSET�RESPECTIVELY *�TASK�NAME*�TASK�SESSION�NUMBER‰MOVE.L„#GTTASKID,D0*œD0�=�GET�TASK�ID�DIRECTIVE‰TRAP†#1*œINITIATE�GET�TASK�ID�REQUEST …IFNE…\$ROPT*‰CMP.B…#RTCDTASK,D0‰BNE.S…GTID0100-*œBRANCH�IF�ERROR�OTHER�THAN�TARGET�TASK�DOES *œNOT�EXIST‰MOVE.B„#-1,D0**œSET�FLAG�-�TARGET�TASK�DOES�NOT�EXIST�ON*§A�ROM�BASED�SYSTEM…ENDC GTID0100: ‰TST.B…D0*œESTABLISH�OUTPUT�CONDITONS‰RTS*œRETURN�TO�CALLER‰ENDéP7'IOC M300XTR AG##%aaBEGIN AG,, iaaP050DRV AG==<aaP115DRV AGFF8aaM300DRV AGOO xa  aM315DRV AG``^­ffM320DRV AGÁÁBffM4205 AGââaaM4208 AG÷aaM435DRV AG$$aaACIADRV AGEE WaaDARTDRV AGVV VaaEPCIDRV AGgg ]aaVM20DRV AGxx2ÛaaMFPDRV AG±±:aaMPCCDRV AGºº TaaMPSCDRV AGËË€aaPIADRV AGääˆaaRWINDRV AGõõ?ŒaaDRVS10 AG661aa**ˆ&.M300XTR.AG*(EXTR…IDNT†1,0‡GPIB�Extra�Page�Calculator *‚Included�files: *‰&.IOE.EQ *‰&.CCB.EQ*‰&.M300DRV.EQŠNOLISTŠINCLUDE�&.IOE.EQŠINCLUDE�&.CCB.EQŠINCLUDE�&.M300DRV.EQŠLIST 4‰XDEF†GPIBXP„Extra�page�word�to�be�passed�to�GPIBDRV*A*…NOTE:�GPIBXP�is�passed�to�GPIBDRV�as�a�word,�but�only�the�upper@*ƒbyte�contains�the�valid�extra�pages,�and�the�lower�byte�is�00.D*ƒthis�is�necessary�because�only�words�may�be�passed�through�an�XREF4*ƒand�CMR�expects�the�Extra�Pages�in�the�first�byte.*BGPIBUCL0 SET \GB0$UCL+\G0A$UCL+\G0B$UCL+\G0C$UCL+\G0D$UCL+\G0E$UCLBGPIBUCL0 SET GPIBUCL0+\G0F$UCL+\G0G$UCL+\G0H$UCL+\G0I$UCL+\G0J$UCL9GPIBUCL0 SET GPIBUCL0+\G0K$UCL+\G0L$UCL+\G0M$UCL+\G0N$UCL BGPIBUCL1 SET \GB1$UCL+\G1A$UCL+\G1B$UCL+\G1C$UCL+\G1D$UCL+\G1E$UCLBGPIBUCL1 SET GPIBUCL1+\G1F$UCL+\G1G$UCL+\G1H$UCL+\G1I$UCL+\G1J$UCL9GPIBUCL1 SET GPIBUCL1+\G1K$UCL+\G1L$UCL+\G1M$UCL+\G1N$UCL GPIBUCL‚SET†GPIBUCL0‰IFGT…GPIBUCL1-GPIBUCL0GPIBUCL‚SET†GPIBUCL1‰ENDC /GPIBXPƒEQU‡(GPIBUCL+(IOSILN*15)+CNFGAREA)&$FF00 ‰ENDééé&**ˆIOC.BEGIN.AG*O*********************************************************************************ˆIOC�--�DEFINE�DCB'S�AND�CDB'S*(*‡(The�macros�used�are�defined�in�IODM.)*E*‚08/01/84‚Changed�NOSASI�to�NVME420,�NOWIN�to�NORWIN,�and�TOTM435�to=*ŒNVME435�for�the�new�sysgen�method.‚Split�out�driver�DCB/CDB&*Œalso�to�relocatable�IOC�file�method.4*‚11/10/83‚Modified�to�use�IOCVEC�and�IOCLVL�equates&*Œincludes�Winchester�and�SASI�drivers*Œmag�tape�at�level�1'*‚09/02/83‚Modified�for�mag�tape�driver*O******************************************************************************* *‚Included�equate�files: *†&.IOE.EQ *†&.NIO.EQ* NOLIST‚INCLUDEƒ&.IOE.EQ‚INCLUDEƒ&.NIO.EQ LIST *@*‚This�section�becomes�IOCOMS,�which�is�used�by�FMS,�IOS,�&�FHS.*#IOCOM„IDNT†04,01‡I/O�COMMON�SEGMENT �SECTION�0‚===�DCB�SECTION�=== OPT MEX  XDEF IOCOMS,CCSEG XREF DCBEND *6*‚Here�are�parameters�describing�the�tables�and�lists.*IOCOMS �DC.L�0†I/  O�sysgen�options. ( DC.L DCQSTR Start address of DCQ space.&�DC.L�DCQEND�Endƒaddress�of�DCQ�space.�DC.L�0†Address�of�1st�DCQ. ( DC.L LUTSTR Start address of LUT space.&�DC.L�LUTEND�Endƒaddress�of�LUT�space.�DC.L�0†Address�of�1st�LUT. ( DC.L DCBTBL Start address of DCB space.&�DC.L�DCBEND�Endƒaddress�of�DCB�space. DC.L DCBTBL Address of 1st DCB. �DC.L�0�SEMAPHORE�FLAG%�DC.B�0�SYSTEM�TASK�COORDINATION�FLAG *“BIT‡MEANING%*•0‡0�-->�IOS�INITIALIZATION�NOT�DONE*�1�-->�IOS�INITIALIZATION…DONE%*•1‡0�-->�FHS�INITIALIZATION�NOT�DONE*�1�-->�FHS�INITIALIZATION…DONE%*•2‡0�-->�FMS�INITIALIZATION�NOT�DONE*�1�-->�FMS�INITIALIZATION…DONE�DCB.B�15,0‰FOR�FUTURE�USE(�DC.L�0,0,0‰TASK�ID�FOR�UNCLAIMED�BREAKS PAGEO********************************************************************************C*ˆStorage�for�DCQ's�and�LUT's.‚Initially�these�two�lists�are�empty.*O******************************************************************************* * *‚DCQ�space.*$O- DCQSTR EQU * DS.B \PAGESIZE*\DCQPGEDCQEND EQU *-1 * *‚LUT�space.* LUTSTR EQU * DS.B LUTBEG*\NOTASKS DS.B LUTSEG*\NOTASKS*(\MAXLU+1)LUTEND EQU *-1‰PAGEO**********************************************************************************ˆDefine�DCB's�based�on�SYSGEN�parameters.*O******************************************************************************* *�SECTION�0‚===�DCB�SECTION�===*DCBTBL�EQU�*‡This�is�the�top�of�DCB�space.  �SECTION�1‚===�CDB�SECTION�===I�DC.W�0‚@@@@�dummy�allocation�to�satisfy�LINK�1.6�problem�of�null�section)CCSEG‚EQU�*‡This�is�the�top�of�CDB�space.  ENDééééé**ˆIOC.P050DRV.AG**‚Included�equate�files: *‰&.IOE.EQ *‰&.NIO.EQ*ŠNOLISTŠINCLUDE�&.IOE.EQŠINCLUDE�&.NIO.EQŠLIST !*‚Included�device�specific�macros*‰MACRO.DCB.SI*‰MACRO.DCBPRT.SI*ŠNOLISTŠINCLUDE�MACRO.DCB.SIŠINCLUDE�MACRO.DCBPRT.SIŠLIST ŠPAGE&*‚Assign�values�from�SYSGEN�parameters*.DVCODEƒSET�\&PRTDV„Define�starting�device�code0L050$01‚EQU�\L050$01ƒDefine�VME050�board�address6NP050$1‚SET�\NP050$1ƒDefine�#�printers�on�VME050�board=PRT050ƒEQU�\P050DRVƒDefine�the�physical�address�of�the�driver 5CNAME„SET…('C'<<16)+(DVCODE>>8)‚channel�name�mnemonicE*ƒNOTE:‚Use�of�CNAME�guarantees�that�the�ASCII�printer�DCB�identifier>*Š(PR‚,PR1�,�etc)�will�always�correspond�with�the�channel�name*Šmnemonic  �(CPR�,CPR1,�etc.). O*******************************************************************************:*‚SET�UP�DCB'S�&�CDB'S�FOR�REMOTE�PRINTERS‚-‚VME050�boardsO******************************************************************************* /* Define PCP$ATW one time here for all printers.PCP$ATW‚SET…\PCP$TLRL<<2+\PCP$AFF<<1+\PCP$LNFD �IFGE‚NP050$1-1*ƒVME050�Board.�printer�port**--‚DATA�CONTROL�BLOCK‚--*K PRTDCB DVCODE,IOSID,IOSESS,$632,95,1,CNAME,0,$0007,$0033,PCP$ATW,\PCP$REC,%&‡\PCP$RSZ,\PCP$WTO,\PCP$LRL,\PCP$ELC�IFNE�DVCODE-'PR‚'1DVCODE�SET�DVCODE+$100‚SET�UP�FOR�NEXT�PRINTER�ID ENDC�IFEQ�DVCODE-'PR‚'DVCODE SET 'PR1 ' ENDC ***‚CHANNEL�DATA�BLOCK‚***: CDB 0,CNAME,XTPV050,254,PRT050,0,L050$01+$81,7,$8B,5,$10,&„0,0,0,0,0,0,0,0,0,0,0  ENDC  ENDé5=**ˆIOC.P115DRV.AG**‚Included�equate�files: *‰&.IOE.EQ *‰&.NIO.EQ*ŠNOLISTŠINCLUDE�&.IOE.EQŠINCLUDE�&.NIO.EQŠLIST !*‚Included�device�specific�macros*‰MACRO.DCB.SI*‰MACRO.DCBPRT.SI*ŠNOLISTŠINCLUDE�MACRO.DCB.SIŠINCLUDE�MACRO.DCBPRT.SIŠLIST ŠPAGE&*‚Assign�values�from�SYSGEN�parameters*.DVCODEƒSET�\&PRTDV„Define�starting�device�code8LPDA$01‚EQU�\LPDA$01ƒDefine�local�printer�device�address=PRT115ƒEQU�\P115DRVƒDefine�the�physical�address�of�the�driver 0CNAME„SET…'CPR'+DVCODE&$FF‚channel�name�mnemonicE*ƒNOTE:‚Use�of�CNAME�guarantees�that�the�ASCII�printer�DCB�identifier>*Š(PR‚,PR1�,�etc)�will�always�correspond�with�the�channel�name*Šmnemonic�(CPR�,CPR1,�etc.). O*******************************************************************************9*‚SET�UP�DCB'S�&�CDB'S�FOR�REMOTE�PRINTERS‚-‚VME115�boardO******************************************************************************* /* Define PCP$ATW one time here for all printers.PCP$ATW‚SET…\PCP$TLRL<<2+\PCP$AFF<<1+\PCP$LNFD *ƒVME115�Board.�printer�port**--‚DATA�CONTROL�BLOCK‚--*K PRTDCB DVCODE,IOSID,IOSESS,$632,95,1,CNAME,0,$0007,$0033,PCP$ATW,\PCP$REC,%&‡\PCP$RSZ,\PCP$WTO,\PCP$LRL,\PCP$ELC�IFNE�DVCODE-'PR‚'1DVCODE�SET�DVCODE+$100‚SET�UP�FOR�NEXT�PRINTER�ID ENDC�IFEQ�DVCODE-'PR‚'DVCODE SET 'PR1 ' ENDC ***‚CHANNEL�DATA�BLOCK‚***6 CDB 0,CNAME,XTPV115,254,PRT115,0,LPDA$01,1,$C1,5,$10,&„0,0,0,0,0,0,0,0,0,0,0  ENDéé>9**ˆIOC.M300DRV.AG**‚Included�equate�files: *ˆ&.IOE.EQ *ˆ&.NIO.EQ*‰NOLIST‰INCLUDEƒ&.IOE.EQ‰INCLUDEƒ&.NIO.EQ‰LIST !*‚Included�device�specific�macros*ˆMACRO.DCB.SI*ˆMACRO.DCBGPIB.SI*‰NOLIST‰INCLUDEƒMACRO.DCB.SI‰I  NCLUDEƒMACRO.DCBGPIB.SI‰LIST‰PAGE***‚Define�variables�using�SYSGEN�parameters*+M300…EQU‚\M300DRV‚Address�of�MVME300�driver-L300$01‚EQU‚\L300$01‚MVME300�board�#1�address-L300$02‚EQU‚\L300$02‚MVME300�board�#2�address  O********************************************************************************ƒSET�UP�DCB'S�FOR�MVME300O******************************************************************************* ‰PAGEA******************************************************************.*…Define�GPIB�Default�Parameters�and�Attribute*A******************************************************************GPD$ATM‚EQU‡$1F‘ATTRIBUTE�MASKGPD$PAM‚EQU‡$FFF�PARAMETER�MASK7GPD$AT1‚EQU‡$2137�DEVICE�ATTRIBUTES�(BUS,�NOT�SHARABLE)7GPD$AT2‚EQU‡$6137�DEVICE�ATTRIBUTES�(DEV,�NOT�SHARABLE)3GPD$AT3‚EQU‡$4137�DEVICE�ATTRIBUTSE�(DEV,�SHARABLE)/GPD$ATW‚EQU‡$3’ATTRIBUTE�WORD�(TALKER/LISTENER)(GPD$WTO‚EQU‡30000�WRITE�TIMEOUT�(30�SEC)'GPD$RTO‚EQU‡30000�READ�TIMEOUT‚(30�SEC)#GPD$EOR‚EQU‡$19010901‹END�OF�RECORDGPD$EOS‚EQU‡$0A0A�END�OF�STRING'GPD$PPC‚EQU‡$80‘PARALLEL�POLL�CONFIGUREGPD$PRA‚EQU‡$1F‘PRIMARY�ADDRESS$GPD$WLN‚EQU‡$0’WRITE�TRANSFER�LENGTH#GPD$RLN‚EQU‡$0’READ�TRANSFER�LENGTH*GPD$RSM‚EQU‡$0’READ�SECONDARY�ADDRESS�MASK+GPD$WSM‚EQU‡$0’WRITE�SECONDARY�ADDRESS�MASK*6*‚DCBƒDEFINITION�FOR�IEEE-488�BUS�AND�BUSSABLE�DEVICES* IFGE \NVME300-1*C GPDVDCB.14 'BUSA',GPD$AT1,0,1,GPD$ATM,GPD$PAM,$1F,GPD$WTO,GPD$RTO,B& GPD$EOR,GPD$EOS,GPD$PPC,GPD$PRA,GPD$WLN,GPD$RLN,GPD$RSM,GPD$WSM,& $0,$0,'BUS0'*D GPDVDCB 'BA0A',GPD$AT2,0,1,GPD$ATM,GPD$PAM,GPD$ATW,GPD$WTO,GPD$RTO,B& GPD$EOR,GPD$EOS,GPD$PPC,GPD$PRA,GPD$WLN,GPD$RLN,GPD$RSM,GPD$WSM,& $0,$0,'BUS0'*GEP4D GPDVDCB 'BA0B',GPD$AT3,0,1,GPD$ATM,GPD$PAM,GPD$ATW,GPD$WTO,GPD$RTO,B& GPD$EOR,GPD$EOS,GPD$PPC,GPD$PRA,GPD$WLN,GPD$RLN,GPD$RSM,GPD$WSM,& $0,$0,'BUS0'*D GPDVDCB 'BA0C',GPD$AT2,0,1,GPD$ATM,GPD$PAM,GPD$ATW,GPD$WTO,GPD$RTO,B& GPD$EOR,GPD$EOS,GPD$PPC,GPD$PRA,GPD$WLN,GPD$RLN,GPD$RSM,GPD$WSM,& $0,$0,'BUS0'*D GPDVDCB 'BA0D',GPD$AT3,0,1,GPD$ATM,GPD$PAM,GPD$ATW,GPD$WTO,GPD$RTO,B& GPD$EOR,GPD$EOS,GPD$PPC,GPD$PRA,GPD$WLN,GPD$RLN,GPD$RSM,GPD$WSM,& $0,$0,'BUS0'**†HANDLE�THE�REST�AS�DEFAULTS*  GPDFDCB.BA0E* ENDC** IFGE \NVME300-2*C GPDVDCB.14 'BUSB',GPD$AT1,0,1,GPD$ATM,GPD$PAM,$1F,GPD$WTO,GPD$RTO,B& GPD$EOR,GPD$EOS,GPD$PPC,GPD$PRA,GPD$WLN,GPD$RLN,GPD$RSM,GPD$WSM,& $0,$0,'BUS1'**†HANDLE�THE�REST�AS�DEFAULTS* GPDFDCB.BB0A*  ENDC   O********************************************************************************ƒSET�UP�CDB�FOR�MVME300O******************************************************************************* ***‚CHANNEL�DATA�BLOCK‚*********‚IEEE-488�CHANNELS  IFGE \NVME300-1I CDB $0001,'BUS0',XTGBUS,254,M300,0,L300$01,64,$B0,4,$40,1,0,0,0,0,0,0,0,&…0,0,0 ENDC* IFGE \NVME300-2I CDB $0001,'BUS1',XTGBUS,254,M300,0,L300$02,64,$B1,4,$40,1,0,0,0,0,0,0,0,&…0,0,0 ENDC  ENDéé  **ˆIOC.M315DRV.AG**‚Included�equate�files: *ˆ&.IOE.EQ *ˆ&.NIO.EQ*‰NOLIST‰INCLUDEƒ&.IOE.EQ‰INCLUDEƒ&.NIO.EQ‰LIST !*‚Included�device�specific�macros*ˆMACRO.DCB.SI*ˆMACRO.DCBDISK.SI*‰NOLIST‰INCLUDEƒMACRO.DCB.SI‰INCLUDEƒMACRO.DCBDISK.SI‰LIST‰PAGE***‚Define�variables�using�SYSGEN�parameters*+M315…EQU‚\M315DRV‚Address�of�MVME315�driver-L315$01‚EQU‚\L315$01‚MVME315�board�#1�address-L315$02‚EQU‚\L315$02‚MVME315�board�#2�address8VECTNO1‚EQU‚$FF‡Initialize�vector�number�for�1st�MVME3158VECTNO2‚EQU‚$FE‡Initialize�vector�number�for�2nd�MVME315 'NVME315‚EQU�\NVME315‚#�of�VME315�boardsANH315$1‚EQU�\NH315$1‚#�hardƒdisks�on�1st�MVME315�controller�boardCNF315$1‚EQU�\NF315$1‚#�floppy�disks�on�1st�MVME315�controller�boardANH315$2‚EQU�\NH315$2‚#�hardƒdisks�on�2nd�MVME315�controller�boardCNF315$2‚EQU�\NF315$2‚#�floppy�disks�on�2nd�MVME315�controller�board  O********************************************************************************ƒSET�UP�DCB'S�FOR�MVME315O******************************************************************************* *#*‚Set�up�DCB�parameters�for�MVME315*‚(media�independent)* DEV_ATT‚SET‡$1FDEV_CODE�SET‡0DEV_STAT�SET‡4PAR_MASK�SET‡$DBF3ECC_LEN‚SET‡11  CHAN_ID‚SET‡'A315'O********************************************************************************(*ˆHARD�DISKS�ON�FIRST�MVME315�CONTROLLER*O*******************************************************************************‰IFGE†NH315$1-1O********************************************************************************-*ƒFirst�hard�disk�on�first�MVME315�controller*O******************************************************************************* DSKNM„SET‡'HD\CONT3151\ZERO'>SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3150$1,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3150$1,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚diskXOa]iOqNyP�K‰Q‘N™M¡N©R±>*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3150$1,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3150$1,'H5WIN12'**‚5�1/4"‚12‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN12.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3150$1,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*0*‚Set�up�attribute�mask�for�hard�disk�on�MVME315*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3151$1,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$1,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$1,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“I  NCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$1,'H5WIN12'**‚5�1/4"‚12‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN12.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$1,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*0*‚Set�up�attribute�mask�for�hard�disk�on�MVME315*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NF315$1-1O********************************************************************************/*‚First�floppy�disk�on�first�MVME315�controller*O******************************************************************************* ‰IFC‡\M3154$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME315*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3155$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3155$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3155$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3155$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3155$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�d  efined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME315*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3156$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3156$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3156$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3156$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3156$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME315*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3157$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3157$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3157$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3157$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3157$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME315*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3150$2,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3150$2,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3150$2,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3150$2,'H5WIN12'**‚5�1/4"‚12‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN12.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3150$2,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*0*‚Set�up�attribute�mask�for�hard�disk�on�MVME315*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3151$2,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$2,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$2,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$2,'H5WIN12'**‚5�1/4"‚12‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN12.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$2,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*0*‚Set�up�attribute�mask�for�hard�disk�on�MVME315*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NF315$2-1O********************************************************************************/*‚First�floppy�disk�on�first�MVME315�controller*O******************************************************************************* ‰IFC‡\M3154$2,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$2,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$2,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$2,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME315*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3155$2,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3155$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3155$2,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3155$2,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3155$2,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME315*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3156$2,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3156$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3156$2,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3156$2,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3156$2,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME315*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3157$2,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3157$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3157$2,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3157$2,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3157$2,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME315*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3200$1,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3200$1,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3200$1,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3200$1,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*¹[ÂXÊJÒF“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3200$1,'H5WIN40'**‚5�1/4"‚40‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN40.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*0*‚Set�up�attribute�mask�for�hard�disk�on�MVME320*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3201$1,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3201$1,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3201$1,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI  SIZESET‚SET‡1‰ENDC‰IFC‡\M3201$1,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3201$1,'H5WIN40'**‚5�1/4"‚40‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN40.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*0*‚Set�up�attribute�mask�for�hard�disk�on�MVME320*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NF320$1-1;************************************************************/*‚First�floppy�disk�on�first�MVME320�controller*;*********************************************************** ‰IFC‡\M3202$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3202$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3202$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME320*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3203$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3203$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3203$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attributes�mask�for�floppy�on�MVME320*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NH420-1=**************************************************************,*ƒFirst�hard�disk�on�first�SASI�5‚controller*8******************************************************** ‰IFC‡\&M4200,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\&M4200,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\&M4200,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC‰IFC‡\&M4200,'H5WIN40'**‚5�1/4"‚40‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN40.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*ÚaãLëFó!/*‚Set�up�attribute�mask�for�hard�disk�on�SASI‚5*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\&M4201,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\&M4201,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\&M4201,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC ‰IFC‡\&M4201,'H5WIN40'**‚5�1/4"‚40‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN40.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*/*‚Set�up�attribute�mask�for�hard�disk�on�SASI�5*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\&M4202,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDEƒ&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*+*‚Set�up�attributes�mask�for�floppy�on�SAS5*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\&M4203,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDEƒ&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attributes�mask�for�floppy�on�SASI�5*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NH420-1=**************************************************************,*ƒFirst�hard�disk�on�first�SASI�8‚controller*8******************************************************** ‰IFC‡\&M4200,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*/*‚Set�up�attribute�mask�for�hard�disk�on�SASI�8*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\&M4201,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*/*‚Set�up�attribute�mask�for�hard�disk�on�SASI�8*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NF420-1;************************************************************.*‚First�floppy�disk�on�first�SASI�8�controller*;*********************************************************** ‰IFC‡\&M4202,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDEƒ&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\&M4202,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDEƒ&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attributes�mask�for�floppy�on�SASI�8*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\&M4203,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDEƒ&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\&M4203,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDEƒ&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attributes�mask�for�floppy�on�SASI�8*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NFV20$1-1;************************************************************+*‚First�floppy�disk�on�first�FDC�controller*;*********************************************************** ‰IFC‡\VM200$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM200$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�FDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM201$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM201$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�FDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM202$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM202$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�FDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM203$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM203$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for �floppy�on�FDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NFV20$2-1;************************************************************,*‚First�floppy�disk�on�second�FDC�controller*;*********************************************************** ‰IFC‡\VM200$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM200$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�FDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM201$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM201$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�FDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM202$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM202$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�FDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM203$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM203$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�FDC*9ATT_MASK�SET‚1<>8)‚channel�name�mnemonic C*ƒDefine�printer�attribute�word�(PCP$ATW)�one�time�for�all�printers.PCP$ATW‚SET‡\PCP$TLRL<<2+\PCP$AFF<<1+\PCP$LNFD O*******************************************************************************)*‚SET�UP�DCB�FOR�1ST�PIA�(PORT�A)�PRINTERO******************************************************************************* �IFGE‚NUBRD1-1**ƒPIA�#1,�printer�port�A**--‚DATA�CONTROL�BLOCK‚--**K PRTDCB DVCODE,IOSID,IOSESS,$632,95,1,CNAME,0,$0007,$0033,PCP$ATW,\PCP$REC,%&‡\PCP$RSZ,\PCP$WTO,\PCP$LRL,\PCP$ELC �IFNE�DVCODE-'PR‚'1DVCODE�SET�DVCODE+$100‚Set�up�for�next�printer�ID ENDC�IFEQ�DVCODE-'PR‚'DVCODE SET 'PR1 ' ENDC O*******************************************************************************)*‚SET�UP�CDB�FOR�1ST�PIA�(PORT�A)�PRINTERO**********************************************************************************‚CHANNEL�DATA�BLOCK‚***> CDB 0,CNAME,CHANTYPE,254,PIA,0,DEVADDR1,7,IOCVECT,IOCLVL,$10,&„0,0,0,0,0,0,0,0,0,0,0 ENDC  O*******************************************************************************)*‚SET�UP�DCB�FOR�1ST�PIA�(PORT�B)�PRINTERO*******************************************************************************�IFGE‚NUBRD1-2*ƒPIA�#1,�printer�port�B5CNAME„SET…('C'<<16)+(DVCODE>>8)‚channel�name�mnemonic**--‚DATA�CONTROL�BLOCK‚--**ÜGåBK PRTDCB DVCODE,IOSID,IOSESS,$632,95,1,CNAME,0,$0007,$0033,PCP$ATW,\PCP$REC,%&‡\PCP$RSZ,\PCP$WTO,\PCP$LRL,\PCP$ELC �IFNE�DVCODE-'PR‚'DVCODE SET DVCODE+$100 ENDC)�IFEQ�DVCODE-'PR‚'�SET�UP�NEXT�PRINTER�IDDVCODE SET 'PR1 ' ENDC ***‚CHANNEL�DATA�BLOCK‚***D CDB 0,CNAME,CHANTYPE,254,PIA,0,DEVADDR1+PORTB,7,IOCVECT,IOCLVL,$10,&„0,0,0,0,0,0,0,0,0,0,0 ENDC  �IFGE‚NOPIA-2O*******************************************************************************)*‚SET�UP�DCB�FOR�2ND�PIA�(PORT�A)�PRINTERO*******************************************************************************�IFGE‚NUBRD2-1*ƒPIA�#2,�printer�port�A5CNAME„SET…('C'<<16)+(DVCODE>>8)‚channel�name�mnemonic**--‚DATA�CONTROL�BLOCK‚--**K PRTDCB DVCODE,IOS ID,IOSESS,$632,95,1,CNAME,0,$0007,$0033,PCP$ATW,\PCP$REC,%&‡\PCP$RSZ,\PCP$WTO,\PCP$LRL,\PCP$ELC �IFNE�DVCODE-'PR‚'1DVCODE�SET�DVCODE+$100‚SET�UP�FOR�NEXT�PRINTER�ID ENDC�IFEQ�DVCODE-'PR‚'DVCODE SET 'PR1 ' ENDC ***‚CHANNEL�DATA�BLOCK‚***> CDB 0,CNAME,CHANTYPE,254,PIA,0,DEVADDR2,7,IOCVECT,IOCLVL,$10,&„0,0,0,0,0,0,0,0,0,0,0 ENDC O*******************************************************************************)*‚SET�UP�DCB�FOR�2ND�PIA�(PORT�B)�PRINTERO*******************************************************************************�IFGE‚NUBRD2-2*ƒPIA�#2,�printer�port�B5CNAME„SET…('C'<<16)+(DVCODE>>8)‚channel�name�mnemonic**--‚DATA�CONTROL�BLOCK‚--**K PRTDCB DVCODE,IOSID,IOSESS,$632,95,1,CNAME,0,$0007,$0033,PCP$ATW,\PCP$REC,%&‡\PCP$RSZ,\PCP$WTO,\PCP$LRL,\PCP$ELC �IFNE�DVCODE-'PR‚'DVCODE SET DVCODE+$100 ENDC)�IFEQ�DVCODE-'PR‚'�SET�UP�NEXT�PRINTER�IDDVCODE SET 'PR1 ' ENDC ***‚CHANNEL�DATA�BLOCK‚***D CDB 0,CNAME,CHANTYPE,254,PIA,0,DEVADDR2+PORTB,7,IOCVECT,IOCLVL,$10,&„0,0,0,0,0,0,0,0,0,0,0 ENDC ENDC END**ˆIOC.RWINDRV.AG**‚Included�equate�files: *†&.IOE.EQ *†&.NIO.EQ* NOLIST‚INCLUDEƒ&.IOE.EQ‚INCLUDEƒ&.NIO.EQ LIST !*‚Included�device�specific�macros*†MACRO.DCB.SI*†MACRO.DCBDISK.SI* NOLIST‚INCLUDE�MACRO.DCB.SI‚INCLUDE�MACRO.DCBDISK.SI LIST  PAGE**‚Define�variables�using�SYSGEN�parameters*)RWIN…EQU�\RWINDRV‚address�of�RWIN1�driver)LWIN$01‚EQU�\LWIN$01‚RWIN1�bd.�#1�address)LWIN$02‚EQU�\LWIN$02‚RWIN1�bd.�#2�addressANHRWIN$1�EQU�\NHRWIN$1�#…hard�disks�on�1st�RWIN1�controller�boardENFRWIN$1 EQU \NFRWIN$1 # floppies disks on 1st RWIN1 controller boardANHRWIN$2�EQU�\NHRWIN$2�#…hard�disks�on�2nd�RWIN1�controller�boardENFRWIN$2 EQU \NFRWIN$2 # floppies disks on 2nd RWIN1 controller board  O********************************************************************************ƒSET�UP�DCB'S�FOR�RWIN1O******************************************************************************* *!*‚Set�up�DCB�parameters�for�RWIN1*‚(media�independent)* DEV_ATT‚SET‡$1FDEV_CODE�SET‡0DEV_STAT�SET‡4PAR_MASK�SET‡$1AF3 ECC_LEN‚SET‡0  F***********************************************************************&*ˆHARD�DISKS�ON�FIRST�RWIN1�CONTROLLER*F**********************************************************************CHAN_ID‚SET‡'WIN1'‰IFGE†NHRWIN$1-1F***********************************************************************+*ƒFirst�hard�disk�on�first�RWIN1�controller*F********************************************************************** DSKNM„SET‡'HD\CONTWIN1\ZERO'>SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\RWIN0$1,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN0$1,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN0$1,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN0$1,'H5WIN15'*íXöZþNNQSN&M*‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN0$1,'H5WIN40'**‚5�1/4"‚40‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN40.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attribute�mask�for�hard�disk�on�RWIN1*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\RWIN1$1,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN1$1,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN1$1,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN1$1,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN1$1,'H5WIN40'**‚5�1/4"‚40‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN40.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attribute�mask�for�hard�disk�on�RWIN1*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\RWIN2$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN2$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN2$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN2$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN2$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attributes�mask�for�floppy�on�RWIN1*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\RWIN3$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN3$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN3$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN3$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN3$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attributes�mask�for�floppy�on�RWIN1*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\RWIN0$2,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN0$2,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN0$2,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN0$2,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN0$2,'H5WIN40'**‚5�1/4"‚40‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN40.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attribute�mask�for�hard�disk�on�RWIN1*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\RWIN1$2,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN1$2,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN1$2,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN1$2,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN1$2,'H5WIN40'**‚5�1/4"‚40‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN40.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*.*‚Set�up�attribute�mask�for�hard�disk�on�RWIN1*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\RWIN2$2,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN2$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN2$2,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN2$2,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN2$2,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attributes�mask�for�floppy�on�RWIN1*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\RWIN3$2,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN3$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN3$2,'F8SDSSI'*-*‚8"‚s ingle�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN3$2,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\RWIN3$2,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attributes�mask�for�floppy�on�RWIN1*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NHV21$1-1F***********************************************************************)*ƒFirst�hard�disk�on�first�UDC�controller*F********************************************************************** ‰IFC‡\VM210$1,'FXCMD16'**‚CMDƒ16‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM210$1,'FXCMD80'*;XDVLOTR\FdMlOtP|R„QŒE”Lœ*‚CMDƒ80‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD80.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM210$1,'FXLRK08'**‚LARK‚8‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM210$1,'FXLRK25'**‚LARK‚25‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attribute�mask�for�hard�disk�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM211$1,'RMCMD16'**‚CMDƒ16‚megabyte‚hard‚disk*“INCLUDEƒ&.RMCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM211$1,'RMLRK08'**‚LARK‚8‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM211$1,'RMLRK25'**‚LARK‚25‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attribute�mask�for�hard�disk�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM212$1,'FXCMD16'**‚CMDƒ16‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM212$1,'FXCMD80'**‚CMDƒ80‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD80.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM212$1,'FXLRK08'**‚LARK‚8‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM212$1,'FXLRK25'**‚LARK‚25‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attribute�mask�for�hard�disk�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM213$1,'RMCMD16'**‚CMDƒ16‚megabyte‚hard‚disk*“INCLUDEƒ&.RMCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM213$1,'RMLRK08'**‚LARK‚8‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM213$1,'RMLRK25'**‚LARK‚25‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attribute�mask�for�hard�disk�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NFV21$1-1;************************************************************+*‚First�floppy�disk�on�first�UDC�controller*;*********************************************************** ‰IFC‡\VM214$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM214$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM215$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM215$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM216$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM216$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM217$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM217$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NHV21$2-1F*************************************************************************ƒFirst�hard�disk�on�second�UDC�controller*F********************************************************************** ‰IFC‡\VM210$2,'FXCMD16'**‚CMDƒ16‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM210$2,'FXCMD80'**‚CMDƒ80‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD80.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM210$2,'FXLRK08'**‚LARK‚8‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM210$2,'FXLRK25'**‚LARK‚25‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attribute�mask�for�hard�disk�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM211$2,'RMCMD16'**‚CMDƒ16‚megabyte‚hard‚disk*“INCLUDEƒ&.RMCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM211$2,'RMLRK08'**‚LARK‚8‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM211$2,'RMLRK25'**‚LARK‚25‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attribute�mask�for�hard�disk�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM212$2,'FXCMD16'**‚CMDƒ16‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM212$2,'FXCMD80'**‚CMDƒ80‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD80.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM212$2,'FXLRK08'**‚LARK‚8‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM212$2,'FXLRK25'**‚LARK‚25‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attribute�mask�for�hard�disk�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM213$2,'RMCMD16'**‚CMDƒ16‚megabyte‚hard‚disk*“INCLUDEƒ&.RMCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM213$2,'RMLRK08'**‚LARK‚8‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM213$2,'RMLRK25'**‚LARK‚25‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*,*‚Set�up�attribute�mask�for�hard�disk�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NFV21$2-1;************************************************************,*‚First�floppy�disk�on�second�UDC�controller*;*********************************************************** ‰IFC‡\VM214$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM214$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM215$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM215$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM216$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM216$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM217$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM217$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC***‚Set�up�attributes�mask�for�floppy�on�UDC*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM220$1,'FXCMD16'**‚CMD�16‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM220$1,'FXCMD80'**‚CMD�80‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD80.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM220$1,'FXLRK08'**‚LARK�08‚megabyte‚hard‚disk*¤Z­RµM½ZÅJÍSÕVÝSåPíOõ “INCLUDEƒ&.FXLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM220$1,'FXLRK25'**‚LARK�25‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attribute�mask�for�hard�disk�on�VM22*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM221$1,'RMCMD16'**‚CMD�16‚megabyte‚hard‚disk*“INCLUDEƒ&.RMCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM221$1,'RMLRK08'**‚LARK�08‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM221$1,'RMLRK25'**‚LARK�25‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attribute�mask�for�hard�disk�on�VM22*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM222$1,'FXCMD16'**‚CMD�16‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM222$1,'FXCMD80'**‚CMD�80‚m egabyte‚hard‚disk*“INCLUDEƒ&.FXCMD80.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM222$1,'FXLRK08'**‚LARK�08‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM222$1,'FXLRK25'**‚LARK�25‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attribute�mask�for�hard�disk�on�VM22*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM223$1,'RMCMD16'**‚CMD�16‚megabyte‚hard‚disk*“INCLUDEƒ&.RMCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM223$1,'RMLRK08'**‚LARK�08‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM223$1,'RMLRK25'**‚LARK�25‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attribute�mask�for�hard�disk�on�VM22*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM224$1,'FXCMD16'**‚CMD�16‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM224$1,'FXCMD80'**‚CMD�80‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD80.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM224$1,'FXLRK08'**‚LARK�08‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM224$1,'FXLRK25'**‚LARK�25‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attribute�mask�for�hard�disk�on�VM22*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM225$1,'RMCMD16'**‚CMD�16‚megabyte‚hard‚disk*“INCLUDEƒ&.RMCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM225$1,'RMLRK08'**‚LARK�08‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM225$1,'RMLRK25'**‚LARK�25‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attribute�mask�for�hard�disk�on�VM22*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM226$1,'FXCMD16'**‚CMD�16‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM226$1,'FXCMD80'**‚CMD�80‚megabyte‚hard‚disk*“INCLUDEƒ&.FXCMD80.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM226$1,'FXLRK08'**‚LARK�08‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM226$1,'FXLRK25'**‚LARK�25‚megabyte‚hard‚disk*“INCLUDEƒ&.FXLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attribute�mask�for�hard�disk�on�VM22*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM227$1,'RMCMD16'**‚CMD�16‚megabyte‚hard‚disk*“INCLUDEƒ&.RMCMD16.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM227$1,'RMLRK08'**‚LARK�08‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK08.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM227$1,'RMLRK25'**‚LARK�25‚megabyte‚hard‚disk*“INCLUDEƒ&.RMLRK25.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*-*‚Set�up�attribute�mask�for�hard�disk�on�VM22*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM228$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM228$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM228$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM228$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM228$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*+*‚Set�up�attributes�mask�for�floppy�on�VM22*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM229$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM229$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM229$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM229$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM229$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*+*‚Set�up�attributes�mask�for�floppy�on�VM22*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM22A$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM22A$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM22A$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM22A$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM22A$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*+*‚Set�up�attributes�mask�for�floppy�on�VM22*9ATT_MASK�SET‚1<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\VM22B$1,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM22B$1,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM22B$1,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM22B$1,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\VM22B$1,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*+*‚Set�up�attributes�mask�for�floppy�on�VM22*9ATT_MASK�SET‚1<‰DC.L†0,0,0,0ƒBUFFER�ZONE�BETWEEN�DEVICE�INDEPENDENT/DEPENDENT)‰DC.B†IOSTLN„SPACE�FOR�CONFIGURATION�INFO‰DCB.B…DCBLEN-(*-LLUN),0 (DCBEND�EQU�*-1…End�address�of�DCB�space.IOCOME�EQU�*‡End�of�IOC�commonA*ƒ{No�longer�forces�to�next�page�boundary�(was�IOCOML)�-�8/03/84} SPC 3�SECTION�1‚===�CDB�SECTION�=== ) DC.L 0 Link of 0 marks end of CDB chain.  ENDéé&9**ˆIOC.PV01DRV.AG**‚Included�equate�files: *‰&.IOE.EQ *‰&.NIO.EQ*ŠNOLISTŠINCLUDE�&.IOE.EQŠINCLUDE�&.NIO.EQŠLIST !*‚Included�device�specific�macros*‰MACRO.DCB.SI*‰MACRO.DCBPRT.SI*ŠNOLISTŠINCLUDE�MACRO.DCB.SIŠINCLUDE�MACRO.DCBPRT.SIŠLIST ŠPAGE&*‚Assign�values�from�SYSGEN�parameters*.DVCODEƒSET�\&PRTDV„Define�starting�device�code;LPDA$01‚EQU�\LPDA$01ƒDefine�local�printer�device�address�#1;LPDA$02‚EQU�\LPDA$02ƒDefine�local�printer�device�address�#2=PRTV01ƒEQU�\PV01DRVƒDefine�the�physical�address�of�the�driver 0CNAME„SET…'CPR'+DVCODE&$FF‚channel�name�mnemonicE*ƒNOTE:‚Use�of�CNAME�guarantees�that�the�ASCII�printer�DCB�identifier>*Š(PR‚,PR1�,�etc)�will�always�correspond�with�the�channel�name*Šmnemonic�(CPR�,CPR1,�etc.). O*******************************************************************************7*‚SET�UP�DCB'S�&�CDB'S�FOR�REMOTE�PRINTERS‚-‚VM01�boardO******************************************************************************* /* Define PCP$ATW one time here for all printers.PCP$ATW‚SET…\PCP$TLRL<<2+\PCP$AFF<<1+\PCP$LNFD *ƒVM01�Board.�printer�port�#1**--‚DATA�CONTROL�BLOCK‚--*K PRTDCB DVCODE,IOSID,IOSESS,$632,95,1,CNAME,0,$0007,$0033,PCP$ATW,\PCP$REC,%&‡\PCP$RSZ,\PCP$WTO,\PCP$LRL,\PCP$ELC�IFNE�DVCODE-'PR‚'1DVCODE�SET�DVCODE+$100‚SET�UP�FOR�NEXT�PRINTER�ID ENDC�IFEQ�DVCODE-'PR‚'DVCODE SET 'PR1 ' ENDC ***‚CHANNEL�DATA�BLOCK‚***7 CDB 0,CNAME,XTPVM1,254,PRTV01,0,LPDA$01,$10,$1E,6,$10,&„0,0,0,0,0,0,0,0,0,0,0    IFGE \NOLPRT-2**ƒVM01�Board.�printer�port�#2* 0CNAME„SET…'CPR'+DVCODE&$FF‚channel�name�mnemonic *--‚DATA�CONTROL�BLOCK‚--*K PRTDCB DVCODE,IOSID,IOSESS,$632,95,1,CNAME,0,$0007,$0033,PCP$ATW,\PCP$REC,%&‡\PCP$RSZ,\PCP$WTO,\PCP$LRL,\PCP$ELC�IFNE�DVCODE-'PR‚'1DVCODE�SET�DVCODE+$100‚SET�UP�FOR�NEXT�PRINTER�ID ENDC�IFEQ�DVCODE-'PR‚'DVCODE SET 'PR1 ' ENDC  ***‚CHANNEL�DATA�BLOCK‚***/N8" 7 CDB 0,CNAME,XTPVM1,254,PRTV01,0,LPDA$02,$10,$1E,6,$10,&„0,0,0,0,0,0,0,0,0,0,0 ENDC  ENDééééééé**ˆIOC.TNTDRV.AG**‚Included�equate�files: *†&.IOE.EQ *†&.NIO.EQ*‰NOLIST‰INCLUDEƒ&.IOE.EQ‰INCLUDEƒ&.NIO.EQ‰LIST !*‚Included�device�specific�macros*†MACRO.DCB.SI*†MACRO.DCBTERM.SI*‰NOLIST‰INCLUDEƒMACRO.DCB.SI‰INCLUDEƒMACRO.DCBTERM.SI‰LIST PAGE 0* Define TCP$ATW one time here for all terminalsITCP$ATW‚SET‚\TCP$HCPY+\TCP$XCTL<<1+\TCP$BITS<<2+\TCP$STPB<<3+\TCP$USEP<<4GTCP$ATW‚SET‚TCP$ATW+\TCP$PRTY<<5+\TCP$ECHO<<6+\TCP$TAHD<<7+\TCP$TFUL<<8.SYSTEM.CI"�file.1*ƒ"+$NN"‚is�the�offset�to�the�1st�board�register.J*-------------------------------------------------------------------------I*------------------------------------------------------------------------CL400$01ƒ=�\IOCBASE+($0E0*\CMULT)+$0D�MVME400�bd.�#1,�port�A�address*©L400$01‚=�\L400$01CL400$02ƒ=�\IOCBASE+($0D0*\CMULT)+$0D�MVME400�bd.�#2,�port�A�address*©L400$02‚=�\L400$02J*-------------------------------------------------------------------------CL410$01ƒ=�\IOCBASE+($0F0*\CMULT)+$01�MVME410�bd.�#1,�port�A�address*©L410$01‚=�\L410$01CL410$02ƒ=�\IOCBASE+($090*\CMULT)+$01�MVME410�bd.�#2,�port�A�address*©L410$02‚=�\L410$02J*-------------------------------------------------------------------------IL420$01ƒ=�\IOCBASE+($078*\CMULT)+$01�MVME420�bd.�#1,�portƒaddress:�SASI�8*©L420$01‚=�\L420$01IL420$02ƒ=�\IOCBASE+($070*\CMULT)+$01�MVME420�bd.�#2,�portƒaddress:�SASI�5*©L420$02‚=�\L420$02J*-------------------------------------------------------------------------LL435$01ƒ=�\IOCBASE+($1E0*\CMULT)+$29�MVME435�bd.�#1,�port�A�address:�Magtape*©L435$01‚=�\L435$01CL435$02ƒ=�\IOCBASE+($1C0*\CMULT)+$29�MVME435�bd.�#2,�port�A�address*©L435$02‚=�\L435$02J*-------------------------------------------------------------------------Z+c=LRAD$01ƒ=�\IOCBASE+($700*\CMULT)+$01�RAD…bd.�#1,�portƒaddress*©LRAD$01‚=�\LRAD$01J*-------------------------------------------------------------------------=LRIO$01ƒ=�\IOCBASE+($010*\CMULT)+$01�RIO…bd.�#1,�portƒaddress*©LRIO$01‚=�\LRIO$01J*-------------------------------------------------------------------------CL600$01ƒ=�\IOCBASE+($F00*\CMULT)+$1+$2�MVME600�bd.�#1,�portƒaddress*©L600$01‚=�\L600$01CL600$02ƒ=�\IOCBASE+($E00*\CMULT)+$1+$2�MVME600�bd.�#2,�portƒaddress*©L600$02‚=�\L600$02J*-------------------------------------------------------------------------AL605$01ƒ=�\IOCBASE+($B00*\CMULT)+$01�MVME605�bd.�#1,�portƒaddress*©L605$01‚=�\L605$01J*-------------------------------------------------------------------------@L610$01ƒ=�\IOCBASE+($002*\CMULT)+$1‚MVME610�bd.�#1,�portƒaddress*©L610$01‚=�\L610$01@L610$02ƒ=�\IOCBASE+($004*\CMULT)+$1‚MVME610�bd.�#2,�portƒaddress*©L610$02‚=�\L610$02J*-------------------------------------------------------------------------@L615$01ƒ=�\IOCBASE+($001*\CMULT)+$1‚MVME615�bd.�#1,�portƒaddress*©L615$01‚=�\L615$01J*-------------------------------------------------------------------------AL625$01ƒ=�\IOCBASE+($000*\CMULT)+$01�MVME625�bd.�#1,�portƒaddress*©L625$01‚=�\L625$01J*---------------------# ----------------------------------------------------?LWIN$01ƒ=�\IOCBASE+($068*\CMULT)+$03�RWIN1ƒbd.�#1,�portƒaddress*©LWIN$01‚=�\LWIN$01?LWIN$02ƒ=�\IOCBASE+($070*\CMULT)+$03�RWIN1ƒbd.�#2,�portƒaddress*©LWIN$02‚=�\LWIN$02J*-------------------------------------------------------------------------é'OSLIST BEGIN AGww aaEND AG€€aaFHS SI‰‰ aaFMS SI’’&aaIOS SI››#aaTNTDRV SI¤¤aa**ˆOSLIST.BEGIN.AG* ‰XDEF†OSMTBL ‰XDEF†OSMEND*-*ˆTABLE�OF�OPERATING�SYSTEM�MODULE�TASK�NAMES**ƒIncluded�equate�files:*ˆINCLUDEƒ&.IOE.EQ*ˆINCLUDEƒ&.EXE.EQ*ˆINCLUDEƒ&.NIO.EQ*ˆINCLUDEƒ&.FME.EQ*ˆINCLUDEƒ&.FMI.EQ‰NOLIST‰INCLUDEƒ&.IOE.EQ‰INCLUDEƒ&.EXE.EQ‰INCLUDEƒ&.NIO.EQ‰INCLUDEƒ&.FME.EQ‰INCLUDEƒ&.FMI.EQ‰LIST SECTION 1‰PAGE*D*ˆThe�following�NOP�is�required�if�the�user�has�elected�to�eliminateA*ˆall�modules�from�OSLIST�such�that�it�becomes�a�null�file.�SinceC*ˆLINK�1.6�has�problem�with�linking�a�null�module�that�has�XREF�andC*ˆXDEF�references,�the�NOP�is�here�to�keep�this�module�from�being�a*ˆnull�module.*‰NOP‰PAGEOSMTBL:éééééo!$ **ˆOSLIST.END.AG*OSMENDƒEQU…*“END�OF�TABLE ‰END‡OSMTBLéééééééx**ˆFHS*‰DC.B†$20‘STARTUP�VALUE)*§This�value�will�determine�(low�to�high)&*§the�order�a�task�is�to�be�started�by*§IOI‰DC.B†1“BIT�NUMBER&*§This�value,�if�present,�represents�a$*§bit�number�that�must�be�set�before$*§IOI�will�attempt�to�start�the�next'*§task.�This,�along�with�STARTUP�VALUE,(*§allows�the�coordination�of�bringing�up(*§system�tasks�at�boot�time�in�a�orderly$*§process.�The�offset�SVTSTCF�in�the%*§System�Value�Table�is�where�the�bit*§must�be�set.*%*¦IF�the�system�task�does�NOT�require'*¦boot�time�coordination�the�bit�number*¦must�be�set�to�$FF.*‰DC.L†FHSID�FHS�TASK�NAME‰DC.L†IOSESSŽSESSION* ‰DC.B†0“NO ‰DC.B†0•ASQ ‰DC.L†0˜WAS‰DC.L†0›REQUESTED‰DC.W†0*$‰DC.L†0,0,0,0�NO�DATA�SEGMENT�NEEDED*ééé$ é�! ‰XDEF†FMSDLEN**ˆFMS*‰DC.B†$10‘STARTUP�VALUE)*§This�value�will�determine�(low�to�high)&*§the�order�a�task�is�to�be�started�by*§IOI‰DC.B†2“BIT�NUMBER&*§This�value,�if�present,�represents�a$*§bit�number�that�must�be�set�before$*§IOI�will�attempt�to�start�the�next'*§task.�This,�along�with�STARTUP�VALUE,(*§allows�the�coordination�of�bringing�up(*§system�tasks�at�boot�time�in�a�orderly$*§process.�The�offset�SVTSTCF�in�the%*§System�Value�Table�is�where�the�bit*§must�be�set.*%*¦IF�the�system�task�does�NOT�require'*¦boot�time�coordination�the�bit�number*¦must�be�set�to�$FF.* ‰DC.L†FMSID�FMS�TASK�NAME‰DC.L†IOSESSŽSESSION* ‰DC.B†0“NO ‰DC.B†0•ASQ ‰DC.L†0˜WAS‰DC.L†0›REQUESTED‰DC.W†0**‰DC.W†SGOPPAŽOPTIONS-LOG.�ADDR=PHYS.�ADDR.‰DC.W†SGATRW+SGATSS‡ATTRIBUTES‰DC.L†FMSD�SEG.�NAME‰DC.L†0“LOGICAL�ADDRESSFMSDLEN‚DC.L†0“SEGMENT�LENGTH*ééééŠ' ‰XDEF†OESIZE**ˆIOS*IOSXXX:‰DC.B†$30‘STARTUP�VALUE)*§This�value�will�determine�(low�to�high)&*§the�order�a�task�is�to�be�started�by*§IOI‰DC.B†0“BIT�NUMBER&*§This�value,�if�present,�represents�a$*§bit�number�that�must�be�set�before$*§IOI�will�attempt�to�start�the�next'*§task.�This,�along�with�STARTUP�VALUE,(*§allows�the�coordination�of�bringing�up(*§system�tasks�at�boot�time�in�a�orderly$*§process.�The�offset�SVTSTCF�in�the%*§System�Value�Table�is�where�the�bit*§must�be�set.*%*¦IF�the�system�task�does�NOT�require'*¦boot�time�coordination�the�bit�number*¦must�be�set�to�$FF.*‰DC.L†IOSID�IOS�TASK�NAME‰DC.L†IOSESSŽSESSION* ‰DC.B†0“NO ‰DC.B†0•ASQ ‰DC.L†0˜WAS‰DC.L†0›REQUESTED‰DC.W†0*$‰DC.L†0,0,0,0�NO�DATA�SEGMENT�NEEDED*OESIZEƒEQU‡*-IOSXXXé% ééé“$*%*ˆTRANSPARENT�NETWORK�TERMINAL�DRIVER*‰DC.B†$40‘STARTUP�VALUE)*§This�value�will�determine�(low�to�high)&*§the�order�a�task�is�to�be�started�by*§IOI‰DC.B†$FF‘BIT�NUMBER&*§This�value,�if�present,�represents�a$*§bit�number�that�must�be�set�before$*§IOI�will�attempt�to�start�the�next'*§task.�This,�along�with�STARTUP�VALUE,(*§allows�the�coordination�of�bringing�up(*§system�tasks�at�boot�time�in�a�orderly$*§process.�The�offset�SVTSTCF�in�the%*§System�Value�Table�is�where�the�bit*§must�be�set.*%*¦IF�the�system�task�does�NOT�require'*¦boot�time�coordination�the�bit�number*¦must�be�set�to�$FF.*‰DC.L†TNTID�TNT�TASK�NAME‰DC.L†IOSESSŽSESSION*‰DC.B†AQSTQE+AQSTRE‡ASQ�STATUS&‰DC.B†EVULEN+IOSNLN‡MAX�MESSAGE�LENGTH ‰DC.L†EVULEN+IOSNLN‡QUEUE�LENGTH‰DC.L†\TNTASR�ADDRESS�OF�ASR‰DC.W†0*$‰DC.L†0,0,0,0�NO�DATA�SEGMENT�NEEDEDééééœ 'NOTNT ASR AG±± aa% **ˆNOTNT.ASR.AG*)ASR‡IDNTƒ11,11ŽASR�ADDRS.�FOR�I/O�MODULES*8*ASR-FILE OF ASR ADDRESSES OF I/O MODULES-NEEDED FOR IOI*ŠXDEFƒFMSASR,FHSASR,IOSASRFMSASR„EQU„\FMSASRFHSASR„EQU„\FHSASRIOSASR„EQU„\IOSASRŠENDééééééé© 'VME12X INITIO1 AG¾¾4§aaSYSINIT LG÷÷aaMTYPE SI aaB*‰INCLUDE�BOARD.EQƒThis�will�either�be�in�catalog�VME120�or�VME128AŠINCLUDE�BOARD.EQƒThis�will�either�be�in�catalog�VME120�or�VME128ŠIFEQ†BOARDTYPE-1286INITIO„IDNTƒ5,1�RMS68K�I/O�initializer�for�the�VME128.ŠENDCŠIFEQ†BOARDTYPE-1206INITIO„IDNTƒ5,1�RMS68K�I/O�initializer�for�the�VME120.ŠENDCO*v*****************************************************************************O*******************************************************************************O**************************************& ********************************************É***D***…ROUTINE:‚INITIO�--�RMS68K�I/O�INITIALIZER�FOR�THE�VME120/128‡******É***J***…ENVIRONMENT:‚Part�of�the�RMS68K�exec�for�the�Motorola�68000�family.***(***‡Copyright�1983�by�Motorola,�Inc.¢******É***D***…FUNCTION:‚Routines�from�this�module�are�called�by�the�RMS68K‡***E***‡routine�INIT�during�system�initialization.‚All�board-specific„***.***‡initialization�is�done�in�this�module.œ******É***G***…NOTES:‚This�module�is�SUBSed,�ASMed,�and�LINKed�at�SYSGEN�time.„***?***‡All�modules�will�run�at�level�7�and�in�supervisor�mode.‹******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revision�history�(add�new�changes�to�top).*…Date†Author‚ChangesI*…--------‚------‚-------------------------------------------------------8*†1/28/85ƒSJF„Changed�MMU�initialization�to�look�at�\MMU*†2/�1/84ƒMSL„Initial�writing.* * *‚XDEF's.*,ŠXDEFƒINITMMUŒRoutine�to�initialize�the�MMU.,ŠXDEFƒTIMERSTŒRoutine�to�start�up�the�timer.3ŠXDEFƒINITIO�Routine�to�set�up�all�the�other�board-*§specific�hardware. * *‚XREF's.* *…Routines:)ŠXREFƒKILLER�Routine�to�crash�the�system. *…Parameters�from�INITDAT:-ŠXREFƒTIMSLICŒ#�of�timer�tics�per�time�slice.+ŠXREFƒTIMERA�Addr�of�timer�chip�(MC146818).ŠXREFƒTIMINTVAŠXREFƒCLOCKFRQ¶7¿GÇBÏC×Cß@ç" *…SYSPAR�variables:6ŠXREF.S�MMUHEREŒAddr�of�MMU;�0�if�we're�not�using�one.0ŠXREF.S�FRST451ŒAddr�of�first�MMU�in�the�system./ŠXREF.S�LAST451ŒAddr�of�last‚MMU�in�the�system.7ŠXREF.S�CURR451ŒPtr�to�MMU�LOADMMU�should�look�at�next.7ŠXREF.S�CURRSD�Current�segment�descriptor�#�in�the�MMU.7ŠXREF.S�DPRVAO�Dual-Ported�Ram�Versabus�Address�Offset.ŠXREF.S�DATE�Date.0ŠXREF.S�TIMESLIC‹#�of�timer�tics�per�time�slice.3ŠXREF.S�TIMINTRŒUsec�remainder�for�odd�clock�rates.7ŠXREF.S�TIMINTVŒTime�interval�between�timer�interrupts..ŠXREF.S�PTMADDRŒAddr�of�timer�chip�(MC146818). *„Others:.ŠXREFƒCRASHSAV‹Place�to�SAVE�info�if�we�CRASH.   **‚Included�files:**‰&.UTILITY.MC*‰M68451.M68451.EQ*‰MK68901.MK68901.EQ*ŠNOLISTŠINCLUDE�&.UTILITY.MCŠINCLUDE�M68451.M68451.EQŠINCLUDE�MK68901.MK68901.EQŠLISTŠPAGEO*v*****************************************************************************O**********************************************************************************É***6***…ROUTINE:‚INITMMU�--�INITIALIZE�THE�M68451�MMU.•******É***I***…FUNCTION:‚If�we�are�supposed�to�have�an�MMU,�verify�its�existence‚******‡and�initialize�it.°******É******…NOTES:¾******É***E***…REGISTER�USAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SR�hi„SR�lo�(CCR)…******‡D:ƒPƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆD�******‡A:ƒPƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³***+***‡Supervisor�mode,�interrupt�level�7.Ÿ******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ******É***O*******************************************************************************O*^*****************************************************************************  ŠSECTION�8ŠOPT„BRS INITMMU: ,ŠIFNEƒ\MMU�If�we're�supposed�to�have�an�MMU, +ŠSAVEƒD0/A0ŽSave�registers�we'll�blow�away. 3ŠLEA„$F60000,A0‰A0�<--�address�where�MMU�should�be.%ŠMOVE.L�A0,MMUHERE‰Save�it�in�SYSPAR. *%*‚Set�up�the�other�SYSPAR�parameters.*8‹MOVE.L�A0,FRST451‰Our�only�68451�is�obviously�the�first9‹MOVE.L�A0,LAST451‰68451,�the�last�68451,�and�the�current‹MOVE.L�A0,CURR451‰68451.7‹MOVE.L�#1,CURRSDŠThe�current�segment�descriptor�is�#1. *@*‚Clear�all�segment�descriptors�except�the& �one�we're�using�(#0).*5‹PEA„KILLERŒSet�up�for�us�to�go�to�KILLER�if�we�get�a‹PUSHƒ#'BE'Žbus�error.<‹FOR„D0�=�#1�TO�#31�DO…For�segment�descriptors�1�through�31,*ŽMOVE.B�D0,DP(A0)Š.‚Select�the�descriptor.7ŽMOVE.B�#0,SSR(A0)‰.‚Initialize�it�so�it�won't�be�used.‹ENDF2‹ADD.L‚#6,SPŽGet�the�bus�error�junk�off�the�stack. **‚Exit.*!ŠRESTORE�D0/A0�Restore�registers. ŠENDC ŠRTS—Return. ŠPAGEO*********************************************************************************ˆSTART�TIMER„(146818�TIMER)* TIMERST:EŠMOVE.L�TIMSLIC(PC),TIMESLIC�#�TIMER�INTERRUPTS�BEFORE�TASK�INTERRUPT;ŠMOVE.L�TIMERA(PC),A1†GET�TIMER�ADDRESS�(MFP�BASE�ADDRESS).#ŠMOVE.L�A1,PTMADDR‰SAVE�IT�FOR�EXEC!ŠBEQ.L‚TIMERBEŒBRANCH�IF�NO�TIMER)ŠPEA„TIMERBE(PC)ˆWHERE�TO�GO�ON�BUS�ERROR$ŠMOVE.W�#'BE',-(A7)ˆSET�BUS�ERR�FLAG*ŠMOVE.L�#0,DATEŒDate�<--�0./ŠMOVE.W�#10,TIMINTVˆNumber�of�ms�per�clock�tick*B*‚Now�we�must�initialize�the�Multi-function�peripheral�(MPF)�chip.B*‚Although�we�are�not�intending�to�use�all�of�the�functionality�ofC*‚the�MFP�(ex.�serial�port),�we�will�go�ahead�and�initialize�all�of-*‚the�functions�on�the�chip,�just�to�be�safe.* *-*‚First,�disable�all�interrupts�from�the�MFP.* 6ŠCLR.B‚MFP_IERA(A1)‡Clear�interrupt�enable�register�A.6ŠCLR.B‚MFP_IERB(A1)‡Clear�interrupt�enable�register�B. *C*‚Now,�initialize�the�serial�port,�even�though�we�do�not�anticipate *‚using�it.*B*‚(NOTE:‚WE�WILL�LEAVE�IT�AS�IT�WAS�SO�WE�CAN�USE�THE�BUG�FROM�THE*ŠONBOARD�SERIAL�PORT.) 6*‰CLR.B‚MFP_SCR(A1)ˆClear�the�sync�character�register.5*‰CLR.B‚MFP_UCR(A1)ˆReset�the�USART�control�register. 7*‰CLR.B‚MFP_RSR(A1)ˆReset�the�receiver�status�register.6*‰TST.B‚MFP_RSR(A1)ˆRead�the�receiver�status�register. 7*‰CLR.B‚MFP_TSR(A1)ˆReset�the�transmit�status�register.6*‰TST.B‚MFP_TSR(A1)ˆRead�the�transmit�status�register. 2*‰CLR.B‚MFP_UDR(A1)ˆClear�the�USART�data�register.   *$*‚Now,�intiialize�the�parallel�port.* 1ŠCLR.B‚MFP_GPIP(A1)‡Clear�the�GPIP�data�register.=ŠMOVE.B�#$07,MFP_AER(A1)ƒInitialize�the�active�edge�resister.=ŠCLR.B‚MFP_DDR(A1)ˆSet�the�data�direction�register�to�inputs.   *I*‚Now,�initialize�the�four�timers�on�the�MFP.‚(We�will�only�use�timer�A.)* 1ŠMOVE.B�#$10,MFP_TACR(A1)‚Reset�and�stop�timer�A.1ŠMOVE.B�#$10,MFP_TBCR(A1)‚Reset�and�stop�timer�B. **‰CLR.B‚MFP_TCDCR(A1)†Stop�timers�C�and�D.AŠANDI.B�#$F0,MFP_TCDCR(A1)�(Stop�timer�D.‚Leave�timer�C�as�is�for *£the�BUG.) *>>>>>><ŠMOVE.L�#CLOCKFRQ,D0‡Clock�frequency�in�Hz�(SUBed�in�sysgen)K* IF D0 = 0, 10,000,000, OR 12,500,000 (Hz) then read clock rate from board)*ƒelse�use�clock�rate�defined�in�CLOCKFRQŠBEQ.S‚TSTRATEŠCMP.L‚#10000000,D0ŠBEQ.S‚TSTRATEŠCMP.L‚#12500000,D0ŠBNE.S‚RATESET TSTRATEƒTEST_CLOCK_RATEŠIF��THEN.SŒMOVE.L�#10000000,D0‚10MHz�rateŠELSE.S!ŒMOVE.L�#12500000,D0‚12.5MHz�rateŠENDI 1RATESETƒLSR.L‚#2,D0ŽDiv�by�4�for�clock�input�freq ŠMOVE.L�D0,D1=* Compute desired count down value according to the following*ƒformula:‚CD�=�TI/(PS*TO)*‰CD…=�Count�down�value*‰TI…=�Timer�input�frequency*‰PS…=�Prescalar�value)*‰TO…=�Desired�timer�output�time�interval<* For the VME12x operating at 12.5 MHz we have the following(*ƒTI�=�12.5�MHz/4�=�3.125�MHz�or�3125000 *ƒPS�=�200#*ƒTO�=�100�Hz�(One�tick�every�10ms)B* With these variable values the calculated CD is 157 (rounded up)7* For 10MHz the computed count down value would be 10msŠDIVUƒ#200*100,D0ˆDiv�by�PS*TOŠIF.LƒD0��#$0000FFFF�THEN.S"�ADD.Wƒ#1,D0ŠRound�up�if�remainderŠENDI>ŠAND.L‚#$0000FFFF,D0†Mask�off�remainder,�only�quotient�remains;ŠMOVE.B�D0,MFP_TADR(A1)„Count�down�value�(Timer�A�register)5* Now calculate the actual timer output interval via:*ƒCO�=�(1000*PS*CD)/TID*ƒRemainder�will�be�the�fraction�of�a�millisecond�over�an�exact�10ms *…interval�that�we�actually�haveŠMULUƒ#200,D0ŒMultiply�by�PSŠMULUƒ#1000,D0‹*1000 ŠWHILE.L�D1��#' $0000FFFF�DO.S.�LSR.Lƒ#1,D0ŠScale�dividend�and�divisor�so�...+�LSR.Lƒ#1,D1Š...�divisor�is�16�bits�or�lessŠENDW ŠDIVUƒD1,D0*ŠCLR.W‚D0‘Preserve�remainder�in�high�orderŠSWAPƒD0G* Now compute the number of usecs extra that we have in the actual time *ƒinterval.*ŠMULUƒ#1000,D0 ŠDIVUƒD1,D0!ŠMOVE.W�D0,TIMINTR„Usec�ramainder*>>>>>>0ŠCLR.B‚MFP_TBDR(A1)‡Reset�timer�B�data�register.1*‰CLR.B‚MFP_TCDR(A1)‡Reset�timer�C�data�register.0ŠCLR.B‚MFP_TDDR(A1)‡Reset�timer�D�data�register. >ŠMOVE.B�#$07,MFP_TACR(A1)‚Timer�A�control�reg�<==�delay_mode�+*´divide�by�200�prescaler.  *<*‚Now�initialize�the�programable�interrupt�controller�(PIC).* BŠMOVE.B�#$68,MFP_VR(A1)„Set�starting�vector�number�for�block�of�16-*£interrupt�vectors�to�$60.�Also�set�software*£interrupt�mode�(bit�3). 7ŠCLR.B‚MFP_IPRA(A1)‡Clear�interrupt�pending�register�A.7ŠCLR.B‚MFP_IPRB(A1)‡Clear�interrput�pending�register�B. 0ŠCLR.B‚MFP_ISRA(A1)‡Clear�in�service�register�A.0ŠCLR.B‚MFP_ISRB(A1)‡Clear�in�service�register�B. DŠMOVE.B�#$A0,MFP_IMRA(A1)‚Unmask�interrupts�from�ACFAIL�and�timer�A.6ŠCLR.B‚MFP_IMRB(A1)‡Mask�off�all�interrupts�from�IMRB. DŠMOVE.B�#$A0,MFP_IERA(A1)‚Enable�interrupts�from�ACFAIL�and�timer�A.1ŠMOVE.B�#$8E,MFP_IERB(A1)‚Enable�interrupts�from:*¦1.)‚MMUIRQ*.*¦2.)‚PARBAD*. *¦3.)‚BBERR. *¦4.)‚XERR.'*£(Note:‚If�we�enable�an�interrupt,�but"*«mask�it�off,�we�allow�the�PIC�to*«latch�the�interrupt�into�the!*«interrupt�pending�register,�but!*«not�to�interrupt�the�CPU.‚If�we!*«enable�and�unmask�an�interrupt,*«then�we�latch�it�into�the!*«interrupt�pending�register,�and*«also�interrupt�the�CPU.   *.ŠADD.L‚#6,A7ŽREMOVE�'BE'�AND�BUS�ERROR�ADDRESSŠRTS—BACK�TO�INIT*ŠMOVE.L�#CREG,CTRLREG†Put�base�address�of�ctrl�regs�in�SYSPAR. ŠINIT_CREG CŠMOVE.L�CACHEF(PC),CFLUSH‚Move�address�of�cache�flush�variable�from*£INITDAT�area�to�SYSPAR�area. ŠTST.B‚F_ALLŽFlush�entire�cache.  2ŠADD.L‚#6,SPŽGet�the�bus�error�junk�off�the�stack.  E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*‚>>>>>>>µ<<<<<<<*‚>>>>>>>•NOTICEš<<<<<<<*‚>>>>>>>µ<<<<<<<>*‚>>>>>>>…When�incorporating�any�drivers�during�SYSGEN„<<<<<<<?*‚>>>>>>>…that�require�memory�allocated�for�them�as�perƒ<<<<<<<?*‚>>>>>>>…the�driver�package�instructions�-�this�is�theƒ<<<<<<<,*‚>>>>>>>…spot�the�file(s)�go�into!!–<<<<<<<*‚>>>>>>>µ<<<<<<<=*‚>>>>>>>…This�is�also�the�spot�for�code�for�a�driver…<<<<<<<>*‚>>>>>>>…that‚requires�other�types�of�initialization,ƒ<<<<<<<0*‚>>>>>>>…such‚as�clearing�an�interrupt.‘<<<<<<<*‚>>>>>>>µ' <<<<<<<*‚>>>>>>>‘MERGE�IT�HERE—<<<<<<<*<*ˆWhen�you�write�the�code�that�is�to�be�merged�here,�wrap�it*ˆaround�with�the�following:*:*ˆAt�the�beginning,�with�DRVRxOUT�referring�to�your�unique*ˆlabel,�put�this�code:*'*‹PEA„DRVRxOUT(PC)„IF�BUS�ERROR�OCCURS,*¢RETURN�OR�GO�ON�TO�NEXT*¢DRIVER'S�INITIALIZATION**‹MOVE.W�#'BE',-(A7)…SAVE�'BUS�ERROR'�FLAG*9*ˆThen�insert�the�code�to�do�what�you�need�to�do�for�this*ˆparticular�driver.**ˆAt�the�end,�put�this:***‹LEA„6(A7),A7ˆREMOVE�BUS�ERROR�FROM�STACK*DRVRxOUTƒEQU„**=*ˆIn�this�way,�if�the�code�for�one�driver�causes�a�bus�error,.*ˆthe�code�for�other�drivers�will�be�executed.*E*‚>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<G*********************************************************************** ŠENDééé=/*=/*†VME12X.SYSINIT.LG=/*K=/* Link chain file run at sysgen time to link SYSINIT.LO with a PREINIT.RO=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*?=/* Sysgen parameter PC = \PC = address at which to link driver=/* =LINK ,SYSINIT.LO,\LINKLS;HAMIXSSEG .INT:8 \PCINPUT PREINIT.ROINPUT ROGEN.ROINPUT &.INITDAT.ROINPUT &.SYSPAR.ROEND=/*=ENDééééééï( B* VME12X.MTYPE.SI - Memory type assignments for VME120/128 systems**‚System�memoryMTYPE$SRO‚EQU�MTYP1�read�onlyMTYPE$SRW‚EQU�MTYP1�read/write* *‚User�memoryMTYPE$URO‚EQU�MTYP1�read�onlyMTYPE$URW‚EQU�MTYP1�read/write**‚Partition�typesMTYPE$P0ƒEQU�MTYP0�partition�#0MTYPE$P1ƒEQU�MTYP1�partition�#1ééééééø 'TNT ASR AG  aa* *ˆTNT.ASR.AG*)ASR‡IDNTƒ11,11ŽASR�ADDRS.�FOR�I/O�MODULES*8*ASR-FILE OF ASR ADDRESSES OF I/O MODULES-NEEDED FOR IOI*ŠXDEFƒFMSASR,FHSASR,IOSASR ŠIFNEƒ\NOTNT �XDEFƒTNTASRŠENDCFMSASR„EQU„\FMSASRFHSASR„EQU„\FHSASRIOSASR„EQU„\IOSASR ŠIFNEƒ\NOTNTTNTASR‡EQU„\TNTASRŠENDCŠENDé( ééééé'MMULDR VERSADOSCIaa**ˆMMULDR.VERSADOS.CI*AMSG‰*************************************************************-MSG‰**ˆLDR�--�Loader�(trap�#4�server�task)Ž**AMSG‰*************************************************************TASKˆ&.LDR.LO,&LDRSTATE…=�'READ'ATTRIB„=�'CRIT'ATTRIB„=�'SYST'PRIORITY‚=�$C8 SESSIONƒ=�4LDRSTR„=�*ŒLDR�load�addr.SUBSˆMMU.LOADER.LGLINKˆMMU.LOADER.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCEND‰LDR5* Build VERSAdos patch chain file .VERSAPT.CF!=COPY‡VERSAPT.LDR.CF,VERSAPT.CF;Aééé) éé'FHSIOS VERSADOSCI''5aa**ˆFHSIOS.VERSADOS.CI*AMSG‰*************************************************************=MSG‰**ƒFHS�--�File�Handling�Services�(trap�#3�server�task)ƒ**AMSG‰*************************************************************TASKˆ&.FHS.LO,.FHSSTATE…=�'DORM'ATTRIB„=�'CRIT'ATTRIB„=�'RTIM'ATTRIB„=�'SYST' SESSIONƒ=�1PRIORITY‚=�$D1FHSSTR„=�*ŒFHS‚load�addr. FHSASR„=�*+2ŠFHS�ASR�entry�pointSUBSˆFHS.IXR.AG"ASM‰FHS.IXR.AG,FHS.IXR.RO,\ASMLS;R IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC SUBSˆ&.FHS.LG LINKˆ&.FHS.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCEND‰FHS#*�Build�VERSAdos‚.OSLIST.AG=COPY‡OSLIST.FHS.SI,OSLIST.AG;A5* Build VERSAdos patch chain file .VERSAPT.CF!=COPY‡VERSAPT.FHS.CF,VERSAPT.CF;A MSG‰?MSG‰***********************************************************.OSLIST.AG=COPY‡OSLIST.IOS.SI,OSLIST.AG;A5* Build VERSAdos patch chain file .VERSAPT.CF!=COPY‡VERSAPT.IOS.CF,VERSAPT.CF;Aéé6) 'IOS VERSADOSCI44aa**ˆIOS.VERSADOS.CI*?MSG‰***********************************************************.OSLIST.AG=COPY‡IOS.OSLIST.SI,OSLIST.AG;A5* Build VERSAdos patch chain file .VERSAPT.CF!=COPY‡IOS.VERSAPT.CF,VERSAPT.CF;Aééééé,'NOMMULDR6'SIO C'MACRO X' ¢'M600DRV 'M605DRV 'M610DRV ³'NOMMULDRVERSADOSCIBBaa* **ˆNOMMULDR.VERSADOS.CI*AMSG‰*************************************************************-MSG‰**ˆLDR�--�Loader�(trap�#4�server�task)Ž**AMSG‰*************************************************************TASKˆ&.LDR.LO,&LDRSTATE…=�'READ'ATTRIB„=�'CRIT'ATTRIB„=�'SYST'PRIORITY‚=�$C8 SESSIONƒ=�4LDRSTR„=�*ŒLDR�load�addr.SUBSˆNOMMU.LOADER.LGLINKˆNOMMU.LOADER.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCEND‰LDR5* Build VERSAdos patch chain file .VERSAPT.CF!=COPY‡VERSAPT.LDR.CF,VERSAPT.CF;Aééééé:'SIO ADDRESS CIOO Laa**ˆSIO.ADDRESS.CI*N******************************************************************************6*‚Short�I/O�Address�Space�Offsets�for�Standard�SYSGENsN*******************************************************************************H*‚NOTE:‚* 1.�These�addresses�are�coded�into�many�of�the�firmware�debuggers9*Œso�the�bug�can�access�the�device.‚REQUIRED�FOR�BOOTING!***‚Symbol�format�is:„Lnnn$mm*„where:„L=�location:*Œnnn=�VME�board�number/description�or�Vnn�for�VERSAmodule*Ž$=�separator*�mm=�board�number�01-99**I*------------------------------------------------------------------------.L050$01ƒ=�\SIOBASE+$1000�VME050�bd.�#1�address*žL050$01‚=�\L050$01I*------------------------------------------------------------------------5L300$01ƒ=�\SIOBASE+$0400�VME300�bd.�#1�address‚(GPIB)*žL300$01‚=�\L300$015L300$02ƒ=�\SIOBASE+$0440�VME300�bd.�#2�address‚(GPIB)*žL300$02‚=�\L300$02I*------------------------------------------------------------------------.L315$01ƒ=�\SIOBASE+$0000�VME315�bd.�#1�address*žL315$01‚=�\L315$01.L315$02ƒ=�\SIOBASE+$0200�VME315�bd.�#2�address*žL315$02‚=�\L315$02I*------------------------------------------------------------------------.L320$01ƒ=�\SIOBASE+$B00D�VME320�bd.�#1�address*žL320$01‚=�\L320$01.L320$02ƒ=�\SIOBASE+$AC0D�VME320�bd.�#2�address*žL320$02‚=�\L320$02I*------------------------------------------------------------------------.L331$01ƒ=�\SIOBASE+$3000�VME331�bd.�#1�address*žL331$01‚=�\L331$01.L331$02ƒ=�\SIOBASE+$3100�VME331�bd.�#2�address*žL331$02‚=�\L331$02.L331$03ƒ=�\SIOBASE+$3200�VME331�bd.�#3�address*žL331$03‚=�\L331$03.L331$04ƒ=�\SIOBASE+$3300�VME331�bd.�#4�address*žL331$04‚=�\L331$04.L331$05ƒ=�\SIOBASE+$3400�VME331�bd.�#5�address*žL331$05‚=�\L331$05.L331$06ƒ=�\SIOBASE+$3500�VME331�bd.�#6�address*žL331$06‚=�\L331$06I*------------------------------------------------------------------------.L333$01ƒ=�\SIOBASE+$3800�VME333�bd.�#1�address*žL333$01‚=�\L333$01G4P.L333$02ƒ=�\SIOBASE+$3900�VME333�bd.�#2�address*žL333$02‚=�\L333$02.L333$03ƒ=�\SIOBASE+$3A00�VME333�bd.�#3�address*žL333$03‚=�\L333$03.L333$04ƒ=�\SIOBASE+$3B00�VME333�bd.�#4�address*žL333$04‚=�\L333$04.L333$05ƒ=�\SIOBASE+$3C00�VME333�bd.�#5�address*žL333$05‚=�\L333$05.L333$06ƒ=�\SIOBASE+$3D00�VME333�bd.�#6�address*žL333$06‚=�\L333$06I*------------------------------------------------------------------------3LV30$01ƒ=�\SIOBASE+$1000�VM30ƒbd.�#1�address‚(MCCM)*žLV30$01‚=�\LV30$013LV30$02ƒ=�\SIOBASE+$1200�VM30ƒbd.�#2�address‚(MCCM)*žLV30$02‚=�\LV30$023LV30$03ƒ=�\SIOBASE+$1400�VM30ƒbd.�#3�address‚(MCCM)*žLV30$03‚=�\LV30$033LV30$04ƒ=�\SIOBASE+$1600�VM30ƒbd.�#4�address‚(MCCM)*žLV30$04‚=�\LV30$04I*------------------------------------------------------------------------ H*�NOTE:‚VM20,�VM21,�and�VM22�are�defined�sequentially�by�offsets�of�$200C*ˆas�needed.‚They�must�not�be�assigned�absolute�offsets�because�theB*ˆdebugger�BO�cmd�assumes�a�boot�from�controller�0�at�offset�0�and?*ˆwe�have�hard�disk�(VM21)�and�floppy�only�(VM20)�type�systems.ééé+ 'MACRO DCB SIdd RaaDCBDISK SIuuaaDCBGPIB SI~~ QaaDCBMTAPESI��$aaDCBPRT SI˜˜aaDCBTERM SI¡¡aaŠPAGEO********************************************************************************2*‚MACRO.DCB.SI‚--�DEFINES�BASIC�DCB�AND�CDB�MACROSF*†See�MACRO.DCB*.SI�for�specific�DCB�macros,�i.e.�DISK,TERM,GPIB,�etc.*C*‚SECTION�0ƒDCB�=�Device�Control�Block:‚contains�info�about�device,/*”including�default�configuration;�used�heavily*”by�FMS,�FHS,�IOS.G*‚SECTION�1ƒCDB�=�Channel�Data�Block:‚used�by�IOI�to�allocate�channels.*O******************************************************************************* G*‚DIPDCB�macro�defines�device-independent�portion�of�a�DCB.‚Used�by�the7*‚other�device�dependent�macros�DSKDCB,�CRTDCB,�PRTDCB.* DIPDCB MACRO.�DC.L„*+\1�Address�of�next�DCB�in�linked�list.+�DC.L„\2’ASCII�identification�for�this�DCB.�DC.L„0“Address�of�DCQ�entry.)�DC.L„\3’Name„of�task�making�the�request.,�DC.L„\4’Session�of�task�making�the�request.�DC.L„0“Address�of�LUT.;�DC.L„\5’Device�attributes�associated�with�DCB.�BKM�7/12/83!�DC.W„0“Write/Read�protect�codes.�DC.W„0“'Device�in�use'�flag.�DC.L„0“Write/Read�counts.#�DC.B„\6’Device�flag�(device�code).%�DC.B„\7’Device�flag�(device�status). �DC.L„\8’Channel�identification.3�DC.B„\9’Device�number�associated�with�the�channel.�DC.B„0“Task�priority.�DC.L„0“Current�record�#.7�DS.B„IOSBLNŽStorage�area�for�the�IOCB�being�processed.8�DC.L„0“Logical�address�of�IOCB�in�user's�address�space.6�DC.B„0“Config.�coordination�flag�(0�-->�at�defaults).�DC.B„0“Break�count.%�DC.L„0“Address�of�break�service�LUT.0�DC.L„0“Break�service�address.ƒ-----------------.�DC.L„0“Event�claimer�--�task�nameŒBKM�7/12/833�DC.L„0“Event�claimer�--�session�number‡BKM�7/12/839�DC.L„\A’Address�of�supervisor�DCB�or�Session‚BKM�7/12/830*œnumber�if�this�is�a�supervisor�DCB„BKM�7/12/839�DC.L„0“Supervisor/subordinate�DCB�open�count�BKM�7/12/836�DC.L„0,0,0,0�Device�independent/dependent�buffer�zone  ENDM PAGE*,*‚Macro�to�define�a�Channel�Data�Block�(CDB)7*‚Used�by�IOI�to�allocate�channels;�equates�are�in�LV5.*\4e/CDBLN�EQU�$2E„Length�of�the�CDB�data�structure. CDB MACRO�SECTION�1‡===�CDB�SECTION�===*�DC.L�*+CDBLN„Pointer�to�next�CDB�in�list.*�DC.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.2�DC.B�\C‰Segment�count.(Number�of�polling�entries)(�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ééé‰PAGE*!*‚Macro�to�define�DCB�for�a�Disk.* DSKDCB MACRO�SECTION�0‡===�DCB�SECTION�===( DIPDCB DDCBLN,\1,\2,\3,\4,\5,\6,\7,\8,0&�DC.B„0,0,0,0ƒSpace�for�status�fields.�DC.W„\9†Attributes�mask.�DC.W„\A†Parameters�mask.�DC.W„\B†Attributes�word.�DC.W„\C†#�of�bytes/sector.-�DC.L„\D†Total�#�of�sectors�--�returned�info.�DC.L„\E†Write�timeout.�DC.L„\F†Read‚timeout.�DC.B„\G†#�of�sectors/track.�DC.B„\H†#�of�heads.!�DC.W„\I†#�of�cylinders�on�media.�DC.B„\J†Interleave�factor.$�DC.B„\K†Spiral�offset�(in�sectors).'�DC.W„\L†Physical�sector�size�of�media.'�DC.W„\M†Starting�head�number�on�drive.&�DC.W„\N†Number�of�cylinders�on�drive.)�DC.W„\O†Precompensation�cylinder�number.-�DC.B„\P†Physical�sectors�per�track�on�drive.�DC.B„\Q†Stepping�rate./�DC.W„\R†Reduced�write�current�cylinder�number.�DC.W„\S†ECC�data�burst�length.?�DC.B„0,0‚2�bytes�reserved�as�offset�to�another�parameter�block  ENDMéééém PAGE*3*…Macro�to�define�a�GPIB�Device�Control�Block�(DCB)* GPDVDCB‚MACRO�SECTION�0‡===�DCB�SECTION�=== NOLIST/GPDVTYP‚SET�XDSGDEV‰Assume�bussable�DEVICE�type5USERLNƒSET�(\I+1)/2ˆUser�area�must�be�even�#�of�bytes4�IFNCƒ'\0',''ŽIF�P0�=�NULL�THEN�this�is�a�DEVICE�DCB7GPDVTYP‚SET�XDSGBUS‰ELSE�it�is�the�BUS�(channel)�itself4GPCCBNAM�SET�\KŽCCB�name�for�all�devices�on�this�BUS.GPDVCNT‚SET�\0+1ŒCurrent�#�devices�+�1�for�BUS.GPMAXCT‚SET�GPDVCNT‰Max.�#�devices�on�this�BUS)BUSDCBƒSET�*�L, ocation�of�DCB�for�this�BUS,�IFGT�GPDVCNT-15�Too�many�devices�specified?1GPDVCNT‚SET�0�Don't�gen�any�devices�for�this�BUS! LIST1 FAIL 400 TOO MANY DEVICES SPECIFIED FOR THIS BUS MEXIT ENDC1�IFEQ„GPCCBNAMŒVerify�CCB�name�has�been�specified GPDVCNT‚SET�0 LIST, FAIL 401 NO CCB NAME SPECIFIED FOR GPIB BUS MEXIT ENDC ENDC LIST,�IFGT�GPDVCNT�Check�for�valid�DCB�generationH DIPDCB USERLN+BDCILN,\1,IOSID,IOSESS,\2,\3,\4,GPCCBNAM,GPMAXCT-GPDVCNT,& BUSDCB�DC.B„0“DEVICE�STATUS�DC.B„XTGBUSŽCHANNEL�TYPE�DC.B„GPDVTYP�DEVICE�TYPE�DC.B„IODGPIB�DRIVER�CODE�DC.W„\5’ATTRIBUTE�MASK�DC.W„\6’PARAMETER�MASK�DC.W„\7’ATTRIBUTE�WORD �DC.W„0“RECORD�LENGTH�(NOT�USED)�DC.L„0“DEVICE�SIZE�(NOT�USED)%�DC.L„\8’WRITE�TIMEOUT�(MILLISECONDS)$�DC.L„\9’READ�TIMEOUT�(MILLISECONDS)&�DC.L„\A’END�OF�RECORD�CHARACTERISTICS$�DC.W„\B’EOS�CHARACTERS�(WRITE/READ)$�DC.B„\C’PARALLEL�POLL�CONFIGURATION�DC.B„\D’DEVICE�PRIMARY�ADDRESS.�DC.L„\E’WRITE�LENGTH�XFER�(FMT/IMAGE�#�BYTES)-�DC.L„\F’READ�LENGTH�XFER�(FMT/IMAGE�#�BYTES)$�DC.L„\G’READ�SECONDARY�ADDRESS�MASK%�DC.L„\H’WRITE�SECONDARY�ADDRESS�MASK�DC.L„0,0‘RESERVED6�DC.W„USERLNŽLENGTH�OF�USER�DEFINED�CONFIGURATION�AREA3�DC.L„\J’USER�DEFINED�I/O�FORMATTER�ROUTINE�ADDRESS*�DCB.BƒUSERLN,0ŒALLOCATE�USER�DEFINED�AREA‚NOLIST;GPDVCNT�SET�GPDVCNT-1ˆDECREMENT�DEVICE�COUNTER�FOR�THIS�BUS‚LIST‚ENDC‚ENDM*4*…Macro�to�recursively�create�all�default�GPIB�DCB's*1*ˆP0�=�(FIRST)�DEFAULT�DEVICE�NAME�(ASCII�STRING)*vA GPDFDCB MACRO�SECTION�0‡===�DCB�SECTION�=== NOLIST �IFNCƒ'\0',''8GPDFNAM‚SET�'\0'†Define�NAME�if�this�is�first�invocation ENDC LIST2�IFGT�GPDVCNTŠCheck�if�device�counter�is�exhaustedE GPDVDCB GPDFNAM,GPD$AT2,0,1,GPD$ATM,GPD$PAM,GPD$ATW,GPD$WTO,GPD$RTO,E& GPD$EOR,GPD$EOS,GPD$PPC,GPD$PRA,GPD$WLN,GPD$RLN,GPD$RSM,GPD$WSM,0,0 NOLIST7GPDFNAM�SET�GPDFNAM+1‚Bump�the�NAME�for�the�next�device LIST'�GPDFDCBƒ\1‹Invoke�self�for�next�device ENDC  ENDMéééééé PAGE*/*‚Macro�to�define�DCB�for�a�magnetic�tape�drive* MTADCB MACRO�SECTION�0‡===�DCB�SECTION�===( DIPDCB MDCBLN,\1,\2,\3,\4,\5,\6,\7,\8,0&�DC.B„0,0,0,0ƒSpace�for�status�fields.�DC.W„\9†Attributes�mask.�DC.W„\A†Parameters�mask.�DC., W„\B†Attributes�word.5�DC.W„0‡#�of�bytes/Versados�logical�sector�(not�used)7�DC.L„0‡Total�#�of�Versados�sectors�on�media�(not�used)�DC.L„\C†Write�timeout.�DC.L„\D†Read‚timeout.4�DC.B„\E†Requested�density�for�write�from�loadpoint.3�DC.B„\F†Number�of�read�tries�before�error�message..�DC.B„\G†Number�of�write�tries�before�erasing.1�DC.B„\H†Number�of�erasures�before�error�message.*=*ˆThe�IOSWTO�above�is�a�system�timeout�for�the�write�command.F*ˆThe�IOSRTO�above�is�a�system�timeout�for�every�command�except�write.6*ˆThe�mag�tape�driver�needs�more�specialized�timeouts.C*ˆThe�driver�uses�the�value�in�IOSWTO�for�erase�and�write�filemark.9*ˆThe�driver�uses�the�timeouts�listed�below�for�the�other *ˆcommands.C*ˆThe�IOSRTO�has�to�be�larger�than�the�largest�timeout�that�we�need5*ˆfor�the�commands�we�may�get�in�the�mag�tape�driver.*�DC.L„\I†Timeout�for�read4�DC.L„\J†Timeout�for�space�forward�and�space�reverse�DC.L„\K†Timeout�for�rewindC�DC.L„\L†Timeout�for�search�forward�and�search�reverse�for�filemark'�DC.L„0,0…Bytes�reserved�for�future�use.�DC.W„0,0,0,0ƒ8�bytes�reserved�for�future�use.  ENDMéé‡% PAGE*$*‚Macro�to�define�DCB�for�a�Printer.* PRTDCB MACRO�SECTION�0‡===�DCB�SECTION�===( DIPDCB PDCBLN,\1,\2,\3,\4,\5,\6,\7,\8,0&�DC.B„0,0,0,0ƒSpace�for�status�fields.�DC.W„\9ˆAttributes�mask.�DC.W„\AˆParameters�mask.�DC.W„\BˆAttributes�word.�DC.W„\Cˆ#�of�characters/line.�DC.L„\Dˆ#�of�lines/page.�DC.L„\EˆWrite�timeout.�DC.L„0‰Read�timeout.�DC.W„\FˆLogical�line�length�DC.B„\GˆEnd-of-line�character.&�DCB.Bƒ15,0†Reserved�space�(15�bytes).  ENDMéééééé- � PAGE*%*‚Macro�to�define�DCB�for�a�Terminal.* CRTDCB MACRO�SECTION�0‡===�DCB�SECTION�===( DIPDCB CDCBLN,\1,\2,\3,\4,\5,\6,\7,\8,0&�DC.B„0,0,0,0ƒSpace�for�status�fields.�DC.W„\9†Attributes�mask.�DC.W„\A†Parameters�mask.�DC.W„\B†Attributes�word.�DC.W„\C†#�of�characters/line.�DC.L„\D†#�of�lines/page.�DC.L„\E†Write�timeout.�DC.L„\F†Read�timeout.�DC.B„\G†XOFF�char.�DC.B„\H†XON�char.�DC.B„\I†BREAK�EQUIVALENT�char.�DC.B„\J†DISCARD�OUTPUT�char.�DC.B„\K†REPRINT�LINE�char.�DC.B„\L†CANCEL‚LINE�char.�DC.L„\M†Read�terminators.�DC.L„\N†End-of-line�string.�DC.B„\O†BAUD�rate�code.�DC.B„\P†NUL�padding.�DC.B„\Q†Terminator�class.(�DC.B„\R†Terminal�type�(0=EXORterm�155).:�DC.B„0,0,0,0,0,0,0,0,0,0‚Internal�use�only�--�do�not�use.�DC.B„0,0,0,0,0,0�Reserved.  ENDMééé陚' M605MEM AG®®;aaM610MEM AG¿¿~aaM615MEM AGØØ<aaM625MEM AGéé9aaIOCINT AGúúºaaRADMEM AG JssRIOMEM AG6aaM605MEM CI-- aaRADMEM CI66 aaM610MEM CI?? aaM625DRV CIHHaaM615MEM CIQQ aaRIOMEM CIZZ aaM625MEM CIcc aaM600DRV CIllaaM605DRV CIuuaaM610DRV CI~~aaM615DRV CI‡‡aaPCDRV CI��aaRADDRV CI™™aa**ˆ&.M605MEM.AG*J*==========================================================================*‚Code�added�to�allocate�memory�for�table�used�by�DAC�driver.6*‚This�code�is�assembled�and�linked�in�at�sysgen�time.*>*‚06/01/84‚psg‚Changed�conditional�name�for�new�sysgen�method.*‚01/11/84‚bwn*K*==========================================================================‰IFNE„\NVME6055T0PAGAL‚EQU…4‘Page�allocation�directive�#�for�Trap�0.6‰XREF„DACTBLŒSYSPAR�location�containing�DACTBL�addre- ss ‰XDEF„M605MEM%‰INCLUDE�&.M605DRV.EQ†DAC�equate�file* ‰SECTIONƒ8 M605MEM‚EQU‡*>DCMEM1ƒMOVE.L�#\NVME605,D2‡get�number�of�DAC�modules�in�system0‰BEQ.S‚NODACS�branch�if�no�DAC�modules�on�system<‰MOVE.L�#\NU605,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�#\NVME605,D4‡get�number�of�DAC�modules-‰MULUƒ#\NU605,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�words¦4¯3‰MOVE.W�#$FFFF,D4Šstore�this�in�all�entry�locations&DACCLRƒMOVE.W�D4,(A0)+‹set�the�entries‰SUB.W‚#1,D5Ždecrement�counter ‰BNE.S‚DACCLR�branch�if�not�done NODACSƒEQU„*‰ENDC*‰ENDééééééé**ˆ&.M610MEM.AG*„IFNEƒ\NVME610+\NVME620 ŠNOFORMATŠPAGE0PAGAL…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 M610QSIZ. 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ƒM610MEMŠSPC„2 ŠSECTION�8ŠSPC„28M610QSIZ‚EQU„\M610QSIZ�This�is�the�size�of�the�Interrupt&*£Processing�Queue�in�terms�of�maximum,*£number�of�entries�the�queue�is�to�contain.ŠSPC„2ŠINCLUDE‚&.BAB.EQ*‰INCLUDE‚&.BAB.EQŠINCLUDE‚&.M610INTQ.EQ*‰INCLUDE‚&.M610INTQ.EQ ŠSECTION‚8ŠSPC„2 M610MEM‚EQU‡*9INPMEM„CLR.L‚D0“Clear�all�registers�to�be�used�in�calling·2À7È3Š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�#M610QSIZ,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.*ŠFORMAT„ENDC‰ENDéééé**ˆ&.M615MEM.AG*J*==========================================================================*‚Code�added�to�allocate�memory�for�table�used�by�ACO�driver.H*‚This�code�is�assembled�and�linked�into�the�approprate�initializer�file*‚at�SYSGEN�time.*K*==========================================================================‰IFNE„\NVME6155T0PAGAL‚EQU…4‹Page�allocation�directive�#�for�Trap�0.6‰XREF„ACOTBL…SYSPAR�location�containing�ACOTBL�address ‰XDEF„M615MEM*&*ˆINCLUDE�&.M615DRV.EQ…ACO�equate�file%‰INCLUDE�&.M615DRV.EQ…ACO�equate�file* ‰SECTIONƒ8 M615MEM‚EQU‡*HACMEM1ƒMOVE.L�#\NVME615,D2�(NVME615)�get�number�of�ACO�modules�in�system0‰BEQ.S‚NOACOS�branch�if�no�ACO�modules�on�system?‰MOVE.L�#\NU615,D3‰(NU615)get�number�of�interrupt�levels/module$‰MOVE.L�D2,D4Žsave�number�of�modules!‰MULUƒD3,D4Žget�number�of�ACO-IDs-‰MULUƒ#ACOIDLNG,D4‡get�#�of�bytes�for�ACO-IDs%‰ADD.L‚#ACONTRY,D4ˆadd�in�header�size)‰MULUƒ#IOLNG,D2‰get�#�of�bytes�for�IO�map,‰ADD.L‚D4,D2Ž#�of�bytes�needed�for�ACO�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‚ACOERR�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‚ACOOKŽbranch�if�good�return1ACOERRƒMOVE.L�#32,A0�fatal�error�-�go�stop�system‰TRAPƒ#08ACOOK„MOVE.L�#'!ACO',ACOEYE(A0)�set�ACO�table�eyecatcher)‰MOVE.W�D5,ACOLNG(A0)†#�of�bytes�in�table5‰MOVE.W�#ACONTRY,ACOOFST(A0)�offset�to�ACO-ID�entries&‰MOVE.W�D4,ACOIO(A0)‡offset�to�IO�maps'‰CLR.B‚ACONAL(A0)‰no�ACOs�allocated�yet8‰MOVE.L�#\NVME615,D4ƒ(NVME615)�get�number�of�ACO�modules5‰MULUƒ#\NU615,D4‰(NU615)�get�number�of�ACO-ID�entries-‰MOVE.B�D4,ACONMAX(A0)…max�number�of�ACO-ID's6‰MOVE.L�A0,ACOTBLŠsave�table�address�in�system�params.0‰LEA„ACOID(A0),A0‡start�address�of�table�entries/‰SUB.W‚#ACONTRY,D5ˆnumber�of�bytes�to�set�to�FF‰ASR.W‚#1,D5Žnumber�of�words/ Ð3Ù 3‰MOVE.W�#$FFFF,D4Šstore�this�in�all�entry�locations&ACOCLRƒMOVE.W�D4,(A0)+‹set�the�entries‰SUB.W‚#1,D5Ždecrement�counter ‰BNE.S‚ACOCLR�branch�if�not�done NOACOSƒEQU„*‰ENDC**‰END ééééééé**ˆ&.M625MEM.AG*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„\NVME6255T0PAGAL‚EQU…4‹Page�allocation�directive�#�for�Trap�0.6‰XREF„DCOTBL…SYSPAR�location�containing�DCOTBL�address ‰XDEF„M625MEM&*ˆINCLUDE�&.M625DRV.EQ†DCO�equate�file%‰INCLUDE�&.M625DRV.EQ†DCO�equate�file* ‰SECTION�8 M625MEM‚EQU‡*>DCMEM1ƒMOVE.L�#\NVME625,D2‡get�number�of�DCO�modules�in�system0‰BEQ.S‚NODCOS�branch�if�no�DCO�modules�on�system,‰MOVE.L�#\NU625,D3‰get�number�of�user/boards$‰MOVE.L�D2,D4Žsave�number�of�modules!‰MULUƒD3,D4Žget�number�of�DCO-IDs-‰MULUƒ#DCOIDLNG,D4‡get�#�of�bytes�for�DCO-IDs%‰ADD.L‚#DCONTRY,D4ˆadd�in�header�size)‰MULUƒ#IOLNG,D2‰get�#�of�bytes�for�IO�map,‰ADD.L‚D4,D2Ž#�of�bytes�needed�for�DCO�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‚DCOERR�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‚DCOOKŽbranch�if�good�return1DCOERRƒMOVE.L�#32,A0�fatal�error�-�go�stop�system‰TRAPƒ#08DCOOK„MOVE.L�#'!DCO',DCOEYE(A0)�set�DCO�table�eyecatcher)‰MOVE.W�D5,DCOLNG(A0)†#�of�bytes�in�table5‰MOVE.W�#DCONTRY,DCOOFST(A0)�offset�to�DCO-ID�entries&‰MOVE.W�D4,DCOIO(A0)†offset�to�IO�maps'‰CLR.B‚DCONAL(A0)‰no�DCOs�allocated�yet.‰MOVE.L�#\NVME625,D4‡get�number�of�DCO�modules-‰MULUƒ#\NU625,D4‰get�number�of�DCO-ID�entries-‰MOVE.B�D4,DCONMAX(A0)…max�number�of�DCO-ID's6‰MOVE.L�/ A0,DCOTBLŠsave�table�address�in�system�params.0‰LEA„DCOID(A0),A0‡start�address�of�table�entries/‰SUB.W‚#DCONTRY,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á3ê&DCOCLRƒMOVE.W�D4,(A0)+‹set�the�entries‰SUB.W‚#1,D5Ždecrement�counter ‰BNE.S‚DCOCLR�branch�if�not�done NODCOSƒEQU„*‰ENDC*‰ENDééééééé* *ˆ&.IOCINT.AG*F***********************************************************************#*�IOCINT�I/O�CHANNEL�CCB�ALLOCATION*$*�COPYRIGHTED�1982�BY�MOTOROLA,�INC.*F************************************************************************�PROGRAM�NAME:‚IOCINT*D*�REV.‚1.00‚6/14/82ƒ(RONI�WOOD)�-�ALLOCATE�ALL�CCB'S�FOR�I/O�CHANNEL*¥DEVICE�DRIVERS.*�SUPPORT�TABLES:‚CHANNEL�CONTROL�BLOCKS�(CCB)*’DEVICE�CONTROL�BLOCKS�(DCB)*F**********************************************************************‡NOLIST‡INCLUDE�&.TR1.EQ‡INCLUDE�&.EXE.EQ‡INCLUDE�&.LV5.EQ‡LIST*†INCLUDE�&.TR1.EQ*†INCLUDE�&.EXE.EQ*†INCLUDE�&.LV5.EQ*‡INCLUDE�MACRO.DCB.SI*†INCLUDE�MACRO.DCB.SI*!IOCINT‚IDNT‚1,0„I/O�CHANNEL�CCB'S‰OPTƒMEX* ‰XDEF†IOSEG* SECTION 1*9*SET UP CHANNEL CONTROL BLOCKS FOR DEVICES ON I/O CHANNEL*K****************************************************************************-*ˆINTERRUPT�VECTORS�AND�LEVELS�ON�I/O�CHANNEL*!*ˆVECTORSƒVM02†VM03†VME110„VMES10**‰IOCVEC1ƒ$71‡$49‡$19‡$41*‰IOCVEC2ƒ$72‡$4A‡$1A‡$43*‰IOCVEC3ƒ$73‡$4B‡$1B‡$44*‰IOCVEC4ƒ$74‡$4C‡$1C‡$45** *ˆLEVELS„VM02†VM03†VME110„VMES10**ˆIOCLVL1…2‰3‰1‰2*ˆIOCLVL2…3‰4‰2‰4*ˆIOCLVL3…4‰5‰3‰5*ˆIOCLVL4…5‰6‰4‰6**6*ˆINTERRUPT�VECTOR�1�CORRESPONDS�TO�INTERRUPT�LEVEL�1,*ˆAND�SO�FORTH.5*ˆPLEASE�BE�SURE�THAT�YOUR�BOARD�IS�JUMPERED�PROPERLY6*ˆTO�PRODUCE�THE�INTERRUPT�VECTOR�AND�LEVEL�CALLED�FOR*ˆIN�THE�CDB�MACRO.**ˆI/O�CHANNEL�BASE�ADDRESSES0 **—VM02†VM03†VME110„VMES10***ˆIOCBASE:†$F80000ƒ$FA0000ƒ$FE6000ƒ$F1C000** IOSEG EQU *H************************************************************************‰PAGEH*************************************************************************F*ƒIf�any�RAD�boards�are�specified�in�.CNFGDRVR.CI,�include�the3* code to perform CCB allocations for those boards.* ‚IFNE�\NRADŒINCLUDEƒ&.XRADIOC.SI‚ENDC‰PAGEòVûLH*************************************************************************F*ƒIf�any�RIO�boards�are�specified�in�.CNFGDRVR.CI,�include�the3* code to perform CCB allocations for those boards.* ‚IFNE�\NRIOŒINCLUDEƒ&.XRIOIOC.SI‚ENDC‰PAGEH*************************************************************************J*ƒIf�any�VME�600�boards�are�specified�in�.CNFGDRVR.CI,�include�the3* code to perform CCB allocations for those boards.* ‚IFNE�\NVME600ŒINCLUDEƒ&.XM600IOC.SI‚ENDC‰PAGEH*************************************************************************J*ƒIf�any�VME�605�boards�are�specified�in�.CNFGDRVR.CI,�include�the3* code to perform CCB allocations for those boards.* ‚IFNE�\NVME605ŒINCLUDEƒ&.XM605IOC.SI‚ENDC‰PAGEH*************************************************************************I*ƒIf�any�VME�610�or�VME�620�boards�are�specified�in�.CNFGDRVR.CI,?* include the code to perform CCB allocations for those boards.* ‚IFNE�\NVME610+\NVME620ŒINCLUDEƒ&.XM610IOC.SI‚ENDC‰PAGEH*************************************************************************J*ƒIf�any�VME�615�boards�are�specified�in�.CNFGDRVR.CI,�include�the3* code to perform CCB allocations for those boards.* ‚IFNE�\NVME615ŒINCLUDEƒ&.XM615IOC.SI‚ENDC‰PAGE<*************************************************************J*ƒIf�any�VME�625�boards�are�specified�in�.CNFGDRVR.CI,�include�the3* code to perform CCB allocations for those boards.*‚IFNE�\NVME625‹INCLUDE„&.XM625IOC.SI‚ENDC*I***************************************************************************‰DC.L�0�END�OF�CCB'S‰DS.B†$10‡STACK�AREA STACK„EQU‡***ˆALLOCATE�CHANNEL*ALLBLKƒDC.B…XDCALL�COMMAND�CODE‰DC.B„0“COMMAND�SUB-CODE‰DC.B„0“RESERVED'‰DC.B…XOPEXC�OPTIONS�(EXCLUSIVE�ACCESS)‰DC.L„0“CHANNEL�MNEMONIC)‰DS.B„XIOALN+(2*XIOXLN)-XIOPRM†PARAMETERS‰DC.L„0“PRECAUTION*5*ˆWALK�CCB�CHAIN�AND�ALLOCATE�ALL�KNOWN�I/O�CHANNELS.**INIT…MOVE.L‚#STACK,A7‹SET�UP�STACK�POINTER,‰MOVE.L‚#IOSEG,A1…SET�UP�POINTER�TO�CCB�LIST‰TST.Lƒ(A1)ˆANY�TO�DO?‰BEQ.S�INIT40ˆBRANCH�IF�NO0‰MOVE.L‚#ALLBLK,A0ŠSET�UP�POINTER�TO�PARAM�BLOCK2INIT10ƒMOVE.W‚XCDBOPT(A1),XIOOPT-1(A0)‚GET�OPTIONS6‰MOVE.L‚XCDBAID(A1),XIOCID(A0)�SET�UP�CHANNEL�MNEMONIC3‰MOVEM.L�XCDBPRM(A1),D0-D5/A2-A4ƒPICK�UP�PARAMETERS=‰MOVEM.L�D0-D5/A2-A4,XIOPRM(A0)„MOVE�PARAMETERS�TO�PARAM�BLOC/INIT15ƒMOVE.L‚#XCCMR,D0‹SET�UP�DIRECTIVE�NUMBER‰TRAPƒ#1“ALLOCATE�CHANNEL)INIT17ƒMOVE.L‚XCDBPTR(A1),A1†GET�NEXT�CCB ‰TST.L�(A1)‰BNE.SƒINIT10ŽNOT�FINISHEDINIT40ƒERQ.TERM**ˆABORT* KILL…EQU…*'‰MOVEM.L�D0/A0,-(A7)‰SAVE�REG�D0�AND�A0‰ERQ.ABORT‚#0�ABORT�SELF‰PAGE ‰END…INITé0 ééé*J*=========================================================================*?*‚Code�added�to�allocate�memory�for�tables�used�by�RAD1�driver.*K*==========================================================================7‰XREF†RAD1TBLƒSYSPAR�loc�containing�addr�of�RAD�tables. ‰XREF†KILLER *ˆBRA‡RADMEM*ˆINCLUDEƒ&.RADDRV.EQ‰INCLUDEƒ&.RADDRV.EQ ‰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�#�o1 f�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�table5Š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�FF0ŠASR.W‚#1,D5Žnumber�of�words3Š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„*ŠENDééééééé**ˆ&.M605MEM.CI*GMSG‰*******************************************************************#MSG‰*‚MVME605�driver�initializationGMSG‰******************************************************************* SUBSˆ&.M605MEM.AGASM‰&.M605MEM.AG,NEW.RO,\ASMLS IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC INCLUDE…&.ROGEN.CIé1 ééééé%* *ˆ&.RADMEM.CI*GMSG‰*******************************************************************MSG‰*‚RAD�driver�initializationGMSG‰******************************************************************* SUBSˆ&.RADMEM.AGASM‰&.RADMEM.AG,NEW.RO,\ASMLS IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC INCLUDE…&.ROGEN.CIéééééé.**ˆ&.M610MEM.CI*EMSG‰*****************************************************************'MSG‰*‚MVME610/620„driver�initializationDMSG‰**************************************************************** SUBSˆ&.M610MEM.AGASM‰&.M610MEM.AG,NEW.R2 O,\ASMLS IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC INCLUDE…&.ROGEN.CIéééééé7**ˆ&.M625DRV.CI*GMSG‰*******************************************************************!MSG‰**‚VME�625�DRIVER�-‚DC�OUTPUTGMSG‰******************************************************************* *‚Set�Process�Control�Flag=�ON&PCDRV„=�\&PCDRV+1 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M625DRV.CF,VERSAPT.CF;A M625DRVƒ=�*SUBSˆ&.M625IOC.SISUBSˆ&.M625DRV.LGLINKˆ&.M625DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.M625DRV.LOEND‰&.M625DRV.LOééééé2 @**ˆ&.M615MEM.CI*GMSG‰*******************************************************************MSG‰*‚615�driver�initializationGMSG‰******************************************************************* SUBSˆ&.M615MEM.AGASM‰&.M615MEM.AG,NEW.RO,\ASMLS IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC INCLUDE…&.ROGEN.CIééééééI* *ˆ&.RIOMEM.CI*GMSG‰*******************************************************************MSG‰*‚RIO�driver�initializationGMSG‰******************************************************************* SUBSˆ&.RIOMEM.AGASM‰&.RIOMEM.AG,NEW.RO,\ASMLS IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC INCLUDE…&.ROGEN.CIéééé3 ééR**ˆ&.M625MEM.CI*GMSG‰*******************************************************************MSG‰*‚625�driver�initializationGMSG‰******************************************************************* SUBSˆ&.M625MEM.AGASM‰&.M625MEM.AG,NEW.RO,\ASMLS IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC INCLUDE…&.ROGEN.CIéééééé[**ˆ&.M600DRV.CI*GMSG‰*******************************************************************3MSG‰**„VME�600�DRIVER�-‚ANALOG�TO�DIGITAL�CONVERTERGMSG‰******************************************************************* *‚Set�Process�Control�Flag=�ON&PCDRV„=�\&PCDRV+1 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M600DRV.CF,VERSAPT.CF;A +M600DRVƒ=�*ŒMVME600/601�driver�base�address!SUBSˆ&.M600IOC.SI�CCB�allocations1SUBSˆ&.M600DRV.LG�Driver�module�LINK�command�fileLINKˆ&.M600DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.M600DRV.LOEND‰&.M600DRV.LOé3 ééééd**ˆ&.M605DRV.CI*GMSG‰*******************************************************************%MSG‰**„VME�605�DRIVER�-‚ANALOG�OUTPUTGMSG‰******************************************************************* *‚Set�Process�Control�Flag=�ON&PCDRV„=�\&PCDRV+1 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M605DRV.CF,VERSAPT.CF;A M605DRVƒ=�*SUBSˆ&.M605IOC.SISUBSˆ&.M605DRV.LGLINKˆ&.M605DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.M605DRV.LOEND‰&.M605DRV.LOééééém**ˆ&.M610DRV.CI*GMSG‰*******************************************************************-MSG‰**‚VME�610/620�DRIVER�-�AC�INPUT/DC�INPUTGMSG‰******************************************************************* *‚Set�Process�Control�Flag=�ON&PCDRV„=�\&PCDRV+1 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M610DRV.CF,VERSAPT.CF;A +M610DRVƒ=�*ŒMVME610/620�driver�base�address!SUBSˆ&.M610IOC.SI�CCB�allocations1SUBSˆ&.M610DRV.LG�Driver�module�LINK�command�fil4 eLINKˆ&.M610DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.M610DRV.LOEND‰&.M610DRV.LOééééév**ˆ&.M615DRV.CI*GMSG‰*******************************************************************!MSG‰**„VME�615�DRIVER�-‚AC�OUTPUTGMSG‰******************************************************************* *‚Set�Process�Control�Flag=�ON&PCDRV„=�\&PCDRV+1 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M615DRV.CF,VERSAPT.CF;A M615DRVƒ=�*SUBSˆ&.M615IOC.SISUBSˆ&.M615DRV.LGLINKˆ&.M615DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.M615DRV.LOEND‰&.M615DRV.LOééééé4 * *ˆ&.PCDRV.CI* IFGTˆ\NRADƒINCLUDE…&.RADMEM.CIENDC* IFGTˆ\NRIOƒINCLUDE…&.RIOMEM.CIENDC* IFGTˆ\NVME605ƒINCLUDE…&.M605MEM.CIENDC*IFGTˆ\NVME610+\NVME620ƒINCLUDE…&.M610MEM.CIENDC* IFGTˆ\NVME615ƒINCLUDE…&.M615MEM.CIENDC* IFGTˆ\NVME625ƒINCLUDE…&.M625MEM.CIENDCééééééˆ* *ˆ&.RADDRV.CI*GMSG‰*******************************************************************MSG‰**„RAD�DRIVERGMSG‰******************************************************************* *‚Set�Process�Control�Flag=�ON&PCDRV„=�\&PCDRV+1 5* Build VERSAdos patch chain file .VERSAPT.CF$=COPY‡VERSAPT.RADDRV.CF,VERSAPT.CF;A RADDRV„=�*SUBSˆ&.RADIOC.SISUBSˆ&.RADDRV.LGLINKˆ&.RADDRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.RADDRV.LOEND‰&.RADDRV.LOééééé5 é‘.' RIODRV CI¦¦aaIOCI CI¯¯aaM600DRV LG¸¸aaM605DRV LGÁÁaaM610DRV LGÊÊaaM615DRV LGÓÓaaM625DRV LGÜÜaaIOCINT LGååaaIOCFAIL LGîîaaRADDRV LG÷÷aaRIODRV LGaaM600DRV NW  jaaM600FORTNW:ÏaaM605DRV NWWWŠaaM610DRV NWpp"¸aaM615DRV NW™™àaaM625DRV NWºº*>aaRADDRV NWëë¥aaRIODRV NW  µaaM600IOC SI-- aa* *ˆ&.RIODRV.CI*GMSG‰*******************************************************************MSG‰**„RIO�DRIVERGMSG‰******************************************************************* *‚Set�Process�Control�Flag=�ON&PCDRV„=�\&PCDRV+1 5* Build VERSAdos patch chain file .VERSAPT.CF$=COPY‡VERSAPT.RIODRV.CF,VERSAPT.CF;A RIODRV„=�*SUBSˆ&.RIOIOC.SISUBSˆ&.RIODRV.LGLINKˆ&.RIODRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.RIODRV.LOEND‰&.RIODRV.LOééééééž* *ˆ&.IOCI.CI*MSG$MSG‰Start�of�I/O�channel�initializerMSGTASKˆ&.IOCI.LOSTATE…=�'READ' SESSIONƒ=�1PRIORITY‚=�$DA IOCISTRƒ=�* SUBSˆ&.IOCINT.AG'ASM‰&.IOCINT.AG,&.IOCINT.RO,\ASMLS;Z=50 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AEN5 DC SUBSˆ&.IOCINT.LGLINKˆ&.IOCINT.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDC END‰&.IOCI.LOéééééé§=/*=/*†&.M600DRV.LG=/*==/* Link chain file run at sysgen time to link MVME600 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M600DRV = \M600DRV = address at which to link driver=/* =LINK ,&.M600DRV.LO,\LINKLS;MIXHSEG M600:8 \M600DRVINPUT &.M600DRV.ROEND=/*=ENDéééééé6 °=/*=/*†&.M605DRV.LG=/*==/* Link chain file run at sysgen time to link MVME605 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M605DRV = \M605DRV = address at which to link driver=/* =LINK ,&.M605DRV.LO,\LINKLS;MIXHSEG DAC1:8 \M605DRVINPUT &.M605DRV.ROINPUT &.SYSPAR.ROEND=/*=ENDéééééé¹=/*=/*†&.M610DRV.LG=/*==/* Link chain file run at sysgen time to link MVME610 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M610DRV = \M610DRV = address at which to link driver=/* =LINK ,&.M610DRV.LO,\LINKLS;MIXHSEG SEG0:0 \M610DRVINPUT &.M610DRV.ROINPUT &.SYSPAR.ROEND=/*=ENDéééé6 ééÂ=/*=/*†&.M615DRV.LG=/*==/* Link chain file run at sysgen time to link MVME615 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M615DRV = \M615DRV = address at which to link driver=/* =LINK ,&.M615DRV.LO,\LINKLS;MIXHSEG M615:8 \M615DRVINPUT &.M615DRV.ROINPUT &.SYSPAR.ROEND=/*=ENDééééééË=/*=/*†&.M625DRV.LG=/*==/* Link chain file run at sysgen time to link MVME625 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M625DRV = \M625DRV = address at which to link driver=/* =LINK ,&.M625DRV.LO,\LINKLS;MIXHSEG M625:8 \M625DRVINPUT &.M625DRV.ROINPUT &.SYSPAR.ROEND=/*=ENDéé7 ééééÔ=/*=/*†&.IOCINT.LG=/*5=/* Link chain file run at sysgen time to link IOCINT=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter IOCISTR = \IOCISTR = address at which to link driver=/*=LINK ,&.IOCI.LO,\LINKLS;IXHMSSEGMENT IOCI:1 \IOCISTRINPUT &.IOCINT.ROEND=/*=ENDééééééÝ=/*=/*†&.IOCFAIL.LG=/*6=/* Link chain file run at sysgen time to link IOCFAIL=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter IOCFSTR = \IOCFSTR = address at which to link driver=/*!=LINK ,&.IOCFAIL.LO,\LINKLS;IXHMSSEGMENT IOCF:0 \IOCFSTRINPUT &.IOCFAIL.ROEND=/*=END7 ééééééæ=/*=/*†&.RADDRV.LG=/*5=/* Link chain file run at sysgen time to link RADDRV=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*G=/* Sysgen parameter RADDRV = \RADDRV = address at which to link driver=/*=LINK ,&.RADDRV.LO,\LINKLS;MIXHSEG RAD1:8 \RADDRVINPUT &.RADDRV.ROINPUT &.SYSPAR.ROEND=/*=ENDééééééï8 =/*=/*†&.RIODRV.LG=/*9=/* Link chain file run at sysgen time to link RIO driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*G=/* Sysgen parameter RIODRV = \RIODRV = address at which to link driver=/*=LINK ,&.RIODRV.LO,\LINKLS;MIXHSEG RIO1:8 \RIODRVINPUT &.RIODRV.ROINPUT &.SYSPAR.ROEND=/*=ENDééééééøN==============================================================================F====‚NEWS�FILE�FOR�A/D…(MVME600�-�A/D�INPUT�BOARD)ƒDRIVER�RELEASE‚===="====‚Last�modified�-�01/31/85¬====N============================================================================== 8This driver is compatible with both RMS68K and VERSAdos.   .This driver consists of the following files -- ‰MVME600�driver�files:-�9992.&.M600DRV.SA‚MVME600�driver�source�file9�9992.&.M600CMDS.SA�MVME600�source�command/interrupt�code0�9992.&.M600CMTS.SA�MVME600�source�comments�file6�9992.&.M600INTL.SA�MVME600�source�initialization�code@�9992.&.M600SERV.SA�MVME600�source�driver�vector�table/rev�table-�9992.&.M600DRV.RO‚MVME600�driver�object�file5�9992.&.M600DRV.AF‚MVME600�driver�assembly�chain�file  ‰Files�for�system�configuration:"�9992.&.M600DRV.CIˆSYSGEN�commands"�9992.&.M600IOC.SIˆCCB�allocations3�9992.&.M600DRV.LGˆChain�file�to�link�in�the�driver#�9998.VERSAPT.M600DRV.CF‚Patch�file   ‰FORTRAN�interface�subroutines:0�9992.&.M600LIB.SA…Assembly�language�source�file&�9992.&.M600LIB.AF…Assembly�chain�file�9992.&.M600LIB.RO…Object�file  ‰"News"�file:�9992.&.M600DRV.NW…News�file7�9992.&.M600FORT.NW„Documentation�for�FORTRAN�interface   %‰Files�to�generate�the�test�programs: >‰9992.M600DRV.TEST600.SA‡Assembly�language�test�program�sourceA‰9992.M600DRV.TEST600.AF‡chain�file�for�assembly�language�programA‰9992.M600DRV.TEST600.LF‡chain�file�for�link�of�asm�lang.�program7‰9992.M600DRV.TEST600.LO‡assembly�language�test�program  KThe�MVME600�driver�source�file�is:�9992.&.M600DRV.SA.‚To�assemble�this�file%use the chain file 9992.&.M600DRV.AF.  >In order to incorporate this driver into your system, 8 you will=have to set some parameters in the .CNFGDRVR.CI file.  #This driver requires the following:;‰1)‚Memory�must�be�allocated�for�the�internal�driver�table.9‰2)‚A�channel�control�block�(CCB)�must�be�created�for�the< /6“commands�issued�for�each�MVME600�board�in�the�system. HThe size of the memory area set aside for the driver table is determinedJby�the�value�of�the�variable�specified�by�you�in�.CNFGDRVR.CI.‚Thevariable is "NVME600". =NVME600ƒThis�is�the�number�of�MVME600�boards�which�will�be�on6Šthe�system.‚Since�there�can�be�no�more�than�16�boards6Šon�the�I/O�Channel�(which�is�where�these�boards�are),&Šthe�maximum�value�of�"NVME600"�is�16.   ?To include the MVME600 driver in your SYSgen, do the following: <‰(1)�Use�COPYSGEN�to�get�all�the�files�needed�for�the�SYSgen�into�your�SYSgen�user�number.2�NOTE:‚Make�sure�argument�5�=�PCDRV�so�the�Process+”Control�Drivers�will�be�copied�by�COPYSGEN 9‰(2)�Set�the�variable�NVME600�in�the�.CNFGDRVR.CI,�file�for�the�processor�board�you�are�using. 8‰(3)�Check�the�file�M600IOC.SI�to�be�sure�that�the�CCB's�conform�to�your�configuration. BWhen setting up the "CDB" calls please note that each 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. JM600LIB.SA�is�assembled�using�the�M600LIB.AF�chain�file.‚M600LIB.RO�is�theEFORTRAN-callable subroutine which, when called by the user program orJFORTRAN test program, will invoke the appropriate MVME600 driver function. >After configuring your system and creating a VERSAdos with the>MVME605 driver included, you may want to run the provided testprogram. GM600DRV.TEST600.SA is an assembly language test program which tests theDMVME600�driver.‚This�program�prompts�the�user�to�run�a�subset�of�allDcommands�available�in�the�driver.‚It�can�be�used�as�a�first�check�ofAthe hardware and as an example of writing commands to the driver. ‰ENDN==============================================================================N==============================================================================   ½31-Jan-85  + 1 MVME600 A/D Interface User Documentation:ƒEach�of�the�following�module�are�located�in�&.M600LIB.SA.  „A.‚MODULE�NAME: ŠA2DOPN „B.‚MODULE�TYPE: ŠUtility�subroutine „C.‚MODULE�PURPOSE: /ŠThis�subroutine�provides�an�interface�with�the1ŠA/D�600/601�driver,�allowing�a�user�task�written+Šin�FORTRAN�to�open�one�or�more�measurement Šchannels. „D.‚CALLING�SEQUENCE: )‰CALL�A2DOPN(CHNLMN,CMDBLK,CMDBKL,STATUS) „E.‚ENTRY�CONDITIONS: ‰CHNLMN�=�Channel�Mnemonic’(4�ASCII�characters)#‰CMDBLK�=�I/O�Command�Block�address ’(Integer*4)"‰CMDBKL�=�I/O�Command�Block�length,‰STATUS�=�Status�returned�by�the�A/D�driver.  ‰Channel�Block�Format "‹+---------------+---------------+‹|‚Status�code’|"‹+---------------+---------------+‹|‚OPEN�command�code�($0001)„|"‹+---------------+---------------+‹|‚First�channel�number‰|"‹+---------------+---------------+‹:�:�:‹:�:�:"‹+---------------+---------------+ 34d##@'a++/93=7=;E?7CCG@Kd‹|‚Last�channel�numberŠ|"‹+---------------+---------------+  „F.‚EXIT�CONDITIONS: ,‰STATUS�=�Status�returned�by�the�A/D�driver.       -�1�-   ½31-Jan-85  „G.‚TABLES�USED: ‰Parameter�Block "‹+--9 -------------+---------------+ ‹|‚Command�code�(Initiate�I/O)‚|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Length�I/O�command�block…|"‹+---------------+---------------+ „H.‚MODULES�USED: „I.‚MODULES�CALLING�THIS�MODULE: -ŠAny�module�requiring�interface�to�A/D�driver #„J.‚ERROR�MESSAGES�GENERATED:„None.                        -�2�-   ½31-Jan-85  „A.‚MODULE�NAME:„A2DMRS #„B.‚MODULE�TYPE:„UTILITY�SUBROUTINE „C.‚MODULE�PURPOSE: /ŠThis�subroutine�provides�an�interface�with�the1ŠA/D�600/601�driver,�allowing�a�user�task�written2Šin�FORTRAN�to�request�single-ended�measurement(s)&Šfor�specified�measurement�channel(s). „D.‚CALLING�SEQUENCE: )ˆCALL�A2DMRS(CHNLMN,CMDBLK,CMDBKL,STATUS) „E.‚ENTRY�CONDITIONS: ‰CHNLMN�=�Channel�Mnemonic’(4�ASCII�characters)#‰CMDBLK�=�I/O�Command�Block�address ’(Integer*4)"‰CMDBKL�=�I/O�Command�Block�length                                     -�3�-   ½31-Jan-85  +‰I/O�Command�Block�(MEASURE�SINGLE�command) "‹+---------------+---------------+‹|‚Status�code’|"‹+---------------+---------------+!‹|‚MEASURE�command�code�($0003)�|"‹+---------------+---------------+ ‹|‚Repeat�count�(0�=�Infinity)‚|"‹+---------------+---------------+‹|‚Time�delay�between�sweeps„|‹+--…4�byte�fieldŠ--+‹|ƒ(omit�if�repeat�count�=�1)‚|"‹+---------------+---------------+‹|‚Command�Completion�Option„|"‹+---------------+---------------+›:•Channel�Blocks›:"‹+---------------+---------------+‹|‚Channel�number�|"‹+---------------+---------------+‹|‚Channel�Completion�Optionsƒ|"‹+---------------+---------------+!‹|‚Subroutine�Address�(Optional)|"‹+---------------+---------------+!‹|‚Subroutine�Address�(Optional)|"‹+---------------+---------------+‹|‚Buffer�address�|"‹+---------------+---------------+‹|‚Buffer�address�|"‹+---------------+---------------+‹|‚Size�of�buffer�in�bytes†|"‹+---------------+---------------+!‹|‚Trigger�Mode�and�Gain�Option�|"‹+---------------+---------------+                        -�4�-   ½31-Jan-85  „F.‚EXIT�CONDITIONS: ,‰STATUS�=�Status�returned�by�the�A/D�driver. „G.‚TABLES�USED: ‰Parameter�Block "‹+---------------+---------------+ ‹|‚Command�code�(Initiate�I/O)‚|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Length�I/O�command�block…|"‹+---------------+---------------+ „H.‚MODULES�USED: „I.‚MODULES�CALLING�THIS�MODULE: -ŠAny�module�requiring�interface�to�A/D�driver #„J.‚ERROR�MESSAGES�GENERATED:„None.                    -�5�-   ½31-Jan-85  „A.‚MODULE�NAME:„A2DMRD #„B.‚MODULE�TYPE:„U9 TILITY�SUBROUTINE „C.‚MODULE�PURPOSE: /ŠThis�subroutine�provides�an�interface�with�the1ŠA/D�600/601�driver,�allowing�a�user�task�written2Šin�FORTRAN�to�request�differential�measurement(s)&Šfor�specified�measurement�channel(s). „D.‚CALLING�SEQUENCE: )ˆCALL�A2DMRD(CHNLMN,CMDBLK,CMDBKL,STATUS) „E.‚ENTRY�CONDITIONS: ‰CHNLMN�=�Channel�Mnemonic’(4�ASCII�characters)#‰CMDBLK�=�I/O�Command�Block�address ’(Integer*4)"‰CMDBKL�=�I/O�Command�Block�length                                     -�6�-   ½31-Jan-85  1‰I/O�Command�Block�(MEASURE�DIFFERENTIAL�command) "‹+---------------+---------------+‹|‚Status�code’|"‹+---------------+---------------+!‹|‚MEASURE�command�code�($0004)�|"‹+---------------+---------------+ ‹|‚Repeat�count�(0�=�Infinity)‚|"‹+---------------+---------------+‹|‚Time�delay�between�sweeps„|‹+--…4�byte�fieldŠ--+‹|‚(omit�if�repeat�count�=�1)ƒ|"‹+---------------+---------------+‹|‚Command�Completion�Option„|"‹+---------------+---------------+›:•Channel�Blocks›:"‹+---------------+---------------+‹|‚Channel�number�|"‹+---------------+---------------+‹|‚Channel�Completion�Optionsƒ|"‹+---------------+---------------+!‹|‚Subroutine�Address�(Optional)|"‹+---------------+---------------+!‹|‚Subroutine�Address�(Optional)|"‹+---------------+---------------+‹|‚Buffer�address�|"‹+---------------+---------------+‹|‚Buffer�address�|"‹+---------------+---------------+‹|‚Size�of�buffer�in�bytes†|"‹+---------------+---------------+!‹|‚Trigger�Mode�and�Gain�Option�|"‹+---------------+---------------+                        -�7�-   ½31-Jan-85  „F.‚EXIT�CONDITIONS: ,‰STATUS�=�Status�returned�by�the�A/D�driver.  „G.‚TABLES�USED: ‰Parameter�Block "‹+---------------+---------------+ ‹|‚Command�code�(Initiate�I/O)‚|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Length�I/O�command�block…|"‹+---------------+---------------+  „H.‚MODULES�USED: „I.‚MODULES�CALLING�THIS�MODULE: -ŠAny�module�requiring�interface�to�A/D�driver #„J.‚ERROR�MESSAGES�GENERATED:„None.                  -�8�-   ½31-Jan-85  „A.‚MODULE�NAME:„A2DSTP #„B.‚MODULE�TYPE:„UTILITY�SUBROUTINE „C.‚MODULE�PURPOSE: /ŠThis�subroutine�provides�an�interface�with�the1ŠA/D�600/601�driver,�allowing�a�user�task�written+Šin�FORTRAN�to�stop�the�measurement�for�anyŠspecified�MEASURE�command. „D.‚CALLING�SEQUENCE: )‰CALL�A2DSTP(CHNLMN,CMDBLK,CMDBKL,STATUS) „E.‚ENTRY�CONDITIONS: ‰CHNLMN�=�Channel�Mnemonic’(4�ASCII�characters)#‰CMDBLK�=�I/O�Command�Block�address ’(Integer*4)"‰CMDBKL�=�I/O�Command�Block�length ‰Channel�Block�Format "‹+---------------+---------------+‹|‚Status�code’|"‹+---------------+---------------+‹|‚STOP�command�code�($0000)„|"‹+---------------+---------------+‹|‚First�channel�number‰|"‹+---------------+---------------+‹:�:�:‹:�:�:"‹+---------------+---------------+‹|‚Last�channel�numberŠ|"‹+---------------+---------------+                      -�9�-   ½31-Jan-85  „F.‚EXIT�CONDITIONS: ,‰STATU: S�=�Status�returned�by�the�A/D�driver. „G.‚TABLES�USED:ƒNone ‰Parameter�Block "‹+---------------+---------------+ ‹|‚Command�code�(Initiate�I/O)‚|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Length�I/O�command�block…|"‹+---------------+---------------+  „H.‚MODULES�USED: „I.‚MODULES�CALLING�THIS�MODULE: -ŠAny�module�requiring�interface�to�A/D�driver „J.‚ERROR�MESSAGES�GENERATED: ŠNone                 -�10�-   ½31-Jan-85  „A.‚MODULE�NAME: ŠA2DCLS „B.‚MODULE�TYPE: ŠUtility�subroutine „C.‚MODULE�PURPOSE: /ŠThis�subroutine�provides�an�interface�with�the1ŠA/D�600/601�driver,�allowing�a�user�task�written,Šin�FORTRAN�to�close�one�or�more�measurement Šchannels. „D.‚CALLING�SEQUENCE: )‰CALL�A2DCLS(CHNLMN,CMDBLK,CMDBKL,STATUS) „E.‚ENTRY�CONDITIONS: ‰CHNLMN�=�Channel�Mnemonic’(4�ASCII�characters)#‰CMDBLK�=�I/O�Command�Block�address ’(Integer*4)"‰CMDBKL�=�I/O�Command�Block�length ‰Channel�Block�Format "‹+---------------+---------------+‹|‚Status�code’|"‹+---------------+---------------+‹|‚CLOSE�command�code�($0002)ƒ|"‹+---------------+---------------+‹|‚First�channel�number‰|"‹+---------------+---------------+‹:�:�:‹:�:�:"‹+---------------+---------------+‹|‚Last�channel�numberŠ|"‹+---------------+---------------+  „F.‚EXIT�CONDITIONS: ,‰STATUS�=�Status�returned�by�the�A/D�driver.             -�11�-   ½31-Jan-85  „G.‚TABLES�USED: ‰Parameter�Block "‹+---------------+---------------+ ‹|‚Command�code�(Initiate�I/O)‚|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+‹|‚Channel�Mnemonic�(ASCII)…|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+ ‹|Šnot�used�|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Address�I/O�command�block„|"‹+---------------+---------------+‹|‚Length�I/O�command�block…|"‹+---------------+---------------+  „H.‚MODULES�USED: „I.‚MODULES�CALLING�THIS�MODULE: -ŠAny�module�requiring�interface�to�A/D�driver #„J.‚ERROR�MESSAGES�GENERATED:„None.                       -�12�-   ½31-Jan-85  „A.‚MODULE�NAME:„BLDCB #„B.‚MODULE�TYPE:„UTILITY�SUBROUTINE „C.‚MODULE�PURPOSE: -ŠThis�subroutine�builds�a�channel�block�entry3Šfrom�the�specified�parameters�in�the�user�provided0Šdata�area.‚This�subroutine�is�used�to�build�the+Šchannel�blocks�for�both�of�the�measurement Šroutines. „D.‚CALLING�SEQUENCE: 4ˆCALL�BLDCB(CMDBLK,CHNLNO,OPTION,BFA,BFL,SBA,TGRMOD,“RTNADR,CMDBKL) „E.‚ENTRY�CONDITIONS: #‰CMDBLK‚=�I/O�Command�Block�address “(Integer*4)‰CHNLNO‚=�Channel�number$‰OPTION‚=�Channel�completion�options‰BFA…=�Buffer�Address “(Integer*4)‰BFL…=�Buffer�Length-‰SBA…=�Subroutine�Address‚(0�if�not�required) “(Integer*4)'‰TGRMOD‚=�Trigger�Mode�and�Gain�Options-‰RTNADR‚=�Address�of�next�avail�channel�block“(Returned�by�this�subroutine) “(Integer*4)'‰CMDBKL‚=�Length�of�Channel�Block�built“(Returned�by�: this�subroutine)                         -�13�-   ½31-Jan-85  ‰Channel�Block�Format "‹+---------------+---------------+‹|‚Channel�number�|"‹+---------------+---------------+‹|‚Channel�Completion�Optionsƒ|"‹+---------------+---------------+!‹|‚Subroutine�Address�(Optional)|"‹+---------------+---------------+!‹|‚Subroutine�Address�(Optional)|"‹+---------------+---------------+‹|ˆBuffer�address‰|"‹+---------------+---------------+‹|ˆBuffer�address‰|"‹+---------------+---------------+‹|‚Size�of�buffer�in�bytes†|"‹+---------------+---------------+!‹|‚Trigger�Mode�and�Gain�Option�|"‹+---------------+---------------+                                        -�14�-   ½31-Jan-85  „F.‚EXIT�CONDITIONS: „G.‚TABLES�USED: „H.‚MODULES�USED: „I.‚MODULES�CALLING�THIS�MODULE: -ŠAny�module�requiring�interface�to�A/D�driver „J.‚ERROR�MESSAGES�GENERATED: ŠNone �END                                            -�15�- éN==============================================================================@====‚NEWS�FILE�FOR�DAC…(MVME605�-�D/A�BOARD)‰DRIVER�RELEASE‚===="====‚Last�modified�-�01/31/85¬====N============================================================================== 8This driver is compatible with both RMS68K and VERSAdos.   .This driver consists of the following files -- ‰MVME605�driver�files: -�9992.&.M605DRV.SA‚MVME605�driver�source�file-�9992.&.M605DRV.RO‚MVME605�driver�object�file5�9992.&.M605DRV.AF‚MVME605�driver�assembly�chain�file  ‰Files�for�allocating�memory:0�9992.&.M605MEM.CI‰File�included�at�SYSGEN�time.0�9992.&.M605MEM.AG‰File�assembled�at�SYSGEN�time  !‰Files�for�system�configuration�: "�9992.&.M605DRV.CIˆSYSGEN�commands"�9992.&.M605IOC.SIˆCCB�allocations3�9992.&.M605DRV.LGˆChain�file�to�link�in�the�driver#�9998.VERSAPT.M605DRV.CF‚Patch�file  ‰FORTRAN�interface�subroutines:0�9992.&.M605LIB.SAˆAssembly�language�source�file&�9992.&.M605LIB.AFˆAssembly�chain�file�9992.&.M605LIB.ROˆObject�file  9‰The�following�files�are�used�to�generate�a�test�program: >‰9992.M605DRV.TEST605.SA‡Assembly�language�test�program�sourceA‰9992.M605DRV.TEST605.AF‡chain�file�for�assembly�language�programA‰9992.M605DRV.TEST605.LF‡chain�file�for�link�of�asm�lang.�program7‰9992.M605DRV.TEST605.LO‡assembly�language�test�program  ‰"News"�file:�9992.&.M605DRV.NWˆNews�file KThe�MVME605�driver�source�file�is:�9992.&.M605DRV.SA.‚To�assemble�this�file%use the chain file 9992.&.M605DRV.AF.;The following files are used in the assembly of M605DRV.SA:�9995.&.STR.EQ�9995.&.TCB.EQ�9995.&.CCB.EQ�9995.&.LV5.EQ�9995.&.TR1RTCD.EQ�9995.&.M605DRV.EQ  >In order to incorporate this driver into your system, you will=have to set some parameters in the .CNFGDRVR.CI file.  #This driver requires the following:;‰1)‚Memory�must�be�allocated�for�the�internal�driver�table.OAX4`; 9‰2)‚A�channel�control�block�(CCB)�must�be�created�for�the6“commands�issued�for�each�MVME605�board�in�the�system. HThe size of the memory area set aside for the driver table is determinedGby�the�values�of�two�variables�as�specified�by�you�in�the�SYSGEN.‚These$variables are "NVME605" and "NU605". =NVME605ƒThis�is�the�number�of�MVME605�boards�which�will�be�on6Šthe�system.‚Since�there�can�be�no�more�than�16�boards6Šon�the�I/O�Channel�(which�is�where�these�boards�are),&Šthe�maximum�value�of�"NVME605"�is�16. 3NU605…This�variable�is�set�to�the�maximum�number�of7Šuser/MVME605�combinations�you�wish�to�allow�at�any�one2Štime.‚Since�it�is�possible�to�have�one�user�using;Šmore�than�one�MVME605�board,�as�well�as�more�than�one�user4Šusing�the�same�MVME605�board,�we�need�the�number�ofŠuser/MVME605�combinations.   ?Example:‚If�user�A�uses�board�#1�and�board�#2,�user�B�uses�just1Šboard�#1,�and�user�C�uses�board�#2�and�board�#3,,Šthere�would�be�5�user/board�combinations�--ŠA/1,�A/2,�B/1,�C/2,�C/3.FIf the configuration of MVME605 boards is the same as in this example,$you would set NVME605=3 and NU605=5. INote that if you set either of these variables to a larger number than isHactually�needed,�the�system�will�still�operate�normally.‚This�would�justBresult in having more memory allocated for internal tables than is necessary.  ?To include the MVME605 driver in your SYSGEN, do the following:  9‰(1)�Do�a�COPYSGEN�to�get�the�files�needed�for�the�SYSgen�into�your�sysgen�user�number.7�NOTE:‚Make�sure�that�argument�5�=�PCDRV�so�the�Process,”Control�Drivers�will�be�copied�by�COPYSGEN. D‰(2)�Set�the�variables�NVME605�and�NU605�in�the�.CNFGDRVR.CI,�file�for�the�processor�board�you�are�using. 8‰(3)�Check�the�file�M605IOC.SI�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 testprogram. GM605DRV.TEST605.SA is an assembly language test program which tests theDMVME605�driver.‚This�program�prompts�the�user�to�run�a�subset�of�allDcommands�available�in�the�driver.‚It�can�be�used�as�a�first�check�ofAthe hardware and as an example of writing commands to the driver.  JM605LIB.SA is assembled using the M605LIB.AF chain file. M605LIB.RO is theEFORTRAN-callable subroutine which, when called by the user program orJFORTRAN test program, will invoke the appropriate MVME605 driver function. ‰ENDN==============================================================================N==============================================================================éééé; N==============================================================================H====‚NEWS�FILE�FOR�AC/DCƒ(MVME610/620�-�AC/DC�BOARD)ƒDRIVER�RELEASE‚===="====‚Last�modified�-�01/31/85¬====N============================================================================== 8This driver is compatible with both RMS68K and VERSAdos. 4This driver package consists of the following files: ‰VME�610/620�Driver�files:1�9992.&.M610DRV.SAˆMVME610/620�Driver�Source�file1�9992.&.M610DRV.ROˆMVME610/620�Driver�Object�file9�9992.&.M610DRV.AFˆMVME610/620�Driver�Assembly�Chain�file <‰Files�to�allocate�memory�for�the�Interrupt�Processing�queue0�9992.&.M610MEM.AGŠFile�assembled�at�SYSgen�time4�9992.&.M610MEM.CIŠFile�INCLUDEd�into�SYSgen�command¨file�at�SYSgen�time. ‰Files�for�system�configuration:%�9992.&.M610DRV.CIŠCommands�to�SYSgen"�9992.&.M610IOC.SIŠCCB�allocations �9992.&.M610DRV.LGŠLINK�commands#�9998.VERSAPT.M610DRV.CF„Patch�file  /‰The�driver�news�file�that�you�are�now�reading:�9992.&.M610DRV.NW‰News�file F‰MVME610/620�Driver�Command�and�Error�Code�Equate�files.�These�equatesB‹are�used�by�the�application�code�when�making�calls�to�the�driver.�9995.&.M610CMD.EQ ?‰The�following�files�are�used�to�generate�a�driver�test�program�9992.M610DRV.INPTST.LO�: 7�9992.M610DRV.INPTST.SA…Pascal�main�program�source�file?�9992.M610DRV.INTSTASM.SAƒSource�for�assembly�procedures�called¨from�Pascal�main�program5�9992.M610DRV.INPTST.PF…Pascal�compilation�chain�file-�9992.M610DRV.INTSTASM.AFƒAssembly�chain�file.�9992.M610DRV.INPTST.LF…Test�program�link�file?�9992.M610DRV.PDOLRLIB.ROƒSupplementary�Pascal�Run-time�Library @‰The�following�files�are�used�to�generate�a�second�test�program: >‰9992.M610DRV.TEST610.SA‡Assembly�language�test�program�sourceA‰9992.M610DRV.TEST610.AF‡chain�file�for�assembly�language�programA‰9992.M610DRV.TEST610.LF‡chain�file�for�link�of�asm�lang.�program7‰9992.M610DRV.TEST610.LO‡assembly�language�test�program h3q0y#�'‰ G‚The�following�files�are�used�to�assemble�and�link�the�Fortran�callable"driver command subroutine library: 0‰9992.&.M610LIB.SA�Assembly�language�source�file‰9992.&.M610LIB.RO�Object�file&‰9992.&.M610LIB.AF�Assembly�chain�file M‚To�assemble�the�MVME610/620�Driver�execute�the�chain�file�9992.&.M610DRV.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.&.M610CCB.EQ‰9995.&.M610INTQ.EQ‰9995.&.M610CMD.EQ +SYSgen Procedure for the MVME610/620 Driver+------------------------------------------- <1.‚Use�COPYSGEN�to�get�all�the�files�required�for�the�SYSgen7„to�the�user�number�where�the�SYSgen�will�be�performed.G„NOTE:‚Make�sure�that�argument�5�=�PCDRV�so�the�Process�Control�Drivers‹will�be�copied�by�COPYSGEN. K2.‚Edit�the�.CNFGDRVR.CI�file�for�generating�the�RMS68K�or�VERSAdosC„for�your�target�system.‚Modify�the�SYSgen�parameters�"NVME610"�andE„"NVME620".‚These�parameters�define�the�maximum�number�of�MVME610�andD„NVME620�boards�that�will�occupy�the�target�system.�One�other�sysgenH„parameter�that�must�be�modified�is�M610QSIZ.‚This�parameter�defines�theI„minimum�size�of�the�interrupt�processing�queue�in�terms�of�the�number�ofK„entries�that�the�queue�may�contain.‚The�driver�can�accomodate�a�maximum�ofE„2048�queue�entries.‚For�more�information�on�the�Interrupt�Processing3„Queue�consult�the�MVME610/620�Driver�Users�Manual.  I3.‚Edit�the�file�M610IOC.SI�so�that�one�call�to�the�CDB�macro�is�made�forJ„each�MVME610�or�MVME620�board�that�was�specified�in�.CNFGDRVR.CI.J„Each�CDB�must�specify�a�unique�channel�mnemonic�(i.e.�'IN01').‚The�memory=„mapped�I/O�address�offset�can�be�mo< dified�in�IOC.ADDRESS.CI.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.  F4. You may now run the SYSgen utility to 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 MVME610/620 driver. This library is contained infile M610LIB.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 MVME610/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 forKthe channel mnemonic of the desired MVME610/620 board and the number of theFchannel 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 MVME610/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. TheGuser 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 MVME625 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 MVME610/620 boards with assumed channel mnemonics of 'IN01' and 'IN02'.NThe acknowledge pulse is sent to a unique MVME625 output for each interruptingchannel as follows: "„MVME610/620ƒInput�Channel„MVME625…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 sta< te 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 MVME625 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.   GM610DRV.TEST610.SA is an assembly language test program which tests theDMVME610�driver.‚This�program�prompts�the�user�to�run�a�subset�of�allDcommands�available�in�the�driver.‚It�can�be�used�as�a�first�check�ofAthe hardware and as an example of writing commands to the driver. éééééN==============================================================================F====‚NEWS�FILE�FOR�ACO…(MVME615�-�AC�OUTPUT�BOARD)ƒDRIVER�RELEASE‚===="====‚Last�modified�-�01/31/85¬====N============================================================================== 8This driver is compatible with both RMS68K and VERSAdos.   .This driver consists of the following files -- ‰MVME615�driver�files:-�9992.&.M615DRV.SA†MVME615�driver�source�file-�9992.&.M615DRV.RO†MVME615�driver�object�file5�9992.&.M615DRV.AF†MVME615�driver�assembly�chain�file  ‰Files�for�allocating�memory:0�9992.&.M615MEM.CIŠFile�included�at�SYSgen�time.0�9992.&.M615MEM.AGŠFile�assembled�at�SYSgen�time   ‰Files‚for�system�configuration:"�9992.&.M615IOC.SIˆCCB�allocations"�9992.&.M615DRV.CIˆSYSGEN�commands3�9992.&.M615DRV.LGˆChain�file�to�link�in�the�driver#�9998.VERSAPT.M615DRV.CF‚Patch�file   ‰FORTRAN�interface�subroutines:0�9992.&.M615LIB.SA…Assembly�language�source�file&�9992.&.M615LIB.AF…Assembly�chain�file�9992.&.M615LIB.RO…Object�file  ‰"News"�file:�9992.&.M615DRV.NW…News�file   "‰Files�to�generate�a�test�program: ;‰9992.M615DRV.TESTAC.SAˆASSEMBLY�language�test�prog.�source=‰9992.M615DRV.TESTAC.AFˆchain�file�for�ASSEMBLY�language�asm.>‰9992.M615DRV.TESTAC.LFˆchain�file�for�LINK�of�asm.�lang.�prog6‰9992.M615DRV.TESTAC.LOˆASSEMBLY�language�test�program @‰The�following�files�are�used�to�generate�a�second�test�program: >‰9992.M615DRV.TEST615.SA‡Assembly�language�test�program�sourceA‰9992.M615DRV.TEST615.AF‡chain�file�for�assembly�language�programA‰9992.M615DRV.TEST615.LF‡chain�file�for�link�of�asm�lang.�program7‰9992.M615DRV.TEST615.LO‡assembly�language�test�program  KThe�MVME61= 5�driver�source�file�is:�9992.&.M615DRV.SA.‚To�assemble�this�file%use the chain file 9992.&.M615DRV.AF.;The following files are used in the assembly of M615DRV.SA:�9995.&.STR.EQ�9995.&.TCB.EQ�9995.&.CCB.EQ�9995.&.LV5.EQ�9995.&.TR1RTCD.EQ‘Aš4¢8ª4�9995.&.M615DRV.EQ  >In order to incorporate this driver into your system, you will=have to set some parameters in the .CNFGDRVR.CI file. #This driver requires the following:;‰1)‚Memory�must�be�allocated�for�the�internal�driver�table.9‰2)‚A�channel�control�block�(CCB)�must�be�created�for�the6�commands�issued�for�each�MVME615�board�in�the�system. HThe size of the memory area set aside for the driver table is determinedGby�the�values�of�two�variables�as�specified�by�you�in�the�SYSGEN.‚These$variables are "NVME615" and "NU615". =NVME615ƒThis�is�the�number�of�MVME615�boards�which�will�be�on6Šthe�system.‚Since�there�can�be�no�more�than�16�boards6Šon�the�I/O�Channel�(which�is�where�these�boards�are),&Šthe�maximum�value�of�"NVME615"�is�16. 3NU615…This�variable�is�set�to�the�maximum�number�of7Šuser/MVME615�combinations�you�wish�to�allow�at�any�one2Štime.‚Since�it�is�possible�to�have�one�user�using;Šmore�than�one�MVME615�board,�as�well�as�more�than�one�user4Šusing�the�same�MVME615�board,�we�need�the�number�ofŠuser/MVME615�combinations.   ?Example:‚If�user�A�uses�board�#1�and�board�#2,�user�B�uses�just1Šboard�#1,�and�user�C�uses�board�#2�and�board�#3,,Šthere�would�be�5�user/board�combinations�--ŠA/1,�A/2,�B/1,�C/2,�C/3.FIf the configuration of MVME615 boards is the same as in this example,$you would set NVME615=3 and NU615=5. INote that if you set either of these variables to a larger number than isHactually�needed,�the�system�will�still�operate�normally.‚This�would�justBresult in having more memory allocated for internal tables than is necessary.  ?To include the MVME615 driver in your SYSgen, do the following: <‰(1)�Use�COPYSGEN�to�get�all�the‚files�needed�for�the�SYSgen�your�SYSgen�user�number.7�NOTE:‚Make�sure�that�argument�5�=�PCDRV�so�the�Process,”Control�Drivers�will�be�copied�by�COPYSGEN. D‰(2)�Set�the�variables�NVME615�and�NU615�in�the�.CNFGDRVR.CI,�file�for�the�processor�board�you�are�using. 8‰(3)�Check�the�file�M615IOC.SI�to�be�sure�that�the�CCB's�conform�to�your�configuration.   FWhen setting up the "CDB" calls please note that each ACO-ID must haveCa�unique�name.‚This�is�also�the�name�any�application�task�would�useFto�address�the�driver�for�a�board.‚The�memory-mapped�I/O�addresses�arealso different for each board. 1After creating and booting your VERSAdos with the>MVME615 driver included, you may want to run the provided test"program to test your VME615 board.  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�ar= e�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.  GM615DRV.TEST615.SA is an assembly language test program which tests theDMVME615�driver.‚This�program�prompts�the�user�to�run�a�subset�of�allDcommands�available�in�the�driver.‚It�can�be�used�as�a�first�check�ofAthe hardware and as an example of writing commands to the driver. ‰ENDN==============================================================================N==============================================================================N==============================================================================F====‚NEWS�FILE�FOR�DCO…(MVME625�-�DC�OUTPUT�BOARD)ƒDRIVER�RELEASE‚===="====‚Last�modified�-�01/31/85¬====N============================================================================== 8This driver is compatible with both RMS68K and VERSAdos.   .This driver consists of the following files -- ‰MVME625�driver�files:-�9992.&.M625DRV.SA‚MVME625�driver�source�file-�9992.&.M625DRV.RO‚MVME625�driver�object�file5�9992.&.M625DRV.AF‚MVME625�driver�assembly�chain�file  ‰Files‚for�allocating�memory:/�9992.&.M625MEM.CI‰File�included�at�SYSgen�time0�9992.&.M625MEM.AG‰File�assembled�at�SYSgen�time  ‰Files�for�system�configuration:"�9992.&.M625DRV.CIˆSYSGEN�commands"�9992.&.M625IOC.SIˆCCB�allocations3�9992.&.M625DRV.LGˆChain�file�to�link�in�the�driver#�9998.VERSAPT.M625DRV.CF‚Patch�file   ‰FORTRAN�interface�subroutines:0�9992.&.M625LIB.SA…Assembly�language�source�file&�9992.&.M625LIB.AF…Assembly�chain�file�9992.&.M625LIB.RO…Object�file  ‰"News"�file:�9992.&.M625DRV.NW…News�file   %‰Files�to�generate�the�test�programs: ;‰9992.M625DRV.TESTDC.SAˆASSEMBLY�language�test�prog.�source=‰9992.M625DRV.TESTDC.AFˆchain�file�for�ASSEMBLY�language�asm.>‰9992.M625DRV.TESTDC.LFˆchain�file�for�LINK�of�asm.�lang.�prog6‰9992.M625DRV.TESTDC.LOˆASSEMBLY�language�test�program 3‰9992.M625DRV.TSTDCO.SAˆFORTRAN�test�program�source=‰9992.M625DRV.TSTDLY.SAˆFORTRAN�test> �program�subrtn�for�delay?‰9992.M625DRV.TSTPR1.SAˆFORTRAN�test�program�subrtn�error�print;‰9992.M625DRV.TSTDCO.AFˆchain�file�for�FORTRAN�compile�test>‰9992.M625DRV.TSTDCO.LFˆlinks�FORTRAN�test�prog.�&�library�rtn6‰9992.M625DRV.TSTDCO.LOˆFORTRAN�test�program�load�file >‰9992.M625DRV.TEST625.SA‡Assembly�language�test�program�sourceA‰9992.M625DRV.TEST625.AF‡chain�file�for�assembly�language�programA‰9992.M625DRV.TEST625.LF‡chain�file�for�link�of�asm�lang.�program²:»8Ã4Ë7ÓPÛ7‰9992.M625DRV.TEST625.LO‡assembly�language�test�program  KThe�MVME625�driver�source�file�is:�9992.&.M625DRV.SA.‚To�assemble�this�file%use the chain file 9992.&.M625DRV.AF.;The following files are used in the assembly of M625DRV.SA:�9995.&.STR.EQ�9995.&.TCB.EQ�9995.&.CCB.EQ�9995.&.LV5.EQ�9995.&.TR1RTCD.EQ�9995.&.M625DRV.EQ  >In order to incorporate this driver into your system, you will=have to set some parameters in the .CNFGDRVR.CI file.  #This driver requires the following:;‰1)‚Memory�must�be�allocated�for�the�internal�driver�table.9‰2)‚A�channel�control�block�(CCB)�must�be�created�for�the6“commands�issued�for�each�MVME625�board�in�the�system. HThe size of the memory area set aside for the driver table is determinedGby�the�values�of�two�variables�as�specified�by�you�in�the�SYSGEN.‚These$variables are "NVME625" and "NU625". =NVME625ƒThis�is�the�number�of�MVME625�boards�which�will�be�on6Šthe�system.‚Since�there�can�be�no�more�than�16�boards6Šon�the�I/O�Channel�(which�is�where�these�boards�are),&Šthe�maximum�value�of�"NVME625"�is�16. 3NU625…This�variable�is�set�to�the�maximum�number�of7Šuser/MVME625�combinations�you�wish�to�allow�at�any�one2Štime.‚Since�it�is�possible�to�have�one�user�using;Šmore�than�one�MVME625�board,�as�well�as�more�than�one�user4Šusing�the�same�MVME625�board,�we�need�the�number�ofŠuser/MVME625�combinations.   ?Example:‚If�user�A�uses�board�#1�and�board�#2,�user�B�uses�just1Šboard�#1,�and�user�C�uses�board�#2�and�board�#3,,Šthere�would�be�5�user/board�combinations�--ŠA/1,�A/2,�B/1,�C/2,�C/3.FIf the configuration of MVME625 boards is the same as in this example,$you would set NVME625=3 and NU625=5. INote that if you set either of these variables to a larger number than isHactually�needed,�the�system�will�still�operate�normally.‚This�would�justBresult in having more memory allocated for internal tables than is necessary.    ?To include the MVME625 driver in your SYSgen, do the following: <‰(1)�Use�COPYSGEN�to�get�all�the�files�needed�for�the�SYSgen�into�your�SYSgen�user�number.2�NOTE:‚Make�sure�argument�5�=�PCDRV�so�the�Process+”Control�Drivers�will�be�copied�by�COPYSGEN D‰(2)�Set�the�variables�NVME625�and�NU625�in�the�.CNFGDRVR.CI,�file�for�the�processor�board�you�are�using. 8‰(3)�Check�the�file�M625IOC.SI�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=programs.‚Two�are�assembly�language�and�one�requires�Fortran.ABoth�of�the�test�programs�require�VERSAdos.‚All�the�test�programs=contain the catalog name M625DRV and are in user number 9992.  FTESTDC.SA is an assembly language test program which tests the MVME625Cdriver. 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 DCO-ID and memory-mapped I/O address to match your configuration.   ETESTDC.SA is assembled with the chain file TESTDC.AF, and linked with1the file TESTDC.LF. The load module is TESTDC.LO.   GTo use the test program TESTDC.LO, provide an MVME625 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�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.      JM625LIB.SA�is�assembled�using�the�M625LIB.AF�chain�file.‚M625LIB.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 fileETSTDCO.AF.‚File�TSTDCO.LF�links�the�test�routines�with�M625LIB.RO�andFFORTLIB.RO (and FORTVMC.RO for the VMC or VME systems) and creates theprogram TSTDCO.LO.  ETo use test program TSTDCO.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.  GM625DRV.TEST625.SA is an assembly language test program which tests theDMVME625�driver.‚This�program�prompts�the�user�to�run�a�subset�of�allDcommands�available�in�the�driver.‚It�can�be�used�as�a�first�check�ofAthe hardware and as an example of writing commands to the driver. ‰ENDN==============================================================================N==============================================================================éééééN==============================================================================L====‚NEWS�FILE�FOR�RAD1�(REMOTE�ANALOG-TO-DIGITAL�BOARD)�DRIVER�RELEASE‚===="====‚Last�modified�-�01/31/85¬====N==============================================================================   3RAD1 Driver is compatible with RMS68K and VERSAdos.   /This release consists of the following files -- ‰RAD1�Driver�files:)“9992.&.RADDRV.SA…RAD1�driver�source�file1“9992.&.RADDRV.AF…RAD1�driver�assembly�chain�file)“9992.&.RADDRV.RO…RAD1�driver�object�file ‰File�for�allocating�memory:,“9992.&.RADMEM.AG…File�for�allocating�memory.“9992.&.RADMEM.CI…File�included�at�sysgen�time ‰Files�for�system�configuration:5“9992.&.RADDRV.CI…Sysgen�include�file�for�RAD1�driver3“9992.&.RADDRV.LG…Chain�file�to�link�in�RAD1�driver!“9992.&.RADIOC.SI…CCB�allocations7“9992.&.IOCFAIL.SA„Board�failure�monitor�routine�source.“9992.&.IOCFAIL.AF„IOCFAIL�assembly�chain�file .“9992.&.IOCINT.LG…Chain�file�to�link�in�IOCINT0“9992.&.IOCFAIL.LG„Chain�file�to�link�in�IOCFAIL"“9998.VERSAPT.RADDRV.CF�Patch�file ‰Files�assembled�during�SYSGEN:4“9992.&.IOCINT.AG…CCB�allocation�routine�source�file ‰FORTRAN�interface�subroutines:/“9992.&.RADLIB.SA…Assemb? ly�language�source�file%“9992.&.RADLIB.AF…Assembly�chain�file“9992.&.RADLIB.RO…Object�file ‰"News"�file:“9992.&.RADDRV.NW…News�file   JThe�RAD1�driver�source�file�is:‚RADDRV.SA�.‚To�assemble�this�file,�use�theKchain�file:‚RADDRV.AF�.‚The�following�equate�files�are�used�in�the�assembly of RADDRV:“9995.&.STR.EQ“9995.&.TCB.EQ“9995.&.CCB.EQ“9995.&.LV5.EQ“9995.&.RADDRV.EQ   BIn order to incorporate the RAD1 driver into your system, you will.CNFGDRVR.CI file.   'The RAD1 driver requires the following:<‰1)‚Memory�must�be�allocated�for�the�internal�driver�tables.9‰2)‚A�channel�control�block�(CCB)�must�be�created�for�theãAì4ô$ü 6“data�interrupt�(level�3�interrupt)�on�each�RAD1�board“in�the�system.9‰3)‚A�CCB�must�be�created�for�the�board-failure�interrupt-“(level�4�interrupt)�on�each�RAD1�board�which+“does�not�have�this�interrupt�disabled�by�a“jumper�on�the�board.   IThe size of the memory area set aside for the driver tables is determinedKby the values of two variables as specified by you in .CNFGDRVR.CI.'These variables are "NRAD" and "NURAD". 7NRAD†This�is�the�number�of�RAD1�boards�which�will�be�on6Šthe�system.‚Since�there�can�be�no�more�than�16�boards9Šon�the�I/O�Channel�(which�is�where�the�RAD1�boards�are),#Šthe�maximum�value�of�"NRAD"�is�16. 3NURAD…This�variable�is�set�to�the�maximum�number�of4Šuser/RAD1�combinations�you�wish�to�allow�at�any�one2Štime.‚Since�it�is�possible�to�have�one�user�using8Šmore�than�one�RAD1�board,�as�well�as�more�than�one�user1Šusing�the�same�RAD1�board,�we�need�the�number�ofŠuser/RAD1�combinations. ,Example:‚If�user�A�uses�RAD1�#1�and�RAD1�#2,Šuser�B�uses�just�RAD1�#1,%Šand�user�C�uses�RAD1�#2�and�RAD1�#3,+Šthere�would�be�5�user/RAD1�combinations�--ŠA/1,�A/2,�B/1,�C/2,�C/3.CIf the configuration of RAD1 boards is the same as in this example,!you would set NRAD=3 and NURAD=5. INote that if you set either of these variables to a larger number than isHactually�needed,�the�system�will�still�operate�normally.‚This�would�justBresult in having more memory allocated for internal tables than is necessary. JThe variables NRAD and NURAD are defined in the file .CNFGDRVR.CI.FYou will have to edit this file to reflect the correct values of these,variables for your particular configuration.   BThe code to allocate memory for the RAD1 driver internal tables iscontained in the file RADMEM.AG   EYour SYSGEN will set up a task which will allocate the CCB's (channelAcontrol blocks) for the RAD1 boards during system initialization.IThe file IOCINT.AG is included in this release to simplify the allocation2of�the�CCB's.‚The�file�RADIOC.SI�has�been�included5to give you an example of the set-up used to pass theEinformation on each RAD1 board to the program which builds the CCB's. 8When setting up the "CDB" calls, remember the following: '1)ƒThe�RAD-ID�is�a�4-character�mnemonicE…such�as�"RA01"�for�the�first�RAD1�board,�"RA02"�for�the�second,�etc.J…Each�RAD1�board�normally�has�two�CCB's--one�for�interrupt�level�3�(normalF…interrupts)�and�one�for�interrupt�level�4�(board-failure�interrupts).H…While�each�CCB�must�have�a�different�RAD-ID,�the�level-4�CCB�for�a�RAD1H…board�must�use�for�its�RAD-ID‚$00004000�more�than�the�4-byte�ASCII�codeE…for�the�RAD-ID�of�the�corresponding�level-3�CCB.‚This�is�so�that�theI…driver�can�find�the�level-3�CCB�for�a�particular�RAD1�board�when�it�gets…a�level-4�interruptH…(board-failure�interrupt).‚For�example:�if�the�level-3�CCB�has�a�RAD-IDF…of�"RA01",�then�the�level-4�CCB�for�that�board�must�use�"RA41"�as�itsE…RAD-ID.‚Similarly,�if�"RA13"�is�the�level-3�RAD-I@ D,�then�the�level-4$…CCB�must�have�"RA53"�as�its�RAD-ID. M2)ƒWhen�modifying�the�.CNFGDRVR.CI�file�for�your�particular�situation&…you�should�remember�that�in�the�"CDB"E…macro�calls,�the�address�of�the�memory-mapped�I/O�space�(shared-RAM)G…is�the�same�for�both�CCB's�for�each�RAD1�board.‚Also�the�length�of�theH…memory-mapped�I/O�space�is�set�at�511�since�shared-RAM�starts�on�an�odd(…address�(from�the�68000�point�of�view).   ?IOCFAIL.SA‚is�an�optional�task�which�will�be�"called"�by�having@an event queued to it when a board-failure interrupt is receivedDby�the�driver.‚The�device�table�("DEVTBL")�in�IOCFAIL�must�be�set�upJwith the device mnemonic (RAD-ID) of all the level-4 CCB's that IOCFAIL isIto�be�attached�to.‚The�device�table�in�the�IOCFAIL�file�given�here�is�setNup for two RAD1 boards as a sample -- the level-4 CCB RAD-ID's for these beingL"RA41"�and�"RA42".‚In�its�present�form�IOCFAIL�sets�up�to�receive�the�event,Kbut�doesn't�really�do�anything�when�the�event�is�received.‚You�will�have�toGadd whatever programming is necessary to the "receive-event" routine toIhave this program perform the processes you deem necessary in the case ofFa�RAD1�board�failure.‚If�you�choose�to�do�nothing�when�a�board�failure;occurs, this task can be left out of the SYSGEN altogether.   CRADLIB.SA‚and‚RADLIB.RO‚are�the�FORTRAN-callable�subroutines�which,Hwhen called by the user program, will invoke the appropriate RAD1 driver function. N==============================================================================éééééN==============================================================================B====‚NEWS�FILE�FOR�RIO�(REMOTE�INPUT�/�OUTPUT)�DRIVER�RELEASE‚===="====‚Last�modified�-�01/31/85¬====N==============================================================================  2RIO Driver is compatible with RMS68K and VERSAdos.   /This release consists of the following files -- ‰RIO�Driver�files:(“9992.&.RIODRV.SA„RIO�driver�source�file0“9992.&.RIODRV.AF„RIO�driver�assembly�chain�file(“9992.&.RIODRV.RO„RIO�driver�object�file-“9992.&.STDMACRO.AI‚Macros�used�in�RIO�driver ‰File�for�allocating�memory:,“9992.&.RIOMEM.AG„File�for�allocating�memory.“9992.&.RIOMEM.CI„File�included�at�sysgen�time ‰File�for�system�configuration:!“9992.&.RIOIOC.SI„CCB�allocations4“9992.&.RIODRV.CI„Sysgen�include�file�for�RIO�driver2“9992.&.RIODRV.LG„Chain�file�to�link�in�RIO�driver.“9992.&.IOCINT.LG„Chain�file�to�link�in�IOCINT"“9998.VERSAPT.RIODRV.CF�Patch�file ‰Files�assembled�during�SYSGEN:4@ “9992.&.IOCINT.AG„CCB�allocation�routine�source�file ‰Test�program�files/“9992.RIODRV.TESTE.SAƒExample�program�using�RIOªdriver�in�wait_for_event�mode.*“9992.RIODRV.TESTE.AFƒAssembly�chain�file.1“9992.RIODRV.TESTE.LFƒChain�file�to�link�in�TESTE4“9992.RIODRV.TESTE.LOƒAssembly�language�test�program @‰The�following�files�are�used�to�generate�a�second�test�program: =‰9992.RIODRV.TESTRIO.SA‡Assembly�language�test�program�source@‰9992.RIODRV.TESTRIO.AF‡chain�file�for�assembly�language�program@‰9992.RIODRV.TESTRIO.LF‡chain�file�for�link�of�asm�lang.�program6‰9992.RIODRV.TESTRIO.LO‡assembly�language�test�program ‰FORTRAN�interface�subroutines:/“9992.&.RIOLIB.SA„Assembly�language�source�file%“9992.&.RIOLIB.AF„Assembly�chain�file“9992.&.RIOLIB.RO„Object�file ‰"News"�file:“9992.&.RIODRV.NW„News�file  IThe�RIO�driver�source�file�is:‚RIODRV.SA�.‚To�assemble�this�file,�use�theKchain�file:‚RIODRV.AF�.‚The�following�equate�files�are�used�in�the�assembly of RIODRV:: 8,“9995.&.STR.EQ“9995.&.TCB.EQ“9995.&.CCB.EQ“9995.&.LV5.EQ“9995.&.RIODRV.EQ“9995.&.TR1RTCD.EQ  AIn order to incorporate the RIO driver into your system, you will6have to modify items in the .CNFGDRVR.CI file.  &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 determinedCby�two�variables�as�specified�by�you�in�.CNFGDRVR.CI.‚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�1�and�the�maximum�number�is�4. :Note that if you set either of these variables larger thanHactually�needed,�the�system�will�still�operate�normally.‚This�would�justBresult in having more memory allocated for internal tables than is necessary. LThe variables NRIO and NRIOINT are defined in the file .CNFGDRVR.CI.FYou will have to edit this file to reflect the correct values of these,variables for your particular configuration.   AThe code to allocate memory for the RIO driver internal tables is contained in the file RIOMEM.AG.   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.AG is included in this release to simplify the allocation2of�the�CCB's.‚The�file�RIOIOC.SI�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. 8When 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.  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 A 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. FRIODRV.TESTRIO.SA is an assembly language test program which tests the@RIO�driver.‚This�program�prompts�the�user�to�run�a�subset�of�allDcommands�available�in�the�driver.‚It�can�be�used�as�a�first�check�ofAthe hardware and as an example of writing commands to the driver. N==============================================================================ééé*‰&.M600IOC.SIG*======================================================================*E* THIS IS THE CODE NEEDED TO SET UP CCB'S FOR MVME 600 or 601 BOARDS.*@* Add a CCB definition for each additional board in your system.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, andF*�must�match�the�on-board�jumper�selections.‚The�I/O�Channel�interruptC* vector number and hardware interrupt level must correspond to the* jumpers on the board.*G*======================================================================*M600†EQU„\M600DRV)L600$01ƒSET„\L600$01‹Set�board�#1�address)L600$02ƒSET„\L600$02‹Set�board�#2�address***ˆSet�up�600/601�board�CCBA *@ CDB XOPEXC,'AD01',$80,0,M600,0,L600$01,1,\IOCVEC1,\IOCLVL1,$FF,&0,0,0,0,0,0,0,0,0,0,0*N*-----------------------------------------------------------------------------*�IFGE…\NVME600-2**ˆSet�up�600/601�board�CCB*@ CDB XOPEXC,'AD02',$80,0,M600,0,L600$02,1,\IOCVEC1,\IOCLVL1,$FF,&0,0,0,0,0,0,0,0,0,0,0 ENDCééé%!ö' M605IOC SI::aaM610IOC SICCaaM615IOC SILLaaM625IOC SIUUaaRIOIOC SI^^ aaRADIOC SIgg aaIOCFAIL ROppaaM600DRV ROyyaaM600LIB RO‚‚aaM605DRV RO‹‹aaM605LIB RO””aaM610DRV RO��aaM610LIB RO¦¦aaM615DRV RO¯¯aaM615LIB RO¸¸aaM625DRV ROÁÁaaM625LIB ROÊÊaaRADDRV ROÓÓaaRADLIB ROääaaRIODRV ROíí aa*ˆ&.M605IOC.SIG*======================================================================*@* THIS IS THE CODE NEEDED TO SET UP A CCB FOR ONE MVME605 BOARD.*@* Add a CCB definition for each additional board in your system.@* An address for a second MVME605 board can be offset $100 bytes* from the first.=* For example, another MVME605 board could have an address of* \IOCBASE+$1D01.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.*G*======================================================================*/M605†EQU„\M605DRV‹Set�the�address�of�the�driver-L605$01ƒSET„\L605$01‹Set�the�board�#1�address**J CDB XOPINH+XOPEXC,'DAC1',$80,254,M605,0,L605$01,31,\IOCVEC1,\IOCLVL1,$50,&„0,0,0,0,0,0,0,0,0,0,0ééB éé2*ˆINCLUDE‚&.M610IOC.SIG*======================================================================*E* THIS IS THE CODE NEEDED TO SET UP CCB'S FOR MVME 610 or 620 BOARDS.*@* Add a CCB definition for each additional board in your system.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, andM* must match the on-board jumper selections. The I/O Channel interrupt vectorM* number and hardware interrupt level must correspond to the interrupt jumper* on the board.*G*======================================================================*/M610†EQU„\M610DRV‹Set�the�address�of�the�driver-L610$01ƒSET„\L610$01‹Set�the�board�#1�address-L610$02ƒSET„\L610$02‹Set�the�board�#2�address**@ CDB XOPEXC,'IN01',$80,0,M610,0,L610$01,3,\IOCVEC1,\IOCLVL1,$FF,&„0,0,0,0,0,0,0,0,0,0,0**�IFGE…\NVME610-2*@ CDB XOPEXC,'IN02',$80,0,M610,0,L610$02,3,\IOCVEC2,\IOCLVL2,$FF,&„0,0,0,0,0,0,0,0,0,0,0 ENDCéééé;*ˆ&.M615IOC.SIG************************************************************************0*�Code�to�be�included�in‚IOCINT.AG‚to�set�up�for,*’building�the�CCB's�for�the�MVME615�boards.*G*======================================================================*@* THIS IS THE CODE NEEDED TO SET UP A CCB FOR ONE MVME615 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?* $FE6003 and $FE6005, 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.*G*=========================B =============================================*/M615†EQU„\M615DRV‹Set�the�address�of�the�driver-L615$01ƒSET„\L615$01‹Set�the�board�#1�address**B CDB XOPEXC,'ACO1',$80,254,M615,0,L615$01,1,\IOCVEC1,\IOCLVL1,$50,&„0,0,0,0,0,0,0,0,0,0,0éééD*ˆ&.M625IOC.SIG************************************************************************&*�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.*G*======================================================================*/M625†EQU„\M625DRV‹Set�the�address�of�the�driver-L625$01ƒSET„\L625$01‹Set�the�board�#1�address**B CDB XOPEXC,'DCO1',$80,254,M625,0,L625$01,1,\IOCVEC1,\IOCLVL1,$50,&„0,0,0,0,0,0,0,0,0,0,0ééM *ˆ&.RIOIOC.SI*RIO†EQU‡\RIODRVLRIO$01‚SET‡\LRIO$01*$*ˆADD�NECESSARY�CCB�INFORMATION�HERE**ˆSET�UP�RIO�CCB'S*B CDB XOPEXC,'RI01',$80,254,RIO,0,LRIO$01,31,\IOCVEC3,\IOCLVL3,$50,&0,0,0,0,0,0,0,0,0,0,0éC ééééééV  *ˆ&.RADIOC.SI*RAD†EQU‡\RADDRVLRAD$01 SET \LRAD$01**ˆSET�UP�RAD�CCB'S4*ƒ(MEMORY�LENGTH�IS�511�SINCE�WE�START�AT�ODD�ADDR.)*C CDB XOPEXC,'RA01',$80,254,RAD,0,LRAD$01,511,\IOCVEC3,\IOCLVL3,$50,&0,0,0,0,0,0,0,0,0,0,0 C CDB XOPEXC,'RA41',$80,254,RAD,0,LRAD$01,511,\IOCVEC4,\IOCLVL4,$50,&0,0,0,0,0,0,0,0,0,0,0éééééé_ C K1IOCFAIL ASYST' IOCFAIL SAX…Board Fail Montior Task 4-28-822 žF30042882 1RA41RA42OúÿþCúÿÜ IB™B™ü ü "ü Eú6"ÊBQpNAF3f>EúÿªJ’g"HüB2ü"Ú2ü B™B™p4 Ap(ÀüF3 Kèÿ"›ÀJ-sf|aþ2Lß,|Ns"m"Jj,J-sf PíqJ)`Hç~0B-s mv$I3 |aþ0Lß ~<Nu4éD éq,1A2DLIB ASYST' M600LIB SA! …e2IBLDCB ®IA2DCLS XIA2DOPN IA2DMRD ¬IA2DMRS VIA2DSTP  )" 3H3 //MúA ú0<`B6R@ @oô¼ o-P o-H1| o=Pp,, (-"¸´pg XGSfô0<ýF3 NurB‚½ñfa3¼ÿÿ\�R‚ ‚fæB€`ø m"01¼¼Nu/ >+F3 c c &_0<÷`ÄSG\‹2 Ac &_0<ö`®4,:ÊüSB/ "Naô`F3 NqLßB0<`Š F$m""WX‰Âü½ñg Lß 0<ò`j61"_*JXg. ‚ü<F3 Ìü4Hõ¯`p$ „“É2hÿþAúJ2<p"N@`6`þ/8„0à\„0QÊÿÀQÏÿ`0&_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—NuNu4D éééƒ;1FTDAC ASYST' M605LIB SA$$…DAC subroutinesB2ILOC ŒIDACCLS ,IDAOPEN IDACNVT >)’F3 Hç€paP$¼B€0*ã€\€2€ KpJ+g&/ ?? k áJ„‚F3 (j8N”`Nq>2&_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 ASYST' M615LIB SA1$…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Ê$_Nu0,, (-"¸´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éé' RIOLIB RO  aaH ;1FTRIO ASYST' RIOLIB SAC…RIO subroutines~2IRIOPEN IRIOOFF RIRIOCLS .IRIOPLS ŠIRIOENB nIRIODSB |IRIOSTA `IRIOOUT @)ÜF3 Hç€pa $¼B€0*å€\€2€ Kp Value to be converted ($000 - $FFF) > Entered value = = Result value. <<< Starting conversions >>> <<< Conversions done >>> *** OPEN ABORTED D/A *** -- *** CONVERSION ABORTED D/A *** -- *** CLOSE ABORTED D/A *** -- *** OPEN ABORTED A/D *** -- *** CONVERSION ABORTED A/D *** -- *** CLOSE ABORTED A/D *** -- Error code returned in D0 = Oúý2Iúüb :ü^D€Aô)HÌ)H¬Ñü)HÐ)HÄAúþ)HRAúþ0)HVAúýtNBAúþ$)HRAúþD)HVAúý^NBAúüæ)HnAúüæ)HrAúýdNBaNAúüÌa„ €m €o`¶9@ 9@¨9@¶9@ÀaÀ9|ª zü�2<0Á0Ã9CDAúý2CúýJ!|DAC1!I1|p Delay between conversions > (C)onstant level (S)awtooth wave > Value to be converted ($000 - $FFF) > Number of times to do conversions > Increment for conversion value > <<< Starting conversions >>> <<< Conversions done >>> *** OPEN ABORTED *** -- *** CONVERSION ABORTED *** -- *** CLOSE ABORTED *** -- Error code returned in D0 = Oúý>Iúür :ý D€Aô)HÈ)H®Aúþ)HTAúþ,)HXAúý”NBAúþ )HTAúþ@)HXAúý~NBAúüü)HpAúüü)HtAúý„NBaâAúüâaâ €m €?o`¶9@¢9@ªAúþ")HTAúþB)HXAúý,NBAúüª)HpAúüª)HtAúý2NBa�:ü� Of,$zü‚"Ja’ ƒÿÿg 2ÃaÔ2Ã`ê“Ê €ü9@¬`Ò Cf"af9C0a®9|¬ zü>2:ü¢0Á0Ã`ª Sfža<9C0Aúþ)HTAúþ")HXAúüŽNBAúü )HpAúü )HtAúü”NBaòAúûòa– �gÀ ƒm ƒÿo`®9CF0:ü0B� zûÂ"H4:ü:2À2ÁÒB Aÿoô Aÿo’B2À2Á’B Alô“È €ü9@¬``þÌAúý@)HTAúý`)HXAúûöNBAúût)HpAúût)HtAúûüNBaZAúûZaþ Ag ƒm ƒÿÿo`°)CBAúûêCúü!I1|pAúüä)HTAúü÷)HXAúú²NBAúúž)HTAúú�)HXAúúœNBAúüÔ)HTAúüÍ)HXAúú†NB` ,QÌg ,.ÌgNupNAAúû$)HTAúûD)HXAúúXNBAúùÖ)HpAúùÖ)HtAúú^NBa¼aºAúù¼a`J�gÄ ƒm ƒÿÿo`²NuAúû()HTAúûH)HXAúúNBAúù†)HpAúù†)HtAúúNBaÿlaÿhAúùha NuRˆ  gøHçIúîB„BƒÁaSIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFC‡\M3151$2,'H8WIN10'**‚8"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H8WIN10.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$2,'H5WIN05'**‚5�1/4"‚5‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN05.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$2,'H5WIN10'**‚5�1/4"‚10‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN10.SI SIZESET‚SET‡1‰ENDCé‰IFC‡\M3151$2,'H5WIN12'**‚5�1/4"‚12‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN12.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3151$2,'H5WIN15'**‚5�1/4"‚15‚megabyte‚hard‚disk*“INCLUDEƒ&.H5WIN15.SI SIZESET‚SET‡1‰ENDC4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�type‰ENDC*0*‚Set�up�attribute�mask�for�hard�disk�on�MVME315*9ATT_MASK�SET‚0<SIZESET‚SET‡0‰If�non-zero�then�they�have�selected�a�disk�media ‰IFGE†NF315$2-1O********************************************************************************/*‚First�floppy�disk�on�first�MVME315�controller*O******************************************************************************* ‰IFC‡\M3154$2,'F8DDDSI'*-*‚8"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F8DDDSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$2,'F8SDDSM'*2*‚8"‚single�density,�double�sided,�Motorola�format*“INCLUDE„&.F8SDDSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$2,'F8SDSSI'*-*‚8"‚single�density,�single�sided,�IBM�format*“INCLUDE„&.F8SDSSI.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$2,'F8SDSSM'*2*‚8"‚single�density,�single�sided,�Motorola�format*“INCLUDE„&.F8SDSSM.SI SIZESET‚SET‡1‰ENDC‰IFC‡\M3154$2,'F5DDDSI'*1*‚5�1/4"‚double�density,�double�sided,�IBM�format*“INCLUDE„&.F5DDDSI.SI SIZESET‚SET‡1‰ENDC 4*ƒMake�sure�the�user�has�defined�a�valid�media�type. ‰IFEQ†SIZESET‰FAIL†**�Invalid�media�typeéééééééé