IMD 1.17: 11/11/2014 14:37:42 82VKXBVERDOS C* VERSADOS/RMS68K OBJECT 4.4 SN=48634 (EQUATE FILES) 10 OF 22  BT10\82VKXBVERDOS 0420¿<-.VERSAPT.CF$=COPY‡VERSAPT.MFPDRV.CF,VERSAPT.CF;A MFPDRV„=�*SUBSˆ&.MFPDRV.LG EXCLUDE…DRVL EXCLUDE…TERMLINKˆ&.MFPDRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.MFPDRV.LOEND‰&.MFPDRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.MFPDRV.AG&ASM‰IOC.MFPDRV.AG,NEW.RO,\ASMLS;RMZ=80 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC "*‚Adjust�total�number�of�terminals&TOTTERM‚=�\&TOTTERM+\NOLTERM * Adjust starting CRT device #&CRTDV„=�\&CRTDV+\NOLTERM &* Adjust number of serial port drivers&SERFLAG‚=�\&SERFLAG+1ééé(0**ˆ&.MPCCDRV.CI*HMSGˆ********************************************************************MSGˆ**†MPCC�DRIVERHMSGˆ******************************************************************** IFEQˆ\NT050$1(ƒMSG†NT050$1�must�at�least�be�set�to�a�1ƒABORTENDCIFGTˆ\NT050$1-2ƒMSG†NT050$1�must�be�<=�2ƒABORTENDC 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.MPCCDRV.CF,VERSAPT.CF;A MPCCDRVƒ=�*SUBSˆ&.MPCCDRV.LG EXCLUDE…DRVL EXCLUDE…TERMLINKˆ&.MPCCDRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.MPCCDRV.LOEND‰&.MPCCDRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.MPCCDRV.AG'ASM‰IOC.MPCCDRV.AG,NEW.RO,\ASMLS;RMZ=80 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC "*‚Adjust�total�number�of�terminals&TOTTERM‚=�\&TOTTERM+\NT050$1 * Adjust starting CRT device #&CRTDV„=�\&CRTDV+\NT050$1 &* Adjust number of serial port drivers&SERFLAG‚=�\&SERFLAG+1éé é13**ˆ&.MPSCV02.CI*GMSG‰*******************************************************************-MSG‰**‚MPSC�DRIVER�FOR�VM02�LOCAL�SERIAL�PORTGMSG‰******************************************************************* IFGTˆ\NOLTERM-2ƒMSG†NOLTERM�must�be�<=�2ƒABORTENDC SUBSˆ&.MPSCV02.SI&FILENAM‚=�"&.XMPSCV02.SI"2&SDRVR„=�"MSUP"‡Must�be�at�least�3�characters�long INCLUDE…&.MPSCDRV.CI 8*ƒAdjust�terminal�values�for�#�of�terminals�on�CPU�board&TOTTERM‚=�\&TOTTERM+\NOLTERM :*ƒAdjust�terminal�device�#�for�#�of�terminals�on�CPU�board&CRTDV„=�\&CRTDV+\NOLTERMééééé:* *ˆ&.PIAEXM.CI*GMSG‰*******************************************************************9MSG‰**‚PIA�PRINTER�PORT�DRIVER�FOR�EXORMACS�LOCAL�PRINTERGMSG‰******************************************************************* .*ƒCheck�to�make�sure�NOLPRT�is�not�more�than�1IFGTˆ\NOLPRT-1!ƒMSG†NOLPRT�cannot�be�more�than�1ƒABORTENDC SUBSˆ&.PIAEXM.SI&FILENAM‚=�"&.XPIAEXM.SI" INCLUDE…&.PIADRV.CI 6*ƒAdjust�printer�values�for�#�of�printers�on�CPU�board&TOTPRTƒ=�\&TOTPRT+\NOLPRT 8*ƒAdjust�printer�device�#�for�#�of�printers�on�CPU�board5IFEQˆ\&PRTDV-$50522020�Test�for�special�case�of�'PR‚'ƒ&PRTDV„=�$50523020ENDC&PRTDV„=�\&PRTDV+(\NOLPRT*$100)éé éééC* *ˆ&.PIA410.CI*GMSG‰*******************************************************************0MSG‰**‚PIA�PRINTER�PORT�DRIVER�FOR�MVME410�BOARDGMSG‰******************************************************************* IFGTˆ\NU410$1-2ƒMSG†NU410$1�must�be�<=�2ƒABORTENDCIFGEˆ\NVME410-2ƒIFGT…\NU410$2-2†MSGƒNU410$2�must�be�<=�2†ABORTƒENDCENDC SUBSˆ&.PIA410.SI&FILENAM‚=�"&.XPIA410.SI" INCLUDE…&.PIADRV.CI !* Adjust total number of printers&TOTPRTƒ=�\&TOTPRT+\NU410$1IFGEˆ\NVME410-2ƒ&TOTPRTƒ=�\&TOTPRT+\NU410$2ENDC 5* Adjust printer device # for # of printers on VME4105IFEQˆ\&PRTDV-$50522020�test�for�special�case�of�'PR‚'ƒ&PRTDV„=�$50523020ENDC &PRTDV„=�\&PRTDV+(\NU410$1*$100)IFGEˆ\NVME410-2!ƒ&PRTDV„=�\&PRTDV+(\NU410$2*$100)ENDCééééL%* *ˆ&.PIADRV.CI*GMSG‰*******************************************************************@MSG‰**‚PIA�PRINTER�PORT�DRIVER�-�used�on�local�CPU�bds.�&�VME410GMSG‰******************************************************************* 4IFEQˆ\&PIAFLAG„Test�to�see�if�we�need�the�PIA�driver6ƒ*�Build�VERSAdos�patch�chain�file�.VERSAPT.CF%ƒ=COPY‡VERSAPT.PIADRV.CF,VERSAPT.CF;A ƒPIADRV„=�*ƒSUBSˆ&.PIADRV.LGƒLINKˆ&.PIADRV.LGƒIFEQˆ\LINKLSW†=COPY‡\LINKLS,\WORKLS;AƒENDCƒPROCESS…&.PIADRV.LOƒEND‰&.PIADRV.LO@ƒ&PIAFLAG‚=�1ŒNon-zero�means�we�have�already�included�the�driverENDC 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.PIADRV.AG&ASM‰IOC.PIADRV.AG,NEW.RO,\ASMLS;RMZ=80 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC. LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDCééééU"**ˆ&.RWINDRV.CI*GMSG‰*******************************************************************0MSG‰**…RWIN1�DRIVER�-�Winchester�Disk�ControllerGMSG‰******************************************************************* IFEQˆ\NHRWIN$1+\NFRWIN$15ƒMSG†NHRWIN$1�or�NFRWIN$1�must�be�at�least�set�to�a�1ƒABORTENDCIFGTˆ\NHRWIN$1-2ƒMSG†NHRWIN$1�must�be�<=�2ƒABORTENDCIFGTˆ\NFRWIN$1-2ƒMSG†NFRWIN$1�must�be�<=�2ƒABORTENDC *‚Adjust�total�number�of�disks�-&&TOTDSKƒ=�\&TOTDSK+\NHRWIN$1+\NFRWIN$1 IFGEˆ\NORWIN-2ƒIFEQˆ\NHRWIN$2+\NFRWIN$25†MSG†NHRWIN$2�or�NFRWIN$2�must�be�at�least�set�to�a�1†ABORTƒENDCƒIFGTˆ\NHRWIN$2-2†MSG†NHRWIN$2�must�be�<=�2†ABORTƒENDCƒIFGTˆ\NFRWIN$2-2†MSG†NFRWIN$2�must�be�<=�2†ABORTƒENDC!ƒ*‚Adjust�total�number�of�disks�-'ƒ&TOTDSKƒ=�\&TOTDSK+\NHRWIN$2+\NFRWIN$2ENDC 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.RWINDRV.CF,VERSAPT.CF;A RWINDRVƒ=�*SUBSˆ&.RWINDRV.LGLINKˆ&.RWINDRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.RWINDRV.LOEND‰&.RWINDRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.RWINDRV.AG'ASM‰IOC.RWINDRV.AG,NEW.RO,\ASMLS;RMZ=81 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDCéé^@* *ˆ&.TNTDRV.CI*GMSG‰*******************************************************************4MSG‰*****„TNT�--�Transparent�Network�Terminal�DriverGMSG‰******************************************************************* IFGTˆ\NOTNT-5ƒMSG†NOT NT�must�be�<=�5ƒABORTENDC TASKˆ&.TNTDRV.LO,.TNTSTATE…=�'DORM'ATTRIB„=�'SYST'ATTRIB„=�'CRIT' SESSIONƒ=�1PRIORITY‚=�$D0TNTSTR„=�*ŒTNT�LOAD�ADDR. TNTASR„=�*+2ŠTNT�ASR�ENTRY�POINTSUBSˆ&.TNTDRV.LGLINKˆ&.TNTDRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCEND‰&.TNTDRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.TNTDRV.AG&ASM‰IOC.TNTDRV.AG,NEW.RO,\ASMLS;RMZ=75 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC #*�Build�VERSAdos‚.OSLIST.AG"=COPY‡OSLIST.TNTDRV.SI,OSLIST.AG;A 5* Build VERSAdos patch chain file .VERSAPT.CF$=COPY‡VERSAPT.TNTDRV.CF,VERSAPT.CF;Aééég-**ˆ&.VM22DRV.CI*GMSG‰*******************************************************************$MSG‰**…VM22�DRIVER�-�Disk�ControllerGMSG‰******************************************************************* *3*‚The�attributes�mask�(word)�is�defined�as�follows:*<*ƒBit�0:‚MFM(1)/FM(0)�encoding�method�on�media�-�floppy�disk=*ƒBit�1:‚96(1)/48(0)�TPI�track�density�on�media�-�floppy�disk.*ƒBit�2:‚Double(1)/single(0)�sided�floppy�disk6*ƒBit�3:‚IBM(1)/Motorola(0)�media�format�-�floppy�disk7*ƒBit�4:‚Hard�disk(1)/floppy�disk(0)�media�-�both�disks@*ƒBit�5:‚MFM(1)/FM(0)�encoding�capability�on�drive�-�floppy�disk<*ƒBit�6:‚96(1)/48(0)�TPI�track�density�-�drive�-�floppy�disk?*ƒBit�7:‚Seek�req'd�with�head�switch(1)�-�SMD�drive�-�hard�disk?*ƒBit�8:‚Post-read(1)/Pre-write(0)�precompensation�-�both�disks4*ƒBit�9:‚8�inch(1)/5-1/4�inch(0)�media�-�floppy�disk* IFEQˆ\NHV22$1+\NFV22$13ƒMSG†NHV22$1�or�NFV22$1�must�be�at�least�set�to�a�1ƒABORTENDCIFGTˆ\NHV22$1-8ƒMSG†NHV22$1�must�be�<=�8ƒABORTENDCIFGTˆ\NFV22$1-4ƒMSG†NFV22$1�must�be�<=�4ƒABORTENDC *‚Adjust�total�number�of�disks�-$&TOTDSKƒ=�\&TOTDSK+\NHV22$1+\NFV22$1 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.VM22DRV.CF,VERSAPT.CF;A VM22DRVƒ=�*SUBSˆ&.VM22DRV.LGLINKˆ&.VM22DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.VM22DRV.LOEND‰&.VM22DRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.VM22DRV.AG'ASM‰IOC.VM22DRV.AG,NEW.RO,\ASMLS;RMZ=81 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;A ENDC2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC /*‚--�adjust�disk�controller�#�for�disks�on�VM22&DSKDV„=�\&DSKDV+$1009*‚--�adjust�starting�device�address�&�vector�#�for�IPC�#2&DEVADDƒ=�\&DEVADD+$200&VECTNOƒ=�\&VECTNO-1 pD**ˆ&.VM30DRV.CI*GMSG‰*******************************************************************9MSG‰**…MCCM�DRIVER�-�This�file�to�build�IOC.RO�part�only!8MSG‰**‰Physical�IPC�driver�handles�I/O.‚See�&.IPCDRV.CI.GMSG‰******************************************************************* 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.VM30DRV.AG'ASM‰IOC.VM30DRV.AG,NEW.RO,\ASMLS;RMZ=80 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC 3* Adjust printer device # for # of printers on VM305IFEQˆ\&PRTDV-$50522020�test�for�special�case�of�'PR‚'ƒ&PRTDV„=�$50523020ENDC &PRTDV„=�\&PRTDV+(\NPV30$1*$100)IFGEˆ\NOVM30-2!ƒ&PRTDV„=�\&PRTDV+(\NPV30$2*$100)ENDCIFGEˆ\NOVM30-3!ƒ&PRTDV„=�\&PRTDV+(\NPV30$3*$100)ENDCIFGEˆ\NOVM30-4!ƒ&PRTDV„=�\&PRTDV+(\NPV30$4*$100)ENDCééééy#**ˆ&.PV01DRV.CI*GMSG‰******************************************************************* MSG‰**‚VM01�LOCAL�PRINTER�DRIVERGMSG‰******************************************************************* IFGT‹\NOLPRT-2ƒMSG‰NOLPRT�must�be�<=�2ƒABORTENDC #* Adjust total number of printers -&TOTPRTƒ=�\&TOTPRT+\NOLPRT 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.PV01DRV.CF,VERSAPT.CF;A PV01DRVƒ=�*SUBSˆ&.PV01DRV.LGLINKˆ&.PV01DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.PV01DRV.LOEND‰&.PV01DRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.PV01DRV.AG'ASM‰IOC.PV01DRV.AG,NEW.RO,\ASMLS;RMZ=80 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC 3* Adjust printer device # for # of printers on VM015IFEQˆ\&PRTDV-$50522020�test�for�special�case�of�'PR‚'ƒ&PRTDV„=�$50523020ENDC&PRTDV„=�\&PRTDV+(\NOLPRT*$100)é éé‚-**ˆ&.MPSCDRV.CI*GMSG‰*******************************************************************FMSG‰**‚MPSC�(7201)�DRIVER�FOR�TERMINALS�-�local�CPU�boards�and�MVME400GMSG‰******************************************************************* 8IFEQˆ\&SUPFLAG„Test�to�see�if�we�need�the�MPSCSUP�driverƒIFEQˆ"\&SDRVR"„,"MSUP"6†*�Build�VERSAdos�patch�chain�file�.VERSAPT.CF&†=COPY‡VERSAPT.MPSCSUP.CF,VERSAPT.CF;A †MPSCSUPƒ=�*†SUBSˆ&.MPSCSUP.LG†LINKˆ&.MPSCSUP.LG†IFEQˆ\LINKLSW‰=COPY‡\LINKLS,\WORKLS;A†ENDC†PROCESS…&.MPSCSUP.LO†END‰&.MPSCSUP.LO†&SDRVADD‚=�\MPSCSUP9†&SUPFLAG‚=�1ŒNon-zero�means�we�have�already�included�the †*˜driverƒENDCENDC  8IFEQˆ\&SPRFLAG„Test�to�see�if�we�need�the�MPSCSPR�driverƒIFEQˆ"\&SDRVR"„,"MSPR"6†*�Build�VERSAdos�patch�chain�file�.VERSAPT.CF&†=COPY‡VERSAPT.MPSCSPR.CF,VERSAPT.CF;A †MPSCSPRƒ=�*†SUBSˆ&.MPSCSPR.LG†LINKˆ&.MPSCSPR.LG†IFEQˆ\LINKLSW‰=COPY‡\LINKLS,\WORKLS;A†ENDC†PROCESS…&.MPSCSPR.LO†END‰&.MPSCSPR.LO†&SDRVADD‚=�\MPSCSPR9†&SPRFLAG‚=�1ŒNon-zero�means�we�have�already�included�the †*˜driverƒENDCENDC  5IFEQˆ\&MPSCFLG„Test�to�see�if�we�need�the�MPSC�driver6ƒ*�Build�VERSAdos�patch�chain�file�.VERSAPT.CF&ƒ=COPY‡VERSAPT.MPSCDRV.CF,VERSAPT.CF;A ƒMPSCDRVƒ=�*ƒSUBSˆ&.MPSCDRV.LG ƒEXCLUDE…DRVL ƒEXCLUDE…TERMƒLINKˆ&.MPSCDRV.LGƒIFEQˆ\LINKLSW†=COPY‡\LINKLS,\WORKLS;AƒENDCƒPROCESS…&.MPSCDRV.LOƒEND‰&.MPSCDRV.LO@ƒ&MPSCFLG‚=�1ŒNon-zero�means�we�have�already�included�the�driver 'ƒ*�Adjust�number�of�serial�port�driversƒ&SERFLAG‚=�\&SERFLAG+1ENDC 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.MPSCDRV.AG'ASM‰IOC.MPSCDRV.AG,NEW.RO,\ASMLS;RMZ=80 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC‹O**ˆ&.MPSC400.CI*GMSG‰*******************************************************************+MSG‰**‚MPSC�DRIVER�FOR�MVME400�SERIAL�PORTSGMSG‰******************************************************************* IFGTˆ\NU400$1-2ƒMSG†NU400$1�must�be�<=�2ƒABORTENDCIFGEˆ\NVME400-2ƒIFGT…\NU400$2-2†MSGƒNU400$2�must�be�<=2†ABORTƒENDCENDC SUBSˆ&.MPSC400.SI&FILENAM‚=�"&.XMPSC400.SI"2&SDRVR„=�"MSPR"‡Must�be�at�least�3�characters�long INCLUDE…&.MPSCDRV.CI "*ƒAdjust�total�number�of�terminals&TOTTERM‚=�\&TOTTERM+\NU400$1IFGEˆ\NVME400-2#ƒ*ƒAdjust�total�number�of�terminalsƒ&TOTTERM‚=�\&TOTTERM+\NU400$2ENDC *ƒAdjust�starting�CRT�device�#&CRTDV„=�\&CRTDV+\NU400$1IFGEˆ\NVME400-2ƒ*ƒAdjust�starting�CRT�device�#ƒ&CRTDV„=�\&CRTDV+\NU400$2ENDC éééé”%**ˆ&.MPSCV03.CI*GMSG‰*******************************************************************-MSG‰**‚MPSC�DRIVER�FOR�VM03�LOCAL�SERIAL�PORTGMSG‰******************************************************************* IFGTˆ\NOLTERM-2ƒMSG†NOLTERM�must�be�<=�2ƒABORTENDC SUBSˆ&.MPSCV03.SI&FILENAM‚=�"&.XMPSCV03.SI"2&SDRVR„=�"MSUP"‡Must�be�at�least�3�characters�long INCLUDE…&.MPSCDRV.CI 8*ƒAdjust�terminal�values�for�#�of�terminals�on�CPU�board&TOTTERM‚=�\&TOTTERM+\NOLTERM :*ƒAdjust�terminal�device�#�for�#�of�terminals�on�CPU�board&CRTDV„=�\&CRTDV+\NOLTERMééééé�**ˆ&.P050DRV.CI*GMSG‰*******************************************************************MSG‰**…MVME050�PRINTER�DRIVERGMSG‰******************************************************************* IFGTˆ\NP050$1-1ƒMSG†NP050$1�must�be�<=�1ƒABORTENDC 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.P050DRV.CF,VERSAPT.CF;A P050DRVƒ=�*SUBSˆ&.P050DRV.LGLINKˆ&.P050DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.P050DRV.LOEND‰&.P050DRV. LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.P050DRV.AG'ASM‰IOC.P050DRV.AG,NEW.RO,\ASMLS;RMZ=80 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC !* Adjust total number of printers&TOTPRTƒ=�\&TOTPRT+\NP050$1 5* Adjust printer device # for # of printers on VME0505IFEQˆ\&PRTDV-$50522020�test�for�special�case�of�'PR‚'ƒ&PRTDV„=�$50523020ENDC &PRTDV„=�\&PRTDV+(\NP050$1*$100)ééé¦-* *ˆ&.SIODRV.CI*GMSG‰*******************************************************************=MSG‰**‚SIO�(MK68564)�DRIVER�FOR�TERMINALS�-�local�VM04�boardsGMSG‰******************************************************************* IFGTˆ\NOLTERM-2ƒMSG†NOLTERM�must�be�<=�2ƒABORTENDC $=COPY‡VERSAPT.SIODRV.CF,VERSAPT.CF;A SIODRVƒ=�*SUBSˆ&.SIODRV.LG EXCLUDE…DRVL EXCLUDE…TERMLINKˆ&.SIODRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…&.SIODRV.LOEND‰&.SIODRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.SIODRV.AG&ASM‰IOC.SIODRV.AG,NEW.RO,\ASMLS;RMZ=85 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC "* Adjust total number of terminals&TOTTERM‚=�\&TOTTERM+\NOLTERM * Adjust starting CRT device #&CRTDV„=�\&CRTDV+\NOLTERM &* Adjust number of serial port drivers&SERFLAG‚=�\&SERFLAG+1éééé¯. * *ˆ&.M4205.CI*GMSG‰*******************************************************************-MSG‰**…VME420�DRIVER�-�SASI�5�DISK�CONTROLLERGMSG‰******************************************************************* IFEQˆ\NH4205$1+\NF4205$15ƒMSG†NH4205$1�or�NF4205$1�must�be�at�least�set�to�a�1ƒABORTENDCIFGTˆ\NH4205$1-2ƒMSG†NH4205$1�must�be�<=�2ƒABORTENDCIFGTˆ\NF4205$1-4ƒMSG†NF4205$1�must�be�<=�4ƒABORTENDC IFGTˆ\NH4205$1+\NF4205$1-4%ƒMSG†\NH4205$1+\NF4205$1�must�be�<=�4ƒABORTENDC IFGEˆ\NVME4205-1!ƒ*‚Adjust�total�number�of�disks�-'ƒ&TOTDSKƒ=�\&TOTDSK+\NH4205$1+\NF4205$1ENDC IFEQˆ\&M420FLG5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M420DRV.CF,VERSAPT.CF;A M420DRVƒ=�*SUBSˆ&.M420DRV.LGLINKˆ&.M420DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,WORKLS;AENDCPROCESS…&.M420DRV.LOEND‰&.M420DRV.LO&M420FLG„=�\&M420FLG+1ENDC ?&NH420„=�\NH4205$1„Number�of�hardƒdisks�on�1st�controller�boardA&NF420„=�\NF4205$1„Number�of�floppy�disks�on�1st�controller�board@&M4200„=�\M42050$1„Type�of�1st�hardƒdisk�on�1st�controller�board@&M4201„=�\M42051$1„Type�of�2nd�hardƒdisk�on�1st�controller�boardB&M4202„=�\M42052$1„Type�of�1st�floppy�disk�on�1st�controller�boardB&M4203„=�\M42053$1„Type�of�2nd�floppy�disk�on�1st�controller�board 2&ADDRESS‚=�\L420$02…Address�of�VME420�board�SASI�5 8* Assemble the IOC portion and merge with current IOC.ROSUBS†IOC.M4205.AG%ASM‡IOC.M4205.AG,NEW.RO,\ASMLS;RMZ=80 IFEQ†\ASMLSWƒ=COPY…\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDCé¸B* *ˆ&.M4208.CI*GMSG‰*******************************************************************-MSG‰**…VME420�DRIVER�-�SASI�8�DISK�CONTROLLERGMSG‰******************************************************************* IFEQˆ\NH4208$1+\NF4208$15ƒMSG†NH4208$1�or�NF4208$1�must�be�at�least�set�to�a�1ƒABORTENDCIFGTˆ\NH4208$1-2ƒMSG†NH4208$1�must�be�<=�2ƒABORTENDCIFGTˆ\NF4208$1-4ƒMSG†NF4208$1�must�be�<=�4ƒABORTENDC IFGTˆ\NH4208$1+\NF4208$1-4#ƒMSG‰NH4208$1+NF4208$1�must�be�<=�4ƒABORTENDC IFGEˆ\NVME4208-1!ƒ*‚Adjust�total�number�of�disks�-'ƒ&TOTDSKƒ=�\&TOTDSK+\NH4208$1+\NF4208$1ENDC IFEQˆ\&M420FLG5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M420DRV.CF,VERSAPT.CF;A M420DRVƒ=�*SUBSˆ&.M420DRV.LGLINKˆ&.M420DRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,WORKLS;AENDCPROCESS…&.M420DRV.LOEND‰&.M420DRV.LO&M420FLG…=�\&M420FLG+1ENDC ?&NH420„=�\NH4208$1„Number�of�hardƒdisks�on�2nd�controller�boardA&NF420„=�\NF4208$1„Number�of�floppy�disks�on�2nd�controller�board@&M4200„=�\M42080$1„Type�of�1st�hardƒdisk�on�2nd�controller�board@&M4201„=�\M42081$1„Type�of�2nd�hardƒdisk�on�2nd�controller�boardB&M4202„=�\M42082$1„Type�of�1st�floppy�disk�on�2nd�controller�boardB&M4203„=�\M42083$1„Type�of�2nd�floppy�disk�on�2nd�controller�board 2&ADDRESS‚=�\L420$01…Address�of�VME420�board�SASI�8 8* Assemble the IOC portion and merge with current IOC.ROSUBS†IOC.M4208.AG%ASM‡IOC.M4208.AG,NEW.RO,\ASMLS;RMZ=80 IFEQ†\ASMLSWƒ=COPY…\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC éÁB**‹&.TERMLIB.CI*7*‹File�to�be�included�at�sysgen�to�bring�in�the�TERMLIB**@*‹Assemble�the�TCHTYPE�file�of�valid�channel�types�for�terminals**ASM‰&.TCHTYPE.AG,&.TCHTYPE.RO,\ASMLS;RZ=60 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC TERMLIBƒ=�*SUBSˆ&.TERM1.LGLINKˆ&.TERM1.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDC SUBSˆ&.TERMLIB.LG EXCLUDE…DRVLLINKˆ&.TERMLIB.LGPROCESS…&.TERMLIB.LOEND‰&.TERMLIB.LO IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCééééééÊ“' ACIADRV LGßßaaDARTDRV LGèèaaDARTSPR LGññaaDRVLIB LGúúaaEPCIDRV LGaaM300DRV LG  aaIPCDRV LGaaM315DRV LGaaM320DRV LG''=aaMFPDRV LG88aaMPCCDRV LGAAaaMPSCDRV LGJJaaMPSCSPR LGSSaaMPSCSUP LG\\aaSIODRV LGeeaaM435DRV LGnnaaP050DRV LGwwaaPIADRV LG€€aaM420DRV LG‰‰aaTERM1 LG’’aa=/*=/*†&.ACIADRV.LG=/*:=/* Link chain file run at sysgen time to link ACIA driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*J=/* Sysgen parameter ACIADRV = \ACIADRV = address at which  to link driver.=/*"=LINK ,&.ACIADRV.LO,\LINKLS;HAMIXSSEGMENT ACIA:0-13 \ACIADRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.ACIADRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDéééééé×=/*=/*†&.DARTDRV.LG=/*I=/* Link chain file run at sysgen time to link SCN2681 SUBORDINATE serial8=/* port driver for the local port on the MVME115 board.=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*J=/* Sysgen parameter DARTDRV = \DARTDRV = address at which to link driver.=/*"=LINK ,&.DARTDRV.LO,\LINKLS;HAMIXSSEGMENT DART:0-13 \DARTDRVSEGMENT�DRVL:15‚\DRVLSEGMENT�TERM:14‚\TERMLIBINPUT &.DARTDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDééééé à=/*=/*†&.DARTSPR.LG=/*H=/* Link chain file run at sysgen time to link SCN2681 SUPERVISOR serial8=/* port driver for the local port on the MVME115 board.=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*J=/* Sysgen parameter DARTSPR = \DARTSPR = address at which to link driver.=/*"=LINK ,&.DARTSPR.LO,\LINKLS;HAMIXSSEGMENT DART:0-15 \DARTSPRINPUT &.DARTSPR.ROEND=/*=ENDééééééé=/*=/*†&.DRVLIB.LG=/*5=/* Link chain file run at sysgen time to link DRVLIB3=/*�NOTE:‚ALL�input�modules�should�be�in�SECTION�15=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*C=/* Sysgen parameter DRVL = \DRVL = address at which to link driver=/* =LINK ,&.DRVLIB.LO,\LINKLS;HMIXSSEGMENT DRVL(R):15 \DRVLINPUT &.DRVLIB.ROEND=/*=ENDéééé ééò=/*=/*†&.EPCIDRV.LG=/*:=/* Link chain file run at sysgen time to link EPCI driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter EPCIDRV = \EPCIDRV = address at which to link driver=/*"=LINK ,&.EPCIDRV.LO,\LINKLS;HAMIXSSEGMENT EPCI:0-13 \EPCIDRVSEGMENT TERM:14 \TERMLIBSEGMENT DRVL:15 \DRVLINPUT &.EPCIDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDééééééû=/*=/*†&.M300DRV.LG=/*D=/* Link chain file run at sysgen time to link MVME300 (GPIB) driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M300DRV = \M300DRV = address at which to link driver=/*=/*�changes�4/24/84‚bwn:E=/* These definitions added in order that the GPIB driver work on the=/* VME/10 as well as VME110.B=/* We use the parameters to define lower and upper limits for theD=/* on-board ram as viewed by the GPIB driver (ONBD_LO and ONBD_HI),@=/* the lower and upper limits of off-board ram as viewed by the9=/* MVME300 board (OFFBD_LO and OFFBD_HI), and the offset,=/*�between�ONBD_LO�and�OFFBD_LO‚(RAM_SKEW).=/*"=LINK ,&.M300DRV.LO,\LINKLS;HAMIXSDEF ONBD_LO,\ONBD$LODEF ONBD_HI,\ONBD$HIDEF OFFBD_LO,\OFFBD$LODEF OFFBD_HI,\OFFBD$HIDEF RAM_SKEW,\RAM$SQSEGMENT M300:0-15 \M300DRVINPUT &.M300DRV.ROINPUT IOC.M300XTR.ROEND=/*=END éééé=/*=/*†&.IPCDRV.LG=/*9=/* Link chain file run at sysgen time to link IPC driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*G=/* Sysgen parameter IPCDRV = \IPCDRV = address at which to link driver=/*!=LINK ,&.IPCDRV.LO,\LINKLS;HAMIXSSEGMENT IPCD:7 \IPCDRVDEF ONBD_LO,\ONBD$LODEF ONBD_HI,\ONBD$HIDEF OFFBD_LO,\OFFBD$LODEF OFFBD_HI,\OFFBD$HIDEF RAM_SKEW,\RAM$SQINPUT &.IPCDRV.ROEND=/*=ENDéééééé =/*=/*†&.M315DRV.LG=/*==/* Link chain file run at sysgen time to link MVME315 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M315DRV = \M315DRV = address at which to link driver=/*"=LINK ,&.M315DRV.LO,\LINKLS;HAMIXSDEF ONBD_LO,\ONBD$LODEF ONBD_HI,\ONBD$HIDEF OFFBD_LO,\OFFBD$LODEF OFFBD_HI,\OFFBD$HIDEF RAM_SKEW,\RAM$SQSEGMENT M315:7 \M315DRVINPUT &.M315DRV.ROEND=/*=END  éééééé=/*=/*†&.M320DRV.LG=/*==/* Link chain file run at sysgen time to link MVME320 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M320DRV = \M320DRV = address at which to link driver=/*D=/* Sysgen parameters ONBD_LO,ONBD_HI,OFFBD_LO,OFFBD_HI and RAM_SKEW7=/*†=‚\ONBD$LO,\ONBD$HI,\OFFBD$LO,\OFFBD$HI�and�\RAM$SQ7=/*†=‚parameters�defined�by�the�macro�file�DUALPORT.MC.=/*;=/* The remaining Sysgen parameters are used by the driver.=/*I=/* The DEF statements in the link chain file satisfy the XREF statements%=/* in the macro file and the driver.=/*C=/* All of the following substitution parameters are defined in the==/* VMExxx.SYSTEM.CI file and should be modified to suit your=/* system configuration.=/*<=/*†ONBD$LO�On�board‚ram�base‚address�used�by�macro�DUALPORT;=/*†ONBD$HI�On�board‚ram�endƒaddress�used�by�macro�DUALPORT>=/*†OFFBD$LOŒOff�board�ram�base‚address�used�by�macro�DUALPORT==/*†OFFBD$HIŒOff�board�ram�endƒaddress�used�by�macro�DUALPORT==/*†RAM$SQŽOn�board�ram�offset�address�used�by�macro�DUALPORT=/*C=/* All of the following substitution parameters are defined in theO=/* &.M320DRV.CI file and should be modified to suit your system configuration.=/*6=/*†M320$SD�Post-data-gap�single-density�floppy�format6=/*†M320$DD�Post-data-gap�double-density�floppy�format*=/*†M320$HD�Post-data-gap�hard�disk�format==/*†M320$LT5ŒHead�load�time�5-1/4"�floppy�disk�drives�in�msec9=/*†M320$LT8ŒHead�load�time�8"�floppy�disk�drives�in�msec4=/*†M320$LTHŒHead�load�time�hard�disk�drives�in�msec<=/*†M320$ST5ŒHead�settling�time�5-1/4"�floppy�drives�in�msec8=/*†M320$ST8ŒHead�settling�time�8"�floppy�drives�in�msec8=/*†M320$STHŒHead�settling�time�hard�disk�drives�in�msec=/*"=LINK ,&.M320DRV.LO,\LINKLS;HAMIXSDEF ONBD_LO,\ONBD$LODEF ONBD_HI,\ONBD$HIDEF OFFBD_LO,\OFFBD$LODEF OFFBD_HI,\OFFBD$HIDEF RAM_SKEW,\RAM$SQDEF FRMT_SD,\M320$SDDEF FRMT_DD,\M320$DDDEF FRMT_HD,\M320$HD3(   DEF LDTM_5,\M320$LT5DEF LDTM_8,\M320$LT8DEF LDTM_HD,\M320$LTHDEF SETTM_5,\M320$ST5DEF SETTM_8,\M320$ST8DEF SETTM_HD,\M320$STHSEGMENT M320:0-15 \M320DRVINPUT &.M320DRV.ROEND=/*=ENDééééééé=/*=/*†&.MFPDRV.LG=/*I=/* Link chain file run at sysgen time to link MK68901 serial port driver0=/* (local port on the VME120 and VME128 boards)=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*G=/* Sysgen parameter MFPDRV = \MFPDRV = address at which to link driver=/*!=LINK ,&.MFPDRV.LO,\LINKLS;HAMIXSSEGMENT MFP:0-13 \MFPDRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.MFPDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDééééé  0=/*=/*†&.MPCCDRV.LG=/*H=/* Link chain file run at sysgen time to link R68560 serial port driver6=/* (local port on the VME050 system controller board)=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter MPCCDRV = \MPCCDRV = address at which to link driver=/*"=LINK ,&.MPCCDRV.LO,\LINKLS;HAMIXSSEGMENT MPCC:0-13 \MPCCDRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.MPCCDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDééééé9=/*=/*†&.MPSCDRV.LG=/*J=/* Link chain file run at sysgen time to link NEC 7201 subordinat driver.=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter MPSCDRV = \MPSCDRV = address at which to link driver=/*"=LINK ,&.MPSCDRV.LO,\LINKLS;HAMIXSSEGMENT MPSC:0-13 \MPSCDRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.MPSCDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDéééé  ééB=/*=/*†&.MPSCSPR.LG=/*I=/* Link chain file run at sysgen time to link NEC 7201 supervisor driver=/* for the MVME400 board=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter MPSCSPR = \MPSCSPR = address at which to link driver=/*"=LINK ,&.MPSCSPR.LO,\LINKLS;HAMIXSSEGMENT MPSC:0-15 \MPSCSPRINPUT &.MPSCSPR.ROEND=/*=ENDééééééK=/*=/*†&.MPSCSUP.LG=/*I=/* Link chain file run at sysgen time to link NEC 7201 supervisor driver=/* for the VM02 board.=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter MPSCSUP = \MPSCSUP = address at which to link driver=/*"=LINK ,&.MPSCSUP.LO,\LINKLS;HAMIXSSEGMENT MPSC:0-15 \MPSCSUPINPUT &.MPSCSUP.ROEND=/*=ENDéé  ééééT=/*=/*†&.SIODRV.LG=/*>=/* Link chain file run at sysgen time to link MK68564 driver.=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*G=/* Sysgen parameter SIODRV = \SIODRV = address at which to link driver=/*!=LINK ,&.SIODRV.LO,\LINKLS;HAMIXSSEGMENT SIO:0-13 \SIODRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.SIODRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDéééééé]=/*=/*†&.M435DRV.LG=/*>=/* Link chain file run at sysgen time to link MAG tape driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M435DRV = \M435DRV = address at which to link driver=/*"=LINK ,&.M435DRV.LO,\LINKLS;HAMIXSSEGMENT M435:8 \M435DRVINPUT &.M435DRV.ROEND=/*=END  ééééééf=/*=/*†&.P050DRV.LG=/*D=/* Link chain file run at sysgen time to link VME050 printer driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter P050DRV = \P050DRV = address at which to link driver=/*"=LINK ,&.P050DRV.LO,\LINKLS;HAMIXSSEGMENT PRT5:7 \P050DRVINPUT &.P050DRV.ROEND=/*=ENDééééééo  =/*=/*†&.PIADRV.LG=/*A=/* Link chain file run at sysgen time to link PIA printer driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*G=/* Sysgen parameter PIADRV = \PIADRV = address at which to link driver=/*!=LINK ,&.PIADRV.LO,\LINKLS;HAMIXSSEGMENT PIAD:7 \PIADRVINPUT &.PIADRV.ROEND=/*=ENDééééééx=/*=/*†&.M420DRV.LG=/*C=/* Link chain file run at sysgen time to link VME420 (SASI) driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter M420DRV = \M420DRV = address at which to link driver=/*"=LINK ,&.M420DRV.LO,\LINKLS;HAMIXSSEGMENT M420:0-15 \M420DRVINPUT &.M420DRV.ROEND=/*=ENDééééé  é�=/*=/*†&.TERM1.LG=/*6=/* Link chain file run at sysgen time to link TERMLIB=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*0=/* TERMLIB modules should all be in SECTION 14./=/*�DRVLIB‚modules�should�all�be�in�SECTION�15.=/*!=LINK ,&.TERMLIB.TF,\LINKLS;HMIXRINPUT &.TERMLIB.ROINPUT &.TCHTYPE.ROEND=/*=ENDééééé銃' TERMLIB LGŸŸaaTNTDRV LG¨¨aaPV01DRV LG±±aaP115DRV LGººaaVM22DRV LGÃÃaaRWINDRV LGÌÌaaMPSC400 SIÕÕ aaMPSCV02 SIÞÞ aaMPSCV03 SIçç aaPIA101 SIðð aaPIA410 SIùù aaPIAEXM SI aaACIADRV RO  aaDARTDRV ROaaDARTSPR ROaaEPCIDRV RO&&aaIPCDRV RO//aaM300DRV ROHHaaM315DRV ROiiaaM320DRV ROzzaa=/*=/*†&.TERMLIB.LG=/*6=/* Link chain file run at sysgen time to link TERMLIB=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter TERMLIB = \TERMLIB = address at which to   link driverC=/* Sysgen parameter DRVL = \DRVL = address at which to link driver=/*0=/* TERMLIB modules should all be in SECTION 14./=/*�DRVLIB‚modules�should�all�be�in�SECTION�15.=/*"=LINK ,&.TERMLIB.LO,\LINKLS;HAMIXSSEGMENT�TERM(R):14‚\TERMLIBSEGMENT�DRVL(R):15‚\DRVLINPUT &.TERMLIB.TFINPUT &.DRVLIB.ROEND=/*=ENDééééé—=/*=/*†&.TNTDRV.LG=/*:=/* Link chain file run at sysgen time to link TNT drivers=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*G=/* Sysgen parameter TNTSTR = \TNTSTR = address at which to link driver=/* =LINK ,&.TNTDRV.LO,\LINKLS;IXHMSSEGMENT .TNT:0 \TNTSTRSEGMENT NTS:14DEFINE NNTDCBS,\NOTNTINPUT &.TNTDRV.ROINPUT NTS.NTSSERV.ROEND=/*=ENDéééééé   =/*=/*†&.PV01DRV.LG=/*B=/* Link chain file run at sysgen time to link VM01 printer driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter PV01DRV = \PV01DRV = address at which to link driver=/*"=LINK ,&.PV01DRV.LO,\LINKLS;HAMIXSSEGMENT PV01:7 \PV01DRVINPUT &.PV01DRV.ROEND=/*=ENDéééééé©=/*=/*†&.P115DRV.LG=/*D=/* Link chain file run at sysgen time to link VME115 printer driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter P115DRV = \P115DRV = address at which to link driver=/*"=LINK ,&.P115DRV.LO,\LINKLS;HAMIXSSEGMENT P115:7 \P115DRVINPUT &.P115DRV.ROEND=/*=ENDéééé éé²=/*=/*†&.VM22DRV.LG=/*:=/* Link chain file run at sysgen time to link VM22 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter VM22DRV = \VM22DRV = address at which to link driver=/*"=LINK ,&.VM22DRV.LO,\LINKLS;HAMIXSSEGMENT VM22:0-15 \VM22DRVINPUT &.VM22DRV.ROEND=/*=ENDéééééé»=/*=/*†&.RWINDRV.LG=/*;=/* Link chain file run at sysgen time to link RWIN1 driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter RWINDRV = \RWINDRV = address at which to link driver=/*"=LINK ,&.RWINDRV.LO,\LINKLS;HAMIXSSEGMENT RWIN:0-15 \RWINDRVINPUT &.RWINDRV.ROEND=/*=ENDéé ééééÄB* &.MPSC400.SI - Include file for MVME400 local serial MPSC driver*9DEVADDR1�SET‡\L400$01‚Assign�address�of�1st�MVME400�board9DEVADDR2�SET‡\L400$02‚Assign�address�of�2nd�MVME400�board*ATT_MASK�SET‡$0FFF…Set�the�attributes�mask*PAR_MASK�SET‡$7FF3…Set�the�parameters�mask8CHANTYP1�SET‡XTS7AR„Set�the�channel�type�for�MPSC�A-side8CHANTYP2�SET‡XTS7BR„Set�the�channel�type�for�MPSC�B-side"IOCVECT‚SET‡\IOCVEC4‚Vector�number IOCLVLƒSET‡\IOCLVL4‚Vector�level:NOMPSCƒSET‡\NVME400‚Define�the�number�of�MPSC�chips/boards?NUBRD1ƒSET‡\NU400$1‚Define�the�number�of�terminals�on�1st�board?NUBRD2ƒSET‡\NU400$2‚Define�the�number�of�terminals�on�2nd�boardéééééÍ ?* &.MPSCV02.SI - Include file for VM02 local serial MPSC driver*0DEVADDR1�SET‡\LTDA$01‚Assign�address�of�1st�MPSC9DEVADDR2�SET‡0‰Assign�address�of�2nd�MPSC�(None�for�VM02)*ATT_MASK�SET‡$0FFF…Set�the�attributes�mask*PAR_MASK�SET‡$77F3…Set�the�parameters�mask8CHANTYP1�SET‡XTS7A2„Set�the�channel�type�for�MPSC�A-side8CHANTYP2�SET‡XTS7B2„Set�the�channel�type�for�MPSC�B-sideIOCVECT‚SET‡$8C‡Vector�numberIOCLVLƒSET‡6‰Vector�level3NOMPSCƒSET‡1‰Define�the�number�of�MPSC�chips/boards>NUBRD1ƒSET‡\ NOLTERM‚Define�the�number�of�terminals�on�1st�MPSC=NUBRD2ƒSET‡0‰Define�the�number�of�terminals�on�2nd�MPSC‚(N/A)éééééÖ ?* &.MPSCV03.SI - Include file for VM03 local serial MPSC driver*0DEVADDR1�SET‡\LTDA$01‚Assign�address�of�1st�MPSC9DEVADDR2�SET‡0‰Assign�address�of�2nd�MPSC�(None�for�VM03)*ATT_MASK�SET‡$0FFF…Set�the�attributes�mask*PAR_MASK�SET‡$7FF3…Set�the�parameters�mask8CHANTYP1�SET‡XTS7A3„Set�the�channel�type�for�MPSC�A-side8CHANTYP2�SET‡XTS7B3„Set�the�channel�type�for�MPSC�B-sideIOCVECT‚SET‡$43‡Vector�numberIOCLVLƒSET‡4‰Vector�level3NOMPSCƒSET‡1‰Define�the�number�of�MPSC�chips/boards>NUBRD1ƒSET‡\NOLTERM‚Define�the�number�of�terminals�on�1st�MPSC=NUBRD2ƒSET‡0‰Define�the�number�of�terminals�on�2nd�MPSC�(N/A)éééééß  @* &.PIA101.SI - Include file for VME101 local printer PIA driver*/DEVADDR1�SET‡\LPDA$01‚Assign�address�of�1st�PIA;DEVADDR2�SET‡0‰Assign�address�of�2nd�PIA�(None�for�MVME101) CHANTYPE�SET‡XTPRTL„Channel�typeIOCVECT‚SET‡$1B‡Vector�numberIOCLVLƒSET‡3‰Vector�level'NOPIA„SET‡1‰Define�the�number�of�boards=NUBRD1ƒSET‡\NOLPRTƒDefine�the�number�of�printers�on�1st�board=NUBRD2ƒSET‡0‰Define�the�number�of�printers�on�2nd�board�(N/A)ééééééè A* &.PIA410.SI - Include file for MVME410 local printer PIA driver*9DEVADDR1�SET‡\L410$01‚Assign�address�of�1st�MVME410�board9DEVADDR2�SET‡\L410$02‚Assign�address�of�2nd�MVME410�board CHANTYPE�SET‡XTPRTL„Channel�type"IOCVECT‚SET‡\IOCVEC1‚Vector�number IOCLVLƒSET‡\IOCLVL1‚Vector�level6NOPIA„SET‡\NVME410‚Define�the�number�of�MVME410�boards@NUBRD1ƒSET‡\NU410$1‚Define�the�number�of�printers�on�1st�MVME410@NUBRD2ƒSET‡\NU410$2‚Define�the�number�of�printers�on�2nd�MVME410ééééé éñ B* &.PIAEXM.SI - Include file for EXORmacs local printer PIA driver*/DEVADDR1�SET‡\LPDA$01‚Assign�address�of�1st�PIA;DEVADDR2�SET‡0‰Assign�address�of�2nd�PIA�(None�on�EXORmacs) CHANTYPE�SET‡XTPEXM„Channel�typeIOCVECT‚SET‡$8B‡Vector�numberIOCLVLƒSET‡5‰Vector�level5NOPIA„SET‡\NOLPRTƒDefine�the�number�of�local�printers7NUBRD1ƒSET‡1‰Define�the�number�of�printers�on�1st�board=NUBRD2ƒSET‡0‰Define�the�number�of�printers�on�2nd�board�(N/A)ééééééú Y1ACIADRV ASYST' ACIADRV SAU…VERSADOS ACIA TERMINAL DRIVER WITH TYPE-AHEADS2pTERM_TBE pTERM_INI pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR †F3tlP121784 4`ì`ú`ü`ú`Ú`¨F3@`º`¼`¾`ÎN¹(g kp N@`NuAú¾p%N@NuN¹(Nu"m"k|ÿþNu/F3€f f:f4f`n­|N¹(`brtÂf)J-~gQí~JmJN¹(F3`B)J-~f8g Pí~N¹(`&g pèN¹(``g pêN¹(``Nq"F3pU@NuNu@çFíB@­{FßNuNuNuHçÀð@çAíl"m"<( f,F3( g( f` ( f@`( f@( f@F3€FíB€Fß@| @{Ÿ@@} -fg -gf(&rð-F3férÃ9þà�9þàLßNuB/ m"gÀ _Nu­}Nu­{NuHç€-B3|`€LßNu­{Nu@çFíBIúýÖ+Lv"m"­N¹(aþîaþìFßNu<4é ééé\1DARTDRV ASYST' DARTDRV SAX1…VERSADOS SCN2681 TERMINAL DRIVER WITH TYPE-AHEADi2pTERM_TBE pMARK_DOW pTERM_INI pTERM_UNR pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR ÒF3xlP110784 4`Ð`ê`ì``2`0F3@€`R`r`’`®N¹(g kp N@`NuAú¸p%N@NuPí‡N¹(Nu`HNq` Nq`æF3Nq`("m"+H|�+A€J-†g p@`Hp @„@Pí‡N¹(`0"m"F3+H|)�+A€)pf N¹(`H@-„@@H@g pèN¹(`F3æg pêN¹(`Ôf`Ê`Jg pèN¹(`¸-„P@"-€�F3+A€HçÀAí$"mN‘Lß`Š"m"+H|i…-„P@�A€)F3))�+A€-…gHN¹(`@�+A€+H| m(fHçÀAíF3$"mN‘Lß`HçÀAíˆ"mN‘Lß m|"-€NuFíB|„m„@QíF3‡Fü NuJ-‡NuHç€@"m"p @„@@LßNuHçàà@çAíl"m"$m-F3f|U`|ª-„@@p€( f`( g(F3 g`r( f`FíB-„B€�Fí@p(F3&ãˆ2;0(gAàYA-f<`<÷@ ` "3F3DUfªwˆˆ™ª»Ì-f|`|(g-f|UF3`|ªp @„@FßLßNuNuBHç@€ m-g(gÀLßF3NuHç€ m-f|U`|ªLßNuHç€ m-f|`F3|LßNuHç€p@„@`Pí†@LßNuHç€p @„@pQíH3†@LßNu@çFíBIúûÜ+LvAù*|+HŒ+m"-g­"m"|:F3 €!|*p @„@N¹(aý²FßNuN¹(FßNuKéýx"m"(mvN¹(gp N@Nu<4éé W1DARTSPR ASYST' DARTSPR SA 4…SCN2681 SUPERVISOR DRIVER FOR MVME115 BOARD2 ¾F3.*(110184 4Nup N@p m""|ø|F3( gr/" M;pkd*h1|p€gJ­g*mè1|ÿp``>"mN±F3J�f"|ø)fr*h"- `Jhpgép;j¤"pS@Nu"pR@NuüF3ü F3         F3  D3        4 éééééY1EPCIDRV ASYST' EPCIDRV SA C…VERSADOS 2661 TERMINAL DRIVER WITH TYPE-AHEADS2pTERM_TBE pTERM_INI pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR  F3tlP021485 4``2`n`ˆ``F3@``0`B`XN¹(g kp N@`NuAú`p%N@NuN¹(Nu/"m"))F3ff"|ÿþNu/8f:$f(ffpfh`Ò)�F3 AN¹(`fN¹(`\$ÁAg pèN¹(`Bg pêN¹(`2g,F3€fÜ)�AN¹(``)g²fŠ`Nq"pU@NuNuHç@@çFíB)F3ÁA€FßLßNuHçÀ@çFíB)ÁA)g@Fß|ÿûLßF3Nu@Fß|LßNuHç€@@çFíB"m"|7FßLßNuHçÀð@çAíl"m"pF3( f@`À( g( g ( g` FíBF3@(&p@F×<7(gþFíB@(FßLßNuBHç@€ m"F3(JkÀLßNuHç€)€@LßNuHç€)À@LßNuHçF3€)@LßNuHç€)€€@)LßNu@çFíBIúý43 +LvN¹(aþÆaþàFßNu<4éééé`1IPCDRV ASYST' IPCDRV SA …VERSAdos IPC I/O Handler Process Ver. 4.4 - 11/28/84=2pRAM_SKEW pONBD_HI pONBD_LO pOFFBD_HI pOFFBD_LO '.F3 0žL010885 4@€€ @Jº4F3ö8Òhî®AíÊ+H À <àüS€nø -g2B€B� mÀAè 1|þ1|_³F3RÑüD fæ1|1|#Nu *fa À` P-qg<ó` dB‡F3-qg<„` .B…,*:*"mPa `` Nq<†` 4&F(m",gíqF3<ó` (j+mPˆpAúÿ<¼XWÈÿüf Ñü0Nð<‚`ìa ,+aF3>+FŒ Fa1@1AB†Æa´aò2<0‰| |`` -F3g´a¾,+aò+FŒ FaÄH§À<F@ÀhFAÂh‚@LŸf<6< ÆhF3f` ‚<ˆ`TB†Æa:ax2<@‰ mŒHç*mÀB€,*ÀüDÛÀKí F3,g~ <€(g( `- É <€(g( gÀ`F3- fòá˜(g( gÀ`- fòá˜(g(`-á˜ÉF3`v <€(g ( g`- gÀ(g ( f`-F3 fÀ(g ( g`- gÀ(g ( g`- gF3À@ (g(&`-&@&(g (g`-gÀ@F3(gh'` m'm''(gh ` m m B€ÉF3€(g ( g`- gÀ(g (g`-gÀ(F3g ( g`- gÀ(g ( g`( gÀ*_@F3|||P`Ä -gýa ,+aT+FŒAìz"mŒ<aF3F@ÀiFAÂi‚@fè0)ÁiF@Àh�i0)âHe3h âHe#h âHeF3#hâHe#h,gâHe3hâHeh`jâHe hhâHF3ehâHehâHehâHehâHe#hâHe#h""âHehF3&&âHeh''äHeh))"�Ba$E PˆP‰ÙQÍÿü|PB�`ê<ˆ‚`F3àz. -g z*,fz:Nu0<2< -g0<2<#,f0<þ2ÿHÿJÿRÿVÿXÿZF3ÿbÿjÿlÿpÿuÿ’ÿxÿ†ÿšÿªÿtÿzÿ~ÿ„ÿ€ÿŒÿœÿ¤ÿ”ÿbÿdÿhþÚþÜþÞÿbÿdF3ÿ ÿÿ ÿ8@€€@F3@@@ @!@0@1@2@3@4@5@6@@@A@B@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S " !F3 c€€€$d$d$DJ"I!$$(( $$$$$”$$ $$($$F3FíB -Jf"m"aa¬fa6g íj|FüF3 Nup@ -(A9A;A=A?-)A1A3A5A7@F3|= |€'|—'|'p@y@x;@j;@PAíè+HH+HL;|7ërAíF3ppB˜QÈÿüAíz+H^Nu"m"| I1 !p2-rA0‰!;Ar@-@+F3| '| '|')/-kg| '+@fR@t@ué1é3éF35aNu2<)f )QÉÿòrÕNurNup@R@ @g$)gì;@vpF3)²fR@)gîrNurÕNu"m"I1€f|ÿþNu-If-HgF3-jg|NuHç:R-x mL±íHf Iíp(l—Ë`(h&hg*gF3é5 mL±íHgˆé1röaâ`x| ) !0-rÂ@@0‰!F3;@ré3é1 mL±íHg@-kg$)%g | ')/` mV F3If| '?a xp)á€)á€) €(m €(b€( mV g fDF3 Sf�†`�‡'@",´g.0< g0< AJ°gHçþN°LßþJgrÖaF3ú`a$:JEg†` !Êmré1g0mÿüj­kgB-y)%gF3ík`)%gík g@"-H²­Lg0 mV f&| 'i/laF3-kfml aš`va g0-kg"J­fg"S­fg mb+HbF3a ` ab`vaÒg8ík"-H²­Lf(Hç—ËIíp(lAílx* ,F3. a dLßðgaö g)%AÀpa¸gŠAíp P)- f((F3 gj|'aÊ;|jpa~|'`P f|'`< @IQYp `fF3(‚Aa (` pg f |€|-|'grAíp PF3)-‚"(,)%g"((f|'`F|�' -kfrÀÂ-yfF3ík`„By)%gík`)%gíkg pa ¢|'F3gaÒBmjpa ˆ|'ga¸Bmjpa n g -m¿@+F3g mL±íLgrØahS-xLß\þ|Nu-kfrÀÂ-yfík-?y`2F3-yg(-yg> mL h P@ g P@!f rÂ-y²( ga Þíyíkp2"m")'g2€ÿ@tç€Aíp(p p g¶F3-L( gª+mRZ`þZ­k`ÿLpa ö-tR fp@u`žHç?~,mF3L­kgþ˜`ÿrÛ`êp@a¬e‚ ,´g @J¨gHçþN¨LßþJfbtaF3¬$Ha¸  G|Š'| '2+AgF*g0*"gS@a¦J@g F3­r2-r‰!©1BrNuî`ô*g0* fº`°F3p€aeÈ ,´g @J�gHçþN�LßþJf¬a$Ha4+ Sg G BF3` F B*6*$JBg*6*&tgj`g| ` F3g | ÂgJCg ¶@lr„`00a¼|‰'­r2-r‰!|F3 '©1BrNu2+Af@aN((Aínpgü R€gF3ü R€g ÂR€t‘À`þšJ€fôîrNua(0+@g(F3g|'|þ|ÿ t`þhî-kg| 'rNu<_`"<?`F3a& `| 'a@`ü+ ``ìAíp$Pê|F3-<`Ò+ aXA``º<`²<p`ª<`¢<`F3š<`’<`Š< `‚<`z<`r<`jaöNHçÿþAú8"|F3èr-B$ p"N@`p N@Lßÿík|‰'| 'rNuHç*A mL±íF3Hg4­kg,(h&h"m"| ')/-kfèB-laú´Lß8Ns­F3kHçÿþAúÿª“É$ -B��€p"N@`p N@LßÿNuaL F+Ef+HbF3` -kf4-kf@y+mVZr`8-yÂg,gv+ ÂÆ¶fF3Iaõ@fB-y­kr<þNurÝ<Nu/F@@àH@  €(m €(b€(F3@àˆ@àˆ@ Nu+|fA/rNua€(Nu mZP'R­ZrF3Nu|�';|j0<–QÈÿþ|'rNu|Ž'0<QÈÿþi- |'rNu+F3 @+@mrNurÞa+ (ÿï€@aÈrNu)'j­k|F3'rNurÙNu)'k­k­kík| 'rNurÙNu)'j­k­F3k| 'rNurÙNu)'k­k­kík|'rNurÙNua~$I"FF3a 1|1|ÿpÐh82ØQÈÿürNu$IaT"FAìz`x$IaF"Fa.±üF3fd/ Eípp,*ç€ m^%ˆ%Œík0,²gR@Eð>+J^$_J,*f(/ F3aòÆ"_) gJ*)j© ` / "Jaþ`"_4<0<ÿàÀifR0<ðÀifF3F0)ÁiF@Àh�ip0)HçàAè Cé Eúñ’rgâHe SAØQÉÿü`ìÑÁF3ÓÁ`æLß4<B) bðJ,*f4*)F fA)A)gF3)k @aä©ÿÿÿ(©ÿÿÿ,Jl²g"4<C ,´g$@JªgHçþNªF3LßþJf|J©(VÀJ©,VÁtD±fjJ,*f0-rÀJ©(f€;@rŠ!pF30,²€HçÀAèCé0ÙQÈÿüLßÃHa*|PJ,*fÃHtA( gJ*)F3krNu‚rˆNuaXpJ,*f*%þ€l{l||JNu/ t(kF3ff€Â"m"B-"_Nufæ`ìp,*Aípç€ pNu mL.( F3,(z:(x8(NuHç‚€0<$AúïJ<r‚¼XWÈÿüf 4<$”@ãBrJLßANuAíHF3"mL³íHgÓü³ÈfCíè+IL³íHNu/ CíH mHBP!L!K!G !F1DF31EÑü±ÉfAíè±íLg+HHp"_NuAúï 80 ,K|fpÆg¶gF3±D4Bgaÿ6Æh¶f 4BgB0-j ,K|g f f*rÙ`pF3fö@gggä`  ggÖg, ,K|g-sgÀaþ¬$((F3f$(,+ rÜggrÚAíp hJ¨ grNuHç?~,mL½íHg¨aF3ïHaùôAíHîÝü±ÎfMíè½íHfæ­k-kfB-y,mL(n&nF3aô``T,mL½íHgNHç?~AíH¹îgÝü±ÎfMíè½íHfæ`.î½ íLF3faîÄ&naô-kf-?yLß~ürNu<ÿLß~üNu0Aúí4r$°XgQÉÿúrÛF3Nup$��ã€Aúìˆ-kfAúìÆ20gàAð+HR+HZrNuHç?þ<4< * áD-8F3†ÿ&-aBf< g ,K|F3grÞ`*grÞAíp P( g g ,J|grÚ`rJNuHç½þfJ…#3g i6pN@`Nqr„`rLß½Nu4éééééT1M315DRV ASYST' M315DRV SA &'…VERSAdos M315 Disk Driver 3.2 - 11/26/84=2pRAM_SKEW pONBD_HI pONBD_LO pOFFBD_HI pOFFBD_LO ' ¤F3x$@101784 4@€€ ü$†ð(TF3/ |pN@`p N@*_+HÀ <ÀB˜S€nú"m"Cé2<‰|B�AF32 )r…�†cû20)2F3 vr…Ö†eû$S@bö#CH#CL aÞ3@A| aÊB|B‚°iF3 f²)f<‚`úÜ`| a˜J‘f |pHç`a&Lßr{"ˆaF3 F$¼)^H€»e%|)`f| |`||F3 iPR('@çFíBAí”4!‰ îXPJBfAúb+Hv m"aÒFß`ú>B�B‚2)6F3 )€Á"à‰à‰‚Â$HBR‚5@ABNu )<¼ZWÏÿüf(EúÿÆgXŠ gPŠ6<–G(ÿì´20F3 LßÜNu m"pÀfNu|Fí@Hçp8"m”&mŒNÓ ÀGí| )Jf)F3 fGí|`J)I ),"<ÿ°�c ‘©,')0[)Kë ƒ#Ñ©0)JH€fF3 iz)Lgp;™ajaz2)J)+gâIS)+îISA&i8)J fZ)F3 fR)g&JíufDv‚aGí‚ È È0ˆ`ÈGí|JíufüF3 ÂR‹&üGí|a(aì`¼âgžmBaÎfBvH&ÀH&ÀH&ÀH&ÀF3 H&ÀH&ÀH&ÀH&ÀQËÿÎQÉÿÂ`Fv‚aŒVé*fJv È È ÈF3  È È È È ÈQËÿÎQÉÿ¼#K8S-zbþæJnaZa|fvF3 r‡�õJ)*f J©,fþb)HLé4”€)BEúLg²fø)CaýFS)'Lí˜HíF3 ”Ym¤bþ&aPít`ø+_ŒLßJm¤g|<NuÒÓãåìíïGí|BcW‹84@.@(@"@@@ F3 €ô€vx@ÿÿ+OpróJ-tQítfþ,*z:* mPF3 aÂ(F&j|+*k> o`4Cí¤0<lÀÆÓÀ0Aúÿbr‚<ÿÿR4k²6F3 °XfòD8BIF9zNð0Eéa üü0<0ÚQÈÿü`~,,/z< mPaFF3 * F©JmœgEúh+Jva¾`Eúx+Jv<æF3 Fß`"Hçý€DÆeJ…g h6pN@`Nqr„`Lß¿Nu<q`r<pa .mppNup`F3 pHçüAv xNPÿî"HB!# -8*-gQé>NÓ`f|F3 <`Pé@gNÓg fPé;gPé?NÓLßþ<UNu®®&F3 Œ:@,’êü(if|ÿè|ÿè|ÿè)aÔgê|ÿèaÂéBiBÿðQé;|alg‚|F3 ÿèaZ©BiBÿðaNgdGúª&)at|ÿàa2QížJ(ÿø[éG )aF3 âgø|ÿèaÐ)A`æJƒgHçàÀp"BA-)$ K"CN@` LßQíž`LßF3 PížNuHç?*AJ-žgQíž m""mzPíŸ&mvaPNÓLß8üNsHç?*AJ-žg$QíF3 ž m""mzPíŸ&mva$Qé><æ`\Lß8üNsiC#iNR|AQé:QéF3 ;Qé@#iRN#iVZag$ ©Nc@Gúÿˆ&)aÿ&|ÿàQé?PíF3 žaÚQížJ)?gf`âa’`ÜJ(ÿøj|=`|=J);g<ÂF3 f (ÿØ`ô`®J):fJ)@g )AfrÃa`�S)Cf arã`€aF3 bf<ã`r|ÿàaJ|ÿèiBÿð|ÿè`ÿ Hçü&)N&iZ(„F3 *ä�4< ƒm@HÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&ÀF3 ‚ fȃ`Z Bg …gHÿØ&ÀYBS…Yƒ`ä Bg*<` g èF3 ÿØSƒS` |ÁA(ÿØR oÞYB BgHÿØYB`ò#CN#KZLß?NuHç�&)NF3 &iZ)Af ƒgèÿØSƒ`ê<ÁRƒ(ÿØgô#KZLß Nu|ÿè/F3 (<@S„fü(ÿøgî|ÿè(Nu+_vJ-Ÿg QíŸLß8üNsLßþpUNu<pF3 Lé V–€)Ca÷îS)'Líþ~Híþz"mzYmœbøæa°Pít`ø<`<aêgÿGúF3 ür&) aü|ÿèaþÌQíž<`þÞ<`<Qé;Qé@a®gþÄGúü6&)F3 $aûÔDÿàaþ’<J);fþ¤<Ã(ÿøfþ–J)@fþŽ<Õ(ÿøfþ€ -(@@@F3(- rf ü;ÿÁ`ü;ÿÃp)QÈÿú¼ÿ|À"||€(F3g|"|ž | *LßNuNuHç@@B€"m") fÀLßNu|F3 "Nu|À"NuéNu©Nu@çFíBIúüÈ+Lv+m"N¹(aþJFßNuN¹3�(FßNu<4é éé²Y1MPSCDRV ASYST' MPSCDRV SA!S…VERSADOS 7201 TERMINAL DRIVER WITH TYPE-AHEADi2pTERM_TBE pMARK_DOW pTERM_INI pTERM_UNR pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR F3ŽtP102384 4`F`H`J`„``€F3`¸`Ä`Ð`âNqNqNqNqN¹(g kp N@`NuAúÎp%N@Nu -2½f mhF3ÿô–N¹(Nu`.Nq``@Nq`B`Nq`î`,Nq`.`|```\A–"m"¼F3(¼8N¹(`–A–"m")ÿü¼8J-f N¹(`vJ-fnÀ-À fQíF3HçÀAí$"mN‘Lß`JF-˜fa(`a4PíFí@AúP"|…r$ p"N@`F3Qí`/@çFíBQí˜p@`/@çFíBPí˜pÀ-?”�-”¼­”Fß Nu/ F3*AQí*_NsA–"m"-—A—³¼¼8rÂgHçÀAíˆ"mN‘LßF3€€À-—gN¹(`�A–"m"¼¼0¼8rPÂg pèN¹(`h`r Âg pêN¹F3€(`V`TA–HçÀAí|"mN‘Lß`<A–-f Ò¨ÿö`¨ÿú|p™F3JkHçÀAí|"mN‘Lß`Nq"pU@Nu@ÿüNuNuHç€@ -2½f,|t™F3<-tgÀ"m-f@ÿö`@ÿúLßNuHçàð@çAíl"m"$mGêF3p@J-˜gpÀ( f` ( g( gFíB¼€F3@”F×p!( g@`ÀFíB¼€F×pŠ(g( g F3``FíB¼€@•¼¼Fß -2½f(&rð-férÃ*ÿø�*ÿøF3 -:½f"(&rð-gér9øqÄ„ÂøqLßNuB/rÂ-—gÀF3J-gÀ -2½f-–-fÒJjÀ"Nu-•¼­•Nu-€H3•¼­•NuHç€p€-•¼€LßNu¼­•Nu@çFíBIúû¾+LvAù*|+HH3 ŒAù*&+H€+m"-gU­ -2½fh mCèèÿö(ÿôgRèÿôF3¨ÿö|ÿô (ÿôfv¨ÿú|ÿÿø¼¼¼¼¼ fPèÿöF3èÿú¨ÿô"m"$mGê¼¼¼¼¼¼¼Q—Qí˜N¹(F3aýfFßNuN¹(FßNuKéý„"m"(mv -p™f4 m-fèÿö`èÿú|F3t™HçÀAí$"mN‘Lß` N¹(gp N@NuKéýx"m"(mv-tgHçÀAí$43"mN‘LßpÀ-—g-tgN¹(aüÂaû’PíNu<4»W1MPSCSPR ASYST' MPSCSPR SA!@…NEC7201 SUPERVISOR DRIVER FOR MVME400 BOARD2 ¦F3.*( 52383 4Nup N@/ m"B@(ÿö(ÿô;F3fk *m"mNñ pJ-þgÀ-ÿ` |À(g*m€f*m"mF3Nñ(ÿú;kJ(ÿø*m*m"mNñ "NuüüüüüüüüüüüüüüüüüüüüüüüüüüF3üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüF3üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüF3üüüüüüüüüüüüüüüüüüüüüüüüüüü,3üüüüüüüüüüüüüüüü4é ééééÄT1MPSCSUP ASYST' MPSCSUP SA!!…NEC7201 SUPERVISOR DRIVER FOR VM02 BOARD2 jF3.*(091682 4Nup N@ m"pJ-þgÀ-ÿ` 03|À(fNu/*m€f*m"mNñ4éééééééÍf1P050DRV AMSTR' P050DRV SA 6R…VERSAdos Local Printer I/O Handler Process V4.0 - 09/13/822'*F3är8080385 4@€€²ú0LFíBaFíF3@Nuí(ÿÏí)ÿÇ"m"ééJ)¹ÿÇNuB…,*:*"mPF3a¼`<†`’&F Sgª-qg<„`–;kœ+j˜+Kv(j+mPF3zpAúÿb<¼XWÈÿüf\ˆ0Nð<‚`>aÎíqB­Î"m"aÿr mzR('F3 m�-§fJ,QfPìQ< ad`aJFü `aÎa1|1|7pF32ØQÈÿü<`ÒBm||Nua– (j<)f¤!lŠF3`a| j(HÑüz4<0<ÿøÀif|0<ÿÈÀifr0)ÁiF@Àh�i0)F3âHe3h âHe#h âHe#häHe3hâHeh<@) gJ)F3g<A0) g6)g°Cd <B<õ‚`PìPaÿ$pPˆP‰0ÙQÈÿü<`àF3-qfIí~p<q$*6<aH`ÚFíB&mv"m"aýø­qB-ØFü F3mÎB­Î mzS('|æ6<æ<qp$-˜Ií~aø`Š+gAëpF3N@` Nq<”JŸ`P+Hz,+ *+š†RE/"mzaX`P�<„`.+F�ÜŸ+F”NuAížF3/,+z*"mza0`P�<„`"F _NuIí~p$*Aÿ6A<palB€NuF3fJ…g i6pN@`T—NupN@`NqT—NuR­Î±í”gf+H�-�f gPF3a¶-�fÖ ( ÿÿm6R­Î$-΄í¶HBJBf$6-¶¶m¨gal`-§f< F3av-§f±í”mœaL­q mzS('6< g6<áp<p$-˜CF3'mÎIí~a˜ -ÙfNu``T-¸-§f< aJf < a JgJŸF3Hzÿ�NuBB�)$ fXJ-×gd2< )VÉÿøfT@Ì+_ÈU­È+_ÒF3HçàÀp"B�-)$ Aúò"|'N@NqLßPíØFíBùÿÇNu aû²B-×J)F3PÃ`J)€||Pí×)Fí@Nu"m"9ÿÇg )€f|ÿþF3NuB-Ø-If-Hg-qf"m"aûDFí@|NuHç:aû2B-×J)F3 m�-Ì$mÈ&mv(m˜R-ÖHz/-ÒNÒS-ÖLß\þ|NuB-ÙB-ØFí@Lß|üF3NsHç?>*A&mv(m˜PíÙJ-ØgÖaúÌB`þ0,~|)m<g X€X‡”€F3�p­8pX€°-:c-:€)‚p9ƒp g9„p g…p B4p LÔüaNu03Hç m4pJ-ÖfpN@` Lß8+Wr`Lß8B­rNu4Öe1P115DRV AMSTR' P115DRV SA HR…VERSAdos VME115 Local Printer I/O Process V4.4 - 08/28/842'8F3ò|8030885 4@€€¼:VFíBaFíF3@Nu"m"|ÿ|)=|))€ )� NuB…,*F3:*"mPa¼`<†`’&F Sgª-qg<„`–;kœ+j˜+KF3v(j+mPzpAúÿX<¼XWÈÿüf\ˆ0Nð<‚`>aÎíqB­Î"m"aF3ÿh mzR(' m�-§fJ,QfPìQ< ad`aJFü `aÎa1|F31|7p2ØQÈÿü<`ÒBm||Nua–(j<)F3f¤!lŠ`a| j(HÑüz4<0<ÿøÀif|0<ÿÈÀifr0)ÁiF@ÀhF3�i0)âHe3h âHe#h âHe#häHe3hâHeh<@F3) gJ)g<A0) g6)g°Cd <B<õ‚`PìPaÿ$pPˆP‰0ÙQÈF3ÿü<`à-qfIí~p<q$*6<aL`ÚFíB&mv"m"aýî­F3qB-ØFü mÎB­Î mzS('|æ6<æ<qp$-˜Ií~aü`Š+F3gAëpN@` Nq<”JŸ`P+Hz,+ *+š†RE/"mzaX`P�<„`.+F�ÜŸF3+F”NuAíž/,+z*"mza0`P�<„`"F _NuIí~p$*Aÿ6A<pF3apB€NufJ…g i6pN@`T—NupN@`NqT—NuR­Î±í”gf+H�-F3�f gPa¶-�fÖ ( ÿÿm6R­Î$-΄í¶HBJBf$6-¶¶m¨gal`-F3§f< av-§f±í”mœaL­q mzS('6< g6<áp*AF3"m"&mv(m˜PíÙJ-Øg aúÐB`þ>B-ÙB-ØFí@Lß|üNs,~|)m3p B4p LÔüaNuHç m4pJ-ÖfpN@` Lß8+Wr`Lß8B­rNu4ß f1PIADRV AMSTR' PIADRV SA)…VERSAdos Local Printer I/O Handler Process V4.0 - 09/13/822'ôF3à¨8031185 4@€€è0f‚FíBaFíF3@Nu"m"||¼ÿ -Rf|€`||J|J)F3|<|< -Rf|©©NuB…,*:*"mPa¸`<†F3`Ž&F Sgª-qg<„`’;kœ+j˜+Kv(j+mPzpAúÿ,<F3¼XWÈÿüf\ˆ0Nð<‚`:aÊíqB­Î"m"aÿJ mzR(' m�-§F3fJ,QfPìQ< a``aFFü ` aÊa1|1|7p2ØQÈÿü<F3`ÎBm||Nua’(j<)f¤!lŠ`ax jF3(HÑüz4<0<ÿøÀif|0<ÿÈÀifr0)ÁiF@Àh�i0)âHe3h F3âHe#h âHe#häHe3hâHeh<@) gJ)g<A0)F3 g6)g°Cd <B<õ‚`PìPaÿ$pPˆP‰0ÙQÈÿü<`Ü-qfIíF3~p<q$*6<aÜ`ÖFíB&mv"m"aýЭqFü mÎB­Î mzF3S('|æ6<æ<qp$-˜Ií~a�`Š+gAëpN@` Nq<”JŸ`PF3+Hz,+ *+š†RE/"mzaX`P�<„`.+F�ÜŸ+F”NuAíž/,+z*"mza0F3`P�<„`"F _NuIí~p$*Aÿ6A<paB€NufJ…g i6pF3N@`T—NupN@`NqT—NuR­Î±í”gb+H�-�f gLa¤-�fÖ (F3 ÿÿm2R­Î$-΄í¶HBJBf ¶m¨ga^`-§f< ah-§f±í”m a>F3­q mzS('6< g6<áp<p$-˜C'mÎIí~a4Nu-F3¸-§f< aJf < a JgJŸHzÿžNuBB�)$ f8J-×gBF32< )VÉÿøf2@Ì+_ÈU­È+_ÒFíBééNu aûÀB-×JPÃF3`J€©éPí×)Fí@Nu"m")� �g)� �gF3|ÿþNu-If-Hg-qf"m"aûRFí@|NuHç:aû@B-×J mF3�-Ì$mÈ&mv(m˜R-ÖHz/-ÒNÒS-ÖLß\þ|Nu,~|)m<g F3X€X‡”€�p­8pX€°-:c-:€)‚p9ƒp g9„p g…p B4:3p LÔüaNuHç m4pJ-ÖfpN@` Lß8+Wr`Lß8B­rNu4èf1PV01DRV AMSTR' PV01DRV SA 1…VERSAdos Local Printer I/O Handler Process V4.4 - 09/04/842'ÊF3¢\8080385 4@€€œä6FíBaFíF3@Nu"m"J)||JNuB…,*:*"mPa¸`<†`Ž&F SgF3ª-qg<„`’;kœ+j˜+Kv(j+mPzpAúÿx<¼XWÈÿüf\ˆ0F3Nð<‚`:aÊíqB­Î"m"aÿl mzR(' m�-§fJ,QfPìQF3< a``aFFü ` aÊa1|1|7p2ØQÈÿü<`ÎBmF3||Nua’(j<)f¤!lŠ`ax j(HÑüz4<F30<ÿøÀif|0<ÿÈÀifr0)ÁiF@Àh�i0)âHe3h âHe#h âHF3e#häHe3hâHeh<@) gJ)g<A0) g6)g°CF3d <B<õ‚`PìPaÿ$pPˆP‰0ÙQÈÿü<`Ü-qfIí~p<q$*F36<aþ`ÖFíB&mv"m"aýò­qFü mÎB­Î mzS('|æ6­q mF3zS('6< g6<áp<p$-˜C'mÎIí~aRNu-¸-§F3f< aJf < a JgJŸHzÿžNuBB�$ f`(`&F3@`@`D`H`LN¹(g kp N@`NuAú>p%N@NuN¹(Nu/"m")g2F3B�) -fg`fã AúNð``b``""pR@Nu©F3B@�N¹(`n) N¹(`b)J) g pêN¹(`g pèN¹(`gpèN¹(F3@¼0`&-{@{³¼€gÀ-{gN¹(`) "pU@Nu@çFíBé@F3 FßNu)NuHç@"m"¼0¼LßNuHçÀÀAíl"m"¼p@( fF3` ( g( g@pr( g €€`ÀF3ÀÁ@Ap(&ãˆ0;@ àX @ `"0 €@ F3) ) ) ¼¼0p@éééé(F3g©LßNuNuHç@@B€"m")fÀLßNu©NuéF3NuéNu©Nu@çFíBIúýV+Lv+m""m"¼| i{N¹(a3 þŒFßNuN¹(FßNu<4éééé Q1TERMLIB ASYST' TERMLIB SA!4P…VERSADOS SERIAL PORT GENERIC ROUTINESû2pI_NRM_QE pI_HLT_QE pNUMBYTES pNUMTYPES pN_NRM_QE pN_HLT_QE pCH_TYPES pI_UNS_QE pN_UNS_QE NTERM_TBE <J-ìg prAúF3þè` Fgê+Kd+mPhprAúþ°¼XWÈÿüfÒpþNðþr‚(mdAAíʼ F3|p1AAú Îp%N@`Æ"m"(mvAú p%N@`²,+z:"mha"F(mvN¬F3<€m|ml3mn0-p3@AítCép2ØQÈÿür`ÿxAíl(jF3!lŠ!lŽ0<€2< aŠAú$p%N@r`ÿJ(jAìzB@BAal mp(F3g8(Víìg,,(*z"mha pg~C`Z+F¦HzýÆ!_*!M.1mB2 mp/ F3(mvN¬<(_€AèCì‚p2ØQÈÿür`þÐ,+z:"mha "F+Ip~ÀifþF3Âifö~0<ÿÿ�mnÀifä0<ÿÿ�mpÀifÔ0)ÁiF@Àh�i0)F3// Aè Cé EúüîB�gâHe SAØQÉÿü`ÑÁÓÁ`æ"_ _~B)& b‚,-rF3 gx~A0<Ài @gh~@)( b)fJ©gN` rðÂé²f@)F3 g )(c)(g )á˜g jB`öm|0-l@PìPNu‡rˆF3`ý®aœHípÆaFíB+g;|4pª`;|8pª`ZPíäPíåQíéB­°QíæF3+f -uWíæNuaLHípÒFíB+gQíéPíå+g;|pª`F3;|pª"mhR)'Fü AúŽp%N@p.m`Nu(mvN¬<f -grá`üô;kF3®+gAëpN@`r„`üÖ+HhB­¸,+ *+š†RE"mhaNuagr„`I3@ü°(Ú†S…NuHçÀ IaBûLßNua†HípÒ,+*+"mhaÈHípÆaþôFíB+F3g|ª`|ª+g|4«`|8«|p¬`ÿAúÂp%N@`ÿF3/ "m"aú(mvN¬0 mp(f(fJ-gN¬8QíQíN¬<€AèF3CítpFíB2ØQÈÿüFü N¬4a"_NuHçÀ€Aíl((rðÂA¾fpé@¿pÿF32(A0 A g( gp@ÀLßNu"m"(mvPíÁa¾QíÁ%Nu"m"(mvF3AíÊJ-ªf|‚1|‚`&|&md|æaø'@aN¬01|æ¼F3 |qPíÁa "QíÁgp N@NuKéýè"m"(mvJmðfNuJmöfNu m ücF3PíëNuQíë2-ò²mþfB md"-Î’­Æ!AmAíʼ |pB(mF3 a~N¬0a¤gp N@Nu5Smòf;|àòSmöJ-çg mÌöba`0-ðF3NûNuNq`Nq`’ mαíÊc aDgpa`6Á+HÎJ-ægaî -Î-F3tg°­Êc�­Æ+@¸`À`a`ÿ -Šá˜g²gB`ô-¾À°-¿f" -ÎF3�­Æ+@¸HçÀAí "mN‘LßBmðNu mÎaºf ±íÊb�`JJgþ° c F3pa``þ g ff±íÆc\ +HÎS­°J-ægL-ug&Jíêfpaܲ-ˆf -Ža¤+mÆÚB­°+|8pª`¨²-‰f0+mÆÎJ-æF3g-ugp\a– -Žaf`ýÎ+| 8pª`p±íÊcpat`DÁ+HÎR­°J-F3æg bp^aTR­°r@ÒaF-tg±íÊc ‘íÆ+H¸``ýnJ-æF3g J-êgp>a -ŽaèBmðHçÀAí "mN‘LßNuH瀀 -ªc¤á˜+@ªF3 /bB­´@ïHçÀAí "mN‘Lß`z ?b2Qíê0@ñ-®f-F3uga\HçÀAí"mN‘Lß`BB­ª md|!m¸QíäQíå mhS('AíF3ʼ |p1|aœgp N@LßNu@çFíB;|àò;|àôBmöBmþFßJ-F3çgaTNuJ-äf -Ú�­Ò+@¸NuKéýÜ"m"(mv -zgn -ìffJ-ªk`F3f(AíØ¼ |€1|N¬<À@ | `$ mda²!@pÆ@AíÊF3¼ |p1@a²N¬0aØgp N@NuKéýô"m"(mvN¬,fNu0-îNû`pF3Nq`Ö`ò`:`T`ŒJ-ég0B-¼;|ø;|úBmü -ÖR€+@ÚJ-ÃgF3B-Ä`B-ï`¢N¬( g fm“¼g a6íÃNuJ-ëgQíëHçÀAíF3"mN‘Lß` JmðfaýØNuHçÀQíç-ugaðíÃHçÀAí "mF3N‘Lß` FíBN¬DFü LßNu mÚ±íÖc aþdBmî`‚`+HÚ`ÿ mÚ±íF3Öb g+HÚ cR­´`þúBmîaþ& -´B�2-vg��nüg -ŽaþF3Nu`þªJ­°gS­° < aäNuBmî`ÿ mÚ±íÎfBmî`þü+HÚR­°F3 bR­°@H@€^a¤Nu`þx-Ãf2-Ãf,-Ãf2-Ãf8F3-Ãf2-ÃfBmÄï`þNu­Ã-„`þd­Ã-…`þVNuJ-¼fF3­Ã`˜pS-¼`þJmüf­Ã`€2-ø5oSmøf;|øSmü`ýÜá˜g"F3a@Bá˜føaRíÃHçÀAí "mN‘LßNuaa4íÃHçÀAí "mN‘LßF3Nu2-ú€oSmúf;|úRmüNuJ-Ãf mïÄ|ïNuKéýÐ"m"(mvJ-èF3gaØíÃNuKéýÄ"m"(mvQíè­ÃHçÀAí "mN‘LßNuKéý¸"m"(mF3vPíç-ugaŒíÃHçÀAí "mN‘Lß` FíBN¬@Fü NuJmþf"@F3;môþ màöfRmþ màþcBmþNu -¸fJ-äg -Î�­Æ` -Ú�­ÒF3NuHç@aûš;|ø;|úBmüBmîB-ÃBmðJ-ªc B­ª"mhS)'QíéQíäF3QíåQíëQíèB-¼LßNuKéý¬"m"(mvHç?|FíBN¬HFü aþ¨íÃAúF3"|,r$ p"N@`p N@Lß>üNu/ *AJ-ìg&@ç@À@FÀ"m"/ (mvN¬L(_FßF3 m¦N¨ `HçÀAí`"mN‘Lß*_NsKéý "m"(mv­Ãg$FíBN¬LFü F3|pªHçÀAí "mN‘LßNuPíÁAíÊa QíÁgp N@NuHçX2(&-l(R3�€ pf -ÁfaBð\`aBðV`: qf -ÁfaBðB`aBð<` €f8( -L3 ÁfaBð$`aB ð``þLßNu|ÿüª|ÑÂNuJ-ªc8AíÊ"mdaþ*#@páF3@¼ |p1@aþ./ (mvN¬0(_aÿLNuJ-ìg m¦N¨NuHçÀAí F3"mN‘LßNuJ-ìg À-À m¦N�NuÀ-ÀfJ-ègJ-…gÊ-tfNu`f°-F3†fHçÀAí$"mN‘LßNu-…fJ-èf–²f J-èfŠNu°-„fPíèHçF3ÀAí0"mN‘LßNu°-‡f J-åfF-éNu màöfpêaýNu2-ô€SmôF3f;|àôRmö mÖöfHçÀAíH"mN‘LßHçÀAí"mN‘LßNuHçÀAíF3<"mN‘LßNuJ-ìg m¦N¨NuHçÀAí$"mN‘LßNuHçH"m"(mvN¬F3(LßpNuHç~@ç@À@FÀ"m"(mvN¬HFßAúý2"|,r$ p"N@`p N@Lß 3~þpNu4éé_1TNTDRV ASYST' TNTDRV SA!B8…TRANSPARENT NETWORK TERMINAL DRIVER 07/25/84 %%1,12pNNTDCBS pNTSSERV R3…Q``dOú ð#È* ø <(ÀüXT€#À* ÈAù* ´0<NAgEúÿþ`$#È* ü"y* ø"i(y* üJ3  ©.TNT f"Aì,)H | BlBT|ÿÿ)IIìX"Q fÎ8¼ÿÿB9* Aù* ̼F3BhN¹( f |ˆ0<NA`ØJgEúÿþ`ž!|TNTD1A¼1|€J3@€�N¹(g (g(Eúÿþ`p¼BhEù* r!J!|N¹(¹* gaÜ9L3D* g ù* ` |† 0<NAAù* Ì (ÿÿg�(g†|ÿÿ (g.H3€ (ÿg~ (g ( m (/n`ÿEúÿþ`Ì(y* ü Tÿÿg0 TgIìR3$¨X`î#Ì* ‚Aù* ê!y* r1y* vN¹(` Aù* &N¹(Aù* ê (ÿÿg¤(gš|F3ÿÿ (gb (gà ( gÖ ( gÌ (g (ÿg (L3g ( m (/oEúÿþ` N¹(`2ù* `((y* ‚Ôh 9ÿÿ* flJ3RAù* N¹(`^Aù* & (ÿÿg\(gT|ÿÿ (g: (ÿg (g ( L3*m (/oEúÿþ`†N¹(`ù* ` Aù* ÌN¹(Aù*  (ÿÿg¼(gH3²|ÿÿ(y* ü Tÿÿg’ Tg ,²(gIìX`â,l (gÊ ( gH3ª (g  ( gL (ÿgB (g ( m, (/n$ù* aJ3P–””g |á4a¢` ””gú|á4aˆB9* (y* ü Tÿÿf 9J3@ * f`ý. g9* IìX`Ø`¼”g°|Ç4a>`¢”"h F3fŽi4 n0gx$n< n0g$n8 n0gEúÿþ` )Æf0.2H3 @faF-iDg:Aù*V!l !l !J!iCé!I0<NAg @J3@gEúÿþ`¸a `aú”Aù* N¹((y* ü TÿÿgŒAì,l (ÿÿgr|ÿÿF3(gd (gN (ÿg (g ( m (/oEúÿþ`BN¹(`6ùH3@* aü””g |á4a”gAìaŠIìX`ÿp`û´Hç€À0|0G($Lé8�‚)@Aú–g²fø)Caÿ*S)'Lß<NuPíx €g<ÑF3 `D Ac<ù`8; jIúTg,²fø$()f)gv)¶‚bâ‹”ƒF3 `âŠ&`ÿxB�B‚))€Á"BAHA‚Â$HBNuÒÓãåìíïPíxrô`ÿHòÑéçáîB3 ì샃øù‚æƒõùùããäÑшõùùùùùùÑùùùùùùùùùùùùùùùùùù ùùùùùùùùùùùùùùù4éééééé,1DRVLIB ASREL' DRVLIB QEVENT ROY…o2OI_HLT_QE €OI_NRM_QE OI_UNS_QE ”OLOGPHY æON_HLT_QE xON_NRM_QE ON_UNS_QE Œ/8F3Hçÿüp`Hçÿüp:3BWNqNq0Lß?¿NuHçàÀ?<Jƒgp"BA-)$ K"CN@``BW0LßNu4ééO' DRVLIB LOGPHY RO``aaQEVENT ROiiaaSETTIME ROrraa V1LOGPHY ASYST' DRVLIB LOGPHY SA!R"…DRIVER LIBRARY LOGICAL-PHYSICAL SUBROUTINE2OLOGPHY /(.3Hçýü?<fJ…g h6pN@BWNqNq0Lß?¿Nu4éééééééXO1QEVENT ASYST' DRVLIB QEVENT SA!S…QUEUE EVENTS FROM DRIVERS (TRAP #0)`2OI_NRM_QE OI_HLT_QE €ON_NRM_QE ON_HLT_QE xOI_UNS_QE ”ON_UNS_QE Œ/æF3Hçÿüp`Hçÿüp:�and��if�the�interrupt�was�not�for�us.=*…12/22/83‚Russ�Rustad„Increased�delay�during�keyboard�reset.9*†7/29/83‚Steve�FranckƒAdded�delay�during�keyboard�reset.w,€Dˆ<�G˜6 ;¨D°9¸FÀ?È6Ð'ØJà/è:ð?øH9MIC B(10e856*†7/13/83‚Steve�FranckƒAdded�keyboard�lockout�sensing.'*†6/�3/83‚Steve�FranckƒInitial�writing.*ŠPAGE* *‚XDEF's.*@ŠXDEFƒINIT_KEYBOARD„Entry�point�for�INITIALIZE�KEYBOARD�routine.:ŠXDEFƒGET_CHAR‹Entry�point�for�routine�to�be�called�when�a'*§receive�interrupt�occurs�on�the�2661.9ŠXDEFƒRING_BELLˆFlag�telling�us�to�issue�a�command�to�the*§keyboard�to�ring�the�bell. *0*‚XREF's�(indicate�where�the�XDEF�is,�if�known).*?ŠXREFƒCLEAR_SCREEN,RESET_SCREENƒRoutines�to�clear�and�reset�the*§screen;�both�are�in�OUTCHS. **‚Equate�files�included:2*…&.UTILITY.MC„Utility�macros�(like�PUSH�and�POP).*ŠNOLISTŠINCLUDE�&.UTILITY.MCŠLISTŠPAGEO********************************************************************************3*‰DIAGRAM�DEPICTING�THE�ROLES�OF�THE�VARIOUS�TABLES*O*******************************************************************************  * *©routine *©offsets *Šscan�---*ŠcodeŒ-�is�routine„|ƒ|*Štable�index‡|ƒ|/*‹---�,------------->|ƒ|------------->�BSR‚....*ƒscanƒ|ƒ|‹/�|ƒ|�TST‚....*ƒcodeƒ|ƒ|Š/‘---�etc.*‚------->|ƒ|---------< *Š|ƒ|ƒ\†\‘--- *‹---…|†\�|ƒ|*“|‡`------------->|ƒ|--------.*“|‡+�is�group…|ƒ|ˆ|†char*“|Šindex‡|ƒ|ˆ|†table*“|—---‰`----->�--- *“|–group�|ƒ|*“|�parameter‹offsetsŽ|ƒ|*“|¢.------>|ƒ| *“|¢|‡|ƒ|**“`----------------------------------'ˆ---* *I*‚When�a�scan�code�is�received,�it�is�used�as�an�index�into�the�SCAN�CODE5*‚TABLE�to�get�a�group/routine�index�and�a�parameter.*I*‚If�the�group/routine�index�is�negative,�then�it�is�a�routine�index.‚TheJ*‚corresponding�offset�is�taken�from�the�ROUTINE�TABLE�and�that�routine�is@*‚JMPed�to.‚The�parameter�may�or�may�not�be�used�by�the�routine.*G*‚If�the�group/routine�index�is�positive,�then�it�is�a�group�index.‚TheH*‚corresponding�offset�is�taken�from�the�GROUP�TABLE,�giving�the�addressJ*‚of�the�character�table�currently�in�effect�for�that�group.‚The�parameter I*‚is�used�as�an�index�into�the�character�table�to�retrieve�the�character.F*‚If�the�entry�in�the�character�table�is�0,�no�character�is�generated.*ŠPAGEO*v***********************************************************************************…DATA�(OTHER�THAN�TABLES)***O*^***************************************************************************** ŠSECTION�0 *,*‚Modes�byte�and�bit�equates�relating�to�it.*6MODES…DC.Bƒ0’The�modes�byte.‚Bits�in�this�byte�reflect)*§the�status�(up�or�down)�of�various�mode*§keys�on�the�VME/10�keyboard. 4BLANK…EQU„0’If�this�bit�is�1,�the�blank�locking�mode*§key�is�down.*CTRL†EQU„1’If�this�bit�is�1,�CTRL�is�down.6SHIFT…EQU„2’If�this�bit�is�1,�one�or�both�of�the�SHIFT*§keys�are�down.3PAD‡EQU„3’If�this�bit�is�1,�FUNC/PAD�is�down�(PAD).6ALPHA_LOCK�EQUƒ4’If�this�bit�is�1,�ALPHA�LOCK�is�down.(ALT‡EQU„5’If�this�bit�is�1,�ALT�is�down. *>*‚Status�of�the�two�shift�keys�and�bit�equates�relating�to�it.*:SHIFT_KEYS�DC.B‚0’Bits�in�this�byte�reflect�the�status�(up%*§or�down)�of�the�two�SHIFT�keys.‚The&*§composite�of�these�two�keys�is�main-*§tained�in�the�MODES�register. 4LEFT†EQU„0’If�this�bit�is�1,�the�left‚SHIFT�is�down.6RIGHT…EQU„1’If�this�bit�is�1,�the�right�SHIFT�is�down. *4*‚Equates�for�the�values�generated�by�function�keys.*6FNKEY_F1‚EQU„$A0�Value�to�generate�for�function�key�1.;FNKEY_S1‚EQU„$B0�Value�to�generate�for�shifted�funct�key�1. *?*‚Equates�describing�what�we�need�of�the�VMEC1�status�register.****‡selects�the�keyboard,�and�enables�keyboard�interrupts.Œ******É***C***…NOTES:‚If�an�error�occurs,�keyboard�interrupts�will�be�leftˆ***@***‡disabled�to�prevent�erroneous�data�from�being�processed.Š***E***‡Currently,�however,�we�are�not�checking�the�self-test�status,…***E***‡and�therefore�there�is�no�possibility�of�an�error�return.‚The„***;***‡hooks�are�left�in�to�facilitate�later�enhancements.�******É***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ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒ.ƒ.ƒ.ƒPƒPƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ***G***‡CCR:‚�=�Keyboard�initialization�was�completed�successfully.‚***7***��=�An�error�occurred�during�initialization.�******É***O*^*****************************************************************************O******************************************************************************* ŠDS…0 ŠSECTION�0ŠOPT„BRS INIT_KEYBOARD: ŠSAVEƒD0/A3/A4‹Save�registers. -ŠLEA„EPCI,A3ŒA3�<--�base�address�of�the�2661.3ŠLEA„CR2,A4�A4�<--�address�of�control�register�2�on*§the�processor�board. >ŠBSR„RESET_KEYBOARD…Initialize�the�2661�chip�and�the�keyboard.*5*‚Initialize�the�ring�bell�flag�to�be�sure�it�is�off.*3ŠSF…RING_BELLŠNo�bell�until�we�are�told�to�beep�it. *;*‚Check�if�we�are�connected�to�the�old�or�the�new�keyboard.G*‚The�old�keyboard�should�return�a�$FF�if�given�a�STATUS�command,�sinceB*‚it�does�not�support�this�command.‚The�new�keyboard�will�return�aF*‚code�between�$00�and�$70.‚If�it�is�the�old�keyboard�we�set�a�flag�toE*‚remind�us�to�only�use�the�READ_KB�command�when�requesting�data�from*‚the�keyboard.*8ŠMOVE.B�#STATUS_KB,DATA(A3)‡Issue�a�read�STATUS�command.AWAIT3…BTSTƒ#CHAR_AVAIL,STATUS(A3)„Wait�until�we�have�received�the.ŠBEQ„WAIT3•acknowledge�code�from�the�keyboard. +ŠMOVE.B�DATA(A3),D0�Is�it�the�old�keyboard? ,ŠCMP.B‚#2,D0•*�!!!�OLD�KEYBOARD�RETURNS�$02,%ŠIF.B‚�THEN’*�!!!�INSTEAD�OF�$FF. ***‡IF.B‚�THEN 4ŒST…OLD_KEYBOARDŒYes�-�set�our�flags�to�remind�us�to1ŒST…DOING_READŽuse�only�READ�commands,�then�issue 8ŒBSR„RESET_KEYBOARDŠ*�!!!�MUST�RESET,�ELSE�KEYBRD�HANGS.  =ŒMOVE.B�#READ_KB,DATA(A3)‡the�first�read�to�start�things�off. ŠELSE 1ŒSF…OLD_KEYBOARDŒNo‚-�initialize�our�flag�for�NEW2ŒSF…DOING_READŽkeyboard,�clear�the�DOING_READ�flag%*§since�we�will�send�a�STATUS�command7ŒMOVE.B�#STATUS_KB,DATA(A3)…first,�to�start�things�off. ŠENDI *&*‚Enable�interrupts�from�the�keyboard.*1ŠBSETƒ#KB_ENABLE,(A4)„Enable�keyboard�interrupts. 2ŠCLR„D0‘Set�CCR:��to�indicate�success�on�exit.  **‚Exit.*6INIT_EXIT�RESTORE�D0/A3/A4ŠRestore�registers�and�exit.ŠRTS—*‰PAGEO*v*****************************************************************************O**********************************************************************************É***E***…RESET_KEYBOARD�--�ROUTINE�TO�SET�UP�THE�2661�AND�THE�KEYBOARD‡******É***<***…FUNCTION:‚This�routine‚is�called�from�INIT_KEYBOARD.Ž******É******…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:ƒDƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.�******‡A:ƒ.ƒ.ƒ.ƒAƒAƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ******É******…D0�is�destroyed.´******É***O*^*****************************************************************************O*******************************************************************************RESET_KEYBOARD: **‚Reset�the�keyboard.*;ŠBCLRƒ#KB_ENABLE,(A4)„Disable�interrupts�from�the�keyboard. =ŠBCLRƒ#KB_RESET,(A4)…Momentarily�drive�low�(active)�the�RESET;ŠMOVEQ‚#RESET_WAIT,D0…line�to�the�keyboard.‚Because�we�need.ŠREPEAT”to�maintain�the�RESET�signal�for�about-ŠSUB.L‚#1,D0Ž13�usecs,�we�have�to�delay�a�bit&ŠUNTIL‚�before�removing�the�RESET.ŠBSETƒ#KB_RESET,(A4)…* ?ŠMOVE.L�#WAIT_COUNT,D0…Wait�a�predefined�amount�of�time�for�the8WAIT1…SUB.L‚#1,D0Žkeyboard�to�get�its�act�together�afterŠBNE„WAIT1Žthe�reset. *M*‚Initialize�the�2661.‚Because�the�2661�mode�register�is�really�two�registersM*‚and�the�one�you're�writing�to�depends�upon�the�sequence�of�prior�writes,�we(*‚must�do�this�with�interrupts�disabled.*(ŠPUSHƒSR‘Save�SR�and�disable�interrupts.ŠMOVEƒ#$2700,SRŠ*:ŠTST.B‚COMMAND(A3)ˆRead�the�command�register,�which�causes&*§the�mode�register�to�point�to�reg�1.?ŠMOVE.B�#MODE1_INIT,MODE(A3)�Initialize�mode�registers�1�and�2.ŠMOVE.B�#MODE2_INIT,MODE(A3)�*?ŠMOVE.B�#COMM_INIT,COMMAND(A3)�Initialize�the�command�register.ŠPOP„SR‘Restore�SR. **‚Select�the�keyboard.*DŠMOVE.B�#SELECT_KB,DATA(A3)�Send�the�command�to�SELECT�the�KEYBOARD. AWAIT2…BTSTƒ#CHAR_AVAIL,STATUS(A3)�Wait�until�a�character�has�been ŠBEQ„WAIT2Žreceived�by�the�2661. :ŠTST.B‚DATA(A3)‹Read�the�response.‚If�it's�not�an�ACK�(0),'*§the�keyboard�failed�its�self-test.‚We(*§ignore�the�status,�though,�since�it�is$*§possible�that�the�self-test�failed)*§because�someone�was�holding�down�a�key,)*§and�we�don't�want�such�a�minor�thing�to"*§prevent�the�system�from�booting.ŠRTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***K***…CHK_INTERRUPT�--�ROUTINE�TO�CHECK�TO�SEE�IF�THE�INTERRUPT�IS�FOR�US�******É***7***…FUNCTION:‚This�routine‚is�called�from�GET_CHAR.“******É******…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:ƒDƒDƒPƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒRƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ***-***‡CCR:�‚=�the�interrupt�is�not�oursœ***5***Œ:��=�no�error�was�indicated�in�status�***(***’�=�error�indicated�in�status—******É*** ***…D0�and�D1�are�destroyed.¬******É***O*^*****************************************************************************O*******************************************************************************CHK_INTERRUPT:  (‰LEA„EPCI,A0�A0�<--�address�of�the�2661. 3‰MOVE.B‚COMMAND(A0),D1ˆGet�2661's�command�register.1‰MOVE.B‚STATUS(A0),D0‰Get�2661's�status‚register. #‰BTST„#TXEN,D1ŽTransmitter�enabled? ‰IF‚‚THEN�No,�check�receiver ŽBTSTƒ#RXEN,D1ŽReceiver�enabled?(ŽIF‚‚THEN‹No,�return�with�CCR�=�“RTSŽENDI‰ENDI*J*‚If�an�error�bit�is�set,�then�its�our�interrupt�and�we�will�go�handle�it.* ‰PUSH.L‚D2 ‰MOVE.L‚D0,D2"‰AND.Bƒ#ANY_ERROR,D2‰Error�status?‰IF‚‚THEN�If�so, �POP.LƒD2%�MOVE.B‚#-1,D0ŒReturn�with�CCR�=��RTS‰ENDI‰PAGE ‰POP.LƒD2*C*‚Well,�we�got�here�because�either�the�transmitter�or�receiver�is†.**‚enabled�and�there�is�no�error�condition.B*‚Check�bits�in�the�status�register�and�control�register�to�see�if*‚any�are�set.*+‰AND.Bƒ#KB_INTERRUPT,D0†Keyboard�interrupt?‰IF‚ƒTHEN�If�not,�then-�AND.Bƒ#FORCE_BREAK,D1ƒforce-break�condition?.�IF‚‚THENŒIf�not,�then�RTS�with�CCR�=�‘RTS�ENDI‰ENDI**‚The�interrupt�is�ours�!!!!*‚Return�with�CCR�=��and�*‰RTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***K***…CHK_READ�---�ROUTINE�TO�CHECK�IF�IT�IS�A�READ�OR�A�STATUS�INTERRUPT�******É***7***…FUNCTION:‚This�routine‚is�called�from�GET_CHAR.“******É******…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:ƒRƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******‡A0.L�=�Address�of�2661¬******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ******É***9***‡CCR:�‚=�The�interrupt�is�from�a�READƒcommand.Ž***.***”D0.B�=�Contents�of�2661�data�register.�***6***Œ‚=�The�interrupt�is�from�a�STATUS�command.Ž******”D0.B�=�Zero.©******É***O*^*****************************************************************************O******************************************************************************* CHK_READ: ŠCLR.W„D04ŠMOVE.B�DATA(A0),D0ˆD0.W�<--�data�from�the�keyboard.*@*‚Check�to�see�if�this�interrupt�is�from�STATUS�or�READ�command:*ŠIF.B‚DOING_READ‚�#0�THEN @ŒBTST�#DATA_AVAIL,D0…This�is�a�STATUS�interrupt,�so�check�if�the)*§keyboard�FIFO�has�data�that�can�be�READ 7ŒIF��THENŒIt�does,�so�now�set�our�flag�to�inform�us5ŽST�DOING_READ‰the�next�interrupt�will�be�from�a�READ>ŽMOVE.B�#READ_KB,DATA(A0)‚command.‚Then�issue�the�READ�command'*§so�that�we�will�be�sent�the�scan�code*§in�the�keyboard's�FIFO. ŒELSE *D*‚At�this�point�our�status�says�there�is�no�character�to�read,�so�weC*‚use�this�opportunity�to�check�if�we�must�ring�the�bell.‚If�so,�we>*‚clear�the�bell�flag�for�next�time�and�issue�a�command�to�the#*‚keyboard�that�will�ring�the�bell.*ŽIF.B‚RING_BELL��#0�THEN"�SFƒRING_BELLŽClear�for�next�time.*�MOVE.B‚#ALARM_KB,DATA(A0)‚Beep�that�bell!*�BRA‚CHKOUT‘Return��since�no�char�yet.ŽENDI 9ŽMOVE.B�#STATUS_KB,DATA(A0)‚No�data�yet,�so�issue�another*©STATUS�command.ŒENDI 3CHKOUT†CLR.B�D0�Return�with�CCR�=��for�a�STATUS%ŒRTS•interrupt.‚This�will�be�ignored. ŠENDI 0ŠRTS—Return�with�CCR�=��for�a�READ�interruptŠPAGEO*v*****************************************************************************O**********************************************************************************É***B***…SEND_COMMAND�--�ROUTINE�TO�OUTPUT�ANOTHER�KEYBOARD�COMMANDŠ******É***7***…FUNCTION:‚This�routine‚is�called�from�GET_CHAR.“******É******…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:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******‡A0.L�=�Address�of�2661¬***B***‡D0.B�=�Character�that�was�just�received�from�the�keyboard.ˆ******É*** -***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ******É***C***‡CCR:�‚=�The�character�has�bit�8�set,�so�it�is�an�error.†***<***Œ‚=�Good�character,�next�command�has�been�issued.ˆ******É***O*^*****************************************************************************O******************************************************************************* SEND_COMMAND: (ŠTST.B‚D0‘Test�the�scan�code�for�errors. ŠIF��THEN$ŒRTS•Bit�8�must�be�zero,�else�error.ŠENDI *I*‚If�this�is�the�old�keyboard,�we�get�data�only�by�issuing�READ�commands.G*‚The�old�keyboard�does�not�allow�STATUS�commands.‚If�it�is�not�the�oldG*‚keyboard�we�just�issue�a�STATUS�command.‚This�effectively�'polls'�theH*‚keyboard�with�STATUS�commands,�until�it�has�a�character�in�its�FIFO�to *‚send�us.*ŠIF.B‚OLD_KEYBOARD�‚#0�THEN 0ŒST…DOING_READŠOld�keyboard�-�so�issue�it�a�READ<ŒMOVE.B�#READ_KB,DATA(A0)ƒcommand�to�get�the�next�scan�code. ŠELSE 2ŒSF…DOING_READŠNew�keyboard�-�so�issue�it�a�STATUS<ŒMOVE.B�#STATUS_KB,DATA(A0)�command�to�get�the�status�again. ŠENDI /ŠTST.B„D0’Test�the�character�to�set�CCR�=�.ŠRTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***;***ŒGET_CHAR�--�ROUTINE�TO�GET�A�CHAR�FROM�THE�KEYBOARDŠ******É***)***…FUNCTION:‚This�routine�is�XDEFed.¢******É***C***…This�routine,�if�connected�to�an�OLD�keyboard�that�does�not‰***7***…support�the�STATUS�command�operates�as�follows:•******É***H***‡Entry�is�from�a�keyboard�interrupt.‚Since�it�is�the�old�keyboard�***H***‡this�must�be�an�interrupt�from�us�issuing�a�READ�command.‚We�get�***G***‡the�scan�code�from�the�2661�and�issue�the�keyboard�another�READƒ***H***‡command.‚The�scan�code�is�then�processed�by�jumping�to�a�routine�***I***‡or�by�converting�the�scan�code�into�a�character,�depending�on�the�***$***‡scan�code�that�was�received.¦******É******É***?***…This�routine,�if�connected�to�an�NEW�keyboard�that�does�***7***…support�the�STATUS�command�operates�as�follows:•******É***C***‡Entry�is�from�a�keyboard�interrupt.‚We�determine�if�we�have†***H***‡been�interrupted�by�the�STATUS�command.‚If�so,�we�check�the�data�***E***‡in�the�2661�to�see�if�the�keyboard�FIFO�has�data�in�it.‚If�it„***D***‡does�not,�we�simply�send�another�STATUS�command�and�exit.‚If…***H***‡the�FIFO�has�data�in�it,�we�send�a�READ�command�to�get�the�data.‚***F***‡If�the�interrupt�was�not�from�the�STATUS�command,�it�must�have„***H***‡been�from�the�READ�command,�so�we�get�the�data�in�the�2661.‚This�***D***‡data�is�the�scan�code�set�by�the�keyboard�in�response�to�the†***A***‡READ�command.‚Another�STATUS�command�is�then�given�to�theˆ***@***‡keyboard�to�start�everything�over.‚The�scan�code�is�then‰***H***‡processed�by�jumping�to�a�routine�or�by�converting�the�code�into‚***9***‡a�character,�depending�on�the�scan�code�received.‘******É***C***…NOTES:‚An�old�keyboard�will�interrupt�us�only�when�it�has�aˆ***>***�character�to�give�us.‚A�new�keyboard�will�interrupt�on…***@***�every�STATUS�command,�since�we�are�polling�the�keyboard.„***B***�We�talk�to�the�keyboard�at�512�baud�so�we�get�an�interrupt‚***B***�about�every�50�milliseconds.‚The�new�keyboard�is�used�only�***2***�because�we�now�want�to�support�the�'bell'.’******É******É***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:ƒRƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ***F***‡CCR:��:��=�keystroke�did�not�generate�a�char�or�break.„***(***“�=�the�interrupt�is�not�ours–***A***Œ:��=�generated�char�is�in�D0.W�(bits�8-15�are�0).„***%***’�=�a�break�was�generated.š***(***‡D0�is�not�preserved�in�any�case.¢******É***O*^***************************************************************************** O******************************************************************************* $BASE†EQU„*’Base�for�all�the�offsets. GET_CHAR: ŠSAVEƒD1/A0ŽSave�registers. *&*‚Go�check�if�the�interrupt�is�for�us.* ‰BSR.LƒCHK_INTERRUPT*‰BEQ.LƒINTNOP�The�interrupt�was�not�for�us3‰BMI.LƒERROR‘There�was�an�error�condition�in�status*8*‚The�interrupt�is�ours,�go�see�which�command�caused�it.7*‚We�return�from�CHK_READ�with�the�scan�code�in�D0.B�if9*‚this�interrupt�was�caused�by�us�issuing�a�READ�command.* 8‰BSR.S�CHK_READ�Go�check�if�interrupt�is�READ�or�STATUS. ‰IF��THEN6‹BRA.L�IGNORE�Not�a�READ�interrupt,�so�just�ignore�it.‰ENDI *L*‚Check�the�new�scan�code�for�errors�and�issue�the�keyboard�another�command.* 6‰BSR.S�SEND_COMMAND‰Send�the�keyboard�another�command. ‰IF��THEN7‹BRA.L�ERRORŽThis�scan�code�had�an�error,�go�try�again.‰ENDI *9*‚Use�scan�code�to�get�group/routine�index�and�parameter.*8ŠADD„D0,D0ŒD0.W�<--�2�*�scan�code�for�use�as�word�index.EŠLEA�SCAN_CODE_TBL(PC,D0),A0�A0�<--�pointer�to�entry�in�the�scan�code(*§table�corresponding�to�this�scan�code. %ŠCLR„D1‘D1.W�<--�group/routine�index.ŠMOVE.B�(A0)+,D1‹*$ŠMOVE.B�(A0)+,D0‹D0.W�<--�parameter. *F*‚A�negative�group/routine�index�indicates�a�routine�should�be�called."*‚If�this�is�a�routine,�JMP�to�it.*,ŠEXT„D1‘Sign�extend�the�group/routine�index.5ŠIF…�THENŠIf�it's�negative,�this�is�a�routine,�so BŠIF�D1��#NONLOCKABLE�THEN„If�this�is�a�routine�affected�by�theAŠBTST‚#KBD_UNLOCK,STATUS_REGƒfront�panel�lock,�check�the�lock;�if* ŠIF�‚THEN:ŠBTST�#KBD_LOCK,KBD_OVRD„Check�the�condition�of�the�sysgen'*¤parameter�to�see�if�we�want�to�ignore*¤the�keyswitch. ŠIF��THEN ŠBRA.L‚IGNOREŠENDIŠENDIŠENDI–* ŠNEG„D1‘Make�the�index�positive.5ŠMOVEƒRTN_TBL(PC,D1),D1‚D1�<--�offset�to�the�routine.ŠJMP„BASE(PC,D1)ˆJMP�to�it. ŠENDI *H*‚It's�not�a�routine,�it's�a�group,�so�use�the�parameter�to�get�the�char4*‚from�the�table�currently�in�effect�for�that�group.*7ŠBTSTƒ#KBD_UNLOCK,STATUS_REGƒIf�the�keyboard�is�locked,* ŠIF�‚THENŠBTSTƒ#KBD_LOCK,KBD_OVRD ŠIF��THEN ŠBRA.L‚IGNOREŠENDIŠENDI?ŠADD„GRP_TBL(PC,D1),D0‚D0�<--�offset�from�BASE�to�char�in�table"*§*‚=�element�#�+�offset�to�table.2ŠMOVE.B�BASE(PC,D0),D0…D0�<--�char�from�the�table. ?EXIT_CHAR:�ANDƒ#$00FF,D0ŠSet�CCR:��if�D0�=�0�else�,2ŠRESTORE�D1/A0�to�indicate�CHAR�GENERATED.‚RestoreŠRTS—registers�and�exit.'*£Note�that�in�either�case�the�V�bit�is *£cleared.ŠPAGEO*v********************************************************************************#***…ROUTINE�AND�GROUP�OFFSET�TABLES***E***…FUNCTION:‚Each�entry�in�the�scan�code�table�contains�a�byte�valueE***‡called�the�group/routine�index.‚It�is�a�1-byte�value�in�which�bitA***‡0�is�always�0.‚If�bit�7�is�1,�it�is�a�routine�index�and�is�anB***‡offset�into�RTN_TBL.‚If�bit�7�is�0,�it�is�a�group�index�and�is@***‡an�offset�into�GRP_TBL.‚These�tables�contain�word�offsets�toG***‡routines�or�tables�in�this�module.‚The�whole�purpose�for�these�guysC***‡is�to�allow�each�scan�code�table�entry�to�be�just�2�bytes�long.***O*^***************************************************************************** *J*‚These�entries�are�at�negative�group/routine�indexes,�making�them�routineG*‚indexes.‚They�contain�the�offsets�to�the�specified�routine.‚Note�thatH*‚RTN_OFFSET�BLIP�also�creates�an�equate�for�the�routine�index,�RI$BLIP,I*‚which�is�used�by�the�RTN�macro�in�the�scan�code�tables�later.‚Also�noteF*‚that�RTN_TBL�is�set�back�2�bytes�so�that�there�is�no�entry�#0�in�theG*‚routine�table;�this�is�necessary�since�negative�0�is�0�and�that�indexJ*‚would�be�indistinguishable�from�the�positive�0�index�in�the�group�table.* *M*‚Note�the�NONLOCKABLE�label�within�the�routine�table.‚Routines�whose�entriesN*‚are�above�that�label�will�not�be�called�while�the�keyboard�lock�on�the�front K*‚panel�is�in�the�LOCKED�position--only�when�it�is�UNLOCKED.‚Routines�at�orG*‚below�that�point�are�called�regardless�of�the�keyboard�lock's�status.*RTN_OFFSET MACRORI$\1…EQU„-(*-RTN_TBL) ŠDC.Wƒ\1-BASEŠENDM RTN_TBLƒEQU„*-2ŠRTN_OFFSET�TWO_ATŠRTN_OFFSET�ESC_RESETŠRTN_OFFSET�BREAK_CLEARŠRTN_OFFSET�GEN_ALPHAŠRTN_OFFSET�FNKEYGNONLOCKABLE�EQU‚-(*-RTN_TBL)‡Routines�below�this�get�called�even�if�the(*£keyboard�is�locked�on�the�front�panel.ŠRTN_OFFSET�SET_SHIFTŠRTN_OFFSET�CLR_SHIFTŠRTN_OFFSET�SET_MODEŠRTN_OFFSET�CLR_MODEŠRTN_OFFSET�IGNOREŠPAGE*G*‚This�table�contains�offsets�to�character�tables.‚GRP_TBL�is�used�whenH*‚a�the�group/routine�index�for�a�scan�code�is�positive�(�>=0�).‚Here�weK*‚define�the�space�for�the�table�and�set�the�offsets�for�the�initial�tablesH*‚(where�no�mode�keys�are�down).‚As�mode�keys�are�pressed,�these�offsets*‚may�get�replaced.*GRP_OFFSET MACRO ŠDC.Wƒ\1-BASEŠENDM GRP_TBLƒEQU„*7ŠGRP_OFFSET�TBL.___ˆGroup�0:‚no�mode�keys�affect�these.9ŠGRP_OFFSET�TBL.NN_ˆGroup�1:‚SHIFT�and�CTRL�affect�these./ŠGRP_OFFSET�TBL.__NˆGroup�2:‚PAD�affects�these.;MAX_GRP_NUM�EQU‚(*-GRP_TBL)/2†Highest�defined�group�number.ŠPAGEO*v********************************************************************************B***…SCAN�CODE�TABLE�--�CONVERTS�A�SCAN�CODE�TO�GROUP/ROUTINE�INDEX***˜&�PARAMETER.***D***…FUNCTION:‚The�scan�code�taken�from�the�2661,�multiplied�by�2,�isB***‡used�as�an�index�into�this�table.‚This�table�contains�a�2-byteC***‡entry�for�each�possible�scan�code:‚a�1-byte�group/routine�index4***‡(see�the�offset�table,�OFF_TBL)�and�a�parameter.***O*^***************************************************************************** SCAN_CODE_TBL: *H*‚The�RTN�macro�is�used�to�make�entries�in�the�scan�code�table�for�thoseG*‚scan�codes�which�will�result�in�some�routine�being�run.‚The�format�is"*„RTN�[,]G*‚The�first�argument�is�the�name�of�the�routine�to�go�to�when�this�scanJ*‚code�is�received.‚The�second�argument,�which�is�optional,�is�a�parameterI*‚to�pass�to�the�routine.‚That�is,�the�same�routine�may�be�used�with�many:*‚different�scan�codes,�each�passing�a�different�argument.* RTN‡MACRO ŠDC.BƒRI$\1 ŠIFC„'\2',''ŠDC.Bƒ0ŠMEXITŠENDCŠDC.Bƒ\2ŠENDM *J*‚The�ALPHA�macro�is�used�to�make�entries�in�the�scan�code�table�for�thoseE*‚scan�codes�which�will�generate�alphabetic�characters.‚The�format�is(*„ALPHA�* ALPHA…MACROŠDC.BƒRI$GEN_ALPHA,'\1'ŠENDM *J*‚The�GROUP�macro�is�used�to�make�entries�in�the�scan�code�table�for�thoseB*‚scan�codes�which�have�entries�in�character�tables.‚The�format�is.*„GROUP�,G*‚Both�arguments�are�required.‚The�first�is�0,1,...whatever�the�highestI*‚group�index�is,�as�defined�in�OFF_TBL.‚The�second�argument�is�the�index5*‚into�the�chosen�character�table�for�this�scan�code.* GROUP…MACROŠIFGTƒ\1-MAX_GRP_NUM#ŠFAILƒ499�This�group�#�is�too�high.ŠENDC ŠDC.Bƒ2*\1,\2ŠENDMŠPAGE*§scan*‚$00�-�$1FœcodeƒKey&*§---„--------------------------------ŠRTN„IGNORE�$00�--�Ignore�it.ŠRTN„IGNORE�$01�--�Ignore�it.ŠRTN„IGNORE�$02�--�Ignore�it.ŠRTN„IGNORE�$03�--�Ignore�it.ŠRTN„IGNORE�$04�--�Ignore�it.ŠRTN„IGNORE�$05�--�Ignore�it.ŠRTN„IGNORE�$06�--�Ignore�it.5ŠRTN„SET_MODE,ALPHA_LOCK�$07�--�ALPHA�LOCK�depressed.0ŠRTN„SET_SHIFT,LEFT…$08�--�Left‚SHIFT�depressed.2ŠRTN„SET_SHIFT,RIGHT„$09�--�Right�SHIFT�depressed.)ŠRTN„SET_MODE,CTRL†$0A�--�CTRL�depressed.'ŠRTN„SET_MODE,ALT‡$0B�--�ALT‚depressed.<ŠRTN„SET_MODE,BLANK…$0C�--�Blank�locking�mode�key�depressed..ŠRTN„IGNORE�$0D�--�Clacker�mode�key�depressed.<ŠRTN„SET_MODE,PAD‡$0E�--�FUNC_PAD�depressed�(to�select�PAD).4ŠRTN„CLR_MODE,ALPHA_LOCK�$0F�--�ALPHA�LOCK�released. ŠRTN„IGNORE�$10�--�Ignore�it.ŠGROUP‚1,0�$11�--�`�~�key.ŠGROUP‚1,1�$12�--�1�!�key.ŠRTN„TWO_AT�$13�--�2�@�key.ŠGROUP‚1,2�$14�--�3�#�key.,ŠGROUP‚1,13�$15�--�TAB�key�on�main�keyboard.  ŠALPHA‚Q’$16�--�Q�key.ŠALPHA‚W’$17�--�W�key.ŠALPHA‚E’$18�--�E�key.ŠALPHA‚A’$19�--�A�key.ŠALPHA‚S’$1A�--�S�key.ŠALPHA‚D’$1B�--�D�key.ŠALPHA‚Z’$1C�--�Z�key.ŠALPHA‚X’$1D�--�X�key.ŠGROUP‚1,23�$1E�--�Space�bar.3ŠRTN„CLR_SHIFT,LEFT…$1F�--�Left�SHIFT�key�released.ŠPAGE*§scan*‚$20�-�$3FœcodeƒKey&*§---„--------------------------------ŠRTN„IGNORE�$20�--�Ignore�it.#ŠRTN„FNKEY,1Œ$21�--�Function�key�1.#ŠRTN„FNKEY,2Œ$22�--�Function�key�2.#ŠRTN„FNKEY,3Œ$23�--�Function�key�3.ŠGROUP‚1,3�$24�--�4�$�key.ŠGROUP‚1,4�$25�--�5�%�key.ŠGROUP‚1,5�$26�--�6�^�key.ŠALPHA‚R’$27�--�R�key.ŠALPHA‚T’$28�--�T�key.ŠALPHA‚Y’$29�--�Y�key.ŠALPHA‚F’$2A�--�F�key.ŠALPHA‚G’$2B�--�G�key.ŠALPHA‚C’$2C�--�C�key.ŠALPHA‚V’$2D�--�V�key.ŠALPHA‚B’$2E�--�B�key.5ŠRTN„CLR_SHIFT,RIGHT„$2F�--�Right�SHIFT�key�released. ŠRTN„IGNORE�$30�--�Ignore�it.#ŠRTN„FNKEY,4Œ$31�--�Function�key�4.#ŠRTN„FNKEY,5Œ$32�--�Function�key�5.#ŠRTN„FNKEY,6Œ$33�--�Function�key�6.ŠGROUP‚1,6�$34�--�7�&�key.ŠGROUP‚1,7�$35�--�8�*�key.ŠGROUP‚1,8�$36�--�9�(�key.ŠALPHA‚U’$37�--�U�key.ŠALPHA‚I’$38�--�I�key.ŠALPHA‚H’$39�--�H�key.ŠALPHA‚J’$3A�--�J�key.ŠALPHA‚K’$3B�--�K�key.ŠALPHA‚N’$3C�--�N�key.ŠALPHA‚M’$3D�--�M�key.ŠGROUP‚1,20�$3E�--�,�<�key.,ŠRTN„CLR_MODE,CTRL†$3F�--�CTRL�key�released.ŠPAGE*§scan*‚$40�-�$5FœcodeƒKey&*§---„--------------------------------ŠRTN„IGNORE�$40�--�Ignore�it.#ŠRTN„FNKEY,7Œ$41�--�Function�key�7.#ŠRTN„FNKEY,8Œ$42�--�Function�key�8.ŠGROUP‚1,9�$43�--�0�)�key.ŠGROUP‚1,10�$44�--�-�_�key.ŠGROUP‚1,11�$45�--�=�+�key.ŠALPHA‚O’$46�--�O�key.ŠALPHA‚P’$47�--�P�key.ŠGROUP‚1,14�$48�--�[�{�key.ŠALPHA‚L’$49�--�L�key.ŠGROUP‚1,17�$4A�--�:�;�key.ŠGROUP‚1,18�$4B�--�'�"�key.ŠGROUP‚1,21�$4C�--�.�>�key.ŠGROUP‚1,22�$4D�--�/�?�key.ŠRTN„IGNORE�$4E�--�Ignore�it.*ŠRTN„CLR_MODE,ALT‡$4F�--�ALT�key�released. ŠRTN„IGNORE�$50�--�Ignore�it.#ŠRTN„FNKEY,9Œ$51�--�Function�key�9.%ŠRTN„FNKEY,10‹$52�--�Function�key�10.%ŠRTN„FNKEY,11‹$53�--�Function�key�11.%ŠRTN„FNKEY,12‹$54�--�Function�key�12.ŠGROUP‚1,12�$55�--�DEL�key.(ŠRTN„BREAK_CLEARˆ$56�--�BREAK�CLEAR�key.ŠGROUP‚1,15�$57�--�]�}�key.ŠGROUP‚1,16�$58�--�\�|�key.ŠGROUP‚0,1�$59�--�Home�key.ŠGROUP‚1,19�$5A�--�Return�key. ŠGROUP‚0,3�$5B�--�Backarrow�key.ŠRTN„IGNORE�$5C�--�SEL�key.ŠGROUP‚0,5�$5D�--�Backtab�key. ŠGROUP‚0,6�$5E�--�Downarrow�key.;ŠRTN„CLR_MODE,BLANK…$5F�--�Blank�locking�mode�key�released.ŠPAGE*§scan*‚$60�-�$7FœcodeƒKey&*§---„--------------------------------*ŠRTN„CLR_MODE,PAD‡$60�--�PAD�key�released.%ŠRTN„FNKEY,13‹$61�--�Function�key�13.%ŠRTN„FNKEY,14‹$62�--�Function�key�14.%ŠRTN„FNKEY,15‹$63�--�Function�key�15.%ŠRTN„FNKEY,16‹$64�--�Function�key�16.$ŠRTN„ESC_RESETŠ$65�--�ESC�RESET�key.ŠGROUP‚2,10�$66�--�A�DCHR�key.ŠGROUP‚0,2�$67�--�Uparrow�key.#ŠRTN„IGNORE�$68�--�CLR�TAB�SET�key.ŠGROUP‚2,7�$69�--�7�EOF�key.!ŠGROUP‚0,4�$6A�--�Rightarrow�key."ŠGROUP‚2,4�$6B�--�4�key�on�hexpad.0ŠGROUP‚0,7�$6C�--�Tab�key�on�cursor�control�pad.ŠGROUP‚2,1�$6D�--�1�ICHR�key.ŠGROUP‚2,0�$6E�--�0�on�hexpad.-ŠRTN„IGNORE�$6F�--�Clacker�mode�key�released. ŠRTN„IGNORE�$70�--�Ignore�it.ŠGROUP‚2,11�$71�--�B�DLINE�key.ŠGROUP‚2,12�$72�--�C�on�hexpad.ŠGROUP‚2,13�$73�--�D�on�hexpad.ŠGROUP‚2,8�$74�--�8�EOL�key.ŠGROUP‚2,9�$75�--�9�EOP�key.ŠGROUP‚2,14�$76�--�E�EAU�key.ŠGROUP‚2,5�$77�--�5�on�hexpad.ŠGROUP‚2,6�$78�--�6�on�hexpad.ŠGROUP‚2,15�$79�--�F�on�hexpad.ŠGROUP‚2,2�$7A�--�2�ILINE�key.ŠGROUP‚2,3�$7B�--�3�on�hexpad.ŠGROUP‚2,16�$7C�--�TEST�,�key.ŠGROUP‚2,17�$7D�--�HELP�.�key.ŠGROUP‚0,0�$7E�--�ENTER�key.ŠRTN„IGNORE�$7F�--�Ignore�it.ŠPAGEO*v********************************************************************************!***…TWO_AT�--�HANDLE�THE�2�@�KEY.***?***…FUNCTION:‚This�code�is�entered�when�the�2�@�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�dependingE***‡on�the�state�of�the�SHIFT�and�CTRL�mode�keys.‚The�reason�this�key  D***‡can't�be�handled�by�the�tables�is�that�if�CTRL�is�pressed,�a�NULA***‡($00)�character�must�be�generated.‚A�value�of�0�in�the�tables%***‡is�reserved�to�mean�NO�CHARACTER.******…ENTRY�CONDITIONS:***O*^***************************************************************************** TWO_AT: **‚Is�the�CTRL�key�down?*"ŠBTSTƒ#CTRL,MODESˆIf�CTRL�is�down,ŠIF…�THENŠ* !ŠCLR„D0‘D0�<--�$00,�the�NUL�char.4ŠMOVEQ‚#1,D1ŽSet�CCR:�,�to�indicate�D0�has�a6ŠRESTORE�D1/A0�char�in�it,�restore�registers,�and�exit*ŠRTS—from�GET_CHAR�to�generate�a�NUL�char. ŠENDI  *D*‚CTRL�key�is�not�down--generate�2�or�@�depending�on�the�SHIFT�keys.*$ŠBTSTƒ#SHIFT,MODES‡If�SHIFT�is�down,ŠIF…�THENŠ* !ŠMOVEQI�AT_CHAR,D0‰Generate�an�@; ŠELSE–Else�(SHIFT�is�not�down), !ŠMOVEQI�TWO_CHAR,D0ˆGenerate�a�2. ŠENDI  +ŠBRA„EXIT_CHARŠExit�saying�'we�got�a�char.'ŠPAGEO*v********************************************************************************&***…ESC_RESET�--�HANDLE�ESC�RESET�KEY.***E***…FUNCTION:‚This�code�is�entered�when�the�ESC�RESET�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�depending(***‡on�the�state�of�the�SHIFT�mode�keys.******…ENTRY�CONDITIONS:***O*^***************************************************************************** ESC_RESET: ,ŠBTSTƒ#SHIFT,MODES‡If�the�SHIFT�key�is�down,ŠIF…�THENŠ* >ŠBSR.L‚RESET_SCREEN‡RESET�the�screen�and�ignore�the�keystroke.ŠBRA.L‚IGNORE�* ŠENDI  8ŠMOVEQ‚#$1B,D0ŒThe�SHIFT�key�is�not�down,�so�generate�an#ŠBRA„EXIT_CHARŠASCII�ESC�character.ŠPAGEO*v************************************************************************************…BREAK_CLEAR�--�HANDLE�BREAK�CLEAR�KEY.***G***…FUNCTION:‚This�code�is�entered�when�the�BREAK�CLEAR�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�depending(***‡on�the�state�of�the�SHIFT�mode�keys.******…ENTRY�CONDITIONS:***O*^***************************************************************************** BREAK_CLEAR: $ŠBTSTƒ#SHIFT,MODES‡If�SHIFT�is�down,ŠIF…�THENŠ* >ŠBSR.L‚CLEAR_SCREEN‡CLEAR�the�screen�and�ignore�the�keystroke.ŠBRA.L‚IGNORE�* ŠENDI  *§SHIFT�is�not�down,�so3ŠMOVEQ‚#-1,D0�set�CCR:‚,�to�indicate�BREAK.:ŠRESTORE�D1/A0�Restore�registers�and�return�from�GET_CHAR.ŠRTS—*ŠPAGEO*v********************************************************************************(***…GEN_ALPHA�--�HANDLE�ALPHABETIC�KEYS.***E***…FUNCTION:‚This�code�is�entered�when�an�alphabetic�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�depending>***‡on�the�state�of�the�SHIFT,�ALPHA�LOCK,�and�CTRL�mode�keys.******…ENTRY�CONDITIONS:4***‡D0.B�=�an�uppercase�alphabetic�char:�'A'�to�'Z'.***O*^***************************************************************************** GEN_ALPHA: *ŠBTSTƒ#CTRL,MODESˆIf�the�CTRL�key�is�down,ŠIF…�THENŠ* 0ŠADD.B‚#1-'A',D0ŠConvert�this�to�a�control�char; "ŠELSE–Else�(CTRL�key�is�not�down), <ŠMOVEQI�ALOCK_OR_SHIFT,D1‚Check�whether�either�SHIFT�(either3ŠAND.B‚MODES,D1‹one)�or�ALPHA�LOCK�is�down.‚If�not,ŠIF…�THENŠ* -ŠADD.B‚#'a'-'A',D0ˆConvert�this�to�lowercase. ŠENDI ŠENDI   +ŠBRA„EXIT_CHARŠExit�saying�'we�got�a�char!'ŠPAGEO*v********************************************************************************"***…FNKEY�--�HANDLE�FUNCTION�KEYS.***B***…FUNCTION:‚This�code�is�entered�when�a�function�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�depending(***‡on�the�state�of�the�SHIFT�mode�keys.******…ENTRY�CONDITIONS:;***‡D0.B�=�the�number�of�the�function�key�pressed:�1�to�16.***O*^***************************************************************************** FNKEY: 8ŠBTSTƒ#SHIFT,MODES‡If�either�of�the�shift�keys�are�down,ŠIF…�THENŠ* 9ŠADD.B‚#FNKEY_S1-1,D0…Generate�the�shifted�function�code.!  %ŠELSE–Else�(the�SHIFT�keys�are�down), ;ŠADD.B‚#FNKEY_F1-1,D0…Generate�the�unshifted�function�code. ŠENDI  +ŠBRA„EXIT_CHARŠExit�saying�'we�got�a�char!'ŠPAGEO*v********************************************************************************F***…SET_SHIFT�AND�CLR_SHIFT�--�SET�OR�CLEAR�ONE�OF�THE�TWO�SHIFT�KEYS.***H***…FUNCTION:‚Use�these�routines�when�a�shift�key�is�pressed�or�releasedE***‡to�update�the�SHIFT_KEYS�byte�and�make�a�mode�change�for�SHIFT�if***‡necessary.***1***…ENTRY�CONDITIONS�FOR�SET_SHIFT�AND�CLR_SHIFT:8***‡D0.B�=�the�bit�number�of�the�mode�in�the�MODES�byte.***O*^***************************************************************************** SET_SHIFT: ;ŠBSETƒD0,SHIFT_KEYS†Set�the�bit�representing�this�shift�key7ŠMOVEQ‚#SHIFT,D0Š(left�or�right)�and�go�set�SHIFT�mode.ŠBRA„SET_MODE‹*  CLR_SHIFT: =ŠBCLRƒD0,SHIFT_KEYS†Clear�the�bit�representing�this�shift�key8ŠMOVEQ‚#SHIFT,D0Š(left�or�right).‚If�both�shift�keys�are8ŠTST.B‚SHIFT_KEYS‰up�now,�go�clear�SHIFT�mode;�otherwise(ŠBEQ„CLR_MODE‹just�ignore�the�keystroke. ŠBRA„IGNORE�*ŠPAGEO*v********************************************************************************?***…SET_MODE�AND�CLR_MODE�--�SET�OR�CLEAR�A�MODE�(E.G.,�SHIFT).***G***…FUNCTION:‚Use�these�routines�when�a�mode�key�is�pressed�or�releasedE***‡to�update�the�MODES�byte�and�set�the�appropriate�table�offsets�in***‡the�GRP_TBL.***/***…ENTRY�CONDITIONS�FOR�SET_MODE�AND�CLR_MODE:8***‡D0.B�=�the�bit�number�of�the�mode�in�the�MODES�byte.***E***…NOTES:‚IGNORE�is�another�entry�point�used�to�return�from�GET_CHARF***‡without�generating�a�char�or�break.‚There�are�no�entry�conditions.***O*^***************************************************************************** SET_MODE: 5ŠBSETƒD0,MODES‹Set�the�specified�mode�and�go�registerŠBRA„MODE_CHANGEˆthe�change.  CLR_MODE: (ŠBCLRƒD0,MODES‹Clear�the�specified�mode. *(*‚Change�the�offsets�in�the�group�table.* MODE_CHANGE<ŠLEA„GRP_TBL+2,A0‡A0�<--�address�of�the�group�1�offset�entry'*§in�the�group�table.‚We�can�skip�group*§0�since�it�never�changes. ŠIFNEƒSHIFT-2<ŠFAILƒ499ˆSHIFT�must�=�2�or�you�must�change�this�next�logic.ŠENDC ŠIFNEƒCTRL-1;ŠFAILƒ499‰CTRL�must�=�1�or�you�must�change�this�next�logic.ŠENDC :ŠMOVEQ‚#%110,D0‹Isolate�the�SHIFT�(bit�2)�and�CTRL�(bit�1):ŠAND.B‚MODES,D0‹modes�from�the�MODES�byte.‚Set�the�corres-7ŠMOVEƒGRP1_OFF(PC,D0),(A0)+�ponding�offset�for�group�1. (ŠBTSTƒ#PAD,MODES‰If�the�PAD�key�is�down,ŠIF…�THENŠ*@ŠMOVEƒ#TBL.__Y-BASE,(A0)+�set�the�group�2�offset�to�the�PAD�mode(ŠELSE–table,�else�(PAD�key�is�not�down),AŠMOVEƒ#TBL.__N-BASE,(A0)+�set�the�group�2�offset�to�the�FUNC�mode ŠENDI–table. *N*‚Exit�GET_CHAR�saying�"no�char�or�break�was�generated--ignore�the�keystroke."*8IGNORE:ƒCLR„D0‘Set�CCR:��to�indicate�no�character�or4ŠRESTORE�D1/A0�break�was�generated�by�the�keystroke.)ŠRTS—Restore�registers�and�exit�GET_CHAR.&*£Note�that�the�V�bit�is�also�cleared.  *F*‚Some�kind�of�error�was�detected�in�either�getting�the�results�of�theG*‚STATUS�command�or�in�getting�the�scan�code�from�a�READ�command.‚Issue2*‚the�proper�command�to�the�keyboard�to�try�again.*‚A0�still�points�to�the�2661.*=ERROR…TST.B‚DATA(A0)‹Read�the�char�out�if�we�haven't�already.;ŠMOVE.B�#COMM_INIT,COMMAND(A0)‚Reset�the�error�in�the�2661. ŠIF.B‚DOING_READ‚�#0�THEN@ŒMOVE.B�#STATUS_KB,DATA(A0)�Tell�the�keyboard�to�send�the�status-*£of�the�keyboard�again,�just�ignore�this�one ŠELSECŒMOVE.B�#AGAIN_KB,DATA(A0)�Tell�the�keyboard�to�send�that�last�scan#*£code�again;�just�ignore�this�one.ŠENDI ŠBRA.S‚IGNORE  *F*‚Neither�the�receiver�nor�the�transmitter�are�enabled,�so�this�is�not8*‚our�interrupt.‚Set�the�Z�bit�and�the�V�bit�and�return. *’X�N�Z�V�C*INTNOPƒPOP.L‚D1$‰ORIƒ#%0000000000000100,SR‰Set�Z�bit$‰ORIƒ#%0000000000000010,SR‰Set�V�bit‰RTSŠPAGE  *! 7*‚Table�of�offsets�for�group�1,�depending�on�mode�keys.:*‚Note�that�we�use�the�same�table�for�CTRL�and�CTRL+SHIFT.*FGRP1_OFF‚DC.WƒTBL.NN_-BASE‡Offset�to�group�1�table:�no�SHIFT,�no�CTRL.;ŠDC.WƒTBL.XY_-BASE‡Offset�to�group�1�table:�no�SHIFT,„CTRL.;ŠDC.WƒTBL.YN_-BASE‡Offset�to�group�1�table:„SHIFT,�no�CTRL.8ŠDC.WƒTBL.XY_-BASE‡Offset�to�group�1�table:„SHIFT,„CTRL.ŠPAGEO*v********************************************************************************;***…GROUP�0�CHARACTER�TABLE�--�KEYS�UNAFFECTED�BY�MODE�KEYS***C***…FUNCTION:‚This�table�contains�the�characters�to�return�for�scanB***‡codes�which�fall�into�group�0.‚Use�the�parameter�obtained�fromA***‡the�scan�code�table�as�an�index�into�this�table.‚A�value�of�0&***‡will�cause�no�character�to�result.***6***‡Table�TBL.___�is�used�regardless�of�any�mode�keys.***O*^***************************************************************************** TBL.___: *£element�# *£---------'ŠDC.Bƒ$0D�0�--�CR�(from�the�ENTER�key).ŠDC.Bƒ$C0�1�--�Home.)ŠDC.Bƒ$0B�2�--�VT�(from�the�uparrow�key).+ŠDC.Bƒ$08�3�--�BS�(from�the�leftarrow�key).,ŠDC.Bƒ$0C�4�--�FF�(from�the�rightarrow�key).ŠDC.Bƒ$DB�5�--�Backtab.+ŠDC.Bƒ$0A�6�--�LF�(from�the�downarrow�key).*ŠDC.Bƒ$09�7�--�HT�(from�the�tab�key�on�the*®cursor�control�pad).ŠPAGEO*v********************************************************************************E***…GROUP�1�CHARACTER�TABLES�--�KEYS�AFFECTED�BY�SHIFT�AND�CTRL�KEYS.***D***…FUNCTION:‚These�tables�contain�the�characters�to�return�for�scanB***‡codes�which�fall�into�group�1.‚Use�the�parameter�obtained�fromC***‡the�scan�code�table�as�an�index�into�these�tables.‚A�value�of�0&***‡will�cause�no�character�to�result.***E***‡Table�TBL.NN_�is�used�when�we're�in�neither�SHIFT�nor�CTRL�modes.C***‡Table�TBL.XY_�is�used�when�we're�in�CTRL�mode�(SHIFTed�or�not).@***‡Table�TBL.YN_�is�used�when�we're�in�SHIFT�but�not�CTRL‚mode.***O*^***************************************************************************** TBL.NN_: *£element�# *£--------- ŠDC.Bƒ'`'�0. ŠDC.Bƒ'1'�1. ŠDC.Bƒ'3'�2. ŠDC.Bƒ'4'�3. ŠDC.Bƒ'5'�4. ŠDC.Bƒ'6'�5. ŠDC.Bƒ'7'�6. ŠDC.Bƒ'8'�7. ŠDC.Bƒ'9'�8. ŠDC.Bƒ'0'�9. ŠDC.Bƒ'-'�10. ŠDC.Bƒ'='�11.ŠDC.Bƒ$7F�12�--�DEL.3ŠDC.Bƒ$09�13�--�HT�(from�tab�key�on�main�keyboard). ŠDC.Bƒ'['�14. ŠDC.Bƒ']'�15. ŠDC.Bƒ'\'�16. ŠDC.Bƒ';'�17.ŠDC.Bƒ$27�18�--�Apostrophe.%ŠDC.Bƒ$0D�19�--�CR�(from�return�key). ŠDC.Bƒ','�20. ŠDC.Bƒ'.'�21. ŠDC.Bƒ'/'�22. ŠDC.Bƒ'�'�23.ŠPAGETBL.XY_: *£element�# *£--------- ŠDC.Bƒ0’0. ŠDC.Bƒ0’1. ŠDC.Bƒ0’2. ŠDC.Bƒ0’3. ŠDC.Bƒ0’4.ŠDC.Bƒ$1E�5‚--�CTRL�^. ŠDC.Bƒ0’6. ŠDC.Bƒ0’7. ŠDC.Bƒ0’8. ŠDC.Bƒ0’9.ŠDC.Bƒ$1F�10�--�CTRL�_. ŠDC.Bƒ0’11. ŠDC.Bƒ0’12. ŠDC.Bƒ0’13.ŠDC.Bƒ$1B�14�--�CTRL�[.ŠDC.Bƒ$1D�15�--�CTRL�].ŠDC.Bƒ$1C�16�--�CTRL�\. ŠDC.Bƒ0’17. ŠDC.Bƒ0’18. ŠDC.Bƒ0’19. ŠDC.Bƒ0’20. ŠDC.Bƒ0’21. ŠDC.Bƒ0’22. ŠDC.Bƒ0’23.ŠPAGETBL.YN_: *£element�# *£--------- ŠDC.Bƒ'~'�0. ŠDC.Bƒ'!'�1. ŠDC.Bƒ'#'�2. ŠDC.Bƒ'$'�3. ŠDC.Bƒ'%'�4. ŠDC.Bƒ'^'�5. ŠDC.Bƒ'&'�6. ŠDC.Bƒ'*'�7. ŠDC.Bƒ'('�8. ŠDC.Bƒ')'�9. ŠDC.Bƒ'_'�10. ŠDC.Bƒ'+'�11.ŠDC.Bƒ$7F�12�--�DEL.3ŠDC.Bƒ$09�13�--�HT�(from�tab�key�on�main�keyboard). ŠDC.Bƒ'{'�14. ŠDC.Bƒ'}'�15. ŠDC.Bƒ'|'�16. ŠDC.Bƒ':'�17. ŠDC.Bƒ'"'�18.%ŠDC.Bƒ$0D�19�--�CR�(from�return�key). ŠDC.Bƒ'<'�20. ŠDC.Bƒ'>'�21. ŠDC.Bƒ'?'�22. ŠDC.Bƒ'�'�23.ŠPAGEO*v********************************************************************************C***…GROUP�2�CHARACTER�TABLES�--�KEYS�AFFECTED�ONLY�BY�FUNC/PAD�KEY.***D***…FUNCTION:‚These�tables�contain�the�characters�to�return�for�scanB***‡codes�which�fall�into�group�2.‚Use�the�parameter�obtained�fromC***‡the�scan�code�table�as�an�index�into�these�tables.‚A�value�of�0&***‡will�cause�no�character�to�result.***5***‡Table�TBL.__N�is�used�when�we're�not�in�PAD�mode.2***‡Table�TBL.__Y�is�used�when�we�are�in�PAD�mode.***E***‡These�tables�contain�characters�associated�with�the�hexpad.‚Note," 7***‡however,�that�the�ENTER�key�is�not�in�these�tables.***O*^***************************************************************************** TBL.__N: *£element�# *£--------- ŠDC.Bƒ0’0.ŠDC.Bƒ$D0�1‚--�ICHR.ŠDC.Bƒ$D6�2‚--�ILINE. ŠDC.Bƒ0’3. ŠDC.Bƒ0’4. ŠDC.Bƒ0’5. ŠDC.Bƒ0’6. ŠDC.Bƒ0’7.ŠDC.Bƒ$D5�8‚--�EOL.ŠDC.Bƒ$D4�9‚--�EOP.ŠDC.Bƒ$D1�10�--�DCHR.ŠDC.Bƒ$D7�11�--�DLINE.ŠDC.Bƒ0’12�--�PMODE. ŠDC.Bƒ0’13. ŠDC.Bƒ0’14. ŠDC.Bƒ0’15. ŠDC.Bƒ0’16. ŠDC.Bƒ0’17.ŠPAGETBL.__Y: *£element�# *£--------- ŠDC.Bƒ'0'�0. ŠDC.Bƒ'1'�1. ŠDC.Bƒ'2'�2. ŠDC.Bƒ'3'�3. ŠDC.Bƒ'4'�4. ŠDC.Bƒ'5'�5. ŠDC.Bƒ'6'�6. ŠDC.Bƒ'7'�7. ŠDC.Bƒ'8'�8. ŠDC.Bƒ'9'�9. ŠDC.Bƒ'A'�10. ŠDC.Bƒ'B'�11. ŠDC.Bƒ'C'�12. ŠDC.Bƒ'D'�13. ŠDC.Bƒ'E'�14. ŠDC.Bƒ'F'�15. ŠDC.Bƒ','�16. ŠDC.Bƒ'.'�17.   ŠENDéééé**ˆVMES10.DRVS10.CI*GMSG‰*******************************************************************(MSG‰**ƒScreen/keyboard�driver�for�VME/10GMSG‰******************************************************************* IFGTˆ\NOLTERM-1ƒMSG†NOLTERM�must�be�<=�1ƒABORTENDC "*‚Adjust�total�number�of�terminals&TOTTERM‚=�\&TOTTERM+\NOLTERM 5* Build VERSAdos patch chain file .VERSAPT.CF$=COPY‡VERSAPT.DRVS10.CF,VERSAPT.CF;A 5* Assemble the KEYBOARD portion before doing the linkSUBSˆKEYBRD.AG$ASM‰KEYBRD.AG,KEYBRD.RO,\ASMLS;RZ=50 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,\WORKLS;AENDC TERMDRVƒ=�*SUBSˆTERMDRV.LGLINKˆTERMDRV.LG IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,\WORKLS;AENDCPROCESS…TERMDRV.LOEND‰TERMDRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.DRVS10.AG&ASM‰IOC.DRVS10.AG,NEW.RO,\ASMLS;RMZ=75 IFEQˆ\ASMLSWƒ=COPY‡\ASMLS,IOC.LIST.TF;AENDC 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI IFEQˆ\LINKLSWƒ=COPY‡\LINKLS,IOC.LIST.TF;AENDC * Adjust starting CRT device #&CRTDV„=�\&CRTDV+\NOLTERMééé" @1=/*=/*†VMES10.TERMDRV.LG=/*L=/* Link chain file run at sysgen time to link VME/10 keyboard/screen driver=/*D=/* Sysgen parameter LINKLS = \LINKLS = file/device to which to send=/* the linker listing=/*I=/* Sysgen parameter TERMDRV = \TERMDRV = address at which to link driver=/*'=LINK ,VMES10.TERMDRV.LO,\LINKLS;HAMIXSSEGMENT TERM:0-15 \TERMDRVINPUT VMES10.TERMDRV.ROIN„VMES10.INCHAR.ROIN„VMES10.KEYBRD.ROIN„VMES10.PAGEMODE.ROIN„VMES10.EDITMODE.ROIN„VMES10.FEEDER.ROIN„VMES10.CRTINIT.ROIN„VMES10.OUTCHS.ROINPUT VMES10.POUTCHS.ROEND=/*=ENDéééééIN1CRTINIT ASYST' VMES10 CRTINIT SA!TB…Configure the virtual display areañ2PCRTCREG ñ #ATOPLINE ALPERSCRN KSCRNINIT KCRTINIT 2ARIGHTCOL AB.LINE AC.LINE AE.LINE "AE.SCRN PSCREEN ñpAPB.LINE  &AS.LINE AL.SCRN (AS.SCRN PCRTCADD ñ !e2APAGEFLAG ,ABPERLINE ALEFTCOL ACPERLINE ABOTLINE AFACS *!.+@43P OñpñO ñpñp DO3%)AI 3üP(3ü)By) 3ü)By)3üO) By),H瀀B€3üD)*09(ãˆ#À)B€09) R3Q(•U �y)3À)R@ãH#À)B€09(�y)S@ãH3À)&B€09)�y) 3À)( 9)Àù) Ðy)Ðy)L3 ¨ €ñp#À) 9)Àù)Ðy) Ðy) €ñpT€#À)B€üñ !9ñ #áHüñ !C3$T€ 9ñ #ãH @ÑüñpâH€ù(H@�y)ãH�À#È)Ðù)Ðù)TH#È)"LßNu4éé# ééRS1EDITMODE ASYST' VMES10 EDITMODESA!TX…VME/10 edit mode emulation for TERMDRV.Í2pFEEDER_A pFEEDER_C pCRTCREG @KB_LOCK pRING_BEL pFEEDER pC.LINE pE.LINE pE.SCRN pSCREEN pOUTCHS pS.LINE @DUP_CHAR ZpS.SCRN pCRTCADD @EDITMODE \pBPERLINE F3ÝÿÿPÞÿÿHçÀÀ°zÿøg@-…g²gjBA; AúJNðxxxxxxx¬ttF3t~xxxxxxxxxxxxxxxxxxLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLF3LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL$xxxxxxxxxxxxF3xxxxxxxxxxxxxxxxxxxxttxxxxxxxF3xxxxnnxxxxxttxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxpü(9(R3P áHü(9(ЀNu :BþX°ºBþTgŽa΀(�ºBþD @pÀP`LpÂa°aBþ2`&a¤[3 IJ`p aBþ pÕaBþ` a–€(°ºBþ gpaBþp aBýþpaBýøPù(`,Pù(aBýæaW3(”Dÿd€(°ºBýØfpÁaBýÐ`Pù(aBýÄLßNua4 :Bý¸°ºBý´f üÙ)`üß)p aP3‘Býšp aBý”`ˆPù(`ÄHç€ÀPù)Cúý~PÙÀaþô€úBýp ÀH@âH ÀJ9(g.P3J�"Qù(úýR) zBýD0:Bý@rÂXÁQÈÿø0:Bý2r ²!VÈÿüR‰¼ÞAúý"#È(“ÈRI3É(Lß)3PNuaþˆ€úBý À)aBüô`ÿ.4ééé[Z1FEEDER ASYST' VMES10 FEEDER SA!W…VME/10 subroutine to feed a buffer to TERMDRV.˜2@FEEDER_A @FEEDER_C @FEEDER_W @REL_PAGE @FEEDER @STOP_IT n@UNSTOP tpGOT_CHAR @REL_ADDR @REL_FLAG  „K3RHçÀÈ(zÿêSy)k Hz/`AÖJ-ågæ#Ì(Pù)`(J9)g @3€Hç?4 zÿº":ÿºpN@`p N@Qù)Lß,üLßNuPíåNuQíåJ9)gaŽNu4éé# éééédd1INCHAR ASYST' VMES10 INCHAR SA!XV…Routine to get incoming char's and handle special modes.b2pPROMODE pEDIT_FLA @IN_CHAR pKB_LOCK pPAGEFLAG pEDITMODE pGET_CHAR pPAGEMODE LL3!"�Hç@aAúgfæF„ F3 ’ , , , , , , , , , , , , , , , , , , , , , , ,F3 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,F3 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,F3 , , , , , , , , ž F3  F3 Ìæ"FZÎú4Tx’ BBbr|†šžF3 Þ4 >r� & H j Œ ® ¾ Î ð  4 T t ¨ F3$ ° Pÿ€ `  Àñ 1NuPù(` ±ù("g±ù(%f yG3€ (Uˆ` ¼&HTˆ`0Jk±ù(f y("·Èfè` ÂUˆ` ” €ñp€ù)'°y(+f`H3Q `’QD y("` ha ¾À`ýa ² ÿf 3üÿÿ($`3Â($Pù) "` `Qù) "F3J@ ` V y(%#È("#È(ݪ` ‘Å›’›ª±ù(%l y( #È("�’#È(RDãL�Ä`æÑÅG3 PA Û’Ûª±ù( m y(%#È("#È(ݪRDãLš„ÐÅ`´Tˆ±ù(f y("` aöÀ) F3€ aìr ²y((e¨²y(bžp:û¶ °y(eаy(+b€ÀÅ€ñpÒAI3� Ò€ Ar29((ÒAÒ€#Á("Ò†#Á(`,aV‚ÅHAïI�Ý ÞAúûj �3ü(#È(aB ûHO3 *(‚ `(3üÿÿ(&Qù) $0<À`B û.By(&Qù) $`þ®Pù) $By(&0<À`B û a ´y(+bI3(ˆ Ü3Â(aB úî`þzaü ´y(d¼´y(e²3Â(+`ÔaØ ´y(b˜3Â((F3" `ºa¾ ´y()d~´y((et3Â(`–àHJ@fB€ €ñpâH€ù()Nu>âOžD`F3 � BCBGJPk@Pÿ€X QÌÿðÐù(!89(±ù( o y(%QËÿÒ8QÏÿÌ` a: ÝföI3D 3Ñ) *a*À) a rv ²y()dÜp:ùô °y(bÈ#È) ÀÅ€ñpÒAI3”@ Ò€ Ar29((ÒAÒ€#Á("Ò†#Á(Pù) Gú #Ë) `^ ÞfD :ùž"€ñp€ù)'B@H3Pˆ H@’€09((Ð@Ò€#Á("Ò¹(#Á( zùj3úùŠ(-`Pù)  àe ëdJ9) ,f|ÿJ3"(  Pù) ,`ùæJ9) ,gTˆQù) ,09(ÀÅ€ñp„y(-0°ˆb`ä`¸aÀ) aI3D@ „ À) aúÀ) aðÀ) p |“ÉN@``¦Pù(,#È(*#È($H#ü(üÝF3  3ü(0:ø˜@ ad"H0:øŠ@ aX"Ò…²ˆf üùRy(Ò…J(f üùRy( (I3P fTˆ`(ÀTˆRy(³Èf¾¼ÞRy(aB ø.`/B†<@ÿ°y()nàŽ¼yF3€ (nÌÅãH܆ñp F,Nup rÂPPÿ€�X0QÌÿò`Ê0(@�XPÿ€QÌÿðPF3‚A `°Qù(`¦Pù(`œaý4�y(–@a²`ˆBC`ô y( ±ù(c"H“Å/09(F3@ 1!QÈÿü _‘Å`à09( € <DQÈÿò` y(""HÓÅ09(³ù( d/0ÙQÈÿü _F3UA ÑÅ`àüD€ QÈÿò y("`ÜHçÿð69(#Eù(",9( y(%89(a`úˆ yÿÿ(&G3($ fJXkP€XDQÌÿè89(Ðù(!QËÿØNu&H±ù("f y(0 Jk·Èfè`jB¹) &`"H3D ‚ T¹) & :ö°¹('e B ga `ô`ha–69(SC  f&J¹) &fAùñp:9(ÊùF3€ ()XÿQÍÿú`0 zönÑüñp  g– gèÑÅQËÿö`‚¨ÑÅQËÿö`F3 ÿt (fÑ`¼d¹(-|`Ú¹(-| (f‘`¼,`F3 ¸ (fÑ`¼L¹(-|`–¹(-| (f‘`¼D`F3 tø‚`dø‚`T (fÑ`¼T¹(-|`F3  ¤¹(-| (f‘`¼,`‚ (f‘`¼¹(-|`F3 î¹(-| (fÑ`¼D`> (fÑ`¼Ä¹(-|`¹J3€(  (-| (f‘`¼D`ŒHçÿðEù(",9(`3ü) .aB ôŠAùñp4±ù(fÑÅ#È(‘Æ#È("Pù* VH3J¨ ±ù( f y(%#È("#È(ݹ(Pù* V·ÈfŒ` QD y("a >` àa 6À`üNaJ3UP * ÿf 3üÿÿ($`3Â($Pù* PQù(&Qù(` ÌQù* P`  y(%#È("#È(ݪa ÚF3( ` |‘Å›’›ª±ù(%l$ �¹(" y( #È("�’#È( y("ÑÀAè`þ&ÑÅÛ’Ûª±ù( F3@ m �¹(" y(%#È("#È(ݪÑÀa f` &HTˆ`JXkJ(ÿÿf`LUˆ` ð 9ÿÿ(&G3 U f` â±ù( f y(%#È("#È(ݹ(±ù(fÑÅ#È(‘Æ#È("·Èf¤` Êa øÀ) aF3  îr ²y((e ª²y(b  p:ù� °y(e Œ°y(*b ‚ÀÅ€ñpÒAÒ€F3$ Ar29((ÒAÒ€#Á("Ò†#Á( 9ÿÿ(fa ~` a J‚ÅHAïI�Ý ÞAúù4 �3üI3¨QU (#È(aB ù` 3üÿÿ(&Qù(`þJBy(&Qù( y(%#È("#È(ݪ` ¼Pù(By(&I3D `þa  ´y(*b Â3Â(aB ø¬`ýôa â ´y(d ¢´y(e ˜3Â(*`ÔaF3� ¾ ´y(b ~3Â((`ºa ¤ ´y()d d´y((e Z3Â(`% �™¡–àHJ@fB€ €ñI3 pâH€ù()Nua f Ýfö3Ñ* Xa VÀ) a Lr ²y()d p:÷ø °yI3ˆ% (bô#È) ÀÅ€ñpÒAÒ€ Ar29((ÒAÒ€#Á("Ò†#Á(Pù) Gú #Ë) `Š ÞH3„T f@ :÷ "€ñp€ù)'B@H@’€09((Ð@Ò€#Á("Ò¹(#Á( z÷l2ºø¼`DPù)  àN3 e ëdJ9* Zf|ÿPù* Z`øÒJ9* ZgTˆQù* Z09(ÀÅ€ñp„y(+0°ˆb`F3 `èNù(/B†<@ÿ°y()nàŽ¼y(nÌÅãH܆ñp F,Nup JPkrÂPPF3 ÿ€�X0QÌÿî`Â0(k@�XPÿ€QÌÿîP `¦Qù(`œPù(`’aþD�yF3€… (–@a`~ 9ÿÿ(f`p y( ±ù(c"H“Å/09(1!QÈÿü _‘Å`à09( €F3!  <DQÈÿò` 9ÿÿ(f`" y(""HÓÅ09(³ù( d/0ÙQÈÿü _ÑÅ`àüDF3" € QÈÿò y("`º?9(+ (f üD(+`"&H·ù("g +ÿÿf ëÿþ(+`F3 ( `U‹`à±ù(gù(+€ `è3ß(+`† y(%89(a`ú´ 9ÿÿ(fJXkhÿ€F3 … ÿþhÿþ`P€XDQÌÿÚ89(Ðù(!QËÿÊNu y(%/Cúõ.#É(üÝ3ü(49(#H3@  29(Jj&TˆQÉÿøÛ— W29(QÊÿê`^Jj üùRy(`fpÀ(fÛ— W29( 9ÿÿ* VK3AP f`^``ÀRy(TˆQù* VQÉÿ¼Û— W29(QÊÿ®üùRy(¼ÞRy(aB ô~ _`„JH3BUD jšTHPù* VQÉÿòÛ— W29(QÊÿä`̱ù(%f y( #È(#È("�¹("±ù("f‘Å#È("ÑÆ#ÈF3 @•I (±ù("gJ`j`ò`¸±ù("f8JPk`ä±ù(%f y( #È(#È("�¹("‘Å#È("ÑÆ#È(J3D J`j¼Tˆ`ªB¹* R`"T¹* R :õ°¹('e B gaà`ô`¨aÖ69(SC  f&J¹H3‚€ * RfAùñp:9(Êù()XÿQÍÿú`p zô²Ñüñp  g– gèÑÅQËÿöF3* `‚¨ÑÅQËÿö`ÿtBACúó6#É(üÝ3ü( y("±ù(g’Rˆf¼ÞI3P Ry(aB òð`ø fb(ÿÿäXâXdüå`üäâXdüâ`üãâXdüæ`üF3 çâXdüà`üáâXdüé`üèâXdüê`üë\y(`ÀRy(`ÿh`ÿxF3  (fÑ`¼d¹(+|P€aš`V¹(+¼ (f‘`¼F3@ DP€ar`. (fÑ`¼L¹(+|P€aH` (f‘F3 `¼D¹(+|P€a`Úø‚¹(+¼P€aü`¸F3 ø‚¹(+|P€aØ`” (fÑ`¼T¹(+|P€F3 a®`j (f‘`¼D¹(+|P€a„`@ (f‘`¼F3  ¹(+|P€aZ`¹(+| (fÑ`¼DP€a0`ìF3  (fÑ`¼Ä¹(+|P€a`¹(+| (f‘`K3( ¼dP€aÜ`˜3ü* \aB ð€Aùñp4"H³ù("fNu)ÿÿgNu³ù("g )ÿÿf)ÿþ``U‰`ä(3 <DÀ(+"H³ù("g!f `èNu4éééé% éT1TERMDRV ASYST' VMES10 TERMDRV SA"Q…VERSADOS TERMINAL DRIVER WITH TYPE-AHEAD[2pINIT_KEY pIN_CHAR pSTOP_IT pOUTCHS pUNSTOP @GOT_CHAR æ@CHECK_WO l XF3²²b013085 4@F3€€0Üø>f@€î^` ¶` ºo+O\-Aúÿôr°WÉÿüg|ùÀ|L3Pÿü¦NuB­¦Qíçp÷aBÿnaBÿjf í¹`|ÿü¦|ÑÀNu+O\+jh,*F3B…:*"mPaD&F-Àg+K``><J-ëg p rAúÿf` Fg°+K`+mPdF3pr Aúÿ2¼XWÈÿüfÒpþNðþr‚(m`AAíȼ |p1Aí¹FíB`F3t,+z:"mdaÂ"FBm||3|ƒÁ0ÀifÊ0<ˆÀif¾0)ÁiF@Àh�i0)// Aè CéF3 Eúý¤B�gâHe SAØQÉÿü`ÑÁÓÁ`æ"_ _~A0<Ài @gh~@)( bF3)fJ©gN` rðÂé²f@) g )(c)(g )á˜g jBF3`öBm||PìPNu‡rˆ`ýøa°HípÄaFíB+g;|4pF3¦`;|8p¦`ZPíâPíãQíèB­¬Qíä+f -qWíäNua`HípÐFíBF3+gQíèPíã+g;|p¦`;|p¦"mdR)'í¸"m"Pí¿HzF3/`8Qí¿Fü p.m\Nu;kª+gAëpN@`r„`ý(+HdB­´,+ F3*+š†RE"mdaNuagr„`ý(Ú†S…NuHçýü?<fJ…g i6pN@BWNqF3Nq0Lß?¿NuaŠHípÐ,+*+"mda°HípÄaþäFíB+g|¦`|I3¦+g|4§`|8§|p¨`ÿí ¸FíB`ÿ/aBûJjJ-ëg F3 m¢N¨`°í¸`(fh"|ÿþNu`–J-ëgÀ-¾ m¢N�`‚À-¾fF3J-ægJ-�gš-pgd`R°-‚f í¸`Ô-�fJ-æfp²f J-æffF3`8°-€fPíæí¸`¦°-ƒfJ-ãfF-è` mÜôfpê`82-ò€I3Smòf;|ÜòRmô mÖôfaBúfí¸`Xí¸`NJmüf"@þ;mòüF3 mÜôfRmü mÜücBmü`  -´fJ-âg -Ì�­Ä` -Ø�­ÐNuJíçF3fxFí@­¸f­¸fh­¸fð­¸fD­¸fŽ­¸I3f°­¸fº­¹fBùª­¹fB­¹fBFíBJm¸fŽQíç"|F3NuJ©²ºmîgäJmôgÞ m úcPíê`Ð2-ð²müf8 m`"-Ì’­Ä!AmþAíÈF3¼ |pB(mþ aDaÞ`Ž5Smðf;|ÜðSmôJ-åg mÈôbI3@aBøþ0-îNû`ÿ^`Nq`† m̱íÈc aDgpa®`6Á+HÌJ-ägašF3 -Ì-pg°­Èc�­Ä+@´`´`a`ÿ -†á˜g²gB`ô-¼À°-F3½f -Ì�­Ä+@´í¸BmîNu mÌaÆf ±íÈb�`JJgþÎ c paF3`þ¾g ff±íÄc\ +HÌS­¬J-ägL-qg&Jíéfpa”²-„f -Šar+mÄØB­¬+|8p¦`¨²-…f0+mÄÌJ-äg-F3qgp\aN -Ša4`ýì+| 8p¦`p±íÈcpa,`DÁ+HÌR­¬J-ägF3 bp^a R­¬r@Òaþ-pg±íÈc ‘íÄ+H´``ýŒJ-äg J-F3égp>aÐ -Ša¶Bmîí¸`ýN0-ìNû`xNq`F`v`º`Ø` I3J-èg0B-º;|ö;|øBmú -ÔR€+@ØJ-ÁgB-Â`B-í`ªaBöˆí¸F3 g fm�ºg ajíÁ`üÌJ-êg Qíêí¸`Jmîfa`ü®F3H瀀 -¦c†á˜+@¦ /bB­°@íí¸`h ?b&Qíé0@ï-ªF3f-qgaJí¸`'@at1|æFí@¼ |qaúF3&_`ù¨/ aP mlAèCíppFíB2ØQÈÿüFí@a„"_`ù|J-æg aÿíF3Á`ùhQíæ­Áí¸`ùTHç€@aý6;|ö;|øBmúBmìB-ÁBmîJ-F3¦c B­¦"mdS)'QíèQíâQíãQíêQíæB-ºLßNuHçÀðAíh((rðÂAF3¼fpé@½pÿ( gp@¾LßNuAíÈa`øÂaÿlaÿ¼`ø¶J­4gPHçF3?üm8!mhB(|$-*�VM01.EPCILOC.SI�-‚Local�include�file�for�EPCI�driver�on�VM01VECTNBR‚SET‡$1D‡Vector�number%VECTLVL‚SET‡5‰Vector�level�(priority)éééé' éééÓ' VME110 ACIALOC SIèèaaB*�VME110.ACIALOC.SI�-‚Local�include�file�for�ACIA�driver�on�VME110=CTYPE1ƒSET‡XTS110„Set�the�channel�type�for�VME110�serial�port(CTYPE2ƒSET‡0‰---�Not�used�for�the�VME110VECTNBR‚SET‡$1D‡Vector�number%VECTLVL‚SET‡5‰Vector�level�(priority)3PRIORTY1�SET‡$30‡Software�priority�for�1st�terminal*PRIORTY2�SET‡0‰---�Not�used�for�the�VME110éééééé' à' VME101 EPCILOC SIõõaaB*�VME101.EPCILOC.SI�-‚Local�include�file�for�EPCI�driver�on�VME101VECTNBR‚SET‡$1C‡Vector�number%VECTLVL‚SET‡4‰Vector�level�(priority)éééééééí' VME122 MFPLOC SIaa( @*�VME122.MFPLOC.SI�-‚Local�include�file�for�MFP�driver�on�VME122=CTYPE1ƒEQU‡XTMFP0„Set�the�channel�type�for�VME122�serial�portéééééééú' VME128 MFPLOC SIaa@*�VME128.MFPLOC.SI�-‚Local�include�file�for�MFP�driver�on�VME128=CTYPE1ƒEQU‡XTMFP8„Set�the�channel�type�for�VME128�serial�port( ééééééé' VME120 MFPLOC SIaa@*�VME120.MFPLOC.SI�-‚Local�include�file�for�MFP�driver�on�VME120=CTYPE1ƒEQU‡XTMFP0„Set�the�channel�type�for�VME120�serial�portééé) éééé­' ASQ EQ)) laaASQ MC::  aaBAB EQKK%aaCCB EQTTkaaCONNECT EQee¿aaCRASH MC††2aaDUALPORTMC�� TaaENV EQ  aaEXE EQ©©!CaaFIO EQÒÒ!1aaFME EQžaaFMI EQ aaGST EQEEaaINTERRUPMCNNaaIOE EQWWzöaaIOV EQàà aaLV5 EQééaaM300DRV EQ  cÝaaM605DRV EQss³aaM610CCB EQŒŒ&aa‰PAGE************************** Beginning of &.ASQ.EQ ****************************ˆASYNCHRONOUS�EVENT�QUEUE*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLEASQ‡DS.Lƒ1’!ASQ�DEBUG�TOOL $ASQASR„DS.Lƒ1’LOGICAL�ADDRESS�OF�ASR1ASQXFR„DS.Lƒ1’LOGICAL�INTERRUPT�ADDRESS�FOR�EVENT 1ASQDBUFƒDS.Lƒ1’PHYSICAL�ADDRESS�OF�DEFAULT�BUFFER.ASQA0BUF‚DS.Lƒ1’PHYSICAL�ADDRESS�OF�GET�BUFFER 5ASQBOT„DS.Lƒ1’PHYSICAL�ADDRESS�OF�FIRST�BYTE�OF�QUEUE4ASQTOP„DS.Lƒ1’PHYSICAL�ADDRESS�OF�LAST�BYTE�OF�QUEUE2ASQGET„DS.Lƒ1’PHYSICAL�ADDRESS�OF�NEXT�BYTE�TO�GET2ASQPUT„DS.Lƒ1’PHYSICAL�ADDRESS�OF�NEXT�BYTE�TO�PUT !ASQSTATE‚EQU„*’ASQ�STATE�VARIABLE'ASQSWMOD‚DS.Wƒ1’ASQ�SWITCHING�MODE�BITSASQSWMD2‚EQU„ASQSWMOD+1$ASQSTMOD‚DS.Wƒ1’ASQ�STATIC�MODE�BITSASQSTMD2‚EQU„ASQSTMOD+1 #ASQML…DS.Wƒ1’ASQ�MAX�MESSAGE�LENGTH1ASQCNT„DS.Wƒ1’NUMBER�OF�EVENTS�CURRENTLY�IN�QUEUE 0ASQSTART‚EQU„*’OFFSET�TO�FIRST�POSITION�IN�QUEUE+ASQLEN„EQU„*-ASQŽLENGTH�OF�ASQ�CONTROL�AREA***ˆASQ�STATE�DEFINITIONS*"RQ_DIS„EQU„0<<3�ASQ�DISABLED�STATEQ_EN†EQU„1<<3�ASQ�ENABLED�STATER_EN†EQU„2<<3�ASR�ONLY�STATE RQ_EN…EQU„3<<3�ASR�ENABLED�STATE!WT_EN…EQU„4<<3�WAIT�ENABLED�STATE GT_EN…EQU„5<<3�GET�ENABLED�STATE STATE_MASK�EQUƒ%00111000** *ˆASQ�SWITCHING�MODE�DEFINITIONS*ASQ_MT„EQU„1<<1�ASQ�EMPTYASQ_NMTƒEQU„0<<1�ASQ�NOT�EMPTY'DBUF_ENƒEQU„1<<2�DEFAULT�BUFFER�ENABLED)DBUF_DIS‚EQU„0<<2�DEFAULT�BUFFER�DISABLED (ASQMTBIT‚EQU„1’ASQ�EMPTY�(AS�BIT�NUMBER)3ASQDBBIT‚EQU„2’ASQ�DBUF�ENABLED�BIT�(AS�BIT�NUMBER) SWMD_MASK�EQU„ASQ_MT+DBUF_EN***ˆASQ�STATIC�MODE�DEFINITIONS*@*ˆ(See�last�three�bits�in�"STATUS�BITS�FOR�ASQALOC�&�ASQSTATS".) **#*ˆSTATUS�BITS�TO�ASQALOC�&�ASQSTATS*ASQSEN„EQU„0’ASQ�ENABLED&ASQSDBEN‚EQU„1’MESSAGE�RECEI) PT�ENABLEDASQSRENƒEQU„2’ASR�ENABLED $ASQSKDIS‚EQU„3’DO�NOT�SAVE�REGISTERS&ASQS_DBV‚EQU„4’DEFAULT�BUFFER�IS�VALIDASQS_RNV‚EQU„5’ASR�IS�NOT�VALID (STMD_MASK�EQU„ASQSKDIS+ASQS_DBV+ASQS_RNV***ˆASQ�EVENT�OFFSETS* ŠOFFSET�0!Q*CD7_LENƒDS.Bƒ1’LENGTH�OF�EVENTCD7_CODE‚DS.Bƒ1’EVENT�CODE'CD7_TRAP‚DS.Bƒ1’TRAP�INSTRUCTION�VECTOR CD7_CPRI‚DS.Bƒ1’CURRENT�PRIORITY,CD7_TCBƒEQU„*’TCB�ADDRESS�OF�REQUESTING�TASK+CD7_NAME‚DS.Lƒ1’TASKNAME�OF�REQUESTING�TASK1CD7_SESS‚DS.Lƒ1’SESSION�NUMBER�OF�REQUESTING�TASKCD7_ID„DS.Wƒ1’USER�GENERATED�ID"CD7_D0„DS.Lƒ1’REQUESTING�TASK'S�D0"CD7_A0„DS.Lƒ1’REQUESTING�TASK'S�A0&CD7_PBST‚DS.Bƒ1’PARAMETER�BLOCK�STATUS$CD7_PBSZ‚DS.Bƒ1’PARAMETER�BLOCK�SIZE2LEN_CD7ƒEQU„*-CD7_LENŠLENGTH�OF�CODE�7�EVENT�BLOCK**ˆASQ�EVENT�CODES* EVNTOWNƒEQU„1EVNTIO„EQU„2’I/O�COMPLETIONEVNTMSGƒEQU„3’MESSAGEEVNTUSER‚EQU„3’USER�EVENTEVNTTIME‚EQU„4’TIMER�EVENTEVNTTASK‚EQU„5’SUB-TASK�EVENTEVNTATTN‚EQU„6’ATTENTION�EVENTEVNTSERV‚EQU„7’SERVER�EVENT%BIT_7…EQU„7’BIT�7�SET�=�ALT�ASR�EVENT*********************** Ending of &.ASQ.EQ ***********************éééé‰PAGE************************** Beginning of &.ASQ.MC ***************************#*ˆThis�is�the�macro�to�check�to�see(*ˆif�we�need�to�append�a�parameter�block*ˆto�the�end�of�a�type_7�event.**ˆif*ˆ(code�=�server_event)*ˆthen�call�append_pb;*CHECK_PB MACRO‰CMP.B…#EVNTSERV,D1 ‰BNE.S…CKPB\@‰BSR‡APPEND_PBCKPB\@‰ENDM *#*ˆThis�is�the�macro�to�check�to�see(*ˆif�we�need�to�append�a�parameter�block*ˆto�the�end�of�a�type_7�event.)*ˆ(This�is�a�special�version�for�EXQEVENT!*ˆbecause�the�code�is�not�in�D1.)**ˆif*ˆ(code�=�server_event)*ˆthen�call�append_pb;*E_CHK_PB MACRO ‰MOVE.L„D2,D1‰SWAP†D1‰AND.B…#$7F,D1‰CMP.B…#EVNTSERV,D1 ‰BNE.S…ECPB\@‰BSR‡APPEND_PBECPB\@‰ENDM    **ˆThis�is�the�freeze_asq�macro.*ˆIt�inhibits�interrupts.*FREEZE_ASQ‰MACRO‰MOVE.W„SR,-(A7)‰ORI.W…#$0700,SR‰ENDM  * *ˆThis�is�the�release_asq�macro.*ˆIt�enables�interrupts.*RELEASE_ASQˆMACRO‰MOVE.W„(A7)+,SR‰ENDM  *%*ˆThis�is�the�macro�to�get�the�length)*ˆof�the�event�into�the�msg_len�register.* GET_LEN‚MACRO ‰CLR.L…D0‰MOVE.B„(A1)+,D0‰ENDM  *&*ˆThis�is�the�macro�to�get�the�code�of'*ˆthe�event�into�the�msg_code�register.*GET_CODE MACRO‰MOVE.B„(A1)+,D1‰ENDM  *-*ˆThis�is�the�macro�to�set�the�asq_xfr�vector*ˆfrom�either:*(*�1.)‚the�alternate�asr�vector�contained$*’within�the�event�pointed�to�by�the*’asq_get�pointer,�or*�2.)‚the�default�asr�vector.* * *’msg_ptr�<==�asq_get�(asq_ptr);'*’if�(bit_7�(msg_code�(msg_ptr))�=�set)6*’then�asq_xfr�(asq_ptr)�<==�alt_asr_vector�(msg_ptr);/*’else�asq_xfr�(asq_ptr)�<==�asq_asr�(asq_ptr); **ˆEquates�for�this�macro.* MSG_CODE�EQU‡1 ALT_ASR‚EQU‡2 GET_ASQXFR‰MACRO8‰MOVE.L„ASQASR(A4),ASQXFR(A4)‰Assume�default�asr�vector.4‰MOVE.L„ASQGET(A4),A1‘msg_ptr�<==�asq_get�(asq_ptr);.‰TST.B…MSG_CODE(A1)’is�bit_7�(msg_code)�=�set?‰BPL.S…GXF_\@˜branch�if�no. 2m;4=‰MOVE.L„ALT_ASR(A1),ASQXFR(A4)ˆUse�alt_asr�vector�from�event.GXF_\@:‰ENDM  *.*ˆThis�is�the�macro�to�put�the�length�and�code*ˆfields�into�the�event.* PUT_LCƒMACRO‰MOVE.B„D0,(A0)+‰MOVE.B„D1,(A0)+ ‰SUB.W…#2,D0‰ENDM  *'*ˆThis�is�the�macro�to�move�the�message$*ˆfrom�the�src_ptr,�to�the�dest_ptr.*ˆ(Length�is�in�D0.)* PUT_MSG‚MACRO ‰LSR.W…#2,D0 ‰BCC.S…PM2_\@ ‰MOVE.W„(A1)+,(A0)+ ‰BRA.S…PM2_\@PM1_\@‰MOVE.L„(A1)+,(A0)+PM2_\@‰DBRA†D0,PM1_\@‰ENDM *'*ˆThis�is�the�macro�to�move�the�message$*ˆfrom�the�src_ptr,�to�the�dest_ptr.*ˆ(Length�is�in�D1.)*PUT_MSG1 MACRO ‰LSR.W…#2,D1 ‰BCC.S…PM2_\@ ‰MOVE.W„(A1)+,(A0)+ ‰BRA.S…PM2_\@PM1_\@‰MOVE.L„(A1)+,(A0)+PM2_\@‰DBRA†D1,PM1_\@‰ENDM*********************** Ending of &.ASQ.MC ***********************éééé‰PAGE************************** Beginning of &.BAB.EQ **************************O********************************************************************************Í*D*‰Equates�relating�to�BAB�=�Background�Activation�Block�for�RMS68K„**Í*O******************************************************************************* *J*‚Interrupt�service�routines�in�supervisor�mode�may�schedule�a�routine�forL*‚execution�in�background�by�preparing�a�BAB�which�points�to�the�routine�andK*‚is�not�currently�in�use,�and�calling�the�exec's�BKG_SCHEDULE�routine�with*‚the�BAB�address�in�A0.*I*‚The�BKG_SCHEDULE�routine�sets�the�IN�USE�flag�in�the�BAB�and�adds�it�toI*‚the�end�of�a�queue�of�BAB's�which�will�be�dispatched�when�the�interruptF*‚level�returns�to�zero.‚You�may�NOT�alter�the�BABLNK�or�BABUSE�fieldsJ*‚while�the�BAB�is�in�use.‚An�attempt�to�schedule�using�a�BAB�whose�IN�USE$*‚flag�is�already�set�has�no�effect.*I*‚When�the�routine�is�dispatched,�A1�will�point�to�the�BAB,�and�all�otherH*‚registers�are�available;�only�the�stack�pointer�must�be�preserved.‚YouJ*‚will�be�at�interrupt�level�0�and�you�must�exit�at�interrupt�level�0�with*‚with�an�RTS.* ŠOFFSET�0 0BABLNK„DS.Lƒ1’Forward�link�to�next�BAB�in�queue.8BABPTR„DS.Lƒ1’Po* inter�to�code�to�executed�in�background.0BABUSE„DS.Bƒ1’Flag:‚true�(nonzero)�means�IN�USE."ŠDS.Bƒ3’Reserved�(should�be�zero). BABBLN„EQU„*’Length�of�a�BAB.*********************** Ending of &.BAB.EQ ***********************ééC&‰PAGE************************** Beginning of &.CCB.EQ **************************** CHANNEL CONTROL BLOCK (CCB)D*ƒCONTAINS�CHANNEL�DESCRIPTION�AND�DATA�AREAS�FOR�DEVICE�INDEPENDENT*ƒCMR�PORTION.**H* CHANNEL MANAGEMENT DATA AREA ****************************************** ŠOFFSET�0*ŠDS.Bƒ4’'!CCB'�DUMP�EYE�CATCHER-CCBALL„DS.Bƒ4’ALL�LINK�FOR�CCB�CHAIN�IN�ORDER*¨OF�ALLOCATION/CCBPOLLƒDS.Bƒ4’LINK�TO�NEXT�CCB�FOR�THIS�VECTOR5CCBTLNKƒDS.Bƒ4’LINK�TO�NEXT�CCB�ATTACHED�TO�SAME�TASKACCBSUB„DS.Bƒ4ŠLINK�TO�CCB�OF�NEXT�SUBORDINATE�CHANNEL�(MEANINGFUL(*§ONLY�IF�CCBSTR�OPTION�CCBFGSUP�IS�SET)*J* THE FOLLOWING 24 BYTES MUST BE CONTIGUOUS IN THE CCB (LOAD WITH MOVEM.L)(CCBMNEMƒDS.Bƒ4’MNEMONIC�FOR�THIS�CHANNELCCBTYPEƒDS.Bƒ1’CHANNEL�TYPE&CCBCMCTƒDS.Bƒ1’RESERVED�(USED�BY�CHPI)1CCBUSERƒDS.Bƒ4’I/O�HANDLER�SERVICE�VECTOR�ADDRESS,CCBRTNIƒDS.Bƒ4’INTERRUPT�ENTRY�POINT�ADDRESS-CCBCHB„DS.Bƒ4’BASE�OF�MEMORY�MAPPED�I/O�SPACE>CCBMME„DS.Bƒ2�0-REL�NUMBER�OF�CONSEC�BYTES�IN�MEM�MAPPED�SPACE&CCBVECTƒDS.Bƒ1’INTERRUPT�VECTOR�NUMBER:CCBPPRIO‚DS.Bƒ1’POLLING�PRIORITY�(HARDWARE�INTERRUPT�PRIO)1CCBSPRIO‚DS.Bƒ1’SOFTWARE�PRIO�(POSITION�IN�CHAIN).CCBPECTƒDS.Bƒ1’NUMBER�OF�POLLING�TABLE�ENTRIES*>CCBRQSTƒDS.Bƒ8ŽTASK�NAME�AND�SESSION�CODE�THAT�ORIGINALLY�MADE**CCBRQSTA‚DS.Bƒ4’ADDRESS�OF�REQUESTOR'S�TCB*!CCBKEY„DS.Bƒ1’REQUESTOR'S�I/O�KEY$CCBRTN„DS.Bƒ1’RETURN�OPTION�(BIT�0):*§0=PUT�RETURN�STATUS�IN*ªBUFFER,�ISSUE�WAKEUP*§1=PUT�RETURN�STATUS�ON*ªASQ*#CCBASQLƒDS.Bƒ1’MAX�ASQ�ENTRY�LENGTHŠDS.Bƒ1’RESERVED7CCBSVVCƒDS.Bƒ4’SERVICE�VECTOR�FOR�RETURN�FROM�INTERRUPT)CCBSR…DS.Bƒ2’UNMASK�STATUS�REGISTER�VALUE(CCBISR„DS.Bƒ2’MASK�STATUS�REGISTER�VALUECCBVADRƒDS.Bƒ4’VECTOR�ADDRESS!CCBSTR„DS.Bƒ2’CCB�STATUS�REGISTER1CCBJSR„DS.Bƒ6’HOLDS�JSR�INSTRUCTION�FOR�VECTORING-CCBIOH„EQU„*’I/O�HANDLER�PARAMETER�BLOCK�INFO&CCBTASKA‚DS.Bƒ4’ADDRESS�OF�ATTACHE�TCB4CCBTASKƒDS.Bƒ8’ATTACHEE�TASK�NAME�AND�SESSION�NUMBER*L:U2HCCBRESV1‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATAHCCBRESV2‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATAHCCBRESV3‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATAHCCBRESV4‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATAHCCBRESV5‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATA%CCBDDP„EQU„*’DEVICE�DEPENDENT�PORTION***-* POLLING TABLE AND POLLING TABLE ENTRY COUNT**žSTART�OF�POLLING�TABLE�IN�CCB5CCBMCNTƒEQU„4’MAXIMUM�NUMBER�OF�POLLING�TABLE�ENTRIES6CCBPBASE‚DS.BƒCCBMCNT*8ŠRESERVE�REMAINING�SPACE�IN�CCB**"* POLLING TABLE RESIDES WITHIN CCB9*ƒCONTAINS�8-BYTE�ENTRIES�TO�ALLOW�HANDLING�MORE�THAN�ONE'*ƒINTERRUPT�TYPE�FROM�A�SINGLE�CHANNEL.+ * ŠOFFSET�0"CCBPOFFƒDS.Bƒ2’POLLING�BYTE�OFFSETCCBMASKƒDS.Bƒ1’POLLING�MASK)CCBPTSTƒDS.Bƒ1’POLLING�=�OR�<>�TEST�VALUE CCBRESOƒDS.Bƒ2’RESET�BYTE�OFFSETCCBRESVƒDS.Bƒ1’RESET�VALUECCBRESPƒDS.Bƒ1’RESET�OPTIONS  ** CCBSTR (BIT FLAGS)*�BIT”MEANING�IF�SET-*�---”---------------------------------------#CCBFGATH‚EQU„15‘CHANNEL�IS�ATTACHED"CCBFGDIR‚EQU„8’EXCLUSIVE�VECTORING?CCBFGSUP‚EQU„2�THIS�IS�A�SUPERVISOR�CHANNEL;�THE�ADDRESS�OF�THE(*§CCB�OF�THE�FIRST�CHANNEL�IN�THE�SUBOR-*§DINATE�CHAIN�IS�IN�CCBSUB."CCBFGOFF‚EQU„1’CHANNEL�IS�OFF-LINE;CCBFGSYS‚EQU„0‘ONLY�SYSTEM�TASKS�MAY�ATTACH�TO�THIS�CHANNEL  ** CCBRESP -- RESET OPTIONS*CCBRSW„EQU„0’WRITE�RESET�BYTECCBRSR„EQU„1’READ�RESET�BYTE*********************** Ending of &.CCB.EQ ***********************é‰PAGE****************************** Beginning of &.CONNECT.EQ ******************************O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***G***…FILENAME:�CONNECT.EQ�--�EQUATES�FOR�CONNECT'S�COMMON�DATA�AREA.…******É***G***…ENVIRONMENT:�This�is�included�in�the�assembly�of�the�two�halves…***?***‡of�the�VERSAdos�utility�CONNECT:‚CONNECT1�and�CONNECT2.Š******É***,***…EXTERNAL�DATA�STRUCTURES�REFERENCED: ******É***)***…EXTERNAL�ENTRY�POINTS�REFERENCED:£******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revision�history�(add�new�changes�to�top).*…Date†Author‰ChangesI*…--------‚-------------‚------------------------------------------------G*†7/22/83‚Steve�FranckƒChanged�name�from�TMDATA.EQ,�and�added�stuff�for*žsupport�of�option�L.'*†5/31/83‚Steve�FranckƒInitial�writing.*ŠPAGEO*********************************************************************************‰THE�CHARACTER�QUEUES*O******************************************************************************* *&*‚Equates�describing�character�queues.J*‚The�way�the�queues�are�used,�they�are�empty�when�GET�=�PUT,�and�they�areL*‚full�if�adding�another�char�would�make�GET�=�PUT.‚That�is,�there�is�alwaysK*‚a�'dead�space'�of�1�char�to�keep�the�PUT�ptr�from�catching�up�to�GET.‚TheK*‚pointers�into�the�queues�advance�by�decrementing:‚each�pointer�moves�from0*‚Q_MAX�down�to�0�and�then�starts�over�at�Q_MAX.*5Q_MAX…EQU„2047�Highest�index�value�in�the�queue;�size"*§of�queue�will�be�this�value�+�1. ŠOFFSET�0.GET‡DS…1’Index�of�next�char�to�get�from�queue.]1fMn8v /PUT‡DS…1’Index�where�next�char�goes�into�queue.=QUEUE…DS.BƒQ_MAX+1ŒThe�data�area:�index�ranges�from�0..Q_MAX. #QUEUE_SIZE�EQUƒ*’Size�of�the�queue.ŠPAGEO********************************************************************************(*‰OFFSET�FOR�DATA�SHARED�BY�TM�AND�TMSUP*O******************************************************************************* ŠOFFSET�0 *%*‚Character�queues�for�the�two�ports.*ŠDS…0APORT1_QUEUE�DS.B�QUEUE_SIZE‰Queue�for�char's�coming�in�o+ n�port�1.APORT2_QUEUE�DS.B�QUEUE_SIZE‰Queue�for�char's�coming�in�on�port�2.  *9*‚Area�to�save�data�passed�in�registers�at�task�creation.F*‚These�values�are�in�a�task's�registers�only�if�SCT�created�the�task.*ŠDS…0SCT_REGISTERS: *-------- D0 - D3"SCT_MTSK‚DS.Lƒ1’Monitor�task�name."SCT_MSES‚DS.Lƒ1’Monitor�session�#.#SCT_VOLƒDS.Lƒ1’Default�volume�name.ŠDS.Wƒ1’Unused.SCT_USNƒDS.Wƒ1’Default�user�#. *-------- D4 - D7SCT_CLGƒDS.Lƒ1’Default�catalog. ŠDS.Lƒ1’*$SCT_COML‚DS.Lƒ1’Command�line�length.(SCT_LUMK‚DS.Lƒ1’Logical�unit�usage�mask. *-------- A0 - A3SCT_TASK‚DS.Lƒ1’Task�name.$SCT_TERM‚DS.Lƒ1’Associated�terminal.ŠDS.Wƒ1’Unused.SCT_LUSN‚DS.Wƒ1’Logon�user�#.SCT_SESS‚DS.Lƒ1’Session. *-------- A4 - A5SCT_DATE‚DS.Lƒ1’System�date.SCT_TIME‚DS.Lƒ1’System�time. **‚Flags.*5READY…DS.Bƒ1’Flag�checked�by�the�supervisor�mode�code(*§to�see�whether�or�not�we�are�ready�for%*§it�to�do�its�stuff.‚Initially�it�is'*§false�(we're�not�ready),�but�gets�set%*§true�after�we�have�linked�ourselves*§to�both�drivers. ;EXORTERM‚DS.Bƒ1’This�flag�is�set�if�the�terminal�from�which(*§we�were�invoked�is�an�EXORterm�155,�or%*§emulates�one.‚Actually,�if�option�L*§is�specified,�this�gets�set. BREAK2„EQU„BREAKS+1‹(True�if�a�break�is�being�sent�to�port�2.)  ***************** ŠDS…0;DATA_SIZE�EQU„*’Amount�of�space�required�for�all�this�data.*************************** Ending of &.CONNECT.EQ ***************************é, éééééé‰PAGE**************************** Beginning of &.CRASH.MC *****************************D* Crash macro will generate a conditional long branch to any addressD*ƒwithin�range.‚It�is�normally�used�to�generate�a�conditional�branchC*ƒto�an�odd�address.�(The�assembler�will�not�allow�such�a�branch�toC*ƒbe�coded�directly).‚This�is�a�good�way�to�conditionally�crash�theB*ƒsystem�(in�supervisor�mode)�or�force�a�task�abort�(in�user�mode)** Example of usage:**‰CRASH.NE�*+1*E* The above would generate a DC.W $66FF - the equivalent of BNE.S *+1*T‰EQU„0F‰EQU„1HIˆEQU„2LSˆEQU„3CCˆEQU„4 HSˆEQU„CCCSˆEQU„5 LOˆEQU„CSNEˆEQU„6EQˆEQU„7VCˆEQU„8VSˆEQU„9 PLˆEQU„$A MIˆEQU„$B GEˆEQU„$C LTˆEQU„$D GTˆEQU„$E LEˆEQU„$F CRASH…MACROŠNOLIST \@A‡SET„\0\@B‡SET„\1-*-2ŠLIST*ŠDC.Lƒ(((6<<4)!(\@A&$0F))<<24)!(\@B&$FFFF)ŠENDM*8* ILLEGAL macro generates a two-byte illegal instruction* ILLEGALƒMACRO ŠDC.Wƒ$4AFCŠENDM************************* Ending of &.CRASH.MC *************************ééé~3‰PAGE******************************* Beginning of &.DUALPORT.MC *******************************O*******************************************************************************O********************************************************************, **************É***E***†DUALPORT.MC�--�MACROS�TO�USE�WITH�VMEBUS�AND�VERSABUS�DRIVERS†******É***5***†ENVIRONMENT:‚In�68000�assembly�language�code.•******É***B***†FUNCTION:‚This�file�includes�two�macros�to�use�in�changingˆ***;***‘addresses�as�viewed�from�the�processor�to�addresses…***4***‘as�viewed�from�the�bus�and�visa-versa.‚It�is‹***8***‘essential�to�use�these�macros�when�the�processorˆ***9***‘has�dual-ported�RAM�assigned�to�an�offset�address‡******‘other�than�zero.¨******É******†NOTES:½******É***O*******************************************************************************O******************************************************************************* *,*‚Revision�history�(add�new�changes�to�top).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------&*†5/01/84‚Julie�Hoban„Initial�writing.* C*ˆThese�macros�must�be�used�by�drivers�which�control�devices�on�theJ* VMEbus or VERSAbus. Certain system configurations present their on-boardJ* memory (memory physically on the same card as the CPU) at an offset fromI*�zero�when�viewed�from�the�bus.‚For�instance,�the�card�on�the�VMEbus�hasG* a DMA device on it which requires a buffer address and the address isJ*�local�to�the�CPU.‚Before�loading�the�DMA�device�with�the�address,�invokeL* the macro GO_OFF_BD and the address will get adjusted to the proper offset* if required.‰PAGE*I*‚Macro�to�change�address�as�viewed�from�processor�to�as�viewed�from�bus.* 7*ƒIf�the�register�(passed�as�an�argument�to�this�macro)A*ƒcontains�an�address�that�indicates�that�it�is�within�the�limits5*ƒdefined�as�on-board�ram�as�seen�by�the�driver,�then<*ƒadd�the�constant�RAM_SKEW�so�that�the�address�will�fall�in‡/�&3*ƒthe�range�for�on-board�ram�as�seen�by�the�device.*>*ƒThe�limits�are�defined�in�the�SYSCMD.CD�file�and�are�defined;*ƒwhen�the�driver�is�linked�into�the�system�at�SYSgen�time.*0„XREF�OFFBD_LO,OFFBD_HI,ONBD_LO,ONBD_HI,RAM_SKEW*GO_OFF_BDŠMACRO„IF.Lƒ\1‚‚#ONBD_LOƒAND.L‹\1‚‚#ONBD_HIƒTHEN.S‰ADD.L…#RAM_SKEW,\1„ENDI„ENDM *E*‚Macro�to�change�address�as�viewed�by�bus�to�as�viewed�by�processor.* *7*ƒIf�the�register�(passed�as�an�argument�to�this�macro)A*ƒcontains�an�address�that�indicates�that�it�is�within�the�limits5*ƒdefined�as�on-board�ram�as�seen�by�the�device,�thenA*ƒsubtract�the�constant�RAM_SKEW�so�that�the�address�will�fall�in3*ƒthe�range�for�on-board�ram�as�seen�by�the�driver.*>*ƒThe�limits�are�defined�in�the�SYSCMD.CD�file�and�are�defined;*ƒwhen�the�driver�is�linked�into�the�system�at�SYSgen�time.* GET_ON_BDŠMACRO„IF.Lƒ\1‚‚#OFFBD_LOƒAND.L‹\1‚‚#OFFBD_HIƒTHEN.S‰SUB.L…#RAM_SKEW,\1„ENDI„ENDM**************************** Ending of &.DUALPORT.MC ****************************ééé- ‰PAGE************************** Beginning of &.ENV.EQ ************************** ŠLLEN�120**‰Chip-oriented�equates*ŠIFEQ‚CHIPTYPE-680000USERSR„EQU„-6‘Distance�from�stack-top�to�user�SRVORLNGTH‚EQU„0’Length�of�VORŠENDCŠIFEQ‚CHIPTYPE-68010=VORFMT_MASK�EQU‚$F000ŽMask�to�isolate�format�code�in�the�VOR.0USERSR„EQU„-8‘Distance�from�stack-top�to�user�SRVORLNGTH‚EQU„2’Length�of�VORŠENDCŠIFEQ‚CHIPTYPE-68020=VORFMT_MASK�EQU‚$F000ŽMask�to�isolate�format�code�in�the�VOR.BVORFMT_SHORT_BERR�EQU�$A000‰VOR�format�code�for�a�short�bus�error.@VORFMT_LONG_BERR‚EQU�$B000‰VOR�format�code�for�a�long‚bus�error.0USERSR„EQU„-8‘Distance�from�stack-top�to�user�SRVORLNGTH‚EQU„2’Length�of�VORŠENDC*********************** Ending of &.ENV.EQ ***********************ééé阉PAGE************************** Beginning of &.EXE.EQ ************************** ŠLLENƒ120*Ç*‰***************‰*‚03/28/82‚**‰***************Ç*Ç,*‰DATA�STRUCTURES�AND�EQUATES�FOR�EXEC�CALLS*Ç*‰INTERRUPT�EVENT�(CODE�1)*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETEVLENG„DS.Bƒ1’EVENT�LENGTHEVCODE„DS.Bƒ1’EVENT�CODEEVDATA„EQU„*’VARIABLE�DATA*Ç.*‰INTERRUPT�STRUCTURE�DEFINED�IN�$.XIOEQU.DATA*Ç*‰I/O�COMPLETE�EVENT�(CODE�2)*Ç%ŠOFFSET�EVDATA�START�OF�VARIABLE�DATAEVIOCB„DS.Lƒ1’ADDRESS�OF�IOCBEVIOND„EQU„*’EVENT�LENGTH*Ç*‰QUEUE�EVENT�(CODE�3)*Ç%ŠOFFSET�EVDATA�START�OF�VARIABLE�DATAEVQTSK„DS.Lƒ1’SENDER�TASK�NAME#EVQSES„DS.Lƒ1’SENDER�SESSION�NUMBEREVQTXT„EQU„*’MESSAGE�TEXT*Ç*‰TIMER�EVENT�(CODE�4)*Ç%ŠOFFSET�EVDATA�START�OF�VARIABLE�DATAEVTDAT„DS.Lƒ1’DATE�OF�EVENTEVTTIM„DS.Lƒ1’TIME�OF�EVENT=EVTPRM„EQU„*�EVENT�PARAMETER�LENGTH�IF�NO�UNIQUE�ID�SPECIFIED"EVTUID„DS.Lƒ1’UNIQUE�ACTIVATION�ID EVTTAC„DS.Wƒ1’ACTIVATION�COUNTER6EVTIDL„EQU„*’EVENT�PARAMETER�BLOCK�LENGTH�IF�UNIQUE�ID *£SPECIFIED*Ç*‰SUB�TASK�EVENT�(CODE�5)*Ç%ŠOFFSET�EVDATA�START�OF�VARIABLE�DATAEVSTSK„DS.Lƒ1’SUB�TASK�NAME%EVSSES„DS.Lƒ1’SUB�TASK�SESSION�NUMBEREVSCTN„DS.Lƒ1’CALLING�TASK�NAME)EVSCTS„DS.Lƒ1’CALLING�TASK�SESSION�NUMBEREVSCOD„DS.Bƒ1’EVENT�SUB�CODEŠDS.Bƒ1’RESERVEDEVSACD„DS.Wƒ1’ABORT�CODE*Ç*‰EQUATES�FOR�'EVSCOD'�(8�BITS)*ÇSEVCNT„EQU„1’NORMAL�TERMINATIONSEVCAB„EQU„2’ABORTEDSEVCSP„EQU„3’SUSPENDEDSEVCST„EQU„4’STOPPED4SEVCSR„EQU„5’STARTED�BY�TASK�OTHER�THAN�MONITOR�TASKSEVCDL„EQU„6’DELETEDŠPAGE*Ç*‰ATTENTION�EVENT�(CODE�6)*Ç%ŠOFFSET�EVDATA�START�OF�VARIABLE�DATA"EVAPRM„EQU„*’PARAMETER�INFORMATION*Ç*‰USER/SERVER�EVENT�(CODE�7)*Ç%ŠOFFSET�EVDATA�START�OF�VARIABLE�DATA%EVUTIN„DS.- Bƒ1’TRAP�INSTRUCTION�NUMBER"EVUPRI„DS.Bƒ1’REQUESTOR'S�PRIORITY#EVUTSK„DS.Lƒ1’REQUESTOR'S�TASK�NAME(EVUSES„DS.Lƒ1’REQUESTOR'S�SESSION�NUMBER%EVUUNM„DS.Wƒ1’REQUESTOR'S�USER�NUMBER%EVURD0„DS.Lƒ1’REQUESTOR'S�REGISTER�D0¡QªM²DºPÂ%EVURA0„DS.Lƒ1’REQUESTOR'S�REGISTER�A0 EVUPST„DS.Bƒ1’PARAM�BLOCK�STATUSEVUPSZ„DS.Bƒ1’PARAM�BBLOCK�SIZEEVULEN„EQU„*’LENGTH�OF�MESSAGE*Ç*‰EQUATES�FOR�'EVUTIN'�(8�BITS)*Ç'EVTNOS„EQU„7’REQUESTOR�IS�AN�O.S.�TASK’EVTNEOTƒEQU„6’EOT�NOTIFICATION›*EVTNEOSƒEQU„5’END�OF�SESSION�NOTIFICATION�+EVTNRTTƒEQU„4’REQUESTOR�IS�A�REAL�TIME�TASK*Ç*‰EQUATES�FOR�'EVUPST'�(8�BITS)*ÇEVPSTOKƒEQU„0’OKEVPSTPMƒEQU„1’PART�OF�PB�MOVEDEVPSTBAƒEQU„2’BAD�PB�ADDRESSEVPSTNRƒEQU„3’PB�NOT�REQUESTED*Ç*‰EQUATES�FOR�'EVCODE'�(8�BITS)*Ç'EVCIOI„EQU„1’EVENT�CODE�-�I/O�INTERRUPT&EVCIOC„EQU„2’EVENT�CODE�-�I/O�COMPLETE%EVCQUE„EQU„3’EVENT�CODE�-�QUEUE�EVENT%EVCTIM„EQU„4’EVENT�CODE�-�TIMER�EVENT(EVCSUB„EQU„5’EVENT�CODE�-�SUB�TASK�EVENT)EVCATN„EQU„6’EVENT�CODE�-�ATTENTION�EVENT+EVCSRV„EQU„7’EVENT�CODE�-�USER/SERVER�EVENTŠPAGE*Ç*‰QUEUE�EVENT�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSET#QEVTSK„DS.Lƒ1’TASK�TO�RECEIVE�EVENT!QEVSES„DS.Lƒ1’TASK�SESSION�NUMBERQEVOPT„DS.Wƒ1’DIRECTIVE�OPTIONS%QEVPKT„DS.Lƒ1’POINTER�TO�EVENT�PACKETQEVIAD„DS.Lƒ1’INTERRUPT�ADDRESS*Ç *‰EQUATES�FOR�'QEVOPT'�(16�BITS)*Ç!QVOPAS„EQU„$8000ŽADDRESS�SUPPLIED*Ç'*‰EQUATES�FOR�RETURN�FROM�EVENT�OPTIONS*ÇRVOPEN„EQU„1’ENABLE�ASQ*Ç*‰CREATE�TCB�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETCRTTSK„DS.Lƒ1’TASK�NAME!CRTSES„DS.Lƒ1’TASK�SESSION�NUMBERCRTOPT„DS.Wƒ1’OPTIONSCRTMON„DS.Lƒ2’MONITOR�TASKCRTIPR„DS.Bƒ1’INITIAL�PRIORITYCRTLPR„DS.Bƒ1’LIMIT�PRIORITYCRTATT„DS.Wƒ1’TASK�ATTRIBUTESCRTENT„DS.Lƒ1’TASK�ENTRY�POINT!CRTUID„DS.Wƒ1’USER�ID�OF�NEW�TASK&CRTLEN„EQU„*’LENGTH�OF�PARAMETER�BLOCK*Ç *‰EQUATES�FOR�'CRTOPT'�(16�BITS)*Ç"CTOPMS„EQU„$8000ŽMONITOR�SPECIFIED#CTOPMP„EQU„$4000ŽMONITOR�PROPAGATED*Ç *‰EQUATES�FOR�'CRTATT'�(16�BITS)*ÇCTATST„EQU„$8000ŽSYSTEM�TASK CTATMR„EQU„$4000ŽMEMORY�RESIDENT*Ç*‰START�TASK�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETSTRTSK„DS.Lƒ1’TASK�NAME!STRSES„DS.Lƒ1’TASK�SESSION�NUMBERSTROPT„DS.Wƒ1’OPTIONSSTRMON„DS.Lƒ2’MONITOR�TASKSTRREG„DS.Lƒ15‘REGISTERS*Ç *‰EQUATES�FOR�'STROPT'�(16�BITS)*Ç"STOPMS„EQU„$8000ŽMONITOR�SPECIFIED#STOPMP„EQU„$4000ŽMONITOR�PROPAGATED#STOPRG„EQU„$2000ŽREGISTERS�SUPPLIEDŠPAGE*Ç"*‰SEGMENT�DIRECTOR�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSET%SEGTCB„DS.Lƒ1’TASK�TO�RECEIVE�SEGMENT!SEGSES„DS.Lƒ1’TASK�SESSION�NUMBERSEGOPT„DS.Wƒ1’OPTIONSSEGATT„DS.Wƒ1’ATTRIBUTESSEGNAM„DS.Lƒ1’SEGMENT�NAME(SEGLAD„DS.Lƒ1’LOGICAL�ADDRESS�OF�SEGMENT*SEGLEN„DS.Lƒ1’LENGTH�(IN�BYTES)�OF�SEGMENT)SEGPTR„DS.Lƒ1’POINTER�TO�RECEIVING�BUFFER*Ç&*‰RECEIVING�BUFFER�FOR�'REC.SEG.ATTR.'*Ç ŠOFFSET�0SRENAM„DS.Lƒ1’SEGMENT�NAMESREATT„DS.Wƒ1’ATTRIUBTES#SRELSA„DS.Lƒ1’LOGICAL�START�ADDRESS!SRELEA„DS.Lƒ1’LOGICAL�END�ADDRESSSREPAD„DS.Lƒ1’PHYSICAL�ADDRESSSRELEN„EQU„*’LENGTH*Ç *‰EQUATES�FOR�'SEGATT'�(16�BITS)*ÇSGATRO„EQU„$4000ŽREAD�ONLYSGATRW„EQU„0’READ�/�WRITE!SGATSS„EQU„$2000ŽSESSION�SHARABLE!SGATNS„EQU„0’NOT�SESSION�SHARABLE"SGATGS„EQU„$1000ŽGLOBALLY�SHARABLE"SGATNG„EQU„0’NOT�GLOBALLY�SHARABLE%SGATDP„EQU„$800�SEGMENT�IS�DUPLICATED&SGATND„EQU„0’SEGMENT�IS�NOT�DUPLICATED.SGATSD„EQU„$400�SEGMENT�SHARABLE�IF�DUPLICATED/SGATNN„EQU„0’SEGMENT�NOT�SHARABLE�IF�DUPLICATED*Ç *‰EQUATES�FOR�'SEGOPT'�(16�BITS)*Ç8SGOPAT„EQU„$8000…15�ATTRIBUTES�GIVEN:�TRSEG,DCLSHR,SETSAASGOPLA„EQU„$4000…14�LOGICAL�ADDRESS�(NOT�NAME):�TRSEG,SETSA,RCVSADSGOPPA„EQU„$2000…13�SET�LOGICAL�ADDR.=PHYSICAL�ADDR.(RET�ADR�IN�A0):!*�GTSEG,TRSEG,ATTSEG,SHRSEG,SETSA0SGOPSP„EQU„$1000…12�. MAKE�PERMANENT:�DCLSHR,SETSA8SGOPRP„EQU„$0800…11�REMOVE�PERMANENT�STATUS:�DESEG,SETSA1SGOPSL„EQU„$0400…10�SEGMENT�LENGTH:�SHRSEG,ATTSEGŠPAGE*Ç)*‰MOVE�LOGICAL�TO�LOGICAL�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETMVSTSK„DS.Lƒ1’SOURCE�TASK$MVSSES„DS.Lƒ1’SOURCE�SESSION�NUUMBER$MVSADD„DS.Lƒ1’SOURCE�LOGICAL�ADDRESSMVDTSK„DS.Lƒ1’DESTINATION�TASK(MVDSES„DS.Lƒ1’DESTINATION�SESSION�NUMBER)MVDADD„DS.Lƒ1’DESTINATION�LIGICAL�ADDRESSMVLENG„DS.Lƒ1’LENGTH*Ç*‰ALLOCATE�ASQ�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETASQTSK„DS.Lƒ1’TASK�NAME!ASQSES„DS.Lƒ1’TASK�SESSION�NUMBER#ASQSTA„DS.Bƒ1’INITIAL�STATUS�OF�ASQ$ASQMML„DS.Bƒ1’MAXIMUM�MESSAGE�LENGTH%ASQQLN„DS.Lƒ1’QUEUE�LENGTH�(IN�BYTES)ASQASR„DS.Lƒ1’ADDRESS�OF�ASR&ASQINPBƒDS.Lƒ1’ADDRESS�OF�INPUT�BUFFER*Ç*‰EQUATES�FOR�'ASQSTA'�(8�BITS)*ÇAQSTQD„EQU„0’ASQ�DISABLEDAQSTQE„EQU„1’ASQ�ENABLED*AQSTMD„EQU„0’DEFAULT�INPUT�BUFFER�DISABLED)AQSTME„EQU„2’DEFAULT�INPUT�BUFFER�ENABLEDAQSTRD„EQU„0’ASR�DISABLEDAQSTRE„EQU„4’ASR�ENABLED$AQSTSD„EQU„8’REGISTER�STACK�DISABLED#AQSTSE„EQU„0’REGISTER�STACK�ENABLED6AQSTBV„EQU„$10�USER�IS…DEFINING�DEFAULT�RECEIVE�BUFFER8AQSTBI„EQU„0’USER�IS�NOT�DEFINING�DEFAULT�RECEIVE�BUFFER(AQSTRI„EQU„$20�USER�DOES�NOT�WANT�AN�ASR"AQSTRV„EQU„0’USER�DOES…WANT�AN�ASR*Ç%*‰REQUEST�TASK�ATTRIBUTES�PARAM�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETTATTID„DS.Lƒ1’TASK�IDTATSES„DS.Lƒ1’TASK�SESSION*Ç*‰SET�PRIORITY*Ç ŠOFFSET�0SPRTSK„DS.Lƒ1’TASKSPRSES„DS.Lƒ1’SESSIONSPRPRI„DS.Bƒ1’PRIORITYŠDS.Bƒ1’RESERVED*Ç*‰DATE�AND�TIME�ROUTINES*Ç ŠOFFSET�0GTDATE„DS.Lƒ1’DATEGTTIME„DS.Lƒ1’TIMEŠPAGE*Ç"*‰ESTABLISH�SERVER�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSET*Ç%SRVADR„DS.Lƒ1’REQUEST�SERVICE�ADDRESS)SRVTRP„DS.Bƒ1’TRAP�INSTRUCTION�IDENTIFIER SRVPLN„DS.Bƒ1’PARAM�BLOCK�LENGTH*Ç*‰EQUATES�FOR�SRVTRP�(8�BITS)*Ç(SRTREOTƒEQU„$40�END�OF�TASK�NOTIFICATION$SRTRPRMƒEQU„$20�MOVE�PARAMETER�BLOCK*Ç-*‰ACKNOWLEDGE�SERVICE�REQUEST�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETACKTSK„DS.Lƒ1’TASK�NAME!ACKSES„DS.Lƒ1’TASK�SESSION�NUMBERACKOPT„DS.Wƒ1’OPTIONSACKTIN„DS.Bƒ1’TRAP�NUMBERACKCCD„DS.Bƒ1’CONDITION�CODEACKRD0„DS.Lƒ1’REGISTER�D0ACKRA0„DS.Lƒ1’REGISTER�A0*Ç!*‰EQUATES�FOR�'ACKOPT'�(16�BITS) *ÇAKOPSC„EQU„$4000ŽSET�CCAKOPLC„EQU„0’LEAVE�CCAKOPSD„EQU„$2000ŽSET�D0AKOPLD„EQU„0’LEAVE�D0AKOPSA„EQU„$1000ŽSET�A0AKOPLA„EQU„0’LEAVE�A0$AKOPRT„EQU„$800�REACTIVATTE�THE�TASKAKOPWT„EQU„$400�WAIT�THE�TASK AKOPST„EQU„$200�SUSPEND�THE�TASK!AKOPAA„EQU„$100�ACK.�ALL�REQUESTS*Ç,*‰EQUATES�FOR�SET�USER/SERVER�REQUEST�STATUS*ÇAKRSER„EQU„$80�ENABLE�REQUESTŠPAGE*Ç$*‰SEMAPHORE�DIRECTOR�PARAMETER�BLOCK*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETSEMNAM„DS.Lƒ1’SEMAPHORE�NAMESEMKEY„DS.Lƒ1’SEMAPHORE�KEYSEMCNT„DS.Bƒ1’INITIAL�COUNTSEMTYP„DS.Bƒ1’SEMAPHORE�TYPE*********************** Ending of &.EXE.EQ ***********************éééé. éé‰PAGE************************** Beginning of &.FIO.EQ **************************éééééééÊÓQÛNãCëHó+********************************************* PASCAL FILE I/O EQUATES** COPYRIGHT 1982 MOTOROLA, INC.**�VERSION‚2.01�:�4-19-82** 1980-04-11 : JOHN KAUFMANN*+********************************************%*ˆDATA�STRUCTURES�AND�EQUATES�FOR�I/O**$*�FHS�PARAMETER�BLOCK�DATA�STRUCTURE* ‰OFFSET�0FHSCMDƒDS.W�1�COMMANDFHSOPTƒDS.W�1�OPTIONSFHSSTAƒDS.B�1�STATUS!FHSLUNƒDS.B�1�LOGICAL�UNIT�NUMBERFHSVOLƒDS.B�4�VOLUME�NAMEFHSUSNƒDS.W�1�USER�NUMBERFHSCLGƒDS.B�8�CATALOG�NAMEFHSFILƒDS.B�8�FILE�NAMEFHSEXTƒDS.B�2�EXTENSIONFHSGENƒDS.W�1�RESERVED FHSWCDƒDS.B�1�WRITE�PROTECT�CODEFHSRCDƒDS.B�1�READ�PROTECT�CODE#FHSLRLƒDS.W�1�LOGICAL�RECORD�LENGTH7FHSSIZƒDS.L�1�CONTIGUOUS�FILE�SIZE�/�DIR.�ENTRY�POINTER* FOR NONCONTIGUOUS FILES‰OFFSET�FHSSIZFHSRESƒDS.B�1�UNUSED'FHSKEYƒDS.B�1�KEY�LENGTH�(0�IF�NO�KEYS)FHSFABƒDS.B�1�FAB�SIZEFHSDATƒDS.B�1�DATA�BLOCK�SIZE"FHSBLNƒEQU‚*�LENGTH�OF�PARAM�BLOCK**�FHSCMD�EQUATES�(16�BITS)*'FHALLOƒEQU�$80�ALLOCATE�(CREATE�A�FILE)FHASGNƒEQU�$40�ASSIGN�(OPEN)FHCLOSƒEQU�$4�CLOSEFHDELTƒEQU�$2�DELETE#FHRATTƒEQU�$180�RETRIEVE�ATTRIBUTES**ˆEQUATES�FOR�LU�ASSIGNMENTS* CDFLUNƒEQU…5“CMD�DEVICE/FILE�LUN LDFLUNƒEQU…6“LOG�DEVICE/FIEL�LUN**�FHSOPT�EQU/ ATES�(16�BITS)#*ACCESS PERMISSION FIELD (BITS 0-2)*)FAPBIT EQU $7 BITS FOR ACCESS PERM. FIELDFOPPR„EQU�0�PUBLIC�READFOPER„EQU�1�EXCLUSIVE�READFOPPW„EQU�2�PUBLIC�WRITEFOPEW„EQU�3�EXCLUSIVE�WRITEFOPPRPW‚EQU�4�PUBLIC�READ-WRITE*FOPPREW‚EQU�5�PUBLIC�READ,�EXCLUSIVE�WRITE*FOPERPW‚EQU�6�EXCLUSIVE�READ,�PUBLIC�WRITE"FOPEREW‚EQU�7�EXCLUSIVE�READ-WRITE**OVERWRITE FIELD (BIT 3)FOPOVRT‚EQU�8�OVERWRITE�FILE*$* ALLOCATE DATA BUFFER FIELD (BIT 5)*FOPABF EQU $20 ALLOCATE SHARED DATA BUFFER**POSITION FIELD (BIT 6)*FOPBEG EQU 0 POSITION AT BEGINNING OF FILE&FOPEND EQU $40 POSITION AT END OF FILE*!*RESERVED FIELD (BITS 7 NOT USED)**FILE TYPE FIELD (BITS 8-10)"FFTBIT EQU $700 BITS FOR FILE TYPEFOPCON‚EQU�0�CONTIGUOUS$FOPSEQƒEQU�$100�SEQUENTIAL�(FRL/VRL)CFOPISKƒEQU�$200�KEYED�RECORD,�INDEXED�SEQUENTIAL,�NO�DUPLICATE�KEYS,FOPISDƒEQU�$300�",�",�DUPLICATE�KEYS�ALLOWED*!*RESERVED FIELD (BIT 11 NOT USED)*#*USER ATTRIBUTES FIELD (BITS 15-12))FUSBITƒEQU�$F000�BITS�FOR�USER�ATTRIBUTES**�FHSSTA�EQUATES�(8�BITS)*"FSTADNM‚EQU�$5�DUPLICATE�FILE�NAME‰PAGE**�IOS�PARAMETER�BLOCK�STRUCTURE* ‰OFFSET�0IOSFCTƒDS.W�1�FUNCTIONIOSOPTƒDS.W�1�OPTIONSIOSSTAƒDS.B�1�STATUS!IOSLUNƒDS.B�1�LOGICAL�UNIT�NUMBERIOSSRVƒDS.B�1�RESERVED IOSPKLƒDS.B�1�PARTIAL�KEY�LENGTH.IOSRRNƒDS.L�1�RANDOM�RECORD�NUMBER:�LRN�OR�LSN"IOSSADƒDS.L�1�START�BUFFER�ADDRESS IOSEADƒDS.L�1�END�BUFFER�ADDRESS IOSLENƒDS.L�1�LENGTH�OF�TRANSFER IOSCADƒDS.L�1�COMPLETION�ADDRESS"IOSBLNƒEQU‚*�LENGTH�OF�PARAM�BLOCK**�IOSFCT�EQUATES�(16�BITS)*IOREADƒEQU�$1�READ�REQUESTIOWRITƒEQU�$2�WRITE�REQUESTIOREWDƒEQU�$102�REWIND**�IOSOPT�EQUATES�(16�BITS)*IOPASCƒEQU�0�ASCIIIOPWAT EQU 0 WAIT"IOPUNPƒEQU�0�UNCONDITIONAL�PROCEEDIOPFORƒEQU�0�FORMATTEDIOPECH EQU 0 ECHO MODEIOPRECƒEQU�0�RECORD�ACCESSIOPLRNƒEQU�0�LOGICAL�RECORD�IOIOPKEYƒEQU�0�FULL�KEY�ACCESS"IOPNOCƒEQU�0�NO�COMPLETION�ADDRESSIOPINF EQU 0 INPUT FORMATTEDIOPBINƒEQU�1�BINARY6IOPPOSƒEQU�$6000�BITS�13-14:�LOGICAL�ACCESS�/�POSITIONIOPNXTƒEQU�$0„NEXT(FORWARD)�/�>%IOPCUR EQU $2000 CURRENT POSITION / ='IOPPRVƒEQU�$4000�PREVIOUS(BACKWARD)�/�<2IOPRANƒEQU�$6000�RANDOM(LRN�OR�LSN�GIVEN)�/�>�OR�=**�IOSSTA�EQUATES�(8�BITS)*ISTAEOF‚EQU�$C2�END�OF�FILE‰PAGE*"*ŒSEGMENT�DIRECTOR�PARAMETER�BLOCK* ‰OFFSET�0%SEGTCBƒDS.B�4—TASK�TO�RECEIVE�SEGMENT!SEGSESƒDS.B�4—TASK�SESSION�NUMBERSEGOPTƒDS.W�1—OPTIONSSEGATTƒDS.W�1—ATTRIBUTESSEGNAMƒDS.B�4—SEGMENT�NAME(SEGLADƒDS.L�1—LOGICAL�ADDRESS�OF�SEGMENT*SEGLENƒDS.L�1—LENGTH�(IN�BYTES)�OF�SEGMENT)SEGPTRƒDS.L�1—POINTER�TO�RECEIVING�BUFFER*&*ˆRECEIVING�BUFFER�FOR�'REC.SEG.ATTR.'* ‰OFFSET�0SRENAMƒDS.B�4—SEGMENT�NAMESREATTƒDS.W�1—ATTRIUBTES#SRELSAƒDS.L�1—LOGICAL�START�ADDRESS!SRELEAƒDS.L�1—LOGICAL�END�ADDRESSSREPADƒDS.L�1—PHYSICAL�ADDRESSSRELENƒDS.L�1—LENGTH* *ˆEQUATES�FOR�'SEGATT'�(16�BITS)*SGATROƒEQU…$4000�READ�ONLYSGATRWƒEQU…0”READ�/�WRITE!SGATSSƒEQU…$2000�SESSION�SHARABLE!SGATNSƒEQU…0”NOT�SESSION�SHARABLE"SGATGSƒEQU…$1000�GLOBALLY�SHARABLE"SGATNGƒEQU…0”NOT�GLOBALLY�SHARABLE%SGATDPƒEQU…$800‘SEGMENT�IS�DUPLICATED&SGATNDƒEQU…0”SEGMENT�IS�NOT�DUPLICATED.SGATSDƒEQU…$400‘SEGMENT�SHARABLE�IF�DUPLICATED/SGATNNƒEQU…0”SEGMENT�NOT�SHARABLE�IF�DUPLICATED* *ˆEQUATES�FOR�'SEGOPT'�(16�BITS)*8SGOPATƒEQU…$8000�15�ATTRIBUTES�GIVEN:�TRSEG,DCLSHR,SETSAASGOPLAƒEQU…$4000Š14�LOGICAL�ADDRESS�(NOT�NAME):�TRSEG,SETSA,RCVSADSGOPPAƒEQU…$2000†13�SET�LOGICAL�ADDR.=PHYSICAL�ADDR.(RET�ADR�IN�A0):!*›GTSEG,TRSEG,ATTSEG,SHRSEG,SETSA0SGOPSPƒEQU…$1000�12�MAKE�PERMANENT:�DCLSHR,SETSA8SGOPRPƒEQU…$0800�11�REMOVE�PERMANENT�STATUS:�DESEG,SETSA1SGOPSLƒEQU…$0400�10�SEGMENT�LENGTH:�SHRSEG,ATTSEG;SGOPLGƒEQU…$0200‰9�ALLOCATE�NEXT�LARGER�BLOCK�IF�SIZE�ERROR‰PAGE*Æ*ˆTRAP�1�EQUATES°*ÆGTSEG„EQU‚1�ALLOCATE�SEGMENT™DESEG„EQU‚2�DEALLOCATE�SEGMENT"RELINQƒEQU‚22ŽRELINQUISH�EXECUTION'RCVSA„EQU‚9�RECEIVE�SEGMENT�ATTRIBUTES�ABORT„EQU‚14ŽABORT�TASK�(SELF)+RBETLFƒEQU‚26ŽRECEIVE�BUS�ERROR�THRU�LINE�F‰SPC…10*3* / VECTOR TABLE FOR BUS ERROR THRU LINE F EXCEPTIONS* ‰OFFSET‚0 VBETLFƒEQU…*BUSER„DS.L„1�BUS�ERRORADDRERƒDS.L„1�ADDRESS�ERROR‰DS.L„1�UNUSEDZDIV…DS.L„1�ZERO�DIVIDECHKI…DS.L„1�CHK�INSTRUCTIONTRAPV„DS.L„1�TRAPV�INSTRUCTIONVTABSZƒEQU…VBETLF+40‰PAGE-* RUNTIME DATA MAINTAINENCE - OFFSETS FROM A5 ‰OFFSET‚0SC‡DS.L„1�STATEMENT�COUNTERHP‡DS.L„1�HEAP�POINTERDL0†DS.L„8�DISPLAY�LEVEL�0SHPAD„DS.L„1�SMALLEST�HEAP�ADDRLTN†DS.B„4�LOADING�TASK�NAMESN‡DS.B„4�SESSION�NUMBERLUIU…DS.L„1�LU'S�IN�USECCDR…DS.W„1�CHAIN�CMD�DIAG�REGDTID…DS.B„4�DEFAULT�TERMINAL�IDDVOL…DS.B„4�DEFAULT�USER�VOLUMEDUN†DS.W„1�DEFAULT�USER�NUMBERDCAT…DS.B„8�DEFAULT�CATALOGCLL†DS.W„1�COMMAND�LINE�LENGTHCL‡DS.B„162‹COMMAND�LINEOFAR…DS.W„26ŒOPTION�FIELD�ARRAY‰DS.W„1�UNUSED"NFCL…DS.W„1�NUMBER�OF�FIELDS�IN�CLIENF…DS.B„1�I=�NUMBER�OF�FILESIECF…DS.B„1�I=�CURRENT�FILEIEOF…DS.B„1�I=�OFFSET"IECO…DS.B„1�I=�CURRENT�FILE�OFFSETOENF…DS.B„1�O=�NUMBER�OF�FILESOECF…DS.B„1�O=�CURRENT�FILEOEOF…DS.B„1�O=�OFFSETOECO…DS.B„1�O=�CURRENT�OFFSET#FNNF…DS.B„1�FIELD�N�NUMBER�OF�FILES FNCF…DS.B„1�FIELD�N�CURRENT�FILEFNOF…DS.B„1�FIELD�N�OFFSET"FNCO…DS.B„1�FIELD�N�CURRENT�OFFSET'‰DS.B„4*15ŠABOVE�INFO�FOR�15�MORE�FILESEFI†EQU…*�END�OF�FIELD�INFO"SGBRK„DS.L„1�SEGMENT�BREAK�ADDRESS2EOD†EQU…*�END�OF�DATA�NEEDED�DURING�INITIALIZATION&‰DS.B„72ŒRUNTIME�ERROR�ROUTINE�STORAGERTDSZ„EQU…*�RUNTIME�DATA�SIZE (* FILE POINTER - OFFSETS FROM INITIAL A0 ‰OFFSET‚0$CCP†DS.L„1�CURRENT�COMPONENT�POINTER"FDP†DS.L„1�FILE�DESCRIPTOR�POINTER =* FILE PARAMETER BLOCK - OFFSETS FROM FILE DESCRIPTOR POINTER*ˆPASCAL�PARAMETER�BLOCK ‰OFFSET‚0FP‡DS.L„1�FILE�POSITIONPFS†DS.W„1�PASCAL�FILE�STATUSCS‡DS.W„1�COMPONENT�SIZE*ˆIOS�PARAMETER�BLOCKIOS†DS.B„IOSBLN*ˆFHS�PARAMETER�BLOCKFHS†DS.B„FHSBLN*ˆMORE�FILE�STATUSFSR†DS.W„1�RESERVEDFSSCN„DS.B„1�FILE�SCAN�STATUSFPOS…DS.B„1�FILE�POSITION*ˆCOMPONENT�BUFFERCB‡EQU…*TXTBS„EQU…132‹TEXT�BUFFER�SIZE )* PASCAL FILE STATUS WORD BIT ASSIGNMENTSPFSSO„EQU…0�STANDARD�OUTPUTPFSSI„EQU…1�STANDARD�INPUTPFSTF„EQU…2�TEXT�FILEPFSLF„EQU…3�LOCAL�FILEPFSIF„EQU…4�INDEXED�FILEPFSOP„EQU…6�OPENPFSEOFƒEQU…7�END�OF�FILEPFSEOLN‚EQU…8�END�OF�LINEPFSPA„EQU…9�PASSED�ASSIGNED'PFSAPCƒEQU…10ŒACCESS�PERMISSION�CHANGEDPFSCLFƒEQU…11ŒCOMMAND�LINE�FILEPFSOUTƒEQU…12ŒOUTPUTISTAT„EQU…$3F‹INITIAL�STATUS * ADDITIONAL LU EQUATEMAXLU„EQU…31ŒMAXIMUM�VALID�LU * ERROR EQUATES OSE†EQU…0�OPERATING�SYSTEM�ERROR#LUA†EQU…$40‹LOGICAL�UNIT�ASSIGNMENTNAM†EQU…$28‹FILENAMEOPT†EQU…$41‹OPTIONMAL†EQU…$12‹MEMORY�ALLOCATION:WSN†EQU…$13‹WRONG�SEGMENT�NAME,�MUST�BE�'SEG2'�(VM0X�ONLY)%CLF†EQU…$42‹TOO�MANY�CMND�LINE�FIELDSFNR†EQU…$43‹FILE�NOT�RESETFNW†EQU…$44‹FILE�NOT�REWRITTEN*********************** Ending of &.IOE.EQ ***********************éééé0 ééé‰PAGE************************** Beginning of &.FME.EQ ************************** ŠLLENƒ120**‰Updated�08/30/84*!FABMAX„EQU„20‘MAXIMUM�SIZE�OF�FAB'DATMIN„EQU„4’MIMIMUM�SIZE�OF�DATA�BLOCK!MACSCDE1‚EQU„'EXOR'�MACSS�DISK�IDMACSCDE2‚EQU„'MACS'SECSZE„EQU„256�SECTOR�SIZE**"*…DATA�STRUCTURES�EQUATES�FOR�FMS£ *Š01/28/80µ*Ç***Ç* DIRECTORY BLOCK EQUATES*Ç ŠOFFSET�01DIRFPT„DS.Lƒ1’POINTER�TO�NEXT�DIRECTORY�BLOCK�STA*DIRUSN„DS.Wƒ1’USER�NO.�FOR�THIS�DIR.�BLOCK.DIRCLG„DS.Lƒ2’CATALOG�NAME�FOR�THIS�DIR.�BLOCKŠDS.Bƒ2’RESERVEDDIRSTR„EQU„*’START�OF�1ST�ENTRY DBSZE…EQU„4’DIRECTORY�BLOCK�SIZE** '*�DIRECTORY�ENTRY�(DIR)�DATA�STRUCTURE–*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETDIRFIL„DS.Lƒ2’FILENAMEFILLEN„EQU„*-DIRFILDIREXT„DS.Wƒ1’EXTENSIONEXTLEN„EQU„*-DIREXT4DIRRS1„DS.Wƒ1’RESERVED�(2�BYTE�GENERATION�DATA�SET?)1DIRFS…DS.Lƒ1’FILE�STARTING�PSN�OR�1ST�FAB�POINTER?DIRFE…DS.Lƒ1‹PHYSICAL�END�OF�FILE�LSN�OR�LAST�FAB�POINTER�(PSN)7*ˆTHE�FOLLOWING�TWO�FIELDS�MUST�BE�IN�GIVEN�ORDER�ELSE‹*ˆCODE�HAS�TO�BE�CHANGED©%DIREOF„DS.Lƒ1’LOGICAL�END�OF�FILE�LSN/DIREOR„DS.Lƒ1’END�OF�FILE�LOGICAL�RECORD�NUMBERDIRWCD„DS.Bƒ1’WRITE�ACCESS�CODEDIRRCD„DS.Bƒ1’READ�ACCESS�CODEDIRATT„DS.Bƒ1’ATTRIBUTES:DIRLBZ„DS.Bƒ1‘LAST�DATA�BLOCK�SIZE�(TRUCATED�IF�<>�DIRDSZ)$DIRLRL„DS.Wƒ1’RECORD�SIZE�(0�IF�VRL)DIRRS2„DS.Bƒ1’RESERVED&DIRKEY„DS.Bƒ1’KEY�SIZE�(0�IF�NON-ISAM)DIRFAB„DS.Bƒ1’FAB�SIZEDIRDAT„DS.Bƒ1’DATA�BLOCK�SIZE(DIRDTECƒDS.Wƒ1’DATA�FILE�CREATED/UPDATED&DIRDTEAƒDS.Wƒ1’LAST�DATE�FILE�ASSIGNED�END�OF�CHAINAFABBLK„DS.Lƒ1ŠBACKWARD�LINK�(PSN)�TO�PREVIOUS�FAB,�0�=>�FIRST�FABGFABUSE„DS.Bƒ1„FRACTIONS�OF�FAB�IN�USE:�0�THRU�16�16THS�IN�USE�(0=>EMPTY:FABPKY„DS.Bƒ1‘BCT�OF�NEXT�FIELD:�0�=�NULL�FIELD,�OTHERWISE6* LAST KEY OF PREVIOUS FAB IF ANY (ZERO FOR FISRT FAB)HFABSEG„EQU„*‚OFFSET�TO�FIRST�SEGMENT�DESCRIPTOR�(SD)�FOR�NON-ISAM�FILES�"* A SEGMENT DESCRIPTOR LOOKS LIKE:ŠOFFSET�0’FAB�ENTRY�EQUATES* BITS 31-28 USED FOR FLAGS::FABPSN„DS.Lƒ1‘PSN�OF�FIRST�SECTOR�ALLOCATED�TO�THE�SEGMENT!FABMSK„EQU„$0FFFFFFFŠMASK�FOR�PSN#FABBIT„EQU„$F0000000ŠBIT�FIELD�MASK7FABDAT„EQU„0’BITS�31-28�=�0�=>�PSN�POINTS�TO�DATA�BLOCK@FABFAB„EQU„$80000000ŠBITS�31-28�=�8�=>�PSN�POINTS�TO�ANOTHER�FAB-FABREC„DS.Wƒ1’NUMBER�OF�RECORDS�IN�DATA�BLOCK0FABSGS„DS.Bƒ1’#�OF�SECTORS�IN�USE�IN�THE�SEGMENTDFABKEY„DS.Bƒ1‡LENGTH�OF�NEXT�FIELD,�0�IF�NULL�FIELD,�ELSE�AT�LEAST�4+FABSSL„EQU„*’SD�LENGTH�FOR�SEQUENTIAL�FILESA*�SD�LENGTH�IS�VARIABLE�FOR�ISAM�FILES,�KEY�FOLLOWS�FABKEY�FIELDˆ*********************** Ending of &.FME.EQ ***********************ééé‰PAGE************************** Beginning of &.FMI.EQ ****************************…INTERNAL�FMS�EQUATES® *Š5/21/80¶*Ç*Ç* GENERAL EQUATES*Ç3NLˆEQU„$FFFFFF00ŠNEGATIVE�LONG�WORD�FOR�ERROR�CODES8FEVTLN„EQU„EVTLEN+FHSNLN†LENGTH�OF�MAXIMUM�FMS�ASQ�ENTRYKEYMIN„EQU„4’MINIMUM�KEY�LENGTH5KEYMAX„EQU„100�MAXIMUM�KEY�LENGTH�(2�MUST�FIT�IN�FAB)'BCTFLD„EQU„2’LENGTH�OF�BYTE�COUNT�FIELD*SATSZE„EQU„1’NO.�OF�MEMORY�BUFFERS�FOR�SAT-SPOOLF„EQU„$40�'@'-1ST�CHAR.�FOR�SPOOLER�FILE*TEMPF…EQU„$26�'&'-1ST�CHAR.�FOR�TEMP.�FILE%FMSD†EQUƒ'FMSD'ŽFMS�DATA�SEMGNET�NAME@* FILE ATTRIBUTES-ALL BUF INTERACTIVE AND HALT I/O AND FILE MARKFILEATTƒEQU„$5F!STKSZE„EQU„256�SIZE�OF�STACK�AREAŠPAGE*Ç/*�VOLUME�DESCRIPTOR�TABLE�(VDT)�DATA�STRUCTUREŽ*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETVDTDCB„DS.Lƒ1’DCB�ADDRESS#VDTVID„DS.BƒVIDEOD�VID�DEFINED�DATA VDTSMA„DS.Lƒ1’SAT�MEMERY�ADDRESS+VDTSME„DS.Lƒ1’SAT�MEMORY�BLOCK�PHYSICAL�END'VDTSMD„DS.Lƒ1’SAT�MEMORY�BLOCK�DATA�END(VDTSMB„DS.Lƒ1’PSN�OF�SAT�BLO1 CK�IN�MEMORY,VDTDMA„DS.Lƒ1’PRIM�DIRECTORY�MEMTORY�ADDRESS)VDTDME„DS.Lƒ1’PRIM.�DIR.�MEMORY�BLOCK�END4VDTDMB„DS.Lƒ1’PSN�OF�PRIM.�DIRECTORY�BLOCK�IN�MEMORY&VDTSDA„DS.Lƒ1’SEC.�DIR.�MEMORY�ADDRESS(VDTSDE„DS.Lƒ1’SEC.�DIR.�MEMORY�BLOCK�END3VDTSDB„DS.Lƒ1’PSN�OF�SEC.�DIRECTORY�BLOCK�IN�MEMOYR'VDTTMA„DS.Lƒ1’START�OF�TEMPORARY�BUFFER%VDTTME„DS.Lƒ1’END�OF�TEMPORARY�BUFFER VDTWCT„DS.Wƒ1’VOLUME�WRITE�COUNTVDTRCT„DS.Wƒ1’VOLUME�READ�COUNTVDTFLG„DS.Wƒ1’FLAG&VDTIOS„DS.BƒIOSNLN�IOS�PARAMETER�BLOCK!VDTSSP„DS.Lƒ1’SAVED�STACK�POINTERŠDS.BƒSTKSZE�STACK�AREAVDTSTK„EQU„*-4�START�OF�STACKVDTLEN„EQU„*’LENGTH�OF�VDT*Ç * VDTFLG BITS*Ç-VDFLSB„EQU„0’BIT�0=1�->�SAT�IN�MEMORY�CHANGED2VDFLDB„EQU„1’BIT�1=1�->�PRIM.�DB�IN�MEMORY�CHANGED1VDFLCB„EQU„2’BIT�2=1�->�SEC.�DB�IN�MEMORY�CHANGED/VDFLBB„EQU„3’BIT�3=1�->�DEVICE�IS�BUSY�WITH�I/O,VDFLTB„EQU„4’BIT�4=1�->�TEMP.�BUFFER�ALTERED)VDFLNW„EQU„5’BIT�5=1�->�DISK�NOT�WRITABLEŠPAGE*Ç**�FILE�CONTROL�BLOCK�(FCB)�DATA�STRUCTURE“*Ç?3%7-M5  ŠOFFSET�0’START�WITH�ZERO�OFFSET"FCBVDT„DS.Lƒ1’ADDRESS�OF�VDT�ENTRY<* KEEIP FCBDCQ AND FCBFLG AT BEGINNING SINCE USED BY IOS FOR*…CONNECTION�WAIT³FCBDCQ„DS.Lƒ1’POINTER�TO�DCQFCBFLG„DS.Wƒ1’FLAG�WORD2FCBSDB„DS.BƒSDBFLN�USER�NO./CATALOG�FROM�SDB�ENTRY(FCBDIR„DS.BƒDIRLEN�DIRECTORY�ENTRY�IMAGE!FCBDBP„DS.Lƒ1’DIRECTORY�BLOCK�PSN$FCBDBO„DS.Wƒ1’DIRECTORY�BLOCK�OFFSET'FCBSDBPƒDS.Lƒ1’SECONDARY�DIR.�BLOCK�PSN)FCBSDBOƒDS.Wƒ1’SECONARY�DIR.�BLOCK�OFFSET4* MUST KEEP FCBWCT AND FCBRCT TOGETHER IN THAT ORDERFCBWCT„DS.Wƒ1’FILE�WRITE�COUNTFCBRCT„DS.Wƒ1’FILE�READ�COUNTFCBLEN„EQU„*’FCB�LENGTH*Ç * FCBFLG BITS*Ç?FCFLDB„EQU„0‡BIT�0=1�->�DIR.�INFO.�CHANGED�IN�FCB�(CALL�UPTDIR)CFCFLWB„EQU„1‡BIT�1=1�->�VOLUME�WRITE�OCCURRED�(CAN'T�DO�FETCH�DIR.)@FCFLCB„EQU„2‡BIT�2=1�->�DEVICE�STATUS�CHANGE-FILE�MUST�BE�CLOSED?FCFLUB„EQU„3‡BIT�3=1�->�UNRECOVERABLE�ERROR-FILE�MUST�BE�CLOSED-FCFLBB„EQU„4‡BIT�4=1�->�FILE�IS�BUSY�WITH�I/O3FCFLOB„EQU„5‡BIT�5=1�->�FILE�OVERWRITE�HAS�OCCURREDŠPAGE*Ç-*�FILE�ASSIGNMENT�TABLE�(FAT)�DATA�STRUCTURE�*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETFATFCB„DS.Lƒ1’FCB�POINTERFATTSK„DS.Lƒ1’CALLER�TASK�IDFATSES„DS.Lƒ1’CALLER�SESSIONFATLUE„DS.Lƒ1’LUN�ENTRY$FATLUT„DS.Lƒ1’START�OF�LUT�THIS�TASK+FATIOS„DS.BƒIOSBLN�COPY�OF�USER�I/O�REQUEST'FATUPB„DS.Lƒ1’USER�PARAMETER�BLOCK�ADDR+FATCLR„DS.Lƒ1’CURRENT�LOGICAL�RECORDS'S�LRNGFATCLS„DS.Lƒ1„CURRENT�LOGICAL�SECTOR�(1ST�SECTOR�OF�CURRENT�DATA�BLOCK)'FATBCT„DS.Lƒ1’NO.�OF�BLOCKS�TRANSFERRED:*ˆTHE�NEXT�5�FIELDS�MUST�BE�IN�THE�GIVEN�ORDER,�ELSE�CODEˆ*ˆHAS�TO�BE�CHANGED®/FATFAA„DS.Lƒ1’FAB�MEMORY�BLOCK�STARTING�ADDRESS"FATFAE„DS.Lƒ1’FAB�MEMORY�BLOCK�END"FATFAB„DS.Lƒ1’PSN�OF�FAB�IN�MEMORYEFATCFP„DS.Lƒ1†CURRENT�FAB�ENTRY�POINTER�(->�CURRENT�DATA�BLOCK�INFO.)3FATKEY„DS.Lƒ1’POINTER�TO�LAST�FAB�ENTRY'S�KEY�FIELD6*ˆTHE�NEXT�6�FIELDS�MUST�BE�IN�GIVEN�ORDER,�ELSE�CODEŒ*ˆHAS�TO�BE�CHANGED®$FATFLS„DS.Lƒ1’1ST�LSN�OF�CURRENT�FAB7FATFLR„DS.Lƒ1’1ST�LOGICAL�RECORD�NUMBER�FOR�CURRENT�FAB-FATSLS„DS.Lƒ1’STARTING�LSN�OF�CURRENT�SEGMENT8FATSLR„DS.Lƒ1’STARTING�LOGICAL�RECORD�OF�CURRENT�SEGMENT%FATLLS„DS.Lƒ1’LAST�LSN�OF�CURRENT�FAB%FATLLR„DS.Lƒ1’LAST�LRN�OF�CURRENT�FAB*Ç%FATBSN„DS.Lƒ1’SEGMENT�NAME�FOR�BUFFER2FATSLA„DS.Lƒ1’USER'S�BUFFER�STARTING�LOGICAL�ADDR.>*ˆTHE�NEXT�3�FIELDS�MUST�BE�IN�THE�GIVEN�ORDER,�ELSE�CODE�HAS„*ˆHAS�TO�BE�CHANGED®*FATSBS„DS.Lƒ1’SECTOR�BUFFER�STARTING�ADDR.'FATSBL„DS.Lƒ1’SECTOR�BUFFER�LOGICAL�END'FATSBE„DS.Lƒ1’SECTOR�BUFFER�ENDING�ADDR*Ç'FATDBP„DS.Lƒ1’FETCH�NEXT�DIR.�BLOCK�PSN*FATDBO„DS.Wƒ1’FETCH�NEXT�DIR.�BLOCK�OFFSET,FATSDBPƒDS.Lƒ1’FETCH�NEXT�DIR.�ENTRY�SDB�PSN/FATSDBOƒDS.Wƒ1’FETCH�NEXT�DIR.�ENTRY�SDB�OFFSET5FATASN„DS.Wƒ1’ASSGN.�OPTION�(OVERWRITE/SHARED�BUFFER)FATFLG„DS.Wƒ1’FLAG�WORDFA1 TLEN„EQU„*’FAT�LENGTH*Ç * FATFLG BITS*Ç1FAFLSB„EQU„0‡BIT�0=1�->�FMS�SECTOR�BUFFER�CREATED'FAFLSBVƒEQU„1’VALUE�ASSOCIATED�WITH�BIT2FAFLBB„EQU„1‡BIT�1=1�->�1ST�I/O�WAS�BLOCK�TRANSFER FAFLBBVƒEQU„23FAFLRB„EQU„2‡BIT�2=1�->�1ST�I/O�WAS�RECORD�TRANSFER FAFLRBVƒEQU„4=FAFLFB„EQU„3‡BIT�3=1�->�FAB�IN�MEMORY�CHANGED�-‚TO�BE�UPDATED FAFLFBVƒEQU„84FAFLDB„EQU„4‡BIT�4=1�->�DATA�BLOCK�IN�MEMORY�CHANGEDFAFLDBVƒEQU„$10CFAFLUB„EQU„5‡BIT�5=0/1�->�DON'T�UPDATE/UPDATE�FAB�ENTRY�ON�WRITE�DBFAFLUBVƒEQU„$20AFAFLCB„EQU„6‡BIT�6=0/1�->�DON'T�CHECK/CHECK�FAB�ENTRY�ON�WRITE�DBFAFLCBVƒEQU„$40,FAFLKB„EQU„7‡BIT�7=1�->�LAST�FAB�KEY�CHANGEDFAFLKBVƒEQU„$80/FAFLLB„EQU„8‡BIT�8=1�->�LAST�I/O�WAS�FOR�DELETEFAFLLBVƒEQU„$100HFAFLIB„EQU„9‚BIT�9=1�->�INPUT�FAB�DURING�GETFDB,�TRY�TO�MERGE�W/NEXT�FABFAFLIBVƒEQU„$2004FAFLMB„EQU„10†BIT�10=1�->�NEXT�FAB�TOO�BIG�FOR�MERGEFAFLMBVƒEQU„$400'*�DATA�BLOCK�AND�FAB�MERGE�PARAMETERS:¢.DATFRC„EQU„3†CURRENT�DB�.LE.�1/3�FULL�TO�MERGE>DATFRN„EQU„2†NEXT�DATA�BLOCK�1/2�FULL�FOR�MERGE,�IF�MORE�DON'TDFABFRC„EQU„3†CURRENT�FAB�FRACTION�IN�USE�-1/3�=>�MERGE,�MORE�=�DON'T>FABFRN„EQU„8†NEXT�FAB�8/16TH�FULL�OR�LESS�=>�MERGE,�ELSE�DON'TŠPAGE*Ç* PDB PSN LIST BLOCK EQUATES*Ç ŠOFFSET�08PDLFPT„DS.Lƒ1’POINTER�TO�NEXT�PDB�PSN�BLOCK�(=0�IF�NONE)!PDLSTR„EQU„*’PSN�FOR�A�DIR.�BLOCK0PDLSZE„EQU„1’SIZE�OF�PDB�LIST�BLOCK�(IN�SECTORS)!PDLLEN„EQU„4’LENGTH�OF�EACH�ENTRY;PDLENT„EQU„(PDLSZE*SECSZE-PDLSTR)/PDLLEN�NO.�OF�PSN'S/BLOCKŠPAGE*Ç*Ç6* FILE ALLOCATION/DEALLOCATION (FBALLC/FBDEAL) EQUATES*Ç*Ç*‚GETFDB�DIRECTIVES�IN�D1.L:«(*‚(�USED�TO�GET�OFFSET�INTO�JUMP�TABLE) *Ç*…DIRECTIVE�IN�BITS�0-5­-LSNFDB„EQU„0’FAB�CORRESPONDING�TO�LSN�IN�D0.L-LRNFDB„EQU„1’FAB�CORRESPONDING�TO�LRN�IN�D0.LFKEYFDB„EQU„2„FAB�CORRESPONDING�TO�KEY�POINTED�TO�BY�D0.L�(BCT�IN�D2.B)PGTFDB„EQU„3’PARTIAL�KEY�(>)PGETDB„EQU„4’PARTIAL�KEY�(>=)PLTFDB„EQU„5’PARTIAL�KEY�(<)6*…BIT�7�USED�TO�INDICATE�IF�DATA�BLOCK�SHOULD�BE�READ�(RDBFLGBƒEQU„7’BIT�7=1�->�READ�DATA�BLOCKRDBFLG„EQU„$80%*…BIT�6�USED�TO�INHIBIT�LSN/EOF�TEST :EOFFLGBƒEQU„6‘BIT�6=1�->�DON'T�COMPARE�GIVEN�LSN�TO�DIREOFEOFFLG„EQU„$40ŠPAGE*Ç* DEFAULT VOLUME EQUATES*Ç ŠOFFSET�0DEFVOL„DS.Lƒ1’DEFAULT�VOLUME$DEFTYP„DS.Lƒ1’TYPE�OF�DEFAULT�VOLUME DVLEN…EQU„*’LENGTH�OF�EACH�ENTRY*Ç* VALUES FOR DEFAULT TYPE*ÇSYSDEF„EQU„'SYST'�SYSTEM�VOLUMETMPDEF„EQU„'TEMP'�TEMP.�VOLUME!SPLDEF„EQU„'SPOL'�SPOOLER�VOLUME'ŠPAGE*Ç7* MACRO TO SET IOS PARAMETER BLOCK FUNCTION AND OPTIONS*…PARAMETERS:·*…1�-�FUNCTION¶*…2�-�OPTIONS·-*…3�-�EFFECTIVE�ADDR.�OF�IOS�PARAMETER�BLOCK˜ SETFO…MACRO!ŠMOVE.L�#(\1*$10000)+\2,IOSFCT+\3ŠENDM;* SETRFO SAME AS SETFO EXCEPT FIRST PARAMETER IN A REGISTER SETRFO„MACROŠSWAPƒ\1‘FUNCTION�HIGH�WORDŠMOVE.W�#\2,\1�OPTIONSŠMOVE.L�\1,IOSFCT+\3‡SET�BOTHŠENDM*ÇB* SETSBA SETS RANDOM SECTOR NUMBER AND BUFFER ADDRESS IN IOS BLOCK SETSBA„MACRO7ŠMOVEM.L�\1/\2/\3,IOSRRN+\4�IOSRRN,�IOSSAD,IOSEAD�SETUPŠENDM*Ç9* THE FOLLOWING MACROS ARE USED TO SET OR GET VALUES FROM,* FIELDS IN FAT WHICH MUST BE IN GIVEN ORDER GET2†MACROŠMOVEM.L�\1,\2/\3ŠENDM GET3†MACROŠMOVEM.L�\1,\2/\3/\4ŠENDM GET4†MACROŠMOVEM.L�\1,\2/\3/\4/\5ŠENDM SAVE2…MACROŠMOVEM.L�\1/\2,\3ŠENDM SAVE4…MACROŠMOVEM.L�\1/\2/\3/\4,\5ŠENDM* DCNT MACRO NEED FOR MASK3 DCNT†MACRO ŠSUB.W‚#1,\1 ŠBNE.S‚\2ŠENDM*********************** Ending of &.FMI.EQ ***********************éé2 ééééé‰PAGE************************** Beginning of &.GST.EQ ****************************‰GLOBAL�SEGMENT�TABLE*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLEGST‡DS.Lƒ1’!GST„DEBUG�TOOL)GSTNEXTƒDS.Lƒ1’LINK�TO�NEXT�TABLE�SEGMENT*GSTNSEGƒDS.Wƒ1’NUMBER�OF�SEGMENTS�IN�TABLE$GSTNPAGE‚DS.Wƒ1’SIZE�OF�GST�IN�PAGES(GSTMENTƒDS.Wƒ1’MAXIMUM�NUMBER�OF�ENTRIES(GSTLENTƒDS.Wƒ1’NUMBER�OF�LAST�ENTRY�USED%GSTFENTƒDS.Lƒ1’ADDRESS�OF�FIRST�ENTRY$GSTENTRY‚EQU„*’OFFSET�TO�FIRST�ENTRY**ˆGST�ENTRY�DEFINITION*&ŠOFFSET�0’OFFSET�IS�FROM�ENTRY�POINTER$GSTSESSN‚DS.Lƒ1’ORIGINATOR'S�SESSIONGSTNAMEƒDS.Lƒ1’SEGMENT�NAME)GSTATTRƒDS.Wƒ1’ATTRIBUTES�GIVEN�TO�SHARER*GSTCNT„DS.Wƒ1’USE�COUNT�(0�=�ENTRY�UNUSED)%GSTPA…DS.Lƒ1’SEGMENT�PHYSICAL�ADDRESS"GSTNP…DS.Wƒ1’SEGMENT�SIZE�IN�PAGESGSTEL…EQU„*’ENTRY�LENGTH*********************** Ending of &.GST.EQ ***********************éééé=‰PAGE******************************* Beginning of &.INTERRUP.MC *******************************O********************************************************************************Í*@*‰Macros�useful�in�dealing�with�interrupts�in�supervisor�mode.ˆ**Í*O******************************************************************************* *;*‚DISABLE_INTERRUPTS�masks�interrupts�to�level�7�in�the�SR.*DISABLE_INTERRUPTS MACRO ŠOR…#$0700,SRŠENDM *J*‚ENABLE_INTERRUPTS�lowers�the�i2 nterrupt�mask�in�the�SR�to�0,�enabling�allJ*‚interrupts.‚This�should�only�be�done�by�code�which�is�not�being�executed*‚in�response�to�an�interrupt.*ENABLE_INTERRUPTS MACROŠAND„#$FFFF-$0700,SRŠENDM**************************** Ending of &.INTERRUP.MC ****************************ééééF‰PAGE************************** Beginning of &.IOE.EQ ************************** ŠLLENƒ120**”**************¥*”*‚10/08/84‚**”**************¥*ÇO*------------------------------------------------------------------------------**=*ˆERROR�MESSAGE�HANDLER�EQUATES�FOR�NON-TRAP�RELATED�MESSAGES**’AS�OF�8/30/84**EM_NVE„EQU„$100�INVALID�ENTRY4EM_SCBOƒEQU„$101�SUBSTITUTION�CAUSED�BUFFER�OVERFLOW#EM_NOARG‚EQU„$102�NO�ARGUMENT�FOUNDEM_NVO„EQU„$103�INVALID�OPTION%EM_NOMEM‚EQU„$104�INSUFFICIENT�MEMORY!EM_OPTCF‚EQU„$105�OPTION�CONFLICT*EM_CLSEƒEQU„$106�COMMAND�LINE�SYNTAX�ERROR1EM_NVDEV‚EQU„$107�INVALID�DEVICE�NAME�FOR�REQUEST**O* -----------------------------------------------------------------------------&*ˆDATA�STRUCTURES�AND�EQUATES�FOR�I/Oœ*Ç*Ç%*�FHS�PARAMETER�BLOCK�DATA�STRUCTURE˜*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETFHSCMD„DS.Wƒ1’COMMANDFHSOPT„DS.Wƒ1’OPTIONSFHSSTA„DS.Bƒ1’STATUS!FHSLUN„DS.Bƒ1’LOGICAL�UNIT�NUMBERFHSVOL„DS.Lƒ1’VOLUME�NAME-FHSDLN„EQU„*’LENGTH�FOR�ASSIGN�DEFAULT�VOLUMEFHSUSN„DS.Wƒ1’USER�NUMBERFHSCLG„DS.Lƒ2’CATALOG�NAMEFHSFIL„DS.Lƒ2’FILE�NAMEFHSEXT„DS.Wƒ1’EXTENSIONFHSGEN„DS.Wƒ1’RESERVED FHSWCD„DS.Bƒ1’WRITE�PROTECT�CODEFHSRCD„DS.Bƒ1’READ�PROTECT�CODE#FHSLRL„DS.Wƒ1’LOGICAL�RECORD�LENGTH7FHSSIZ„DS.Lƒ1’CONTIGUOUS�FILE�SIZE�/�DIR.�ENTRY�POINTER0ŠOFFSET�FHSSIZ�REDEFINED�FOR�NONCONTIGUOUS�FILESFHSRES„DS.Bƒ1’UNUSED'FHSKEY„DS.Bƒ1’KEY�LENGTH�(0�IF�NO�KEYS)FHSFAB„DS.Bƒ1’FAB�SIZEFHSDAT„DS.Bƒ1’DATA�BLOCK�SIZE"FHSBLN„EQU„*’LENGTH�OF�PARAM�BLOCK+*REDEFINED�FHS�BLOCK�FOR�CHANGE�LU�REQUESTžŠOFFSET�FHSLUNFHSLUA„DS.Bƒ1’CHANGE�LU�AFHSLUB„DS.Bƒ1’CHANGE�LU�BŠDS.Bƒ1’RESERVEDFHSTSK„DS.Lƒ1’CHANGE�LU�TASK�ID$FHSSES„DS.Lƒ1’CHANGE�LU�TASK�SESSION4FHSCLN„EQU„*’LENGTH�OF�PARAMETER�BLOCK�FOR�CHANGE�LU0*REDEFINED�FHS�BLOCK�FOR�FETCH�DEVICE�MNEMONICS™ŠOFFSET�FHSVOL'FHSPTR„DS.Lƒ1’POINTER�TO�RETURNED�INFO.,FHSLEN„DS.Lƒ1’LENGTH�OF�RETURNED�INFO.�BLOCK.FHSFLN„EQU„*’LENGTH�FOR�FETCH�DEVICE�MNEMONICS OEXC`ChCp?x7€#ˆ�8˜P 8¨.°@¸3À?È{Ð3 6*ADDITIONAL�FHS�PARAMETERS�FOR�SHARED�SEGMENT�REQUEST“ŠOFFSET�FHSBLN.FHSSAD„DS.Lƒ1’SEGMENT�STARTING�LOGICAL�ADDRESS*FHSEAD„DS.Lƒ1’SEGMENT�ENDING�LOGICAL�ADDR.FHSSNM„DS.Lƒ1’SEGMENT�NAME=FHSNLN„EQU„*�LENGTH�OF�PARM.�BLOCK�FOR�SHARED�SEGMENT�REQUEST*Ç*�FHSCMD�EQUATES�(16�BITS)¢*Ç'FHALLO„EQU„$80�ALLOCATE�(CREATE�A�FILE)FHASGN„EQU„$40�ASSIGN�(OPEN)'FHCHNG„EQU„$20�CHANGE�ACCESS�PERMISSIONFHRENM„EQU„$10�RENAMEFHPROT„EQU„$8‘PROTECTFHCLOS„EQU„$4‘CLOSEFHDELT„EQU„$2‘DELETEFHCKPT„EQU„$1‘CHECKPOINT#FHRATT„EQU„$180�RETRIEVE�ATTRIBUTES%FHFDEN„EQU„$140�FETCH�DIRECTORY�ENTRY&FHFDMN„EQU„$120�FETCH�DEVICE�MNEMONICS$FHCHLU„EQU„$110�CHANGE�LU�ASSIGNMENT#FHFDV…EQU„$108�FETCH�DEFAULT�VOLUMESPLCANCƒEQU„$280�CANCEL�SPOOLERSPLCONTƒEQU„$240�CONTINUESPLFORMƒEQU„$220�FORMSSPLPRNTƒEQU„$210�PRINTSPLCOPYƒEQU„$208�COPIESSPLQUE„EQU„$204�DISPLAY�QUEUE#FHDVOL„EQU„$8001ŽSET�DEFAULT�VOLUME*Ç*ˆEQUATES�FOR�LU�ASSIGNMENTS¥*Ç!CDFLUN„EQU„5’CMD�DEVICE/FILE�LUN�!LDFLUN„EQU„6’LOG�DEVICE/FIEL�LUN�*Ç*�FHSOPT�EQUATES�(16�BITS)¢$*ACCESS�PERMISSION�FIELD�(BITS�0-2)¥*Ç)FAPBIT„EQU„$7‘BITS�FOR�ACCESS�PERM.�FIELDFOPPR…EQU„0’PUBLIC�READFOPER…EQU„1’EXCLUSIVE�READFOPPW…EQU„2’PUBLIC�WRITEFOPEW…EQU„3’EXCLUSIVE�WRITEFOPPRPWƒEQU„4’PUBLIC�READ-WRITE*FOPPREWƒEQU„5’PUBLIC�READ,�EXCLUSIVE�WRITE*FOPERPWƒEQU„6’EXCLUSIVE�READ,�PUBLIC�WRITE"FOPEREWƒEQU„7’EXCLUSIVE�READ-WRITE*Ç*OVERWRITE�FIELD�(BIT�3)°FOPOVRTƒEQU„8’OVERWRITE�FILE*Ç*TRUNCATE�FIELD�(BIT�4)±*FOPTRN„EQU„$10�TRUNCATE�FILE�AT�CLOSE�TIME*Ç%*�ALLOCATE�DATA�BUFFER�FIELD�(BIT�5)¤*FOPABF„EQU„$20�ALLOCATE�SHARED�DATA�BUFFER*Ç*POSITION�FIELD�(BIT�6)±*FOPBEG„EQU„0’POSITION�AT�BEGINNING�OF�FILE&FOPEND„EQU„$40�POSITION�AT�END�OF�FILE"*RESERVED�FIELD�(BITS�7�NOT�USED)§*Ç*FILE�TYPE�FIELD�(BITS�8-10)¬"FFTBIT„EQU„$700�BITS�FOR�FILE�TYPEFOPCON„EQU„0’CONTIGUOUS$FOPSEQ„EQU„$100�SEQUENTIAL�(FRL/VRL)CFOPISK„EQU„$200‡KEYED�RECORD,�INDEXED�SEQUENTIAL,�NO�DUPLICATE�KEYS,FOPISD„EQU„$300�",�",�DUPLICATE�KEYS�ALLOWED*;FOPADR„EQU„$800�RETURN�PHY.�ADR�FOR�SHARED�DATA�BUFFER�REQ.*Ç$*USER�ATTRIBUTES�FIELD�(BITS�15-12)¥)FUSBIT„EQU„$F000ŽBITS�FOR�USER�ATTRIBUTES*Ç*�CHANGE�LU�OPTIONSµFOPSLU„EQU„0’SEND�LUFOPRLU„EQU„1’RECEIVE�LU FOPKEP„EQU„$8000ŽKEEP�ASSIGNMENT*Ç%*SET AND FETCH DEFAULT VOLUME OPTIONS"FOPDSY„EQU„0’SYSTEM�VOLUME�DEFAULTFOPDTM„EQU„1’TEMPORARYFOPDSP„EQU„2’SPOOLERFOPDUS„EQU„3’USER*Ç*FETCH DEVICE MNEMONICS OPTIONS'FOPFRA„EQU„4’FETCH�RANDOM�ACCES�DEVICES%FOPFIN„EQU„5’FETCH�INTERATCIE�DEVICES"FOPFPR„EQU„6’FETCH�PRINTER�DEVICES*Ç*�FHSSTA�EQUATES�(8�BITS)£*ÇFSTAOK„EQU„$0‘NO�ERROR*Ç#*ERROR�CODE�1�IS�RESERVED�FOR�EXEC¦*(SERVER�DOES�NOT�EXIST)°*Ç2FSTAOSNX‚EQU„$1‘OPERATING�SYSTEM�TASK�NON-EXISTENTFSTAIF„EQU„$2‘INVALID�COMMAND#FSTAILUƒEQU„$3‘INVALID�LOGICAL�UNITFSTAVOLƒEQU„$4‘VOLUME�ERROR"FSTADNMƒEQU„$5‘DUPLICATE�FILE�NAME#FSTAFD„EQU„$6‘FILE�DESCRIPTOR�ERROR FSTAPC„EQU„$7‘PROTECT�CODE�ERROR!FSTARL„EQU„$8‘RECORD�LENGTH�ERROR"FSTASE„EQU„$9‘SHARED�SEGMENT�ERROR*FSTADS„EQU„$A‘INSUFFICIENT�DIRECTORY�SPACE%FSTAAP„EQU„$B‘ACCESS�PERMISSION�ERROR'FSTASS„EQU„$C‘INSUFFICIENT�SYSTEM�SPACE FSTAAS„EQU„$D‘INVALID�ASSIGNMENT!FSTADT„EQU„$E‘INVALID�DEVICE�TYPEFSTABO„EQU„$F‘BUFFER�OVERFLOW FSTATN„EQU„$10�INVALID�TASK�NAME&FSTAADDƒEQU„$11�INVALID�BUFFER�ADDRESS FSTAFT„EQU„$12�INVALID�FILE�TYPE!FSTAIE„EQU„$13�INTERNAL�FHS�ERROR*FSTAIP„EQU„$14�INVALID�PARAM�BLOCK�ADDRESS&FSTADL„EQU„$15�DATA�BLOCK�LENGTH�ERRORFSTASZ„EQU„$16�SIZE�ERROR&FSTANNMƒEQU„$17�NON-EXISTENT�FILE�NAME FSTAEODƒEQU„$18�END�OF�DIRECTORYFSTAKY„EQU„$19�KEY�LENGTH�ERRORFSTAFL„EQU„$1A�FAB�LENGTH�ERROR*FSTANDVƒEQU„$1B�DEFAULT�VOLUME�NOT�DEFINED2FSTAWS„EQU„$1C�WRONG�STATE�FOR�SPOOL�START�COMMAND6FSTAIU„EQU„$1D�SPOOL�COMMANDS-INVALID�USER�#�SPECIFIED*Ç&*FETCH�DIRECTORY�ENTRY�RETURNED�INFO.£*Ç!†OFFSET�0�START�WITH�ZERO�OFFSETªFDUSN…DS.Wƒ1’USER�NUMBERFDCLG…DS.Lƒ2’CATALOGFDFIL…DS.Lƒ2’FILE�NAMEFDEXT…DS.Wƒ1’EXTENSION3 ŠDS.Wƒ1’RESERVEDFDFS†DS.Lƒ1’FILE�STARTING�PSNFDFE†DS.Lƒ1’FILE�ENDING�PSN.FDEOF…DS.Lƒ1’END�OF�FILE�LOGICAL�SECTOR�NUMBER.FDEOR…DS.Lƒ1’END�OF�FILE�LOGICAL�RECORD�NUMBERFDWCD…DS.Bƒ1’WRITE�ACCESS�CODEFDRCD…DS.Bƒ1’READ�ACCESSS�CODEFDATT…DS.Bƒ1’ATTRIBUTES>FDLBZ…DS.Bƒ1ŒLAST�DATA�BLOCK�SIZE�(FILE�TRUNCATED�IF�<>�FDDAT)6FDLRL…DS.Wƒ1’RECORD�SIZE�(0�=>�VARIABLE�RECORD�LENGTH)ŠDS.Bƒ1’RESERVED$FDKEY…DS.Bƒ1’KEY�SIZE�(0�=>�NO�KEYS)FDFAB…DS.Bƒ1’FAB�SIZEFDDAT…DS.Bƒ1’DATA�BLOCK�SIZEFDDTEC„DS.Wƒ1’DATE�FILE�CREATED%FDDTEA„DS.Wƒ1’DATE�FILE�LAST�ASSIGNEDŠDS.Bƒ8’RESERVED#FDLEN…EQU„*’FETCH�DIR.�ENTRY�LENGTH*Ç'*FETCH�DEVICE�MNEMONICS�RETURNED�INFO.¢*Ç ŠOFFSET�0FDVDEV„DS.Lƒ1’DEVICE�MNEMONICFDVVOL„DS.Lƒ1’VOLUME�IDFDVVAL„DS.Bƒ1’RESERVEDFDVSTS„DS.Bƒ1’DEVICE�STATUS)FDVLEN„EQU„*’FETCH�DEVICE�MNEOMICS�LENGTHŠPAGE*Ç *�IOS�PARAMETER�BLOCK�STRUCTURE�*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSETIOSFCT„DS.Wƒ1’FUNCTIONIOSOPT„DS.Wƒ1’OPTIONSIOSSTA„DS.Bƒ1’STATUS!IOSLUN„DS.Bƒ1’LOGICAL�UNIT�NUMBER0IOSSRV„EQU„*’SERVICE�ADDRESS�FOR�ATTENTION�EVENTŠDS.Bƒ1’RESERVED-IOSPKL„DS.Bƒ1’RESERVED�FOR�PARTIAL�KEY�LENGTH.IOSRRN„DS.Lƒ1’RANDOM�RECORD�NUMBER:�LRN�OR�LSN"IOSSAD„DS.Lƒ1’START�BUFFER�ADDRESS3IOSALT„EQU„IOSSAD�To�implement�the�alternate�sector#*£handling�on�both�the�VM22�and�the'*£RWIN1�controllers,�we�need�a�place�to&*£put�the�logical�sector�number�of�the*£alternate�sector. IOSEAD„DS.Lƒ1’END�BUFFER�ADDRESS IOSLEN„DS.Lƒ1’LENGTH�OF�TRANSFER IOSCAD„DS.Lƒ1’COMPLETION�ADDRESS"IOSBLN„EQU„*’LENGTH�OF�PARAM�BLOCK** IOS PARAMETER BLOCK STRUCTURE$*ˆFOR�CONFIGURE�AND�STATUS�COMMANDS.*ŠOFFSET�IOSRRN IOSDBP„DS.Lƒ1’DATA�BLOCK�POINTERIOSCSL„EQU„*’LENGTH�OF�PB *A*‚IOS�Configuration�Block�structure�for�CONFIGURE,�CHANGE�DEFAULT+*‚CONFIGURATION,�&�REQUEST�STATUS�commands.*‚Device-independent�portion:* ŠOFFSET�0IOSDST„DS.Bƒ1’DEVICE�STATUS?IOSCEC„EQU„IOSDST‹CONFIGURATION�ERROR�CODE�(returned�in�lieu�of(*§device�status�if�ISTACNF�error�status)IOSCTP„DS.Bƒ1’CHANNEL�TYPEIOSDTP„DS.Bƒ1’DEVICE�TYPEIOSDRC„DS.Bƒ1’DRIVER�CODEIOSATM„DS.Wƒ1’ATTRIBUTES�MASKIOSPRM„DS.Wƒ1’PARAMETERS�MASKIOSATW„DS.Wƒ1’ATTRIBUTES�WORDIOSREC„DS.Wƒ1’RECORD�LENGTHIOSRSZ„DS.Lƒ1’DEVICE�SIZEIOSWTO„DS.Lƒ1’WRITE�TIMEOUTIOSRTO„DS.Lƒ1’READ�TIMEOUT+IOSDDC„EQU„*’DEVICE�DEPENDENT�CONFIGURATION *F*‚Bit�equates�for�IOSPRM�for�device-independent�part�of�configuration.*/IOSRECBƒEQU„0’Parameter�#�for�IOSREC�parameter.IOSRSZBƒEQU„1’etc. IOSWTOBƒEQU„2 IOSRTOBƒEQU„3 *@*‚Device-dependent�portion�of�configuration�block�for�terminals:*ŠOFFSET�IOSDDCIOSXOF„DS.Bƒ1’X-OFF�CHARACTERIOSXON„DS.Bƒ1’X-ON‚CHARACTER(IOSBRC„DS.Bƒ1’BREAK�EQUIVALENT�CHARACTER&IOSDOP„DS.Bƒ1’DISCARD�OUTPUT�CHARACTER$IOSRLN„DS.Bƒ1’REPRINT�LINE�CHARACTER#IOSCLC„DS.Bƒ1’CANCEL�LINE�CHARACTERIOSRTV„DS.Lƒ1’READ�TERMINATORS IOSEOL„DS.Lƒ1’END�OF�LINE�STRINGIOSBRT„DS.Bƒ1’BAUD�RATE�CODE IOSNLS„DS.Bƒ1’NULL�PADDING�COUNTIOSTRC„DS.Bƒ1’TERMINATOR�CLASS/IOSTCD„DS.Bƒ1’TERMINAL�CODE�(SEE�EQUATES�BELOW):IOSTTM„DS.Bƒ10�DO�NOT�USE!‚RESERVED�FOR�INTERNAL�USE�ONLY!ŠDS.Bƒ6’RESERVED6IOSTLN„EQU„*’LENGTH�OF�DATA�BLOCK�FOR�TERMINAL�DEVICES *6*ˆCONFIGURATION�PARAMETERS�SPECIFIC�TO�PRINTER�DEVICES*ŠOFFSET�IOSDDCAIOSLRL„DS.Wƒ1ŠLOGICAL�RECORD�LENGTH�<=�IOSREC(PHYSICAL�REC.�LEN.)7IOSELC„DS.Bƒ1’END�OF�LINE�CHARACTER�(WITH�AUTO�LF�ONLY)IOSPRSVƒDS.Bƒ15‘RESERVED5IOSPLN„EQU„*’LENGTH�OF�DATA�BLOCK�FOR�PRINTER�DEVICES*N*‚Bit�equates�for�IOSDST�(device�status);�also�for�XRPDST�in�channel�commands.J*‚Note:‚the�various�bits�are�meaningful�only�with�certain�drivers/devices.*3XDSBRK„EQU„0’BREAK�CONDITION�(only�used�internally)0XDSDCD„EQU„1’State�of�DCD�line�at�the�connector.0XDSABR„EQU„2’1�=�Doing�auto�baud�rate�detection. XDSWPB„EQU„5’WRITE-PROTECTED�BIT!XDSNRB„EQU„7’DEVICE�NOT�READY�BIT*+*ˆEquates�for�IOSDST�specific�to�mag�tapes./*ˆBits�2,1,0�of�IOSDST�return�the�tape�density.*XDSBLANK‚EQU„7’Blank�tapeXDSD800ƒEQU„1’800�bpi4 XDSD1600‚EQU„0’1600�bpi*2XDSCGB„EQU„4’1�=�Transport�density�software�select&*’.“0�=�Transport�density�panel�select*0*‚Equates�for�IOSCEC�(configuration�error�code).&*‚$01-$3F‚errors�common�to�all�drivers0*‚$40-$7F‚errors�specific�to�a�particular�driver*‚$80-$FF‚reserved*CECTIM„EQU„$41ŒModem�operation�and�some�incompatible�parameter*Ÿor�attribute�were�specified.>CECTBR„EQU„$42ŒThe�device�cannot�be�software-configured�to�the*Ÿspecified�baud�rate.* *ÆIEEE4886*…(IOSCEC�equates�specific�to�IEEE488�devices)•IEEE488 *ÆIEEE488>CECBPO„EQU„$40ŠTrying�to�configure�a�parameter�that�isƒIEEE488!*œonly�valid�for�the�BUS.“IEEE4889CECSCE„EQU„$41ŠTrying�to�configure�BUS�for�systemˆIEEE488+*œcontroller�capability�and�hardwar‰IEEE488*œswitch�is�not�set.˜IEEE488.CECIPA„EQU„$42ŠInvalid�primary�address“IEEE488=CECVARLƒEQU„$43ŠVariable�configuration�area�parameter…IEEE488*œerror.¤IEEE4888CECSADRƒEQU„$44ŠInvalid�sec.�addr.�configurationŠIEEE488*.*…(IOSCEC�equates�specific�to�printer�devices)*3CECPNI„EQU„$40�NULL�is�invalid�for�an�EOL�character=CECPRLZƒEQU„$41ŽLogical�and/or�physical�record�length�is�zero>CECPLGPƒEQU„$42�Logical�record�length�>�physical�record�length*/*…(IOSCEC�equates�specific�to�mag�tape�devices)*8CECREQ„EQU„$40�The�tape�drive�is�not�configured�for�user* density�requests.*)CECDEN„EQU„$41�Unknown�density�requested.**I*‚Equates�for�IOSCTP�(channel�type);�also�for�XIOCTP�in�channel�commands.*XTACIA„EQU„1’ACIA�DEVICEXTPIAA„EQU„2’PIA�A-SIDE�DEVICEXTPIAB„EQU„3’PIA�B-SIDE�DEVICEXTCRTC„EQU„4’CRTC�DEVICEXTSSDA„EQU„5’SSDA�DEVICEXTADLC„EQU„6’ADLC�DEVICEXTDIPC„EQU„$10�DISK�IPCXTMIPC„EQU„$11�MCCM�IPC#XTVM22„EQU„$12�VM22�DISK�CONTROLLER"XTDSAS„EQU„$20�SASI�ON�I/O�CHANNEL(XTDWIN„EQU„$21�WINCHESTER�ON�I/O�CHANNEL$XTDFLP„EQU„$22�FLOPPY�ON�I/O�CHANNEL%XTD315„EQU„$23�VME315�DISK�CONTROLLER)XTM435„EQU„$24�MVME435�(MAG�TAPE�ADAPTER)%XTD320„EQU„$25�VME320�disk�controllerXTVM31„EQU„$81�VM31�CHANNEL**ˆPRINTER�PORTS:�$50-$5F*XTPEXM„EQU„$50�PIA�EXORMACSXTPVM1„EQU„$51�VM01�PARALLELXTPRTL„EQU„$52�RTTLIO�PARALLEL(XTPV050ƒEQU„$53�Parallel�port�on�MVME050(XTPV115ƒEQU„$54�Parallel�port�on�MVME115(XTPV117ƒEQU„$55�Parallel�port�on�MVME117ééé4 **ˆSERIAL�PORTS:�$60-$7F*"XTS7A2„EQU„$60�7201�A-side�on�VM02"XTS7B2„EQU„$61�7201�B-side�on�VM02"XTS7A8„EQU„$62�7201�A-side�on�VM80"XTS7B8„EQU„$63�7201�B-side�on�VM80"XTS7AR„EQU„$64�7201�A-side�on�RSIO"XTS7BR„EQU„$65�7201�B-side�on�RSIO+XTACD1„EQU„$66�ACIA�Debug�port�1�(EXORmacs)+XTACD2„EQU„$67�ACIA�Debug�port�2�(EXORmacs)XTS110„EQU„$68�ACIA�VME110*�$69�Do�not�use'XTDRTA„EQU„$6A�SCN2681�on�VME115�A-side'XTDRTB„EQU„$6B�SCN2681�on�VME115�B-side XTMFP0„EQU„$6C�MK68901�on�VME120*�$6D�Do�not�use!XTEPCI„EQU„$6E�EPCI�(2661)�device(XTSEXS„EQU„$6F�Keyboard/screen�on�VMES10 XTMFP8„EQU„$70�MK68901�on�VME128*�$71�Do�not�use.XTMPC1„EQU„$72�Rockwell�68560�port�1�on�VME050.XTMPC2„EQU„$73�Rockwell�68560�port�2�on�VME050"XTS7A3„EQU„$74�7201�A-side�on�VM03"XTS7B3„EQU„$75�7201�B-side�on�VM03*XTSIO0„EQU„$76�Mostek�68564�port�0�on�VM04*XTSIO1„EQU„$77�Mostek�68564�port�1�on�VM04+XTZIO0„EQU„$78�Zilog�Z8530�port�0�on�VME117+XTZIO1„EQU„$79�Zilog�Z8530�port�1�on�VME117 *ééééH*‚Equates�for�IOSDTP�(device�type);�also�for�XRPDTP�in�channel�commands.*XDSFDK„EQU„1’FLOPPY�DISKXDSRDK„EQU„2’RIGID�DISKXDSACIAƒEQU„3’TERMINALXDSPRT„EQU„4’PRINTERXDSTAPEƒEQU„5’MAGNETIC�TAPE**#XTGBUS„EQU„$4A�IEEE�488�BUS”IEEE488*$XDSGBUSƒEQU„$4A�IEEE�488�BUS”IEEE4880XDSGDEVƒEQU„$4B�IEEE�488�BUSSABLE�DEVICEˆIEEE488*#*‚Equates�for�IOSDRC�(driver�code).*3IODMPSCƒEQU„1’Async�terminal�driver�for�7201�ports.4IODLPRTƒEQU„2’Driver�for�local�Centronics�printer�on+*£EXORmacs�DEBUG�or�MVME410�on�I/O�channel.3IODSASIƒEQU„3’Driver�for�SASI�disks�on�I/O�channel.8IODWIN„EQU„4’Driver�for�Winchester�disks�on�I/O�channel.4IODFLP„EQU„5’Driver�for�Floppy�disks�on�I/O�channel..IOD315„EQU„6’Driver�for�disks�on�MVME315�board/IODMTA„EQU„7’DRIVER�FOR�MAG�TAPE�ON�I/O�CHANNEL3IODEPCIƒEQU„8’Async�terminal�driver�for�2661�ports.-IOD320„EQU„9’Driver�for�disks�on�VME320�board7IODUARTƒEQU„$A‘Terminal�driver�for�local�port�on�VME1156IODMFP„EQU„$B‘Terminal�driver�for�local�port�on�VME12X2IODMPCCƒEQU„$C‘Terminal�driver�for�ports�on�VME0505IODACIAƒEQU„$D‘Terminal�driver�for�VME110�or�EXORmacs5IODSIO„EQU„$E‘Terminal�driver�for�local�ports�on�VM049IODTERMƒEQU„$11�Driver�for�screen/keyboard�on�EXORMACS/S.IODIPC„EQU„$20�IPC�driver./IODVM22ƒEQU„$21�DRIVER�FOR�VM22�DISK�CONTROLLER,IODGPIBƒEQU„$4A�IEEE�488�bus�driver.�IEEE488*2*‚Bit�equates�for�IOSATM�and�IOSATW�for�terminals.*IOAHCPYƒEQU„0’HARD�COPYIOAXCTLƒEQU„1’XON/XOFFIOABITSƒEQU„2’7BIT/8BITIOASTPBƒEQU„3’STOP�BITSIOAUSEPƒEQU„4’PARITYIOAPRTYƒEQU„5’ODD/EVEN�PARITYIOAECHOƒEQU„6’HALF/FULL�DUPLEXIOATAHDƒEQU„7’TYPE�AHEAD#IOATFULƒEQU„8’FULL�BUFFER�TERMINATEIOAPNULƒEQU„9’PASS�NULLS#IOAMODMƒEQU„10‘MODEM/DIRECT�CONNECTIOAOFFHƒEQU„11‘MODEM�OFFHOOK5IOADCD„EQU„12‘NOTIFY�BREAK�CLAIMER�OF�DCD�TRANSITIONS=IOAAUTOƒEQU„13ŽDO�AUTO�BAUD�RATE�DETECTION�ON�DCD�TRANSITIONS9IOATRM„EQU„15�DO�NOT�USE!‚RESERVED�FOR�INTERNAL�USE�ONLY!*'*‚Bit�equates�for�IOSPRM�for�terminals.*5 /IOSXOFBƒEQU„4’Parameter�#�for�IOSXOF�parameter.IOSBRCBƒEQU„5’etc. IOSDOPBƒEQU„6 IOSRLNBƒEQU„7 IOSCLCBƒEQU„8 IOSRTVBƒEQU„9IOSEOLBƒEQU„10IOSBRTBƒEQU„11IOSNLSBƒEQU„12IOSTRCBƒEQU„13IOSTCDBƒEQU„14*;*ˆCONFIGURATION�PARAMETERS�SPECIFIC�TO�MAGNETIC�TAPE�DRIVES***ŠOFFSET�IOSDDC/IOSDEN„DS.Bƒ1’Density�for�write�from�loadpoint.*.IOSRDT„DS.Bƒ1’Read�tries�before�error�message.*)IOSWRT„DS.Bƒ1’Write�tries�before�erasure.*,IOSERT„DS.Bƒ1’Erasures�before�error�message.*<*‚The�system�uses�the�IOSWTO�for�a�timeout�value�for�a�write"*‚and�IOSRTO�for�every�thing�else.:*‚This�is�not�suitable�for�the�mag�tape�driver,�so�we�have!*‚defined�our�own�timeout�values.*‰Command¡Timeout�value*‰-------¡------------- *‰Readšsmaller�of‚IOSRDTO/IOSRTO)*‰Space�forward‘smaller�of‚IOSSPTO/IOSRTO)*‰Space�reverse‘smaller�of‚IOSSPTO/IOSRTO**‰Write¥IOSWTO)*‰Write�filemark�smaller�of�IOSWTO/IOSRTO* *‰Erase™smaller�of‚IOSWTO/IOSRTO*"*‰Rewind˜smaller�of‚IOSRWTO/IOSRTO7*‰Search�forward�for�filemarkƒsmaller�of‚IOSSRTO/IOSRTO7*‰Search�reverse�for�filemarkƒsmaller�of‚IOSSRTO/IOSRTO*.IOSRDTOƒDS.L†1�Read,�space�timeout�for�magtape*,IOSSPTOƒDS.L†1�Space�forward/reverse�timeoutIOSRWTOƒDS.L†1�Rewind�timeout2IOSSRTOƒDS.L†1�Search�forward/reverse�for�filemark *£timeout.0IOSMTSVƒDS.Bƒ8’Reserving�an�area�for�future�use.*(ŠDS.Bƒ8’Reserving�an�area�for�future�use/IOSMLN„EQU„*’Length�of�data�block�for�mag�tape.*,*‚Bit�equates�for�IOSPRM�for�magnetic�tapes.*4IOSDENBƒEQU„4’Parameter�number�for�IOSDEN�parameter,IOSRDTBƒEQU„5’etc. IOSWRTBƒEQU„6 IOSERTBƒEQU„7IOSRDTOB‚EQU„8IOSSPTOB‚EQU„9IOSRWTOB‚EQU„10IOSSRTOB‚EQU„11*,*‚Bit�equates�for�IOSATW�for�magnetic�tapes.*8IOSELB„EQU„0’Transport�density�selectable/not�selectable*2IOSREQBƒEQU„1’User�does/does�not�request�a‚density***$*‚Equates�for�IOSTCD�(terminal�code)*‚$00-$7F‚reserved*‚$80-$FF‚user-defined*TCDX155ƒEQU„0’EXORterm�155.*&*‚Bit�equates�for�IOSATW�for�printers.*IOALNFDƒEQU„0’AUTO�LINE�FEED,IOASNFFƒEQU„1’SUPRESS�FORM�FEED�AFTER�ASSIGN3IOATPLLƒEQU„2’TRUNCATE�PRINT�AT�LOGICAL�LINE�LENGTH*%*‚Bit�equates�for�IOSPRM�for�printers*9IOSLRLBƒEQU„4’Parameter�number�for�logical�record�length.=IOSELCBƒEQU„5ŽParameter�number�for�the�end-of-line�character.** IOS DATA BLOCK STRUCTURE FOR%*‰DISK�CONFIGURE�AND�STATUS�COMMANDS.*ŠOFFSET�IOSDDC1IOSSPT„DS.Bƒ1’PHYSICAL�SECTORS�PER�TRACK�ON�MEDIA#IOSHDS„DS.Bƒ1’NO.�OF�HEADS�ON�DRIVE'IOSTRK„DS.Wƒ1’NO.�OF�CYLINDERS�ON�MEDIA(IOSILV„DS.Bƒ1’INTERLEAVE�FACTOR�ON�MEDIA$IOSSOF„DS.Bƒ1’SPIRAL�OFFSET�ON�MEDIA+IOSPSM„DS.Wƒ1’PHYSICAL�SECTOR�SIZE�OF�MEDIA+IOSSHD„DS.Wƒ1’STARTING�HEAD�NUMBER�ON�DRIVE+IOSTRKDƒDS.Wƒ1’NUMBER�OF�CYLINDERS�ON�DRIVE@IOSPCOMƒDS.Wƒ1ŒPRECOMPENSATION�CYLINDER�#�(usually�.5�total�cyl)2IOSSPTDƒDS.Bƒ1’PHYSICAL�SECTORS�PER�TRACK�ON�DRIVEIOSSR:IOSSRTDƒDS.Bƒ1’STEPPING�RATEIOSRWCC:4IOSEWCCƒDS.Wƒ1’REDUCED�WRITE�CURRENT�CYLINDER�NUMBER#IOSECC„DS.Wƒ1’ECC�DATA�BURST�LENGTHIOSDRSVƒDS.Bƒ2’RESERVED+*œTHE�ABOVE�RESERVED�BYTES�IS�FOR�AN�OFFSET*œTO�ANOTHER�PARAMETER�BLOCK)!IOSDLN„EQU„*’LENGTH�OF�DATA�BLOCK*4*‚Bit�equates�for�IOSATM�and�IOSATW�for�disk�devices*.IOADDENƒEQU„$0‘MFM/FM�encoding�method�on�media/IOATDENƒEQU„$1‘96/48�TPI�track�density�on�media,IOADSIDE‚EQU„$2‘double/single�Sided�diskette-IOAFRMTƒEQU„$3‘Media�Format�(IBM�or�Motorola),IOARDISC‚EQU„$4‘Rigid/Floppy�disk�(or�drive)0IOADDEND‚EQU„$5‘MFM/FM�drive�encoding�capability0IOATDEND‚EQU„$6‘96/48�TPI�track�density�of�drive5IOARIBSƒEQU„$7‘Seek�required�w/�head�change�SMD�drive4IOADPCOM‚EQU„$8‘Post�read/pre-write�pre-compensation(*¦cylinder�number�(if�a�pre-compensation)*¦cylinder�number�is�supplied�-�this�flag&*¦indicates�is�it�is�post-read�or�pre-"*¦write.�The�default�is�pre-write)!IOASIZEƒEQU„$9‘8"/5�1/4"�diskette)IOAALT„EQU„$A‘Alternate�sector�capability*)*‚Bit�equates�for�IOSPRM�for�disk�devices*.IOSSPTBƒEQU„$4‘Physical�sectors/track�on�media5 $IOSHDSBƒEQU„$5‘No.�of�heads�on�drive(IOSTRKBƒEQU„$6‘No.�of�cylinders�on�media)IOSILVBƒEQU„$7‘Interleave�factor�on�media%IOSSOFBƒEQU„$8‘Spiral�offset�on�media,IOSPSMBƒEQU„$9‘Physical�sector�size�of�media,IOSSHDBƒEQU„$A‘Starting�head�number�on�drive,IOSTRKDB‚EQU„$B‘Number�of�cylinders�on�drive*IOSPCOMB‚EQU„$C‘precompensation�cylinder�#/IOSSPTDB‚EQU„$D‘Physical�sectors/track�on�driveIOSSRB„EQU„$E‘stepping�rate5IOSRWCCB‚EQU„$F‘reduced�write�current�cylinder�number(*£and�EEC�data�burst�length�(either�both*£or�neither�are�defined)*Ç *ÆIEEE488/*�IEEE�488�BUS�CONFIGURATION�PARAMETERS IEEE488 *ÆIEEE488ŠOFFSET�IOSDDC�IEEE4881IOSEORRƒDS.Lƒ1ŒEND�OF�RECORD�REQUIREMENTS�IEEE4886IOSEOSCƒDS.Wƒ1ŒEND�OF�STRING�CHAR�-�WRITE/READ‹IEEE488;IOSPOLCƒDS.Bƒ1ŒPARALLEL�POLL�CONFIGURATION�REGISTER†IEEE488-IOSPRMAƒDS.Bƒ1ŒDEVICE�PRIMARY�ADDRESS”IEEE488@IOSFBWXƒDS.Lƒ1Œ#�OF�BYTES�FOR�FIXED�LENGTH�WRITE,FMT/IMG�IEEE488?IOSFBRXƒDS.Lƒ1Œ#�OF�BYTES�FOR�FIXED�LENGTH�READ,FMT/IMG‚IEEE4882IOSSAMRƒDS.Lƒ1ŒREAD�SECONDARY�ADDRESS�MASK�IEEE4883IOSSAMWƒDS.Lƒ1ŒWRITE�SECONDARY�ADDRESS�MASKŽIEEE488-IOSRSVDƒDS.Lƒ2ŒRESERVED‚FOR�LATER�USE“IEEE488%IOPCUR„EQU„$2000ŽCURRENT�POSITION�/�='IOPPRV„EQU„$4000ŽPREVIOUS(BACKWARD)�/�<2IOPRAN„EQU„$6000ŽRANDOM(LRN�OR�LSN�GIVEN)�/�>�OR�=!IOPTSK„EQU„$8000ŽTASK�ID�SUPPLIED1IOPMNT„EQU„$0‘MOUNT�DISK�(CONFIGURE�REQUEST�ONLY)8IOPDMNTƒEQU„$1000ŽDISMOUNT�DISK�(CONFIGURE�REQUEST�ONLY)ISTAIRPI‚EQU„$DD‰INVALID�REQUEST�FOR�PENDING�INTERRUPT†IEEE4880ISTAIVCB‚EQU„$DE‰INVALID�COMMAND�FOR�BUS”IEEE4888ISTADXAB‚EQU„$DF‰DATA�XFER�ABORTED�BY�CONTROLLERŒIEEE488 *»IEEE488*ISTANR„EQU„$E1�DEVICE�NOT�READYISTADB„EQU„$E2�DEVICE�BUSYISTACRCƒEQU„$E3�DATA�CRC�ERROR%ISTAWP„EQU„$E4�WRITE�PROTECTED�DEVICE*ISTADDMƒEQU„$E5�DELETED�DATA�MARK�DETECTEDISTATO„EQU„$E6�TIMEOUT%ISTASA„EQU„$E7�INVALID�SECTOR�ADDRESSISTACSMƒEQU„$E8�CHECKSUM�ERROR"ISTARESƒEQU„$E9�DISC�RESTORE�ERRORISTADO„EQU„$EA�DATA�OVERRUN$ISTASC„EQU„$EB�DEVICE�STATUS�CHANGED)ISTADMEƒEQU„$EC�TRACK/SECTOR�ID�NOT�FOUND$ISTAMRKƒEQU„$ED�ADDR.�MARK�CRC�ERRORISTASEKƒEQU„$EE�SEEK�ERRORISTABDSƒEQU„$EF�BAD�SECTOR*Ç*ˆCHANNEL�ERRORS±*ÇISTACHNƒEQU„$F1�CHANNEL�BUSY–"ISTADMAƒEQU„$F2�CHANNEL�DMA�ERROR‘,ISTACDNƒEQU„$F3�UNRECOVERABLE�CHANNEL�ERROR‰ ISTACNTƒEQU„$F4�CONTROLLER�ERROR*ISTACFGƒEQU„$F5�DEVICE�CONFIGURATION�ERRORISTABUSƒEQU„$F6�DMA�BUS�ERROR!ISTAMAPƒEQU„$F7�DMA�MAPPING�ERROR$ISTADMCƒEQU„$F8�DMA�CONTROLLER�ERROR+ISTAICEƒEQU„$F9�INDETERMINATE�CHANNEL�ERRORŠPAGE*Ç *ˆI/O�MACROSµ*Ç*…CALLING�SEQUENCE²!*ˆXXXCALL�(ADDR.�OF�PARAM�BLOCK)¡*Ç ŠOFFSET�0 FHSCALLƒMACRO ŠIFNCƒ'\1',''�IFNCƒ'\1','(A0)'6 &�LEA„\1,A0ŽLOAD�ADDRESS�OF�PARAM�BLOCK�ENDCŠENDCŠTRAPƒ#3‘CALL�EXEC�DIRECTIVEŠENDM*Ç*Ç IOSCALLƒMACRO ŠIFNCƒ'\1',''�IFNCƒ'\1','(A0)'&�LEA�\1,A0‹LOAD�ADDRESS�OF�PARAM�BLOCK�ENDCŠENDCŠTRAPƒ#2‘CALL�EXEC�DIRECTIVEŠENDM*Ç*ˆIOS�PARAMETER�BLOCK�MACRO¦*ŠCALLING�SEQUENCE­!*�XXX�(LABEL,PARAM1�...,PARAM�N)œ*Ç IOS‡MACRO \0IOS…EQU„* ŠIFC„'\1',''�DFC.W‚0’FUNCTIONšŠENDC ŠIFNCƒ'\1',''�DFC.W‚\1‘FUNCTIONšŠENDC ŠIFC„'\2',''�DFC.W‚0’OPTIONSœŠENDC ŠIFNCƒ'\2',''�DFC.W‚\2‘OPTIONS›ŠENDCŠDFC.B‚0’STATUSœ ŠIFC„'\3','' �DFC.B‚0’LUN ŠENDC ŠIFNCƒ'\3',''�DFC.B‚\3‘LUNŸŠENDCŠDFC.B‚0’RESERVEDš ŠIFC„'\4',''�DFC.B‚0’PARTIAL�KEY�LENGTH�ŠENDC ŠIFNCƒ'\4',''�DFC.B‚\4‘PARTIAL�KEY�LENGTH�ŠENDC ŠIFC„'\5',''"�DFC.L‚0’RECORD�NO.�-�KEY�POINTER‹ŠENDC ŠIFNCƒ'\5',''#�DFC.L‚\5‘RECORD�NO.�-�KEY�POINTERˆŠENDC ŠIFC„'\6',''�DFC.L‚0’BUFFER�START�ADDRESS�ŠENDC ŠIFNCƒ'\6',''�DFC.L‚\6‘BUFFER�START�ADDRESS�ŠENDC ŠIFC„'\7',''�DFC.L‚0’BUFFER�END�ADDRESS�ŠENDC ŠIFNCƒ'\7',''�DFC.L‚\7‘BUFFER�END�ADDRESS�ŠENDCŠDFC.L‚0’LENGTH�OF�TRANSFER� ŠIFC„'\8',''�DFC.L‚0’COMPLETION�ADDRESS‘ŠENDC ŠIFNCƒ'\8',''�DFC.L‚\8‘COMPLETION�ADDRESS�ŠENDCŠENDM*Ç*ˆFHS�PARAMETER�BLOCK�MACRO¦*Ç FHS‡MACRO \0FHS…EQU„* ŠIFC„'\1',''�DFC.W‚0’COMMANDœŠENDC ŠIFNCƒ'\1',''�DFC.W‚\1‘COMMANDšŠENDC ŠIFC„'\2',''�DFC.W‚0’OPTIONS›ŠENDC ŠIFNCƒ'\2',''�DFC.W‚\2‘OPTIONS™ŠENDCŠDFC.B‚0’STATUSœ ŠIFC„'\3','' �DFC.B‚0’LUN ŠENDC ŠIFNCƒ'\3',''�DFC.B‚\3‘LUN�ŠENDC ŠIFC„'\4',''"�DFC.L‚$20202020ŠVOLUME-DEVICE�ID‘ŠENDC ŠIFNCƒ'\4',''�DFC.L‚\4‘VOLUME-DEVICE�ID’ŠENDCŠDFC.W‚0’USER�NUMBER—ŠDFC.L‚$20202020ŠCATALOG›ŠDFC.L‚$20202020ŠDFC.L‚$20202020ŠFILENAMEšŠDFC.L‚$20202020ŠDFC.W‚$2020ŽEXTENSION™ŠDFC.W‚0’RESERVEDš ŠIFC„'\5',''�DFC.B‚0’WRITE�CODE˜ŠENDC ŠIFNCƒ'\5',''�DFC.B‚\5‘WRITE�CODE—ŠENDC ŠIFC„'\6',''�DFC.B‚0’READ�CODEšŠENDC ŠIFNCƒ'\6',''�DFC.B‚\6‘READ�CODE™ŠENDC ŠIFC„'\7',''�DFC.W‚0’RECORD�LENGTH–ŠENDC ŠIFNCƒ'\7',''�DFC.W‚\7‘RECORD�LENGTH“ŠENDC ŠIFC„'\8',''�DFC.L‚0’SIZE/POINTER–ŠENDC ŠIFNCƒ'\8',''�DFC.L‚\8‘SIZE/POINTER•ŠENDCŠENDM*Ç*ˆOUTPUT�CONSTANT�MACROª*Ç DFC‡MACRO ŠDC.\0‚\1ŠENDM*********************** Ending of &.IOE.EQ ***********************éééééé7 ‰PAGE************************** Beginning of &.IOV.EQ ***************************%*‡TABLE�OF�TASKS�CLAIMING�I/O�VECTORS* ŠOFFSET�0IOVHDR„DS.Lƒ1’!IOV"IOVEND„DS.Lƒ1’END�OF�TABLE�ADDRESS#IOVENTRƒEQU„*’OFFSET�OF�FIRST�ENTRY* ŠOFFSET�0IOVJSR„DS.Wƒ3’JSR�COMNISR ŠOFFSET�0IOVVECTƒDS.Wƒ1’VECTOR�NUMBERIOVTCB„DS.Lƒ1’TCB�ADDRESSIOVADR„DS.Lƒ1’ISR�ADDRESS$IOVARG„DS.Lƒ1’ARGUMENT�PASSED�TO�ISRIOVESZ„EQU„*+6�SIZE�OF�ENTRY**„CISR�PARAMETER�BLOCK* ŠOFFSET�0CISTSK„DS.Lƒ1’TASK�NAMECISSES„DS.Lƒ1’SESSIONCISOPT„DS.Wƒ1’OPTIONSCISVCT„DS.Wƒ1’VECTOR�NUMBERCISISR„DS.Lƒ1’ISR�ADDRESS$CISARG„DS.Lƒ1’ARGUMENT�PASSED�TO�ISR*********************** Ending of &.IOV.EQ ***********************éééééØ!‰PAGE************************** Beginning of &.LV5.EQ *************************** *—*********** *—*�4/16/82�* *—*************4*ˆDATA�STRUCTURES�AND�EQUATES�FOR�EXEC�(CHANNEL)�I/O**%*ˆEXEC�I/O�PARAMETER�BLOCK�STRUCTURES* ŠOFFSET�0’START�WITH�ZERO�OFFSETXIOCOD„DS.Bƒ1’COMMAND�CODEXIOSCD„DS.Bƒ1’COMMAND�SUB-CODE&ŠDS.Bƒ1’--�UPPER�BYTE�OF�OPTIONS�WORD!,XIOOPT„DS.Bƒ1’--�LOWER�BYTE�OF�OPTIONS�WORD!XIOCID„DS.Lƒ1’CHANNEL�MNEMONICXIOPRM„EQU„*’START�PARAMETERS*$*ˆALLOCATE�PARAMETER�BLOCK�STRUCTURE*+ŠOFFSET�XIOPRM�START�WITH�PARAMETERS�OFFSETXIOCTP„DS.Bƒ1’CHANNEL�TYPE?XIOMIC„DS.Bƒ1ŒMASKED�INTERRUPT�INSTRUCTION�COUNT�(USED�BY�CHPI)0XIOSVA„DS.Lƒ1’I/O�HANDLER�SERVICE�VECTOR�ADDRESSAXIOSUP„DS.Lƒ1ŠSUPERVISOR�CHANNEL�MNEMONIC�(use�only�if�option�bit(*§XOPSUB�is�set--otherwise�leave�this�0)XIOADD„DS.Lƒ1’DEVICE�ADDRESSXIOMLN„DS.Wƒ1’#�OF�BYTES�ACROXIOVNO„DS.Bƒ1’VECTOR�NUMBERXIOPPR„DS.Bƒ1’POLLING�PRIORITYXIOSPR„DS.Bƒ1’SOFTWARE�PRIORITY!XIOPFC„DS.Bƒ1’POLLING�FIELD�COUNTXIOALN„EQU„*’LENGTH**ˆINTERRUPT�SEGMENTS* ŠOFFSET�0!XIOPOF„DS.Wƒ1’POLLING�BYTE�OFFSETXIOMSK„DS.Bƒ1’POLLING�MASK XIOTST„DS.Bƒ1’POLLING�TEST�VALUEXIOROF„DS.Wƒ1’RESET�OFFSETXIOREV„DS.Bƒ1’RESET�VALUEŠDS.Bƒ1’RESERVEDXIOXLN„EQU„*’LENGTH*(*ˆEQUATES�FOR�'XIOOPT'�(8�BITS)�ALLOCATE*7XOPSHR„EQU„0’Only�system�tasks�may�attach�this�channel.%XOPEXC„EQU„1’Reserved�(used�by�CHPI).!XOPDIR„EQU„4’Exclusive�vectoring.@XOPSUB„EQU„8ŠThis�channel�is�to�be�subordinate�to�the�supervisor*§whose�mnemonic�is�in�CCBSUP.:XOPSUP„EQU„$10�This�channel�is�to�be�a�supervisor�channel.;XOPINH„EQU„$20�For�internal�use�only--do�not�use�(4.3�SJF).*"*ˆATTACH�PARAMETER�BLOCK�STRUCTURE*+ŠOFFSET�XIOPRM�START�WITH�PARAMETERS�OFFSE7 T XIOKEY„DS.Bƒ1’USER�GENERATED�KEY%XIOSLN„DS.Bƒ1’LENGTH�OF�STATUS�RETURNXIOVAD„DS.Lƒ1’VECTOR�ADDRESSXIOTOC„DS.Wƒ1’TIMEOUT�COUNTXIORET„DS.Wƒ1’RETRY�COUNT*&*ˆEQUATES�FOR�'XIOOPT'�(8�BITS)�ATTACH*XOPWUP„EQU„0’ISSUE�WAKE-UPáHêFòAúB XOPASQ„EQU„1’ISSUE�ASQ�INTERRUPTXOPPRO„EQU„0’I/O�AND�PROCEEDXOPWAT„EQU„2’I/O�AND�WAIT$XOPSRV„EQU„3’SERVICE�VECTOR�SUPPLIED*&*ˆEQUATES�FOR�'XIOOPT'�(8�BITS)�DETACH*$XOPONE„EQU„0’DETACH�ONLY�ONE�CHANNEL XOPALL„EQU„1’DETACH�ALL�CHANNELS*(*ˆINITIATE�I/O�PARAMETER�BLOCK�STRUCTURE*+ŠOFFSET�XIOPRM�START�WITH�PARAMETERS�OFFSETXIOTSK„DS.Lƒ1’TASK�ID!XIOSES„DS.Lƒ1’TASK�SESSION�NUMBER XIOCHN„EQU„*$*ˆNON-STANDARD�CHANNEL�UNIQUE�FIELDS"XIOSAD„DS.Lƒ1’START�BUFFER�ADDRESSXIOBLN„DS.Lƒ1’LENGTH�OF�BUFFER'XIOBOF„DS.Lƒ1’ADDRESS�OF�BUFFER�POINTER&XIOCAD„DS.Lƒ1’COMMAND�SEQUENCE�ADDRESS(XIOCLN„DS.Wƒ1’LENGTH�OF�COMMAND�SEQUENCEXIOCOF„DS.Wƒ1’COMMAND�OFFSET%XIOTAD„DS.Lƒ1’TRANSIENT�SPACE�ADDRESS'XIOTLN„DS.Wƒ1’LENGTH�OF�TRANSIENT�SPACE#XIORTN„DS.Lƒ1’RETURN�STATUS�POINTERXIOILN„EQU„*’LENGTH *ˆSTANDARD�CHANNEL�UNIQUE�FIELDSŠOFFSET�XIOCHN,XIOUID„DS.Lƒ1’USER�SUPPLIED�ID�(DCB�POINTER)*XIOCPK„DS.Lƒ1’START�COMMAND�PACKET�ADDRESSXIOPLN„DS.Wƒ1’PACKET�LENGTHXIONLN„EQU„*’PB�LENGTH*,*ˆEQUATES�FOR�'XIOOPT'�(8�BITS)�INITIATE�I/O*"XOPDCP„EQU„0’DRIVER�COMMAND�PACKET%XOPRCP„EQU„1’REQUESTOR�COMMAND�PACKET** CMR TRAP 1 EXEC ERROR CODES*%XSTMNO„EQU„$0B�CHANNEL�MNEMONIC�ERROR**ˆINIT.�I/O�SUB�CODES*XDSCMD„EQU„0’INITIATE�I/OXDREST„EQU„1’RESETXDHALT„EQU„2’HALT�IOXDRESB„EQU„3’RESUBMIT�SEQUENCE*+*ˆEQUATES�FOR�RETURN�STATUS�(D0�AND�XRSSTA)*-XSTNAT„EQU„$81�CHANNEL�NOT�ATTACHED�TO�CALLER/XSTAAT„EQU„$82�CHANNEL�ATTACHED�TO�ANOTHER�TASKXSTOFF„EQU„$83�CHANNEL�OFF-LINEXSTBSY„EQU„$84�CHANNEL�BUSY1XSTINV„EQU„$85�INVALID�CALL�FOR�THIS�CHANNEL�TYPE**XSTCPS„EQU„$91�COMMAND�PACKET�STRUC.�ERROR#XSTCME„EQU„$92�CHANNEL�MARKED�ERROR"XSTADS„EQU„$93�BUFFER�LENGTH�ERROR!XSTADB„EQU„$94�BASE�ADDRESS�ERROR*)XSTSMB„EQU„$A1�SHARED�MEMORY�BUSY�(FATAL)!XSTUAN„EQU„$A2�UNEXPECTED�ACK/NAKXSTMAN„EQU„$A3�MISSING�ACK/NAK%XSTSYN„EQU„$A4�IPC�ACK/NAK�SYNC�ERROR%XSTBCM„EQU„$A5�BAD�CMD�COUNT�EXCEEDED"XSTSHM„EQU„$A7�SHARED�MEMORY�ERROR*+XSTRNG„EQU„$B1�COMMAND�SEQUENCE�RANGE�ERROR&XSTIBB„EQU„$B2�ILLEGAL�BACKWARD�BRANCH&XSTIOP„EQU„$B3�ILLEGAL�COMMAND�OP-CODE(XSTHLT„EQU„$B4�I/O�COMMAND�SEQUENCE�HALT0XSTSDA„EQU„$B5�SOURCE�FIELD�DEVICE�ADDRESS�ERROR0XSTSBA„EQU„$B6�SOURCE�FIELD�BUFFER�ADDRESS�ERROR2XSTSTA„EQU„$B7�SOURCE�FIELD�TRANSIENT�ADDRESS�ERRO/XSTDDA„EQU„$B8�DEST.�FIELD�DEVICE�ADDRESS�ERROR/XSTDBA„EQU„$B9�DEST.�FIELD�BUFFER�ADDRESS�ERROR2XSTDTA„EQU„$BA�DEST.�FIELD�TRANSIENT�ADDRESS�ERROR*XSTSES„EQU„$C6�BAD�SESSION�CODE!XSTBUF„EQU„$C7�BAD�BUFFER�ADDRESS XSTBLN„EQU„$C8�BAD�BUFFER�LENGTH!XSTCAD„EQU„$C9�CHANNEL�ADR.�ERROR*.*ˆDATA�STRUCTURE�FOR�NON-STANDARD�RETURN�EVENT*"ŠOFFSET�0’START�WITH�VARIABLE�DATAŠDS.Bƒ1’EVENT�LENGTHŠDS.Bƒ1’EVENT�CODEXRSSTA„DS.Bƒ1’STATUS�CODEXRSKEY„DS.Bƒ1’CHANNEL�KEY!XRSPTR„DS.Wƒ1’LAST�COMMAND�NUMBERXRSLEN„EQU„*’LENGTH*1*ˆDATA�STRUCTURE�FOR�TYPE�(70,71,FF)�RETURN�EVENT*"ŠOFFSET�0’START�WITH�VARIABLE�DATAŠDS.Bƒ1’EVENT�LENGTHŠDS.Bƒ1’EVENT�CODEXRPSTA„DS.Bƒ1’EVENT�TYPEXRPKEY„DS.Bƒ1’CHANNEL�KEY(XRPUID„DS.Lƒ1’USER�SUPPLIED�ID�(DCB�PTR)XRPSTV„DS.Wƒ1’STATUS�VALUEXRPPRM„EQU„*’STATUS�PARAMETERS**ˆEQUATES�FOR�'XRPSTA'�(8�BITS)*XPSNRM„EQU„$70�NORMAL�RETURNXPSHLT„EQU„$71�HALT/ABORT'XPSUNS„EQU„$80�UNSOLICITED�DEVICE�EVENT(XPSUNR„EQU„$FF�UNSOLICITED�CHANNEL�EVENT**ˆEQUATES�FOR�'XRPSTV'**XSTVABTƒEQU„0’INVALIT�HALT�COMMAND�(ABORT)XSTVDSTƒEQU„0’DEVICE�STATUS)XSTVNIDƒEQU„1’DEVICE�STATUS�(NO�ID�GIVEN)XSTVRSET‚EQU„0’CHANNEL�RESETXSTVDWNƒEQU„8 $FF�CHANNEL�DOWN*G*‚Remainder�of�event�if�XRPSTA=$80�and�XRPSTV=0.‚This�is�the�format�forH*‚an�unsolicited�event�if�INITIATE�I/O�commands�have�been�done�and�hence*‚the�device�ID�is�known.*+ŠOFFSET�XRPPRM�START�WITH�PACKET�PARAMETERSXRPDST„DS.Bƒ1’DEVICE�STATUSXRPDTP„DS.Bƒ1’DEVICE�TYPEXRPLEN„EQU„*’LENGTH*C*‚Remainder�of�event�if�XRPSTA=$80�and�XRPSTV=1.‚This�is�the�formatJ*‚for�an�unsolicited�event�if�no�INITIATE�I/O�commands�have�been�done�yet.*ŠOFFSET�XRPLENXRPDNO„DS.Bƒ1’DEVICE�NUMBERŠDS.Bƒ1’RESERVEDXRP1LENƒEQU„*’LENGTH*!*ˆCHANNEL�COMMAND�DIRECTIVE�CODES*XDCALL„EQU„1’ALLOCATEXDDELT„EQU„2’DELETEXDATCH„EQU„3’ATTACHXDDTCH„EQU„4’DETACHXDONLN„EQU„5’MARK�ON�LINEXDOFLN„EQU„6’MARK�OFF�LINEXDINIT„EQU„7’INITIATE�I/O*"*ˆDIRECTIVE�NUMBER�FOR�CHANNEL�I/O*XCAIO…EQU„60‘ARBITRARY�I/O�CODE$XCCMR…EQU„60‘CHANNEL�MANAGEMENT�CODE*-*ˆDATA�STRUCTURE�FOR�CHANNEL�DATA�BLOCK�(CDB)* ŠOFFSET�0XCDBPTRƒDS.Lƒ1’NEXT�POINTER2XCDBOPTƒDS.Wƒ1’OPTIONS�TO�USE�IN�ALLOCATE�COMMAND.XCDBAIDƒDS.Lƒ1’ASCII�IDENTIFIER%XCDBPRMƒDS.BƒXIOALN-XIOPRM†PARAMETERS*'*ˆDRIVER�TRANSIENT�SPACE�DATA�STRUCTURE* ŠOFFSET�0’START�WITH�ZERO�OFFSETZSTAT…DS.Lƒ1’DEVICE�STATUSZOPT†DS.Lƒ1’I/O�OPTIONSZDOPT…DS.Lƒ1’DRIVER�OPTIONS!ZRLEN…DS.Lƒ1’DEVICE�RECORD�LENGTHZBCNT…DS.Lƒ1’BUFFER�COUNTER$ZBPTR…DS.Lƒ1’BUFFER�RELATIVE�POINTERZEOLC…DS.Lƒ1’END�OF�LINE�CHAR.ZCRNUL„DS.Lƒ1’CR�NULL�COUNT%ZSBITS„DS.Lƒ1’PROGRAM�BYTE�FOR�DEVICE!ZBAL†DS.Lƒ1’BRANCH�AND�LINK�VALUEZNCNT…DS.Lƒ1’NULL�PAD�COUNTER ZBUF†DS.Lƒ1’TEMP.�STORAGE�BUFFER"ZMODE1„DS.Lƒ1’2661�MODE�REGISTER�1"ZMODE2„DS.Lƒ1’2661�MODE�REGISTER�2 TSPACE„EQU„**,*ˆDRIVER�CHANNEL�CONTROL�AREA�DATA�STRUCTURE* ŠOFFSET�0’START�WITH�ZERO�OFFSETZCID†DS.Lƒ1’CHANNEL�MNEMONICZSTW†DS.Wƒ1’STATE�WORDZKEY†DS.Bƒ1’CHANNEL�KEYZRSET…DS.Bƒ1’RESET�FLAG!ZBSAD…DS.Lƒ1’START�BUFFER�ADDRESS$ZTSAD…DS.Lƒ1’TRANSIENT�SPACE�ADDRESSZPTR†DS.Lƒ1’POINTERZLEN†EQU„*’LENGTH**ˆZSTW�(STATE�WORD)�VALUES*$*’-1�=�TERMINATION�(NOTHING�PENDING)*“0�=�NOT�ACTIVE*“1�=�I/O�IN�PROGRESS*********************** Ending of &.LV5.EQ ***********************é‰PAGE****************************** Beginning of &.M300DRV.EQ ******************************)ŠTTL„M300DRV�(GPIB)…DRIVER�-�GPIB�EQUATES*>*…THIS�EQUATE�TABLE�CONTAINS�ALL�INFORMATION�PERTAINING�TO�THE?*ƒGPIB�I/O�DRIVER�FOR�THE�VERSADOS�4.0�AND�ABOVE�I/O�SCHEME.�IT>*ƒCONTAINS�INTERNAL�HARDWARE�EQUATES,�CCB�STORAGE�ALLOCATIONS,>*ƒAND�ENTRIES�SPECIFIC�TO�THE�OPERATION�AND�MAINTENANCE�OF�THE*ƒIEEE-488�BUS.*E********************************************************************* *žHISTORYž*E**********************************************************************(*…24�JAN�83…STEVE�FEITELSON/CHRIS�MARRINC*ƒINITIAL�EQUATE�FILE.�EQUATES�ARE�BROKEN�OUT�FROM�THE�MAIN�SOURCE.@*ƒALL�GENERAL�SYSTEM�EQUATES�FOR�THE�DRIVER�DEFINED�THUS�FAR�ARE *ƒPRESENT.*ŠPAGEE**********************************************************************E**********************************************************************@*‚THE�FOLLOWING�DEFINES�THE�QUEUING�STRUCTURE�AND�THE�ASSOCIATED;*‚POINTERS�FOR�HANDLING�COMMAND�FLOW�FOR�THIS�CHANNEL.�ONLYB*‚ONE�QUEUE�ENTRY�PER�DEVICE�CONNECTED�TO�THIS�CHANNEL�IS�ALLOWED.?*‚THEREFORE�THE�MAXIMUM�NUMBER�OF�QUEUED�ENTRIES�IS�15�(ONE�FORD*‚EACH�DEVICE).�THE�QHEAD�POINTER�IS�A�POINTER�TO�THE�NEXT�AVAILABLE<*‚QUEUE�ENTRY�LOCATION�AND�QTAIL�IS�A�POINTER�TO�THE�CURRENT*‚OPERATION�BEING�EXECUTED.*%*ˆEACH�ENTRY�CONSISTS�OF�SEVEN�ITEMS:**Œ(1)�COMMAND�STATUS*Œ(2)�DCB�POINTER*Œ(3)�IOSPB�POINTER%*Œ(4)�PRIMARY�BUFFER�PHYSICAL�ADDRESS5*Œ(5)�SECO8 NDARY/CONFIGURATION�BUFFER‚PHYSICAL�ADDRESS*Œ(6)�PRIMARY�BUFFER�LENGTH*Œ(7)�SECONDARY�BUFFER�LENGTH*3*ˆIF�QTAIL�AND�QHEAD�ARE�EQUAL,�THE�QUEUE�IS�EMPTY.*E********************************************************************* * *‚OFFSETS�WITHIN�A�'GPIBQ'�ENTRY* ŠOFFSET�06CSTQOFST‚DS.Wƒ1’FIRST‚ENTRY�IS�COMMAND�STATUS�OF�ENTRY+DCBQOFST‚DS.Lƒ1’SECOND�ENTRY�IS�DCB�POINTER,IPBQOFST‚DS.Lƒ1’THIRD‚ENTRY�IS�IOSPB�POINTER***************************************************************3*ˆTHE�FOLLOWING�ARE�EQUATES�THAT�BREAK�DOWN�SOME�OF9*„THE�CONFIGURATION�PARAMETERS�INTO�THEIR�INDIVIDUAL�BYTE*„OR�WORD�MEANINGS.*@**************************************************************** *@*‚BREAKDOWN�EQUATES�OF�'IOSEORR'�-�END�OF�RECORD�CHARACTERISTICS*'WEORFMTƒEQU„IOSEORRŒWRITE�EOR�FORMATTED%WEORIMGƒEQU„IOSEORR+1ŠWRITE�EOR�IMAGE(REORFMTƒEQU„IOSEORR+2ŠREAD�EOR�FORMATTED$REORIMGƒEQU„IOSEORR+3ŠREAD�EOR�IMAGE*;*‚BREADOWN�EQUATES�FOR�'IOSEOSC'�-�END�OF�STRING�CHARACTERS*,IOSEOSWƒEQU„IOSEOSCŒEND�OF�STRING�WRITE�CHAR-IOSEOSRƒEQU„IOSEOSC+1ŠEND�OF�STRING�READ�CHAR*5*‚BREAKDOWN�EQUATES�FOR�FIXED�TRANSFER�LENGTH�-�WRITE*2IOSFBWFƒEQU„IOSFBWXŒFIXED�LENGTH�WRITE�-�FORMATTED0IOSFBWIƒEQU„IOSFBWX+2ŠFIXED�LENGTH�WRITE�-�IMAGE*4*‚BREAKDOWN�EQUATES�FOR�FIXED�TRANSFER�LENGTH�-�READ*1IOSFBRFƒEQU„IOSFBRXŒFIXED�LENGTH�READ�-�FORMATTED/IOSFBRIƒEQU„IOSFBRX+2ŠFIXED�LENGTH�READ�-�IMAGE 2MAXDEVNM‚EQU„14‘MAXIMUM�DEVICE�NUMBER�ON�A�CHANNELŠPAGEF************************************************************************”MVME-300�REGISTER�DEFINITION*F***********************************************************************H*‚THE�FOLLOWING�ARE�THE�RELATIVE�OFFSETS�OF�THE�32�WORD�GPIBC�REGISTERS.B*‚THE�EQUATES�ARE�SET�UP�SUCH�THAT�THEY�ACCESS�THE�ODD�BYTE�OF�THE*‚THE�WORD�OFFSET.*#MARLSB„EQU„1’LSB�OF�MEMORY�ADDR�REG&MARISB„EQU„3’INTERMEDIATE�MEM�ADDR�REGMARMSB„EQU„5’MSB�MEM�ADDR�REG)BCNTLSBƒEQU„7’DMA�TRANSFER�BYTE�COUNT�LSB)BCNTMSBƒEQU„9’DMA�TRANSFER�BYTE�COUNT�MSB%GPIBRSET‚EQU„11‘RESET�GPIBC�INTERFACE!ADDRMODƒEQU„13‘ADDR�MODE�REGISTER)CNTRSTAT‚EQU„15‘INTERFACE�STATUS�REGISTER*#RELCNT„EQU„17‘BUS�RELEASE�COUNT�REG!EOSCOMPƒEQU„19‘EOS�COMP�CHARACTER&UNICMD„EQU„21‘UNILINE�COMMAND�REGISTERFIFODATƒEQU„23‘FIFO�DATA�REG* INTR0…EQU„33‘TMS9914A�INTR�REG�0 INTR1…EQU„35‘TMS9914A�INTR�REG�1ADDRSTAT‚EQU„37‘ADDR�STATUS�REG$BUSSTATƒEQU„39‘BUS�STATUS�REG�(READ)+AUXCMD„EQU„39‘AUXILIARY�COMMAND�REG�(WRITE)ADDRREGƒEQU„41‘ADDR�SWITCH�REGSERLPOLL‚EQU„43‘SERIAL�POLL�REG,CMDPTHRU‚EQU„45‘COMMAND�PASS�THRU�REG�(READ))PARLPOLL‚EQU„45‘PARALLEL�POLL�REG�(WRITE)DATAIO„EQU„47‘DATA�I/O�REG*-CONTREG0‚EQU„49‘VBIM�CONTROL�REG�0�(TMS9914A)1CONTREG1‚EQU„51‘VBIM�CONTROL�REG�1�(I/O�COMPLETE).CONTREG2‚EQU„53‘VBIM�CONTROL�REG�2�(BUS�ERROR)-CONTREG3‚EQU„55‘VBIM�CONTROL�REG�3�(NOT�USED)VECTREG0‚EQU„57‘INTR�VECTOR�1VECTREG1‚EQU„59‘INTR�VECTOR�2VECTREG2‚EQU„61‘INTR�VECTOR�3VECTREG3‚EQU„63‘INTR�VECTOR�4ŠPAGE*5*„EQUATES�FOR�THE�MVME-300�STATUS�'CNTRSTAT'�REGISTER*FIEMP…EQU„0’FIFO�EMPTY8EODONE„EQU„1’EOI/EOS�HAS�BEEN�DETECTED�UPON�I/O�COMP9 LETEFIFUL…EQU„2’FIFO�FULL$BCRDN…EQU„3’BYTE�COUNT�REGISTER�DONE%GPIBFAIL‚EQU„4’GPIB�FAILURE�LED�IS�ON&BUSDMAER‚EQU„5’GPIB�DMA�ERROR�OCCURRED*<*„EQUATES�FOR�THE�MVME-300�UNILINE�'UNICMD'�COMMAND�REGISTER*"DMAWRITE‚EQU„0’DMA�WRITE�OPERATIONEOSBIT„EQU„1’EOS�BIT�ENABLE DMAREADƒEQU„2’DMA�READ�OPERATIONEOIBIT„EQU„3’EOI�BIT�ENABLE)FAILON„EQU„4’LITE�FAIL�LED�ON�FRONT�PANEL$RSTDMA„EQU„5’HALT�DMA�IF�IN�PROGRESS*2*‚BIT�EQUATES�FOR�THE�TMS-9914�'ADDRSTAT'�REGISTER*#TADS_B„EQU„1’TALKER�ADDRESSED�STATE%LADS_B„EQU„2’LISTENER�ADDRESSED�STATE6TPAS_B„EQU„3’TALKER�PRIMARY�ADDRESSED�STATE�(SEC�ADDR)8LPAS_B„EQU„4’LISTENER�PRIMARY�ADDRESSED�STATE�(SEC�ADDR)ATN_B…EQU„5’ATTENTION�LINELLO_B…EQU„6’LOCAL�LOCKOUT�STATEREM_B…EQU„7’REMOTE�STATE**‚EQUATES�WITHIN�'BUSSTAT'*BUSREN„EQU„0’REMOTE�ENABLE�LINE!BUSIFC„EQU„1’INTERFACE�CLEAR�LINE!BUSSRQ„EQU„2’SERVICE�REQUEST�LINE!BUSEOI„EQU„3’END�OR�IDENTIFY�LINE%BUSNRFDƒEQU„4’NOT�READY�FOR�DATA�LINE$BUSNDACƒEQU„5’NOT�DATA�ACCEPTED�LINEBUSDAV„EQU„6’DATA�VALID�LINEBUSATN„EQU„7’ATTENTION�LINEŠPAGE*!*†TMS9914A�INTERRUPT�MASK�EQUATES@*†THESE�BITS�CORRESPOND�TO�`INTR0'�AND�'INTR1'�TMS9914�REGISTERS*-INT0BITƒEQU„15‘INTERRRUPT�MASK�REGISTER�0�BIT-INT1BITƒEQU„14‘INTERRRUPT�MASK�REGISTER�1�BIT"BIBIT…EQU„13‘BYTE�IN�INTERRUPT�BITBOBIT…EQU„12‘BYTE�OUT�BITENDBIT„EQU„11‘END�BIT+SPASBITƒEQU„10‘SERIAL�POLL�ACTIVE�STATE�BIT$RLCBIT„EQU„9’REMOTE/LOCAL�CHANGE�BIT"MACBIT„EQU„8’MY�ADDRESS�CHANGE�BIT"GETBIT„EQU„7’GROUP�EXECUTE�TRIGGERERRBIT„EQU„6’ERROR�BIT+UCGBIT„EQU„5’UNRECOGNIZED�COMMAND�GROUP�BIT"APTBIT„EQU„4’ADDRESS�PASS�THRU�BIT+DCASBITƒEQU„3’DEVICE�CLEAR�ACTIVE�STATE�BITMABIT…EQU„2’MY�ADDRESS�BIT SRQBIT„EQU„1’SERVICE�REQUEST�BIT IFCBIT„EQU„0’INTERFACE�CLEAR�BIT *5*‚EQUATES�FOR�'CONTREG0�-�CONTREG4'�INTERRUPT�ENABLES*)VBIMENAB‚EQU„4’ENABLE�BIT�FOR�EACH�VECTOR*3TMSINT„EQU„VBIMENAB+24ˆENABLE�BIT�FOR�TMS9914A�INTR7IOCINT„EQU„VBIMENAB+16ˆENABLE�BIT�FOR�I/O�COMPLETE�INTR5BUSERINT‚EQU„VBIMENAB+8‰ENABLE�BIT�FOR�BUS�ERROR�INTR %CRˆEQU„$0D�CARRIAGE�RETURN�TERMINATORLFˆEQU„$0A�LINE�FEED�TERMINATOR,MAXFIFOƒEQU„1024�MAXIMUM�SIZE�OF�FIFO�BUFFER ŠPAGE*+*ˆGPIB�ASYNCHRONOUS�INTERRUPT�EVENT�MESSAGE* ŠOFFSET�0AILEN…DS.Bƒ1’EVENT�LENGTHAIEC†DS.Bƒ1’EVENT�CODEAIDVID„DS.Lƒ1’DEVICE�I.D.&AIEVTYPƒDS.Bƒ1’ASYNCHRONOUS�EVENT�TYPE)AIEVSTAT‚DS.Bƒ1’ASYNCHRONOUS�EVENT�STATUSAILNG…EQU„*’EVENT�LENGTH* *‚EVENT�CODES*!IOEVCD„EQU„1’NORMAL�EVENTS�TO�IOS,AIEVCD„EQU„9’ASYNCHRONOUS�EVENT�CODE�TO�TASK*+*‚ASYNCHRONOUS�INTERRUPT�EVENT�TYPE�EQUATES**SRQTYPEƒEQU„$01�SERVICE�REQUESTDCLTYPEƒEQU„$02�DEVICE�CLEAR#RLCTYPEƒEQU„$03�REMOTE/LOCAL�CHANGETCTTYPEƒEQU„$04�TAKE�CONTROL%GETTYPEƒEQU„$05�GROUP�EXECUTE�TRIGGERIFCTYPEƒEQU„$06�INTERFACE�CLEAR'IOPTYPEƒEQU„$07�INTRP�LEVEL�I/O�PENDING*ŠPAGE*;*‚GPIB�CODE/FUNCTION�EQUATES�FOR�ALL�LEVEL�40�GPIB�COMMANDS*%IOCODO„EQU„$4010ŽCOMMAND�OUT/DATA�OUT$IOCODI„EQU„$4011ŽCOMMAND�OUT/DATA�INIOCMDO„EQU„$4012ŽCOMMAND�OUTIORSEC„EQU„$4020ŽREAD�SECONDARY IOWSEC„EQU„$4021ŽWRITE�SECONDARY)IOPPU…EQU„$4030ŽPARALLEL�POLL�UNCONFIGURE'IOPPC…EQU„$4031ŽPARALLEL�POLL�CONFIGURE&IOPPOL„EQU„$4032ŽCONDUCT�PARALLEL�POLL)IOSPPS„EQU„$4033ŽSET�PARALLEL�POLL�STATUS'IOSSPS„EQU„$4034ŽSET�SERIAL�POLL�STATUS$IOSPOL„EQU„$4035ŽCONDUCT�SERIAL�POLL%IOPPD…EQU„$4036ŽPARALLEL�POLL�DISABLE IOSIFC„EQU„$4040ŽINTERFACE�CLEARIOSREN„EQU„$4041ŽREMOTE�ENABLEIOCREN„EQU„$4042ŽREMOTE�DISABLE"IOSDCL„EQU„$4044ŽCLEAR�ALL�DEVICES,IOSSDC„EQU„$4045ŽCLEAR�ALL�LISTENING�DEVICESIOSLLO„EQU„$4046ŽLOCAL�LOCKOUTIOPCTL„EQU„$4047ŽPASS�CONTROL&IOSGTL„EQU„$4048ŽLISTENERS�GO�TO�LOCAL"IOSGET„EQU„$4049ŽLISTENERS�TRIGGER+IOABT1„EQU„$404AŽINTERFACE�AND�DEVICE�CLEAR$IOABT2„EQU„$404BŽUNTALK�AND�UNLISTENIOTCTL„EQU„$404CŽTAKE�CONTROL IORQCL„EQU„$404DŽREQUEST�CONTROL IORLCL„EQU„$404EŽRELEASE�CONTROLIOGTS…EQU„$404FŽGO�TO�STANDBY'IODSDC„EQU„$4050ŽSPECIFIED�CLEAR�DEVICE(IODREM„EQU„$4051ŽSPECIFIED�REMOTE�DEVICE)IODGET„EQU„$4052ŽSPECIFIED�TRIGG: ER�DEVICE&IODGTL„EQU„$4053ŽSPECIFIED�GO�TO�LOCAL,ŠTTL„GPIB�DRIVER�-�GPIB�EQUATES�(MENU�ITEMS)ŠPAGEA******************************************************************"*ŒGPIBC�MENU�ITEM�FUNCTION�EQUATES*/*†THESE�EQUATES�ARE�USED�TO�INDEX�INTO�THE�MENU6*†ROUTINE�PROCESSOR�TABLE�(MENUCTBL).�AT�THAT�INDEX�IN3*†THE�TABLE�IS�THE�ADDRESS�OF�THE�ROUTINE�THAT�WILL0*†PERFORM�THE�FUNCTION�OR�SET�OF�FUNCTIONS.�NOTE-*†THAT�THESE�EQUATES�ARE�NOT�THE�VALUE�OF�THE*†ACTUAL�GPIBC�COMMANDS*A******************************************************************7*ˆCLASS�I�MENU�ITEMS:‚GENERATE�INTERRUPTS�WHEN�EXECUTED*2END‡EQU„0’END�OF�MENU�CODE�(SPECIAL�CASE�FUNCTION)UNT‡EQU„1’UNTALK�CODEUNL‡EQU„2’UNLISTEN�CODE LAG‡EQU„3’PRIMARY�LISTEN�ADDRESSOTA‡EQU„4’PRIMARY�TALK�ADDRESSOSA‡EQU„5’SECONDARY�R/W�ADDRESS#PPU‡EQU„6’PARALLEL�POLL�UNCONFIGURE!PPC‡EQU„7’PARALLEL�POLL�CONFIGUREPPE‡EQU„8’PARALLEL�POLL�ENABLEPPD‡EQU„9’PARALLEL�POLL�DISABLESPE‡EQU„10‘SERIAL�POLL�ENABLESPD‡EQU„11‘SERIAL�POLL�DISABLEDCL‡EQU„12‘DEVICE�CLEARLLO‡EQU„13‘LOCAL�LOCKOUTTCT‡EQU„14‘TAKE�CONTROL!SDC‡EQU„15‘SELECTIVE�DEVICE�CLEARGTL‡EQU„16‘GO�TO�LOCAL GET‡EQU„17‘GROUP�EXECUTE�TRIGGER(AUX‡EQU„18‘SEND�AUXILIARY�COMMAND�STRING)INˆEQU„19‘INITIATE�DMA�WRITE�(INPUT�DATA)*OUT‡EQU„20‘INITIATE�DMA�READ�(OUTPUT�DATA)6TERM†EQU„21‘SEND�TERMINATION�CHARACTERS�(IF�NECESSARY)#SPB‡EQU„22‘RECEIVE�SERIAL�POLL�BYTE#SEOI†EQU„23‘SEND�EOI�WITH�LAST�BYTE*;*ˆNOTE:…ALL�MENU�ITEMS�GREATER�IN�VALUE�THAN�'AUXTYPE'�WILL5*’CAUSE�THE�MENU�ITEM�FOLLOWING�TO�BE�EXECUTED�IMMED-7*’IATELY�SINCE�THESE�DO�NOT�CAUSE�A�HARDWARE�INTERRUPT.*:*ˆCLASS�II�MENU�ITEMS:�AUXILIARY�COMMANDS�TO�THE�TMS-9914A2*œ(NO�INTERRUPTS�ARE�EXPECTED�FROM�THESE�COMMANDS)*-AUXTYPEƒEQU„24‘GENERAL�AUXILIARY�COMMAND�CODE9*’(TMS9914A�AUXILLIARY�COMMAND�FOLLOWS�'AUXTYPE'�IN�MENU)*<*ˆCLASS�III�MENU�ITEMS:�FUNCTION�COMMANDS�-�THESE�PROCESSORS2*�EXECUTE�TO�COMPLETION�AND�GENERATE�NO�INTERRUPT.*)FSIC†EQU„25‘SEND�INTERFACE�CLEAR�FUNCTION*FRPP†EQU„26‘REQUEST�PARALLEL�POLL�FUNCTION.FRELCTLƒEQU„27‘RELEASE�CONTROL�OF�BUS�FUNCTION+FTAKCTLƒEQU„28‘TAKE�CONTROL�OF�BUS�FUNCTION.FREQCTLƒEQU„29‘REQUEST�CONTROL�OF�BUS�FUNCTION.FREQSTAT‚EQU„30‘REQUEST�DEVICE�STATUS�FUNCTION)FCNFGDEV‚EQU„31‘CONFIGURE�DEVICE�FUNCTION5FCHDEFLT‚EQU„32‘CHANGE�DEFAULT�CONFIGURATION�FUNCTION/FSETPP„EQU„33‘SET�PARALLEL�POLL�STATUS�FUNCTION-FSETSP„EQU„34‘SET�SERIAL�POLL�STATUS�FUNCTIONFGTS†EQU„35‘GO�TO�STANDBY*ŠPAGE*(*ƒBIT�EQUATES�TO�TEST�VALUES�IN�VALPARTB*BVALTALK‚EQU„0’TALKER�ABILITYBVALLIST‚EQU„1’LISTENER�ABILITY BVALCTLƒEQU„2’CONTROLLER�ABILITY(BVALSCTL‚EQU„3’SYSTEM�CONTROLLER�ABILITYBVALSRQƒEQU„4’SRQ�ABILITYBVALPBUF‚EQU„5’PRIMARY�BUFFERBVALSBUF‚EQU„6’SECONDARY�BUFFER#BVALCBUF‚EQU„7’CONFIGURATION�BUFFER*BVALTMOD‚EQU„8’TALKER�MODEBVALLMOD‚EQU„9’LISTENER�MODEBVALCMOD‚EQU„10‘CONTROLLER�MODE,BVALBTLM‚EQU„11‘IF�BUS�THEN�MUST�BE�T/L�MODE$BVALBDEV‚EQU„12‘BUSSABLE�DEVICE�ONLYBVALBUSƒEQU„13‘CONTROL�BUS!BVALSADR‚EQU„14‘SECONDARY�ADDRESS BVALBCHG‚EQU„15‘IN�CHARGE�OF�BUS*#*ƒEQUATES�FOR�ENTRIES�IN�'VALPARTB'*6VALTALKƒEQU„1<VALBDEVƒEQU„1< upts�command�was+*£issued�for�one�or�more�channels�that�were+*£already�in�the�requested�state.�This�code&*£is�only�one�where�command�processing-*£continues�after�the�error�is�detected.�Thus-*£this�code�may�be�interpreted�as�an�error�or±8º7Â8Ê$*£warning�at�the�option�of�the�user.ŠSPC„29INPAOPNƒEQU„$FE’One�or�more�channels�specified�in�an�Open**£Channels�command�are�already�assigned�to+*£requesting�task.�A�channel�must�be�closed**£before�a�new�open�command�can�be�issued.ŠSPC„28INPDUPLƒEQU„$FD’Duplicate�channel�numbers�were�specified+*£in�an�Open�Channels�command.�Each�channel+*£number�may�only�be�specified�once�in�each*£command�parameter�block.ŠSPC„2G*ƒThe�following�equates�define�the�command�codes�that�are�placed�in�theF* CMDCOD field of the IPB. The command mnemonics are restricted to sixH* characters in length to maintain compatibility with the variable names * used in ANSI Standard FORTRAN.ŠSPC„26INOPEN„EQU„$01’This�is�the�Open�Channels�Command�code.ŠSPC„26INCLOS„EQU„$02’This�is�the�Close�All�Channels�or�Close!*£Selected�Channels�Command�code.ŠSPC„24INSTAT„EQU„$05’This�is�the�Read�Input�Status�Command*£codeŠSPC„24INENAB„EQU„$06’This�is�the�Enable�Interrupts�Command*£code.ŠSPC„25INDSAB„EQU„$07’This�is�the�Disable�Interrupts�Command*£code.ŠPAGEF*ƒThe�following�offsets�define�the�format�of�the�Standard�Input�DriverL* Parameter Block used for the following commands: Close All Channels, CloseF* Selected Channels, Read Input Status, Enable Interrupts, and Disable * Interrupts.ŠSPC„2 ŠOFFSET�06CMDSTA„DS.Wƒ1”This�field�contains�an�8-bit�status�code(*£that�is�returned�by�the�driver�command+*£handler�upon�completion�of�the�command�or,*£when�an�error�condition�has�been�detected.+*£With�the�execption�of�status�code�INPINTR)*£($FF)�described�above,�a�non-zero�value+*£returned�in�this�field�means�an�error�was%*£detected�in�the�IPB�and�none�of�the#*£requested�command�operations�were *£performed.ŠSPC„22CMDCOD„DS.Wƒ1”This�field�contains�one�of�the�Input'*£Module�Driver�Command�codes�described *£earlier.ŠSPC„21CMDCHM„DS.Wƒ1”This�field�contains�a�bit�mask�that+*£identifies�the�channels�to�be�affected�by%*£the�command.�Bits�0-7�correspond�to'*£channels�0-7�of�the�input�module.�All)*£channels�corresponding�to�set�mask�bits,*£will�be�affected�by�the�command.�Mask�bits**£8-16�are�reserved�and�must�all�be�clear.ŠSPC„21CMDLEN„EQU„*”This�is�the�standard�IPB�length�that%*£applies�to�all�commands�except�Open"*£Channels�and�Close�All�Channels.ŠPAGEG*ƒThe�following�offsets�define�the�format�of�the�Open�Channels�command.K* The IPB for this command specifies the number of channels to be opened byM* the command to a maximum of 8. Following the number of channels is a seriesO* of 4 byte data blocks. Each data block specifies the number of the channel toL*�be�opened.‚When�an�interrupt�channel�(0-3)�is�being�opened,�the�data�blockK* also contains a channel configuration word. The IPB may contain more data@* blocks than necessary for the number of channels to be opened.ŠSPC„22ŠOFFSET�CMDCHM�The�Command�Status�and�Command�Code-*£fields�of�the�Open�Channels�Command�are�the'*£same�as�specified�in�the�standard�IPB *£format.ŠSPC„25CMDNCO„DS.Wƒ1”This�field�contains�the�number�of�input+*£channels�to�be�open�by�this�command.�This$*£value�must�be�in�the�range�of�1-8.ŠSPC„24CMDCHL„EQU„*”This�is�the�starting�offset�of�the�list+*£of�data�blocks�specifying�the�channels�to *£be�opened.ŠPAGEK*‚The�following�offsets�define�the�format�of�each�data�block�in�the�list�of* channels to open.ŠSPC„2 ŠOFFSET�02OPNCHN„DS.Wƒ1”This�field�contains�the�number�of�an)*£input�channel�to�be�opened.�This�number*£must�be�in�the�range> �1-8.ŠSPC„24OPNCFG„DS.Wƒ1”This�field�specifies�how�the�interrupt+*£channel�being�opened�is�to�be�configured.)*£This�field�is�ignored�for�non-interrupt-*£channels.�This�field�is�broken�into�several*£sub-fields�as�follows:**¦Bit(s)‚Function**§0†Reserved�(must�be�zero)**§1�=�1‚Disable�Interrupts*«0‚Enable�Interrupts*#*§2�=�1‚Interrupt�on�deenergized�to*°energized�transition*«0‚Interrupt�on�energized�to*°deenergized�transition*(*§3�=�1‚WAKEUP�task�on�channel�interrupt!*«0‚Queue�an�event�to�the�task�on*®channel�interrupt**§5-7„Reserved�(must�be�zero)*&*§8-14ƒLength�of�the�software�debounce*®interval�in�units�of�4�milli-!*®seconds.�Zero�if�no�debounce�is *®desired.* *§15�=�1�Use�the�default�channel*®configuration�specified�below"*¬0�Use�the�user�specified�channel*®configurationŠSPC„24OPNCDB„EQU„*”This�is�the�length�of�a�data�block�that#*£specifies�a�channel�to�be�opened.ŠSPC„23DEFLTCFG‚EQU„0”The�default�channel�configuration�is*£defined�as�follows:**¨Interrupts�Enabled'*¨Interrupt�on�energized�to�deenergized *ªtransition*¨Queue�event�on�interrupt*¨No�software�debounce*************************** Ending of &.M610CMD.EQ ***************************éééé‰PAGE******************************* Beginning of &.M610INTQ.EQ ********************************* Interrupt Queue Control Table*G*ƒThese�equates�define�the�offsets�of�fields�within�the�Interrupt�QueueI* Control Table. This table resides in the Global Variable Area allocatedH* by the system initialization routine. It is used by the Foreground andJ* Background Interrupt handlers to control the Interrupt Processing Queue.L* The queue length in bytes must be an power of two. This restriction speedsG* up queue processing by minimizing the time necessary to perform queue* pointer wraparound.* ŠOFFSET‚03QID‡DS.Lƒ1”This�field�is�initialized�to�contain�the'*£ASCII�string�'IQCT'�allow�easy�visual(*£location�of�the�queue�control�table�in*£memory�dumps.ŠSPC„21QBAB†DS.BƒBABBLN�This�BAB�is�used�to�activate�the'*£background�interrupt�handler�when�the)*£queue�contains�an�interrupt�entry�to�be *£processed. /QPTR†DS.Lƒ1”This�field�contains�the�base�memory(*£address�of�the�interrupt�queue�itself. J*ƒThe�queue�input�and�output�offset�fields�must�be�adjacent�in�memory�withK* the input offset at the lower address and the output offset at the higherG*�address.‚This�is�required�because�a�CMPM.W�(Ax)+,(Ax)+�instruction�isM* used to check for an empty queue without requiring interrupts to be masked. 4QINOFSTƒDS.Wƒ1”This�field�contains�the�offset�of�the$*£first�free�queue�location�where�an *£interrupt�entry�can�be�placed. 5QOUTOFST‚DS.Wƒ1”This�field�contain? s�the�offset�of�the)*£next�interrupt�entry�to�be�removed�from *£the�queue. 6QWAMSK„DS.Wƒ1”This�field�contains�the�queue�length�-�1%*£and�is�ANDed�to�either�the�input�or)*£output�offset�field�to�force�wraparound+*£from�the�high�address�end�of�the�queue�to*£the�low�address�end. 4QMAXIL„DS.Wƒ1”This�upper�byte�of�this�field�contains%*£the�hardware�interrupt�level�of�the**£highest�priority�input�module�controlled,*£by�this�driver�and�the�lower�byte�is�zero.Ò5Û4&*£This�field�is�used�by�the�Foreground**£Interrupt�Handler�to�raise�the�processor,*£interrupt�mask�while�a�new�entry�is�placed$*£in�the�Interrupt�Processing�Queue. 0IQCTLN„EQU„*”This�is�the�length�of�the�Interrupt*£Queue�Control�Table.ŠPAGE*"* Interrupt Processing Queue Entry*I*ƒThese�equates�define�the�format�of�an�interrupt�entry�within�the�queue.L* the entry length in bytes must be a power of 2 so the entry is padded withM* several reserved bytes to make a total of 16 bytes per entry. The order andM* offsets of the interrupt queue entry sub-fields must be maintained since anK* instruction of the form MOVEM.L Dx/Dx/Ax, or MOVEM.L ,Dx/Dx/Ax isN* use to place interrupt entries into the queue and to remove entries from the* queue respectively. ŠOFFSET�02IQETIMEƒDS.Lƒ1”This�field�contains�the�approximate,*£time�at�which�the�interrupt�occurred.�This,*£time�is�obtained�from�the�TIMEOD�parameter**£in�SYSPAR�and�is�accurate�to�the�nearest+*£millisecond�subject�to�the�granularity�of$*£the�RMS68K�real-time�clock�source. ,ŠDS.Bƒ3”This�field�acts�as�a�place�holder�so+*£the�status�byte�below�will�be�loaded�into,*£the�low-order�byte�of�a�data�register�even'*£though�all�queue�entries�are�read�and(*£written�via�a�MOVEM.L�instruction.‚The)*£content�of�these�three�bytes�is�assumed *£to�be�UNDEFINED�by�the�driver. 8IQESTATƒDS.Bƒ1”This�field�contains�a�bit�mask�specifying%*£the�input�channel�or�channels�which*£generated�the�interrupt(s). 4IQECCB„DS.Lƒ1”This�field�contains�the�CCB�address�of%*£the�input�module�that�generated�the *£interrupt. -ŠDS.Bƒ4”These�reserved�bytes�are�necessary�to**£pad�the�queue�entry�length�in�bytes�to�a*£power�of�two. 0IQENTLNƒEQU„*”This�is�the�length�of�an�interrupt*£processing�queue�entry.**************************** Ending of &.M610INTQ.EQ ****************************‰PAGE****************************** Beginning of &.M615DRV.EQ *******************************2*‰EQUATES�SPECIFICALLY�FOR�MVM615�DRIVER�(D615.SA)*ACOPEN„EQU„1’OPEN�COMMAND�CODEACOCLS„EQU„2’CLOSE�COMMAND�CODE"ACOUT…EQU„3’OUTPUT�ON�COMMAND�CODE$ACOOFF„EQU„4’OUTPUT�OFF�COMMAND�CODE"ACOSTA„EQU„5’OUTPUT�STATUS�COMMANDX1ˆEQU„6’(not�used)X2ˆEQU„7’(not�used)"ACOPLS„EQU„8’PULSED�OUTPUT�COMMAND* *‰ACO�COMMAND�PARAMETERS�OFFSETS* ŠOFFSET�0 CMDSTA„DS.Wƒ1’ACO�command�statusCMDCOD„DS.Wƒ1’ACO�command�codeCMDCHN„DS.Wƒ1’#�of�channels CMDNXT„EQU„*ŠOFFSET�CMDNXTNUMCHANƒDS.Wƒ1’channel�number$CHNCNFGƒDS.Wƒ1’channel�configuration4OPNTRY„EQU„*-CMDNXT‹#�of�bytes�for�each�open�channel**‰ACOTBL�OFFSETS8*‰header�information�set�up�during�system�initialization9*‰all�ACO�entries�set�to�$FF�during�system�initialization* ŠOFFSET�0ACOEYE„DS.Lƒ1’!ACO�eye�catcher!ACOLNG„DS.Wƒ1’#�of�bytes�in�table4ACOOFSTƒDS.Wƒ1’offset�to�next�available�ACO-ID�entryB*ACOIO is an offset which points to a location within ACOTBL which<*‡contains�a�value�which�is�the�offset�relative�to�ACOTBL�to6*‡the�IO�image�maps�within�ACOTBL.‚ACOTBL�itself�is�an4*‡absolute�address�set�in�SYSGEN.‚It�is�accessed�by:6*‡MOVE.L‚ACOTBL,An‚(moves�address�of? �ACOTBL�to�address?*‡register�n).‚MOVE‚ACOIO(An),Dn‚(ACOIO�is�the�offset�to�data).'ACOIO…DS.Wƒ1’offset�to�start�of�IO�maps"ACONAL„DS.Bƒ1’#�of�CCB's�allocated*ACONMAXƒDS.Bƒ1’max�#�of�CCB's�can�allocate"ACONTRYƒEQU„*’table�entries�followŠOFFSET�ACONTRYACOID…DS.Lƒ1’ACO�module�ID6*‚---ƒ---ƒStart�of�channel�configuration�table‚---ƒ---8*ˆEach�channel�configuration�entry�consists�of�2�fields;/*ˆ(1)�User�ID�(the�user's�TCB�address)�4�bytes.%*ˆ(2)�Channel�configuration,�2�bytes.5*ˆThere�is�space�reserved�for�8�configuration�entries*)ŠDS.Lƒ1’user�task�TCB�address�-�channel�0)ŠDS.Wƒ1’channel�configuration�-�channel�00ŠDS.Bƒ7*6�rest�of�channels�(6�bytes�per�channel)3ACOIDLNG‚EQU„*-ACONTRYŠlength�of�1�ACO�module�entry*ŠPAGE ŠOFFSET�0ã=ìCô*/*‚Offsets�to�fields�within�configuration�table:#ACOTCB„DS.Lƒ1’user�task�TCB�address$ACOCNIFƒDS.Wƒ1’channel�configuration'CHANLNGƒEQU„*’length�of�1�channel�entry*$*‰IO�offsets�within�IO�map�in�ACOTBL*‰one�set�for�each�ACO�module*>*ƒThe�IO�image�map�contains�a�copy�of�the�data�in�the�data�reg*F*ƒBegin�IO�image�map�------------------------------------------------- ŠOFFSET�0&IODDR…DS.Lƒ1’memory�mapped�I/O�address'DODR07„DS.Wƒ1’data�output�reg.�chan�0-7$IOLNG…EQU„*’length�of�1�IO�map�entryF*‚End�IO�image�map�---------------------------------------------------*+*‰IO�OFFSETS�within�memory�mapped�I/O�space* ŠOFFSET�0IOADR…DS.Wƒ1’data�register**ˆDCO�DRIVER�ERROR�CODES*ACODVB„EQU„$F0�device�badACOBSY„EQU„$F1�device�busy,ACOICU„EQU„$F2�invalid�command�for�this�user1ACOCNM„EQU„$F3�invalid�channel�#�for�this�command$ACOINVDƒEQU„$F4�invalid�command�code-ACOMEM„EQU„$F5�no�memory�space�left�in�ACOTBL+ACOICNSƒEQU„$F6�illegal�channel�#�specified.ACOINC„EQU„$F7�invalid�#�of�channels�specified/ACOCNFGƒEQU„$F8�invalid�configuration�specified/ACOICC„EQU„$F9�invalid�command�for�this�channel:ACOMAX„EQU„$FA�exceeded�SYSGEN�specified�number�of�devicesACOIINTƒEQU„$FB�(not�used)#ACONTBLƒEQU„$FC�no�ACO�table�exists'ACONID„EQU„$FD�ACO�module�not�allocated%ACOPND„EQU„$FE�channel�already�opened*!*†---†---…STANDARDƒMACROS…---…---*H*Allocate macro allocates local storage as long words on the stack,(A7).,*Up to 6 variables may be allocated by name.C*These variables may then be referred to by name offset to stack orH*they may be stored to (by macro STORE) and loaded from (by macro LOAD).*3*Prior to exit, the variables must be de-allocated.*ALLOCATE MACRO*B*Allocate reserves storage on the stack for local named variables,8*‚which�are�referred�to�as�an�offset�from�stack�pointer.\1 SET 2ŠIFGT�(NARG-1)\2 SET 6ŠENDCŠIFGT�(NARG-2) \3 SET 10ŠENDCŠIFGT�(NARG-3) \4 SET 14ŠENDCŠIFGT�(NARG-4) \5 SET 18ŠENDCŠIFGT�(NARG-5) \6 SET 22ŠENDC*ŠSUB.L‚#(NARG*4)+4,A7*ŠENDM*I*LOAD macro allows loading a register from local storage named variables. *The�syntax�is:‚LOAD�Rn,VARNAME.9*The storage is DYNAMICALLY ALLOCATED by macro 'ALLOCATE'* LOAD†MACROŠMOVE.L�\2(A7),\1ŠENDM*H*STORE macro allows storing a register to local storage named variables.!*The�syntax�is:‚STORE�Rn,VARNAME.?*The local storage is DYNAMICALLY ALLOCATED by macro 'ALLOCATE'* STORE…MACROŠMOVE.L�\1,\2(A7)ŠENDM**PUSHPOINT MACROŠMOVEM.L�A0-A6,-(A7)ŠENDM*POP_POINT MACROŠMOVEM.L�(A7)+,A0-A6ŠENDM* PUSHALLƒMACROŠMOVEM.L�A0-A6/D0-D7,-(A7)ŠENDM* POPALL„MACROŠMOVEM.L�(A7)+,A0-A6/D0-D7ŠENDM*************************** Ending of &.M615DRV.EQ ***************************@ éééé‰PAGE****************************** Beginning of &.M625DRV.EQ *******************************2*‰EQUATES�SPECIFICALLY�FOR�MVM625�DRIVER�(D625.SA)*DCOPEN„EQU„1’OPEN�COMMAND�CODEDCOCLS„EQU„2’CLOSE�COMMAND�CODE"DCOUT…EQU„3’OUTPUT�ON�COMMAND�CODE$DCOOFF„EQU„4’OUTPUT�OFF�COMMAND�CODE"DCOSTA„EQU„5’OUTPUT�STATUS�COMMANDX1ˆEQU„6’(not�used)X2ˆEQU„7’(not�used)"DCOPLS„EQU„8’PULSED�OUTPUT�COMMAND* *‰DCO�COMMAND�PARAMETERS�OFFSETS* ŠOFFSET�0 CMDSTA„DS.Wƒ1’DCO�command�statusCMDCOD„DS.Wƒ1’DCO�command�codeCMDCHN„DS.Wƒ1’#�of�channels CMDNXT„EQU„*ŠOFFSET�CMDNXTNUMCHANƒDS.Wƒ1’channel�number$CHNCNFGƒDS.Wƒ1’channel�configuration4OPNTRY„EQU„*-CMDNXT‹#�of�bytes�for�each�open�channel**‰DCOTBL�OFFSETS8*‰header�information�set�up�during�system�initialization9*‰all�DCO�entries�set�to�$FF�during�system�initialization* ŠOFFSET�0DCOEYE„DS.Lƒ1’!DCO�eye�catcher!DCOLNG„DS.Wƒ1’#�of�bytes�in�table4DCOOFSTƒDS.Wƒ1’offset�to�next�available�DCO-ID�entryB*DCOIO is an offset which points to a location within DCOTBL which<*‡contains�a�value�which�is�the�offset�relative�to�DCOTBL�to6*‡the�IO�image�maps�within�DCOTBL.‚DCOTBL�itself�is�an4*‡absolute�address�set�in�SYSGEN.‚It�is�accessed�by:6*‡MOVE.L‚DCOTBL,An‚(moves�address�of�DCOTBL�to�address?*‡register�n).‚MOVE‚DCOIO(An),Dn‚(DCOIO�is�the�offset�to�data).'DCOIO…DS.Wƒ1’offset�to�start�of�IO�maps"DCONAL„DS.Bƒ1’#�of�CCB's�allocated*DCONMAXƒDS.Bƒ1’max�#�of�CCB's�can�allocate"DCONTRYƒEQU„*’table�entries�followŠOFFSET�DCONTRYDCOID…DS.Lƒ1’DCO�module�ID6*‚---ƒ---ƒStart�of�channel�configuration�table‚---ƒ---8*ˆEach�channel�configuration�entry�consists�of�2�fields;/*ˆ(1)�User�ID�(the�user's�TCB�address)�4�bytes.%*ˆ(2)�Channel�configuration,�2�bytes.5*ˆThere�is�space�reserved�for�8�configuration�entries*)ŠDS.Lƒ1’user�task�TCB�address�-�channel�0)ŠDS.Wƒ1’channel�configuration�-�channel�00ŠDS.Bƒ7*6�rest�of�channels�(6�bytes�per�channel)3DCOIDLNG‚EQU„*-DCONTRYŠlength�of�1�DCO�module�entry*ŠPAGE ŠOFFSET�0ü=B +/*‚Offsets�to�fields�within�configuration�table:#DCOTCB„DS.Lƒ1’user�task�TCB�address$DCOCNIFƒDS.Wƒ1’channel�configuration'CHANLNGƒEQU„*’length�of�1�channel�entry*$*‰IO�offsets�within�IO�map�in�DCOTBL*‰one�set�for�each�DCO�module*J*ƒThe�IO�image�map�contains�a�copy�of�the�data�in�the�IO�control�&�ddr�rgs*F*ƒBegin�IO�image�map�------------------------------------------------- ŠOFFSET�0&IODDR…DS.Lƒ1’memory�mapped�I/O�address'DODR07„DS.Wƒ1’data�output�reg.�chan�0-7$IOLNG…EQU„*’length�of�1�IO�map�entryF*‚End�IO�image�map�---------------------------------------------------*+*‰IO�OFFSETS�within�memory�mapped�I/O�space* ŠOFFSET�0IOADR…DS.Wƒ1’data�register**ˆDCO�DRIVER�ERROR�CODES*DCODVB„EQU„$F0�device�badDCOBSY„E@ QU„$F1�device�busy,DCOICU„EQU„$F2�invalid�command�for�this�user1DCOCNM„EQU„$F3�invalid�channel�#�for�this�command$DCOINVDƒEQU„$F4�invalid�command�code-DCOMEM„EQU„$F5�no�memory�space�left�in�DCOTBL+DCOICNSƒEQU„$F6�illegal�channel�#�specified.DCOINC„EQU„$F7�invalid�#�of�channels�specified/DCOCNFGƒEQU„$F8�invalid�configuration�specified/DCOICC„EQU„$F9�invalid�command�for�this�channel:DCOMAX„EQU„$FA�exceeded�SYSGEN�specified�number�of�devicesDCOIINTƒEQU„$FB�(not�used)#DCONTBLƒEQU„$FC�no�DCO�table�exists'DCONID„EQU„$FD�DCO�module�not�allocated%DCOPND„EQU„$FE�channel�already�opened*!*†---†---…STANDARDƒMACROS…---…---*H*Allocate macro allocates local storage as long words on the stack,(A7).,*Up to 6 variables may be allocated by name.C*These variables may then be referred to by name offset to stack orH*they may be stored to (by macro STORE) and loaded from (by macro LOAD).*3*Prior to exit, the variables must be de-allocated.*ALLOCATE‚MACRO*B*Allocate reserves storage on the stack for local named variables,8*‚which�are�referred�to�as�an�offset�from�stack�pointer.\1 SET 2ŠIFGT�(NARG-1)\2 SET 6ŠENDCŠIFGT�(NARG-2) \3 SET 10ŠENDCŠIFGT�(NARG-3) \4 SET 14ŠENDCŠIFGT�(NARG-4) \5 SET 18ŠENDCŠIFGT�(NARG-5) \6 SET 22ŠENDC*ŠSUB.L‚#(NARG*4)+4,A7*ŠENDM*I*LOAD macro allows loading a register from local storage named variables. *The�syntax�is:‚LOAD�Rn,VARNAME.9*The storage is DYNAMICALLY ALLOCATED by macro 'ALLOCATE'* LOAD†MACROŠMOVE.L�\2(A7),\1ŠENDM*H*STORE macro allows storing a register to local storage named variables.!*The�syntax�is:‚STORE�Rn,VARNAME.?*The local storage is DYNAMICALLY ALLOCATED by macro 'ALLOCATE'* STORE…MACROŠMOVE.L�\1,\2(A7)ŠENDM**PUSHPOINT MACROŠMOVEM.L�A0-A6,-(A7)ŠENDM*POP_POINT MACROŠMOVEM.L�(A7)+,A0-A6ŠENDM* PUSHALLƒMACROŠMOVEM.L�A0-A6/D0-D7,-(A7)ŠENDM* POPALL„MACROŠMOVEM.L�(A7)+,A0-A6/D0-D7ŠENDM*************************** Ending of &.M625DRV.EQ ***************************éééé‰PAGE************************** Beginning of &.MAP.EQ ***************************(*†MAPBEG�IN�SYSPAR�AREA�POINTS�TO�MEMMAP*;*‡MEMMAP�ENTRY�--�EACH�ENTRY�DESCRIBES�ONE�MEMORY�PARTITION* ŠOFFSET�0,MAPMTYPƒDS.Bƒ1’MEMORY�TYPE,�BITS�7-4�(3-0=0)1MAPPARTƒDS.Bƒ1’PARTITION�NUMBER,�BITS�3-0�(7-4)=08MAPSTRAƒDS.Lƒ1’START�OF�AVAILABLE�MEMORY,�THIS�PARTITION0MAPFMLPƒDS.Lƒ1’POINTER�TO�FML�HEADER�INFORMATION2MAPENDAƒEQU„MAPFMLPŒEND�OF�AVAILABLE�MEMORY�--�ROMMAPENTSZ‚EQU„*’SIZE�OF�ENTRY*%*‡FREE�MEMORY�LIST�HEADER�INFORMATION* ŠOFFSET�04LOWFREEƒDS.Lƒ1’POINTER�TO�1ST�FREE�MEMORY�LIST�ENTRY:STRAVAIL‚DS.Lƒ1’START�OF�AVAILABLE�MEMORY�-�THIS�PARTITION8ENDAVAIL‚DS.Lƒ1’END�OF�AVAILABLE�MEMORY�-�THIS�PARTITION/MEMTYPEƒDS.Bƒ1’MEMORY�TYPEA �AND�PARTITION�NUMBERŠDS.Bƒ1’UNUSED*SEMFRMEM‚DS.Wƒ3’FREE�MEMORY�LIST�SEMAPHORE)SEMWTMEM‚DS.Wƒ3’WAIT�FOR�MEMORY�SEMAPHORE FMLHDSZƒEQU„**"*„LINKED�LIST�OF�FREE�MEMORY�SPACE* ŠOFFSET�02FMLFP…DS.Lƒ1’FORWARD�POINTER�TO�NEXT�ENTRY�IN�LIST/FMLBP…DS.Lƒ1’BACKWARD�POINTER�TO�PREVIOUS�ENTRY/FMLFREEƒDS.Lƒ1’FREE�PAGES�AVAILABLE�TO�ALLOCATE%FMLUSEDƒDS.Lƒ1’ALLOCATED�(USED)�PAGES*********************** Ending of &.MAP.EQ ***********************ééé'‰PAGE****************************** Beginning of &.MVME400.EQ ******************************O********************************************************************************4*‰Equates�relating�to�the�PIA�on�the�MVME�400�board.*O******************************************************************************* *?*‚Offsets�from�the�address�of�the�7201�A-side�control�register:*6PIADDR_A‚EQU„-$C�PIA's�A-side�Data�Direction�Register.High,�High-->Low�select0REGSELEC‚EQU„2’Direction�or�data�register�select#IRQX2FLG‚EQU„6’IRQx2�interrupt�flag#IRQX1FLG‚EQU„7’IRQx1�interrupt�flag "* PIA Input/Output bit devinitions=JUMPMASK‚EQU„%00000111ŠPA0-2,�In,�Baud�Rate�jumpers,�Port�1/26WRT_SELƒEQU„3’Bit�number,�PA3,�Out,�Select�1/2�jumpers2WRT_LEDƒEQU„4’Bit�number,�PA4,�Out,�Fail�LED�write0RED_LEDƒEQU„5’Bit�number,�PA5,�In,�Fail�LED�read.RED_DSR1‚EQU„6’Bit�number,�PA6,�In,�DSR�port�1.RED_DSR2‚EQU„7’Bit�number,�PA7,�In,�DSR�port�2*‚Arrangement�of�registers�off�memory-mapped�I/O�base�address.*CREG†EQU„0’Control�register.SREGB †EQU„0’Status�register.DREG†EQU„-4‘Data�register. L****************************************************************************#NCR0BRKƒEQU„%10000000ŠBREAK/ABORTŒ}6NCR0TXUƒEQU„%01000000ŠTx�UNDERRUNŒ}�USED�WITH�EXTERNALRxB>TxA>TxB�/�RxA>TxA>RxB>TxB*�%XXXXXX11ŠFIELD�DEFINITION!NCW2UD1ƒEQU„%00000011ŠUNDEFINED�}0NCW2BDMƒEQU„%00000010ŠBOTH�CHANNELS�DMA‡}�SYSTEM:NCW2ADMƒEQU„%00000001ŠCH.�A�DMA,�CH.�B�INT„}�CONFIGURATION/NCW2BINƒEQU„%00000000ŠBOTH�CHANNELS�INTERRUPT�}*L*****************************************************************************�%11XXXXXXŠFIELD�DEFINITION)NCW3BT8ƒEQU„%11000000ŠRx�8�BITS/CHARACTERB )NCW3BT6ƒEQU„%10000000ŠRx�6�BITS/CHARACTER)NCW3BT7ƒEQU„%01000000ŠRx�7�BITS/CHARACTER)NCW3BT5ƒEQU„%00000000ŠRx�5�BITS/CHARACTER*"NCW3AUEƒEQU„%00100000ŠAUTO�ENABLES&NCW3EHUƒEQU„%00010000ŠENTER�HUNT�PHASE#NCW3CRCƒEQU„%00001000ŠRx�CRC�ENABLE0NCW3ADSƒEQU„%00000100ŠADDRESS�SEARCH�MODE�(SDLC)1NCW3SYNƒEQU„%00000010ŠSYNC�CHARACTER�LOAD�INHIBITNCW3RXEƒEQU„%00000001ŠRx�ENABLE*L*****************************************************************************�%11XXXXXXŠFIELD�DEFINITION8NCW4CLKƒEQU„%11000000ŠMASK�FOR�ISOLATING�THE�CLOCK�FIELD$NCW4C64ƒEQU„%11000000ŠX64�CLOCK�MODE$NCW4C32ƒEQU„%10000000ŠX32�CLOCK�MODE$NCW4C16ƒEQU„%01000000ŠX16�CLOCK�MODE#NCW4C01ƒEQU„%00000000ŠX1‚CLOCK�MODE*�%XX11XXXXŠFIELD�DEFINITION(NCW4EXSƒEQU„%00110000ŠEXTERNAL�SYNC�MODE/NCW4SDLƒEQU„%00100000ŠSDLC�MODE�(01111110�FLAG)+NCW4B16ƒEQU„%00010000Š16�BIT�SYNC�CHARACTER+NCW4B08ƒEQU„%00000000Š08�BIT�SYNC�CHARACTER*�%XXXX11XXŠFIELD�DEFINITION+NCW4SB2ƒEQU„%00001100Š2�STOP�BITS/CHARACTER/NCW4SBHƒEQU„%00001000Š1�1/2�STOP�BITS/CHARACTER+NCW4SB1ƒEQU„%00000100Š1�STOP�BITS/CHARACTER&NCW4SMEƒEQU„%00000000ŠSYNC�MODE�ENABLE*%NCW4PEOƒEQU„%00000010ŠPARITY�EVEN/ODD#NCW4PEEƒEQU„%00000001ŠPARITY�ENABLE*L****************************************************************************/NCW5DTRƒEQU„%10000000ŠData�Terminal�Ready�(DTR)*�%X11XXXXXŠFIELD�DEFINITION)NCW5TX8ƒEQU„%01100000ŠTx�8�BITS/CHARACTER)NCW5TX6ƒEQU„%01000000ŠTx�6�BITS/CHARACTER)NCW5TX7ƒEQU„%00100000ŠTx�7�BITS/CHARACTER)NCW5TX5ƒEQU„%00000000ŠTx�5�BITS/CHARACTER* NCW5BRKƒEQU„%00010000ŠSEND�BREAKNCW5TXEƒEQU„%00001000ŠTx�ENABLE"NCW5CRCƒEQU„%00000100ŠCRC-16/CCITT+NCW5RTSƒEQU„%00000010ŠRequest�To�Send�(RTS)#NCW5TCEƒEQU„%00000001ŠTx�CRC�ENABLE*L****************************************************************************8NCW6SYNƒEQU„%11111111ŠSYNC�BITS�7-0‡}�SDLC�ADDRESS�FIELD*L****************************************************************************9NCW7SYNƒEQU„%11111111ŠSYNC�BITS�15-8†}�01111110�SDLC�FLAGSDLCFLAG‚EQU„$7E*************************** Ending of &.NEC7201.EQ ***************************éééééééC ‰PAGE************************** Beginning of &.NIO.EQ ************************** ŠLLENƒ120O*******************************************************************************O********************************************************************************.*ˆDATA�STRUCTURES�AND�EQUATES�FOR�INTERNAL�I/O**ˆMODIFICATION�HISTORY:*ˆ10/08/84‚Deleted�reference�to�IOPSMPB�secondary�map�bit.8*‰9/02/83‚Added�mag�tape�device�dependent�portion�of�DCB:*ˆ11/09/82‚Added�TNT�TASK�ID�for�HDS-400�network�terminals=*‰6/15/82‚Modified�DCB�so�that�default�configuration�is�last.6*‰4/13/82‚Initial�update�to�make�all�systems�the�same.B*‰2/23/82‚Addition�of�structures�used�in�CONFIGURE,�CHANGE�DEFAULT-*’CONFIGURATION,�and�REQUEST�STATUS�commands.<*‰9/14/81‚Revision�2.0�--�Additional�DCB�field�equates.‚R.V. *‰8/12/80*O*******************************************************************************O******************************************************************************* (IOSTIN„EQU„2’IOS�TRAP�INSTRUCTION�NUMBER(FHSTIN„EQU„3’FHS�TRAP�INSTRUCTION�NUMBER/FHSID…EQU„'.FHS'�FILE�HANDLING�SERVICES�TASK�ID1FMSID…EQU„'.FMS'�FILE�MANAGEMENT�SERVICES�TASK�ID.IOSID…EQU„'.IOS'�INPUT/OUTPUT�SERVICES�TASK�ID'IODID…EQU„'.IOD'�I/O�COMPLETION�TASK�ID(TTYID…EQU„'.TTY'�TERMINAL�DRIVER�TASK�IDqMy?�BŠDS.Bƒ1’EVENT�CODEŠDS.Lƒ1’SENDER�TASKŠDS.Lƒ1’SENDER�SESSIONEVTCOD„DS.Bƒ1’SUB-CODEŠDS.Bƒ1’RESERVEDEVTDCB„DS.Lƒ1’DCB�ADDRESSEVTLNG„EQU„*’EVENT�LENGTH *Ç!*‚FMS�I/O�EVENT�MESSAGE�STRUCTURE*Ç ŠOFFSET�0’START�WITH�TEXT�OFFSETŠDS.Bƒ1’EVENT�LENGTHŠDS.Bƒ1’EVENT�CODEŠDS.Lƒ1’SENDER�TASKŠDS.Lƒ1’SENDER�SESSIONEVTKOD„DS.Bƒ1’SUB-CODEŠDS.Bƒ1’RESERVEDEVTLUE„DS.Lƒ1’LUT�ENTRYEVTLUT„DS.Lƒ1’LUT%EVTTIN„DS.Bƒ1’TRAP�INSTRUCTION�NUMBER"EVTPRI„DS.Bƒ1’REQUESTOR'S�PRIORITY#EVTTSK„DS.Lƒ1’REQUESTOR'S�TASK�NAME(EVTSES„DS.Lƒ1’REQUESTOR'S�SESSION�NUMBEREVTUNM„DS.Wƒ1’USER�NUMBEREVTRD0„DS.Lƒ1’REQUESTOR'S�D0"EVTRA0„DS.Lƒ1’ADDRESS�OF�IOCB�(A0)EVTPST„DS.Bƒ1’PB�STATUSEVTPSZ„DS.Bƒ1’PB�LENGTHEVTLEN„EQU„*’LENGTH�OF�MESSAGE *Ç#*‚FHS�COMMAND�BIT�EQUATES�(16�BITS)*ÇFHALLOBƒEQU„7’ALLOCATEFHASGNBƒEQU„6’ASSIGN&FHCHNGBƒEQU„5’CHANGE�ACCESS�PERMISSIONFHRENMBƒEQU„4’RENAMEFHPROTBƒEQU„3’PROTECTFHCLOSBƒEQU„2’CLOSEFHDELTBƒEQU„1’DELETEFHCKPTBƒEQU„0’CHECKPOINT!FHRATTBƒEQU„7’RETRIEVE�ATTRIBUTES#FHFDENBƒEQU„6’FETCH�DIRECTORY�ENTRY$FHFDMNBƒEQU„5’FETCH�DEVICE�MNEMONICS"FHCHLUBƒEQU„4’CHANGE�LU�ASSIGNMENTFHDVOLBƒEQU„0’DEFAULT�VOLUME *Ç"*‚FHS�OPTION�BIT�EQUATES�(16�BITS)*ÇFOPOVRTB‚EQU„3’OVERWRITEFOPTRNBƒEQU„4’TRUNCATE$FOPABFBƒEQU„5’ALLOCATE�SHARED�BUFFER'FOPBEGBƒEQU„6’POSITION�AT�BEGINNING/END!FOPADRBƒEQU„11‘RETURN�PHY.ADR�BITFOPSLUBƒEQU„0’SEND/RECEIVE�LUFOPKEPBƒEQU„15‘KEEP�ASSIGNMENT **‚IOS�FUNCTION�CODE�EQUATES*IOSFIO„EQU„0’DATA�TRANSFERIOSFCM„EQU„1’COMMANDSIOSFPV„EQU„$80�PRIV.�COMMANDS *Ç"*‚IOS�OPTION�BIT�EQUATES�(16�BITS)*ÇIOPASCBƒEQU„0’ASCII/BINARYIOPWATBƒEQU„1’WAIT/PROCEED4IOPUNPBƒEQU„2’CONDITIONAL�PROCEED/UNCONDITIONAL�PROCIOPFORBƒEQU„3’FORMATTED/IMAGE*IOPBRKBƒEQC U„4’EXCLUSIVE�BREAK�NOTIFICATIONIOPECHBƒEQU„5’ECHO/NO�ECHOIOPRECBƒEQU„6’RECORD/BLOCK*IOPLRNBƒEQU„7’LOGICAL�RECORD/RANDOM�RECORD(IOPNOKBƒEQU„8’NO�KEY�RETURNED/RETURN�KEY0IOPNOCBƒEQU„9’NO�COMPLETION�ADDR/COMPLETION�ADDR!IOPINFBƒEQU„10‘INPUT�FORMAT/IMAGEIOPFTRKƒEQU„12‘FORMAT�TRACK&IOPCTABƒEQU„12‘CLEAR�TYPE�AHEAD�BUFFER(IOPCDOBƒEQU„12‘CLEAR�DISCARD�OUTPUT�MODEIOPTSKBƒEQU„15‘TASK�ID�SUPPLIED *Ç#*‚ATTENTION�EVENT�MESSAGE�STRUCTURE*Ç%ŠOFFSET�0’START�WITH�PARAMETER�OFFSETŠDS.Bƒ1’EVENT�LENGTHŠDS.Bƒ1’EVENT�CODEEVADEV„DS.Lƒ1’DEVICE�MNEMONICEVASTA„DS.Wƒ1’STATUS EVALEN„EQU„* *Ç(*‚ATTENTION�STATUS�BIT�EQUATES�(16�BITS)*ÇEVATNASƒEQU„1’DEVICE�ASSIGNED *Ç *‚IOS�PARAMETER�BLOCK�EXTENSIONS*Ç*ŠOFFSET�IOSBLN�START�WITH�END�OF�IOS�BLOCK!IOSTSK„DS.Lƒ1’REQUESTOR'S�TASK�ID!IOSSES„DS.Lƒ1’REQUESTOR'S�SESSIONIOSNLN„EQU„*’TOTAL�LENGTHŠPAGE *À***********5*‚DEVICE�CONTROL�BLOCK�(DCB)�DATA�STRUCTURE•*‚D�C�B‚* *À*********** ŠOFFSET�0’START�WITH�ZERO�OFFSET#DCBPTR„DS.Lƒ1’POINTER�TO�NEXT�BLOCKDCBAID„DS.Lƒ1’ASCII�IDENTIFIER6DCBDCQ„DS.Lƒ1’ADDRESS�OF�DCQ�ENTRY�(0=NOTHING�PENDING)#DCBDID„DS.Lƒ2’DRIVER�ID�(TASK�NAME)$DCBLUT„DS.Lƒ1’ADDRESS�OF�CURRENT�LUT2DCBATT„DS.Lƒ1’ATTRIBUTES�OF�DEVICE†7/6/83�MOTOROLA DCBWCD„DS.Bƒ1’WRITE�PROTECT�CODEDCBRCD„DS.Bƒ1’READ�PROTECT�CODEDCBTMO„DS.Wƒ1’USE�FLAGDCBWNT„DS.Wƒ1’WRITE�COUNTDCBRNT„DS.Wƒ1’READ�COUNTDCBFLG„DS.Wƒ1’DEVICE�FLAGDCBCCB„DS.Lƒ1’CHANNEL�ID#DCBCDV„DS.Bƒ1’CHANNEL�DEVICE�NUMBER!DCBPRI„DS.Bƒ1’CONNECTION�PRIORITY#DCBCRN„DS.Lƒ1’CURRENT�RECORD�NUMBER8DCBIOS„DS.BƒIOSBLN�ROOM�FOR�IOCB�(EXCLUDING�EXTENSIONS!),DCBLBA„DS.Lƒ1’LOGICAL�ADDRESS�OF�PARAM�BLOCK-DCBCCF„DS.Bƒ1’CONFIGURATION�COORDINATION�FLAG'*�0�-->�DEVICE�IN�DEFAULT�CONFIGURATION2*�1�-->�DEVICE�MAY�NOT�BE�IN�DEFAULT�CONFIGURATIONDCBBCT„DS.Bƒ1’BREAK�COUNT*DCBBRK„DS.Lƒ1’ADDRESS�OF�BREAK�SERVICE�LUT#DCBSRV„DS.Lƒ1’BREAK�SERVICE�ADDRESS7DCBTSK„DS.Lƒ1ˆEVENT�CLAIMER�-->�TASK�NAME�7/6/83�IEE488�SESSION�NUMBERˆ7/6/83�IEE488@DCBSUP„DS.Lƒ1ˆADDRESS�OF�SUPERVISOR�DCB�OR�SESSION„7/6/83�IEE4880*™NUMBER�IF�THIS�IS�SUPERVISOR�DCBˆ7/6/83�IEE488ADCBSOP„DS.Lƒ1ˆSUPERVISOR/SUBORDINATE�DCB�OPEN�COUNTƒ7/6/83�IEE488-*™FOR�EVERY�SUBORDINATE�DEVICE†9/13/83�IEE488.*™THAT�IS�OPENED,�THIS�COUNT�IS…9/13/83�IEE488!*™INCREMENTED�BY�1’9/13/83�IEE488DCBRSV„DS.Lƒ1‹4�BYTESŠDS.Lƒ1‹4�BYTESŠDS.Lƒ1‹4�BYTESŠDS.Lƒ1‹4�BYTES*.*œRESERVED�BUFFER�OF�16�BYTES�FOR�FUTURE�USAGE+*œBETWEEN�THE�DEVICE�INDEPENDENT�AND�DEVICE*œDEPENDENT�INFORMATION**‚DEVICE�DEPENDENT�PORTION*+DCBDEV„EQU„*’START�DEVICE�DEPENDENT�PORTION&DCBLEN„EQU„DCBDEV+IOSREC†RECORD�LENGTH%DCBSEC„EQU„DCBDEV+IOSRSZ†DISK�SECTORS)DCBSIZ„EQU„DCBDEV+IOSRSZ†SCREEN/PAGE�SIZE&DCBTMW„EQU„DCBDEV+IOSWTO†WRITE�TIMEOUT%DCBTMR„EQU„DCBDEV+IOSRTO†READ�TIMEOUT*E* DEVICE DEPENDENT PORTION FOR TTY COMPATABILITY THAT WAS THROWN AWAY * ORIGINALLY*)DCBSBS„EQU„DCBDEV+IOSBRC†PROGRAMMING�INFO)DCBHBS„EQU„DCBDEV+IOSRTV†PROGRAMMING�INFO�OFFLINE„1�-->�ONLINEDFLGWP„EQU„1„WRITE�PROTECT¬"DFLGSC„EQU„2„DEVICE�STATUS�CHANGE¥+DFLGIN„EQU„3’DEVICE�BUSY�FOR�INITIALIZATION*DFLGCF„EQU„4’DEVICE�BUSY�FOR�CONFIGURATION(DFLGCT„EQU„5’CANCEL�TIMER�0-->NO‚1-->YES7DFLGIT„EQU„6’SET�-->�IGNORE�TIMER�EVENT�FOR�THIS�DEVICE#DFLIOEOT�EQU…7’0�-->�TASK�IS�ACTIVE#*£1�-->�EOT�TERMINATION�IN�PROGRESS*Ç*‚DCBATT�BIT�EQUATES�(16�BITS)*ÇDATRED„EQU„0’SUPPORTS�READDATWRT„EQU„1’SUPPORTS�WRITEDATBIN„EQU„2’SUPPORTS�BINARYDATRAN„EQU„3’SUPPORTS�RANDOMDATIMG„EQU„4’SUPPORTS�IMAGEDATHIO„EQU„5’SUPPORTS�HALT�I/O%DATPOS„EQU„6’SUPPORTS�POSITION�RECORDDATFMK„EQU„7’SUPPORTS�FILEMARKDATIND„EQU„8’INTERACTIVE�DEVICEDATPRT„EQU„9’PRINTER�DEVICEDATSPL„EQU„10‘SUPPORTS�SPOOLING+DATWRC„EQU„11‘SUPPORTS�WRITE�WITH�CRC�CHECK4DATSPD„EQU„12‘SUPPORTS�SPECIAL�PURPOSE�DEVICE�DRIVER,DATSHR„EQU�13�DEVICE�IS�NOT�SHARABLE¡IEEE488%DATBDV„EQU�14�BUSSABLE�DEVICE¨IEEE488 *ÄIEEE488*‹B13+B14�==>†00�=�NONEŸIEEE488$*œ01�=�NON-SHARED�BUS�DEVICEŽIEEE488%*œ10�=�SHARED�BUSSABLE�DEVICE�IEEE488)*œ11�=�NON-SHARED�BUSSABLE�DEVICE‰IEEE488 *Ç*‚DCBTMO�VALUES�(16�BITS)*Ç *ˆ0�=�NOT�ACTIVE�(OR�TIMED�OUT)¢$*ˆ+�=�ACTIVE�IN�DATA�TRANSFER�PHASEž"*ˆ-�=�ACTIVE�IN�TERMINATION�PHASE *ÇŠPAGE *À***********3*‚SYSTEM�VALUE�TABLE�(SVT)�DATA�STRUCTURE—*‚S�V�T‚* *À*********** ŠOFFSET�0’START�WITH�ZERO�OFFSET SVTSOP„DS.Lƒ1’I/O�SYSTEM�OPTIONS4SVTQST„DS.Lƒ1’START�OF�DEVICE�CONNECTION�QUEUE�SPACE/SVTQND„DS.Lƒ1’END�OF�DEVICE�CONNECT�QUEUE�SPACESVTQUE„DS.Lƒ1’FIRST�DCQ/SVTLST„DS.Lƒ1’START�OF�LOGICAL�UNIT�TABLE�SPACE-SVTLND„DS.Lƒ1’END�OF�LOGICAL�UNIT�TABLE�SPACESVTLUT„DS.Lƒ1’FIRST�TABLE�ENTRY&SVTDST„DS.Lƒ1’START�OF�DCB�TABLE�SPACE$SVTDND„DS.Lƒ1’END�OF�DCB�TABLE�SPACESVTDCB„DS.Lƒ1’FIRST�TABLE�ENTRYSVTSDCBƒDS.Bƒ1’DCB�SEMAPHORESVTSLUTƒDS.Bƒ1’LUT�SEMAPHORESVTSDCQƒDS.Bƒ1’DCQ�SEMAPHORESVTSFCBƒDS.Bƒ1’FCB�SEMAPHOREO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*0*SVTSID„DS.Lƒ4’I/O�SYSTEM�ID�AND�REVISION�NUMBER*SVTSTCFƒDS.Bƒ1*œSYSTEM�TASK�CORDINATION�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…DONESVTFUTUƒDS.Bƒ15#*œREMAINING�15�BYTES�FOR�FUTURE�USE*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<)SVTBRK„DS.Lƒ2’TASK-ID�OF�UNCLAIMED�BREAKS6SVTBSA„DS.Lƒ1’SERVICE�ADDRESS�FOR�UNCLAIMED�BREAK�TASK *Ç*‚EQUATES�FOR�SVTSOP�(32�BITS)*ÇSVOPMU„EQU„0’MULTIPLE�USERSVOPFM„EQU„1’FMS�PRESENT *À***********3*‚LOGICAL�UNIT�TABLE�(LUT)�DATA�STRUCTURE—*‚L�U�T‚* *À*********** ŠOFFSET�0’START�WITH�ZERO�OFFSET#LUTPTR„DS.Lƒ1’POINTER�TO�NEXT�TABLELUTTID„DS.Lƒ1’TASK-ID!LUTSES„DS.Lƒ1’TASK�SESSION�NUMBER$LUTMLU„DS.Bƒ1’MAXIMUM�NUMBER�OF�LUNS!LUTCAS„DS.Bƒ1’CURRENT�ASSIGNMENTSLUTUNM„DS.Wƒ1’USER�NUMBERLUTBEG„EQU„*’BEGIN�LU�ENTRIES*Ç ŠOFFSET�0’START�WITH�ZERO�OFFSET'LUTCAP„DS.Bƒ1’CURRENT�ACCESS�PERMISSION!LUTCSF„DS.Bƒ1’CURRENT�STATUS�FLAG'LUTATT„DS.Wƒ1’ATTRIBUTES�OF�DEVICE/FILE LUTDCB„DS.Lƒ1’ADDRESS�OF�DCB/FCB!LUTSEG„EQU„*’LENGTH�OF�EACH�ENTRY *Ç*‚LUTCSF�BIT�EQUATES�(8�BITS)*ÇLUSFAC„EQU„0’ACTIVELUSFIO„EQU„1’I/O�PENDINGLUSFCP„EQU„2’CLOSE�PENDINGLUSFAS„EQU„3’ASSIGN�PENDINGLUSFCW„EQU„4’CONNECTION�WAIT*LUSEVC„EQU„5’DRIVER�EVENTS�CLAIMED�IEEE488LUSFDV„EQU„7’DEVICE�ASSIGNMENT *À***********5*‚DEVICE�CONNECT�QUEUE�(DCQ)�DATA�STRUCTURE•*‚D�C�Q‚* *À*********** ŠOFFSET�0’START�WITH�ZERO�OFFSET#DCQPTR„DS.Lƒ1’POINTER�TO�NEXT�TABLE'DCQNXT„DS.Lƒ1’POINTER�TO�NEXT�DCB�ENTRYDCQDCB„DS.Lƒ1’ADDRESS�OF�DCBDCQLUT„DS.Lƒ1’ADDRESS�OF�LUT"DCQLUE„DS.Lƒ1’ADDRESS�OF�LUN�ENTRY%DCQLAD„DS.Lƒ1’LOGICAL�ADDRESS�OF�IOCBDCQTIN„DS.Bƒ1’TRAP�INDICATORDCQRES„DS.Bƒ1’RESERVED�BYTE$DCQPLN„DS.Bƒ1’PARAMETER�BLD OCK�LENGTHDCQPRI„DS.Bƒ1’PRIORITY DCQLEN„EQU„************************ Ending of &.NIO.EQ ***********************‰PAGE**************************** Beginning of &.PANEL.EQ ******************************‰FRONT�PANEL�EQUATES* ŠOFFSET�00FPDMPTST‚DS.Wƒ1’MEMORY�DUMP,�ENABLE,�SYSTEM�TESTFPTTO…DS.Wƒ1’TEST�TIME-OUTFPLEDSTƒDS.Wƒ1’LED�STATUS************************* Ending of &.PANEL.EQ *************************ééééé鉊PAGE************************** Beginning of &.PAT.EQ ****************************ˆPERIODIC�ACTIVATION�TABLE*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLEPAT‡DS.Lƒ1’!PAT„DEBUG�TOOL0PATFHDRƒDS.Lƒ1’ADDRESS�OF�1ST�ENTRY�IN�FREE�LIST*PATHDR„DS.Lƒ1’Address�of�1st�entry�in�list9PATTSIZƒDS.Lƒ1’Size�of�Periodic�Activation�table�in�bytes =PATBABTƒDS.BƒBABBLNŽSpace�for�BAB�used�to�schedule�routine�to*¤fire�PAT�nodes $PATENTRY‚EQU„*’OFFSET�TO�FIRST�ENTRY**ˆPAT�ENTRY�DEFINITION*&ŠOFFSET�0’OFFSET�IS�FROM�ENTRY�POINTER,PATNEXTƒDS.Lƒ1’POINTER�TO�NEXT�ENTRY�IN�LISTPATOCMSK‚EQU„$0202ŽMASK�FOR�BOTH�PATOCANC�AND�PATOFINL�OPTE ION.*9PATBIGDELTA�EQU‚$7FFFFFFFŠBig�delta�value�for�dummy�nodes*PATDUMMYID�EQUƒ$FFFFFFFEŠID�for�dummy�nodePATDATEID�EQU„$FFFFFFFF* Macro *�Entry:‚A1…points�to�PAT�header"*‰A2…points�to�entry�to�be�removed>*�Exit:ŠNo�registers�altered,�PAT�node�pointed�at�by�A2�now�in *“free�queue.*PAT_FREE_NODE MACROŠMOVE.L�PATFHDR(A1),PATNEXT(A2)ŠMOVE.L�A2,PATFHDR(A1)ŠENDM*********************** Ending of &.PAT.EQ ***********************’A‰PAGE************************** Beginning of &.RAD.EQ **************************K*==========================================================================**ˆEQUATE�FILE�FOR�RAD1�TABLE*K*==========================================================================*'*ˆThe�RAD1�table�consists�of�4�parts�--8*’(1)‚The�"header",�which�contains�various�constants�and'*œpointers�to�other�parts�of�the�table.9*’(2)‚RAUSRLST,�which�is�a�table�of�user-RAD�combinations2*œfor�keeping�track�of�which�users�are�using�which*œRADs�and�vice�versa.6*’(3)‚RARADLST,�which�is�a�table�of�RADs�showing�which)*œchannels�are�assigned,�RAD�status,�etc.@*�and‚(4)‚RATEMP,�which�is�a�section�of�memory�to�be�used�by�the**œdriver�for�temporary�or�working�storage.*K*==========================================================================**ƒHeader�area�equates�.�.�.*4RARADTBL‚EQU„0’Start�of�table�area,�set�to�"!RAD"�as*£an�"eye-catcher".FRARADLAD‚EQU„RARADTBL+4†Offset�to�start�of�RARADLST�in�the�RAD1�table.6RARADUSD‚EQU„RARADLAD+2‰#�of�RADs�in�RARADLST�already.9RANUMRAD‚EQU„RARADUSD+1‰#�of�RADs�defined�in�this�system.RAUSRLST‚EQU„RAHDRLNG‹RAUSRLST�always�starts�immediately�after*£the�header�area./RAUUSRNO‚EQU„0’Offset�into�table�entry�for�task*£name/session�#.;RAURADID‚EQU„RAUUSRNO+8‰Offset�into�table�entry�for�RAD-ID.8RAUSTATƒEQU„RAURADID+4‰Offset�into�table�entry�for�"RAD-&*£aborted/restarted"�flag.‚(Used�to�be(*£sure�all�users�of�a�RAD�are�"informed"*£of�abort�or�restart.)7RAUEROPT‚EQU„RAUSTAT+2ŠError-notification�options�flag.;RAUERSTO‚EQU„RAUEROPT+2‰Error-notification�storage�addr�for *£error�code.;RAUERSUB‚EQU„RAUERSTO+4‰Error-notification�subroutine�addr.›3¤5RAULNG„EQU„RAUERSUB+4‰Length�of�an�entry�in�RAUSRLST.**ƒRARADLST�equates�.�.�.*)RARADLID‚EQU„0’Offset�in�entry�to�RAD-ID.>RARDSTAT‚EQU„RARADLID+4‰Offset�into�table�entry�for�RAD�status*£flag.‰PAGE****************************** Beginning of &.SCN2681.EQ ****************************** H*‚The�Signetics�SCN2681�Dual�Universal�Asynchronous�Receiver/TransmitterB* (DUART) is a single-chip communications device that provides twoG* independent full-duplex asynchronous receiver/transmitter channels inA*�a�single-package.‚Each�channel�can�be�programmed�independently. G*‚Channel�A�is�addressed�beginning�at�the�base�of�the�memory-mapped�I/OL* space and Channel B is addressed beginning at byte 16. The mode registers,H* status, clock select, command, Rx holding and Tx holding registers areG* duplicated for each channel. The interrupt status, interrupt mask andG*�other�registers�can�be�accessed�from�just�one�channel.‚The�offsets�to-* the individual registers are defined below. ‰OFFSET„0*=*ˆArrangement�of�registers�off�memory-mapped�I/O�base�address*MREG1„EQU�0‰Mode�Register�1MREG2„EQU�0‰Mode�Register�2!SREG…EQU�2‰Status�Register�(read)(CSEL…EQU�2‰Clock�Select�Register�(write)CREG…EQU�4‰Command�Register0DREG…EQU�6‰Receiver/Transmitter�Holding�RegisterO*------------------------------------------------------------------------------5IPCR…EQU�8‰Input�Port�Change�Register�(read)‚-�A�side5ACR†EQU�8‰Auxiliary�Control�Register�(write)�-�A�side4ISR†EQU�10ˆInterrupt�Status�Register�(read)ƒ-�A�side3IMR†EQU�10ˆInterrupt�Mask�Register�(write)„-�A�side7OPSR…EQU�28ˆOutput�Port�'Set'ƒRegister�(write)�-�B�side9OPRR…EQU�30ˆOutput�Port�'Reset'�Register�(write)�-�B�side SPC 3*+*ˆMode�Register�1�field�definitions�(MREG1)* :*ˆMREG1�is�accessed�when�the�channel�mode�register�pointer-*ˆpoints�to�MREG1�which�occurs�after�a�reset. F* Number of data bits per character to be transmitted & received [1:0]*DTBPC5ƒEQU�%00000000‡5�data�bits/character*DTBPC6ƒEQU�%00000001‡6�data�bits/character*DTBPC7ƒEQU�%00000010‡7�data�bits/character*DTBPC8ƒEQU�%00000011‡8�data�bits/character * Parity type select [2]PARODDƒEQU�%00000100‡Odd‚parityÎ2×:ß6ç2ï) PAREVNƒEQU�%00000000‡Even�parity * Parity mode select [4:3]"PARENBƒEQU�%00000000‡Enable�parity!PARFRCƒEQU�%00001000‡Force‚parityPAROFFƒEQU�%00010000‡No…parity+PARMLTƒEQU�%00011000‡Special�Mulitdrop�Mode PAGE/* Error mode for the three FIFG O status bits [5]=EMBLCKƒEQU�%00100000‡Status�provided�for�all�char�since�reset1EMCHARƒEQU�%00000000‡Status�provided�char-by-char * Receiver interrupt select [6]5RXIFFFƒEQU�%01000000‡Interrupts�upon�FIFO�full�status:RXIRDYƒEQU�%00000000‡Interrupts�upon�receiver�ready�status &* Receiver Request-to-send control [7]6CRXRTSƒEQU�%10000000‡Use�RTSAN�output�for�flow�control SPC 3*+*ˆMode�Register�2�field�definitions�(MREG2)* :*ˆMREG2�is�accessed�when�the�channel�mode�register�pointer9*ˆpoints�to�MREG2�which�occurs�after�any�access�to�MREG1. 5* Stop bit length select for char lengths 6,7,8 [3:0]"SB09_16‚EQU�0�0.563�stop�bits/char"SB10_16‚EQU�1�0.625�stop�bits/char"SB11_16‚EQU�2�0.688�stop�bits/char"SB12_16‚EQU�3�0.750�stop�bits/char"SB13_16‚EQU�4�0.813�stop�bits/char"SB14_16‚EQU�5�0.875�stop�bits/char"SB15_16‚EQU�6�0.938�stop�bits/char"SB16_16‚EQU�7�1.000�stop�bits/char"SB25_16‚EQU�8�1.563�stop�bits/char"SB26_16‚EQU�9�1.625�stop�bits/char#SB27_16‚EQU�10Ž1.688�stop�bits/char#SB28_16‚EQU�11Ž1.750�stop�bits/char#SB29_16‚EQU�12Ž1.813�stop�bits/char#SB30_16‚EQU�13Ž1.875�stop�bits/char#SB31_16‚EQU�14Ž1.938�stop�bits/char#SB32_16‚EQU�15Ž2.000�stop�bits/charSB1†EQU�SB16_16‰1�stop�bit/char SB2†EQU�SB32_16‰2�stop�bits/char 5*ˆNOTE:�Add�0.5�to�values�shown�for�0-7�if�channel�is!*ˆprogrammed�for�5�bits/character * Clear-to-send control [4]9CTXCTSƒEQU�%00010000‡CTSAN�is�checked�before�transmitting )* Transmitter request-to-send control [5]>CTXRTSƒEQU�%00100000‡RTSAN�deactivated�if�transmitter�disabled * Channel mode select [7:6]*�They�are�cleared�when�the�IPCR�is�read.‚They�can�generate�an#* interrupt when programmed by ACR./DELIP0ƒEQU�4�(1)change�of�state�at�IP0�detected/DELIP1ƒEQU�5�(1)change�of�state�at�IP1�detected/DELIP2ƒEQU�6�(1)change�of�state�at�IP2�detected/DELIP3ƒEQU�7�(1)change�of�state�at�IP3�detected PAGE*;*ˆInterrupt�Status/Mask�Registers�bit�definitions�(ISR,IMR)* >* Setting a bit in the IMR causes an interrupt output when the%* correspnding bit is set in the ISR. (CLRTBEƒEQU�0�Bit�to�clear�TBE�interrupt.(CLRRCAƒEQU�1�Bit�to�clear�RCA�interrupt.(CLRBCIƒEQU�2�Bit�to�clear�BCI�interrupt.(CLRIP2ƒEQU�3�Bit�to�clear�IP2�interrupt. SPC 3*1*ˆOutput�Port�Set�and�Reset�Registers�(OPSR,OPRR)* 9* These fields are used to modify the RTS hardware lines.** To output a 'ready' signal, set RTS low.G* A write to OPSR sets RTS high: use OP0 for port A and OP1 for port B.F*�A�write�to�OPRR�sets�RTS�low:‚use�OP0�for�port�A�and�OP1�for�port�B.RTSAONƒEQU�$01RTSBONƒEQU�$02RTSAOFF‚EQU�$55RTSBOFF‚EQU�$AA*************************** Ending of &.SCN2681.EQ ***************************éé‰PAGE************************** Beginning of &.SEG.EQ ***************************/*ˆSEGMENT�DIRECTIVE�PARAMETER�BLOCK�DEFINITIONS*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLE"SGPB†EQU„*’SEGMENT�PARAMETER�BLOCK SGPBTASK‚DS.Lƒ1’TARGET�TASK�NAMEH (SGPBSESS‚DS.Lƒ1’TARGET�TASK�SESSION�CODE SGPBOPTƒDS.Wƒ1’DIRECTIVE�OPTIONS0SGPBATTR‚DS.Wƒ1’SEGMENT�ATTRIBUTES�(SEE�TSTSTAT)SGPBNAME‚DS.Lƒ1’SEGMENT�NAME%SGPBLA„DS.Lƒ1’SEGMENT�LOGICAL�ADDRESS%SGPBSL„DS.Lƒ1’SEGMENT�LENGTH�IN�BYTES,SGPBBUFF‚DS.Lƒ1’BUFFER�ADDRESS�USED�BY�RCVSA*SGPBL…EQU„*’SEGMENT�PARAMETER�BLOCK�LENGTH*#*„DIRECTIVE�OPTIONS�BIT�DEFINITIONS*;SGPBOATR‚EQU„15‘SEGMENT�ATTRIBUTES�GIVEN�IN�PARAMETER�BLOCK8SGPBOLAD‚EQU„14‘LOGICAL�ADDRESS�GIVEN�IN�PARAMETER�BLOCK;SGPBOPAD‚EQU„13‘EXEC�SUPPLIES�LOGICAL�ADDRESS�(=�PHYS�ADDR)0SGPBOPRM‚EQU„12‘MAKE�SHAREABLE�SEGMENT�PERMANENT:SGPBORMV‚EQU„11‘REMOVE�PERMANENT�STATUS�FROM�SHAREABLE�SEG;SGPBOLNG‚EQU„10‘USE�SEGMENT�LENGTH�GIVEN�IN�PARAMETER�BLOCK8SGPBOWAI‚EQU„10‘WAIT�IF�MEMORY�NOT�AVAILABLE�NOW�(GTSEG):SGPBOLES‚EQU„09‘WILL�SETTLE�FOR�LESS�MEMORY�THAN�REQUESTED,SGPBOPHY‚EQU„08‘ALLOCATE�AT�PHYSICAL�ADDRESS2SGPBOTYP‚EQU„07‘MEMORY�TYPE�OR�PARTITION�SPECIFIED*********************** Ending of &.SEG.EQ ***********************ééé÷"‰PAGE****************************** Beginning of &.SIG2661.EQ *******************************‰TTL„SIG2661�CHIP�DESCRIPTION ŠOFFSET�0*>*‚Arrangement�of�registers�off�memory-mapped�I/O�base�address.*CREG†EQU„6’Command�register.SREG†EQU„2’Status�register.DREG†EQU„0’Data�register.MREG1…EQU„4’Mode�register�1MREG2…EQU„4’Mode�register�2 L*****************************************************************************(*‚Status�register�bit�definitionsƒ(SREG)*TXRDY…EQU„0’transmitter�readyRXRDY…EQU„1’receiver�readyDNR‡EQU„2’device�not�readyPEˆEQU„3’parity�errorDOVR†EQU„4’data�overrunFEˆEQU„5’framing�error�or�break(*£framing�error�if�data�in�read�register*£break�if�read�register�is�0DCD‡EQU„6’data�carrier�detectDSRB†EQU„7’data�set�ready**K****************************************************************************)*‚Command�register�bit�definitions‚(CREG)*TXEN†EQU„0’enable�transmitter!DTR‡EQU„1’set�data�terminal�readyRXEN†EQU„2’enable�receiverFBˆEQU„3’force�break1ERRSET„EQU„4’reset�error�flags�in�status�registerRTS‡EQU„5’request�to�sendAAˆEQU„6’async:�auto�echo�modeASˆEQU„7’asycn�mode**N*******************************************************************************)*‚Mode�register�2�bit�definitions�(MREG2)*-*ˆbaud�rate�bits�defined�elsewhere�(bits�0-3)**„%1111xxxx�field�definition*4ITCX16„EQU„%01110000Šinternal�clocks,�x16�clock�rate**O*********************************************************************************)*‚Mode�register�1�bit�definitions‚(MREG1)*:*„%XXXXXX11‚field�definition�for�mode�and�baud�rate�factor**ASY16X„EQU„%00000010Šasynchronous�16x�rate*1*„%xxxx11xx‚field�definition�for�character�length*'BIT5†EQU„%00000000Š5�bits�per�character'BIT6†EQU„%00000100Š6�bits�per�character'BIT7†EQU„%00001000Š7�bits�per�character'BIT8†EQU„%00001100Š8�bits�per�character*'*…%xx11xxxx‚field�definition‚for�parity*!PENBL…EQU„%00010000Šparity�enableH  K (PTYPE…EQU„%00100000Šparity�type�even/odd*/*‰%11xxxxxx�field�definition�for�#�of�stop�bits*SB1‡EQU„%01000000Š1�stop�bit SB15†EQU„%10000000Š1.5�stop�bitsSB2‡EQU„%11000000Š2�stop�bits**************************** Ending of &.SIG2661.EQ ***************************éééééé‰PAGE************************** Beginning of &.SPL.EQ ***************************5******************************************************‚SPOOLER�EQUATE�FILE-*‚CONTAINS�MACROS�FOR�FMSINT�AND�ALL�INTERNAL*‚SPOOLER�EQUATES5*******************************************************ŠMACROS�FOR�SPLFMS�(FMSINT)** SFHSCO PARAMETERS: * 1. COMMAND * 2. OPTIONS0*�3.�ADDRESS�REGISTER�(�->‚FHS�PARAMETER�BLOCK�)*>SFHSCO„MACRO‚*ŽSETS�COMMAND�AND�OPTIONS�IN�FHS�PARAMETER�BLOCKŠMOVE.L�#((\1)*$10000)+\2,(\3)ŠENDM** SIOSCO PARAMETERS: * 1. COMMAND * 2. OPTIONS0* 3. ADDRESS REGISTER ( -> IOS PARAMETER BLOCK )*>SIOSCO„MACRO‚*ŽSETS�COMMAND�AND�OPTIONS�IN�IOS�PARAMETER�BLOCKŠMOVE.L�#((\1)*$10000)+\2,(\3)ŠENDM** SFATTR PARAMETERS:1* 1. OPTIONS: FILE TYPE, OR'ED INTO OPTIONS FIELD* 2. RECORD SIZE ( 0 => VRL )/* 3. FAB AND DATA BLOCK SIZE, 2 ONE BYTE VALUES * 4. KEY SIZE0* 5. ADDRESS REGISTER ( -> FHS PARAMETER BLOCK )*9SFATTR„MACRO‚*’SETS�FILE�ATTRIBUTES�FOR�FHS�ALLOCATE�CALLŠOR.Wƒ#\1,FHSOPT(\5)…OPTIONSŠIFNEƒ\2$�MOVE.W�#\2,FHSLRL(\5)…RECORD�LENGTHŠENDCŠIFEQƒ\2�CLR.W‚FHSLRL(\5)ŠENDC<ŠMOVE.L�#(\4)*$10000+\3,FHSSIZ(\5)�KEY,�FAB,�DATA�BLOCK�SIZEŠENDM*ŠPAGE**‚SPOOLER�QUEUE�ENTRY�STRUCTURE* ŠOFFSET�0"QDEVICEƒDS.Lƒ1’DEVICE�NAME�(ASCII)/QFORMS„DS.Lƒ1’FORMS�ID�DEFAULT�=�'STND'ƒ(ASCII)QVOL†DS.Lƒ1’VOLUME�NAME“(ASCII)"QUSERN„DS.Wƒ1’USER�NUMBER‘(BINARY)"QCATLG„DS.Lƒ2’CATALOG�NAME�(ASCII)QFILEN„DS.Lƒ2’FILENAME”(ASCII)QEXT†DS.Wƒ1’EXTENSION•(ASCII)QTASKN„DS.Lƒ1’TASK�NAME“(ASCII)#QSESS…DS.Lƒ1’SESSION�NUMBER�(ASCII)!QJOBID„DS.Lƒ1’JOB�NUMBER’(BINARY)"QPRI†DS.Bƒ1’TASK�PRIORITY‘(BINARY)#QLUN†DS.Bƒ1’LUN�FOR�OUTPUT�(BINARY)QDATE…DS.Lƒ1’DATE™(BINARY)QTIME…DS.Lƒ1’TIMI E™(BINARY)-QSIZE…DS.Lƒ1’FILE�SIZE�-�#�OF�BLOCKS†(BINARY)QSTAT…DS.Bƒ1’STATUS—(BINARY).QCOPYS„DS.Bƒ1’#�OF�COPIES�DEFAULT�=�1…(BINARY) QLNG†EQU„***‚QSTAT�BIT�DEFINITIONS*+QSTATRDY‚EQU„0’READY�TO�OUTPUT�SPOOLER�FILE L 7 "C *N 2 HQSTATACT‚EQU„1„ACTIVE-SPOOLER�FILE�ASSIGNED�AND�ALLOCATED�FOR�USER�INPUT-QSTATOUT‚EQU„2’BEING�OUTPUT�TO�SPOOLER�DEVICE4QSTATWAT‚EQU„3’MUST�WAIT�FOR�A�CONTINUE�TO�BE�ISSUED1QSTATFRM‚EQU„4’CAN'T�OUTPUT-NOT�MATCHING�FORMS�IDCQSTATIOE‚EQU„5‰IO�ERROR�ON�OUTPUT�FOUND,WAIT�FOR�CONTINUE�OR�CANCEL+QSTATCAN‚EQU„6’CANCEL�AN�ENTRY�BEING�OUTPUT7QSTATOAA‚EQU„7’BEING�OUTPUT�AND�ACTIVE(FILE�NOT�CLOSED)*?*‚ENTRY�STRUCTURE�OF�RESERVED�RECORDS�IN�THE�SPOOLER�QUEUE�FILE3*ˆ(RECORDS�0-8)�(RECORD�9�CONTAINS�LAST�JOB�NUMBER)* ŠOFFSET�0RDEV†DS.Lƒ1’DEVICE�NAME…(ASCII)RFRM†DS.Lƒ1’FORMS�ID‡(ASCII)HRSTAT…DS.L‚1�STATUS‚0=OK�TO�OUTPUT‚-1=FORMS�WAS�ISSUED,WAIT�FOR�CONTINUERLNG†EQU„*’ENTRY�LENGTH-RREC†EQU„QLNG/12ŒNUMBER�OF�ENTRIES�PER�RECORD**‚MISC�EQUATES*USER0…EQU„0’USER�NUMBER�0FOUT†EQU„3’LUN�FOR�OUTPUT�FILE DOUT†EQU„4’LUN�FOR�OUTPUT�DEVICE3BLANK…EQU„$20202020ŠBLANKS-USE�FOR�PARAMETER�BLOCKS0ENTRYLNG‚EQU„FHSNLN+EVTLEN†LENGTH�OF�1�ASQ�ENTRYCRˆEQU„$0D�CARRIAGE�RETURN�CODELFˆEQU„$0A�LINE�FEED�CODESPOOLF„EQU„$40�'@'&MYSES…EQU„1’.SPL�SESSION�NUMBER�NUMBER?BUFADR„EQU„$20000‹SEGMENT�START�ADDRESS�FOR�NON-SPOOLER�FILE�IO@BUFLNG„EQU„$A00ŠSEGMENT�LENGTH�(CHANGES�BY�SUBTASK�IF�TOO�SMALL)?REGOFF„EQU„50‹OFFSET�TO�REGISTERS�IN�START�TASK�PARAMETER�BLOCK&FOUR†EQU„4’OFFSET�OF�4�FOR�REGISTER�A1**‚SPLFLG�BIT�DEFINITIONS*9EOF‡EQU„0ŽFOUND�AN�END�OF�FILE�ON�READ�SPOOLER�QUEUE�FILE"PRNTER„EQU„1’DOING�IO�TO�A�PRINTER*NOTSPL„EQU„2’OUTPUTTING�A�NON-SPOOLER�FILE!PIOF†EQU„3’PROCEED�IO�IN�PROGRESS-IOERRF„EQU„4’IO�ERROR�FOUND�DURING�PROCEED�IO$RDYERR„EQU„5’OUTPUT�DEVICE�NOT�READY*1*‚SPLFLG1�BIT�DEFINITIONS�-�USED�BY�QUEUE�COMMAND*$OUTDEV„EQU„0’OUTPUT�MATCHING�DEVICES(OUTUSN„EQU„1’OUTPUT�MATCHING�USER�NUMBER+OUTSES„EQU„2’OUTPUT�MATCHING�SESSION�NUMBER OUTALL„EQU„3’OUTPUT�ENTIRE�QUEUE**‚BIT�DEFINITIONS�FOR�SUBTRERR*'RDERR…EQU„0’IO�ERROR�FOUND�ON�FILE�READ+WRTERR„EQU„1’IO�ERROR�FOUND�ON�DEVICE�WRITE?HDRERR„EQU„2‹IO�ERROR�FOUND�ON�DEVICE�WRITE�-�OUTPUTTING�HEADER?TERMERRƒEQU„3ŒTERMINATE�THE�SUB-TASK�AND�SET�TO�FILE�NOT�OUTPUT*A*‚SUB-TASK�EVENT�STRUCTURE�FOR�SENDING�IO�ERROR�EVENTS�TO�MONITOR* ŠOFFSET�0 IOERLNGƒDS.Bƒ1’EVENT�LENGTHƒ(12)IOERCDEƒDS.Bƒ1’EVENT�CODE„(32)+IOERMSGƒDS.Wƒ1’EVENT�MESSAGE�(SUBTERR�WORD)(IOERD0„DS.Lƒ1’CONTENTS�OF�DO�ON�IO�ERRORIOERNAMƒDS.Lƒ1’SUBTASK�NAME*%SUBTELNG‚EQU„12‘SUB-TASK�EVENT�LENGTH#SUBTECDE‚EQU„32‘SUB-TASK�EVENT�CODE*SPLECDEƒEQU„33‘.SPL�EVENT�CODE�TO�SUB-TASK*.*ˆERROR�MESSAGE�HANDLER�PARAMETR�BLOCK�OFFSETS* ŠOFFSET�0#EM_D0…DS.Lƒ1’D0�IOS/FHS�RETURN�CODE/EM_A0…DS.Lƒ1’A0�IOS/FHS�PARAMETER�BLOCK�ADDRESSEM_OPT„DS.Bƒ1’OPTIONS�FLAGEM_TLUNƒDS.Bƒ1’LDFLUN$EM_QRC„DS.Bƒ1’QUERY�RETURN�CHARACTEREM_KLUNƒDS.Bƒ1’CDFLUN(EM_SPA„DS.Lƒ1’START�ADDRESS�OF�USER�TEXT&EM_EPA„DS.Lƒ1’END�ADDRESS�OF�USER�TEXTŠPAGE*CMNˆEQU„$FFFFFF00ƒUSED�FOR�MOVE.L�$80-$FF�TO�GEN�2�BYTE�INSTRUCTIONS*%*‚SPLOOLER�QUEUE�ENTRY�RECORD�EQUATES*+LINEBL„EQU„QLNG�RECORD'S�LINE�BUFFER�LENGTHKEYSIZ„EQU„0’NULL�KEYS#VRLFIL„EQU„QLNG�FIXED�RECORD�LENGTH'MXRECL„EQU„LINEBL�MAXIMUM�RECORD�LENGTH**‚FILE�NAME�EQUATES*4FILNML„EQU„24‘FULLY�QUALIFIED�FILE�NAME�FIELD�LENGTH**‚DATA�BLOCK�EQUATES*BDEFSIZ„EQU„$108ˆ1�SECTOR�FAB/8�SECTOR�DATA�BLK(DEFAULT�ALLOCATION)$DBMAX…EQU„20‘MAXIMUM�DATA�BLOCK�SIZE*:*‚FMS�LOGICAL�ADDRESSES�FOR�SEGMENTS�TO�BE�USED�AS�BUFFERS*IFMSDBA„EQU„$10000�LOGICAL�BUFFER�START�FOR�FILE�DATA�BLOCK�(SHARED�W/FMS)NFMSSRA‚EQU�FMSDBA+DBMAX*$100�BUFFER�START�FOR�SOURCE�FILE�DB�OR�EXTRACT�BUI FFER**‚DEFINE�DATA�LAYOUTS*:*‚********************************************************;*‚FMSINT�PARAMETER�BLOCK�(USED�BETWEEN�FMSINT�AND�SPOOLER)::*‚*********************************************************1ŠOFFSET�0’POINTED�TO�BY�A3�(A0�ON�CALL�TO�FMSINT)*FMSTAT„DS.Bƒ1’STATUSFMSCMD„DS.Bƒ1’COMMANDFMSREC„DS.Lƒ1’LRN7FMSBUF„DS.Lƒ1’FWA�OF�LINE�BUFFER,�POINTER�TO�FILE�NAMES$FMSRECNƒDS.Wƒ1’#�OF�RECORDS�AFFECTED*FMSEFS„DS.Bƒ1’FILE�STATUS*=EFSCHG„EQU„1�FILE�STATUS�CHANGED�(EDIT�FILE�.NE.�OUTPUT�FILE)* FMSOFS„DS.Bƒ1’OUTPUT�FILE�STATUS*&OFSDEL„EQU„1’OUTPUT�FILE�STATUS�DELETE**!*‚********************************‚FILENAME�PARAMETERS!*‚********************************)ŠOFFSET�0’POINTED�TO�BY�FMSBUF�IN�OPENCMD*FLNM1…DS.BƒFILNML�FULLY�QUALIFIED�FILENAMEŠDS.Wƒ1’RESERVEDŠDS.Wƒ1’READ/WRITE�CODES:OFSTAT„DS.Bƒ1ŽOUTPUT�FILE�STATUS„0=FILENAME1�IS�FOR�OUTPUTŠDS.Wƒ1’READ/WRITE�CODESŠPAGE**‚***************************‚MAP�FOR�FMSINT�SCRATCH�PAD*‚***************************(ŠOFFSET�0’POINTED�TO�BY�A6�DURING�FMSINT**‚MAP�FOR�UNINITIALIZED�DATA*EOFLRN„DS.Lƒ1’FILE'S�LAST�LRNEFLUN…DS.Bƒ1’FILE�LUNEFFLG…DS.Bƒ1’FILE�FLAG'* EFFLG = 0 => 'FILENAME1' IS EDIT FILE**LRECBA„DS.Lƒ1’LAST�RECORD'S�BUFFER�ADDRESS*%OUTRCZ„DS.Wƒ1’OUTPUT�FILE�RECORD�SIZE"OUTKYZ„DS.Bƒ1’OUTPUT�FILE�KEY�SIZE"SRCKYZ„DS.Bƒ1’SOURCE�FILE�KEY�SIZE'SRCRCZ„DS.Wƒ1’SOURCE�FILE�RECORD�LENGTHSRCDBE„DS.Lƒ1’BUFFER�END SRCDBL„DS.Lƒ1’BUFFER�LOGICAL�END*?DATASGLƒEQU„*ŒEND�OF�UNINITIALIZED�DATA�(ZEROED�OUT�BY�OPENCMD)**‚MAP�FOR�INITIALIZED�DATA*.SRCDBS„DS.Lƒ1’SOURCE�FILE�LOGICAL�BUFFER�START*;LRECRD„DS.Lƒ1�LRN�OF�LAST�RECORD�READ(-1�IF�NONE�AVAILABLE)*5STKPTR„DS.Lƒ1’STACK�POINTER�FOR�ABORT�FROM�SUBROUTINE****‡FMSINT�COMMAND�EQUATES*#OPENCMDƒEQU„1’FMS-OPEN�FILE�COMMAND#RDCMD…EQU„2’FMS-READ�RECORD�COMMAND&DELCMD„EQU„3’FMS-DELETE�RECORD�COMMAND(INSRTCMD‚EQU„4’FMS-INSERT�RECORD�COMMAND(REPLCMDƒEQU„5’FMS-REPLACE�RECORD�COMMANDŠPAGE*.*ˆOFFSETS�USED�BY�A�SPAWNED�SUB-TASK�DOING�THE*ˆACTUAL�SPOOLER�OUTPUT* ŠOFFSET�0 DATAST„EQU„*SCRATCHS‚DS.Bƒ154�SCRATCH�AREAŠDS.Bƒ200�STACK STACK…EQU„*&FHSPBS„DS.BƒFHSNLN�FHS�PARAMETER�BLOCK&IOSPBS„DS.BƒIOSBLN�IOS�PARAMETER�BLOCK#SPLQNS„DS.Lƒ2’TASK�NAME�AND�SESSIONSPLFLGSƒDS.Bƒ2’FLAGSSUBTERRƒDS.Wƒ1’ERROR�FLAGSCURRECSƒDS.Lƒ1’CURRENT�RECORD)QEVTS…DS.BƒENTRYLNG‹EVENT�PARAMETER�BLOCK(QBUFS…DS.BƒQLNG�QUEUE�ENRTY�BEING�OUTPUT BUFEND„DS.Lƒ1’BUFFER�END�ADDRESS)SBUFSA„DS.Lƒ1’SHARED�BUFFER�START�ADDRESS'SBUFEA„DS.Lƒ1’SHARED�BUFFER�END�ADDRESS/CURPT…DS.Lƒ1’CURRENT�POINTER�INTO�SHARED�BUFFERSAVLNG„DS.Lƒ1’BUFFER�SIZEFOPT†DS.Wƒ1’OUTPUT�FILETYPE1BUFSTRTƒDS.Lƒ1’NON-SPOOLER�FILE�DATA�AREA�ADDRESS DATALNGƒEQU„************************ Ending of &.SPL.EQ ***********************ééééJ éé‰PAGE*************************** Beginning of &.SRVR.EQ *****************************‰SERVER�EQUATES*!*‰TYPE�7�MESSAGE�(SERVER�REQUEST)* ŠOFFSET�0TYP7SIZE‚DS.Bƒ1’MESSAGE�LENGTH'TYP7CODE‚DS.Bƒ1’MESSAGE�TYPE�CODE�($07)ATYP7TRAP‚DS.Bƒ1ŒTRAP�NUMBER�(BIT�7=SYS�TSK;6=TERM�MSG;5=LAST�TSK)TYP7PRIO‚DS.Bƒ1’PRIORITYTYP7TASK‚DS.Lƒ1’TASK�NAMETYP7SESS‚DS.Lƒ1’SESSIONTYP7USER‚DS.Wƒ1’USER�NUMBERTYP7D0„DS.Lƒ1’REQUESTOR'S�D0TYP7A0„DS.Lƒ1’REQUESTOR'S�A0&TYP7PBST‚DS.Bƒ1’PARAMETER�BLOCK�STATUS$TYP7PBSZ‚DS.Bƒ1’PARAMETER�BLOCK�SIZE'TYP7PBLK‚EQU„*’START�OF�PARAMETER�BLOCK**ˆPARAMETER�BLOCK�STATUS�CODES**T7STPMOV‚EQU„0’TOTAL�PARAMETER�BLOCK�MOVED,T7STPART‚EQU„1’PART�OF�PARAMETER�BLOCK�MOVED*T7STPADR‚EQU„2’BAD�PARAMETER�BLOCK�ADDRESS,T7STNORQ‚EQU„3’PARAMETER�BLOCK�NOT�REQUESTED**…BITS�SET�IN�TYP7TRAP�FIELD*2TYP7TSYS‚EQU„7’TASK�SENDING�MESSAGE�IS�SYSTEM�TASK-TYP7TTRM‚EQU„6’MESSAGE�IS�TERMINATION�MESSAGE+TYP7TLST‚EQU„5’TASK�IS�LAST�TASK�IN�SESSION7TYP7TRTT‚EQU„4’TASK�SENDING�MESSAGE�IS�A�REAL�TIME�TASK*"*�OPTIONS�AVAILABLE�ON�ACKNOWLEDGE*-TACKOSCC‚EQU„14‘SET�CONDITION�CODES�ON�RETURN TACKOSD0‚EQU„13‘DET�D0�ON�RETURN TACKOSA0‚EQU„12‘SET�A0�ON�RETURNTACKORDY‚EQU„11‘READY�THE�TASK%TACKOWTƒEQU„10‘PUT�TASK�IN�WAIT�STATETACKOSPD‚EQU„9’SUSPEND�THE�TASK,TACKOTRM‚EQU„8’SPEC�RESPONSE�TO�TERM�REQUEST************************ Ending of &.SRVR.EQ ************************éé :1‰PAGE************************** Beginning of &.STR.EQ ************************** ŠLLENƒ120**†GENERAL�EQUATES*"TRMODE„EQU„15‘TRACE�MODE�BIT�IN�SR'SRMODE„EQU„13‘SUPERVISER�MODE�BIT�IN�SRBMULTPROC‚EQU„0ŠCOND�ASSEMBLY�FLAG�(MULTIPLE�PROCESSORS)�1=ON�0=OFFASHARMEMƒEQU„1ŠCOND�ASSEMBLY�FLAG�(MEMORY�SHARED�BY�MULTIPLE�PROC)CWAITMEMƒEQU„1ˆCOND�ASSEMBLY�FLAG�(WAIT�FOR�MEMORY�OPTION�AVAILABLE):EXECPRIO‚EQU„240�PRIORITY�SET�WHEN�EXEC�ROUTINES�RESTARTED6HIBIT…EQU„15‘HIGH�ORDER�BIT�NUMBER�-�USED�IN�BIT�TESTS**ŠSECTION�NUMBERS�FOR�LEVELS* LVLBASEƒEQU„2LEVEL00ƒEQU„LVLBASE+0LEVEL01ƒEQU„LVLBASE+1LEVEL02ƒEQU„LVLBASE+2LEVEL03ƒEQU„LVLBASE+3LEVEL04ƒEQU„LVLBASE+4LEVEL05ƒEQU„LVLBASE+5PATCHESƒEQU„15*(*†TRACE�FLAGS�-�SET�IN�TRACFLAG�(SYSPAR)*#TRCFTRP1‚EQU„15‘SET�TO�TRACE�TRAP�1%TRCFIO„EQU„14‘SET�TO�TRACE�INTERRUPTS-TRCFTIMR‚EQU„13‘SET�TO�TRACE�TIMER�INTERRUPTS.TRCFTRAP‚EQU„12‘SET�TO�TRACE�USER�TRAPS�(2-15)'TRCFEXCP‚EQU„11‘SET�TO�TRACE�EXCEPTIONS'TRCFDSPT‚EQU„10‘SET�TO�TRACE�DISPATCHES2TRCFUIOƒEQU„9’SET�TO�TRACE�USER�CLAIMED�INTERRUPTS.TRCFMMUƒEQU„8’SET�TO�TRACE�RETURN�FROM�LOADMMU/TRCFSINT‚EQU„7’SET�TO�TRACE�SIMULATED�INTERRUPT.TRCFSYSF‚EQU„6’SET�TO�TRACE�SYSFAIL�INTERRUPTSŠPAGE**ˆTRAP�1�EQUATJ ES*T10‡EQU„0’NO�DIRECTIVET1GTSEGƒEQU„1’ALLOCATE�SEGMENT T1DESEGƒEQU„2’DEALLOCATE�SEGMENTT1TRSEGƒEQU„3’TRANSFER�SEGMENT'T1ATTSEG‚EQU„4’ATTACH�SHAREABLE�SEGMENT*T1SHRSEG‚EQU„5’GRANT�SHARED�SEGMENT�ACCESS'T1MOVELL‚EQU„6’MOVE�DATA�BETWEEN�SPACES(T1DCLSHR‚EQU„7’DECLARE�SEGMENT�SHAREABLE)T1SNAPTRAC�EQUƒ8’MOVE�TRACE�TABLE�TO�USER(T1RCVSAƒEQU„9’RECEIVE�SEGMENT�ATTRIBUTEST1GTTIDƒEQU„10‘GET�TASK�IDT1CRTCBƒEQU„11‘CREATE�TCBT1GTTNAME�EQU„12‘GET�TASKNAMET1STARTƒEQU„13‘START�TASK T1ABORTƒEQU„14‘ABORT�TASK�(SELF)#T1TERM„EQU„15‘TERMINATE�TASK�(SELF)(T1TERMTƒEQU„16‘TERMINATE�TASK�(NOT�SELF)#T1SUSPND‚EQU„17‘SUSPEND�TASK�(SELF)%T1RESUME‚EQU„18‘RESUME�SUSPENDED�TASK)T1WAIT„EQU„19‘TASK�BECOMES�BLOCKED�(SELF) C? L@ T3 \™ d„ l-%T1WAKEUP‚EQU„20‘WAKEUP�A�WAITING�TASK0T1DELAYƒEQU„21‘DELAY�SOME�NUMBER�OF�MILLISECONDS$T1RELINQ‚EQU„22‘RELINQUISH�EXECUTION'T1TSKATTR�EQU„23‘RETURN�TASK�ATTRIBUTES$T1SETPRI‚EQU„24‘SET�CURRENT�PRIORITYT1STOP„EQU„25‘STOP�RUNNING�TASK4T1EXPVCT‚EQU„26‘SAVE�TASK'S�EXCEPTION�VECTOR�ADDRESS/T1TRPVCT‚EQU„27‘SAVE�TASK'S�TRAP�VECTOR�ADDRESS)T1TSKINFO�EQU„28‘MOVE�TASK�INFO�TO�CALLER+T1RQSTPA‚EQU„29‘REQUEST�PERIODIC�ACTIVATION'T1DELAYW‚EQU„30‘DELAY�WITH�WAIT�OPTIONST1GTASQƒEQU„31‘ALLOCATE�AN�ASQT1DEASQƒEQU„32‘DEALLOCATE�ASQT1SETASQ‚EQU„33‘SET�ASQ�STATUS#T1RDEVNT‚EQU„34‘READ�EVENT�FROM�ASQ!T1QEVNTƒEQU„35‘QUEUE�EVENT�TO�ASQT1WTEVNT‚EQU„36‘WAIT�FOR�EVENT!T1RTEVNT‚EQU„37‘RETURN�FROM�EVENTT1GTEVNT‚EQU„38 T139†EQU„39 T140†EQU„40"T1ATSEMƒEQU„41‘ATTACH�TO�SEMAPHORE T1WTSEMƒEQU„42‘WAIT�ON�SEMAPHORET1SGSEMƒEQU„43‘SIGNAL�SEMAPHORET1DESEMƒEQU„44‘DETACH�SEMAPHORET1CRSEMƒEQU„45‘CREATE�SEMAPHORE3T1DESEMA‚EQU„46‘DETACH�ALL�SEMAPHORES�FOR�THIS�TASK T147†EQU„47 T148†EQU„48 T149†EQU„49 T150†EQU„50.T1SERVER‚EQU„51‘ESTABLISH�SERVER�FOR�USER�TRAP+T1DSERVE‚EQU„52‘DETACH�FROM�SERVER�FUNCTION.T1DERQST‚EQU„53‘SET�USER/SERVER�REQUEST�STATUS+T1AKRQST‚EQU„54‘ACKNOWLEDGE�SERVICE�REQUEST T155†EQU„55 T156†EQU„56 T157†EQU„57 T1CDIR„EQU„58 T159†EQU„59T1CMR…EQU„60‘CHANNEL�REQUEST1T1CISR„EQU„61‘CLAIM�VECTOR�-�INTRRUPT�SERVICE�RTN)T1SINT„EQU„62‘SIMULATE�USER�I/O�INTERRUPT T163†EQU„63*T1EXMONƒEQU„64‘ATTACH�TO�EXCEPTION�MONITOR-T1DEXMON‚EQU„65‘DETACH�FROM�EXCEPTION�MONITOR*T1EXMMSK‚EQU„66‘SET�EXCEPTION�MONITOR�MASK"T1RSTATE‚EQU„67‘RECEIVE�TASK�STATET1PSTATE‚EQU„68‘PUT�TASK�STATE0T1REXMON‚EQU„69‘EXECUTE�TASK�UNDER�EXMON�CONTROL T170†EQU„70 T171†EQU„71T1MOVEPL‚EQU„72!T1STDTIM‚EQU„73‘SET�DATE�AND�TIME!T1GTDTIM‚EQU„74‘GET�DATE�AND�TIME T1FLUSHC‚EQU„75‘FLUSH�USER�CACHEŠPAGE**ˆTRAP�0�EQUATES*T0P‡EQU„1’SEMAPHORE�P�(WAIT)T0V‡EQU„2’SEMAPHORE�V�(SIGNAL) T0READYƒEQU„3’TASK�TO�READY�LIST%T0PAGALƒEQU„4’ALLOCATE�PHYSICAL�PAGES T0PGFR„EQU„5’FREE�PHYSICAL�PAGEST0GETTCB‚EQU„6’SEARCH�TCB�LIST'T0FNDSEG‚EQU„7’FIND�SEGMENT�NAME�IN�TST2T0LOGPHY‚EQU„8’LOGICAL�TO�PHYSICAL�ADDRESS�CONVERT'T0FNDGSG‚EQU„9’FIND�SEGMENT�NAME�IN�GST5T0QEVNTN‚EQU„11‘PLACE�EVENT�IN�ASQ�-�ARG�IS�TASK�NAME2T0FNDSEM‚EQU„12‘FIND�ENTRY�IN�USER�SEMAPHORE�TABLE6T0GTXTCB‚EQU„13‘GET�TCB�USING�SESSION�PROVIDED�IN�CALL5T0PAUSEƒEQU„14‘PAUSE�WHILE�WAITING�FOR�IO�TO�COMPLETE.T0EXABRT‚EQU„21‘ABORT�USER�TASK�FROM�EXEC�MODE*T0WAKEUP‚EQU„22‘WAKEUP�TASK�FROM�EXEC�MODE7T0QEVNTT‚EQU„23‘PLACE�EVENT�IN�ASQ�-�ARG�IS�TCB�ADDRESST0SCHEDƒEQU„36�SCHEDULE�A�ROUTINE�FOR�EXECUTION�IN�BACKGROUND.1T0GUARDƒEQU„37‘CALL�K A�SUBROUTINE�IN�GUARDED�MODE.*8*„THE�FOLLOWING�EQU'S�DEFINE�ENTRIES�TO�SUBROUTINES�ONLY0*ˆTRAP�0�ENTRIES�FOR�EXTERNAL�CALLS�DO�NOT�EXIST*5T0RYEXT1‚EQU„3’READY�ROUTINE�ENTRY�-�FROM�TRAP�1�EXIT0T0RYEXIR‚EQU„3’READY�ROUTINE�ENTRY�-�FROM�EXITIR�'!TCB')�then�do;*�then�return�(task�not�found);*ˆend;*GET_TARGET_TCB MACROŠMOVE.L�(A4),D0 ŠBEQ.S‚TCB1\@ ŠMOVE.L�D0,A5TTB_01:ŠCMP.L‚#'!TCB',(A5)TTE_01: ŠBEQ.S‚TCB2\@ ŠEXITƒRTCDTASK TCB1\@: ŠMOVE.L�A6,A5 TCB2\@:ŠENDM*********************** Ending of &.STR.EQ ***********************ééé‰PAGE*************************** Beginning of &.TACK.EQ *****************************‰SERVER�ACKNOWLEDGE�EQUATES*"*‰OPTIONS�AVAILABLE�ON�ACKNOWLEDGE*-TACKOSCC‚EQU„14‘SET�CONDITION�CODES�ON�RETURN TACKOSD0‚EQU„13‘SET�D0�ON�RETURN TACKOSA0‚EQU„12‘SET�A0�ON�RETURNTACKORDY‚EQU„11‘READY�THE�TASK%TACKOWTƒEQU„10‘PUT�TASK�IN�WAIT�STATETACKOSPD‚EQU„9’SUSPEND�THE�TASK,TACKOTRM‚EQU„8’SPEC�RESPONSE�TO�TERM�REQUEST************************ Ending of &.TACK.EQ ************************éL éééé t' TCB EQ ‰ ‰šaaTERMCCB EQ ¢ ¢T3aaERMINALEQÿÿÿÿÿÿÿÿaa‰PAGE************************** Beginning of &.TCB.EQ ****************************ˆTASK�CONTROL�BLOCK**2*†USE�ASƒNAME(AX)‚WHERE�AX=ADDRESS�OF�START�OF�TCB1*‰WHERE‚AX�IS�THE�ADDRESS�OF�THE�START�OF�THE�TCB"*‰AND�NAME�IS�ONE�OF�THE�FOLLOWING*ŠOFFSET�0’START�AT�ZERO"TCB‡DS.Lƒ1’'!TCB'‚DUMP�EYE�CATCHER#TCBALL„DS.Lƒ1’LINK�FOR�ALL�TCB�LIST,TCBGROUP‚DS.Lƒ1’LINK�FOR�TCB-THIS-GROUP�LIST#TCBREADY‚DS.Lƒ1’LINK�FOR�READY�LISTTCBNAMEƒDS.Lƒ1’4-BYTE�TASK�NAMETCBSESSN‚DS.Lƒ1’SESSION�CODE-TCBMON„DS.Lƒ2’MONITOR�TASKNAME�+�SESSION�CODE+TCBSEM„DS.Lƒ1’LINK�TO�NEXT�SEMAPHORE�WAITER$TCBCPRIƒDS.Bƒ1’CURRENT�TASK�PRIORITY"TCBLPRIƒDS.Bƒ1’TASK�LIMIT�PRIORITY8TCBRPRIƒDS.Bƒ1’PRIORITY�USED�TO�ENTER�TASK�IN�READY�LIST'TCBIOCNT‚DS.Bƒ1’COUNT�OF�PENDING�INPUTSTCBATTRƒDS.Wƒ1’TASK�ATTRIBUTES=TCBATTIƒEQU„TCBATTR+1Š2ND�BYTE�OF�ATTRIBUTES�(INTERNAL�FLAGS)TCBABORT‚DS.Wƒ1’ABORT�CODE"TCBSTATE‚DS.Lƒ1’CURRENT�TASK�STATE.TCBSTAT2‚EQU„TCBSTATE+1‰2ND�BYTE�OF�STATE�WORDTCBTSTSM‚DS.Wƒ3’TST�SEMAPHORE+TCBTST„DS.Lƒ1’POINTER�TO�TASK�SEGMENT�TABLETCBASQSM‚DS.Wƒ3’ASQ�SEMAPHORETCBASQ„DS.Lƒ1’POINTER�TO�ASQ1TCBCHANƒDS.Lƒ1’LINK�TO�NEXT�CHANNEL�CONTROL�BLOCK0TCBEVECT‚DS.Lƒ1’ADDRESS�OF�TASK�EXCEPTION�VECTOR+TCBTVECT‚DS.Lƒ1’ADDRESS�OF�TASK�TRAP�VECTOR*ŠDS.Lƒ1’RESERVED�FOR�FUTURE�USE6TCBNAU„DS.Lƒ1’ADDRESS�OF�NAT�ENTRY�IF�THIS�TASK�IS�NAU;TCBDLAYƒDS.Lƒ1‘ADDRESS�OF�DELAY�ENTRY�IN�PERIODIC�ACT�TABLE(ŠDS.Wƒ1’SAVE�UPPER�1/2�OF�D0�ON�TRAP�1'S/TCBISRSƒDS.Wƒ1’ISR�ERROR�CODE�-�SAVE�FOR�WAKEUPŠDS.Lƒ3’RESERVED�FOR�FUTURE�USE(TCBENTRY‚DS.Lƒ1’TASK�INITIAL�ENTRY�POINT/TCBUSERƒDS.Wƒ1’USER�NUMBER�ASSOCIATED�WITH�TASKTCBSSP„DS.Bƒ1’EXEC�STACK�DEPTH6TCBUTRPƒDS.Bƒ1’USER�TRAP�NUMBER�-�SET�WHEN�TRAP�OCCURS* *†SAVE�AREAS*TCBXREGS‚DS.Lƒ8’EXEC�REGL ISTERSTCBXA0„DS.Lƒ1’EXEX�REGISTER�A0ŠDS.Lƒ6TCBSAFEƒEQU„*’EXEC�REGISTERS8TCBATSKƒDS.Lƒ1’TASK�NAME�OF�TASK�THAT�CAUSED�TERMINATION6TCBASESƒDS.Lƒ1’SESSION�OF�TASK�THAT�CAUSED�TERMINATION;TCBBERRƒDS.Lƒ2‘INFO�PLACED�ON�STACK�BY�BUS�OR�ADDRESS�ERROR �: ŠB ’ ŠDS.Bƒ$100-*TCBSTKA6‚EQU„*-(4+2+4+2)TCBSTKSR‚EQU„*-(2+4+2)TCBSTKPC‚EQU„*-(4+2)TCBSTKVR‚EQU„*-(2)TCBROOMƒEQU„$100-TCBSAFE*TCBD0…DS.Lƒ1’USER'S�D0TCBD1…DS.Lƒ7’USER'S�D1�THRU�D7TCBA0…DS.Lƒ1’USER'S�A0TCBA1…DS.Lƒ5’USER'S�A1�THRU�A5TCBA6…DS.Lƒ1’USER'S�A6TCBUSP„DS.Lƒ1’USER'S�A7 #TCBSR…DS.Wƒ1’USER'S�STATUS�REGISTER(TCBCC…EQU„TCBSR+1ŒUSER'S�CONDITION�CODES#TCBPC…DS.Lƒ1’USER'S�PROGRAM�COUNTERTCBPCLOƒEQU„TCBPC+2+TCBVOR„DS.Wƒ1’USER'S�VOR�(OR�JUNK�ON�68000)TCBRTCDƒDS.Wƒ1ŠDS.Wƒ1ŠDS.Lƒ1ŠDS.Lƒ4)TSTBEGIN‚EQU„*’OFFSET�TO�BEGINNING�OF�TST ŠDS.Bƒ$200-$20-***‡EXCEPTION�MONITOR�PARAMETERS*)TCBEXM„DS.Lƒ1’EXCEPTION�MONITOR�TASK�NAME(TCBEXMSƒDS.Lƒ1’EXCEPTION�MONITOR�SESSION&TCBEMMSK‚DS.Lƒ1’EXCEPTION�MONITOR�MASK,TCBEVMSK‚DS.Lƒ1’EXCEPTION�MONITOR�VALUE�MASK0TCBEVLOC‚DS.Lƒ1’EXCEPTION�MONITOR�VALUE�LOCATION'TCBEVALU‚DS.Lƒ1’EXCEPTION�MONITOR�VALUE:TCBECNTƒDS.Lƒ1’EXCEPTION�MONITOR�MAX�COUNT�OF�INSTRUCTIONSŠDS.Lƒ1* **‰TCBATTR�BIT�DEFINITIONS*TSKASYST‚EQU„15‘SYSTEM�TASK'TSKAMRES‚EQU„14‘TASK�IS�MEMORY�RESIDENT@TSKACRIT‚EQU„13ŒTASK�IS�CRITICAL�TO�OS�-�CRASH�SYSTEM�IF�ABORTED,TSKADUMP‚EQU„12�DUMP�TASK�TO�DISK�IF�ABORTED=TSKARELO‚EQU„11�TASK�IS�RELOCATEABLE�(NO�MMU)�-�CONVERT�ENTRY.TSKIUSEM‚EQU„8’TASK�HAS�CREATED�USER�SEMAPHORE'TSKARTIM‚EQU„7’TASK�IS�A�REAL�TIME�TASK2TSKIEXMƒEQU„6’TASK�CONTROLLED�BY�EXCEPTION�MONITOR9TSKIEXMT‚EQU„5’TASK�IS�EXCEPTION�MONITOR�FOR�ANOTHER�TASK,TSKIEVCT‚EQU„4’TASK�HAS�OWN�EXCEPTION�VECTOR'TSKITVCT‚EQU„3’TASK�HAS�OWN�TRAP�VECTOR>TSKILAST‚EQU„2ŽTASK�IS�LAST�TASK�IN�SESSION�(SET�ONLY�BY�TERM)TSKIABRT‚EQU„1’TASK�WAS�ABORTED+TSKIUVCT‚EQU„0’TASK�HAS�CLAIMED�USER�VECTOR**‰TCBSTATE�BIT�DEFINITIONS*TSKSDORM‚EQU„15‘TASK�IS�DORMANTTSKSBLCK‚EQU„14‘TASK�IS�BLOCKED1TSKSSMWT‚EQU„13‘TASK�IS�BLOCKED�ON�EXEC�SEMAPHORE)TSKSEVWT‚EQU„12‘TASK�IS�WAITING�FOR�EVENT?TSKSAKWT‚EQU„11�TASK�IS�WAITING�FOR�SERVICE�REQ�ACKNOWLEDGEMENT6TSKSWTEM‚EQU„10‘TASK�IS�WAITING�FOR�COMMAND�FROM�EXMON TSKSSUSP‚EQU„9’TASK�IS�SUSPENDED*+TSK2TRMP‚EQU„7’TASK�HAS�PENDING�TERMINATION'TSK2RTEX‚EQU„6’TASK�WILL�RETURN�TO�EXEC%TSK2EVWK‚EQU„5’TASK�IS�HEADED�FOR�ASR$TSK2NRDY‚EQU„4’TASK�IS�ON�READY�LIST&TSK2WKWT‚EQU„3’TASK�HAS�PENDING�WAKEUP@TSK2ACK2‚EQU„2ŒTERM�MESSAGE�TO�SERVER�SENT�WHILE�ACK�OUTSTANDING*/TSKSWMSK‚EQU„$FF00ŽMASK�OF�ALL�TASK�WAIT�STATES**…TCBEMMSK�BIT�DEFINITIONS*"TEMTRAP1‚EQU„1’TRAP�1�IS�MONITORED&TEMBUSER‚EQU„16‘BUS�ERROR�IS�MONITORED*TEMADDER‚EQU„17‘ADDRESS�ERROR�IS�MONITORED0TEMILLEG‚EQU„18‘ILLEGAL�INSTRUCTION�IS�MONITORED'TEMZDIVƒEQU„19‘ZERO�DIVIDE�IS�MONITORED*TEMCHK„EQU„20‘CHK�INSTRUCTION�IS�MONITORED.TEMTRAPV‚EQU„21‘TRAPV�INSTRUCTION�IS�MONITORED/TEMPRIVƒEQU„22‘PRIVILEGE�VIOLATION�IS�MONITORED&TEML1010‚EQU„23‘LINE�1010�IS�MONITORED&TEML1111‚EQU„24‘LINE�1111�IS�MONITORED*-TEMMCNTƒEQU„27‘MAX�INSTRUCTION�COUNT�SUPPLIED=TEMTRACƒEQU„28ŽSINGLE�INSTRUCTION�TRACE�REQUESTED�(IF�VCHG=0)1TEMVEQUƒEQU„28‘VALUE�=�TEST�REQUESTED�(IF�VCHG=1)*TEMVCHGƒEQU„29‘VALUE�CHANGE�TEST�REQUESTED*********************** Ending of &.TCB.EQ ***********************éM éé‰PAGE****************************** Beginning of &.TERMCCB.EQ ******************************%*ˆ7/9/84…added�BAB�area�for�terminals*(*‰NOTES�ON�THE�RECEIVE�&�TRANSMIT�QUEUES*@*‰These�circular�queues�are�contained�in�the�CCB�at�the�very�top>*‰of�the�device-dependent�portion.‚The�receive�queue�is�just�aA*‰type-ahead�buffer;�the�transmit�queue�is�used�to�hold�char's�to0*‰be�transmitted�which�are�not�in�a�user�buffer.*J***************************************************************************H*‚Tailor�the�following�equates�to�change�the�sizes�of�the�queues�and�theF*‚thresholds�at�which�action�is�taken�to�suspend/restore�transmissions8*‚from�the�device.‚The�following�inequalities�must�hold:*@*‰7‚<=‚TQ_MAX‚<=�128„(7�comes�from�XON,BS,SP,BS,BS,SP,BS�queued,>*�which�can�happen�if�a�BS�causes�a�control�char�to�be�erased)*#*‰0‚<=‚NUF_ROOM‚<‚NEAR_FUL‚<‚RQ_MAX**3*’<--------------ƒ<---queues�fill/empty�this�way---*O* /-------------- ----------------- ----------------------------------- ------/+*‚device-indep.�|„TRANSMIT…|ŒRECEIVE�|‚rest&*ƒpart�of�CCB‚|…QUEUE‡|�QUEUE‘|�of�CCBO* /-------------- ----------------- ----------------------------------- ------/**�|‘|£|9*�|<---�TQ_MAX�---->|<-----------�RQ_MAX�-------------->| *�|‘|�|…|!*¢|<-------�NEAR_FUL�---------->|*¢|™|ƒ|*¢|<-----�NUF_ROOM�-------->|*¢|™|*6TQ_MAX„EQU„16�Size�of�transmit�queue�in�bytes.‚Be�wary#*§of�increasing�this�size,�since�it#*§could�push�RQ�past�$7F,�making�it"*§impossible�to�use�the�addressing*§mode�RQ(A5,Dn)..RQ_MAX„EQU„224�Size�of�receive�queue�in�bytes.BNEAR_FUL‚EQU„RQ_MAX-10‰When�the�addition�of�a�char�makes�the�queue'*§this�full,�the�driver�will�attempt�to&*§suspend�the�device's�transmission�by*§lowering�DTR�or�sending�XOFF.ANUF_ROOM‚EQU„RQ_MAX-20‰When�the�removal�of�a�char�makes�the�queue$*§this�full,�the�driver�releases�the$*§suspended�device�by�raising�DTR�or*§sending�XON.** š8 £& «/ ³7 »6 Ã9 Ë3 Ó8 Û9 ã9 ë$I*‚The�transmit�queue�is�only�dealt�with�from�within�the�background,�so�itJ*‚is�completely�safe�from�any�problems�which�might�be�caused�by�the�driver3*‚taking�an�interrupt�while�dealing�with�the�queue.I*‚The�receive�queue,�however,�is�added�to�from�outside�the�background�(inK*‚the�RCA�routine).‚This�does�not�cause�any�problems�with�the�RECV�routine,H*‚which�takes�characters�out�of�the�receive�queue,�primarily�because�theF*‚former�uses�the�PUT�pointer�and�the�latter�uses�the�GET�pointer,�andI*‚neither�cares�about�the�other�pointer.‚The�code�that�clears�the�receiveE*‚queue�could�potentially�cause�a�problem,�though,�so�it�is�done�withC*‚interrupts�INHIBITed.‚As�long�as�the�two�contenders�only�run�withB*‚interrupts�INHIBITed,�they�can�never�interfere�with�one�another.ŠPAGE*B*‚Equates�for�ERR_CODE�field�in�CCB.‚We�use�the�IOS�status�values.*>PAR_FRAM�EQU‡ISTACSMŠParity�or�framing�error�on�received�char.=OVERRUN‚EQU‡ISTADO‹Either�the�device's�internal�buffer�or�the *§receive�queue�was�overwritten. F*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *ˆ7/9/84‚BWN6*ˆWe�are�taking�this�stuff�out�and�replacing�it�by�the@*ˆBAB�area�offsets�so�we�can�use�the�exec's�background�routines.*C*‚Equates�for�bit�numberM s�in�the�WORK�field�in�the�CCB.‚Each�bit�is@*‚a�flag�indicating�the�presence�of�work�for�a�given�part�of�theE*‚background.‚If�the�bit�is�1,�there�is�work;�if�0,�there�is�no�work.*/**W_XMIT„EQU„15‘Routine�to�transmit�characters..**W_RECV„EQU„14‘Routine�to�receive‚characters.5**W_BREAKƒEQU„13‘Routine�to�handle�an�incoming�break.7**W_DSR…EQU„12‘Routine�to�handle�a�DSR�line�transition.0**W_HALT„EQU„11‘Routine�to�halt�outstanding�I/O.;**W_CONFIGURE�EQU‚10‘Routine�to�finish�a�configure�request.5**W_BLOCKƒEQU„9’Routine�to�stop�us�from�transmitting.8**W_UNBLOCK�EQU„8’Routine�to�allow�us�to�transmit�again.;**W_STOP_IT�EQU„7’Routine�to�stop�the�device�from�xmitting.<**W_BEG_BREAK�EQU‚6’Routine�to�start�sending�a�break�signal.;**W_END_BREAK�EQU‚5’Routine�to�stop‚sending�a�break�signal.)**W_EVENTƒEQU„4’Routine�to�send�an�event.1**W_DCD…EQU„3’Routine�to�handle�a�DCD�transition.8**W_INIT„EQU„2’Routine�to�do�RESET�and�SETUP�(for�init). *L*‚Equates�for�bit�numbers�in�the�SPECIAL�byte�in�the�CCB.‚Each�bit�is�a�flagN*‚indicating�that�control�belongs�to�a�particular�high-priority�routine�withinM*‚the�transmit�function.‚When�setting�one�of�these�bits�you�should�be�sure�toM*‚change�the�transmit�state�to�SPECIAL;�if�it�wasn't�already�special�you�haveL*‚to�save�the�old�transmit�state�in�OLD_XMIT_ST.‚If�one�of�these�bits�is�a�13*‚then�that�routine�has�control;�if�0,�it�does�not.*-SPEC_BREAK‚EQU�7•Transmitting�a�break�signal.*SPEC_XOFFƒEQU�6•Transmitting�an�XOFF�char.(SPEC_XON„EQU�5•Transmitting�an�XON‚char.+SPEC_BLOCK‚EQU�4•Blocked�from�transmitting.+SPEC_NUL„EQU�3•Transmitting�NUL�characters.6SPEC_QUEUE‚EQU�2•Transmitting�from�the�transmit�queue.ŠPAGE*H*‚Equates�for�menu�items.‚Recall�that�the�MENU�field�in�the�CCB�has�roomH*‚for�4�1-byte�menu�items.‚The�values�have�a�special�correspondence�withE*‚the�process�states�which�is�used�in�dispatching--do�not�disrupt�it.*1M_DOWN„EQU„-4‘Channel�down�(unrecoverable�error).4M_INACTƒEQU„0’Channel�inactive�(no�I/O�in�progress). -M_IMGWRT‚EQU„4’Image�write�from�write�buffer.1M_FRMWRT‚EQU„8’Formatted�write�from�write�buffer.0M_CANCEL‚EQU„$C‘Cancel�char's�input�from�screen.*M_REPRNT‚EQU„$10�Reprint�from�read�buffer./M_BREAKƒEQU„$14�Wait�for�break�timer�to�expire. ,M_IMGRDƒEQU„$34�Image�read�into�read�buffer.0M_FRMRDƒEQU„$38�Formatted�read�into�read�buffer. 1M_END…EQU„$70�End�of�menu--send�completion�event. 6MHI_XMIT‚EQU„$2F�Ceiling�for�transmit-type�menu�items.3MLO_RECV‚EQU„$30�Floorƒfor�receive-type‚menu�items.5MHI_RECV‚EQU„$3F�Ceiling�for�receive-type‚menu�items.  *D*‚Equates�for�process�states.‚The�values�go�by�four's�so�they�can�beB*‚used�with�branch�tables:‚JMP�TBL(PC,D0.W)�where�D0�is�the�state.$*¤----------------------------------&*£|�Processes�which�assume�the�state�|$*¤----------------------------------*¤Transmit‚Receive„ES‡DSR*¤________‚_______„___…_____S_IDLE„EQU„0šX‰XˆXˆ.S_IMAGEƒEQU„4šX‰Xˆ.ˆ.S_FORM„EQU„8šX‰Xˆ.ˆ.S_CANCEL‚EQU„$C™X‰.ˆ.ˆ.S_REPRNT‚EQU„$10˜X‰.ˆ.ˆ.S_SPECIAL�EQU„$14˜X‰.ˆ.ˆ.S_REPORT‚EQU„$60˜.‰.ˆXˆ.S_WT4RDY‚EQU„$70˜.‰.ˆ.ˆXS_WT4UNR‚EQU„$74˜.‰.ˆ.ˆXŠPAGEJ***************************************************************************6*‰DEVICE-DEPENDENT�PORTION�OF�CCB�FOR�TERMINAL�DRIVERS*=*‰This�defines�that�portion�of�the�channel�control�block�that>*‰is�reserved�for�use�by�the�individual�driver.‚The�CCB�is�512C*‰bytes�long,�and�everything�before�CCBDDP�is�defined�in�EQUCCB.SA.*A*‰Note�that�virtually�everywhere�in�this�driver,�A5�is�maintained=*‰as�a�pointer�to�the�beginning�of�the�CCB.‚Hence�the�definedA*‰labels�may�be�used�to�access�fields�in�the�CCB�without�worrying4*‰about�loading�the�address�of�the�CCB.‚For�example,*ŒMOVE.LƒIOCB_ADR(A5),A0)*‰is�valid�almost�anywhere�in�the�driver.*J************************************************************************** 7ŠOFFSET‚CCBDDPŒStart�definition�at�the�beginning�of�the&*£device-dependent�portion�of�the�CCB. *L*‚First�come�tN he�queues.‚These�should�always�come�first�since�the�addressingL*‚mode�DISPLACEMENT(A5,Rn)�is�used�to�get�to�the�queues�and�DISPLACEMENT�mayJ*‚never�be�larger�than�$7F.‚Note�that�the�labels�TQ�and�RQ�are�back�a�byteG*‚from�the�actual�queues;�this�was�done�intentionally�to�allow�speedier *‚enqueue�and�dequeue�sequences.* TQˆEQU„*-14ŠDS.BƒTQ_MAX�Reserve�storage�for�the�transmit�queue. RQˆEQU„*-13ŠDS.BƒRQ_MAX�Reserve�storage�for�the�receive�queue. >�RESERVE.4�STAK_PTR‘Stack�pointer�is�saved�here�during�command&*§processing�so�that�processing�can�be(*§aborted�in�the�middle�of�a�subroutine.'*§That�is,�the�common�exit�code�for�the#*§command�service�tour�restores�the&*§stack�pointer�from�here�before�exit. =�RESERVE.4�IOCB_ADR‘Physical�address�of�IOCB.‚Saved�when�IOCB#*§is�received�so�that�status�may�be&*§updated�when�processing�is�complete. =�RESERVE.4�TCB_ADDR‘Address�of�TCB�of�buffer�owner.‚If�bit�15'*§of�IOCB�options�field�is�set,�this�is'*§not�the�same�as�the�IOCB�owner.‚Saved)*§so�that�TCBIOCNT�field�can�be�accessed. :�RESERVE.4�DCB_ADDR‘Address�of�DCB�for�this�channel.‚Taken'*§from�the�INITIATE�I/O�parameter�block"*§and�used�in�accessing�the�DCB�to)*§change�the�default�configuration�and�to&*§set�configuration�coordination�flag. <�RESERVE.4�CSB_ADDR‘Address�of�CSB�for�a�CONFIGURE�or�CHANGE*§DEFAULT�CONFIGURATION�call. E�RESERVE.IOSTLN-IOSATW�CNFG‰Configuration�data.‚It�is�this�copy�which(*§is�changed�via�the�CONFIGURE�command�&(*§determines�the�driver's�behavior.‚Note'*§that�only�the�attributes�&�parameters'*§are�saved�here--the�status�fields�and*§masks�are�not. �RESERVE.4�CHAR_CNT‘Count�of�the�#�of�char's�on�the�screen�due%*§to�a�formatted�read.‚Used�to�deter-&*§mine�the�#�of����to�send*§for�a�CANCEL�LINE�function. =�RESERVE.4�COLUMN“Count�of�the�#�of�printable�($20-$FF)�chars(*§sent�during�a�formatted�write.‚Used�to&*§determine�whether�we�should�skip�the *§end-of-line�string�at�the�end. ;�RESERVE.4�XFER_LEN‘Number�of�bytes�transferred�during�I/O.%*§Set�when�the�significant�part�of�an'*§I/O�operation�is�completed�(the�WRITE#*§portion�of�OUTPUT�W/�INPUT�is�not%*§significant).‚Eventually�this�field%*§is�used�to�update�the�IOCB's�LENGTH*§OF�DATA�TRANSFER�field. ;**�RESERVE.2�WORK•This�field�is�a�collection�of�1-bit�flags(*§each�of�which�indicates�whether�or�not%*§a�particular�part�of�the�background%*§has�work�to�do.‚Only�when�this�byte$*§is�$00�has�all�the�background�work%*§been�completed.‚See�the�equates�for*§bits�in�this�field�later�on. <�RESERVE.1�NUL_CNT’Used�by�transmit�process�to�keep�track�of)*§#�of�NUL's�left�to�send�after�CR�or�LF.%*§Initialized�to�the�configured�value#*§when�a�CR�or�LF�is�sent,�and�then*§counts�down�to�0. 5�RESERVE.1�BOARD”Board�typN e�(see�equates�later).‚This%*§field�is�derived�from�2�bits�in�the*§the�channel�type�field�during*§initialization. ;�RESERVE.1�TC_MASK’Terminator-class�don't-care�mask.‚In�the&*§test�to�see�whether�an�incoming�char&*§is�in�the�terminator�class,�the�char%*§is�ANDed�with�this�mask�before�com-*§parison�with�the�match�value. :�RESERVE.1�TC_VALUE‘Terminator-class�match�value.‚If�after'*§ANDing�with�the�mask�above,�an�incom-'*§ing�char�matches�this�value,�the�char*§is�a�terminator. 5�RESERVE.1�CHAR_MSK‘Character�mask.‚This�value�is�set$*§according�to�the�configuration�to:$*¨$7F‚if�configured�for�7�bits/char;$*¨$FF‚if�configured�for�8�bits/char.(*§This�value�is�ANDed�with�each�incoming'*§char�to�strip�parity�from�the�byte�if*§7�bits/char�is�used.$*§NOTE:‚before�initial�configuration"*§by�IOS,�this�byte�is�$00�and�the&*§attribute�bit�IOAPNUL�is�0,�ensuring%*§that�no�characters�received�are�put*§in�the�receive�queue. ?�RESERVE.1�NONINTERRUPT�This�byte,�initially�0,�is�set�whenever)*§we�enter�the�background�from�other�than'*§interrupt�level,�and�is�reset�when�we *§return.‚Hence�it�may�be�tested'*§(by�the�Q_EVENT�routine)�to�determine(*§whether�we�are�currently�processing�an*§interrupt�($00)�or�not�($FF). ;�RESERVE.1�DOWN_ERR‘This�byte,�initially�0,�is�changed�to�a%*§nonzero�value�if�the�driver�decides%*§for�some�reason�that�the�channel�is)*§not�operational�(e.g.,�the�device�fails'*§its�self-test).‚When�this�byte�is�not%*§0,�it�is�returned�as�the�status�for*§any�request�received. <�RESERVE.1�SPECIAL’This�byte�is�a�collection�of�1-bit�flags,(*§each�of�which�indicates�whether�or�not%*§a�particular�special�section�of�the(*§background�transmit�code�needs�to�run.'*§The�reason�these�particular�functions)*§are�considered�special�is�that�they�are'*§high-priority,�and�they�interrupt�the%*§normal�transmit�processing.‚See�the'*§equates�for�bits�in�this�field�later. <�RESERVE.1�OLD_XMIT_STŽWhen�the�transmitter�goes�from�normal'*§processing�to�special�processing,�the'*§normal�processing�state�is�saved�here*§so�it�can�be�restored�later.  *F*‚The�following�space�is�multi-purpose.‚During�I/O�it�holds�6�longwordI*‚pointers�to�describe�the�read�and�write�buffers.‚Because�we�do�not�sendI*‚events�in�the�middle�of�doing�I/O,�events�are�also�built�in�this�space.E*‚There�are�separate�spaces�for�regular�and�unsolicited�events�(breakI*‚detected�while�not�doing�I/O),�since�breaks�can�occur�at�any�time,�evenI*‚while�preparing�other�events.‚Most�events�are�10�bytes,�but�unsolicitedJ*‚events�are�12�bytes.‚Either�can�be�an�extra�4�bytes�if�a�service�address*‚is�specified.*A�RESERVE.4+10+4+12�BUF_ADRS‰Reserve�enough�space�for�both�events. .EVENT…EQU„BUF_ADRS+4‰Here's�the�regular�event.5UNS_EVNT‚EQU„EVENT+10+4‰Here's�the�unsolicited�event. '�char%*§should�be�sent�before�anything�else *§to�enclose�deleted�characters. A�RESERVE.1�WAIT_TQ‹Set�by�the�receive�process�when�it�has�work�to)*§do�but�can't�do�it�because�the�transmit%*§queue�is�too�full.‚Checked�when�the&*§transmit�process�idles�to�see�if�the#*§receive�process�should�be�given�a#*§chance�to�run�(since�the�transmit$*§queue�is�empty�if�transmit�idles). B�RESERVE.1�TR_MODE‹Set�if�the�default�configuration�indicates�that'*§we�are�in�transparent�mode.‚This�flag)*§will�control�what�we�do�when�characters$*§are�received,�etc.‚NOTE:‚it�is�not$*§possible�to�come�up�in�transparent(*§mode;�a�CHANGE�DEFAULTS�cmd�is�needed.  *G*‚Process�states.‚Note�that�transmit�and�receive�states�are�word�valuesJ*‚so�they�can�be�readily�put�in�a�data�register�and�used�in�the�addressing*‚mode�TABLE(PC,Dx)�for�a�jump.* *�RESERVE.2�XMIT_ST’Transmit�process�state.)�RESERVE.2�RECV_ST’Receive�process�state.  *'*‚Pointers�for�receive�and�echo�queues.E*‚Note�that�RQ_GET�and�RQ_PUT�start�at�#RQ_MAX�and�get�smaller.‚AfterE*‚#1�they�go�to�#RQ_MAX�again�to�form�a�circular�queue�of�characters.E*‚Similarly,�TQ_GET�and�TQ_PUT�go�from�#TQ_MAX�down�to�#1�and�back�to#*‚#TQ_MAX�to�form�a�circular�queue.* @�RESERVE.2�RQ_GET‹Offset�into�receive�queue�of�next�byte�to�get.@�RESERVE.2�RQ_PUT‹Offset�into�receive�queue�of�next�byte�to�put.7�RESERVE.2�RQ_CNT‹Contains�#�of�bytes�in�receive�queue. A�RESERVE.2�TQ_GET‹Offset�into�transmit�queue�of�next�byte�to�get.A�RESERVE.2�TQ_PUT‹Offset�into�transmit�queue�of�next�byte�to�put.8�RESERVE.2�TQ_CNT‹Contains�#�of�bytes�in�transmit�queue.  *E*‚Receive�error�info.‚This�info�is�set�when�the�condition�occurs,�butG*‚is�not�used�until�the�receive�process�goes�to�get�the�associated�char*‚from�the�receive�queue.* <�RESERVE.2�ERR_PTR’If�>�0,�offset�into�receive�queue�of�byte(*§associated�with�receive�error�(copy�of!*§RQ_PUT�when�error�is�detected).*§If�=�0,�there�is�no�error. <�RESERVE.1�ERR_CODE’Nature�of�receive�error.‚Only�meaningful*§if�ERR_PTR�>�0. ;�RESERVE.4�ADRSIDEA‘Address�of�the�A�side�control�register.&*§Although�we�already�have�the�address'*§of�the�control�register�for�whichever&*§port�we're�using�in�CCBCHB,�we�some-#*§times�have�to�issue�commands�to�a&*§specific�side�(e.g.,�the�EOI�command#*§always�goes�to�side�A).‚For�those&*§occasions,�this�address�will�get�you%*§to�the�side�A�control�register,�and&*§this�address�+�4�will�get�you�to�the*§side�B�control�register.<�RESERVE.1�AUTO_BAUD�If�this�flag�is�nonzero�(true),�then�we'*§are�in�the�process�of�doing�auto�baud*§rate�detection. ;�RESERVE.1�FLUSHING‘If�this�flag�is�nonzero�(true),�then�we$*§are�in�the�process�of�flushing�the(*§receiver�during�auto�baud�rate�detect.&*§This�flag�will�stay�true�for�a�timed#*§interval�to�ensure�that�pieces�of$*§char's�are�not�seen�as�new�char's.*%%%%%%%%%%%%%%%%‚BWN�7/9/84**:�RESERVE.4�SCHED_EP’Here�we�save�the�address�of�the�exec's$*¦scheduler�entry�point�that�we�find#*¦using�the�ENTRY�Trap�#0�directive*¦during�initialization.***ˆBackground�activation�area.**’+-----+----+----+----+*ˆBAB�Link‚|…|„|„|„|*’+-----+----+----+----+*ˆBAB�Addr‚|…|„|„|„|*’+-----+----+----+----+ *ˆBAB�Useƒ|…|*’+-----+----+----+*ˆReserved‚|…|„|O „|*’+-----+----+----+*BAB_AREA�EQU‡*4�RESERVE.12‰XMIT_BAB‹Routine�to�transmit�characters.3�RESERVE.12‰RECV_BAB‹Routine�to�receive‚characters.:�RESERVE.12‰BREAK_BABŠRoutine�to�handle�an�incoming�break.5*RESERVE.12‰HALT_BAB‹Routine�to�halt�outstanding�I/O.<*RESERVE.12‰CONFG_BABŠRoutine�to�finish�a�configure�request.;�RESERVE.12‰BLOCK_BABŠRoutine�to�stop�us�from�transmitting.<�RESERVE.12‰UNBLK_BABŠRoutine�to�allow�us�to�transmit�again.=�RESERVE.12‰STOP_BAB‹Routine�to�stop�the�device�from�xmitting>�RESERVE.12‰B_BRK_BABŠRoutine�to�start�sending�a�break�signal.=�RESERVE.12‰E_BRK_BABŠRoutine�to�stop‚sending�a�break�signal./*RESERVE.12‰EVENT_BABŠRoutine�to�send�an�event.=*RESERVE.12‰INIT_BAB‹Routine�to�do�RESET�and�SETUP�(for�init)*%%%%%%%%%%%%%%%%%%%%%%%%*9*‚The�following�5�fields�are�set�up�during�initialization&*‚using�entries�in�the�TCHTYPE�module.*7�RESERVE.1�DRV_CODE‘Driver�code�which�is�returned�for�a*§status�call.8�RESERVE.2�REC_ATT’Mask�of�attributes�recognized�by�this *¦driver.8�RESERVE.2�REC_PAR’Mask�of�parameters�recognized�by�this *¦driver.**%%%%%%%%‚BWN‚9/11/84.�RESERVE.4�REC_BAUD‘Recognized�baud�rates�mask**£Each�bit�in�this�32�bit�mask�corresponds#*£to�a�baud�rate�code�of�$0�to�$1F.-*£The�value�in�this�entry�comes�from�TCHTYPE.*%%%%%%%%%%%%%%%%%�RESERVE.4�DRV_ADDR‘Address�of�driver**%%%%%%%%%%‚bwn‚8/16/84*E*‚This�process�state�is�cleared�in�TERM_INIT�and�set�in�TERM_COMMAND.*‚It�is�tested�in�BREAK.B*‚When�it�is�set,�it�is�OK�to�report�breaks�because�someone�is�out*‚there.*"�RESERVE.1�ES_ST”ES‚process�state.**4TERMDDP‚EQU‡*�This�marks�the�beginning�of�the�device#*£dependent�part�of�the�CCB�that�is!*£unique�for�a�particular�driver.*************************** Ending of &.TERMCCB.EQ ***************************éééééééé