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 "*‚Adjusttotalnumberofterminals&TOTTERM‚=\&TOTTERM+\NOLTERM * Adjust starting CRT device #&CRTDV„=\&CRTDV+\NOLTERM &* Adjust number of serial port drivers&SERFLAG‚=\&SERFLAG+1ééé(0**ˆ&.MPCCDRV.CI*HMSGˆ********************************************************************MSGˆ**†MPCCDRIVERHMSGˆ******************************************************************** IFEQˆ\NT050$1(ƒMSG†NT050$1mustatleastbesettoa1ƒABORTENDCIFGTˆ\NT050$1-2ƒMSG†NT050$1mustbe<=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 "*‚Adjusttotalnumberofterminals&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‰**‚MPSCDRIVERFORVM02LOCALSERIALPORTGMSG‰******************************************************************* IFGTˆ\NOLTERM-2ƒMSG†NOLTERMmustbe<=2ƒABORTENDC SUBSˆ&.MPSCV02.SI&FILENAM‚="&.XMPSCV02.SI"2&SDRVR„="MSUP"‡Mustbeatleast3characterslong INCLUDE…&.MPSCDRV.CI 8*ƒAdjustterminalvaluesfor#ofterminalsonCPUboard&TOTTERM‚=\&TOTTERM+\NOLTERM :*ƒAdjustterminaldevice#for#ofterminalsonCPUboard&CRTDV„=\&CRTDV+\NOLTERMééééé:* *ˆ&.PIAEXM.CI*GMSG‰*******************************************************************9MSG‰**‚PIAPRINTERPORTDRIVERFOREXORMACSLOCALPRINTERGMSG‰******************************************************************* .*ƒChecktomakesureNOLPRTisnotmorethan1IFGTˆ\NOLPRT-1!ƒMSG†NOLPRTcannotbemorethan1ƒABORTENDC SUBSˆ&.PIAEXM.SI&FILENAM‚="&.XPIAEXM.SI" INCLUDE…&.PIADRV.CI 6*ƒAdjustprintervaluesfor#ofprintersonCPUboard&TOTPRTƒ=\&TOTPRT+\NOLPRT 8*ƒAdjustprinterdevice#for#ofprintersonCPUboard5IFEQˆ\&PRTDV-$50522020Testforspecialcaseof'PR‚'ƒ&PRTDV„=$50523020ENDC&PRTDV„=\&PRTDV+(\NOLPRT*$100)éé éééC* *ˆ&.PIA410.CI*GMSG‰*******************************************************************0MSG‰**‚PIAPRINTERPORTDRIVERFORMVME410BOARDGMSG‰******************************************************************* IFGTˆ\NU410$1-2ƒMSG†NU410$1mustbe<=2ƒABORTENDCIFGEˆ\NVME410-2ƒIFGT…\NU410$2-2†MSGƒNU410$2mustbe<=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-$50522020testforspecialcaseof'PR‚'ƒ&PRTDV„=$50523020ENDC &PRTDV„=\&PRTDV+(\NU410$1*$100)IFGEˆ\NVME410-2!ƒ&PRTDV„=\&PRTDV+(\NU410$2*$100)ENDCééééL%* *ˆ&.PIADRV.CI*GMSG‰*******************************************************************@MSG‰**‚PIAPRINTERPORTDRIVER-usedonlocalCPUbds.&VME410GMSG‰******************************************************************* 4IFEQˆ\&PIAFLAG„TesttoseeifweneedthePIAdriver6ƒ*BuildVERSAdospatchchainfile.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-zeromeanswehavealreadyincludedthedriverENDC 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‰**…RWIN1DRIVER-WinchesterDiskControllerGMSG‰******************************************************************* IFEQˆ\NHRWIN$1+\NFRWIN$15ƒMSG†NHRWIN$1orNFRWIN$1mustbeatleastsettoa1ƒABORTENDCIFGTˆ\NHRWIN$1-2ƒMSG†NHRWIN$1mustbe<=2ƒABORTENDCIFGTˆ\NFRWIN$1-2ƒMSG†NFRWIN$1mustbe<=2ƒABORTENDC *‚Adjusttotalnumberofdisks-&&TOTDSKƒ=\&TOTDSK+\NHRWIN$1+\NFRWIN$1 IFGEˆ\NORWIN-2ƒIFEQˆ\NHRWIN$2+\NFRWIN$25†MSG†NHRWIN$2orNFRWIN$2mustbeatleastsettoa1†ABORTƒENDCƒIFGTˆ\NHRWIN$2-2†MSG†NHRWIN$2mustbe<=2†ABORTƒENDCƒIFGTˆ\NFRWIN$2-2†MSG†NFRWIN$2mustbe<=2†ABORTƒENDC!ƒ*‚Adjusttotalnumberofdisks-'ƒ&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--TransparentNetworkTerminalDriverGMSG‰******************************************************************* IFGTˆ\NOTNT-5ƒMSG†NOT NTmustbe<=5ƒABORTENDC TASKˆ&.TNTDRV.LO,.TNTSTATE…='DORM'ATTRIB„='SYST'ATTRIB„='CRIT' SESSIONƒ=1PRIORITY‚=$D0TNTSTR„=*ŒTNTLOADADDR. TNTASR„=*+2ŠTNTASRENTRYPOINTSUBSˆ&.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 #*BuildVERSAdos‚.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‰**…VM22DRIVER-DiskControllerGMSG‰******************************************************************* *3*‚Theattributesmask(word)isdefinedasfollows:*<*ƒBit0:‚MFM(1)/FM(0)encodingmethodonmedia-floppydisk=*ƒBit1:‚96(1)/48(0)TPItrackdensityonmedia-floppydisk.*ƒBit2:‚Double(1)/single(0)sidedfloppydisk6*ƒBit3:‚IBM(1)/Motorola(0)mediaformat-floppydisk7*ƒBit4:‚Harddisk(1)/floppydisk(0)media-bothdisks@*ƒBit5:‚MFM(1)/FM(0)encodingcapabilityondrive-floppydisk<*ƒBit6:‚96(1)/48(0)TPItrackdensity-drive-floppydisk?*ƒBit7:‚Seekreq'dwithheadswitch(1)-SMDdrive-harddisk?*ƒBit8:‚Post-read(1)/Pre-write(0)precompensation-bothdisks4*ƒBit9:‚8inch(1)/5-1/4inch(0)media-floppydisk* IFEQˆ\NHV22$1+\NFV22$13ƒMSG†NHV22$1orNFV22$1mustbeatleastsettoa1ƒABORTENDCIFGTˆ\NHV22$1-8ƒMSG†NHV22$1mustbe<=8ƒABORTENDCIFGTˆ\NFV22$1-4ƒMSG†NFV22$1mustbe<=4ƒABORTENDC *‚Adjusttotalnumberofdisks-$&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 /*‚--adjustdiskcontroller#fordisksonVM22&DSKDV„=\&DSKDV+$1009*‚--adjuststartingdeviceaddress&vector#forIPC#2&DEVADDƒ=\&DEVADD+$200&VECTNOƒ=\&VECTNO-1 pD**ˆ&.VM30DRV.CI*GMSG‰*******************************************************************9MSG‰**…MCCMDRIVER-ThisfiletobuildIOC.ROpartonly!8MSG‰**‰PhysicalIPCdriverhandlesI/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-$50522020testforspecialcaseof'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‰**‚VM01LOCALPRINTERDRIVERGMSG‰******************************************************************* IFGT‹\NOLPRT-2ƒMSG‰NOLPRTmustbe<=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-$50522020testforspecialcaseof'PR‚'ƒ&PRTDV„=$50523020ENDC&PRTDV„=\&PRTDV+(\NOLPRT*$100)é éé‚-**ˆ&.MPSCDRV.CI*GMSG‰*******************************************************************FMSG‰**‚MPSC(7201)DRIVERFORTERMINALS-localCPUboardsandMVME400GMSG‰******************************************************************* 8IFEQˆ\&SUPFLAG„TesttoseeifweneedtheMPSCSUPdriverƒIFEQˆ"\&SDRVR"„,"MSUP"6†*BuildVERSAdospatchchainfile.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-zeromeanswehavealreadyincludedthe †*˜driverƒENDCENDC  8IFEQˆ\&SPRFLAG„TesttoseeifweneedtheMPSCSPRdriverƒIFEQˆ"\&SDRVR"„,"MSPR"6†*BuildVERSAdospatchchainfile.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-zeromeanswehavealreadyincludedthe †*˜driverƒENDCENDC  5IFEQˆ\&MPSCFLG„TesttoseeifweneedtheMPSCdriver6ƒ*BuildVERSAdospatchchainfile.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-zeromeanswehavealreadyincludedthedriver 'ƒ*Adjustnumberofserialportdriversƒ&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‰**‚MPSCDRIVERFORMVME400SERIALPORTSGMSG‰******************************************************************* IFGTˆ\NU400$1-2ƒMSG†NU400$1mustbe<=2ƒABORTENDCIFGEˆ\NVME400-2ƒIFGT…\NU400$2-2†MSGƒNU400$2mustbe<=2†ABORTƒENDCENDC SUBSˆ&.MPSC400.SI&FILENAM‚="&.XMPSC400.SI"2&SDRVR„="MSPR"‡Mustbeatleast3characterslong INCLUDE…&.MPSCDRV.CI "*ƒAdjusttotalnumberofterminals&TOTTERM‚=\&TOTTERM+\NU400$1IFGEˆ\NVME400-2#ƒ*ƒAdjusttotalnumberofterminalsƒ&TOTTERM‚=\&TOTTERM+\NU400$2ENDC *ƒAdjuststartingCRTdevice#&CRTDV„=\&CRTDV+\NU400$1IFGEˆ\NVME400-2ƒ*ƒAdjuststartingCRTdevice#ƒ&CRTDV„=\&CRTDV+\NU400$2ENDC éééé”%**ˆ&.MPSCV03.CI*GMSG‰*******************************************************************-MSG‰**‚MPSCDRIVERFORVM03LOCALSERIALPORTGMSG‰******************************************************************* IFGTˆ\NOLTERM-2ƒMSG†NOLTERMmustbe<=2ƒABORTENDC SUBSˆ&.MPSCV03.SI&FILENAM‚="&.XMPSCV03.SI"2&SDRVR„="MSUP"‡Mustbeatleast3characterslong INCLUDE…&.MPSCDRV.CI 8*ƒAdjustterminalvaluesfor#ofterminalsonCPUboard&TOTTERM‚=\&TOTTERM+\NOLTERM :*ƒAdjustterminaldevice#for#ofterminalsonCPUboard&CRTDV„=\&CRTDV+\NOLTERMééééé**ˆ&.P050DRV.CI*GMSG‰*******************************************************************MSG‰**…MVME050PRINTERDRIVERGMSG‰******************************************************************* IFGTˆ\NP050$1-1ƒMSG†NP050$1mustbe<=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-$50522020testforspecialcaseof'PR‚'ƒ&PRTDV„=$50523020ENDC &PRTDV„=\&PRTDV+(\NP050$1*$100)ééé¦-* *ˆ&.SIODRV.CI*GMSG‰*******************************************************************=MSG‰**‚SIO(MK68564)DRIVERFORTERMINALS-localVM04boardsGMSG‰******************************************************************* IFGTˆ\NOLTERM-2ƒMSG†NOLTERMmustbe<=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‰**…VME420DRIVER-SASI5DISKCONTROLLERGMSG‰******************************************************************* IFEQˆ\NH4205$1+\NF4205$15ƒMSG†NH4205$1orNF4205$1mustbeatleastsettoa1ƒABORTENDCIFGTˆ\NH4205$1-2ƒMSG†NH4205$1mustbe<=2ƒABORTENDCIFGTˆ\NF4205$1-4ƒMSG†NF4205$1mustbe<=4ƒABORTENDC IFGTˆ\NH4205$1+\NF4205$1-4%ƒMSG†\NH4205$1+\NF4205$1mustbe<=4ƒABORTENDC IFGEˆ\NVME4205-1!ƒ*‚Adjusttotalnumberofdisks-'ƒ&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„Numberofhardƒdiskson1stcontrollerboardA&NF420„=\NF4205$1„Numberoffloppydiskson1stcontrollerboard@&M4200„=\M42050$1„Typeof1sthardƒdiskon1stcontrollerboard@&M4201„=\M42051$1„Typeof2ndhardƒdiskon1stcontrollerboardB&M4202„=\M42052$1„Typeof1stfloppydiskon1stcontrollerboardB&M4203„=\M42053$1„Typeof2ndfloppydiskon1stcontrollerboard 2&ADDRESS‚=\L420$02…AddressofVME420boardSASI5 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‰**…VME420DRIVER-SASI8DISKCONTROLLERGMSG‰******************************************************************* IFEQˆ\NH4208$1+\NF4208$15ƒMSG†NH4208$1orNF4208$1mustbeatleastsettoa1ƒABORTENDCIFGTˆ\NH4208$1-2ƒMSG†NH4208$1mustbe<=2ƒABORTENDCIFGTˆ\NF4208$1-4ƒMSG†NF4208$1mustbe<=4ƒABORTENDC IFGTˆ\NH4208$1+\NF4208$1-4#ƒMSG‰NH4208$1+NF4208$1mustbe<=4ƒABORTENDC IFGEˆ\NVME4208-1!ƒ*‚Adjusttotalnumberofdisks-'ƒ&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„Numberofhardƒdiskson2ndcontrollerboardA&NF420„=\NF4208$1„Numberoffloppydiskson2ndcontrollerboard@&M4200„=\M42080$1„Typeof1sthardƒdiskon2ndcontrollerboard@&M4201„=\M42081$1„Typeof2ndhardƒdiskon2ndcontrollerboardB&M4202„=\M42082$1„Typeof1stfloppydiskon2ndcontrollerboardB&M4203„=\M42083$1„Typeof2ndfloppydiskon2ndcontrollerboard 2&ADDRESS‚=\L420$01…AddressofVME420boardSASI8 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*‹FiletobeincludedatsysgentobringintheTERMLIB**@*‹AssembletheTCHTYPEfileofvalidchanneltypesforterminals**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 \DARTDRVSEGMENTDRVL:15‚\DRVLSEGMENTTERM: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:‚ALLinputmodulesshouldbeinSECTION15=/*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=/*=/*changes4/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,=/*betweenONBD_LOandOFFBD_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$HIand\RAM$SQ7=/*†=‚parametersdefinedbythemacrofileDUALPORT.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$LOOnboard‚rambase‚addressusedbymacroDUALPORT;=/*†ONBD$HIOnboard‚ramendƒaddressusedbymacroDUALPORT>=/*†OFFBD$LOŒOffboardrambase‚addressusedbymacroDUALPORT==/*†OFFBD$HIŒOffboardramendƒaddressusedbymacroDUALPORT==/*†RAM$SQŽOnboardramoffsetaddressusedbymacroDUALPORT=/*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$SDPost-data-gapsingle-densityfloppyformat6=/*†M320$DDPost-data-gapdouble-densityfloppyformat*=/*†M320$HDPost-data-gapharddiskformat==/*†M320$LT5ŒHeadloadtime5-1/4"floppydiskdrivesinmsec9=/*†M320$LT8ŒHeadloadtime8"floppydiskdrivesinmsec4=/*†M320$LTHŒHeadloadtimeharddiskdrivesinmsec<=/*†M320$ST5ŒHeadsettlingtime5-1/4"floppydrivesinmsec8=/*†M320$ST8ŒHeadsettlingtime8"floppydrivesinmsec8=/*†M320$STHŒHeadsettlingtimeharddiskdrivesinmsec=/*"=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‚modulesshouldallbeinSECTION15.=/*!=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‚modulesshouldallbeinSECTION15.=/*"=LINK ,&.TERMLIB.LO,\LINKLS;HAMIXSSEGMENTTERM(R):14‚\TERMLIBSEGMENTDRVL(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*9DEVADDR1SET‡\L400$01‚Assignaddressof1stMVME400board9DEVADDR2SET‡\L400$02‚Assignaddressof2ndMVME400board*ATT_MASKSET‡$0FFF…Settheattributesmask*PAR_MASKSET‡$7FF3…Settheparametersmask8CHANTYP1SET‡XTS7AR„SetthechanneltypeforMPSCA-side8CHANTYP2SET‡XTS7BR„SetthechanneltypeforMPSCB-side"IOCVECT‚SET‡\IOCVEC4‚Vectornumber IOCLVLƒSET‡\IOCLVL4‚Vectorlevel:NOMPSCƒSET‡\NVME400‚DefinethenumberofMPSCchips/boards?NUBRD1ƒSET‡\NU400$1‚Definethenumberofterminalson1stboard?NUBRD2ƒSET‡\NU400$2‚Definethenumberofterminalson2ndboardéééééÍ ?* &.MPSCV02.SI - Include file for VM02 local serial MPSC driver*0DEVADDR1SET‡\LTDA$01‚Assignaddressof1stMPSC9DEVADDR2SET‡0‰Assignaddressof2ndMPSC(NoneforVM02)*ATT_MASKSET‡$0FFF…Settheattributesmask*PAR_MASKSET‡$77F3…Settheparametersmask8CHANTYP1SET‡XTS7A2„SetthechanneltypeforMPSCA-side8CHANTYP2SET‡XTS7B2„SetthechanneltypeforMPSCB-sideIOCVECT‚SET‡$8C‡VectornumberIOCLVLƒSET‡6‰Vectorlevel3NOMPSCƒSET‡1‰DefinethenumberofMPSCchips/boards>NUBRD1ƒSET‡\ NOLTERM‚Definethenumberofterminalson1stMPSC=NUBRD2ƒSET‡0‰Definethenumberofterminalson2ndMPSC‚(N/A)éééééÖ ?* &.MPSCV03.SI - Include file for VM03 local serial MPSC driver*0DEVADDR1SET‡\LTDA$01‚Assignaddressof1stMPSC9DEVADDR2SET‡0‰Assignaddressof2ndMPSC(NoneforVM03)*ATT_MASKSET‡$0FFF…Settheattributesmask*PAR_MASKSET‡$7FF3…Settheparametersmask8CHANTYP1SET‡XTS7A3„SetthechanneltypeforMPSCA-side8CHANTYP2SET‡XTS7B3„SetthechanneltypeforMPSCB-sideIOCVECT‚SET‡$43‡VectornumberIOCLVLƒSET‡4‰Vectorlevel3NOMPSCƒSET‡1‰DefinethenumberofMPSCchips/boards>NUBRD1ƒSET‡\NOLTERM‚Definethenumberofterminalson1stMPSC=NUBRD2ƒSET‡0‰Definethenumberofterminalson2ndMPSC(N/A)éééééß  @* &.PIA101.SI - Include file for VME101 local printer PIA driver*/DEVADDR1SET‡\LPDA$01‚Assignaddressof1stPIA;DEVADDR2SET‡0‰Assignaddressof2ndPIA(NoneforMVME101) CHANTYPESET‡XTPRTL„ChanneltypeIOCVECT‚SET‡$1B‡VectornumberIOCLVLƒSET‡3‰Vectorlevel'NOPIA„SET‡1‰Definethenumberofboards=NUBRD1ƒSET‡\NOLPRTƒDefinethenumberofprinterson1stboard=NUBRD2ƒSET‡0‰Definethenumberofprinterson2ndboard(N/A)ééééééè A* &.PIA410.SI - Include file for MVME410 local printer PIA driver*9DEVADDR1SET‡\L410$01‚Assignaddressof1stMVME410board9DEVADDR2SET‡\L410$02‚Assignaddressof2ndMVME410board CHANTYPESET‡XTPRTL„Channeltype"IOCVECT‚SET‡\IOCVEC1‚Vectornumber IOCLVLƒSET‡\IOCLVL1‚Vectorlevel6NOPIA„SET‡\NVME410‚DefinethenumberofMVME410boards@NUBRD1ƒSET‡\NU410$1‚Definethenumberofprinterson1stMVME410@NUBRD2ƒSET‡\NU410$2‚Definethenumberofprinterson2ndMVME410ééééé éñ B* &.PIAEXM.SI - Include file for EXORmacs local printer PIA driver*/DEVADDR1SET‡\LPDA$01‚Assignaddressof1stPIA;DEVADDR2SET‡0‰Assignaddressof2ndPIA(NoneonEXORmacs) CHANTYPESET‡XTPEXM„ChanneltypeIOCVECT‚SET‡$8B‡VectornumberIOCLVLƒSET‡5‰Vectorlevel5NOPIA„SET‡\NOLPRTƒDefinethenumberoflocalprinters7NUBRD1ƒSET‡1‰Definethenumberofprinterson1stboard=NUBRD2ƒSET‡0‰Definethenumberofprinterson2ndboard(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±F3Jf"|ø)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@Àhi0)â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 @JgHçþNLßþ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@Àhip0)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<‰|BAF32 )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ß`ú>BB‚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@Àhi0)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‡”€F3p­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@ÀhF3i0)â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-F3f 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@Àhi0)â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@Àhi0)â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@Àhi0)F3// Aè Cé EúüîBgâ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þ& -´B2-vgnü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¦NNuÀ-À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 `âŠ&`ÿxBB‚))€Á"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:andiftheinterruptwasnotforus.=*…12/22/83‚RussRustad„Increaseddelayduringkeyboardreset.9*†7/29/83‚SteveFranckƒAddeddelayduringkeyboardreset.w,€Dˆ<G˜6 ;¨D°9¸FÀ?È6Ð'ØJà/è:ð?øH9MIC B(10e856*†7/13/83‚SteveFranckƒAddedkeyboardlockoutsensing.'*†6/3/83‚SteveFranckƒInitialwriting.*ŠPAGE* *‚XDEF's.*@ŠXDEFƒINIT_KEYBOARD„EntrypointforINITIALIZEKEYBOARDroutine.:ŠXDEFƒGET_CHAR‹Entrypointforroutinetobecalledwhena'*§receiveinterruptoccursonthe2661.9ŠXDEFƒRING_BELLˆFlagtellingustoissueacommandtothe*§keyboardtoringthebell. *0*‚XREF's(indicatewheretheXDEFis,ifknown).*?ŠXREFƒCLEAR_SCREEN,RESET_SCREENƒRoutinestoclearandresetthe*§screen;bothareinOUTCHS. **‚Equatefilesincluded:2*…&.UTILITY.MC„Utilitymacros(likePUSHandPOP).*ŠNOLISTŠINCLUDE&.UTILITY.MCŠLISTŠPAGEO********************************************************************************3*‰DIAGRAMDEPICTINGTHEROLESOFTHEVARIOUSTABLES*O*******************************************************************************  * *©routine *©offsets *Šscan---*ŠcodeŒ-isroutine„|ƒ|*Štableindex‡|ƒ|/*‹---,------------->|ƒ|------------->BSR‚....*ƒscanƒ|ƒ|‹/|ƒ|TST‚....*ƒcodeƒ|ƒ|Š/‘---etc.*‚------->|ƒ|---------< *Š|ƒ|ƒ\†\‘--- *‹---…|†\|ƒ|*“|‡`------------->|ƒ|--------.*“|‡+isgroup…|ƒ|ˆ|†char*“|Šindex‡|ƒ|ˆ|†table*“|—---‰`----->--- *“|–group|ƒ|*“|parameter‹offsetsŽ|ƒ|*“|¢.------>|ƒ| *“|¢|‡|ƒ|**“`----------------------------------'ˆ---* *I*‚Whenascancodeisreceived,itisusedasanindexintotheSCANCODE5*‚TABLEtogetagroup/routineindexandaparameter.*I*‚Ifthegroup/routineindexisnegative,thenitisaroutineindex.‚TheJ*‚correspondingoffsetistakenfromtheROUTINETABLEandthatroutineis@*‚JMPedto.‚Theparametermayormaynotbeusedbytheroutine.*G*‚Ifthegroup/routineindexispositive,thenitisagroupindex.‚TheH*‚correspondingoffsetistakenfromtheGROUPTABLE,givingtheaddressJ*‚ofthecharactertablecurrentlyineffectforthatgroup.‚Theparameter I*‚isusedasanindexintothecharactertabletoretrievethecharacter.F*‚Iftheentryinthecharactertableis0,nocharacterisgenerated.*ŠPAGEO*v***********************************************************************************…DATA(OTHERTHANTABLES)***O*^***************************************************************************** ŠSECTION0 *,*‚Modesbyteandbitequatesrelatingtoit.*6MODES…DC.Bƒ0’Themodesbyte.‚Bitsinthisbytereflect)*§thestatus(upordown)ofvariousmode*§keysontheVME/10keyboard. 4BLANK…EQU„0’Ifthisbitis1,theblanklockingmode*§keyisdown.*CTRL†EQU„1’Ifthisbitis1,CTRLisdown.6SHIFT…EQU„2’Ifthisbitis1,oneorbothoftheSHIFT*§keysaredown.3PAD‡EQU„3’Ifthisbitis1,FUNC/PADisdown(PAD).6ALPHA_LOCKEQUƒ4’Ifthisbitis1,ALPHALOCKisdown.(ALT‡EQU„5’Ifthisbitis1,ALTisdown. *>*‚Statusofthetwoshiftkeysandbitequatesrelatingtoit.*:SHIFT_KEYSDC.B‚0’Bitsinthisbytereflectthestatus(up%*§ordown)ofthetwoSHIFTkeys.‚The&*§compositeofthesetwokeysismain-*§tainedintheMODESregister. 4LEFT†EQU„0’Ifthisbitis1,theleft‚SHIFTisdown.6RIGHT…EQU„1’Ifthisbitis1,therightSHIFTisdown. *4*‚Equatesforthevaluesgeneratedbyfunctionkeys.*6FNKEY_F1‚EQU„$A0Valuetogenerateforfunctionkey1.;FNKEY_S1‚EQU„$B0Valuetogenerateforshiftedfunctkey1. *?*‚EquatesdescribingwhatweneedoftheVMEC1statusregister.****‡selectsthekeyboard,andenableskeyboardinterrupts.Œ******É***C***…NOTES:‚Ifanerroroccurs,keyboardinterruptswillbeleftˆ***@***‡disabledtopreventerroneousdatafrombeingprocessed.Š***E***‡Currently,however,wearenotcheckingtheself-teststatus,…***E***‡andthereforethereisnopossibilityofanerrorreturn.‚The„***;***‡hooksareleftintofacilitatelaterenhancements.******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR******‡A:ƒ.ƒ.ƒ.ƒPƒPƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ***G***‡CCR:‚=Keyboardinitializationwascompletedsuccessfully.‚***7***=Anerroroccurredduringinitialization.******É***O*^*****************************************************************************O******************************************************************************* ŠDS…0 ŠSECTION0ŠOPT„BRS INIT_KEYBOARD: ŠSAVEƒD0/A3/A4‹Saveregisters. -ŠLEA„EPCI,A3ŒA3<--baseaddressofthe2661.3ŠLEA„CR2,A4A4<--addressofcontrolregister2on*§theprocessorboard. >ŠBSR„RESET_KEYBOARD…Initializethe2661chipandthekeyboard.*5*‚Initializetheringbellflagtobesureitisoff.*3ŠSF…RING_BELLŠNobelluntilwearetoldtobeepit. *;*‚Checkifweareconnectedtotheoldorthenewkeyboard.G*‚Theoldkeyboardshouldreturna$FFifgivenaSTATUScommand,sinceB*‚itdoesnotsupportthiscommand.‚ThenewkeyboardwillreturnaF*‚codebetween$00and$70.‚IfitistheoldkeyboardwesetaflagtoE*‚remindustoonlyusetheREAD_KBcommandwhenrequestingdatafrom*‚thekeyboard.*8ŠMOVE.B#STATUS_KB,DATA(A3)‡IssueareadSTATUScommand.AWAIT3…BTSTƒ#CHAR_AVAIL,STATUS(A3)„Waituntilwehavereceivedthe.ŠBEQ„WAIT3•acknowledgecodefromthekeyboard. +ŠMOVE.BDATA(A3),D0Isittheoldkeyboard? ,ŠCMP.B‚#2,D0•*!!!OLDKEYBOARDRETURNS$02,%ŠIF.B‚THEN’*!!!INSTEADOF$FF. ***‡IF.B‚THEN 4ŒST…OLD_KEYBOARDŒYes-setourflagstoremindusto1ŒST…DOING_READŽuseonlyREADcommands,thenissue 8ŒBSR„RESET_KEYBOARDŠ*!!!MUSTRESET,ELSEKEYBRDHANGS.  =ŒMOVE.B#READ_KB,DATA(A3)‡thefirstreadtostartthingsoff. ŠELSE 1ŒSF…OLD_KEYBOARDŒNo‚-initializeourflagforNEW2ŒSF…DOING_READŽkeyboard,cleartheDOING_READflag%*§sincewewillsendaSTATUScommand7ŒMOVE.B#STATUS_KB,DATA(A3)…first,tostartthingsoff. ŠENDI *&*‚Enableinterruptsfromthekeyboard.*1ŠBSETƒ#KB_ENABLE,(A4)„Enablekeyboardinterrupts. 2ŠCLR„D0‘SetCCR:toindicatesuccessonexit.  **‚Exit.*6INIT_EXITRESTORED0/A3/A4ŠRestoreregistersandexit.ŠRTS—*‰PAGEO*v*****************************************************************************O**********************************************************************************É***E***…RESET_KEYBOARD--ROUTINETOSETUPTHE2661ANDTHEKEYBOARD‡******É***<***…FUNCTION:‚Thisroutine‚iscalledfromINIT_KEYBOARD.Ž******É******…NOTES:¾******É******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒDƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.******‡A:ƒ.ƒ.ƒ.ƒAƒAƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É******…D0isdestroyed.´******É***O*^*****************************************************************************O*******************************************************************************RESET_KEYBOARD: **‚Resetthekeyboard.*;ŠBCLRƒ#KB_ENABLE,(A4)„Disableinterruptsfromthekeyboard. =ŠBCLRƒ#KB_RESET,(A4)…Momentarilydrivelow(active)theRESET;ŠMOVEQ‚#RESET_WAIT,D0…linetothekeyboard.‚Becauseweneed.ŠREPEAT”tomaintaintheRESETsignalforabout-ŠSUB.L‚#1,D0Ž13usecs,wehavetodelayabit&ŠUNTIL‚beforeremovingtheRESET.ŠBSETƒ#KB_RESET,(A4)…* ?ŠMOVE.L#WAIT_COUNT,D0…Waitapredefinedamountoftimeforthe8WAIT1…SUB.L‚#1,D0ŽkeyboardtogetitsacttogetherafterŠBNE„WAIT1Žthereset. *M*‚Initializethe2661.‚Becausethe2661moderegisterisreallytworegistersM*‚andtheoneyou'rewritingtodependsuponthesequenceofpriorwrites,we(*‚mustdothiswithinterruptsdisabled.*(ŠPUSHƒSR‘SaveSRanddisableinterrupts.ŠMOVEƒ#$2700,SRŠ*:ŠTST.B‚COMMAND(A3)ˆReadthecommandregister,whichcauses&*§themoderegistertopointtoreg1.?ŠMOVE.B#MODE1_INIT,MODE(A3)Initializemoderegisters1and2.ŠMOVE.B#MODE2_INIT,MODE(A3)*?ŠMOVE.B#COMM_INIT,COMMAND(A3)Initializethecommandregister.ŠPOP„SR‘RestoreSR. **‚Selectthekeyboard.*DŠMOVE.B#SELECT_KB,DATA(A3)SendthecommandtoSELECTtheKEYBOARD. AWAIT2…BTSTƒ#CHAR_AVAIL,STATUS(A3)Waituntilacharacterhasbeen ŠBEQ„WAIT2Žreceivedbythe2661. :ŠTST.B‚DATA(A3)‹Readtheresponse.‚Ifit'snotanACK(0),'*§thekeyboardfaileditsself-test.‚We(*§ignorethestatus,though,sinceitis$*§possiblethattheself-testfailed)*§becausesomeonewasholdingdownakey,)*§andwedon'twantsuchaminorthingto"*§preventthesystemfrombooting.ŠRTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***K***…CHK_INTERRUPT--ROUTINETOCHECKTOSEEIFTHEINTERRUPTISFORUS******É***7***…FUNCTION:‚Thisroutine‚iscalledfromGET_CHAR.“******É******…NOTES:¾******É******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒDƒDƒPƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR******‡A:ƒRƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ***-***‡CCR:‚=theinterruptisnotoursœ***5***Œ:=noerrorwasindicatedinstatus***(***’=errorindicatedinstatus—******É*** ***…D0andD1aredestroyed.¬******É***O*^*****************************************************************************O*******************************************************************************CHK_INTERRUPT:  (‰LEA„EPCI,A0A0<--addressofthe2661. 3‰MOVE.B‚COMMAND(A0),D1ˆGet2661'scommandregister.1‰MOVE.B‚STATUS(A0),D0‰Get2661'sstatus‚register. #‰BTST„#TXEN,D1ŽTransmitterenabled? ‰IF‚‚THENNo,checkreceiver ŽBTSTƒ#RXEN,D1ŽReceiverenabled?(ŽIF‚‚THEN‹No,returnwithCCR=“RTSŽENDI‰ENDI*J*‚Ifanerrorbitisset,thenitsourinterruptandwewillgohandleit.* ‰PUSH.L‚D2 ‰MOVE.L‚D0,D2"‰AND.Bƒ#ANY_ERROR,D2‰Errorstatus?‰IF‚‚THENIfso, POP.LƒD2%MOVE.B‚#-1,D0ŒReturnwithCCR=RTS‰ENDI‰PAGE ‰POP.LƒD2*C*‚Well,wegotherebecauseeitherthetransmitterorreceiveris†.**‚enabledandthereisnoerrorcondition.B*‚Checkbitsinthestatusregisterandcontrolregistertoseeif*‚anyareset.*+‰AND.Bƒ#KB_INTERRUPT,D0†Keyboardinterrupt?‰IF‚ƒTHENIfnot,then-AND.Bƒ#FORCE_BREAK,D1ƒforce-breakcondition?.IF‚‚THENŒIfnot,thenRTSwithCCR=‘RTSENDI‰ENDI**‚Theinterruptisours!!!!*‚ReturnwithCCR=and*‰RTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***K***…CHK_READ---ROUTINETOCHECKIFITISAREADORASTATUSINTERRUPT******É***7***…FUNCTION:‚Thisroutine‚iscalledfromGET_CHAR.“******É******…NOTES:¾******É******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒRƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR******‡A:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³******‡A0.L=Addressof2661¬******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É***9***‡CCR:‚=TheinterruptisfromaREADƒcommand.Ž***.***”D0.B=Contentsof2661dataregister.***6***Œ‚=TheinterruptisfromaSTATUScommand.Ž******”D0.B=Zero.©******É***O*^*****************************************************************************O******************************************************************************* CHK_READ: ŠCLR.W„D04ŠMOVE.BDATA(A0),D0ˆD0.W<--datafromthekeyboard.*@*‚ChecktoseeifthisinterruptisfromSTATUSorREADcommand:*ŠIF.B‚DOING_READ‚#0THEN @ŒBTST#DATA_AVAIL,D0…ThisisaSTATUSinterrupt,socheckifthe)*§keyboardFIFOhasdatathatcanbeREAD 7ŒIFTHENŒItdoes,sonowsetourflagtoinformus5ŽSTDOING_READ‰thenextinterruptwillbefromaREAD>ŽMOVE.B#READ_KB,DATA(A0)‚command.‚ThenissuetheREADcommand'*§sothatwewillbesentthescancode*§inthekeyboard'sFIFO. ŒELSE *D*‚Atthispointourstatussaysthereisnocharactertoread,soweC*‚usethisopportunitytocheckifwemustringthebell.‚Ifso,we>*‚clearthebellflagfornexttimeandissueacommandtothe#*‚keyboardthatwillringthebell.*ŽIF.B‚RING_BELL#0THEN"SFƒRING_BELLŽClearfornexttime.*MOVE.B‚#ALARM_KB,DATA(A0)‚Beepthatbell!*BRA‚CHKOUT‘Returnsincenocharyet.ŽENDI 9ŽMOVE.B#STATUS_KB,DATA(A0)‚Nodatayet,soissueanother*©STATUScommand.ŒENDI 3CHKOUT†CLR.BD0ReturnwithCCR=foraSTATUS%ŒRTS•interrupt.‚Thiswillbeignored. ŠENDI 0ŠRTS—ReturnwithCCR=foraREADinterruptŠPAGEO*v*****************************************************************************O**********************************************************************************É***B***…SEND_COMMAND--ROUTINETOOUTPUTANOTHERKEYBOARDCOMMANDŠ******É***7***…FUNCTION:‚Thisroutine‚iscalledfromGET_CHAR.“******É******…NOTES:¾******É******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR******‡A:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³******‡A0.L=Addressof2661¬***B***‡D0.B=Characterthatwasjustreceivedfromthekeyboard.ˆ******É*** -***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ******É***C***‡CCR:‚=Thecharacterhasbit8set,soitisanerror.†***<***Œ‚=Goodcharacter,nextcommandhasbeenissued.ˆ******É***O*^*****************************************************************************O******************************************************************************* SEND_COMMAND: (ŠTST.B‚D0‘Testthescancodeforerrors. ŠIFTHEN$ŒRTS•Bit8mustbezero,elseerror.ŠENDI *I*‚Ifthisistheoldkeyboard,wegetdataonlybyissuingREADcommands.G*‚TheoldkeyboarddoesnotallowSTATUScommands.‚IfitisnottheoldG*‚keyboardwejustissueaSTATUScommand.‚Thiseffectively'polls'theH*‚keyboardwithSTATUScommands,untilithasacharacterinitsFIFOto *‚sendus.*ŠIF.B‚OLD_KEYBOARD‚#0THEN 0ŒST…DOING_READŠOldkeyboard-soissueitaREAD<ŒMOVE.B#READ_KB,DATA(A0)ƒcommandtogetthenextscancode. ŠELSE 2ŒSF…DOING_READŠNewkeyboard-soissueitaSTATUS<ŒMOVE.B#STATUS_KB,DATA(A0)commandtogetthestatusagain. ŠENDI /ŠTST.B„D0’TestthecharactertosetCCR=.ŠRTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***;***ŒGET_CHAR--ROUTINETOGETACHARFROMTHEKEYBOARDŠ******É***)***…FUNCTION:‚ThisroutineisXDEFed.¢******É***C***…Thisroutine,ifconnectedtoanOLDkeyboardthatdoesnot‰***7***…supporttheSTATUScommandoperatesasfollows:•******É***H***‡Entryisfromakeyboardinterrupt.‚Sinceitistheoldkeyboard***H***‡thismustbeaninterruptfromusissuingaREADcommand.‚Weget***G***‡thescancodefromthe2661andissuethekeyboardanotherREADƒ***H***‡command.‚Thescancodeisthenprocessedbyjumpingtoaroutine***I***‡orbyconvertingthescancodeintoacharacter,dependingonthe***$***‡scancodethatwasreceived.¦******É******É***?***…Thisroutine,ifconnectedtoanNEWkeyboardthatdoes***7***…supporttheSTATUScommandoperatesasfollows:•******É***C***‡Entryisfromakeyboardinterrupt.‚Wedetermineifwehave†***H***‡beeninterruptedbytheSTATUScommand.‚Ifso,wecheckthedata***E***‡inthe2661toseeifthekeyboardFIFOhasdatainit.‚Ifit„***D***‡doesnot,wesimplysendanotherSTATUScommandandexit.‚If…***H***‡theFIFOhasdatainit,wesendaREADcommandtogetthedata.‚***F***‡IftheinterruptwasnotfromtheSTATUScommand,itmusthave„***H***‡beenfromtheREADcommand,sowegetthedatainthe2661.‚This***D***‡dataisthescancodesetbythekeyboardinresponsetothe†***A***‡READcommand.‚AnotherSTATUScommandisthengiventotheˆ***@***‡keyboardtostarteverythingover.‚Thescancodeisthen‰***H***‡processedbyjumpingtoaroutineorbyconvertingthecodeinto‚***9***‡acharacter,dependingonthescancodereceived.‘******É***C***…NOTES:‚Anoldkeyboardwillinterruptusonlywhenithasaˆ***>***charactertogiveus.‚Anewkeyboardwillinterrupton…***@***everySTATUScommand,sincewearepollingthekeyboard.„***B***Wetalktothekeyboardat512baudsowegetaninterrupt‚***B***aboutevery50milliseconds.‚Thenewkeyboardisusedonly***2***becausewenowwanttosupportthe'bell'.’******É******É***E***…REGISTERUSAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SRhi„SRlo(CCR)…******‡D:ƒRƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR******‡A:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRYCONDITIONS:³******É***-***…EXITCONDITIONSDIFFERENTFROMENTRY:Ÿ***F***‡CCR::=keystrokedidnotgenerateacharorbreak.„***(***“=theinterruptisnotours–***A***Œ:=generatedcharisinD0.W(bits8-15are0).„***%***’=abreakwasgenerated.š***(***‡D0isnotpreservedinanycase.¢******É***O*^***************************************************************************** O******************************************************************************* $BASE†EQU„*’Baseforalltheoffsets. GET_CHAR: ŠSAVEƒD1/A0ŽSaveregisters. *&*‚Gocheckiftheinterruptisforus.* ‰BSR.LƒCHK_INTERRUPT*‰BEQ.LƒINTNOPTheinterruptwasnotforus3‰BMI.LƒERROR‘Therewasanerrorconditioninstatus*8*‚Theinterruptisours,goseewhichcommandcausedit.7*‚WereturnfromCHK_READwiththescancodeinD0.Bif9*‚thisinterruptwascausedbyusissuingaREADcommand.* 8‰BSR.SCHK_READGocheckifinterruptisREADorSTATUS. ‰IFTHEN6‹BRA.LIGNORENotaREADinterrupt,sojustignoreit.‰ENDI *L*‚Checkthenewscancodeforerrorsandissuethekeyboardanothercommand.* 6‰BSR.SSEND_COMMAND‰Sendthekeyboardanothercommand. ‰IFTHEN7‹BRA.LERRORŽThisscancodehadanerror,gotryagain.‰ENDI *9*‚Usescancodetogetgroup/routineindexandparameter.*8ŠADD„D0,D0ŒD0.W<--2*scancodeforuseaswordindex.EŠLEASCAN_CODE_TBL(PC,D0),A0A0<--pointertoentryinthescancode(*§tablecorrespondingtothisscancode. %ŠCLR„D1‘D1.W<--group/routineindex.ŠMOVE.B(A0)+,D1‹*$ŠMOVE.B(A0)+,D0‹D0.W<--parameter. *F*‚Anegativegroup/routineindexindicatesaroutineshouldbecalled."*‚Ifthisisaroutine,JMPtoit.*,ŠEXT„D1‘Signextendthegroup/routineindex.5ŠIF…THENŠIfit'snegative,thisisaroutine,so BŠIFD1#NONLOCKABLETHEN„IfthisisaroutineaffectedbytheAŠBTST‚#KBD_UNLOCK,STATUS_REGƒfrontpanellock,checkthelock;if* ŠIF‚THEN:ŠBTST#KBD_LOCK,KBD_OVRD„Checktheconditionofthesysgen'*¤parametertoseeifwewanttoignore*¤thekeyswitch. ŠIFTHEN ŠBRA.L‚IGNOREŠENDIŠENDIŠENDI–* ŠNEG„D1‘Maketheindexpositive.5ŠMOVEƒRTN_TBL(PC,D1),D1‚D1<--offsettotheroutine.ŠJMP„BASE(PC,D1)ˆJMPtoit. ŠENDI *H*‚It'snotaroutine,it'sagroup,sousetheparametertogetthechar4*‚fromthetablecurrentlyineffectforthatgroup.*7ŠBTSTƒ#KBD_UNLOCK,STATUS_REGƒIfthekeyboardislocked,* ŠIF‚THENŠBTSTƒ#KBD_LOCK,KBD_OVRD ŠIFTHEN ŠBRA.L‚IGNOREŠENDIŠENDI?ŠADD„GRP_TBL(PC,D1),D0‚D0<--offsetfromBASEtocharintable"*§*‚=element#+offsettotable.2ŠMOVE.BBASE(PC,D0),D0…D0<--charfromthetable. ?EXIT_CHAR:ANDƒ#$00FF,D0ŠSetCCR:ifD0=0else,2ŠRESTORED1/A0toindicateCHARGENERATED.‚RestoreŠRTS—registersandexit.'*£NotethatineithercasetheVbitis *£cleared.ŠPAGEO*v********************************************************************************#***…ROUTINEANDGROUPOFFSETTABLES***E***…FUNCTION:‚EachentryinthescancodetablecontainsabytevalueE***‡calledthegroup/routineindex.‚Itisa1-bytevalueinwhichbitA***‡0isalways0.‚Ifbit7is1,itisaroutineindexandisanB***‡offsetintoRTN_TBL.‚Ifbit7is0,itisagroupindexandis@***‡anoffsetintoGRP_TBL.‚ThesetablescontainwordoffsetstoG***‡routinesortablesinthismodule.‚ThewholepurposefortheseguysC***‡istoalloweachscancodetableentrytobejust2byteslong.***O*^***************************************************************************** *J*‚Theseentriesareatnegativegroup/routineindexes,makingthemroutineG*‚indexes.‚Theycontaintheoffsetstothespecifiedroutine.‚NotethatH*‚RTN_OFFSETBLIPalsocreatesanequatefortheroutineindex,RI$BLIP,I*‚whichisusedbytheRTNmacrointhescancodetableslater.‚AlsonoteF*‚thatRTN_TBLissetback2bytessothatthereisnoentry#0intheG*‚routinetable;thisisnecessarysincenegative0is0andthatindexJ*‚wouldbeindistinguishablefromthepositive0indexinthegrouptable.* *M*‚NotetheNONLOCKABLElabelwithintheroutinetable.‚RoutineswhoseentriesN*‚areabovethatlabelwillnotbecalledwhilethekeyboardlockonthefront K*‚panelisintheLOCKEDposition--onlywhenitisUNLOCKED.‚RoutinesatorG*‚belowthatpointarecalledregardlessofthekeyboardlock'sstatus.*RTN_OFFSET MACRORI$\1…EQU„-(*-RTN_TBL) ŠDC.Wƒ\1-BASEŠENDM RTN_TBLƒEQU„*-2ŠRTN_OFFSETTWO_ATŠRTN_OFFSETESC_RESETŠRTN_OFFSETBREAK_CLEARŠRTN_OFFSETGEN_ALPHAŠRTN_OFFSETFNKEYGNONLOCKABLEEQU‚-(*-RTN_TBL)‡Routinesbelowthisgetcalledevenifthe(*£keyboardislockedonthefrontpanel.ŠRTN_OFFSETSET_SHIFTŠRTN_OFFSETCLR_SHIFTŠRTN_OFFSETSET_MODEŠRTN_OFFSETCLR_MODEŠRTN_OFFSETIGNOREŠPAGE*G*‚Thistablecontainsoffsetstocharactertables.‚GRP_TBLisusedwhenH*‚athegroup/routineindexforascancodeispositive(>=0).‚HereweK*‚definethespaceforthetableandsettheoffsetsfortheinitialtablesH*‚(wherenomodekeysaredown).‚Asmodekeysarepressed,theseoffsets*‚maygetreplaced.*GRP_OFFSET MACRO ŠDC.Wƒ\1-BASEŠENDM GRP_TBLƒEQU„*7ŠGRP_OFFSETTBL.___ˆGroup0:‚nomodekeysaffectthese.9ŠGRP_OFFSETTBL.NN_ˆGroup1:‚SHIFTandCTRLaffectthese./ŠGRP_OFFSETTBL.__NˆGroup2:‚PADaffectsthese.;MAX_GRP_NUMEQU‚(*-GRP_TBL)/2†Highestdefinedgroupnumber.ŠPAGEO*v********************************************************************************B***…SCANCODETABLE--CONVERTSASCANCODETOGROUP/ROUTINEINDEX***˜&PARAMETER.***D***…FUNCTION:‚Thescancodetakenfromthe2661,multipliedby2,isB***‡usedasanindexintothistable.‚Thistablecontainsa2-byteC***‡entryforeachpossiblescancode:‚a1-bytegroup/routineindex4***‡(seetheoffsettable,OFF_TBL)andaparameter.***O*^***************************************************************************** SCAN_CODE_TBL: *H*‚TheRTNmacroisusedtomakeentriesinthescancodetableforthoseG*‚scancodeswhichwillresultinsomeroutinebeingrun.‚Theformatis"*„RTN[,]G*‚ThefirstargumentisthenameoftheroutinetogotowhenthisscanJ*‚codeisreceived.‚Thesecondargument,whichisoptional,isaparameterI*‚topasstotheroutine.‚Thatis,thesameroutinemaybeusedwithmany:*‚differentscancodes,eachpassingadifferentargument.* RTN‡MACRO ŠDC.BƒRI$\1 ŠIFC„'\2',''ŠDC.Bƒ0ŠMEXITŠENDCŠDC.Bƒ\2ŠENDM *J*‚TheALPHAmacroisusedtomakeentriesinthescancodetableforthoseE*‚scancodeswhichwillgeneratealphabeticcharacters.‚Theformatis(*„ALPHA* ALPHA…MACROŠDC.BƒRI$GEN_ALPHA,'\1'ŠENDM *J*‚TheGROUPmacroisusedtomakeentriesinthescancodetableforthoseB*‚scancodeswhichhaveentriesincharactertables.‚Theformatis.*„GROUP,G*‚Bothargumentsarerequired.‚Thefirstis0,1,...whateverthehighestI*‚groupindexis,asdefinedinOFF_TBL.‚Thesecondargumentistheindex5*‚intothechosencharactertableforthisscancode.* GROUP…MACROŠIFGTƒ\1-MAX_GRP_NUM#ŠFAILƒ499Thisgroup#istoohigh.ŠENDC ŠDC.Bƒ2*\1,\2ŠENDMŠPAGE*§scan*‚$00-$1FœcodeƒKey&*§---„--------------------------------ŠRTN„IGNORE$00--Ignoreit.ŠRTN„IGNORE$01--Ignoreit.ŠRTN„IGNORE$02--Ignoreit.ŠRTN„IGNORE$03--Ignoreit.ŠRTN„IGNORE$04--Ignoreit.ŠRTN„IGNORE$05--Ignoreit.ŠRTN„IGNORE$06--Ignoreit.5ŠRTN„SET_MODE,ALPHA_LOCK$07--ALPHALOCKdepressed.0ŠRTN„SET_SHIFT,LEFT…$08--Left‚SHIFTdepressed.2ŠRTN„SET_SHIFT,RIGHT„$09--RightSHIFTdepressed.)ŠRTN„SET_MODE,CTRL†$0A--CTRLdepressed.'ŠRTN„SET_MODE,ALT‡$0B--ALT‚depressed.<ŠRTN„SET_MODE,BLANK…$0C--Blanklockingmodekeydepressed..ŠRTN„IGNORE$0D--Clackermodekeydepressed.<ŠRTN„SET_MODE,PAD‡$0E--FUNC_PADdepressed(toselectPAD).4ŠRTN„CLR_MODE,ALPHA_LOCK$0F--ALPHALOCKreleased. ŠRTN„IGNORE$10--Ignoreit.Š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--TABkeyonmainkeyboard.  ŠALPHA‚Q’$16--Qkey.ŠALPHA‚W’$17--Wkey.ŠALPHA‚E’$18--Ekey.ŠALPHA‚A’$19--Akey.ŠALPHA‚S’$1A--Skey.ŠALPHA‚D’$1B--Dkey.ŠALPHA‚Z’$1C--Zkey.ŠALPHA‚X’$1D--Xkey.ŠGROUP‚1,23$1E--Spacebar.3ŠRTN„CLR_SHIFT,LEFT…$1F--LeftSHIFTkeyreleased.ŠPAGE*§scan*‚$20-$3FœcodeƒKey&*§---„--------------------------------ŠRTN„IGNORE$20--Ignoreit.#ŠRTN„FNKEY,1Œ$21--Functionkey1.#ŠRTN„FNKEY,2Œ$22--Functionkey2.#ŠRTN„FNKEY,3Œ$23--Functionkey3.ŠGROUP‚1,3$24--4$key.ŠGROUP‚1,4$25--5%key.ŠGROUP‚1,5$26--6^key.ŠALPHA‚R’$27--Rkey.ŠALPHA‚T’$28--Tkey.ŠALPHA‚Y’$29--Ykey.ŠALPHA‚F’$2A--Fkey.ŠALPHA‚G’$2B--Gkey.ŠALPHA‚C’$2C--Ckey.ŠALPHA‚V’$2D--Vkey.ŠALPHA‚B’$2E--Bkey.5ŠRTN„CLR_SHIFT,RIGHT„$2F--RightSHIFTkeyreleased. ŠRTN„IGNORE$30--Ignoreit.#ŠRTN„FNKEY,4Œ$31--Functionkey4.#ŠRTN„FNKEY,5Œ$32--Functionkey5.#ŠRTN„FNKEY,6Œ$33--Functionkey6.ŠGROUP‚1,6$34--7&key.ŠGROUP‚1,7$35--8*key.ŠGROUP‚1,8$36--9(key.ŠALPHA‚U’$37--Ukey.ŠALPHA‚I’$38--Ikey.ŠALPHA‚H’$39--Hkey.ŠALPHA‚J’$3A--Jkey.ŠALPHA‚K’$3B--Kkey.ŠALPHA‚N’$3C--Nkey.ŠALPHA‚M’$3D--Mkey.ŠGROUP‚1,20$3E--,key.ŠGROUP‚1,22$4D--/?key.ŠRTN„IGNORE$4E--Ignoreit.*ŠRTN„CLR_MODE,ALT‡$4F--ALTkeyreleased. ŠRTN„IGNORE$50--Ignoreit.#ŠRTN„FNKEY,9Œ$51--Functionkey9.%ŠRTN„FNKEY,10‹$52--Functionkey10.%ŠRTN„FNKEY,11‹$53--Functionkey11.%ŠRTN„FNKEY,12‹$54--Functionkey12.ŠGROUP‚1,12$55--DELkey.(ŠRTN„BREAK_CLEARˆ$56--BREAKCLEARkey.ŠGROUP‚1,15$57--]}key.ŠGROUP‚1,16$58--\|key.ŠGROUP‚0,1$59--Homekey.ŠGROUP‚1,19$5A--Returnkey. ŠGROUP‚0,3$5B--Backarrowkey.ŠRTN„IGNORE$5C--SELkey.ŠGROUP‚0,5$5D--Backtabkey. ŠGROUP‚0,6$5E--Downarrowkey.;ŠRTN„CLR_MODE,BLANK…$5F--Blanklockingmodekeyreleased.ŠPAGE*§scan*‚$60-$7FœcodeƒKey&*§---„--------------------------------*ŠRTN„CLR_MODE,PAD‡$60--PADkeyreleased.%ŠRTN„FNKEY,13‹$61--Functionkey13.%ŠRTN„FNKEY,14‹$62--Functionkey14.%ŠRTN„FNKEY,15‹$63--Functionkey15.%ŠRTN„FNKEY,16‹$64--Functionkey16.$ŠRTN„ESC_RESETŠ$65--ESCRESETkey.ŠGROUP‚2,10$66--ADCHRkey.ŠGROUP‚0,2$67--Uparrowkey.#ŠRTN„IGNORE$68--CLRTABSETkey.ŠGROUP‚2,7$69--7EOFkey.!ŠGROUP‚0,4$6A--Rightarrowkey."ŠGROUP‚2,4$6B--4keyonhexpad.0ŠGROUP‚0,7$6C--Tabkeyoncursorcontrolpad.ŠGROUP‚2,1$6D--1ICHRkey.ŠGROUP‚2,0$6E--0onhexpad.-ŠRTN„IGNORE$6F--Clackermodekeyreleased. ŠRTN„IGNORE$70--Ignoreit.ŠGROUP‚2,11$71--BDLINEkey.ŠGROUP‚2,12$72--Conhexpad.ŠGROUP‚2,13$73--Donhexpad.ŠGROUP‚2,8$74--8EOLkey.ŠGROUP‚2,9$75--9EOPkey.ŠGROUP‚2,14$76--EEAUkey.ŠGROUP‚2,5$77--5onhexpad.ŠGROUP‚2,6$78--6onhexpad.ŠGROUP‚2,15$79--Fonhexpad.ŠGROUP‚2,2$7A--2ILINEkey.ŠGROUP‚2,3$7B--3onhexpad.ŠGROUP‚2,16$7C--TEST,key.ŠGROUP‚2,17$7D--HELP.key.ŠGROUP‚0,0$7E--ENTERkey.ŠRTN„IGNORE$7F--Ignoreit.ŠPAGEO*v********************************************************************************!***…TWO_AT--HANDLETHE2@KEY.***?***…FUNCTION:‚Thiscodeisenteredwhenthe2@keyispressed.G***‡ItspurposeistogeneratetheappropriatecharactercodedependingE***‡onthestateoftheSHIFTandCTRLmodekeys.‚Thereasonthiskey  D***‡can'tbehandledbythetablesisthatifCTRLispressed,aNULA***‡($00)charactermustbegenerated.‚Avalueof0inthetables%***‡isreservedtomeanNOCHARACTER.******…ENTRYCONDITIONS:***O*^***************************************************************************** TWO_AT: **‚IstheCTRLkeydown?*"ŠBTSTƒ#CTRL,MODESˆIfCTRLisdown,ŠIF…THENŠ* !ŠCLR„D0‘D0<--$00,theNULchar.4ŠMOVEQ‚#1,D1ŽSetCCR:,toindicateD0hasa6ŠRESTORED1/A0charinit,restoreregisters,andexit*ŠRTS—fromGET_CHARtogenerateaNULchar. ŠENDI  *D*‚CTRLkeyisnotdown--generate2or@dependingontheSHIFTkeys.*$ŠBTSTƒ#SHIFT,MODES‡IfSHIFTisdown,ŠIF…THENŠ* !ŠMOVEQIAT_CHAR,D0‰Generatean@; ŠELSE–Else(SHIFTisnotdown), !ŠMOVEQITWO_CHAR,D0ˆGeneratea2. ŠENDI  +ŠBRA„EXIT_CHARŠExitsaying'wegotachar.'ŠPAGEO*v********************************************************************************&***…ESC_RESET--HANDLEESCRESETKEY.***E***…FUNCTION:‚ThiscodeisenteredwhentheESCRESETkeyispressed.G***‡Itspurposeistogeneratetheappropriatecharactercodedepending(***‡onthestateoftheSHIFTmodekeys.******…ENTRYCONDITIONS:***O*^***************************************************************************** ESC_RESET: ,ŠBTSTƒ#SHIFT,MODES‡IftheSHIFTkeyisdown,ŠIF…THENŠ* >ŠBSR.L‚RESET_SCREEN‡RESETthescreenandignorethekeystroke.ŠBRA.L‚IGNORE* ŠENDI  8ŠMOVEQ‚#$1B,D0ŒTheSHIFTkeyisnotdown,sogeneratean#ŠBRA„EXIT_CHARŠASCIIESCcharacter.ŠPAGEO*v************************************************************************************…BREAK_CLEAR--HANDLEBREAKCLEARKEY.***G***…FUNCTION:‚ThiscodeisenteredwhentheBREAKCLEARkeyispressed.G***‡Itspurposeistogeneratetheappropriatecharactercodedepending(***‡onthestateoftheSHIFTmodekeys.******…ENTRYCONDITIONS:***O*^***************************************************************************** BREAK_CLEAR: $ŠBTSTƒ#SHIFT,MODES‡IfSHIFTisdown,ŠIF…THENŠ* >ŠBSR.L‚CLEAR_SCREEN‡CLEARthescreenandignorethekeystroke.ŠBRA.L‚IGNORE* ŠENDI  *§SHIFTisnotdown,so3ŠMOVEQ‚#-1,D0setCCR:‚,toindicateBREAK.:ŠRESTORED1/A0RestoreregistersandreturnfromGET_CHAR.ŠRTS—*ŠPAGEO*v********************************************************************************(***…GEN_ALPHA--HANDLEALPHABETICKEYS.***E***…FUNCTION:‚Thiscodeisenteredwhenanalphabetickeyispressed.G***‡Itspurposeistogeneratetheappropriatecharactercodedepending>***‡onthestateoftheSHIFT,ALPHALOCK,andCTRLmodekeys.******…ENTRYCONDITIONS:4***‡D0.B=anuppercasealphabeticchar:'A'to'Z'.***O*^***************************************************************************** GEN_ALPHA: *ŠBTSTƒ#CTRL,MODESˆIftheCTRLkeyisdown,ŠIF…THENŠ* 0ŠADD.B‚#1-'A',D0ŠConvertthistoacontrolchar; "ŠELSE–Else(CTRLkeyisnotdown), <ŠMOVEQIALOCK_OR_SHIFT,D1‚CheckwhethereitherSHIFT(either3ŠAND.B‚MODES,D1‹one)orALPHALOCKisdown.‚Ifnot,ŠIF…THENŠ* -ŠADD.B‚#'a'-'A',D0ˆConvertthistolowercase. ŠENDI ŠENDI   +ŠBRA„EXIT_CHARŠExitsaying'wegotachar!'ŠPAGEO*v********************************************************************************"***…FNKEY--HANDLEFUNCTIONKEYS.***B***…FUNCTION:‚Thiscodeisenteredwhenafunctionkeyispressed.G***‡Itspurposeistogeneratetheappropriatecharactercodedepending(***‡onthestateoftheSHIFTmodekeys.******…ENTRYCONDITIONS:;***‡D0.B=thenumberofthefunctionkeypressed:1to16.***O*^***************************************************************************** FNKEY: 8ŠBTSTƒ#SHIFT,MODES‡Ifeitheroftheshiftkeysaredown,ŠIF…THENŠ* 9ŠADD.B‚#FNKEY_S1-1,D0…Generatetheshiftedfunctioncode.!  %ŠELSE–Else(theSHIFTkeysaredown), ;ŠADD.B‚#FNKEY_F1-1,D0…Generatetheunshiftedfunctioncode. ŠENDI  +ŠBRA„EXIT_CHARŠExitsaying'wegotachar!'ŠPAGEO*v********************************************************************************F***…SET_SHIFTANDCLR_SHIFT--SETORCLEARONEOFTHETWOSHIFTKEYS.***H***…FUNCTION:‚UsetheseroutineswhenashiftkeyispressedorreleasedE***‡toupdatetheSHIFT_KEYSbyteandmakeamodechangeforSHIFTif***‡necessary.***1***…ENTRYCONDITIONSFORSET_SHIFTANDCLR_SHIFT:8***‡D0.B=thebitnumberofthemodeintheMODESbyte.***O*^***************************************************************************** SET_SHIFT: ;ŠBSETƒD0,SHIFT_KEYS†Setthebitrepresentingthisshiftkey7ŠMOVEQ‚#SHIFT,D0Š(leftorright)andgosetSHIFTmode.ŠBRA„SET_MODE‹*  CLR_SHIFT: =ŠBCLRƒD0,SHIFT_KEYS†Clearthebitrepresentingthisshiftkey8ŠMOVEQ‚#SHIFT,D0Š(leftorright).‚Ifbothshiftkeysare8ŠTST.B‚SHIFT_KEYS‰upnow,goclearSHIFTmode;otherwise(ŠBEQ„CLR_MODE‹justignorethekeystroke. ŠBRA„IGNORE*ŠPAGEO*v********************************************************************************?***…SET_MODEANDCLR_MODE--SETORCLEARAMODE(E.G.,SHIFT).***G***…FUNCTION:‚UsetheseroutineswhenamodekeyispressedorreleasedE***‡toupdatetheMODESbyteandsettheappropriatetableoffsetsin***‡theGRP_TBL.***/***…ENTRYCONDITIONSFORSET_MODEANDCLR_MODE:8***‡D0.B=thebitnumberofthemodeintheMODESbyte.***E***…NOTES:‚IGNOREisanotherentrypointusedtoreturnfromGET_CHARF***‡withoutgeneratingacharorbreak.‚Therearenoentryconditions.***O*^***************************************************************************** SET_MODE: 5ŠBSETƒD0,MODES‹SetthespecifiedmodeandgoregisterŠBRA„MODE_CHANGEˆthechange.  CLR_MODE: (ŠBCLRƒD0,MODES‹Clearthespecifiedmode. *(*‚Changetheoffsetsinthegrouptable.* MODE_CHANGE<ŠLEA„GRP_TBL+2,A0‡A0<--addressofthegroup1offsetentry'*§inthegrouptable.‚Wecanskipgroup*§0sinceitneverchanges. ŠIFNEƒSHIFT-2<ŠFAILƒ499ˆSHIFTmust=2oryoumustchangethisnextlogic.ŠENDC ŠIFNEƒCTRL-1;ŠFAILƒ499‰CTRLmust=1oryoumustchangethisnextlogic.ŠENDC :ŠMOVEQ‚#%110,D0‹IsolatetheSHIFT(bit2)andCTRL(bit1):ŠAND.B‚MODES,D0‹modesfromtheMODESbyte.‚Setthecorres-7ŠMOVEƒGRP1_OFF(PC,D0),(A0)+pondingoffsetforgroup1. (ŠBTSTƒ#PAD,MODES‰IfthePADkeyisdown,ŠIF…THENŠ*@ŠMOVEƒ#TBL.__Y-BASE,(A0)+setthegroup2offsettothePADmode(ŠELSE–table,else(PADkeyisnotdown),AŠMOVEƒ#TBL.__N-BASE,(A0)+setthegroup2offsettotheFUNCmode ŠENDI–table. *N*‚ExitGET_CHARsaying"nocharorbreakwasgenerated--ignorethekeystroke."*8IGNORE:ƒCLR„D0‘SetCCR:toindicatenocharacteror4ŠRESTORED1/A0breakwasgeneratedbythekeystroke.)ŠRTS—RestoreregistersandexitGET_CHAR.&*£NotethattheVbitisalsocleared.  *F*‚SomekindoferrorwasdetectedineithergettingtheresultsoftheG*‚STATUScommandoringettingthescancodefromaREADcommand.‚Issue2*‚thepropercommandtothekeyboardtotryagain.*‚A0stillpointstothe2661.*=ERROR…TST.B‚DATA(A0)‹Readthecharoutifwehaven'talready.;ŠMOVE.B#COMM_INIT,COMMAND(A0)‚Resettheerrorinthe2661. ŠIF.B‚DOING_READ‚#0THEN@ŒMOVE.B#STATUS_KB,DATA(A0)Tellthekeyboardtosendthestatus-*£ofthekeyboardagain,justignorethisone ŠELSECŒMOVE.B#AGAIN_KB,DATA(A0)Tellthekeyboardtosendthatlastscan#*£codeagain;justignorethisone.ŠENDI ŠBRA.S‚IGNORE  *F*‚Neitherthereceivernorthetransmitterareenabled,sothisisnot8*‚ourinterrupt.‚SettheZbitandtheVbitandreturn. *’XNZVC*INTNOPƒPOP.L‚D1$‰ORIƒ#%0000000000000100,SR‰SetZbit$‰ORIƒ#%0000000000000010,SR‰SetVbit‰RTSŠPAGE  *! 7*‚Tableofoffsetsforgroup1,dependingonmodekeys.:*‚NotethatweusethesametableforCTRLandCTRL+SHIFT.*FGRP1_OFF‚DC.WƒTBL.NN_-BASE‡Offsettogroup1table:noSHIFT,noCTRL.;ŠDC.WƒTBL.XY_-BASE‡Offsettogroup1table:noSHIFT,„CTRL.;ŠDC.WƒTBL.YN_-BASE‡Offsettogroup1table:„SHIFT,noCTRL.8ŠDC.WƒTBL.XY_-BASE‡Offsettogroup1table:„SHIFT,„CTRL.ŠPAGEO*v********************************************************************************;***…GROUP0CHARACTERTABLE--KEYSUNAFFECTEDBYMODEKEYS***C***…FUNCTION:‚ThistablecontainsthecharacterstoreturnforscanB***‡codeswhichfallintogroup0.‚UsetheparameterobtainedfromA***‡thescancodetableasanindexintothistable.‚Avalueof0&***‡willcausenocharactertoresult.***6***‡TableTBL.___isusedregardlessofanymodekeys.***O*^***************************************************************************** TBL.___: *£element# *£---------'ŠDC.Bƒ$0D0--CR(fromtheENTERkey).ŠDC.Bƒ$C01--Home.)ŠDC.Bƒ$0B2--VT(fromtheuparrowkey).+ŠDC.Bƒ$083--BS(fromtheleftarrowkey).,ŠDC.Bƒ$0C4--FF(fromtherightarrowkey).ŠDC.Bƒ$DB5--Backtab.+ŠDC.Bƒ$0A6--LF(fromthedownarrowkey).*ŠDC.Bƒ$097--HT(fromthetabkeyonthe*®cursorcontrolpad).ŠPAGEO*v********************************************************************************E***…GROUP1CHARACTERTABLES--KEYSAFFECTEDBYSHIFTANDCTRLKEYS.***D***…FUNCTION:‚ThesetablescontainthecharacterstoreturnforscanB***‡codeswhichfallintogroup1.‚UsetheparameterobtainedfromC***‡thescancodetableasanindexintothesetables.‚Avalueof0&***‡willcausenocharactertoresult.***E***‡TableTBL.NN_isusedwhenwe'reinneitherSHIFTnorCTRLmodes.C***‡TableTBL.XY_isusedwhenwe'reinCTRLmode(SHIFTedornot).@***‡TableTBL.YN_isusedwhenwe'reinSHIFTbutnotCTRL‚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ƒ$7F12--DEL.3ŠDC.Bƒ$0913--HT(fromtabkeyonmainkeyboard). ŠDC.Bƒ'['14. ŠDC.Bƒ']'15. ŠDC.Bƒ'\'16. ŠDC.Bƒ';'17.ŠDC.Bƒ$2718--Apostrophe.%ŠDC.Bƒ$0D19--CR(fromreturnkey). Š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ƒ$1E5‚--CTRL^. ŠDC.Bƒ0’6. ŠDC.Bƒ0’7. ŠDC.Bƒ0’8. ŠDC.Bƒ0’9.ŠDC.Bƒ$1F10--CTRL_. ŠDC.Bƒ0’11. ŠDC.Bƒ0’12. ŠDC.Bƒ0’13.ŠDC.Bƒ$1B14--CTRL[.ŠDC.Bƒ$1D15--CTRL].ŠDC.Bƒ$1C16--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ƒ$7F12--DEL.3ŠDC.Bƒ$0913--HT(fromtabkeyonmainkeyboard). ŠDC.Bƒ'{'14. ŠDC.Bƒ'}'15. ŠDC.Bƒ'|'16. ŠDC.Bƒ':'17. ŠDC.Bƒ'"'18.%ŠDC.Bƒ$0D19--CR(fromreturnkey). ŠDC.Bƒ'<'20. ŠDC.Bƒ'>'21. ŠDC.Bƒ'?'22. ŠDC.Bƒ''23.ŠPAGEO*v********************************************************************************C***…GROUP2CHARACTERTABLES--KEYSAFFECTEDONLYBYFUNC/PADKEY.***D***…FUNCTION:‚ThesetablescontainthecharacterstoreturnforscanB***‡codeswhichfallintogroup2.‚UsetheparameterobtainedfromC***‡thescancodetableasanindexintothesetables.‚Avalueof0&***‡willcausenocharactertoresult.***5***‡TableTBL.__Nisusedwhenwe'renotinPADmode.2***‡TableTBL.__YisusedwhenweareinPADmode.***E***‡Thesetablescontaincharactersassociatedwiththehexpad.‚Note," 7***‡however,thattheENTERkeyisnotinthesetables.***O*^***************************************************************************** TBL.__N: *£element# *£--------- ŠDC.Bƒ0’0.ŠDC.Bƒ$D01‚--ICHR.ŠDC.Bƒ$D62‚--ILINE. ŠDC.Bƒ0’3. ŠDC.Bƒ0’4. ŠDC.Bƒ0’5. ŠDC.Bƒ0’6. ŠDC.Bƒ0’7.ŠDC.Bƒ$D58‚--EOL.ŠDC.Bƒ$D49‚--EOP.ŠDC.Bƒ$D110--DCHR.ŠDC.Bƒ$D711--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/keyboarddriverforVME/10GMSG‰******************************************************************* IFGTˆ\NOLTERM-1ƒMSG†NOLTERMmustbe<=1ƒABORTENDC "*‚Adjusttotalnumberofterminals&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ý4y(–@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þDyF3€… (–@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@Àhi0)// Aè CéF3 Eúý¤Bgâ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-‚LocalincludefileforEPCIdriveronVM01VECTNBR‚SET‡$1D‡Vectornumber%VECTLVL‚SET‡5‰Vectorlevel(priority)éééé' éééÓ' VME110 ACIALOC SIèèaaB*VME110.ACIALOC.SI-‚LocalincludefileforACIAdriveronVME110=CTYPE1ƒSET‡XTS110„SetthechanneltypeforVME110serialport(CTYPE2ƒSET‡0‰---NotusedfortheVME110VECTNBR‚SET‡$1D‡Vectornumber%VECTLVL‚SET‡5‰Vectorlevel(priority)3PRIORTY1SET‡$30‡Softwarepriorityfor1stterminal*PRIORTY2SET‡0‰---NotusedfortheVME110éééééé' à' VME101 EPCILOC SIõõaaB*VME101.EPCILOC.SI-‚LocalincludefileforEPCIdriveronVME101VECTNBR‚SET‡$1C‡Vectornumber%VECTLVL‚SET‡4‰Vectorlevel(priority)éééééééí' VME122 MFPLOC SIaa( @*VME122.MFPLOC.SI-‚LocalincludefileforMFPdriveronVME122=CTYPE1ƒEQU‡XTMFP0„SetthechanneltypeforVME122serialportéééééééú' VME128 MFPLOC SIaa@*VME128.MFPLOC.SI-‚LocalincludefileforMFPdriveronVME128=CTYPE1ƒEQU‡XTMFP8„SetthechanneltypeforVME128serialport( ééééééé' VME120 MFPLOC SIaa@*VME120.MFPLOC.SI-‚LocalincludefileforMFPdriveronVME120=CTYPE1ƒEQU‡XTMFP0„SetthechanneltypeforVME120serialportééé) éééé­' 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 ****************************ˆASYNCHRONOUSEVENTQUEUE*!ŠOFFSET0’THISISANOFFSETTABLEASQ‡DS.Lƒ1’!ASQDEBUGTOOL $ASQASR„DS.Lƒ1’LOGICALADDRESSOFASR1ASQXFR„DS.Lƒ1’LOGICALINTERRUPTADDRESSFOREVENT 1ASQDBUFƒDS.Lƒ1’PHYSICALADDRESSOFDEFAULTBUFFER.ASQA0BUF‚DS.Lƒ1’PHYSICALADDRESSOFGETBUFFER 5ASQBOT„DS.Lƒ1’PHYSICALADDRESSOFFIRSTBYTEOFQUEUE4ASQTOP„DS.Lƒ1’PHYSICALADDRESSOFLASTBYTEOFQUEUE2ASQGET„DS.Lƒ1’PHYSICALADDRESSOFNEXTBYTETOGET2ASQPUT„DS.Lƒ1’PHYSICALADDRESSOFNEXTBYTETOPUT !ASQSTATE‚EQU„*’ASQSTATEVARIABLE'ASQSWMOD‚DS.Wƒ1’ASQSWITCHINGMODEBITSASQSWMD2‚EQU„ASQSWMOD+1$ASQSTMOD‚DS.Wƒ1’ASQSTATICMODEBITSASQSTMD2‚EQU„ASQSTMOD+1 #ASQML…DS.Wƒ1’ASQMAXMESSAGELENGTH1ASQCNT„DS.Wƒ1’NUMBEROFEVENTSCURRENTLYINQUEUE 0ASQSTART‚EQU„*’OFFSETTOFIRSTPOSITIONINQUEUE+ASQLEN„EQU„*-ASQŽLENGTHOFASQCONTROLAREA***ˆASQSTATEDEFINITIONS*"RQ_DIS„EQU„0<<3ASQDISABLEDSTATEQ_EN†EQU„1<<3ASQENABLEDSTATER_EN†EQU„2<<3ASRONLYSTATE RQ_EN…EQU„3<<3ASRENABLEDSTATE!WT_EN…EQU„4<<3WAITENABLEDSTATE GT_EN…EQU„5<<3GETENABLEDSTATE STATE_MASKEQUƒ%00111000** *ˆASQSWITCHINGMODEDEFINITIONS*ASQ_MT„EQU„1<<1ASQEMPTYASQ_NMTƒEQU„0<<1ASQNOTEMPTY'DBUF_ENƒEQU„1<<2DEFAULTBUFFERENABLED)DBUF_DIS‚EQU„0<<2DEFAULTBUFFERDISABLED (ASQMTBIT‚EQU„1’ASQEMPTY(ASBITNUMBER)3ASQDBBIT‚EQU„2’ASQDBUFENABLEDBIT(ASBITNUMBER) SWMD_MASKEQU„ASQ_MT+DBUF_EN***ˆASQSTATICMODEDEFINITIONS*@*ˆ(Seelastthreebitsin"STATUSBITSFORASQALOC&ASQSTATS".) **#*ˆSTATUSBITSTOASQALOC&ASQSTATS*ASQSEN„EQU„0’ASQENABLED&ASQSDBEN‚EQU„1’MESSAGERECEI) PTENABLEDASQSRENƒEQU„2’ASRENABLED $ASQSKDIS‚EQU„3’DONOTSAVEREGISTERS&ASQS_DBV‚EQU„4’DEFAULTBUFFERISVALIDASQS_RNV‚EQU„5’ASRISNOTVALID (STMD_MASKEQU„ASQSKDIS+ASQS_DBV+ASQS_RNV***ˆASQEVENTOFFSETS* ŠOFFSET0!Q*CD7_LENƒDS.Bƒ1’LENGTHOFEVENTCD7_CODE‚DS.Bƒ1’EVENTCODE'CD7_TRAP‚DS.Bƒ1’TRAPINSTRUCTIONVECTOR CD7_CPRI‚DS.Bƒ1’CURRENTPRIORITY,CD7_TCBƒEQU„*’TCBADDRESSOFREQUESTINGTASK+CD7_NAME‚DS.Lƒ1’TASKNAMEOFREQUESTINGTASK1CD7_SESS‚DS.Lƒ1’SESSIONNUMBEROFREQUESTINGTASKCD7_ID„DS.Wƒ1’USERGENERATEDID"CD7_D0„DS.Lƒ1’REQUESTINGTASK'SD0"CD7_A0„DS.Lƒ1’REQUESTINGTASK'SA0&CD7_PBST‚DS.Bƒ1’PARAMETERBLOCKSTATUS$CD7_PBSZ‚DS.Bƒ1’PARAMETERBLOCKSIZE2LEN_CD7ƒEQU„*-CD7_LENŠLENGTHOFCODE7EVENTBLOCK**ˆASQEVENTCODES* EVNTOWNƒEQU„1EVNTIO„EQU„2’I/OCOMPLETIONEVNTMSGƒEQU„3’MESSAGEEVNTUSER‚EQU„3’USEREVENTEVNTTIME‚EQU„4’TIMEREVENTEVNTTASK‚EQU„5’SUB-TASKEVENTEVNTATTN‚EQU„6’ATTENTIONEVENTEVNTSERV‚EQU„7’SERVEREVENT%BIT_7…EQU„7’BIT7SET=ALTASREVENT*********************** Ending of &.ASQ.EQ ***********************éééé‰PAGE************************** Beginning of &.ASQ.MC ***************************#*ˆThisisthemacrotochecktosee(*ˆifweneedtoappendaparameterblock*ˆtotheendofatype_7event.**ˆif*ˆ(code=server_event)*ˆthencallappend_pb;*CHECK_PB MACRO‰CMP.B…#EVNTSERV,D1 ‰BNE.S…CKPB\@‰BSR‡APPEND_PBCKPB\@‰ENDM *#*ˆThisisthemacrotochecktosee(*ˆifweneedtoappendaparameterblock*ˆtotheendofatype_7event.)*ˆ(ThisisaspecialversionforEXQEVENT!*ˆbecausethecodeisnotinD1.)**ˆif*ˆ(code=server_event)*ˆthencallappend_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    **ˆThisisthefreeze_asqmacro.*ˆItinhibitsinterrupts.*FREEZE_ASQ‰MACRO‰MOVE.W„SR,-(A7)‰ORI.W…#$0700,SR‰ENDM  * *ˆThisistherelease_asqmacro.*ˆItenablesinterrupts.*RELEASE_ASQˆMACRO‰MOVE.W„(A7)+,SR‰ENDM  *%*ˆThisisthemacrotogetthelength)*ˆoftheeventintothemsg_lenregister.* GET_LEN‚MACRO ‰CLR.L…D0‰MOVE.B„(A1)+,D0‰ENDM  *&*ˆThisisthemacrotogetthecodeof'*ˆtheeventintothemsg_coderegister.*GET_CODE MACRO‰MOVE.B„(A1)+,D1‰ENDM  *-*ˆThisisthemacrotosettheasq_xfrvector*ˆfromeither:*(*1.)‚thealternateasrvectorcontained$*’withintheeventpointedtobythe*’asq_getpointer,or*2.)‚thedefaultasrvector.* * *’msg_ptr<==asq_get(asq_ptr);'*’if(bit_7(msg_code(msg_ptr))=set)6*’thenasq_xfr(asq_ptr)<==alt_asr_vector(msg_ptr);/*’elseasq_xfr(asq_ptr)<==asq_asr(asq_ptr); **ˆEquatesforthismacro.* MSG_CODEEQU‡1 ALT_ASR‚EQU‡2 GET_ASQXFR‰MACRO8‰MOVE.L„ASQASR(A4),ASQXFR(A4)‰Assumedefaultasrvector.4‰MOVE.L„ASQGET(A4),A1‘msg_ptr<==asq_get(asq_ptr);.‰TST.B…MSG_CODE(A1)’isbit_7(msg_code)=set?‰BPL.S…GXF_\@˜branchifno. 2m;4=‰MOVE.L„ALT_ASR(A1),ASQXFR(A4)ˆUsealt_asrvectorfromevent.GXF_\@:‰ENDM  *.*ˆThisisthemacrotoputthelengthandcode*ˆfieldsintotheevent.* PUT_LCƒMACRO‰MOVE.B„D0,(A0)+‰MOVE.B„D1,(A0)+ ‰SUB.W…#2,D0‰ENDM  *'*ˆThisisthemacrotomovethemessage$*ˆfromthesrc_ptr,tothedest_ptr.*ˆ(LengthisinD0.)* 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 *'*ˆThisisthemacrotomovethemessage$*ˆfromthesrc_ptr,tothedest_ptr.*ˆ(LengthisinD1.)*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*‰EquatesrelatingtoBAB=BackgroundActivationBlockforRMS68K„**Í*O******************************************************************************* *J*‚InterruptserviceroutinesinsupervisormodemayschedulearoutineforL*‚executioninbackgroundbypreparingaBABwhichpointstotheroutineandK*‚isnotcurrentlyinuse,andcallingtheexec'sBKG_SCHEDULEroutinewith*‚theBABaddressinA0.*I*‚TheBKG_SCHEDULEroutinesetstheINUSEflagintheBABandaddsittoI*‚theendofaqueueofBAB'swhichwillbedispatchedwhentheinterruptF*‚levelreturnstozero.‚YoumayNOTaltertheBABLNKorBABUSEfieldsJ*‚whiletheBABisinuse.‚AnattempttoscheduleusingaBABwhoseINUSE$*‚flagisalreadysethasnoeffect.*I*‚Whentheroutineisdispatched,A1willpointtotheBAB,andallotherH*‚registersareavailable;onlythestackpointermustbepreserved.‚YouJ*‚willbeatinterruptlevel0andyoumustexitatinterruptlevel0with*‚withanRTS.* ŠOFFSET0 0BABLNK„DS.Lƒ1’ForwardlinktonextBABinqueue.8BABPTR„DS.Lƒ1’Po* intertocodetoexecutedinbackground.0BABUSE„DS.Bƒ1’Flag:‚true(nonzero)meansINUSE."ŠDS.Bƒ3’Reserved(shouldbezero). BABBLN„EQU„*’LengthofaBAB.*********************** Ending of &.BAB.EQ ***********************ééC&‰PAGE************************** Beginning of &.CCB.EQ **************************** CHANNEL CONTROL BLOCK (CCB)D*ƒCONTAINSCHANNELDESCRIPTIONANDDATAAREASFORDEVICEINDEPENDENT*ƒCMRPORTION.**H* CHANNEL MANAGEMENT DATA AREA ****************************************** ŠOFFSET0*ŠDS.Bƒ4’'!CCB'DUMPEYECATCHER-CCBALL„DS.Bƒ4’ALLLINKFORCCBCHAININORDER*¨OFALLOCATION/CCBPOLLƒDS.Bƒ4’LINKTONEXTCCBFORTHISVECTOR5CCBTLNKƒDS.Bƒ4’LINKTONEXTCCBATTACHEDTOSAMETASKACCBSUB„DS.Bƒ4ŠLINKTOCCBOFNEXTSUBORDINATECHANNEL(MEANINGFUL(*§ONLYIFCCBSTROPTIONCCBFGSUPISSET)*J* THE FOLLOWING 24 BYTES MUST BE CONTIGUOUS IN THE CCB (LOAD WITH MOVEM.L)(CCBMNEMƒDS.Bƒ4’MNEMONICFORTHISCHANNELCCBTYPEƒDS.Bƒ1’CHANNELTYPE&CCBCMCTƒDS.Bƒ1’RESERVED(USEDBYCHPI)1CCBUSERƒDS.Bƒ4’I/OHANDLERSERVICEVECTORADDRESS,CCBRTNIƒDS.Bƒ4’INTERRUPTENTRYPOINTADDRESS-CCBCHB„DS.Bƒ4’BASEOFMEMORYMAPPEDI/OSPACE>CCBMME„DS.Bƒ20-RELNUMBEROFCONSECBYTESINMEMMAPPEDSPACE&CCBVECTƒDS.Bƒ1’INTERRUPTVECTORNUMBER:CCBPPRIO‚DS.Bƒ1’POLLINGPRIORITY(HARDWAREINTERRUPTPRIO)1CCBSPRIO‚DS.Bƒ1’SOFTWAREPRIO(POSITIONINCHAIN).CCBPECTƒDS.Bƒ1’NUMBEROFPOLLINGTABLEENTRIES*>CCBRQSTƒDS.Bƒ8ŽTASKNAMEANDSESSIONCODETHATORIGINALLYMADE**CCBRQSTA‚DS.Bƒ4’ADDRESSOFREQUESTOR'STCB*!CCBKEY„DS.Bƒ1’REQUESTOR'SI/OKEY$CCBRTN„DS.Bƒ1’RETURNOPTION(BIT0):*§0=PUTRETURNSTATUSIN*ªBUFFER,ISSUEWAKEUP*§1=PUTRETURNSTATUSON*ªASQ*#CCBASQLƒDS.Bƒ1’MAXASQENTRYLENGTHŠDS.Bƒ1’RESERVED7CCBSVVCƒDS.Bƒ4’SERVICEVECTORFORRETURNFROMINTERRUPT)CCBSR…DS.Bƒ2’UNMASKSTATUSREGISTERVALUE(CCBISR„DS.Bƒ2’MASKSTATUSREGISTERVALUECCBVADRƒDS.Bƒ4’VECTORADDRESS!CCBSTR„DS.Bƒ2’CCBSTATUSREGISTER1CCBJSR„DS.Bƒ6’HOLDSJSRINSTRUCTIONFORVECTORING-CCBIOH„EQU„*’I/OHANDLERPARAMETERBLOCKINFO&CCBTASKA‚DS.Bƒ4’ADDRESSOFATTACHETCB4CCBTASKƒDS.Bƒ8’ATTACHEETASKNAMEANDSESSIONNUMBER*L:U2HCCBRESV1‚DS.Lƒ1…FUTUREUSEBUFFERBETWEENCCBINDEPENDENT/DEPENDENTDATAHCCBRESV2‚DS.Lƒ1…FUTUREUSEBUFFERBETWEENCCBINDEPENDENT/DEPENDENTDATAHCCBRESV3‚DS.Lƒ1…FUTUREUSEBUFFERBETWEENCCBINDEPENDENT/DEPENDENTDATAHCCBRESV4‚DS.Lƒ1…FUTUREUSEBUFFERBETWEENCCBINDEPENDENT/DEPENDENTDATAHCCBRESV5‚DS.Lƒ1…FUTUREUSEBUFFERBETWEENCCBINDEPENDENT/DEPENDENTDATA%CCBDDP„EQU„*’DEVICEDEPENDENTPORTION***-* POLLING TABLE AND POLLING TABLE ENTRY COUNT**žSTARTOFPOLLINGTABLEINCCB5CCBMCNTƒEQU„4’MAXIMUMNUMBEROFPOLLINGTABLEENTRIES6CCBPBASE‚DS.BƒCCBMCNT*8ŠRESERVEREMAININGSPACEINCCB**"* POLLING TABLE RESIDES WITHIN CCB9*ƒCONTAINS8-BYTEENTRIESTOALLOWHANDLINGMORETHANONE'*ƒINTERRUPTTYPEFROMASINGLECHANNEL.+ * ŠOFFSET0"CCBPOFFƒDS.Bƒ2’POLLINGBYTEOFFSETCCBMASKƒDS.Bƒ1’POLLINGMASK)CCBPTSTƒDS.Bƒ1’POLLING=OR<>TESTVALUE CCBRESOƒDS.Bƒ2’RESETBYTEOFFSETCCBRESVƒDS.Bƒ1’RESETVALUECCBRESPƒDS.Bƒ1’RESETOPTIONS  ** CCBSTR (BIT FLAGS)*BIT”MEANINGIFSET-*---”---------------------------------------#CCBFGATH‚EQU„15‘CHANNELISATTACHED"CCBFGDIR‚EQU„8’EXCLUSIVEVECTORING?CCBFGSUP‚EQU„2THISISASUPERVISORCHANNEL;THEADDRESSOFTHE(*§CCBOFTHEFIRSTCHANNELINTHESUBOR-*§DINATECHAINISINCCBSUB."CCBFGOFF‚EQU„1’CHANNELISOFF-LINE;CCBFGSYS‚EQU„0‘ONLYSYSTEMTASKSMAYATTACHTOTHISCHANNEL  ** CCBRESP -- RESET OPTIONS*CCBRSW„EQU„0’WRITERESETBYTECCBRSR„EQU„1’READRESETBYTE*********************** Ending of &.CCB.EQ ***********************é‰PAGE****************************** Beginning of &.CONNECT.EQ ******************************O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***G***…FILENAME:CONNECT.EQ--EQUATESFORCONNECT'SCOMMONDATAAREA.…******É***G***…ENVIRONMENT:Thisisincludedintheassemblyofthetwohalves…***?***‡oftheVERSAdosutilityCONNECT:‚CONNECT1andCONNECT2.Š******É***,***…EXTERNALDATASTRUCTURESREFERENCED: ******É***)***…EXTERNALENTRYPOINTSREFERENCED:£******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesI*…--------‚-------------‚------------------------------------------------G*†7/22/83‚SteveFranckƒChangednamefromTMDATA.EQ,andaddedstufffor*žsupportofoptionL.'*†5/31/83‚SteveFranckƒInitialwriting.*ŠPAGEO*********************************************************************************‰THECHARACTERQUEUES*O******************************************************************************* *&*‚Equatesdescribingcharacterqueues.J*‚Thewaythequeuesareused,theyareemptywhenGET=PUT,andtheyareL*‚fullifaddinganothercharwouldmakeGET=PUT.‚Thatis,thereisalwaysK*‚a'deadspace'of1chartokeepthePUTptrfromcatchinguptoGET.‚TheK*‚pointersintothequeuesadvancebydecrementing:‚eachpointermovesfrom0*‚Q_MAXdownto0andthenstartsoveratQ_MAX.*5Q_MAX…EQU„2047Highestindexvalueinthequeue;size"*§ofqueuewillbethisvalue+1. ŠOFFSET0.GET‡DS…1’Indexofnextchartogetfromqueue.]1fMn8v /PUT‡DS…1’Indexwherenextchargoesintoqueue.=QUEUE…DS.BƒQ_MAX+1ŒThedataarea:indexrangesfrom0..Q_MAX. #QUEUE_SIZEEQUƒ*’Sizeofthequeue.ŠPAGEO********************************************************************************(*‰OFFSETFORDATASHAREDBYTMANDTMSUP*O******************************************************************************* ŠOFFSET0 *%*‚Characterqueuesforthetwoports.*ŠDS…0APORT1_QUEUEDS.BQUEUE_SIZE‰Queueforchar'scomingino+ nport1.APORT2_QUEUEDS.BQUEUE_SIZE‰Queueforchar'scominginonport2.  *9*‚Areatosavedatapassedinregistersattaskcreation.F*‚Thesevaluesareinatask'sregistersonlyifSCTcreatedthetask.*ŠDS…0SCT_REGISTERS: *-------- D0 - D3"SCT_MTSK‚DS.Lƒ1’Monitortaskname."SCT_MSES‚DS.Lƒ1’Monitorsession#.#SCT_VOLƒDS.Lƒ1’Defaultvolumename.ŠDS.Wƒ1’Unused.SCT_USNƒDS.Wƒ1’Defaultuser#. *-------- D4 - D7SCT_CLGƒDS.Lƒ1’Defaultcatalog. ŠDS.Lƒ1’*$SCT_COML‚DS.Lƒ1’Commandlinelength.(SCT_LUMK‚DS.Lƒ1’Logicalunitusagemask. *-------- A0 - A3SCT_TASK‚DS.Lƒ1’Taskname.$SCT_TERM‚DS.Lƒ1’Associatedterminal.ŠDS.Wƒ1’Unused.SCT_LUSN‚DS.Wƒ1’Logonuser#.SCT_SESS‚DS.Lƒ1’Session. *-------- A4 - A5SCT_DATE‚DS.Lƒ1’Systemdate.SCT_TIME‚DS.Lƒ1’Systemtime. **‚Flags.*5READY…DS.Bƒ1’Flagcheckedbythesupervisormodecode(*§toseewhetherornotwearereadyfor%*§ittodoitsstuff.‚Initiallyitis'*§false(we'renotready),butgetsset%*§trueafterwehavelinkedourselves*§tobothdrivers. ;EXORTERM‚DS.Bƒ1’Thisflagissetiftheterminalfromwhich(*§wewereinvokedisanEXORterm155,or%*§emulatesone.‚Actually,ifoptionL*§isspecified,thisgetsset. BREAK2„EQU„BREAKS+1‹(Trueifabreakisbeingsenttoport2.)  ***************** ŠDS…0;DATA_SIZEEQU„*’Amountofspacerequiredforallthisdata.*************************** Ending of &.CONNECT.EQ ***************************é, éééééé‰PAGE**************************** Beginning of &.CRASH.MC *****************************D* Crash macro will generate a conditional long branch to any addressD*ƒwithinrange.‚ItisnormallyusedtogenerateaconditionalbranchC*ƒtoanoddaddress.(TheassemblerwillnotallowsuchabranchtoC*ƒbecodeddirectly).‚ThisisagoodwaytoconditionallycrashtheB*ƒsystem(insupervisormode)orforceataskabort(inusermode)** 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--MACROSTOUSEWITHVMEBUSANDVERSABUSDRIVERS†******É***5***†ENVIRONMENT:‚In68000assemblylanguagecode.•******É***B***†FUNCTION:‚Thisfileincludestwomacrostouseinchangingˆ***;***‘addressesasviewedfromtheprocessortoaddresses…***4***‘asviewedfromthebusandvisa-versa.‚Itis‹***8***‘essentialtousethesemacroswhentheprocessorˆ***9***‘hasdual-portedRAMassignedtoanoffsetaddress‡******‘otherthanzero.¨******É******†NOTES:½******É***O*******************************************************************************O******************************************************************************* *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------&*†5/01/84‚JulieHoban„Initialwriting.* C*ˆThesemacrosmustbeusedbydriverswhichcontroldevicesontheJ* VMEbus or VERSAbus. Certain system configurations present their on-boardJ* memory (memory physically on the same card as the CPU) at an offset fromI*zerowhenviewedfromthebus.‚Forinstance,thecardontheVMEbushasG* a DMA device on it which requires a buffer address and the address isJ*localtotheCPU.‚BeforeloadingtheDMAdevicewiththeaddress,invokeL* the macro GO_OFF_BD and the address will get adjusted to the proper offset* if required.‰PAGE*I*‚Macrotochangeaddressasviewedfromprocessortoasviewedfrombus.* 7*ƒIftheregister(passedasanargumenttothismacro)A*ƒcontainsanaddressthatindicatesthatitiswithinthelimits5*ƒdefinedason-boardramasseenbythedriver,then<*ƒaddtheconstantRAM_SKEWsothattheaddresswillfallin‡/&3*ƒtherangeforon-boardramasseenbythedevice.*>*ƒThelimitsaredefinedintheSYSCMD.CDfileandaredefined;*ƒwhenthedriverislinkedintothesystematSYSgentime.*0„XREFOFFBD_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*‚Macrotochangeaddressasviewedbybustoasviewedbyprocessor.* *7*ƒIftheregister(passedasanargumenttothismacro)A*ƒcontainsanaddressthatindicatesthatitiswithinthelimits5*ƒdefinedason-boardramasseenbythedevice,thenA*ƒsubtracttheconstantRAM_SKEWsothattheaddresswillfallin3*ƒtherangeforon-boardramasseenbythedriver.*>*ƒThelimitsaredefinedintheSYSCMD.CDfileandaredefined;*ƒwhenthedriverislinkedintothesystematSYSgentime.* 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 ************************** ŠLLEN120**‰Chip-orientedequates*ŠIFEQ‚CHIPTYPE-680000USERSR„EQU„-6‘Distancefromstack-toptouserSRVORLNGTH‚EQU„0’LengthofVORŠENDCŠIFEQ‚CHIPTYPE-68010=VORFMT_MASKEQU‚$F000ŽMasktoisolateformatcodeintheVOR.0USERSR„EQU„-8‘Distancefromstack-toptouserSRVORLNGTH‚EQU„2’LengthofVORŠENDCŠIFEQ‚CHIPTYPE-68020=VORFMT_MASKEQU‚$F000ŽMasktoisolateformatcodeintheVOR.BVORFMT_SHORT_BERREQU$A000‰VORformatcodeforashortbuserror.@VORFMT_LONG_BERR‚EQU$B000‰VORformatcodeforalong‚buserror.0USERSR„EQU„-8‘Distancefromstack-toptouserSRVORLNGTH‚EQU„2’LengthofVORŠENDC*********************** Ending of &.ENV.EQ ***********************ééé阉PAGE************************** Beginning of &.EXE.EQ ************************** ŠLLENƒ120*Ç*‰***************‰*‚03/28/82‚**‰***************Ç*Ç,*‰DATASTRUCTURESANDEQUATESFOREXECCALLS*Ç*‰INTERRUPTEVENT(CODE1)*Ç ŠOFFSET0’STARTWITHZEROOFFSETEVLENG„DS.Bƒ1’EVENTLENGTHEVCODE„DS.Bƒ1’EVENTCODEEVDATA„EQU„*’VARIABLEDATA*Ç.*‰INTERRUPTSTRUCTUREDEFINEDIN$.XIOEQU.DATA*Ç*‰I/OCOMPLETEEVENT(CODE2)*Ç%ŠOFFSETEVDATASTARTOFVARIABLEDATAEVIOCB„DS.Lƒ1’ADDRESSOFIOCBEVIOND„EQU„*’EVENTLENGTH*Ç*‰QUEUEEVENT(CODE3)*Ç%ŠOFFSETEVDATASTARTOFVARIABLEDATAEVQTSK„DS.Lƒ1’SENDERTASKNAME#EVQSES„DS.Lƒ1’SENDERSESSIONNUMBEREVQTXT„EQU„*’MESSAGETEXT*Ç*‰TIMEREVENT(CODE4)*Ç%ŠOFFSETEVDATASTARTOFVARIABLEDATAEVTDAT„DS.Lƒ1’DATEOFEVENTEVTTIM„DS.Lƒ1’TIMEOFEVENT=EVTPRM„EQU„*EVENTPARAMETERLENGTHIFNOUNIQUEIDSPECIFIED"EVTUID„DS.Lƒ1’UNIQUEACTIVATIONID EVTTAC„DS.Wƒ1’ACTIVATIONCOUNTER6EVTIDL„EQU„*’EVENTPARAMETERBLOCKLENGTHIFUNIQUEID *£SPECIFIED*Ç*‰SUBTASKEVENT(CODE5)*Ç%ŠOFFSETEVDATASTARTOFVARIABLEDATAEVSTSK„DS.Lƒ1’SUBTASKNAME%EVSSES„DS.Lƒ1’SUBTASKSESSIONNUMBEREVSCTN„DS.Lƒ1’CALLINGTASKNAME)EVSCTS„DS.Lƒ1’CALLINGTASKSESSIONNUMBEREVSCOD„DS.Bƒ1’EVENTSUBCODEŠDS.Bƒ1’RESERVEDEVSACD„DS.Wƒ1’ABORTCODE*Ç*‰EQUATESFOR'EVSCOD'(8BITS)*ÇSEVCNT„EQU„1’NORMALTERMINATIONSEVCAB„EQU„2’ABORTEDSEVCSP„EQU„3’SUSPENDEDSEVCST„EQU„4’STOPPED4SEVCSR„EQU„5’STARTEDBYTASKOTHERTHANMONITORTASKSEVCDL„EQU„6’DELETEDŠPAGE*Ç*‰ATTENTIONEVENT(CODE6)*Ç%ŠOFFSETEVDATASTARTOFVARIABLEDATA"EVAPRM„EQU„*’PARAMETERINFORMATION*Ç*‰USER/SERVEREVENT(CODE7)*Ç%ŠOFFSETEVDATASTARTOFVARIABLEDATA%EVUTIN„DS.- Bƒ1’TRAPINSTRUCTIONNUMBER"EVUPRI„DS.Bƒ1’REQUESTOR'SPRIORITY#EVUTSK„DS.Lƒ1’REQUESTOR'STASKNAME(EVUSES„DS.Lƒ1’REQUESTOR'SSESSIONNUMBER%EVUUNM„DS.Wƒ1’REQUESTOR'SUSERNUMBER%EVURD0„DS.Lƒ1’REQUESTOR'SREGISTERD0¡QªM²DºPÂ%EVURA0„DS.Lƒ1’REQUESTOR'SREGISTERA0 EVUPST„DS.Bƒ1’PARAMBLOCKSTATUSEVUPSZ„DS.Bƒ1’PARAMBBLOCKSIZEEVULEN„EQU„*’LENGTHOFMESSAGE*Ç*‰EQUATESFOR'EVUTIN'(8BITS)*Ç'EVTNOS„EQU„7’REQUESTORISANO.S.TASK’EVTNEOTƒEQU„6’EOTNOTIFICATION›*EVTNEOSƒEQU„5’ENDOFSESSIONNOTIFICATION+EVTNRTTƒEQU„4’REQUESTORISAREALTIMETASK*Ç*‰EQUATESFOR'EVUPST'(8BITS)*ÇEVPSTOKƒEQU„0’OKEVPSTPMƒEQU„1’PARTOFPBMOVEDEVPSTBAƒEQU„2’BADPBADDRESSEVPSTNRƒEQU„3’PBNOTREQUESTED*Ç*‰EQUATESFOR'EVCODE'(8BITS)*Ç'EVCIOI„EQU„1’EVENTCODE-I/OINTERRUPT&EVCIOC„EQU„2’EVENTCODE-I/OCOMPLETE%EVCQUE„EQU„3’EVENTCODE-QUEUEEVENT%EVCTIM„EQU„4’EVENTCODE-TIMEREVENT(EVCSUB„EQU„5’EVENTCODE-SUBTASKEVENT)EVCATN„EQU„6’EVENTCODE-ATTENTIONEVENT+EVCSRV„EQU„7’EVENTCODE-USER/SERVEREVENTŠPAGE*Ç*‰QUEUEEVENTPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSET#QEVTSK„DS.Lƒ1’TASKTORECEIVEEVENT!QEVSES„DS.Lƒ1’TASKSESSIONNUMBERQEVOPT„DS.Wƒ1’DIRECTIVEOPTIONS%QEVPKT„DS.Lƒ1’POINTERTOEVENTPACKETQEVIAD„DS.Lƒ1’INTERRUPTADDRESS*Ç *‰EQUATESFOR'QEVOPT'(16BITS)*Ç!QVOPAS„EQU„$8000ŽADDRESSSUPPLIED*Ç'*‰EQUATESFORRETURNFROMEVENTOPTIONS*ÇRVOPEN„EQU„1’ENABLEASQ*Ç*‰CREATETCBPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSETCRTTSK„DS.Lƒ1’TASKNAME!CRTSES„DS.Lƒ1’TASKSESSIONNUMBERCRTOPT„DS.Wƒ1’OPTIONSCRTMON„DS.Lƒ2’MONITORTASKCRTIPR„DS.Bƒ1’INITIALPRIORITYCRTLPR„DS.Bƒ1’LIMITPRIORITYCRTATT„DS.Wƒ1’TASKATTRIBUTESCRTENT„DS.Lƒ1’TASKENTRYPOINT!CRTUID„DS.Wƒ1’USERIDOFNEWTASK&CRTLEN„EQU„*’LENGTHOFPARAMETERBLOCK*Ç *‰EQUATESFOR'CRTOPT'(16BITS)*Ç"CTOPMS„EQU„$8000ŽMONITORSPECIFIED#CTOPMP„EQU„$4000ŽMONITORPROPAGATED*Ç *‰EQUATESFOR'CRTATT'(16BITS)*ÇCTATST„EQU„$8000ŽSYSTEMTASK CTATMR„EQU„$4000ŽMEMORYRESIDENT*Ç*‰STARTTASKPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSETSTRTSK„DS.Lƒ1’TASKNAME!STRSES„DS.Lƒ1’TASKSESSIONNUMBERSTROPT„DS.Wƒ1’OPTIONSSTRMON„DS.Lƒ2’MONITORTASKSTRREG„DS.Lƒ15‘REGISTERS*Ç *‰EQUATESFOR'STROPT'(16BITS)*Ç"STOPMS„EQU„$8000ŽMONITORSPECIFIED#STOPMP„EQU„$4000ŽMONITORPROPAGATED#STOPRG„EQU„$2000ŽREGISTERSSUPPLIEDŠPAGE*Ç"*‰SEGMENTDIRECTORPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSET%SEGTCB„DS.Lƒ1’TASKTORECEIVESEGMENT!SEGSES„DS.Lƒ1’TASKSESSIONNUMBERSEGOPT„DS.Wƒ1’OPTIONSSEGATT„DS.Wƒ1’ATTRIBUTESSEGNAM„DS.Lƒ1’SEGMENTNAME(SEGLAD„DS.Lƒ1’LOGICALADDRESSOFSEGMENT*SEGLEN„DS.Lƒ1’LENGTH(INBYTES)OFSEGMENT)SEGPTR„DS.Lƒ1’POINTERTORECEIVINGBUFFER*Ç&*‰RECEIVINGBUFFERFOR'REC.SEG.ATTR.'*Ç ŠOFFSET0SRENAM„DS.Lƒ1’SEGMENTNAMESREATT„DS.Wƒ1’ATTRIUBTES#SRELSA„DS.Lƒ1’LOGICALSTARTADDRESS!SRELEA„DS.Lƒ1’LOGICALENDADDRESSSREPAD„DS.Lƒ1’PHYSICALADDRESSSRELEN„EQU„*’LENGTH*Ç *‰EQUATESFOR'SEGATT'(16BITS)*ÇSGATRO„EQU„$4000ŽREADONLYSGATRW„EQU„0’READ/WRITE!SGATSS„EQU„$2000ŽSESSIONSHARABLE!SGATNS„EQU„0’NOTSESSIONSHARABLE"SGATGS„EQU„$1000ŽGLOBALLYSHARABLE"SGATNG„EQU„0’NOTGLOBALLYSHARABLE%SGATDP„EQU„$800SEGMENTISDUPLICATED&SGATND„EQU„0’SEGMENTISNOTDUPLICATED.SGATSD„EQU„$400SEGMENTSHARABLEIFDUPLICATED/SGATNN„EQU„0’SEGMENTNOTSHARABLEIFDUPLICATED*Ç *‰EQUATESFOR'SEGOPT'(16BITS)*Ç8SGOPAT„EQU„$8000…15ATTRIBUTESGIVEN:TRSEG,DCLSHR,SETSAASGOPLA„EQU„$4000…14LOGICALADDRESS(NOTNAME):TRSEG,SETSA,RCVSADSGOPPA„EQU„$2000…13SETLOGICALADDR.=PHYSICALADDR.(RETADRINA0):!*GTSEG,TRSEG,ATTSEG,SHRSEG,SETSA0SGOPSP„EQU„$1000…12. MAKEPERMANENT:DCLSHR,SETSA8SGOPRP„EQU„$0800…11REMOVEPERMANENTSTATUS:DESEG,SETSA1SGOPSL„EQU„$0400…10SEGMENTLENGTH:SHRSEG,ATTSEGŠPAGE*Ç)*‰MOVELOGICALTOLOGICALPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSETMVSTSK„DS.Lƒ1’SOURCETASK$MVSSES„DS.Lƒ1’SOURCESESSIONNUUMBER$MVSADD„DS.Lƒ1’SOURCELOGICALADDRESSMVDTSK„DS.Lƒ1’DESTINATIONTASK(MVDSES„DS.Lƒ1’DESTINATIONSESSIONNUMBER)MVDADD„DS.Lƒ1’DESTINATIONLIGICALADDRESSMVLENG„DS.Lƒ1’LENGTH*Ç*‰ALLOCATEASQPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSETASQTSK„DS.Lƒ1’TASKNAME!ASQSES„DS.Lƒ1’TASKSESSIONNUMBER#ASQSTA„DS.Bƒ1’INITIALSTATUSOFASQ$ASQMML„DS.Bƒ1’MAXIMUMMESSAGELENGTH%ASQQLN„DS.Lƒ1’QUEUELENGTH(INBYTES)ASQASR„DS.Lƒ1’ADDRESSOFASR&ASQINPBƒDS.Lƒ1’ADDRESSOFINPUTBUFFER*Ç*‰EQUATESFOR'ASQSTA'(8BITS)*ÇAQSTQD„EQU„0’ASQDISABLEDAQSTQE„EQU„1’ASQENABLED*AQSTMD„EQU„0’DEFAULTINPUTBUFFERDISABLED)AQSTME„EQU„2’DEFAULTINPUTBUFFERENABLEDAQSTRD„EQU„0’ASRDISABLEDAQSTRE„EQU„4’ASRENABLED$AQSTSD„EQU„8’REGISTERSTACKDISABLED#AQSTSE„EQU„0’REGISTERSTACKENABLED6AQSTBV„EQU„$10USERIS…DEFININGDEFAULTRECEIVEBUFFER8AQSTBI„EQU„0’USERISNOTDEFININGDEFAULTRECEIVEBUFFER(AQSTRI„EQU„$20USERDOESNOTWANTANASR"AQSTRV„EQU„0’USERDOES…WANTANASR*Ç%*‰REQUESTTASKATTRIBUTESPARAMBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSETTATTID„DS.Lƒ1’TASKIDTATSES„DS.Lƒ1’TASKSESSION*Ç*‰SETPRIORITY*Ç ŠOFFSET0SPRTSK„DS.Lƒ1’TASKSPRSES„DS.Lƒ1’SESSIONSPRPRI„DS.Bƒ1’PRIORITYŠDS.Bƒ1’RESERVED*Ç*‰DATEANDTIMEROUTINES*Ç ŠOFFSET0GTDATE„DS.Lƒ1’DATEGTTIME„DS.Lƒ1’TIMEŠPAGE*Ç"*‰ESTABLISHSERVERPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSET*Ç%SRVADR„DS.Lƒ1’REQUESTSERVICEADDRESS)SRVTRP„DS.Bƒ1’TRAPINSTRUCTIONIDENTIFIER SRVPLN„DS.Bƒ1’PARAMBLOCKLENGTH*Ç*‰EQUATESFORSRVTRP(8BITS)*Ç(SRTREOTƒEQU„$40ENDOFTASKNOTIFICATION$SRTRPRMƒEQU„$20MOVEPARAMETERBLOCK*Ç-*‰ACKNOWLEDGESERVICEREQUESTPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSETACKTSK„DS.Lƒ1’TASKNAME!ACKSES„DS.Lƒ1’TASKSESSIONNUMBERACKOPT„DS.Wƒ1’OPTIONSACKTIN„DS.Bƒ1’TRAPNUMBERACKCCD„DS.Bƒ1’CONDITIONCODEACKRD0„DS.Lƒ1’REGISTERD0ACKRA0„DS.Lƒ1’REGISTERA0*Ç!*‰EQUATESFOR'ACKOPT'(16BITS) *ÇAKOPSC„EQU„$4000ŽSETCCAKOPLC„EQU„0’LEAVECCAKOPSD„EQU„$2000ŽSETD0AKOPLD„EQU„0’LEAVED0AKOPSA„EQU„$1000ŽSETA0AKOPLA„EQU„0’LEAVEA0$AKOPRT„EQU„$800REACTIVATTETHETASKAKOPWT„EQU„$400WAITTHETASK AKOPST„EQU„$200SUSPENDTHETASK!AKOPAA„EQU„$100ACK.ALLREQUESTS*Ç,*‰EQUATESFORSETUSER/SERVERREQUESTSTATUS*ÇAKRSER„EQU„$80ENABLEREQUESTŠPAGE*Ç$*‰SEMAPHOREDIRECTORPARAMETERBLOCK*Ç ŠOFFSET0’STARTWITHZEROOFFSETSEMNAM„DS.Lƒ1’SEMAPHORENAMESEMKEY„DS.Lƒ1’SEMAPHOREKEYSEMCNT„DS.Bƒ1’INITIALCOUNTSEMTYP„DS.Bƒ1’SEMAPHORETYPE*********************** 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*+********************************************%*ˆDATASTRUCTURESANDEQUATESFORI/O**$*FHSPARAMETERBLOCKDATASTRUCTURE* ‰OFFSET0FHSCMDƒDS.W1COMMANDFHSOPTƒDS.W1OPTIONSFHSSTAƒDS.B1STATUS!FHSLUNƒDS.B1LOGICALUNITNUMBERFHSVOLƒDS.B4VOLUMENAMEFHSUSNƒDS.W1USERNUMBERFHSCLGƒDS.B8CATALOGNAMEFHSFILƒDS.B8FILENAMEFHSEXTƒDS.B2EXTENSIONFHSGENƒDS.W1RESERVED FHSWCDƒDS.B1WRITEPROTECTCODEFHSRCDƒDS.B1READPROTECTCODE#FHSLRLƒDS.W1LOGICALRECORDLENGTH7FHSSIZƒDS.L1CONTIGUOUSFILESIZE/DIR.ENTRYPOINTER* FOR NONCONTIGUOUS FILES‰OFFSETFHSSIZFHSRESƒDS.B1UNUSED'FHSKEYƒDS.B1KEYLENGTH(0IFNOKEYS)FHSFABƒDS.B1FABSIZEFHSDATƒDS.B1DATABLOCKSIZE"FHSBLNƒEQU‚*LENGTHOFPARAMBLOCK**FHSCMDEQUATES(16BITS)*'FHALLOƒEQU$80ALLOCATE(CREATEAFILE)FHASGNƒEQU$40ASSIGN(OPEN)FHCLOSƒEQU$4CLOSEFHDELTƒEQU$2DELETE#FHRATTƒEQU$180RETRIEVEATTRIBUTES**ˆEQUATESFORLUASSIGNMENTS* CDFLUNƒEQU…5“CMDDEVICE/FILELUN LDFLUNƒEQU…6“LOGDEVICE/FIELLUN**FHSOPTEQU/ ATES(16BITS)#*ACCESS PERMISSION FIELD (BITS 0-2)*)FAPBIT EQU $7 BITS FOR ACCESS PERM. FIELDFOPPR„EQU0PUBLICREADFOPER„EQU1EXCLUSIVEREADFOPPW„EQU2PUBLICWRITEFOPEW„EQU3EXCLUSIVEWRITEFOPPRPW‚EQU4PUBLICREAD-WRITE*FOPPREW‚EQU5PUBLICREAD,EXCLUSIVEWRITE*FOPERPW‚EQU6EXCLUSIVEREAD,PUBLICWRITE"FOPEREW‚EQU7EXCLUSIVEREAD-WRITE**OVERWRITE FIELD (BIT 3)FOPOVRT‚EQU8OVERWRITEFILE*$* 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‚EQU0CONTIGUOUS$FOPSEQƒEQU$100SEQUENTIAL(FRL/VRL)CFOPISKƒEQU$200KEYEDRECORD,INDEXEDSEQUENTIAL,NODUPLICATEKEYS,FOPISDƒEQU$300",",DUPLICATEKEYSALLOWED*!*RESERVED FIELD (BIT 11 NOT USED)*#*USER ATTRIBUTES FIELD (BITS 15-12))FUSBITƒEQU$F000BITSFORUSERATTRIBUTES**FHSSTAEQUATES(8BITS)*"FSTADNM‚EQU$5DUPLICATEFILENAME‰PAGE**IOSPARAMETERBLOCKSTRUCTURE* ‰OFFSET0IOSFCTƒDS.W1FUNCTIONIOSOPTƒDS.W1OPTIONSIOSSTAƒDS.B1STATUS!IOSLUNƒDS.B1LOGICALUNITNUMBERIOSSRVƒDS.B1RESERVED IOSPKLƒDS.B1PARTIALKEYLENGTH.IOSRRNƒDS.L1RANDOMRECORDNUMBER:LRNORLSN"IOSSADƒDS.L1STARTBUFFERADDRESS IOSEADƒDS.L1ENDBUFFERADDRESS IOSLENƒDS.L1LENGTHOFTRANSFER IOSCADƒDS.L1COMPLETIONADDRESS"IOSBLNƒEQU‚*LENGTHOFPARAMBLOCK**IOSFCTEQUATES(16BITS)*IOREADƒEQU$1READREQUESTIOWRITƒEQU$2WRITEREQUESTIOREWDƒEQU$102REWIND**IOSOPTEQUATES(16BITS)*IOPASCƒEQU0ASCIIIOPWAT EQU 0 WAIT"IOPUNPƒEQU0UNCONDITIONALPROCEEDIOPFORƒEQU0FORMATTEDIOPECH EQU 0 ECHO MODEIOPRECƒEQU0RECORDACCESSIOPLRNƒEQU0LOGICALRECORDIOIOPKEYƒEQU0FULLKEYACCESS"IOPNOCƒEQU0NOCOMPLETIONADDRESSIOPINF EQU 0 INPUT FORMATTEDIOPBINƒEQU1BINARY6IOPPOSƒEQU$6000BITS13-14:LOGICALACCESS/POSITIONIOPNXTƒEQU$0„NEXT(FORWARD)/>%IOPCUR EQU $2000 CURRENT POSITION / ='IOPPRVƒEQU$4000PREVIOUS(BACKWARD)/<2IOPRANƒEQU$6000RANDOM(LRNORLSNGIVEN)/>OR=**IOSSTAEQUATES(8BITS)*ISTAEOF‚EQU$C2ENDOFFILE‰PAGE*"*ŒSEGMENTDIRECTORPARAMETERBLOCK* ‰OFFSET0%SEGTCBƒDS.B4—TASKTORECEIVESEGMENT!SEGSESƒDS.B4—TASKSESSIONNUMBERSEGOPTƒDS.W1—OPTIONSSEGATTƒDS.W1—ATTRIBUTESSEGNAMƒDS.B4—SEGMENTNAME(SEGLADƒDS.L1—LOGICALADDRESSOFSEGMENT*SEGLENƒDS.L1—LENGTH(INBYTES)OFSEGMENT)SEGPTRƒDS.L1—POINTERTORECEIVINGBUFFER*&*ˆRECEIVINGBUFFERFOR'REC.SEG.ATTR.'* ‰OFFSET0SRENAMƒDS.B4—SEGMENTNAMESREATTƒDS.W1—ATTRIUBTES#SRELSAƒDS.L1—LOGICALSTARTADDRESS!SRELEAƒDS.L1—LOGICALENDADDRESSSREPADƒDS.L1—PHYSICALADDRESSSRELENƒDS.L1—LENGTH* *ˆEQUATESFOR'SEGATT'(16BITS)*SGATROƒEQU…$4000READONLYSGATRWƒEQU…0”READ/WRITE!SGATSSƒEQU…$2000SESSIONSHARABLE!SGATNSƒEQU…0”NOTSESSIONSHARABLE"SGATGSƒEQU…$1000GLOBALLYSHARABLE"SGATNGƒEQU…0”NOTGLOBALLYSHARABLE%SGATDPƒEQU…$800‘SEGMENTISDUPLICATED&SGATNDƒEQU…0”SEGMENTISNOTDUPLICATED.SGATSDƒEQU…$400‘SEGMENTSHARABLEIFDUPLICATED/SGATNNƒEQU…0”SEGMENTNOTSHARABLEIFDUPLICATED* *ˆEQUATESFOR'SEGOPT'(16BITS)*8SGOPATƒEQU…$800015ATTRIBUTESGIVEN:TRSEG,DCLSHR,SETSAASGOPLAƒEQU…$4000Š14LOGICALADDRESS(NOTNAME):TRSEG,SETSA,RCVSADSGOPPAƒEQU…$2000†13SETLOGICALADDR.=PHYSICALADDR.(RETADRINA0):!*›GTSEG,TRSEG,ATTSEG,SHRSEG,SETSA0SGOPSPƒEQU…$100012MAKEPERMANENT:DCLSHR,SETSA8SGOPRPƒEQU…$080011REMOVEPERMANENTSTATUS:DESEG,SETSA1SGOPSLƒEQU…$040010SEGMENTLENGTH:SHRSEG,ATTSEG;SGOPLGƒEQU…$0200‰9ALLOCATENEXTLARGERBLOCKIFSIZEERROR‰PAGE*Æ*ˆTRAP1EQUATES°*ÆGTSEG„EQU‚1ALLOCATESEGMENT™DESEG„EQU‚2DEALLOCATESEGMENT"RELINQƒEQU‚22ŽRELINQUISHEXECUTION'RCVSA„EQU‚9RECEIVESEGMENTATTRIBUTESABORT„EQU‚14ŽABORTTASK(SELF)+RBETLFƒEQU‚26ŽRECEIVEBUSERRORTHRULINEF‰SPC…10*3* / VECTOR TABLE FOR BUS ERROR THRU LINE F EXCEPTIONS* ‰OFFSET‚0 VBETLFƒEQU…*BUSER„DS.L„1BUSERRORADDRERƒDS.L„1ADDRESSERROR‰DS.L„1UNUSEDZDIV…DS.L„1ZERODIVIDECHKI…DS.L„1CHKINSTRUCTIONTRAPV„DS.L„1TRAPVINSTRUCTIONVTABSZƒEQU…VBETLF+40‰PAGE-* RUNTIME DATA MAINTAINENCE - OFFSETS FROM A5 ‰OFFSET‚0SC‡DS.L„1STATEMENTCOUNTERHP‡DS.L„1HEAPPOINTERDL0†DS.L„8DISPLAYLEVEL0SHPAD„DS.L„1SMALLESTHEAPADDRLTN†DS.B„4LOADINGTASKNAMESN‡DS.B„4SESSIONNUMBERLUIU…DS.L„1LU'SINUSECCDR…DS.W„1CHAINCMDDIAGREGDTID…DS.B„4DEFAULTTERMINALIDDVOL…DS.B„4DEFAULTUSERVOLUMEDUN†DS.W„1DEFAULTUSERNUMBERDCAT…DS.B„8DEFAULTCATALOGCLL†DS.W„1COMMANDLINELENGTHCL‡DS.B„162‹COMMANDLINEOFAR…DS.W„26ŒOPTIONFIELDARRAY‰DS.W„1UNUSED"NFCL…DS.W„1NUMBEROFFIELDSINCLIENF…DS.B„1I=NUMBEROFFILESIECF…DS.B„1I=CURRENTFILEIEOF…DS.B„1I=OFFSET"IECO…DS.B„1I=CURRENTFILEOFFSETOENF…DS.B„1O=NUMBEROFFILESOECF…DS.B„1O=CURRENTFILEOEOF…DS.B„1O=OFFSETOECO…DS.B„1O=CURRENTOFFSET#FNNF…DS.B„1FIELDNNUMBEROFFILES FNCF…DS.B„1FIELDNCURRENTFILEFNOF…DS.B„1FIELDNOFFSET"FNCO…DS.B„1FIELDNCURRENTOFFSET'‰DS.B„4*15ŠABOVEINFOFOR15MOREFILESEFI†EQU…*ENDOFFIELDINFO"SGBRK„DS.L„1SEGMENTBREAKADDRESS2EOD†EQU…*ENDOFDATANEEDEDDURINGINITIALIZATION&‰DS.B„72ŒRUNTIMEERRORROUTINESTORAGERTDSZ„EQU…*RUNTIMEDATASIZE (* FILE POINTER - OFFSETS FROM INITIAL A0 ‰OFFSET‚0$CCP†DS.L„1CURRENTCOMPONENTPOINTER"FDP†DS.L„1FILEDESCRIPTORPOINTER =* FILE PARAMETER BLOCK - OFFSETS FROM FILE DESCRIPTOR POINTER*ˆPASCALPARAMETERBLOCK ‰OFFSET‚0FP‡DS.L„1FILEPOSITIONPFS†DS.W„1PASCALFILESTATUSCS‡DS.W„1COMPONENTSIZE*ˆIOSPARAMETERBLOCKIOS†DS.B„IOSBLN*ˆFHSPARAMETERBLOCKFHS†DS.B„FHSBLN*ˆMOREFILESTATUSFSR†DS.W„1RESERVEDFSSCN„DS.B„1FILESCANSTATUSFPOS…DS.B„1FILEPOSITION*ˆCOMPONENTBUFFERCB‡EQU…*TXTBS„EQU…132‹TEXTBUFFERSIZE )* PASCAL FILE STATUS WORD BIT ASSIGNMENTSPFSSO„EQU…0STANDARDOUTPUTPFSSI„EQU…1STANDARDINPUTPFSTF„EQU…2TEXTFILEPFSLF„EQU…3LOCALFILEPFSIF„EQU…4INDEXEDFILEPFSOP„EQU…6OPENPFSEOFƒEQU…7ENDOFFILEPFSEOLN‚EQU…8ENDOFLINEPFSPA„EQU…9PASSEDASSIGNED'PFSAPCƒEQU…10ŒACCESSPERMISSIONCHANGEDPFSCLFƒEQU…11ŒCOMMANDLINEFILEPFSOUTƒEQU…12ŒOUTPUTISTAT„EQU…$3F‹INITIALSTATUS * ADDITIONAL LU EQUATEMAXLU„EQU…31ŒMAXIMUMVALIDLU * ERROR EQUATES OSE†EQU…0OPERATINGSYSTEMERROR#LUA†EQU…$40‹LOGICALUNITASSIGNMENTNAM†EQU…$28‹FILENAMEOPT†EQU…$41‹OPTIONMAL†EQU…$12‹MEMORYALLOCATION:WSN†EQU…$13‹WRONGSEGMENTNAME,MUSTBE'SEG2'(VM0XONLY)%CLF†EQU…$42‹TOOMANYCMNDLINEFIELDSFNR†EQU…$43‹FILENOTRESETFNW†EQU…$44‹FILENOTREWRITTEN*********************** Ending of &.IOE.EQ ***********************éééé0 ééé‰PAGE************************** Beginning of &.FME.EQ ************************** ŠLLENƒ120**‰Updated08/30/84*!FABMAX„EQU„20‘MAXIMUMSIZEOFFAB'DATMIN„EQU„4’MIMIMUMSIZEOFDATABLOCK!MACSCDE1‚EQU„'EXOR'MACSSDISKIDMACSCDE2‚EQU„'MACS'SECSZE„EQU„256SECTORSIZE**"*…DATASTRUCTURESEQUATESFORFMS£ *Š01/28/80µ*Ç***Ç* DIRECTORY BLOCK EQUATES*Ç ŠOFFSET01DIRFPT„DS.Lƒ1’POINTERTONEXTDIRECTORYBLOCKSTA*DIRUSN„DS.Wƒ1’USERNO.FORTHISDIR.BLOCK.DIRCLG„DS.Lƒ2’CATALOGNAMEFORTHISDIR.BLOCKŠDS.Bƒ2’RESERVEDDIRSTR„EQU„*’STARTOF1STENTRY DBSZE…EQU„4’DIRECTORYBLOCKSIZE** '*DIRECTORYENTRY(DIR)DATASTRUCTURE–*Ç ŠOFFSET0’STARTWITHZEROOFFSETDIRFIL„DS.Lƒ2’FILENAMEFILLEN„EQU„*-DIRFILDIREXT„DS.Wƒ1’EXTENSIONEXTLEN„EQU„*-DIREXT4DIRRS1„DS.Wƒ1’RESERVED(2BYTEGENERATIONDATASET?)1DIRFS…DS.Lƒ1’FILESTARTINGPSNOR1STFABPOINTER?DIRFE…DS.Lƒ1‹PHYSICALENDOFFILELSNORLASTFABPOINTER(PSN)7*ˆTHEFOLLOWINGTWOFIELDSMUSTBEINGIVENORDERELSE‹*ˆCODEHASTOBECHANGED©%DIREOF„DS.Lƒ1’LOGICALENDOFFILELSN/DIREOR„DS.Lƒ1’ENDOFFILELOGICALRECORDNUMBERDIRWCD„DS.Bƒ1’WRITEACCESSCODEDIRRCD„DS.Bƒ1’READACCESSCODEDIRATT„DS.Bƒ1’ATTRIBUTES:DIRLBZ„DS.Bƒ1‘LASTDATABLOCKSIZE(TRUCATEDIF<>DIRDSZ)$DIRLRL„DS.Wƒ1’RECORDSIZE(0IFVRL)DIRRS2„DS.Bƒ1’RESERVED&DIRKEY„DS.Bƒ1’KEYSIZE(0IFNON-ISAM)DIRFAB„DS.Bƒ1’FABSIZEDIRDAT„DS.Bƒ1’DATABLOCKSIZE(DIRDTECƒDS.Wƒ1’DATAFILECREATED/UPDATED&DIRDTEAƒDS.Wƒ1’LASTDATEFILEASSIGNEDENDOFCHAINAFABBLK„DS.Lƒ1ŠBACKWARDLINK(PSN)TOPREVIOUSFAB,0=>FIRSTFABGFABUSE„DS.Bƒ1„FRACTIONSOFFABINUSE:0THRU1616THSINUSE(0=>EMPTY:FABPKY„DS.Bƒ1‘BCTOFNEXTFIELD:0=NULLFIELD,OTHERWISE6* LAST KEY OF PREVIOUS FAB IF ANY (ZERO FOR FISRT FAB)HFABSEG„EQU„*‚OFFSETTOFIRSTSEGMENTDESCRIPTOR(SD)FORNON-ISAMFILES"* A SEGMENT DESCRIPTOR LOOKS LIKE:ŠOFFSET0’FABENTRYEQUATES* BITS 31-28 USED FOR FLAGS::FABPSN„DS.Lƒ1‘PSNOFFIRSTSECTORALLOCATEDTOTHESEGMENT!FABMSK„EQU„$0FFFFFFFŠMASKFORPSN#FABBIT„EQU„$F0000000ŠBITFIELDMASK7FABDAT„EQU„0’BITS31-28=0=>PSNPOINTSTODATABLOCK@FABFAB„EQU„$80000000ŠBITS31-28=8=>PSNPOINTSTOANOTHERFAB-FABREC„DS.Wƒ1’NUMBEROFRECORDSINDATABLOCK0FABSGS„DS.Bƒ1’#OFSECTORSINUSEINTHESEGMENTDFABKEY„DS.Bƒ1‡LENGTHOFNEXTFIELD,0IFNULLFIELD,ELSEATLEAST4+FABSSL„EQU„*’SDLENGTHFORSEQUENTIALFILESA*SDLENGTHISVARIABLEFORISAMFILES,KEYFOLLOWSFABKEYFIELDˆ*********************** Ending of &.FME.EQ ***********************ééé‰PAGE************************** Beginning of &.FMI.EQ ****************************…INTERNALFMSEQUATES® *Š5/21/80¶*Ç*Ç* GENERAL EQUATES*Ç3NLˆEQU„$FFFFFF00ŠNEGATIVELONGWORDFORERRORCODES8FEVTLN„EQU„EVTLEN+FHSNLN†LENGTHOFMAXIMUMFMSASQENTRYKEYMIN„EQU„4’MINIMUMKEYLENGTH5KEYMAX„EQU„100MAXIMUMKEYLENGTH(2MUSTFITINFAB)'BCTFLD„EQU„2’LENGTHOFBYTECOUNTFIELD*SATSZE„EQU„1’NO.OFMEMORYBUFFERSFORSAT-SPOOLF„EQU„$40'@'-1STCHAR.FORSPOOLERFILE*TEMPF…EQU„$26'&'-1STCHAR.FORTEMP.FILE%FMSD†EQUƒ'FMSD'ŽFMSDATASEMGNETNAME@* FILE ATTRIBUTES-ALL BUF INTERACTIVE AND HALT I/O AND FILE MARKFILEATTƒEQU„$5F!STKSZE„EQU„256SIZEOFSTACKAREAŠPAGE*Ç/*VOLUMEDESCRIPTORTABLE(VDT)DATASTRUCTUREŽ*Ç ŠOFFSET0’STARTWITHZEROOFFSETVDTDCB„DS.Lƒ1’DCBADDRESS#VDTVID„DS.BƒVIDEODVIDDEFINEDDATA VDTSMA„DS.Lƒ1’SATMEMERYADDRESS+VDTSME„DS.Lƒ1’SATMEMORYBLOCKPHYSICALEND'VDTSMD„DS.Lƒ1’SATMEMORYBLOCKDATAEND(VDTSMB„DS.Lƒ1’PSNOFSATBLO1 CKINMEMORY,VDTDMA„DS.Lƒ1’PRIMDIRECTORYMEMTORYADDRESS)VDTDME„DS.Lƒ1’PRIM.DIR.MEMORYBLOCKEND4VDTDMB„DS.Lƒ1’PSNOFPRIM.DIRECTORYBLOCKINMEMORY&VDTSDA„DS.Lƒ1’SEC.DIR.MEMORYADDRESS(VDTSDE„DS.Lƒ1’SEC.DIR.MEMORYBLOCKEND3VDTSDB„DS.Lƒ1’PSNOFSEC.DIRECTORYBLOCKINMEMOYR'VDTTMA„DS.Lƒ1’STARTOFTEMPORARYBUFFER%VDTTME„DS.Lƒ1’ENDOFTEMPORARYBUFFER VDTWCT„DS.Wƒ1’VOLUMEWRITECOUNTVDTRCT„DS.Wƒ1’VOLUMEREADCOUNTVDTFLG„DS.Wƒ1’FLAG&VDTIOS„DS.BƒIOSNLNIOSPARAMETERBLOCK!VDTSSP„DS.Lƒ1’SAVEDSTACKPOINTERŠDS.BƒSTKSZESTACKAREAVDTSTK„EQU„*-4STARTOFSTACKVDTLEN„EQU„*’LENGTHOFVDT*Ç * VDTFLG BITS*Ç-VDFLSB„EQU„0’BIT0=1->SATINMEMORYCHANGED2VDFLDB„EQU„1’BIT1=1->PRIM.DBINMEMORYCHANGED1VDFLCB„EQU„2’BIT2=1->SEC.DBINMEMORYCHANGED/VDFLBB„EQU„3’BIT3=1->DEVICEISBUSYWITHI/O,VDFLTB„EQU„4’BIT4=1->TEMP.BUFFERALTERED)VDFLNW„EQU„5’BIT5=1->DISKNOTWRITABLEŠPAGE*Ç**FILECONTROLBLOCK(FCB)DATASTRUCTURE“*Ç?3%7-M5  ŠOFFSET0’STARTWITHZEROOFFSET"FCBVDT„DS.Lƒ1’ADDRESSOFVDTENTRY<* KEEIP FCBDCQ AND FCBFLG AT BEGINNING SINCE USED BY IOS FOR*…CONNECTIONWAIT³FCBDCQ„DS.Lƒ1’POINTERTODCQFCBFLG„DS.Wƒ1’FLAGWORD2FCBSDB„DS.BƒSDBFLNUSERNO./CATALOGFROMSDBENTRY(FCBDIR„DS.BƒDIRLENDIRECTORYENTRYIMAGE!FCBDBP„DS.Lƒ1’DIRECTORYBLOCKPSN$FCBDBO„DS.Wƒ1’DIRECTORYBLOCKOFFSET'FCBSDBPƒDS.Lƒ1’SECONDARYDIR.BLOCKPSN)FCBSDBOƒDS.Wƒ1’SECONARYDIR.BLOCKOFFSET4* MUST KEEP FCBWCT AND FCBRCT TOGETHER IN THAT ORDERFCBWCT„DS.Wƒ1’FILEWRITECOUNTFCBRCT„DS.Wƒ1’FILEREADCOUNTFCBLEN„EQU„*’FCBLENGTH*Ç * FCBFLG BITS*Ç?FCFLDB„EQU„0‡BIT0=1->DIR.INFO.CHANGEDINFCB(CALLUPTDIR)CFCFLWB„EQU„1‡BIT1=1->VOLUMEWRITEOCCURRED(CAN'TDOFETCHDIR.)@FCFLCB„EQU„2‡BIT2=1->DEVICESTATUSCHANGE-FILEMUSTBECLOSED?FCFLUB„EQU„3‡BIT3=1->UNRECOVERABLEERROR-FILEMUSTBECLOSED-FCFLBB„EQU„4‡BIT4=1->FILEISBUSYWITHI/O3FCFLOB„EQU„5‡BIT5=1->FILEOVERWRITEHASOCCURREDŠPAGE*Ç-*FILEASSIGNMENTTABLE(FAT)DATASTRUCTURE*Ç ŠOFFSET0’STARTWITHZEROOFFSETFATFCB„DS.Lƒ1’FCBPOINTERFATTSK„DS.Lƒ1’CALLERTASKIDFATSES„DS.Lƒ1’CALLERSESSIONFATLUE„DS.Lƒ1’LUNENTRY$FATLUT„DS.Lƒ1’STARTOFLUTTHISTASK+FATIOS„DS.BƒIOSBLNCOPYOFUSERI/OREQUEST'FATUPB„DS.Lƒ1’USERPARAMETERBLOCKADDR+FATCLR„DS.Lƒ1’CURRENTLOGICALRECORDS'SLRNGFATCLS„DS.Lƒ1„CURRENTLOGICALSECTOR(1STSECTOROFCURRENTDATABLOCK)'FATBCT„DS.Lƒ1’NO.OFBLOCKSTRANSFERRED:*ˆTHENEXT5FIELDSMUSTBEINTHEGIVENORDER,ELSECODEˆ*ˆHASTOBECHANGED®/FATFAA„DS.Lƒ1’FABMEMORYBLOCKSTARTINGADDRESS"FATFAE„DS.Lƒ1’FABMEMORYBLOCKEND"FATFAB„DS.Lƒ1’PSNOFFABINMEMORYEFATCFP„DS.Lƒ1†CURRENTFABENTRYPOINTER(->CURRENTDATABLOCKINFO.)3FATKEY„DS.Lƒ1’POINTERTOLASTFABENTRY'SKEYFIELD6*ˆTHENEXT6FIELDSMUSTBEINGIVENORDER,ELSECODEŒ*ˆHASTOBECHANGED®$FATFLS„DS.Lƒ1’1STLSNOFCURRENTFAB7FATFLR„DS.Lƒ1’1STLOGICALRECORDNUMBERFORCURRENTFAB-FATSLS„DS.Lƒ1’STARTINGLSNOFCURRENTSEGMENT8FATSLR„DS.Lƒ1’STARTINGLOGICALRECORDOFCURRENTSEGMENT%FATLLS„DS.Lƒ1’LASTLSNOFCURRENTFAB%FATLLR„DS.Lƒ1’LASTLRNOFCURRENTFAB*Ç%FATBSN„DS.Lƒ1’SEGMENTNAMEFORBUFFER2FATSLA„DS.Lƒ1’USER'SBUFFERSTARTINGLOGICALADDR.>*ˆTHENEXT3FIELDSMUSTBEINTHEGIVENORDER,ELSECODEHAS„*ˆHASTOBECHANGED®*FATSBS„DS.Lƒ1’SECTORBUFFERSTARTINGADDR.'FATSBL„DS.Lƒ1’SECTORBUFFERLOGICALEND'FATSBE„DS.Lƒ1’SECTORBUFFERENDINGADDR*Ç'FATDBP„DS.Lƒ1’FETCHNEXTDIR.BLOCKPSN*FATDBO„DS.Wƒ1’FETCHNEXTDIR.BLOCKOFFSET,FATSDBPƒDS.Lƒ1’FETCHNEXTDIR.ENTRYSDBPSN/FATSDBOƒDS.Wƒ1’FETCHNEXTDIR.ENTRYSDBOFFSET5FATASN„DS.Wƒ1’ASSGN.OPTION(OVERWRITE/SHAREDBUFFER)FATFLG„DS.Wƒ1’FLAGWORDFA1 TLEN„EQU„*’FATLENGTH*Ç * FATFLG BITS*Ç1FAFLSB„EQU„0‡BIT0=1->FMSSECTORBUFFERCREATED'FAFLSBVƒEQU„1’VALUEASSOCIATEDWITHBIT2FAFLBB„EQU„1‡BIT1=1->1STI/OWASBLOCKTRANSFER FAFLBBVƒEQU„23FAFLRB„EQU„2‡BIT2=1->1STI/OWASRECORDTRANSFER FAFLRBVƒEQU„4=FAFLFB„EQU„3‡BIT3=1->FABINMEMORYCHANGED-‚TOBEUPDATED FAFLFBVƒEQU„84FAFLDB„EQU„4‡BIT4=1->DATABLOCKINMEMORYCHANGEDFAFLDBVƒEQU„$10CFAFLUB„EQU„5‡BIT5=0/1->DON'TUPDATE/UPDATEFABENTRYONWRITEDBFAFLUBVƒEQU„$20AFAFLCB„EQU„6‡BIT6=0/1->DON'TCHECK/CHECKFABENTRYONWRITEDBFAFLCBVƒEQU„$40,FAFLKB„EQU„7‡BIT7=1->LASTFABKEYCHANGEDFAFLKBVƒEQU„$80/FAFLLB„EQU„8‡BIT8=1->LASTI/OWASFORDELETEFAFLLBVƒEQU„$100HFAFLIB„EQU„9‚BIT9=1->INPUTFABDURINGGETFDB,TRYTOMERGEW/NEXTFABFAFLIBVƒEQU„$2004FAFLMB„EQU„10†BIT10=1->NEXTFABTOOBIGFORMERGEFAFLMBVƒEQU„$400'*DATABLOCKANDFABMERGEPARAMETERS:¢.DATFRC„EQU„3†CURRENTDB.LE.1/3FULLTOMERGE>DATFRN„EQU„2†NEXTDATABLOCK1/2FULLFORMERGE,IFMOREDON'TDFABFRC„EQU„3†CURRENTFABFRACTIONINUSE-1/3=>MERGE,MORE=DON'T>FABFRN„EQU„8†NEXTFAB8/16THFULLORLESS=>MERGE,ELSEDON'TŠPAGE*Ç* PDB PSN LIST BLOCK EQUATES*Ç ŠOFFSET08PDLFPT„DS.Lƒ1’POINTERTONEXTPDBPSNBLOCK(=0IFNONE)!PDLSTR„EQU„*’PSNFORADIR.BLOCK0PDLSZE„EQU„1’SIZEOFPDBLISTBLOCK(INSECTORS)!PDLLEN„EQU„4’LENGTHOFEACHENTRY;PDLENT„EQU„(PDLSZE*SECSZE-PDLSTR)/PDLLENNO.OFPSN'S/BLOCKŠPAGE*Ç*Ç6* FILE ALLOCATION/DEALLOCATION (FBALLC/FBDEAL) EQUATES*Ç*Ç*‚GETFDBDIRECTIVESIND1.L:«(*‚(USEDTOGETOFFSETINTOJUMPTABLE) *Ç*…DIRECTIVEINBITS0-5­-LSNFDB„EQU„0’FABCORRESPONDINGTOLSNIND0.L-LRNFDB„EQU„1’FABCORRESPONDINGTOLRNIND0.LFKEYFDB„EQU„2„FABCORRESPONDINGTOKEYPOINTEDTOBYD0.L(BCTIND2.B)PGTFDB„EQU„3’PARTIALKEY(>)PGETDB„EQU„4’PARTIALKEY(>=)PLTFDB„EQU„5’PARTIALKEY(<)6*…BIT7USEDTOINDICATEIFDATABLOCKSHOULDBEREAD(RDBFLGBƒEQU„7’BIT7=1->READDATABLOCKRDBFLG„EQU„$80%*…BIT6USEDTOINHIBITLSN/EOFTEST :EOFFLGBƒEQU„6‘BIT6=1->DON'TCOMPAREGIVENLSNTODIREOFEOFFLG„EQU„$40ŠPAGE*Ç* DEFAULT VOLUME EQUATES*Ç ŠOFFSET0DEFVOL„DS.Lƒ1’DEFAULTVOLUME$DEFTYP„DS.Lƒ1’TYPEOFDEFAULTVOLUME DVLEN…EQU„*’LENGTHOFEACHENTRY*Ç* VALUES FOR DEFAULT TYPE*ÇSYSDEF„EQU„'SYST'SYSTEMVOLUMETMPDEF„EQU„'TEMP'TEMP.VOLUME!SPLDEF„EQU„'SPOL'SPOOLERVOLUME'ŠPAGE*Ç7* MACRO TO SET IOS PARAMETER BLOCK FUNCTION AND OPTIONS*…PARAMETERS:·*…1-FUNCTION¶*…2-OPTIONS·-*…3-EFFECTIVEADDR.OFIOSPARAMETERBLOCK˜ SETFO…MACRO!ŠMOVE.L#(\1*$10000)+\2,IOSFCT+\3ŠENDM;* SETRFO SAME AS SETFO EXCEPT FIRST PARAMETER IN A REGISTER SETRFO„MACROŠSWAPƒ\1‘FUNCTIONHIGHWORDŠMOVE.W#\2,\1OPTIONSŠMOVE.L\1,IOSFCT+\3‡SETBOTHŠENDM*ÇB* SETSBA SETS RANDOM SECTOR NUMBER AND BUFFER ADDRESS IN IOS BLOCK SETSBA„MACRO7ŠMOVEM.L\1/\2/\3,IOSRRN+\4IOSRRN,IOSSAD,IOSEADSETUPŠ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 ****************************‰GLOBALSEGMENTTABLE*!ŠOFFSET0’THISISANOFFSETTABLEGST‡DS.Lƒ1’!GST„DEBUGTOOL)GSTNEXTƒDS.Lƒ1’LINKTONEXTTABLESEGMENT*GSTNSEGƒDS.Wƒ1’NUMBEROFSEGMENTSINTABLE$GSTNPAGE‚DS.Wƒ1’SIZEOFGSTINPAGES(GSTMENTƒDS.Wƒ1’MAXIMUMNUMBEROFENTRIES(GSTLENTƒDS.Wƒ1’NUMBEROFLASTENTRYUSED%GSTFENTƒDS.Lƒ1’ADDRESSOFFIRSTENTRY$GSTENTRY‚EQU„*’OFFSETTOFIRSTENTRY**ˆGSTENTRYDEFINITION*&ŠOFFSET0’OFFSETISFROMENTRYPOINTER$GSTSESSN‚DS.Lƒ1’ORIGINATOR'SSESSIONGSTNAMEƒDS.Lƒ1’SEGMENTNAME)GSTATTRƒDS.Wƒ1’ATTRIBUTESGIVENTOSHARER*GSTCNT„DS.Wƒ1’USECOUNT(0=ENTRYUNUSED)%GSTPA…DS.Lƒ1’SEGMENTPHYSICALADDRESS"GSTNP…DS.Wƒ1’SEGMENTSIZEINPAGESGSTEL…EQU„*’ENTRYLENGTH*********************** Ending of &.GST.EQ ***********************éééé=‰PAGE******************************* Beginning of &.INTERRUP.MC *******************************O********************************************************************************Í*@*‰Macrosusefulindealingwithinterruptsinsupervisormode.ˆ**Í*O******************************************************************************* *;*‚DISABLE_INTERRUPTSmasksinterruptstolevel7intheSR.*DISABLE_INTERRUPTS MACRO ŠOR…#$0700,SRŠENDM *J*‚ENABLE_INTERRUPTSlowersthei2 nterruptmaskintheSRto0,enablingallJ*‚interrupts.‚Thisshouldonlybedonebycodewhichisnotbeingexecuted*‚inresponsetoaninterrupt.*ENABLE_INTERRUPTS MACROŠAND„#$FFFF-$0700,SRŠENDM**************************** Ending of &.INTERRUP.MC ****************************ééééF‰PAGE************************** Beginning of &.IOE.EQ ************************** ŠLLENƒ120**”**************¥*”*‚10/08/84‚**”**************¥*ÇO*------------------------------------------------------------------------------**=*ˆERRORMESSAGEHANDLEREQUATESFORNON-TRAPRELATEDMESSAGES**’ASOF8/30/84**EM_NVE„EQU„$100INVALIDENTRY4EM_SCBOƒEQU„$101SUBSTITUTIONCAUSEDBUFFEROVERFLOW#EM_NOARG‚EQU„$102NOARGUMENTFOUNDEM_NVO„EQU„$103INVALIDOPTION%EM_NOMEM‚EQU„$104INSUFFICIENTMEMORY!EM_OPTCF‚EQU„$105OPTIONCONFLICT*EM_CLSEƒEQU„$106COMMANDLINESYNTAXERROR1EM_NVDEV‚EQU„$107INVALIDDEVICENAMEFORREQUEST**O* -----------------------------------------------------------------------------&*ˆDATASTRUCTURESANDEQUATESFORI/Oœ*Ç*Ç%*FHSPARAMETERBLOCKDATASTRUCTURE˜*Ç ŠOFFSET0’STARTWITHZEROOFFSETFHSCMD„DS.Wƒ1’COMMANDFHSOPT„DS.Wƒ1’OPTIONSFHSSTA„DS.Bƒ1’STATUS!FHSLUN„DS.Bƒ1’LOGICALUNITNUMBERFHSVOL„DS.Lƒ1’VOLUMENAME-FHSDLN„EQU„*’LENGTHFORASSIGNDEFAULTVOLUMEFHSUSN„DS.Wƒ1’USERNUMBERFHSCLG„DS.Lƒ2’CATALOGNAMEFHSFIL„DS.Lƒ2’FILENAMEFHSEXT„DS.Wƒ1’EXTENSIONFHSGEN„DS.Wƒ1’RESERVED FHSWCD„DS.Bƒ1’WRITEPROTECTCODEFHSRCD„DS.Bƒ1’READPROTECTCODE#FHSLRL„DS.Wƒ1’LOGICALRECORDLENGTH7FHSSIZ„DS.Lƒ1’CONTIGUOUSFILESIZE/DIR.ENTRYPOINTER0ŠOFFSETFHSSIZREDEFINEDFORNONCONTIGUOUSFILESFHSRES„DS.Bƒ1’UNUSED'FHSKEY„DS.Bƒ1’KEYLENGTH(0IFNOKEYS)FHSFAB„DS.Bƒ1’FABSIZEFHSDAT„DS.Bƒ1’DATABLOCKSIZE"FHSBLN„EQU„*’LENGTHOFPARAMBLOCK+*REDEFINEDFHSBLOCKFORCHANGELUREQUESTžŠOFFSETFHSLUNFHSLUA„DS.Bƒ1’CHANGELUAFHSLUB„DS.Bƒ1’CHANGELUBŠDS.Bƒ1’RESERVEDFHSTSK„DS.Lƒ1’CHANGELUTASKID$FHSSES„DS.Lƒ1’CHANGELUTASKSESSION4FHSCLN„EQU„*’LENGTHOFPARAMETERBLOCKFORCHANGELU0*REDEFINEDFHSBLOCKFORFETCHDEVICEMNEMONICS™ŠOFFSETFHSVOL'FHSPTR„DS.Lƒ1’POINTERTORETURNEDINFO.,FHSLEN„DS.Lƒ1’LENGTHOFRETURNEDINFO.BLOCK.FHSFLN„EQU„*’LENGTHFORFETCHDEVICEMNEMONICS OEXC`ChCp?x7€#ˆ8˜P 8¨.°@¸3À?È{Ð3 6*ADDITIONALFHSPARAMETERSFORSHAREDSEGMENTREQUEST“ŠOFFSETFHSBLN.FHSSAD„DS.Lƒ1’SEGMENTSTARTINGLOGICALADDRESS*FHSEAD„DS.Lƒ1’SEGMENTENDINGLOGICALADDR.FHSSNM„DS.Lƒ1’SEGMENTNAME=FHSNLN„EQU„*LENGTHOFPARM.BLOCKFORSHAREDSEGMENTREQUEST*Ç*FHSCMDEQUATES(16BITS)¢*Ç'FHALLO„EQU„$80ALLOCATE(CREATEAFILE)FHASGN„EQU„$40ASSIGN(OPEN)'FHCHNG„EQU„$20CHANGEACCESSPERMISSIONFHRENM„EQU„$10RENAMEFHPROT„EQU„$8‘PROTECTFHCLOS„EQU„$4‘CLOSEFHDELT„EQU„$2‘DELETEFHCKPT„EQU„$1‘CHECKPOINT#FHRATT„EQU„$180RETRIEVEATTRIBUTES%FHFDEN„EQU„$140FETCHDIRECTORYENTRY&FHFDMN„EQU„$120FETCHDEVICEMNEMONICS$FHCHLU„EQU„$110CHANGELUASSIGNMENT#FHFDV…EQU„$108FETCHDEFAULTVOLUMESPLCANCƒEQU„$280CANCELSPOOLERSPLCONTƒEQU„$240CONTINUESPLFORMƒEQU„$220FORMSSPLPRNTƒEQU„$210PRINTSPLCOPYƒEQU„$208COPIESSPLQUE„EQU„$204DISPLAYQUEUE#FHDVOL„EQU„$8001ŽSETDEFAULTVOLUME*Ç*ˆEQUATESFORLUASSIGNMENTS¥*Ç!CDFLUN„EQU„5’CMDDEVICE/FILELUN!LDFLUN„EQU„6’LOGDEVICE/FIELLUN*Ç*FHSOPTEQUATES(16BITS)¢$*ACCESSPERMISSIONFIELD(BITS0-2)¥*Ç)FAPBIT„EQU„$7‘BITSFORACCESSPERM.FIELDFOPPR…EQU„0’PUBLICREADFOPER…EQU„1’EXCLUSIVEREADFOPPW…EQU„2’PUBLICWRITEFOPEW…EQU„3’EXCLUSIVEWRITEFOPPRPWƒEQU„4’PUBLICREAD-WRITE*FOPPREWƒEQU„5’PUBLICREAD,EXCLUSIVEWRITE*FOPERPWƒEQU„6’EXCLUSIVEREAD,PUBLICWRITE"FOPEREWƒEQU„7’EXCLUSIVEREAD-WRITE*Ç*OVERWRITEFIELD(BIT3)°FOPOVRTƒEQU„8’OVERWRITEFILE*Ç*TRUNCATEFIELD(BIT4)±*FOPTRN„EQU„$10TRUNCATEFILEATCLOSETIME*Ç%*ALLOCATEDATABUFFERFIELD(BIT5)¤*FOPABF„EQU„$20ALLOCATESHAREDDATABUFFER*Ç*POSITIONFIELD(BIT6)±*FOPBEG„EQU„0’POSITIONATBEGINNINGOFFILE&FOPEND„EQU„$40POSITIONATENDOFFILE"*RESERVEDFIELD(BITS7NOTUSED)§*Ç*FILETYPEFIELD(BITS8-10)¬"FFTBIT„EQU„$700BITSFORFILETYPEFOPCON„EQU„0’CONTIGUOUS$FOPSEQ„EQU„$100SEQUENTIAL(FRL/VRL)CFOPISK„EQU„$200‡KEYEDRECORD,INDEXEDSEQUENTIAL,NODUPLICATEKEYS,FOPISD„EQU„$300",",DUPLICATEKEYSALLOWED*;FOPADR„EQU„$800RETURNPHY.ADRFORSHAREDDATABUFFERREQ.*Ç$*USERATTRIBUTESFIELD(BITS15-12)¥)FUSBIT„EQU„$F000ŽBITSFORUSERATTRIBUTES*Ç*CHANGELUOPTIONSµFOPSLU„EQU„0’SENDLUFOPRLU„EQU„1’RECEIVELU FOPKEP„EQU„$8000ŽKEEPASSIGNMENT*Ç%*SET AND FETCH DEFAULT VOLUME OPTIONS"FOPDSY„EQU„0’SYSTEMVOLUMEDEFAULTFOPDTM„EQU„1’TEMPORARYFOPDSP„EQU„2’SPOOLERFOPDUS„EQU„3’USER*Ç*FETCH DEVICE MNEMONICS OPTIONS'FOPFRA„EQU„4’FETCHRANDOMACCESDEVICES%FOPFIN„EQU„5’FETCHINTERATCIEDEVICES"FOPFPR„EQU„6’FETCHPRINTERDEVICES*Ç*FHSSTAEQUATES(8BITS)£*ÇFSTAOK„EQU„$0‘NOERROR*Ç#*ERRORCODE1ISRESERVEDFOREXEC¦*(SERVERDOESNOTEXIST)°*Ç2FSTAOSNX‚EQU„$1‘OPERATINGSYSTEMTASKNON-EXISTENTFSTAIF„EQU„$2‘INVALIDCOMMAND#FSTAILUƒEQU„$3‘INVALIDLOGICALUNITFSTAVOLƒEQU„$4‘VOLUMEERROR"FSTADNMƒEQU„$5‘DUPLICATEFILENAME#FSTAFD„EQU„$6‘FILEDESCRIPTORERROR FSTAPC„EQU„$7‘PROTECTCODEERROR!FSTARL„EQU„$8‘RECORDLENGTHERROR"FSTASE„EQU„$9‘SHAREDSEGMENTERROR*FSTADS„EQU„$A‘INSUFFICIENTDIRECTORYSPACE%FSTAAP„EQU„$B‘ACCESSPERMISSIONERROR'FSTASS„EQU„$C‘INSUFFICIENTSYSTEMSPACE FSTAAS„EQU„$D‘INVALIDASSIGNMENT!FSTADT„EQU„$E‘INVALIDDEVICETYPEFSTABO„EQU„$F‘BUFFEROVERFLOW FSTATN„EQU„$10INVALIDTASKNAME&FSTAADDƒEQU„$11INVALIDBUFFERADDRESS FSTAFT„EQU„$12INVALIDFILETYPE!FSTAIE„EQU„$13INTERNALFHSERROR*FSTAIP„EQU„$14INVALIDPARAMBLOCKADDRESS&FSTADL„EQU„$15DATABLOCKLENGTHERRORFSTASZ„EQU„$16SIZEERROR&FSTANNMƒEQU„$17NON-EXISTENTFILENAME FSTAEODƒEQU„$18ENDOFDIRECTORYFSTAKY„EQU„$19KEYLENGTHERRORFSTAFL„EQU„$1AFABLENGTHERROR*FSTANDVƒEQU„$1BDEFAULTVOLUMENOTDEFINED2FSTAWS„EQU„$1CWRONGSTATEFORSPOOLSTARTCOMMAND6FSTAIU„EQU„$1DSPOOLCOMMANDS-INVALIDUSER#SPECIFIED*Ç&*FETCHDIRECTORYENTRYRETURNEDINFO.£*Ç!†OFFSET0STARTWITHZEROOFFSETªFDUSN…DS.Wƒ1’USERNUMBERFDCLG…DS.Lƒ2’CATALOGFDFIL…DS.Lƒ2’FILENAMEFDEXT…DS.Wƒ1’EXTENSION3 ŠDS.Wƒ1’RESERVEDFDFS†DS.Lƒ1’FILESTARTINGPSNFDFE†DS.Lƒ1’FILEENDINGPSN.FDEOF…DS.Lƒ1’ENDOFFILELOGICALSECTORNUMBER.FDEOR…DS.Lƒ1’ENDOFFILELOGICALRECORDNUMBERFDWCD…DS.Bƒ1’WRITEACCESSCODEFDRCD…DS.Bƒ1’READACCESSSCODEFDATT…DS.Bƒ1’ATTRIBUTES>FDLBZ…DS.Bƒ1ŒLASTDATABLOCKSIZE(FILETRUNCATEDIF<>FDDAT)6FDLRL…DS.Wƒ1’RECORDSIZE(0=>VARIABLERECORDLENGTH)ŠDS.Bƒ1’RESERVED$FDKEY…DS.Bƒ1’KEYSIZE(0=>NOKEYS)FDFAB…DS.Bƒ1’FABSIZEFDDAT…DS.Bƒ1’DATABLOCKSIZEFDDTEC„DS.Wƒ1’DATEFILECREATED%FDDTEA„DS.Wƒ1’DATEFILELASTASSIGNEDŠDS.Bƒ8’RESERVED#FDLEN…EQU„*’FETCHDIR.ENTRYLENGTH*Ç'*FETCHDEVICEMNEMONICSRETURNEDINFO.¢*Ç ŠOFFSET0FDVDEV„DS.Lƒ1’DEVICEMNEMONICFDVVOL„DS.Lƒ1’VOLUMEIDFDVVAL„DS.Bƒ1’RESERVEDFDVSTS„DS.Bƒ1’DEVICESTATUS)FDVLEN„EQU„*’FETCHDEVICEMNEOMICSLENGTHŠPAGE*Ç *IOSPARAMETERBLOCKSTRUCTURE*Ç ŠOFFSET0’STARTWITHZEROOFFSETIOSFCT„DS.Wƒ1’FUNCTIONIOSOPT„DS.Wƒ1’OPTIONSIOSSTA„DS.Bƒ1’STATUS!IOSLUN„DS.Bƒ1’LOGICALUNITNUMBER0IOSSRV„EQU„*’SERVICEADDRESSFORATTENTIONEVENTŠDS.Bƒ1’RESERVED-IOSPKL„DS.Bƒ1’RESERVEDFORPARTIALKEYLENGTH.IOSRRN„DS.Lƒ1’RANDOMRECORDNUMBER:LRNORLSN"IOSSAD„DS.Lƒ1’STARTBUFFERADDRESS3IOSALT„EQU„IOSSADToimplementthealternatesector#*£handlingonboththeVM22andthe'*£RWIN1controllers,weneedaplaceto&*£putthelogicalsectornumberofthe*£alternatesector. IOSEAD„DS.Lƒ1’ENDBUFFERADDRESS IOSLEN„DS.Lƒ1’LENGTHOFTRANSFER IOSCAD„DS.Lƒ1’COMPLETIONADDRESS"IOSBLN„EQU„*’LENGTHOFPARAMBLOCK** IOS PARAMETER BLOCK STRUCTURE$*ˆFORCONFIGUREANDSTATUSCOMMANDS.*ŠOFFSETIOSRRN IOSDBP„DS.Lƒ1’DATABLOCKPOINTERIOSCSL„EQU„*’LENGTHOFPB *A*‚IOSConfigurationBlockstructureforCONFIGURE,CHANGEDEFAULT+*‚CONFIGURATION,&REQUESTSTATUScommands.*‚Device-independentportion:* ŠOFFSET0IOSDST„DS.Bƒ1’DEVICESTATUS?IOSCEC„EQU„IOSDST‹CONFIGURATIONERRORCODE(returnedinlieuof(*§devicestatusifISTACNFerrorstatus)IOSCTP„DS.Bƒ1’CHANNELTYPEIOSDTP„DS.Bƒ1’DEVICETYPEIOSDRC„DS.Bƒ1’DRIVERCODEIOSATM„DS.Wƒ1’ATTRIBUTESMASKIOSPRM„DS.Wƒ1’PARAMETERSMASKIOSATW„DS.Wƒ1’ATTRIBUTESWORDIOSREC„DS.Wƒ1’RECORDLENGTHIOSRSZ„DS.Lƒ1’DEVICESIZEIOSWTO„DS.Lƒ1’WRITETIMEOUTIOSRTO„DS.Lƒ1’READTIMEOUT+IOSDDC„EQU„*’DEVICEDEPENDENTCONFIGURATION *F*‚BitequatesforIOSPRMfordevice-independentpartofconfiguration.*/IOSRECBƒEQU„0’Parameter#forIOSRECparameter.IOSRSZBƒEQU„1’etc. IOSWTOBƒEQU„2 IOSRTOBƒEQU„3 *@*‚Device-dependentportionofconfigurationblockforterminals:*ŠOFFSETIOSDDCIOSXOF„DS.Bƒ1’X-OFFCHARACTERIOSXON„DS.Bƒ1’X-ON‚CHARACTER(IOSBRC„DS.Bƒ1’BREAKEQUIVALENTCHARACTER&IOSDOP„DS.Bƒ1’DISCARDOUTPUTCHARACTER$IOSRLN„DS.Bƒ1’REPRINTLINECHARACTER#IOSCLC„DS.Bƒ1’CANCELLINECHARACTERIOSRTV„DS.Lƒ1’READTERMINATORS IOSEOL„DS.Lƒ1’ENDOFLINESTRINGIOSBRT„DS.Bƒ1’BAUDRATECODE IOSNLS„DS.Bƒ1’NULLPADDINGCOUNTIOSTRC„DS.Bƒ1’TERMINATORCLASS/IOSTCD„DS.Bƒ1’TERMINALCODE(SEEEQUATESBELOW):IOSTTM„DS.Bƒ10DONOTUSE!‚RESERVEDFORINTERNALUSEONLY!ŠDS.Bƒ6’RESERVED6IOSTLN„EQU„*’LENGTHOFDATABLOCKFORTERMINALDEVICES *6*ˆCONFIGURATIONPARAMETERSSPECIFICTOPRINTERDEVICES*ŠOFFSETIOSDDCAIOSLRL„DS.Wƒ1ŠLOGICALRECORDLENGTH<=IOSREC(PHYSICALREC.LEN.)7IOSELC„DS.Bƒ1’ENDOFLINECHARACTER(WITHAUTOLFONLY)IOSPRSVƒDS.Bƒ15‘RESERVED5IOSPLN„EQU„*’LENGTHOFDATABLOCKFORPRINTERDEVICES*N*‚BitequatesforIOSDST(devicestatus);alsoforXRPDSTinchannelcommands.J*‚Note:‚thevariousbitsaremeaningfulonlywithcertaindrivers/devices.*3XDSBRK„EQU„0’BREAKCONDITION(onlyusedinternally)0XDSDCD„EQU„1’StateofDCDlineattheconnector.0XDSABR„EQU„2’1=Doingautobaudratedetection. XDSWPB„EQU„5’WRITE-PROTECTEDBIT!XDSNRB„EQU„7’DEVICENOTREADYBIT*+*ˆEquatesforIOSDSTspecifictomagtapes./*ˆBits2,1,0ofIOSDSTreturnthetapedensity.*XDSBLANK‚EQU„7’BlanktapeXDSD800ƒEQU„1’800bpi4 XDSD1600‚EQU„0’1600bpi*2XDSCGB„EQU„4’1=Transportdensitysoftwareselect&*’.“0=Transportdensitypanelselect*0*‚EquatesforIOSCEC(configurationerrorcode).&*‚$01-$3F‚errorscommontoalldrivers0*‚$40-$7F‚errorsspecifictoaparticulardriver*‚$80-$FF‚reserved*CECTIM„EQU„$41ŒModemoperationandsomeincompatibleparameter*Ÿorattributewerespecified.>CECTBR„EQU„$42ŒThedevicecannotbesoftware-configuredtothe*Ÿspecifiedbaudrate.* *ÆIEEE4886*…(IOSCECequatesspecifictoIEEE488devices)•IEEE488 *ÆIEEE488>CECBPO„EQU„$40ŠTryingtoconfigureaparameterthatisƒIEEE488!*œonlyvalidfortheBUS.“IEEE4889CECSCE„EQU„$41ŠTryingtoconfigureBUSforsystemˆIEEE488+*œcontrollercapabilityandhardwar‰IEEE488*œswitchisnotset.˜IEEE488.CECIPA„EQU„$42ŠInvalidprimaryaddress“IEEE488=CECVARLƒEQU„$43ŠVariableconfigurationareaparameter…IEEE488*œerror.¤IEEE4888CECSADRƒEQU„$44ŠInvalidsec.addr.configurationŠIEEE488*.*…(IOSCECequatesspecifictoprinterdevices)*3CECPNI„EQU„$40NULLisinvalidforanEOLcharacter=CECPRLZƒEQU„$41ŽLogicaland/orphysicalrecordlengthiszero>CECPLGPƒEQU„$42Logicalrecordlength>physicalrecordlength*/*…(IOSCECequatesspecifictomagtapedevices)*8CECREQ„EQU„$40Thetapedriveisnotconfiguredforuser* densityrequests.*)CECDEN„EQU„$41Unknowndensityrequested.**I*‚EquatesforIOSCTP(channeltype);alsoforXIOCTPinchannelcommands.*XTACIA„EQU„1’ACIADEVICEXTPIAA„EQU„2’PIAA-SIDEDEVICEXTPIAB„EQU„3’PIAB-SIDEDEVICEXTCRTC„EQU„4’CRTCDEVICEXTSSDA„EQU„5’SSDADEVICEXTADLC„EQU„6’ADLCDEVICEXTDIPC„EQU„$10DISKIPCXTMIPC„EQU„$11MCCMIPC#XTVM22„EQU„$12VM22DISKCONTROLLER"XTDSAS„EQU„$20SASIONI/OCHANNEL(XTDWIN„EQU„$21WINCHESTERONI/OCHANNEL$XTDFLP„EQU„$22FLOPPYONI/OCHANNEL%XTD315„EQU„$23VME315DISKCONTROLLER)XTM435„EQU„$24MVME435(MAGTAPEADAPTER)%XTD320„EQU„$25VME320diskcontrollerXTVM31„EQU„$81VM31CHANNEL**ˆPRINTERPORTS:$50-$5F*XTPEXM„EQU„$50PIAEXORMACSXTPVM1„EQU„$51VM01PARALLELXTPRTL„EQU„$52RTTLIOPARALLEL(XTPV050ƒEQU„$53ParallelportonMVME050(XTPV115ƒEQU„$54ParallelportonMVME115(XTPV117ƒEQU„$55ParallelportonMVME117ééé4 **ˆSERIALPORTS:$60-$7F*"XTS7A2„EQU„$607201A-sideonVM02"XTS7B2„EQU„$617201B-sideonVM02"XTS7A8„EQU„$627201A-sideonVM80"XTS7B8„EQU„$637201B-sideonVM80"XTS7AR„EQU„$647201A-sideonRSIO"XTS7BR„EQU„$657201B-sideonRSIO+XTACD1„EQU„$66ACIADebugport1(EXORmacs)+XTACD2„EQU„$67ACIADebugport2(EXORmacs)XTS110„EQU„$68ACIAVME110*$69Donotuse'XTDRTA„EQU„$6ASCN2681onVME115A-side'XTDRTB„EQU„$6BSCN2681onVME115B-side XTMFP0„EQU„$6CMK68901onVME120*$6DDonotuse!XTEPCI„EQU„$6EEPCI(2661)device(XTSEXS„EQU„$6FKeyboard/screenonVMES10 XTMFP8„EQU„$70MK68901onVME128*$71Donotuse.XTMPC1„EQU„$72Rockwell68560port1onVME050.XTMPC2„EQU„$73Rockwell68560port2onVME050"XTS7A3„EQU„$747201A-sideonVM03"XTS7B3„EQU„$757201B-sideonVM03*XTSIO0„EQU„$76Mostek68564port0onVM04*XTSIO1„EQU„$77Mostek68564port1onVM04+XTZIO0„EQU„$78ZilogZ8530port0onVME117+XTZIO1„EQU„$79ZilogZ8530port1onVME117 *ééééH*‚EquatesforIOSDTP(devicetype);alsoforXRPDTPinchannelcommands.*XDSFDK„EQU„1’FLOPPYDISKXDSRDK„EQU„2’RIGIDDISKXDSACIAƒEQU„3’TERMINALXDSPRT„EQU„4’PRINTERXDSTAPEƒEQU„5’MAGNETICTAPE**#XTGBUS„EQU„$4AIEEE488BUS”IEEE488*$XDSGBUSƒEQU„$4AIEEE488BUS”IEEE4880XDSGDEVƒEQU„$4BIEEE488BUSSABLEDEVICEˆIEEE488*#*‚EquatesforIOSDRC(drivercode).*3IODMPSCƒEQU„1’Asyncterminaldriverfor7201ports.4IODLPRTƒEQU„2’DriverforlocalCentronicsprinteron+*£EXORmacsDEBUGorMVME410onI/Ochannel.3IODSASIƒEQU„3’DriverforSASIdisksonI/Ochannel.8IODWIN„EQU„4’DriverforWinchesterdisksonI/Ochannel.4IODFLP„EQU„5’DriverforFloppydisksonI/Ochannel..IOD315„EQU„6’DriverfordisksonMVME315board/IODMTA„EQU„7’DRIVERFORMAGTAPEONI/OCHANNEL3IODEPCIƒEQU„8’Asyncterminaldriverfor2661ports.-IOD320„EQU„9’DriverfordisksonVME320board7IODUARTƒEQU„$A‘TerminaldriverforlocalportonVME1156IODMFP„EQU„$B‘TerminaldriverforlocalportonVME12X2IODMPCCƒEQU„$C‘TerminaldriverforportsonVME0505IODACIAƒEQU„$D‘TerminaldriverforVME110orEXORmacs5IODSIO„EQU„$E‘TerminaldriverforlocalportsonVM049IODTERMƒEQU„$11Driverforscreen/keyboardonEXORMACS/S.IODIPC„EQU„$20IPCdriver./IODVM22ƒEQU„$21DRIVERFORVM22DISKCONTROLLER,IODGPIBƒEQU„$4AIEEE488busdriver.IEEE488*2*‚BitequatesforIOSATMandIOSATWforterminals.*IOAHCPYƒEQU„0’HARDCOPYIOAXCTLƒEQU„1’XON/XOFFIOABITSƒEQU„2’7BIT/8BITIOASTPBƒEQU„3’STOPBITSIOAUSEPƒEQU„4’PARITYIOAPRTYƒEQU„5’ODD/EVENPARITYIOAECHOƒEQU„6’HALF/FULLDUPLEXIOATAHDƒEQU„7’TYPEAHEAD#IOATFULƒEQU„8’FULLBUFFERTERMINATEIOAPNULƒEQU„9’PASSNULLS#IOAMODMƒEQU„10‘MODEM/DIRECTCONNECTIOAOFFHƒEQU„11‘MODEMOFFHOOK5IOADCD„EQU„12‘NOTIFYBREAKCLAIMEROFDCDTRANSITIONS=IOAAUTOƒEQU„13ŽDOAUTOBAUDRATEDETECTIONONDCDTRANSITIONS9IOATRM„EQU„15DONOTUSE!‚RESERVEDFORINTERNALUSEONLY!*'*‚BitequatesforIOSPRMforterminals.*5 /IOSXOFBƒEQU„4’Parameter#forIOSXOFparameter.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*;*ˆCONFIGURATIONPARAMETERSSPECIFICTOMAGNETICTAPEDRIVES***ŠOFFSETIOSDDC/IOSDEN„DS.Bƒ1’Densityforwritefromloadpoint.*.IOSRDT„DS.Bƒ1’Readtriesbeforeerrormessage.*)IOSWRT„DS.Bƒ1’Writetriesbeforeerasure.*,IOSERT„DS.Bƒ1’Erasuresbeforeerrormessage.*<*‚ThesystemusestheIOSWTOforatimeoutvalueforawrite"*‚andIOSRTOforeverythingelse.:*‚Thisisnotsuitableforthemagtapedriver,sowehave!*‚definedourowntimeoutvalues.*‰Command¡Timeoutvalue*‰-------¡------------- *‰Readšsmallerof‚IOSRDTO/IOSRTO)*‰Spaceforward‘smallerof‚IOSSPTO/IOSRTO)*‰Spacereverse‘smallerof‚IOSSPTO/IOSRTO**‰Write¥IOSWTO)*‰WritefilemarksmallerofIOSWTO/IOSRTO* *‰Erase™smallerof‚IOSWTO/IOSRTO*"*‰Rewind˜smallerof‚IOSRWTO/IOSRTO7*‰Searchforwardforfilemarkƒsmallerof‚IOSSRTO/IOSRTO7*‰Searchreverseforfilemarkƒsmallerof‚IOSSRTO/IOSRTO*.IOSRDTOƒDS.L†1Read,spacetimeoutformagtape*,IOSSPTOƒDS.L†1Spaceforward/reversetimeoutIOSRWTOƒDS.L†1Rewindtimeout2IOSSRTOƒDS.L†1Searchforward/reverseforfilemark *£timeout.0IOSMTSVƒDS.Bƒ8’Reservinganareaforfutureuse.*(ŠDS.Bƒ8’Reservinganareaforfutureuse/IOSMLN„EQU„*’Lengthofdatablockformagtape.*,*‚BitequatesforIOSPRMformagnetictapes.*4IOSDENBƒEQU„4’ParameternumberforIOSDENparameter,IOSRDTBƒEQU„5’etc. IOSWRTBƒEQU„6 IOSERTBƒEQU„7IOSRDTOB‚EQU„8IOSSPTOB‚EQU„9IOSRWTOB‚EQU„10IOSSRTOB‚EQU„11*,*‚BitequatesforIOSATWformagnetictapes.*8IOSELB„EQU„0’Transportdensityselectable/notselectable*2IOSREQBƒEQU„1’Userdoes/doesnotrequesta‚density***$*‚EquatesforIOSTCD(terminalcode)*‚$00-$7F‚reserved*‚$80-$FF‚user-defined*TCDX155ƒEQU„0’EXORterm155.*&*‚BitequatesforIOSATWforprinters.*IOALNFDƒEQU„0’AUTOLINEFEED,IOASNFFƒEQU„1’SUPRESSFORMFEEDAFTERASSIGN3IOATPLLƒEQU„2’TRUNCATEPRINTATLOGICALLINELENGTH*%*‚BitequatesforIOSPRMforprinters*9IOSLRLBƒEQU„4’Parameternumberforlogicalrecordlength.=IOSELCBƒEQU„5ŽParameternumberfortheend-of-linecharacter.** IOS DATA BLOCK STRUCTURE FOR%*‰DISKCONFIGUREANDSTATUSCOMMANDS.*ŠOFFSETIOSDDC1IOSSPT„DS.Bƒ1’PHYSICALSECTORSPERTRACKONMEDIA#IOSHDS„DS.Bƒ1’NO.OFHEADSONDRIVE'IOSTRK„DS.Wƒ1’NO.OFCYLINDERSONMEDIA(IOSILV„DS.Bƒ1’INTERLEAVEFACTORONMEDIA$IOSSOF„DS.Bƒ1’SPIRALOFFSETONMEDIA+IOSPSM„DS.Wƒ1’PHYSICALSECTORSIZEOFMEDIA+IOSSHD„DS.Wƒ1’STARTINGHEADNUMBERONDRIVE+IOSTRKDƒDS.Wƒ1’NUMBEROFCYLINDERSONDRIVE@IOSPCOMƒDS.Wƒ1ŒPRECOMPENSATIONCYLINDER#(usually.5totalcyl)2IOSSPTDƒDS.Bƒ1’PHYSICALSECTORSPERTRACKONDRIVEIOSSR:IOSSRTDƒDS.Bƒ1’STEPPINGRATEIOSRWCC:4IOSEWCCƒDS.Wƒ1’REDUCEDWRITECURRENTCYLINDERNUMBER#IOSECC„DS.Wƒ1’ECCDATABURSTLENGTHIOSDRSVƒDS.Bƒ2’RESERVED+*œTHEABOVERESERVEDBYTESISFORANOFFSET*œTOANOTHERPARAMETERBLOCK)!IOSDLN„EQU„*’LENGTHOFDATABLOCK*4*‚BitequatesforIOSATMandIOSATWfordiskdevices*.IOADDENƒEQU„$0‘MFM/FMencodingmethodonmedia/IOATDENƒEQU„$1‘96/48TPItrackdensityonmedia,IOADSIDE‚EQU„$2‘double/singleSideddiskette-IOAFRMTƒEQU„$3‘MediaFormat(IBMorMotorola),IOARDISC‚EQU„$4‘Rigid/Floppydisk(ordrive)0IOADDEND‚EQU„$5‘MFM/FMdriveencodingcapability0IOATDEND‚EQU„$6‘96/48TPItrackdensityofdrive5IOARIBSƒEQU„$7‘Seekrequiredw/headchangeSMDdrive4IOADPCOM‚EQU„$8‘Postread/pre-writepre-compensation(*¦cylindernumber(ifapre-compensation)*¦cylindernumberissupplied-thisflag&*¦indicatesisitispost-readorpre-"*¦write.Thedefaultispre-write)!IOASIZEƒEQU„$9‘8"/51/4"diskette)IOAALT„EQU„$A‘Alternatesectorcapability*)*‚BitequatesforIOSPRMfordiskdevices*.IOSSPTBƒEQU„$4‘Physicalsectors/trackonmedia5 $IOSHDSBƒEQU„$5‘No.ofheadsondrive(IOSTRKBƒEQU„$6‘No.ofcylindersonmedia)IOSILVBƒEQU„$7‘Interleavefactoronmedia%IOSSOFBƒEQU„$8‘Spiraloffsetonmedia,IOSPSMBƒEQU„$9‘Physicalsectorsizeofmedia,IOSSHDBƒEQU„$A‘Startingheadnumberondrive,IOSTRKDB‚EQU„$B‘Numberofcylindersondrive*IOSPCOMB‚EQU„$C‘precompensationcylinder#/IOSSPTDB‚EQU„$D‘Physicalsectors/trackondriveIOSSRB„EQU„$E‘steppingrate5IOSRWCCB‚EQU„$F‘reducedwritecurrentcylindernumber(*£andEECdataburstlength(eitherboth*£orneitheraredefined)*Ç *ÆIEEE488/*IEEE488BUSCONFIGURATIONPARAMETERS IEEE488 *ÆIEEE488ŠOFFSETIOSDDCIEEE4881IOSEORRƒDS.Lƒ1ŒENDOFRECORDREQUIREMENTSIEEE4886IOSEOSCƒDS.Wƒ1ŒENDOFSTRINGCHAR-WRITE/READ‹IEEE488;IOSPOLCƒDS.Bƒ1ŒPARALLELPOLLCONFIGURATIONREGISTER†IEEE488-IOSPRMAƒDS.Bƒ1ŒDEVICEPRIMARYADDRESS”IEEE488@IOSFBWXƒDS.Lƒ1Œ#OFBYTESFORFIXEDLENGTHWRITE,FMT/IMGIEEE488?IOSFBRXƒDS.Lƒ1Œ#OFBYTESFORFIXEDLENGTHREAD,FMT/IMG‚IEEE4882IOSSAMRƒDS.Lƒ1ŒREADSECONDARYADDRESSMASKIEEE4883IOSSAMWƒDS.Lƒ1ŒWRITESECONDARYADDRESSMASKŽIEEE488-IOSRSVDƒDS.Lƒ2ŒRESERVED‚FORLATERUSE“IEEE488%IOPCUR„EQU„$2000ŽCURRENTPOSITION/='IOPPRV„EQU„$4000ŽPREVIOUS(BACKWARD)/<2IOPRAN„EQU„$6000ŽRANDOM(LRNORLSNGIVEN)/>OR=!IOPTSK„EQU„$8000ŽTASKIDSUPPLIED1IOPMNT„EQU„$0‘MOUNTDISK(CONFIGUREREQUESTONLY)8IOPDMNTƒEQU„$1000ŽDISMOUNTDISK(CONFIGUREREQUESTONLY)ISTAIRPI‚EQU„$DD‰INVALIDREQUESTFORPENDINGINTERRUPT†IEEE4880ISTAIVCB‚EQU„$DE‰INVALIDCOMMANDFORBUS”IEEE4888ISTADXAB‚EQU„$DF‰DATAXFERABORTEDBYCONTROLLERŒIEEE488 *»IEEE488*ISTANR„EQU„$E1DEVICENOTREADYISTADB„EQU„$E2DEVICEBUSYISTACRCƒEQU„$E3DATACRCERROR%ISTAWP„EQU„$E4WRITEPROTECTEDDEVICE*ISTADDMƒEQU„$E5DELETEDDATAMARKDETECTEDISTATO„EQU„$E6TIMEOUT%ISTASA„EQU„$E7INVALIDSECTORADDRESSISTACSMƒEQU„$E8CHECKSUMERROR"ISTARESƒEQU„$E9DISCRESTOREERRORISTADO„EQU„$EADATAOVERRUN$ISTASC„EQU„$EBDEVICESTATUSCHANGED)ISTADMEƒEQU„$ECTRACK/SECTORIDNOTFOUND$ISTAMRKƒEQU„$EDADDR.MARKCRCERRORISTASEKƒEQU„$EESEEKERRORISTABDSƒEQU„$EFBADSECTOR*Ç*ˆCHANNELERRORS±*ÇISTACHNƒEQU„$F1CHANNELBUSY–"ISTADMAƒEQU„$F2CHANNELDMAERROR‘,ISTACDNƒEQU„$F3UNRECOVERABLECHANNELERROR‰ ISTACNTƒEQU„$F4CONTROLLERERROR*ISTACFGƒEQU„$F5DEVICECONFIGURATIONERRORISTABUSƒEQU„$F6DMABUSERROR!ISTAMAPƒEQU„$F7DMAMAPPINGERROR$ISTADMCƒEQU„$F8DMACONTROLLERERROR+ISTAICEƒEQU„$F9INDETERMINATECHANNELERRORŠPAGE*Ç *ˆI/OMACROSµ*Ç*…CALLINGSEQUENCE²!*ˆXXXCALL(ADDR.OFPARAMBLOCK)¡*Ç ŠOFFSET0 FHSCALLƒMACRO ŠIFNCƒ'\1',''IFNCƒ'\1','(A0)'6 &LEA„\1,A0ŽLOADADDRESSOFPARAMBLOCKENDCŠENDCŠTRAPƒ#3‘CALLEXECDIRECTIVEŠENDM*Ç*Ç IOSCALLƒMACRO ŠIFNCƒ'\1',''IFNCƒ'\1','(A0)'&LEA\1,A0‹LOADADDRESSOFPARAMBLOCKENDCŠENDCŠTRAPƒ#2‘CALLEXECDIRECTIVEŠENDM*Ç*ˆIOSPARAMETERBLOCKMACRO¦*ŠCALLINGSEQUENCE­!*XXX(LABEL,PARAM1...,PARAMN)œ*Ç 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’PARTIALKEYLENGTHŠENDC ŠIFNCƒ'\4',''DFC.B‚\4‘PARTIALKEYLENGTHŠENDC ŠIFC„'\5',''"DFC.L‚0’RECORDNO.-KEYPOINTER‹ŠENDC ŠIFNCƒ'\5',''#DFC.L‚\5‘RECORDNO.-KEYPOINTERˆŠENDC ŠIFC„'\6',''DFC.L‚0’BUFFERSTARTADDRESSŠENDC ŠIFNCƒ'\6',''DFC.L‚\6‘BUFFERSTARTADDRESSŠENDC ŠIFC„'\7',''DFC.L‚0’BUFFERENDADDRESSŠENDC ŠIFNCƒ'\7',''DFC.L‚\7‘BUFFERENDADDRESSŠENDCŠDFC.L‚0’LENGTHOFTRANSFER ŠIFC„'\8',''DFC.L‚0’COMPLETIONADDRESS‘ŠENDC ŠIFNCƒ'\8',''DFC.L‚\8‘COMPLETIONADDRESSŠENDCŠENDM*Ç*ˆFHSPARAMETERBLOCKMACRO¦*Ç 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-DEVICEID‘ŠENDC ŠIFNCƒ'\4',''DFC.L‚\4‘VOLUME-DEVICEID’ŠENDCŠDFC.W‚0’USERNUMBER—Š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’WRITECODE˜ŠENDC ŠIFNCƒ'\5',''DFC.B‚\5‘WRITECODE—ŠENDC ŠIFC„'\6',''DFC.B‚0’READCODEšŠENDC ŠIFNCƒ'\6',''DFC.B‚\6‘READCODE™ŠENDC ŠIFC„'\7',''DFC.W‚0’RECORDLENGTH–ŠENDC ŠIFNCƒ'\7',''DFC.W‚\7‘RECORDLENGTH“ŠENDC ŠIFC„'\8',''DFC.L‚0’SIZE/POINTER–ŠENDC ŠIFNCƒ'\8',''DFC.L‚\8‘SIZE/POINTER•ŠENDCŠENDM*Ç*ˆOUTPUTCONSTANTMACROª*Ç DFC‡MACRO ŠDC.\0‚\1ŠENDM*********************** Ending of &.IOE.EQ ***********************éééééé7 ‰PAGE************************** Beginning of &.IOV.EQ ***************************%*‡TABLEOFTASKSCLAIMINGI/OVECTORS* ŠOFFSET0IOVHDR„DS.Lƒ1’!IOV"IOVEND„DS.Lƒ1’ENDOFTABLEADDRESS#IOVENTRƒEQU„*’OFFSETOFFIRSTENTRY* ŠOFFSET0IOVJSR„DS.Wƒ3’JSRCOMNISR ŠOFFSET0IOVVECTƒDS.Wƒ1’VECTORNUMBERIOVTCB„DS.Lƒ1’TCBADDRESSIOVADR„DS.Lƒ1’ISRADDRESS$IOVARG„DS.Lƒ1’ARGUMENTPASSEDTOISRIOVESZ„EQU„*+6SIZEOFENTRY**„CISRPARAMETERBLOCK* ŠOFFSET0CISTSK„DS.Lƒ1’TASKNAMECISSES„DS.Lƒ1’SESSIONCISOPT„DS.Wƒ1’OPTIONSCISVCT„DS.Wƒ1’VECTORNUMBERCISISR„DS.Lƒ1’ISRADDRESS$CISARG„DS.Lƒ1’ARGUMENTPASSEDTOISR*********************** Ending of &.IOV.EQ ***********************éééééØ!‰PAGE************************** Beginning of &.LV5.EQ *************************** *—*********** *—*4/16/82* *—*************4*ˆDATASTRUCTURESANDEQUATESFOREXEC(CHANNEL)I/O**%*ˆEXECI/OPARAMETERBLOCKSTRUCTURES* ŠOFFSET0’STARTWITHZEROOFFSETXIOCOD„DS.Bƒ1’COMMANDCODEXIOSCD„DS.Bƒ1’COMMANDSUB-CODE&ŠDS.Bƒ1’--UPPERBYTEOFOPTIONSWORD!,XIOOPT„DS.Bƒ1’--LOWERBYTEOFOPTIONSWORD!XIOCID„DS.Lƒ1’CHANNELMNEMONICXIOPRM„EQU„*’STARTPARAMETERS*$*ˆALLOCATEPARAMETERBLOCKSTRUCTURE*+ŠOFFSETXIOPRMSTARTWITHPARAMETERSOFFSETXIOCTP„DS.Bƒ1’CHANNELTYPE?XIOMIC„DS.Bƒ1ŒMASKEDINTERRUPTINSTRUCTIONCOUNT(USEDBYCHPI)0XIOSVA„DS.Lƒ1’I/OHANDLERSERVICEVECTORADDRESSAXIOSUP„DS.Lƒ1ŠSUPERVISORCHANNELMNEMONIC(useonlyifoptionbit(*§XOPSUBisset--otherwiseleavethis0)XIOADD„DS.Lƒ1’DEVICEADDRESSXIOMLN„DS.Wƒ1’#OFBYTESACROXIOVNO„DS.Bƒ1’VECTORNUMBERXIOPPR„DS.Bƒ1’POLLINGPRIORITYXIOSPR„DS.Bƒ1’SOFTWAREPRIORITY!XIOPFC„DS.Bƒ1’POLLINGFIELDCOUNTXIOALN„EQU„*’LENGTH**ˆINTERRUPTSEGMENTS* ŠOFFSET0!XIOPOF„DS.Wƒ1’POLLINGBYTEOFFSETXIOMSK„DS.Bƒ1’POLLINGMASK XIOTST„DS.Bƒ1’POLLINGTESTVALUEXIOROF„DS.Wƒ1’RESETOFFSETXIOREV„DS.Bƒ1’RESETVALUEŠDS.Bƒ1’RESERVEDXIOXLN„EQU„*’LENGTH*(*ˆEQUATESFOR'XIOOPT'(8BITS)ALLOCATE*7XOPSHR„EQU„0’Onlysystemtasksmayattachthischannel.%XOPEXC„EQU„1’Reserved(usedbyCHPI).!XOPDIR„EQU„4’Exclusivevectoring.@XOPSUB„EQU„8ŠThischannelistobesubordinatetothesupervisor*§whosemnemonicisinCCBSUP.:XOPSUP„EQU„$10Thischannelistobeasupervisorchannel.;XOPINH„EQU„$20Forinternaluseonly--donotuse(4.3SJF).*"*ˆATTACHPARAMETERBLOCKSTRUCTURE*+ŠOFFSETXIOPRMSTARTWITHPARAMETERSOFFSE7 T XIOKEY„DS.Bƒ1’USERGENERATEDKEY%XIOSLN„DS.Bƒ1’LENGTHOFSTATUSRETURNXIOVAD„DS.Lƒ1’VECTORADDRESSXIOTOC„DS.Wƒ1’TIMEOUTCOUNTXIORET„DS.Wƒ1’RETRYCOUNT*&*ˆEQUATESFOR'XIOOPT'(8BITS)ATTACH*XOPWUP„EQU„0’ISSUEWAKE-UPáHêFòAúB XOPASQ„EQU„1’ISSUEASQINTERRUPTXOPPRO„EQU„0’I/OANDPROCEEDXOPWAT„EQU„2’I/OANDWAIT$XOPSRV„EQU„3’SERVICEVECTORSUPPLIED*&*ˆEQUATESFOR'XIOOPT'(8BITS)DETACH*$XOPONE„EQU„0’DETACHONLYONECHANNEL XOPALL„EQU„1’DETACHALLCHANNELS*(*ˆINITIATEI/OPARAMETERBLOCKSTRUCTURE*+ŠOFFSETXIOPRMSTARTWITHPARAMETERSOFFSETXIOTSK„DS.Lƒ1’TASKID!XIOSES„DS.Lƒ1’TASKSESSIONNUMBER XIOCHN„EQU„*$*ˆNON-STANDARDCHANNELUNIQUEFIELDS"XIOSAD„DS.Lƒ1’STARTBUFFERADDRESSXIOBLN„DS.Lƒ1’LENGTHOFBUFFER'XIOBOF„DS.Lƒ1’ADDRESSOFBUFFERPOINTER&XIOCAD„DS.Lƒ1’COMMANDSEQUENCEADDRESS(XIOCLN„DS.Wƒ1’LENGTHOFCOMMANDSEQUENCEXIOCOF„DS.Wƒ1’COMMANDOFFSET%XIOTAD„DS.Lƒ1’TRANSIENTSPACEADDRESS'XIOTLN„DS.Wƒ1’LENGTHOFTRANSIENTSPACE#XIORTN„DS.Lƒ1’RETURNSTATUSPOINTERXIOILN„EQU„*’LENGTH *ˆSTANDARDCHANNELUNIQUEFIELDSŠOFFSETXIOCHN,XIOUID„DS.Lƒ1’USERSUPPLIEDID(DCBPOINTER)*XIOCPK„DS.Lƒ1’STARTCOMMANDPACKETADDRESSXIOPLN„DS.Wƒ1’PACKETLENGTHXIONLN„EQU„*’PBLENGTH*,*ˆEQUATESFOR'XIOOPT'(8BITS)INITIATEI/O*"XOPDCP„EQU„0’DRIVERCOMMANDPACKET%XOPRCP„EQU„1’REQUESTORCOMMANDPACKET** CMR TRAP 1 EXEC ERROR CODES*%XSTMNO„EQU„$0BCHANNELMNEMONICERROR**ˆINIT.I/OSUBCODES*XDSCMD„EQU„0’INITIATEI/OXDREST„EQU„1’RESETXDHALT„EQU„2’HALTIOXDRESB„EQU„3’RESUBMITSEQUENCE*+*ˆEQUATESFORRETURNSTATUS(D0ANDXRSSTA)*-XSTNAT„EQU„$81CHANNELNOTATTACHEDTOCALLER/XSTAAT„EQU„$82CHANNELATTACHEDTOANOTHERTASKXSTOFF„EQU„$83CHANNELOFF-LINEXSTBSY„EQU„$84CHANNELBUSY1XSTINV„EQU„$85INVALIDCALLFORTHISCHANNELTYPE**XSTCPS„EQU„$91COMMANDPACKETSTRUC.ERROR#XSTCME„EQU„$92CHANNELMARKEDERROR"XSTADS„EQU„$93BUFFERLENGTHERROR!XSTADB„EQU„$94BASEADDRESSERROR*)XSTSMB„EQU„$A1SHAREDMEMORYBUSY(FATAL)!XSTUAN„EQU„$A2UNEXPECTEDACK/NAKXSTMAN„EQU„$A3MISSINGACK/NAK%XSTSYN„EQU„$A4IPCACK/NAKSYNCERROR%XSTBCM„EQU„$A5BADCMDCOUNTEXCEEDED"XSTSHM„EQU„$A7SHAREDMEMORYERROR*+XSTRNG„EQU„$B1COMMANDSEQUENCERANGEERROR&XSTIBB„EQU„$B2ILLEGALBACKWARDBRANCH&XSTIOP„EQU„$B3ILLEGALCOMMANDOP-CODE(XSTHLT„EQU„$B4I/OCOMMANDSEQUENCEHALT0XSTSDA„EQU„$B5SOURCEFIELDDEVICEADDRESSERROR0XSTSBA„EQU„$B6SOURCEFIELDBUFFERADDRESSERROR2XSTSTA„EQU„$B7SOURCEFIELDTRANSIENTADDRESSERRO/XSTDDA„EQU„$B8DEST.FIELDDEVICEADDRESSERROR/XSTDBA„EQU„$B9DEST.FIELDBUFFERADDRESSERROR2XSTDTA„EQU„$BADEST.FIELDTRANSIENTADDRESSERROR*XSTSES„EQU„$C6BADSESSIONCODE!XSTBUF„EQU„$C7BADBUFFERADDRESS XSTBLN„EQU„$C8BADBUFFERLENGTH!XSTCAD„EQU„$C9CHANNELADR.ERROR*.*ˆDATASTRUCTUREFORNON-STANDARDRETURNEVENT*"ŠOFFSET0’STARTWITHVARIABLEDATAŠDS.Bƒ1’EVENTLENGTHŠDS.Bƒ1’EVENTCODEXRSSTA„DS.Bƒ1’STATUSCODEXRSKEY„DS.Bƒ1’CHANNELKEY!XRSPTR„DS.Wƒ1’LASTCOMMANDNUMBERXRSLEN„EQU„*’LENGTH*1*ˆDATASTRUCTUREFORTYPE(70,71,FF)RETURNEVENT*"ŠOFFSET0’STARTWITHVARIABLEDATAŠDS.Bƒ1’EVENTLENGTHŠDS.Bƒ1’EVENTCODEXRPSTA„DS.Bƒ1’EVENTTYPEXRPKEY„DS.Bƒ1’CHANNELKEY(XRPUID„DS.Lƒ1’USERSUPPLIEDID(DCBPTR)XRPSTV„DS.Wƒ1’STATUSVALUEXRPPRM„EQU„*’STATUSPARAMETERS**ˆEQUATESFOR'XRPSTA'(8BITS)*XPSNRM„EQU„$70NORMALRETURNXPSHLT„EQU„$71HALT/ABORT'XPSUNS„EQU„$80UNSOLICITEDDEVICEEVENT(XPSUNR„EQU„$FFUNSOLICITEDCHANNELEVENT**ˆEQUATESFOR'XRPSTV'**XSTVABTƒEQU„0’INVALITHALTCOMMAND(ABORT)XSTVDSTƒEQU„0’DEVICESTATUS)XSTVNIDƒEQU„1’DEVICESTATUS(NOIDGIVEN)XSTVRSET‚EQU„0’CHANNELRESETXSTVDWNƒEQU„8 $FFCHANNELDOWN*G*‚RemainderofeventifXRPSTA=$80andXRPSTV=0.‚ThisistheformatforH*‚anunsolicitedeventifINITIATEI/Ocommandshavebeendoneandhence*‚thedeviceIDisknown.*+ŠOFFSETXRPPRMSTARTWITHPACKETPARAMETERSXRPDST„DS.Bƒ1’DEVICESTATUSXRPDTP„DS.Bƒ1’DEVICETYPEXRPLEN„EQU„*’LENGTH*C*‚RemainderofeventifXRPSTA=$80andXRPSTV=1.‚ThisistheformatJ*‚foranunsolicitedeventifnoINITIATEI/Ocommandshavebeendoneyet.*ŠOFFSETXRPLENXRPDNO„DS.Bƒ1’DEVICENUMBERŠDS.Bƒ1’RESERVEDXRP1LENƒEQU„*’LENGTH*!*ˆCHANNELCOMMANDDIRECTIVECODES*XDCALL„EQU„1’ALLOCATEXDDELT„EQU„2’DELETEXDATCH„EQU„3’ATTACHXDDTCH„EQU„4’DETACHXDONLN„EQU„5’MARKONLINEXDOFLN„EQU„6’MARKOFFLINEXDINIT„EQU„7’INITIATEI/O*"*ˆDIRECTIVENUMBERFORCHANNELI/O*XCAIO…EQU„60‘ARBITRARYI/OCODE$XCCMR…EQU„60‘CHANNELMANAGEMENTCODE*-*ˆDATASTRUCTUREFORCHANNELDATABLOCK(CDB)* ŠOFFSET0XCDBPTRƒDS.Lƒ1’NEXTPOINTER2XCDBOPTƒDS.Wƒ1’OPTIONSTOUSEINALLOCATECOMMAND.XCDBAIDƒDS.Lƒ1’ASCIIIDENTIFIER%XCDBPRMƒDS.BƒXIOALN-XIOPRM†PARAMETERS*'*ˆDRIVERTRANSIENTSPACEDATASTRUCTURE* ŠOFFSET0’STARTWITHZEROOFFSETZSTAT…DS.Lƒ1’DEVICESTATUSZOPT†DS.Lƒ1’I/OOPTIONSZDOPT…DS.Lƒ1’DRIVEROPTIONS!ZRLEN…DS.Lƒ1’DEVICERECORDLENGTHZBCNT…DS.Lƒ1’BUFFERCOUNTER$ZBPTR…DS.Lƒ1’BUFFERRELATIVEPOINTERZEOLC…DS.Lƒ1’ENDOFLINECHAR.ZCRNUL„DS.Lƒ1’CRNULLCOUNT%ZSBITS„DS.Lƒ1’PROGRAMBYTEFORDEVICE!ZBAL†DS.Lƒ1’BRANCHANDLINKVALUEZNCNT…DS.Lƒ1’NULLPADCOUNTER ZBUF†DS.Lƒ1’TEMP.STORAGEBUFFER"ZMODE1„DS.Lƒ1’2661MODEREGISTER1"ZMODE2„DS.Lƒ1’2661MODEREGISTER2 TSPACE„EQU„**,*ˆDRIVERCHANNELCONTROLAREADATASTRUCTURE* ŠOFFSET0’STARTWITHZEROOFFSETZCID†DS.Lƒ1’CHANNELMNEMONICZSTW†DS.Wƒ1’STATEWORDZKEY†DS.Bƒ1’CHANNELKEYZRSET…DS.Bƒ1’RESETFLAG!ZBSAD…DS.Lƒ1’STARTBUFFERADDRESS$ZTSAD…DS.Lƒ1’TRANSIENTSPACEADDRESSZPTR†DS.Lƒ1’POINTERZLEN†EQU„*’LENGTH**ˆZSTW(STATEWORD)VALUES*$*’-1=TERMINATION(NOTHINGPENDING)*“0=NOTACTIVE*“1=I/OINPROGRESS*********************** Ending of &.LV5.EQ ***********************é‰PAGE****************************** Beginning of &.M300DRV.EQ ******************************)ŠTTL„M300DRV(GPIB)…DRIVER-GPIBEQUATES*>*…THISEQUATETABLECONTAINSALLINFORMATIONPERTAININGTOTHE?*ƒGPIBI/ODRIVERFORTHEVERSADOS4.0ANDABOVEI/OSCHEME.IT>*ƒCONTAINSINTERNALHARDWAREEQUATES,CCBSTORAGEALLOCATIONS,>*ƒANDENTRIESSPECIFICTOTHEOPERATIONANDMAINTENANCEOFTHE*ƒIEEE-488BUS.*E********************************************************************* *žHISTORYž*E**********************************************************************(*…24JAN83…STEVEFEITELSON/CHRISMARRINC*ƒINITIALEQUATEFILE.EQUATESAREBROKENOUTFROMTHEMAINSOURCE.@*ƒALLGENERALSYSTEMEQUATESFORTHEDRIVERDEFINEDTHUSFARARE *ƒPRESENT.*ŠPAGEE**********************************************************************E**********************************************************************@*‚THEFOLLOWINGDEFINESTHEQUEUINGSTRUCTUREANDTHEASSOCIATED;*‚POINTERSFORHANDLINGCOMMANDFLOWFORTHISCHANNEL.ONLYB*‚ONEQUEUEENTRYPERDEVICECONNECTEDTOTHISCHANNELISALLOWED.?*‚THEREFORETHEMAXIMUMNUMBEROFQUEUEDENTRIESIS15(ONEFORD*‚EACHDEVICE).THEQHEADPOINTERISAPOINTERTOTHENEXTAVAILABLE<*‚QUEUEENTRYLOCATIONANDQTAILISAPOINTERTOTHECURRENT*‚OPERATIONBEINGEXECUTED.*%*ˆEACHENTRYCONSISTSOFSEVENITEMS:**Œ(1)COMMANDSTATUS*Œ(2)DCBPOINTER*Œ(3)IOSPBPOINTER%*Œ(4)PRIMARYBUFFERPHYSICALADDRESS5*Œ(5)SECO8 NDARY/CONFIGURATIONBUFFER‚PHYSICALADDRESS*Œ(6)PRIMARYBUFFERLENGTH*Œ(7)SECONDARYBUFFERLENGTH*3*ˆIFQTAILANDQHEADAREEQUAL,THEQUEUEISEMPTY.*E********************************************************************* * *‚OFFSETSWITHINA'GPIBQ'ENTRY* ŠOFFSET06CSTQOFST‚DS.Wƒ1’FIRST‚ENTRYISCOMMANDSTATUSOFENTRY+DCBQOFST‚DS.Lƒ1’SECONDENTRYISDCBPOINTER,IPBQOFST‚DS.Lƒ1’THIRD‚ENTRYISIOSPBPOINTER***************************************************************3*ˆTHEFOLLOWINGAREEQUATESTHATBREAKDOWNSOMEOF9*„THECONFIGURATIONPARAMETERSINTOTHEIRINDIVIDUALBYTE*„ORWORDMEANINGS.*@**************************************************************** *@*‚BREAKDOWNEQUATESOF'IOSEORR'-ENDOFRECORDCHARACTERISTICS*'WEORFMTƒEQU„IOSEORRŒWRITEEORFORMATTED%WEORIMGƒEQU„IOSEORR+1ŠWRITEEORIMAGE(REORFMTƒEQU„IOSEORR+2ŠREADEORFORMATTED$REORIMGƒEQU„IOSEORR+3ŠREADEORIMAGE*;*‚BREADOWNEQUATESFOR'IOSEOSC'-ENDOFSTRINGCHARACTERS*,IOSEOSWƒEQU„IOSEOSCŒENDOFSTRINGWRITECHAR-IOSEOSRƒEQU„IOSEOSC+1ŠENDOFSTRINGREADCHAR*5*‚BREAKDOWNEQUATESFORFIXEDTRANSFERLENGTH-WRITE*2IOSFBWFƒEQU„IOSFBWXŒFIXEDLENGTHWRITE-FORMATTED0IOSFBWIƒEQU„IOSFBWX+2ŠFIXEDLENGTHWRITE-IMAGE*4*‚BREAKDOWNEQUATESFORFIXEDTRANSFERLENGTH-READ*1IOSFBRFƒEQU„IOSFBRXŒFIXEDLENGTHREAD-FORMATTED/IOSFBRIƒEQU„IOSFBRX+2ŠFIXEDLENGTHREAD-IMAGE 2MAXDEVNM‚EQU„14‘MAXIMUMDEVICENUMBERONACHANNELŠPAGEF************************************************************************”MVME-300REGISTERDEFINITION*F***********************************************************************H*‚THEFOLLOWINGARETHERELATIVEOFFSETSOFTHE32WORDGPIBCREGISTERS.B*‚THEEQUATESARESETUPSUCHTHATTHEYACCESSTHEODDBYTEOFTHE*‚THEWORDOFFSET.*#MARLSB„EQU„1’LSBOFMEMORYADDRREG&MARISB„EQU„3’INTERMEDIATEMEMADDRREGMARMSB„EQU„5’MSBMEMADDRREG)BCNTLSBƒEQU„7’DMATRANSFERBYTECOUNTLSB)BCNTMSBƒEQU„9’DMATRANSFERBYTECOUNTMSB%GPIBRSET‚EQU„11‘RESETGPIBCINTERFACE!ADDRMODƒEQU„13‘ADDRMODEREGISTER)CNTRSTAT‚EQU„15‘INTERFACESTATUSREGISTER*#RELCNT„EQU„17‘BUSRELEASECOUNTREG!EOSCOMPƒEQU„19‘EOSCOMPCHARACTER&UNICMD„EQU„21‘UNILINECOMMANDREGISTERFIFODATƒEQU„23‘FIFODATAREG* INTR0…EQU„33‘TMS9914AINTRREG0 INTR1…EQU„35‘TMS9914AINTRREG1ADDRSTAT‚EQU„37‘ADDRSTATUSREG$BUSSTATƒEQU„39‘BUSSTATUSREG(READ)+AUXCMD„EQU„39‘AUXILIARYCOMMANDREG(WRITE)ADDRREGƒEQU„41‘ADDRSWITCHREGSERLPOLL‚EQU„43‘SERIALPOLLREG,CMDPTHRU‚EQU„45‘COMMANDPASSTHRUREG(READ))PARLPOLL‚EQU„45‘PARALLELPOLLREG(WRITE)DATAIO„EQU„47‘DATAI/OREG*-CONTREG0‚EQU„49‘VBIMCONTROLREG0(TMS9914A)1CONTREG1‚EQU„51‘VBIMCONTROLREG1(I/OCOMPLETE).CONTREG2‚EQU„53‘VBIMCONTROLREG2(BUSERROR)-CONTREG3‚EQU„55‘VBIMCONTROLREG3(NOTUSED)VECTREG0‚EQU„57‘INTRVECTOR1VECTREG1‚EQU„59‘INTRVECTOR2VECTREG2‚EQU„61‘INTRVECTOR3VECTREG3‚EQU„63‘INTRVECTOR4ŠPAGE*5*„EQUATESFORTHEMVME-300STATUS'CNTRSTAT'REGISTER*FIEMP…EQU„0’FIFOEMPTY8EODONE„EQU„1’EOI/EOSHASBEENDETECTEDUPONI/OCOMP9 LETEFIFUL…EQU„2’FIFOFULL$BCRDN…EQU„3’BYTECOUNTREGISTERDONE%GPIBFAIL‚EQU„4’GPIBFAILURELEDISON&BUSDMAER‚EQU„5’GPIBDMAERROROCCURRED*<*„EQUATESFORTHEMVME-300UNILINE'UNICMD'COMMANDREGISTER*"DMAWRITE‚EQU„0’DMAWRITEOPERATIONEOSBIT„EQU„1’EOSBITENABLE DMAREADƒEQU„2’DMAREADOPERATIONEOIBIT„EQU„3’EOIBITENABLE)FAILON„EQU„4’LITEFAILLEDONFRONTPANEL$RSTDMA„EQU„5’HALTDMAIFINPROGRESS*2*‚BITEQUATESFORTHETMS-9914'ADDRSTAT'REGISTER*#TADS_B„EQU„1’TALKERADDRESSEDSTATE%LADS_B„EQU„2’LISTENERADDRESSEDSTATE6TPAS_B„EQU„3’TALKERPRIMARYADDRESSEDSTATE(SECADDR)8LPAS_B„EQU„4’LISTENERPRIMARYADDRESSEDSTATE(SECADDR)ATN_B…EQU„5’ATTENTIONLINELLO_B…EQU„6’LOCALLOCKOUTSTATEREM_B…EQU„7’REMOTESTATE**‚EQUATESWITHIN'BUSSTAT'*BUSREN„EQU„0’REMOTEENABLELINE!BUSIFC„EQU„1’INTERFACECLEARLINE!BUSSRQ„EQU„2’SERVICEREQUESTLINE!BUSEOI„EQU„3’ENDORIDENTIFYLINE%BUSNRFDƒEQU„4’NOTREADYFORDATALINE$BUSNDACƒEQU„5’NOTDATAACCEPTEDLINEBUSDAV„EQU„6’DATAVALIDLINEBUSATN„EQU„7’ATTENTIONLINEŠPAGE*!*†TMS9914AINTERRUPTMASKEQUATES@*†THESEBITSCORRESPONDTO`INTR0'AND'INTR1'TMS9914REGISTERS*-INT0BITƒEQU„15‘INTERRRUPTMASKREGISTER0BIT-INT1BITƒEQU„14‘INTERRRUPTMASKREGISTER1BIT"BIBIT…EQU„13‘BYTEININTERRUPTBITBOBIT…EQU„12‘BYTEOUTBITENDBIT„EQU„11‘ENDBIT+SPASBITƒEQU„10‘SERIALPOLLACTIVESTATEBIT$RLCBIT„EQU„9’REMOTE/LOCALCHANGEBIT"MACBIT„EQU„8’MYADDRESSCHANGEBIT"GETBIT„EQU„7’GROUPEXECUTETRIGGERERRBIT„EQU„6’ERRORBIT+UCGBIT„EQU„5’UNRECOGNIZEDCOMMANDGROUPBIT"APTBIT„EQU„4’ADDRESSPASSTHRUBIT+DCASBITƒEQU„3’DEVICECLEARACTIVESTATEBITMABIT…EQU„2’MYADDRESSBIT SRQBIT„EQU„1’SERVICEREQUESTBIT IFCBIT„EQU„0’INTERFACECLEARBIT *5*‚EQUATESFOR'CONTREG0-CONTREG4'INTERRUPTENABLES*)VBIMENAB‚EQU„4’ENABLEBITFOREACHVECTOR*3TMSINT„EQU„VBIMENAB+24ˆENABLEBITFORTMS9914AINTR7IOCINT„EQU„VBIMENAB+16ˆENABLEBITFORI/OCOMPLETEINTR5BUSERINT‚EQU„VBIMENAB+8‰ENABLEBITFORBUSERRORINTR %CRˆEQU„$0DCARRIAGERETURNTERMINATORLFˆEQU„$0ALINEFEEDTERMINATOR,MAXFIFOƒEQU„1024MAXIMUMSIZEOFFIFOBUFFER ŠPAGE*+*ˆGPIBASYNCHRONOUSINTERRUPTEVENTMESSAGE* ŠOFFSET0AILEN…DS.Bƒ1’EVENTLENGTHAIEC†DS.Bƒ1’EVENTCODEAIDVID„DS.Lƒ1’DEVICEI.D.&AIEVTYPƒDS.Bƒ1’ASYNCHRONOUSEVENTTYPE)AIEVSTAT‚DS.Bƒ1’ASYNCHRONOUSEVENTSTATUSAILNG…EQU„*’EVENTLENGTH* *‚EVENTCODES*!IOEVCD„EQU„1’NORMALEVENTSTOIOS,AIEVCD„EQU„9’ASYNCHRONOUSEVENTCODETOTASK*+*‚ASYNCHRONOUSINTERRUPTEVENTTYPEEQUATES**SRQTYPEƒEQU„$01SERVICEREQUESTDCLTYPEƒEQU„$02DEVICECLEAR#RLCTYPEƒEQU„$03REMOTE/LOCALCHANGETCTTYPEƒEQU„$04TAKECONTROL%GETTYPEƒEQU„$05GROUPEXECUTETRIGGERIFCTYPEƒEQU„$06INTERFACECLEAR'IOPTYPEƒEQU„$07INTRPLEVELI/OPENDING*ŠPAGE*;*‚GPIBCODE/FUNCTIONEQUATESFORALLLEVEL40GPIBCOMMANDS*%IOCODO„EQU„$4010ŽCOMMANDOUT/DATAOUT$IOCODI„EQU„$4011ŽCOMMANDOUT/DATAINIOCMDO„EQU„$4012ŽCOMMANDOUTIORSEC„EQU„$4020ŽREADSECONDARY IOWSEC„EQU„$4021ŽWRITESECONDARY)IOPPU…EQU„$4030ŽPARALLELPOLLUNCONFIGURE'IOPPC…EQU„$4031ŽPARALLELPOLLCONFIGURE&IOPPOL„EQU„$4032ŽCONDUCTPARALLELPOLL)IOSPPS„EQU„$4033ŽSETPARALLELPOLLSTATUS'IOSSPS„EQU„$4034ŽSETSERIALPOLLSTATUS$IOSPOL„EQU„$4035ŽCONDUCTSERIALPOLL%IOPPD…EQU„$4036ŽPARALLELPOLLDISABLE IOSIFC„EQU„$4040ŽINTERFACECLEARIOSREN„EQU„$4041ŽREMOTEENABLEIOCREN„EQU„$4042ŽREMOTEDISABLE"IOSDCL„EQU„$4044ŽCLEARALLDEVICES,IOSSDC„EQU„$4045ŽCLEARALLLISTENINGDEVICESIOSLLO„EQU„$4046ŽLOCALLOCKOUTIOPCTL„EQU„$4047ŽPASSCONTROL&IOSGTL„EQU„$4048ŽLISTENERSGOTOLOCAL"IOSGET„EQU„$4049ŽLISTENERSTRIGGER+IOABT1„EQU„$404AŽINTERFACEANDDEVICECLEAR$IOABT2„EQU„$404BŽUNTALKANDUNLISTENIOTCTL„EQU„$404CŽTAKECONTROL IORQCL„EQU„$404DŽREQUESTCONTROL IORLCL„EQU„$404EŽRELEASECONTROLIOGTS…EQU„$404FŽGOTOSTANDBY'IODSDC„EQU„$4050ŽSPECIFIEDCLEARDEVICE(IODREM„EQU„$4051ŽSPECIFIEDREMOTEDEVICE)IODGET„EQU„$4052ŽSPECIFIEDTRIGG: ERDEVICE&IODGTL„EQU„$4053ŽSPECIFIEDGOTOLOCAL,ŠTTL„GPIBDRIVER-GPIBEQUATES(MENUITEMS)ŠPAGEA******************************************************************"*ŒGPIBCMENUITEMFUNCTIONEQUATES*/*†THESEEQUATESAREUSEDTOINDEXINTOTHEMENU6*†ROUTINEPROCESSORTABLE(MENUCTBL).ATTHATINDEXIN3*†THETABLEISTHEADDRESSOFTHEROUTINETHATWILL0*†PERFORMTHEFUNCTIONORSETOFFUNCTIONS.NOTE-*†THATTHESEEQUATESARENOTTHEVALUEOFTHE*†ACTUALGPIBCCOMMANDS*A******************************************************************7*ˆCLASSIMENUITEMS:‚GENERATEINTERRUPTSWHENEXECUTED*2END‡EQU„0’ENDOFMENUCODE(SPECIALCASEFUNCTION)UNT‡EQU„1’UNTALKCODEUNL‡EQU„2’UNLISTENCODE LAG‡EQU„3’PRIMARYLISTENADDRESSOTA‡EQU„4’PRIMARYTALKADDRESSOSA‡EQU„5’SECONDARYR/WADDRESS#PPU‡EQU„6’PARALLELPOLLUNCONFIGURE!PPC‡EQU„7’PARALLELPOLLCONFIGUREPPE‡EQU„8’PARALLELPOLLENABLEPPD‡EQU„9’PARALLELPOLLDISABLESPE‡EQU„10‘SERIALPOLLENABLESPD‡EQU„11‘SERIALPOLLDISABLEDCL‡EQU„12‘DEVICECLEARLLO‡EQU„13‘LOCALLOCKOUTTCT‡EQU„14‘TAKECONTROL!SDC‡EQU„15‘SELECTIVEDEVICECLEARGTL‡EQU„16‘GOTOLOCAL GET‡EQU„17‘GROUPEXECUTETRIGGER(AUX‡EQU„18‘SENDAUXILIARYCOMMANDSTRING)INˆEQU„19‘INITIATEDMAWRITE(INPUTDATA)*OUT‡EQU„20‘INITIATEDMAREAD(OUTPUTDATA)6TERM†EQU„21‘SENDTERMINATIONCHARACTERS(IFNECESSARY)#SPB‡EQU„22‘RECEIVESERIALPOLLBYTE#SEOI†EQU„23‘SENDEOIWITHLASTBYTE*;*ˆNOTE:…ALLMENUITEMSGREATERINVALUETHAN'AUXTYPE'WILL5*’CAUSETHEMENUITEMFOLLOWINGTOBEEXECUTEDIMMED-7*’IATELYSINCETHESEDONOTCAUSEAHARDWAREINTERRUPT.*:*ˆCLASSIIMENUITEMS:AUXILIARYCOMMANDSTOTHETMS-9914A2*œ(NOINTERRUPTSAREEXPECTEDFROMTHESECOMMANDS)*-AUXTYPEƒEQU„24‘GENERALAUXILIARYCOMMANDCODE9*’(TMS9914AAUXILLIARYCOMMANDFOLLOWS'AUXTYPE'INMENU)*<*ˆCLASSIIIMENUITEMS:FUNCTIONCOMMANDS-THESEPROCESSORS2*EXECUTETOCOMPLETIONANDGENERATENOINTERRUPT.*)FSIC†EQU„25‘SENDINTERFACECLEARFUNCTION*FRPP†EQU„26‘REQUESTPARALLELPOLLFUNCTION.FRELCTLƒEQU„27‘RELEASECONTROLOFBUSFUNCTION+FTAKCTLƒEQU„28‘TAKECONTROLOFBUSFUNCTION.FREQCTLƒEQU„29‘REQUESTCONTROLOFBUSFUNCTION.FREQSTAT‚EQU„30‘REQUESTDEVICESTATUSFUNCTION)FCNFGDEV‚EQU„31‘CONFIGUREDEVICEFUNCTION5FCHDEFLT‚EQU„32‘CHANGEDEFAULTCONFIGURATIONFUNCTION/FSETPP„EQU„33‘SETPARALLELPOLLSTATUSFUNCTION-FSETSP„EQU„34‘SETSERIALPOLLSTATUSFUNCTIONFGTS†EQU„35‘GOTOSTANDBY*ŠPAGE*(*ƒBITEQUATESTOTESTVALUESINVALPARTB*BVALTALK‚EQU„0’TALKERABILITYBVALLIST‚EQU„1’LISTENERABILITY BVALCTLƒEQU„2’CONTROLLERABILITY(BVALSCTL‚EQU„3’SYSTEMCONTROLLERABILITYBVALSRQƒEQU„4’SRQABILITYBVALPBUF‚EQU„5’PRIMARYBUFFERBVALSBUF‚EQU„6’SECONDARYBUFFER#BVALCBUF‚EQU„7’CONFIGURATIONBUFFER*BVALTMOD‚EQU„8’TALKERMODEBVALLMOD‚EQU„9’LISTENERMODEBVALCMOD‚EQU„10‘CONTROLLERMODE,BVALBTLM‚EQU„11‘IFBUSTHENMUSTBET/LMODE$BVALBDEV‚EQU„12‘BUSSABLEDEVICEONLYBVALBUSƒEQU„13‘CONTROLBUS!BVALSADR‚EQU„14‘SECONDARYADDRESS BVALBCHG‚EQU„15‘INCHARGEOFBUS*#*ƒEQUATESFORENTRIESIN'VALPARTB'*6VALTALKƒEQU„1<VALBDEVƒEQU„1< uptscommandwas+*£issuedforoneormorechannelsthatwere+*£alreadyintherequestedstate.Thiscode&*£isonlyonewherecommandprocessing-*£continuesaftertheerrorisdetected.Thus-*£thiscodemaybeinterpretedasanerroror±8º7Â8Ê$*£warningattheoptionoftheuser.ŠSPC„29INPAOPNƒEQU„$FE’OneormorechannelsspecifiedinanOpen**£Channelscommandarealreadyassignedto+*£requestingtask.Achannelmustbeclosed**£beforeanewopencommandcanbeissued.ŠSPC„28INPDUPLƒEQU„$FD’Duplicatechannelnumberswerespecified+*£inanOpenChannelscommand.Eachchannel+*£numbermayonlybespecifiedonceineach*£commandparameterblock.ŠSPC„2G*ƒThefollowingequatesdefinethecommandcodesthatareplacedintheF* 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’ThisistheOpenChannelsCommandcode.ŠSPC„26INCLOS„EQU„$02’ThisistheCloseAllChannelsorClose!*£SelectedChannelsCommandcode.ŠSPC„24INSTAT„EQU„$05’ThisistheReadInputStatusCommand*£codeŠSPC„24INENAB„EQU„$06’ThisistheEnableInterruptsCommand*£code.ŠSPC„25INDSAB„EQU„$07’ThisistheDisableInterruptsCommand*£code.ŠPAGEF*ƒThefollowingoffsetsdefinetheformatoftheStandardInputDriverL* Parameter Block used for the following commands: Close All Channels, CloseF* Selected Channels, Read Input Status, Enable Interrupts, and Disable * Interrupts.ŠSPC„2 ŠOFFSET06CMDSTA„DS.Wƒ1”Thisfieldcontainsan8-bitstatuscode(*£thatisreturnedbythedrivercommand+*£handleruponcompletionofthecommandor,*£whenanerrorconditionhasbeendetected.+*£WiththeexecptionofstatuscodeINPINTR)*£($FF)describedabove,anon-zerovalue+*£returnedinthisfieldmeansanerrorwas%*£detectedintheIPBandnoneofthe#*£requestedcommandoperationswere *£performed.ŠSPC„22CMDCOD„DS.Wƒ1”ThisfieldcontainsoneoftheInput'*£ModuleDriverCommandcodesdescribed *£earlier.ŠSPC„21CMDCHM„DS.Wƒ1”Thisfieldcontainsabitmaskthat+*£identifiesthechannelstobeaffectedby%*£thecommand.Bits0-7correspondto'*£channels0-7oftheinputmodule.All)*£channelscorrespondingtosetmaskbits,*£willbeaffectedbythecommand.Maskbits**£8-16arereservedandmustallbeclear.ŠSPC„21CMDLEN„EQU„*”ThisisthestandardIPBlengththat%*£appliestoallcommandsexceptOpen"*£ChannelsandCloseAllChannels.ŠPAGEG*ƒThefollowingoffsetsdefinetheformatoftheOpenChannelscommand.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*beopened.‚Whenaninterruptchannel(0-3)isbeingopened,thedatablockK* 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ŠOFFSETCMDCHMTheCommandStatusandCommandCode-*£fieldsoftheOpenChannelsCommandarethe'*£sameasspecifiedinthestandardIPB *£format.ŠSPC„25CMDNCO„DS.Wƒ1”Thisfieldcontainsthenumberofinput+*£channelstobeopenbythiscommand.This$*£valuemustbeintherangeof1-8.ŠSPC„24CMDCHL„EQU„*”Thisisthestartingoffsetofthelist+*£ofdatablocksspecifyingthechannelsto *£beopened.ŠPAGEK*‚Thefollowingoffsetsdefinetheformatofeachdatablockinthelistof* channels to open.ŠSPC„2 ŠOFFSET02OPNCHN„DS.Wƒ1”Thisfieldcontainsthenumberofan)*£inputchanneltobeopened.Thisnumber*£mustbeintherange> 1-8.ŠSPC„24OPNCFG„DS.Wƒ1”Thisfieldspecifieshowtheinterrupt+*£channelbeingopenedistobeconfigured.)*£Thisfieldisignoredfornon-interrupt-*£channels.Thisfieldisbrokenintoseveral*£sub-fieldsasfollows:**¦Bit(s)‚Function**§0†Reserved(mustbezero)**§1=1‚DisableInterrupts*«0‚EnableInterrupts*#*§2=1‚Interruptondeenergizedto*°energizedtransition*«0‚Interruptonenergizedto*°deenergizedtransition*(*§3=1‚WAKEUPtaskonchannelinterrupt!*«0‚Queueaneventtothetaskon*®channelinterrupt**§5-7„Reserved(mustbezero)*&*§8-14ƒLengthofthesoftwaredebounce*®intervalinunitsof4milli-!*®seconds.Zeroifnodebounceis *®desired.* *§15=1Usethedefaultchannel*®configurationspecifiedbelow"*¬0Usetheuserspecifiedchannel*®configurationŠSPC„24OPNCDB„EQU„*”Thisisthelengthofadatablockthat#*£specifiesachanneltobeopened.ŠSPC„23DEFLTCFG‚EQU„0”Thedefaultchannelconfigurationis*£definedasfollows:**¨InterruptsEnabled'*¨Interruptonenergizedtodeenergized *ªtransition*¨Queueeventoninterrupt*¨Nosoftwaredebounce*************************** Ending of &.M610CMD.EQ ***************************éééé‰PAGE******************************* Beginning of &.M610INTQ.EQ ********************************* Interrupt Queue Control Table*G*ƒTheseequatesdefinetheoffsetsoffieldswithintheInterruptQueueI* 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”Thisfieldisinitializedtocontainthe'*£ASCIIstring'IQCT'alloweasyvisual(*£locationofthequeuecontroltablein*£memorydumps.ŠSPC„21QBAB†DS.BƒBABBLNThisBABisusedtoactivatethe'*£backgroundinterrupthandlerwhenthe)*£queuecontainsaninterruptentrytobe *£processed. /QPTR†DS.Lƒ1”Thisfieldcontainsthebasememory(*£addressoftheinterruptqueueitself. J*ƒThequeueinputandoutputoffsetfieldsmustbeadjacentinmemorywithK* the input offset at the lower address and the output offset at the higherG*address.‚ThisisrequiredbecauseaCMPM.W(Ax)+,(Ax)+instructionisM* used to check for an empty queue without requiring interrupts to be masked. 4QINOFSTƒDS.Wƒ1”Thisfieldcontainstheoffsetofthe$*£firstfreequeuelocationwherean *£interruptentrycanbeplaced. 5QOUTOFST‚DS.Wƒ1”Thisfieldcontain? stheoffsetofthe)*£nextinterruptentrytoberemovedfrom *£thequeue. 6QWAMSK„DS.Wƒ1”Thisfieldcontainsthequeuelength-1%*£andisANDedtoeithertheinputor)*£outputoffsetfieldtoforcewraparound+*£fromthehighaddressendofthequeueto*£thelowaddressend. 4QMAXIL„DS.Wƒ1”Thisupperbyteofthisfieldcontains%*£thehardwareinterruptlevelofthe**£highestpriorityinputmodulecontrolled,*£bythisdriverandthelowerbyteiszero.Ò5Û4&*£ThisfieldisusedbytheForeground**£InterruptHandlertoraisetheprocessor,*£interruptmaskwhileanewentryisplaced$*£intheInterruptProcessingQueue. 0IQCTLN„EQU„*”ThisisthelengthoftheInterrupt*£QueueControlTable.ŠPAGE*"* Interrupt Processing Queue Entry*I*ƒTheseequatesdefinetheformatofaninterruptentrywithinthequeue.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. ŠOFFSET02IQETIMEƒDS.Lƒ1”Thisfieldcontainstheapproximate,*£timeatwhichtheinterruptoccurred.This,*£timeisobtainedfromtheTIMEODparameter**£inSYSPARandisaccuratetothenearest+*£millisecondsubjecttothegranularityof$*£theRMS68Kreal-timeclocksource. ,ŠDS.Bƒ3”Thisfieldactsasaplaceholderso+*£thestatusbytebelowwillbeloadedinto,*£thelow-orderbyteofadataregistereven'*£thoughallqueueentriesarereadand(*£writtenviaaMOVEM.Linstruction.‚The)*£contentofthesethreebytesisassumed *£tobeUNDEFINEDbythedriver. 8IQESTATƒDS.Bƒ1”Thisfieldcontainsabitmaskspecifying%*£theinputchannelorchannelswhich*£generatedtheinterrupt(s). 4IQECCB„DS.Lƒ1”ThisfieldcontainstheCCBaddressof%*£theinputmodulethatgeneratedthe *£interrupt. -ŠDS.Bƒ4”Thesereservedbytesarenecessaryto**£padthequeueentrylengthinbytestoa*£poweroftwo. 0IQENTLNƒEQU„*”Thisisthelengthofaninterrupt*£processingqueueentry.**************************** Ending of &.M610INTQ.EQ ****************************‰PAGE****************************** Beginning of &.M615DRV.EQ *******************************2*‰EQUATESSPECIFICALLYFORMVM615DRIVER(D615.SA)*ACOPEN„EQU„1’OPENCOMMANDCODEACOCLS„EQU„2’CLOSECOMMANDCODE"ACOUT…EQU„3’OUTPUTONCOMMANDCODE$ACOOFF„EQU„4’OUTPUTOFFCOMMANDCODE"ACOSTA„EQU„5’OUTPUTSTATUSCOMMANDX1ˆEQU„6’(notused)X2ˆEQU„7’(notused)"ACOPLS„EQU„8’PULSEDOUTPUTCOMMAND* *‰ACOCOMMANDPARAMETERSOFFSETS* ŠOFFSET0 CMDSTA„DS.Wƒ1’ACOcommandstatusCMDCOD„DS.Wƒ1’ACOcommandcodeCMDCHN„DS.Wƒ1’#ofchannels CMDNXT„EQU„*ŠOFFSETCMDNXTNUMCHANƒDS.Wƒ1’channelnumber$CHNCNFGƒDS.Wƒ1’channelconfiguration4OPNTRY„EQU„*-CMDNXT‹#ofbytesforeachopenchannel**‰ACOTBLOFFSETS8*‰headerinformationsetupduringsysteminitialization9*‰allACOentriessetto$FFduringsysteminitialization* ŠOFFSET0ACOEYE„DS.Lƒ1’!ACOeyecatcher!ACOLNG„DS.Wƒ1’#ofbytesintable4ACOOFSTƒDS.Wƒ1’offsettonextavailableACO-IDentryB*ACOIO is an offset which points to a location within ACOTBL which<*‡containsavaluewhichistheoffsetrelativetoACOTBLto6*‡theIOimagemapswithinACOTBL.‚ACOTBLitselfisan4*‡absoluteaddresssetinSYSGEN.‚Itisaccessedby:6*‡MOVE.L‚ACOTBL,An‚(movesaddressof? ACOTBLtoaddress?*‡registern).‚MOVE‚ACOIO(An),Dn‚(ACOIOistheoffsettodata).'ACOIO…DS.Wƒ1’offsettostartofIOmaps"ACONAL„DS.Bƒ1’#ofCCB'sallocated*ACONMAXƒDS.Bƒ1’max#ofCCB'scanallocate"ACONTRYƒEQU„*’tableentriesfollowŠOFFSETACONTRYACOID…DS.Lƒ1’ACOmoduleID6*‚---ƒ---ƒStartofchannelconfigurationtable‚---ƒ---8*ˆEachchannelconfigurationentryconsistsof2fields;/*ˆ(1)UserID(theuser'sTCBaddress)4bytes.%*ˆ(2)Channelconfiguration,2bytes.5*ˆThereisspacereservedfor8configurationentries*)ŠDS.Lƒ1’usertaskTCBaddress-channel0)ŠDS.Wƒ1’channelconfiguration-channel00ŠDS.Bƒ7*6restofchannels(6bytesperchannel)3ACOIDLNG‚EQU„*-ACONTRYŠlengthof1ACOmoduleentry*ŠPAGE ŠOFFSET0ã=ìCô*/*‚Offsetstofieldswithinconfigurationtable:#ACOTCB„DS.Lƒ1’usertaskTCBaddress$ACOCNIFƒDS.Wƒ1’channelconfiguration'CHANLNGƒEQU„*’lengthof1channelentry*$*‰IOoffsetswithinIOmapinACOTBL*‰onesetforeachACOmodule*>*ƒTheIOimagemapcontainsacopyofthedatainthedatareg*F*ƒBeginIOimagemap------------------------------------------------- ŠOFFSET0&IODDR…DS.Lƒ1’memorymappedI/Oaddress'DODR07„DS.Wƒ1’dataoutputreg.chan0-7$IOLNG…EQU„*’lengthof1IOmapentryF*‚EndIOimagemap---------------------------------------------------*+*‰IOOFFSETSwithinmemorymappedI/Ospace* ŠOFFSET0IOADR…DS.Wƒ1’dataregister**ˆDCODRIVERERRORCODES*ACODVB„EQU„$F0devicebadACOBSY„EQU„$F1devicebusy,ACOICU„EQU„$F2invalidcommandforthisuser1ACOCNM„EQU„$F3invalidchannel#forthiscommand$ACOINVDƒEQU„$F4invalidcommandcode-ACOMEM„EQU„$F5nomemoryspaceleftinACOTBL+ACOICNSƒEQU„$F6illegalchannel#specified.ACOINC„EQU„$F7invalid#ofchannelsspecified/ACOCNFGƒEQU„$F8invalidconfigurationspecified/ACOICC„EQU„$F9invalidcommandforthischannel:ACOMAX„EQU„$FAexceededSYSGENspecifiednumberofdevicesACOIINTƒEQU„$FB(notused)#ACONTBLƒEQU„$FCnoACOtableexists'ACONID„EQU„$FDACOmodulenotallocated%ACOPND„EQU„$FEchannelalreadyopened*!*†---†---…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*‚whicharereferredtoasanoffsetfromstackpointer.\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. *Thesyntaxis:‚LOADRn,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.!*Thesyntaxis:‚STORERn,VARNAME.?*The local storage is DYNAMICALLY ALLOCATED by macro 'ALLOCATE'* STORE…MACROŠMOVE.L\1,\2(A7)ŠENDM**PUSHPOINT MACROŠMOVEM.LA0-A6,-(A7)ŠENDM*POP_POINT MACROŠMOVEM.L(A7)+,A0-A6ŠENDM* PUSHALLƒMACROŠMOVEM.LA0-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*‰EQUATESSPECIFICALLYFORMVM625DRIVER(D625.SA)*DCOPEN„EQU„1’OPENCOMMANDCODEDCOCLS„EQU„2’CLOSECOMMANDCODE"DCOUT…EQU„3’OUTPUTONCOMMANDCODE$DCOOFF„EQU„4’OUTPUTOFFCOMMANDCODE"DCOSTA„EQU„5’OUTPUTSTATUSCOMMANDX1ˆEQU„6’(notused)X2ˆEQU„7’(notused)"DCOPLS„EQU„8’PULSEDOUTPUTCOMMAND* *‰DCOCOMMANDPARAMETERSOFFSETS* ŠOFFSET0 CMDSTA„DS.Wƒ1’DCOcommandstatusCMDCOD„DS.Wƒ1’DCOcommandcodeCMDCHN„DS.Wƒ1’#ofchannels CMDNXT„EQU„*ŠOFFSETCMDNXTNUMCHANƒDS.Wƒ1’channelnumber$CHNCNFGƒDS.Wƒ1’channelconfiguration4OPNTRY„EQU„*-CMDNXT‹#ofbytesforeachopenchannel**‰DCOTBLOFFSETS8*‰headerinformationsetupduringsysteminitialization9*‰allDCOentriessetto$FFduringsysteminitialization* ŠOFFSET0DCOEYE„DS.Lƒ1’!DCOeyecatcher!DCOLNG„DS.Wƒ1’#ofbytesintable4DCOOFSTƒDS.Wƒ1’offsettonextavailableDCO-IDentryB*DCOIO is an offset which points to a location within DCOTBL which<*‡containsavaluewhichistheoffsetrelativetoDCOTBLto6*‡theIOimagemapswithinDCOTBL.‚DCOTBLitselfisan4*‡absoluteaddresssetinSYSGEN.‚Itisaccessedby:6*‡MOVE.L‚DCOTBL,An‚(movesaddressofDCOTBLtoaddress?*‡registern).‚MOVE‚DCOIO(An),Dn‚(DCOIOistheoffsettodata).'DCOIO…DS.Wƒ1’offsettostartofIOmaps"DCONAL„DS.Bƒ1’#ofCCB'sallocated*DCONMAXƒDS.Bƒ1’max#ofCCB'scanallocate"DCONTRYƒEQU„*’tableentriesfollowŠOFFSETDCONTRYDCOID…DS.Lƒ1’DCOmoduleID6*‚---ƒ---ƒStartofchannelconfigurationtable‚---ƒ---8*ˆEachchannelconfigurationentryconsistsof2fields;/*ˆ(1)UserID(theuser'sTCBaddress)4bytes.%*ˆ(2)Channelconfiguration,2bytes.5*ˆThereisspacereservedfor8configurationentries*)ŠDS.Lƒ1’usertaskTCBaddress-channel0)ŠDS.Wƒ1’channelconfiguration-channel00ŠDS.Bƒ7*6restofchannels(6bytesperchannel)3DCOIDLNG‚EQU„*-DCONTRYŠlengthof1DCOmoduleentry*ŠPAGE ŠOFFSET0ü=B +/*‚Offsetstofieldswithinconfigurationtable:#DCOTCB„DS.Lƒ1’usertaskTCBaddress$DCOCNIFƒDS.Wƒ1’channelconfiguration'CHANLNGƒEQU„*’lengthof1channelentry*$*‰IOoffsetswithinIOmapinDCOTBL*‰onesetforeachDCOmodule*J*ƒTheIOimagemapcontainsacopyofthedataintheIOcontrol&ddrrgs*F*ƒBeginIOimagemap------------------------------------------------- ŠOFFSET0&IODDR…DS.Lƒ1’memorymappedI/Oaddress'DODR07„DS.Wƒ1’dataoutputreg.chan0-7$IOLNG…EQU„*’lengthof1IOmapentryF*‚EndIOimagemap---------------------------------------------------*+*‰IOOFFSETSwithinmemorymappedI/Ospace* ŠOFFSET0IOADR…DS.Wƒ1’dataregister**ˆDCODRIVERERRORCODES*DCODVB„EQU„$F0devicebadDCOBSY„E@ QU„$F1devicebusy,DCOICU„EQU„$F2invalidcommandforthisuser1DCOCNM„EQU„$F3invalidchannel#forthiscommand$DCOINVDƒEQU„$F4invalidcommandcode-DCOMEM„EQU„$F5nomemoryspaceleftinDCOTBL+DCOICNSƒEQU„$F6illegalchannel#specified.DCOINC„EQU„$F7invalid#ofchannelsspecified/DCOCNFGƒEQU„$F8invalidconfigurationspecified/DCOICC„EQU„$F9invalidcommandforthischannel:DCOMAX„EQU„$FAexceededSYSGENspecifiednumberofdevicesDCOIINTƒEQU„$FB(notused)#DCONTBLƒEQU„$FCnoDCOtableexists'DCONID„EQU„$FDDCOmodulenotallocated%DCOPND„EQU„$FEchannelalreadyopened*!*†---†---…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*‚whicharereferredtoasanoffsetfromstackpointer.\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. *Thesyntaxis:‚LOADRn,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.!*Thesyntaxis:‚STORERn,VARNAME.?*The local storage is DYNAMICALLY ALLOCATED by macro 'ALLOCATE'* STORE…MACROŠMOVE.L\1,\2(A7)ŠENDM**PUSHPOINT MACROŠMOVEM.LA0-A6,-(A7)ŠENDM*POP_POINT MACROŠMOVEM.L(A7)+,A0-A6ŠENDM* PUSHALLƒMACROŠMOVEM.LA0-A6/D0-D7,-(A7)ŠENDM* POPALL„MACROŠMOVEM.L(A7)+,A0-A6/D0-D7ŠENDM*************************** Ending of &.M625DRV.EQ ***************************éééé‰PAGE************************** Beginning of &.MAP.EQ ***************************(*†MAPBEGINSYSPARAREAPOINTSTOMEMMAP*;*‡MEMMAPENTRY--EACHENTRYDESCRIBESONEMEMORYPARTITION* ŠOFFSET0,MAPMTYPƒDS.Bƒ1’MEMORYTYPE,BITS7-4(3-0=0)1MAPPARTƒDS.Bƒ1’PARTITIONNUMBER,BITS3-0(7-4)=08MAPSTRAƒDS.Lƒ1’STARTOFAVAILABLEMEMORY,THISPARTITION0MAPFMLPƒDS.Lƒ1’POINTERTOFMLHEADERINFORMATION2MAPENDAƒEQU„MAPFMLPŒENDOFAVAILABLEMEMORY--ROMMAPENTSZ‚EQU„*’SIZEOFENTRY*%*‡FREEMEMORYLISTHEADERINFORMATION* ŠOFFSET04LOWFREEƒDS.Lƒ1’POINTERTO1STFREEMEMORYLISTENTRY:STRAVAIL‚DS.Lƒ1’STARTOFAVAILABLEMEMORY-THISPARTITION8ENDAVAIL‚DS.Lƒ1’ENDOFAVAILABLEMEMORY-THISPARTITION/MEMTYPEƒDS.Bƒ1’MEMORYTYPEA ANDPARTITIONNUMBERŠDS.Bƒ1’UNUSED*SEMFRMEM‚DS.Wƒ3’FREEMEMORYLISTSEMAPHORE)SEMWTMEM‚DS.Wƒ3’WAITFORMEMORYSEMAPHORE FMLHDSZƒEQU„**"*„LINKEDLISTOFFREEMEMORYSPACE* ŠOFFSET02FMLFP…DS.Lƒ1’FORWARDPOINTERTONEXTENTRYINLIST/FMLBP…DS.Lƒ1’BACKWARDPOINTERTOPREVIOUSENTRY/FMLFREEƒDS.Lƒ1’FREEPAGESAVAILABLETOALLOCATE%FMLUSEDƒDS.Lƒ1’ALLOCATED(USED)PAGES*********************** Ending of &.MAP.EQ ***********************ééé'‰PAGE****************************** Beginning of &.MVME400.EQ ******************************O********************************************************************************4*‰EquatesrelatingtothePIAontheMVME400board.*O******************************************************************************* *?*‚Offsetsfromtheaddressofthe7201A-sidecontrolregister:*6PIADDR_A‚EQU„-$CPIA'sA-sideDataDirectionRegister.High,High-->Lowselect0REGSELEC‚EQU„2’Directionordataregisterselect#IRQX2FLG‚EQU„6’IRQx2interruptflag#IRQX1FLG‚EQU„7’IRQx1interruptflag "* PIA Input/Output bit devinitions=JUMPMASK‚EQU„%00000111ŠPA0-2,In,BaudRatejumpers,Port1/26WRT_SELƒEQU„3’Bitnumber,PA3,Out,Select1/2jumpers2WRT_LEDƒEQU„4’Bitnumber,PA4,Out,FailLEDwrite0RED_LEDƒEQU„5’Bitnumber,PA5,In,FailLEDread.RED_DSR1‚EQU„6’Bitnumber,PA6,In,DSRport1.RED_DSR2‚EQU„7’Bitnumber,PA7,In,DSRport2*‚Arrangementofregistersoffmemory-mappedI/Obaseaddress.*CREG†EQU„0’Controlregister.SREGB †EQU„0’Statusregister.DREG†EQU„-4‘Dataregister. L****************************************************************************#NCR0BRKƒEQU„%10000000ŠBREAK/ABORTŒ}6NCR0TXUƒEQU„%01000000ŠTxUNDERRUNŒ}USEDWITHEXTERNALRxB>TxA>TxB/RxA>TxA>RxB>TxB*%XXXXXX11ŠFIELDDEFINITION!NCW2UD1ƒEQU„%00000011ŠUNDEFINED}0NCW2BDMƒEQU„%00000010ŠBOTHCHANNELSDMA‡}SYSTEM:NCW2ADMƒEQU„%00000001ŠCH.ADMA,CH.BINT„}CONFIGURATION/NCW2BINƒEQU„%00000000ŠBOTHCHANNELSINTERRUPT}*L*****************************************************************************%11XXXXXXŠFIELDDEFINITION)NCW3BT8ƒEQU„%11000000ŠRx8BITS/CHARACTERB )NCW3BT6ƒEQU„%10000000ŠRx6BITS/CHARACTER)NCW3BT7ƒEQU„%01000000ŠRx7BITS/CHARACTER)NCW3BT5ƒEQU„%00000000ŠRx5BITS/CHARACTER*"NCW3AUEƒEQU„%00100000ŠAUTOENABLES&NCW3EHUƒEQU„%00010000ŠENTERHUNTPHASE#NCW3CRCƒEQU„%00001000ŠRxCRCENABLE0NCW3ADSƒEQU„%00000100ŠADDRESSSEARCHMODE(SDLC)1NCW3SYNƒEQU„%00000010ŠSYNCCHARACTERLOADINHIBITNCW3RXEƒEQU„%00000001ŠRxENABLE*L*****************************************************************************%11XXXXXXŠFIELDDEFINITION8NCW4CLKƒEQU„%11000000ŠMASKFORISOLATINGTHECLOCKFIELD$NCW4C64ƒEQU„%11000000ŠX64CLOCKMODE$NCW4C32ƒEQU„%10000000ŠX32CLOCKMODE$NCW4C16ƒEQU„%01000000ŠX16CLOCKMODE#NCW4C01ƒEQU„%00000000ŠX1‚CLOCKMODE*%XX11XXXXŠFIELDDEFINITION(NCW4EXSƒEQU„%00110000ŠEXTERNALSYNCMODE/NCW4SDLƒEQU„%00100000ŠSDLCMODE(01111110FLAG)+NCW4B16ƒEQU„%00010000Š16BITSYNCCHARACTER+NCW4B08ƒEQU„%00000000Š08BITSYNCCHARACTER*%XXXX11XXŠFIELDDEFINITION+NCW4SB2ƒEQU„%00001100Š2STOPBITS/CHARACTER/NCW4SBHƒEQU„%00001000Š11/2STOPBITS/CHARACTER+NCW4SB1ƒEQU„%00000100Š1STOPBITS/CHARACTER&NCW4SMEƒEQU„%00000000ŠSYNCMODEENABLE*%NCW4PEOƒEQU„%00000010ŠPARITYEVEN/ODD#NCW4PEEƒEQU„%00000001ŠPARITYENABLE*L****************************************************************************/NCW5DTRƒEQU„%10000000ŠDataTerminalReady(DTR)*%X11XXXXXŠFIELDDEFINITION)NCW5TX8ƒEQU„%01100000ŠTx8BITS/CHARACTER)NCW5TX6ƒEQU„%01000000ŠTx6BITS/CHARACTER)NCW5TX7ƒEQU„%00100000ŠTx7BITS/CHARACTER)NCW5TX5ƒEQU„%00000000ŠTx5BITS/CHARACTER* NCW5BRKƒEQU„%00010000ŠSENDBREAKNCW5TXEƒEQU„%00001000ŠTxENABLE"NCW5CRCƒEQU„%00000100ŠCRC-16/CCITT+NCW5RTSƒEQU„%00000010ŠRequestToSend(RTS)#NCW5TCEƒEQU„%00000001ŠTxCRCENABLE*L****************************************************************************8NCW6SYNƒEQU„%11111111ŠSYNCBITS7-0‡}SDLCADDRESSFIELD*L****************************************************************************9NCW7SYNƒEQU„%11111111ŠSYNCBITS15-8†}01111110SDLCFLAGSDLCFLAG‚EQU„$7E*************************** Ending of &.NEC7201.EQ ***************************éééééééC ‰PAGE************************** Beginning of &.NIO.EQ ************************** ŠLLENƒ120O*******************************************************************************O********************************************************************************.*ˆDATASTRUCTURESANDEQUATESFORINTERNALI/O**ˆMODIFICATIONHISTORY:*ˆ10/08/84‚DeletedreferencetoIOPSMPBsecondarymapbit.8*‰9/02/83‚AddedmagtapedevicedependentportionofDCB:*ˆ11/09/82‚AddedTNTTASKIDforHDS-400networkterminals=*‰6/15/82‚ModifiedDCBsothatdefaultconfigurationislast.6*‰4/13/82‚Initialupdatetomakeallsystemsthesame.B*‰2/23/82‚AdditionofstructuresusedinCONFIGURE,CHANGEDEFAULT-*’CONFIGURATION,andREQUESTSTATUScommands.<*‰9/14/81‚Revision2.0--AdditionalDCBfieldequates.‚R.V. *‰8/12/80*O*******************************************************************************O******************************************************************************* (IOSTIN„EQU„2’IOSTRAPINSTRUCTIONNUMBER(FHSTIN„EQU„3’FHSTRAPINSTRUCTIONNUMBER/FHSID…EQU„'.FHS'FILEHANDLINGSERVICESTASKID1FMSID…EQU„'.FMS'FILEMANAGEMENTSERVICESTASKID.IOSID…EQU„'.IOS'INPUT/OUTPUTSERVICESTASKID'IODID…EQU„'.IOD'I/OCOMPLETIONTASKID(TTYID…EQU„'.TTY'TERMINALDRIVERTASKIDqMy?BŠDS.Bƒ1’EVENTCODEŠDS.Lƒ1’SENDERTASKŠDS.Lƒ1’SENDERSESSIONEVTCOD„DS.Bƒ1’SUB-CODEŠDS.Bƒ1’RESERVEDEVTDCB„DS.Lƒ1’DCBADDRESSEVTLNG„EQU„*’EVENTLENGTH *Ç!*‚FMSI/OEVENTMESSAGESTRUCTURE*Ç ŠOFFSET0’STARTWITHTEXTOFFSETŠDS.Bƒ1’EVENTLENGTHŠDS.Bƒ1’EVENTCODEŠDS.Lƒ1’SENDERTASKŠDS.Lƒ1’SENDERSESSIONEVTKOD„DS.Bƒ1’SUB-CODEŠDS.Bƒ1’RESERVEDEVTLUE„DS.Lƒ1’LUTENTRYEVTLUT„DS.Lƒ1’LUT%EVTTIN„DS.Bƒ1’TRAPINSTRUCTIONNUMBER"EVTPRI„DS.Bƒ1’REQUESTOR'SPRIORITY#EVTTSK„DS.Lƒ1’REQUESTOR'STASKNAME(EVTSES„DS.Lƒ1’REQUESTOR'SSESSIONNUMBEREVTUNM„DS.Wƒ1’USERNUMBEREVTRD0„DS.Lƒ1’REQUESTOR'SD0"EVTRA0„DS.Lƒ1’ADDRESSOFIOCB(A0)EVTPST„DS.Bƒ1’PBSTATUSEVTPSZ„DS.Bƒ1’PBLENGTHEVTLEN„EQU„*’LENGTHOFMESSAGE *Ç#*‚FHSCOMMANDBITEQUATES(16BITS)*ÇFHALLOBƒEQU„7’ALLOCATEFHASGNBƒEQU„6’ASSIGN&FHCHNGBƒEQU„5’CHANGEACCESSPERMISSIONFHRENMBƒEQU„4’RENAMEFHPROTBƒEQU„3’PROTECTFHCLOSBƒEQU„2’CLOSEFHDELTBƒEQU„1’DELETEFHCKPTBƒEQU„0’CHECKPOINT!FHRATTBƒEQU„7’RETRIEVEATTRIBUTES#FHFDENBƒEQU„6’FETCHDIRECTORYENTRY$FHFDMNBƒEQU„5’FETCHDEVICEMNEMONICS"FHCHLUBƒEQU„4’CHANGELUASSIGNMENTFHDVOLBƒEQU„0’DEFAULTVOLUME *Ç"*‚FHSOPTIONBITEQUATES(16BITS)*ÇFOPOVRTB‚EQU„3’OVERWRITEFOPTRNBƒEQU„4’TRUNCATE$FOPABFBƒEQU„5’ALLOCATESHAREDBUFFER'FOPBEGBƒEQU„6’POSITIONATBEGINNING/END!FOPADRBƒEQU„11‘RETURNPHY.ADRBITFOPSLUBƒEQU„0’SEND/RECEIVELUFOPKEPBƒEQU„15‘KEEPASSIGNMENT **‚IOSFUNCTIONCODEEQUATES*IOSFIO„EQU„0’DATATRANSFERIOSFCM„EQU„1’COMMANDSIOSFPV„EQU„$80PRIV.COMMANDS *Ç"*‚IOSOPTIONBITEQUATES(16BITS)*ÇIOPASCBƒEQU„0’ASCII/BINARYIOPWATBƒEQU„1’WAIT/PROCEED4IOPUNPBƒEQU„2’CONDITIONALPROCEED/UNCONDITIONALPROCIOPFORBƒEQU„3’FORMATTED/IMAGE*IOPBRKBƒEQC U„4’EXCLUSIVEBREAKNOTIFICATIONIOPECHBƒEQU„5’ECHO/NOECHOIOPRECBƒEQU„6’RECORD/BLOCK*IOPLRNBƒEQU„7’LOGICALRECORD/RANDOMRECORD(IOPNOKBƒEQU„8’NOKEYRETURNED/RETURNKEY0IOPNOCBƒEQU„9’NOCOMPLETIONADDR/COMPLETIONADDR!IOPINFBƒEQU„10‘INPUTFORMAT/IMAGEIOPFTRKƒEQU„12‘FORMATTRACK&IOPCTABƒEQU„12‘CLEARTYPEAHEADBUFFER(IOPCDOBƒEQU„12‘CLEARDISCARDOUTPUTMODEIOPTSKBƒEQU„15‘TASKIDSUPPLIED *Ç#*‚ATTENTIONEVENTMESSAGESTRUCTURE*Ç%ŠOFFSET0’STARTWITHPARAMETEROFFSETŠDS.Bƒ1’EVENTLENGTHŠDS.Bƒ1’EVENTCODEEVADEV„DS.Lƒ1’DEVICEMNEMONICEVASTA„DS.Wƒ1’STATUS EVALEN„EQU„* *Ç(*‚ATTENTIONSTATUSBITEQUATES(16BITS)*ÇEVATNASƒEQU„1’DEVICEASSIGNED *Ç *‚IOSPARAMETERBLOCKEXTENSIONS*Ç*ŠOFFSETIOSBLNSTARTWITHENDOFIOSBLOCK!IOSTSK„DS.Lƒ1’REQUESTOR'STASKID!IOSSES„DS.Lƒ1’REQUESTOR'SSESSIONIOSNLN„EQU„*’TOTALLENGTHŠPAGE *À***********5*‚DEVICECONTROLBLOCK(DCB)DATASTRUCTURE•*‚DCB‚* *À*********** ŠOFFSET0’STARTWITHZEROOFFSET#DCBPTR„DS.Lƒ1’POINTERTONEXTBLOCKDCBAID„DS.Lƒ1’ASCIIIDENTIFIER6DCBDCQ„DS.Lƒ1’ADDRESSOFDCQENTRY(0=NOTHINGPENDING)#DCBDID„DS.Lƒ2’DRIVERID(TASKNAME)$DCBLUT„DS.Lƒ1’ADDRESSOFCURRENTLUT2DCBATT„DS.Lƒ1’ATTRIBUTESOFDEVICE†7/6/83MOTOROLA DCBWCD„DS.Bƒ1’WRITEPROTECTCODEDCBRCD„DS.Bƒ1’READPROTECTCODEDCBTMO„DS.Wƒ1’USEFLAGDCBWNT„DS.Wƒ1’WRITECOUNTDCBRNT„DS.Wƒ1’READCOUNTDCBFLG„DS.Wƒ1’DEVICEFLAGDCBCCB„DS.Lƒ1’CHANNELID#DCBCDV„DS.Bƒ1’CHANNELDEVICENUMBER!DCBPRI„DS.Bƒ1’CONNECTIONPRIORITY#DCBCRN„DS.Lƒ1’CURRENTRECORDNUMBER8DCBIOS„DS.BƒIOSBLNROOMFORIOCB(EXCLUDINGEXTENSIONS!),DCBLBA„DS.Lƒ1’LOGICALADDRESSOFPARAMBLOCK-DCBCCF„DS.Bƒ1’CONFIGURATIONCOORDINATIONFLAG'*0-->DEVICEINDEFAULTCONFIGURATION2*1-->DEVICEMAYNOTBEINDEFAULTCONFIGURATIONDCBBCT„DS.Bƒ1’BREAKCOUNT*DCBBRK„DS.Lƒ1’ADDRESSOFBREAKSERVICELUT#DCBSRV„DS.Lƒ1’BREAKSERVICEADDRESS7DCBTSK„DS.Lƒ1ˆEVENTCLAIMER-->TASKNAME7/6/83IEE488SESSIONNUMBERˆ7/6/83IEE488@DCBSUP„DS.Lƒ1ˆADDRESSOFSUPERVISORDCBORSESSION„7/6/83IEE4880*™NUMBERIFTHISISSUPERVISORDCBˆ7/6/83IEE488ADCBSOP„DS.Lƒ1ˆSUPERVISOR/SUBORDINATEDCBOPENCOUNTƒ7/6/83IEE488-*™FOREVERYSUBORDINATEDEVICE†9/13/83IEE488.*™THATISOPENED,THISCOUNTIS…9/13/83IEE488!*™INCREMENTEDBY1’9/13/83IEE488DCBRSV„DS.Lƒ1‹4BYTESŠDS.Lƒ1‹4BYTESŠDS.Lƒ1‹4BYTESŠDS.Lƒ1‹4BYTES*.*œRESERVEDBUFFEROF16BYTESFORFUTUREUSAGE+*œBETWEENTHEDEVICEINDEPENDENTANDDEVICE*œDEPENDENTINFORMATION**‚DEVICEDEPENDENTPORTION*+DCBDEV„EQU„*’STARTDEVICEDEPENDENTPORTION&DCBLEN„EQU„DCBDEV+IOSREC†RECORDLENGTH%DCBSEC„EQU„DCBDEV+IOSRSZ†DISKSECTORS)DCBSIZ„EQU„DCBDEV+IOSRSZ†SCREEN/PAGESIZE&DCBTMW„EQU„DCBDEV+IOSWTO†WRITETIMEOUT%DCBTMR„EQU„DCBDEV+IOSRTO†READTIMEOUT*E* DEVICE DEPENDENT PORTION FOR TTY COMPATABILITY THAT WAS THROWN AWAY * ORIGINALLY*)DCBSBS„EQU„DCBDEV+IOSBRC†PROGRAMMINGINFO)DCBHBS„EQU„DCBDEV+IOSRTV†PROGRAMMINGINFOOFFLINE„1-->ONLINEDFLGWP„EQU„1„WRITEPROTECT¬"DFLGSC„EQU„2„DEVICESTATUSCHANGE¥+DFLGIN„EQU„3’DEVICEBUSYFORINITIALIZATION*DFLGCF„EQU„4’DEVICEBUSYFORCONFIGURATION(DFLGCT„EQU„5’CANCELTIMER0-->NO‚1-->YES7DFLGIT„EQU„6’SET-->IGNORETIMEREVENTFORTHISDEVICE#DFLIOEOTEQU…7’0-->TASKISACTIVE#*£1-->EOTTERMINATIONINPROGRESS*Ç*‚DCBATTBITEQUATES(16BITS)*ÇDATRED„EQU„0’SUPPORTSREADDATWRT„EQU„1’SUPPORTSWRITEDATBIN„EQU„2’SUPPORTSBINARYDATRAN„EQU„3’SUPPORTSRANDOMDATIMG„EQU„4’SUPPORTSIMAGEDATHIO„EQU„5’SUPPORTSHALTI/O%DATPOS„EQU„6’SUPPORTSPOSITIONRECORDDATFMK„EQU„7’SUPPORTSFILEMARKDATIND„EQU„8’INTERACTIVEDEVICEDATPRT„EQU„9’PRINTERDEVICEDATSPL„EQU„10‘SUPPORTSSPOOLING+DATWRC„EQU„11‘SUPPORTSWRITEWITHCRCCHECK4DATSPD„EQU„12‘SUPPORTSSPECIALPURPOSEDEVICEDRIVER,DATSHR„EQU13DEVICEISNOTSHARABLE¡IEEE488%DATBDV„EQU14BUSSABLEDEVICE¨IEEE488 *ÄIEEE488*‹B13+B14==>†00=NONEŸIEEE488$*œ01=NON-SHAREDBUSDEVICEŽIEEE488%*œ10=SHAREDBUSSABLEDEVICEIEEE488)*œ11=NON-SHAREDBUSSABLEDEVICE‰IEEE488 *Ç*‚DCBTMOVALUES(16BITS)*Ç *ˆ0=NOTACTIVE(ORTIMEDOUT)¢$*ˆ+=ACTIVEINDATATRANSFERPHASEž"*ˆ-=ACTIVEINTERMINATIONPHASE *ÇŠPAGE *À***********3*‚SYSTEMVALUETABLE(SVT)DATASTRUCTURE—*‚SVT‚* *À*********** ŠOFFSET0’STARTWITHZEROOFFSET SVTSOP„DS.Lƒ1’I/OSYSTEMOPTIONS4SVTQST„DS.Lƒ1’STARTOFDEVICECONNECTIONQUEUESPACE/SVTQND„DS.Lƒ1’ENDOFDEVICECONNECTQUEUESPACESVTQUE„DS.Lƒ1’FIRSTDCQ/SVTLST„DS.Lƒ1’STARTOFLOGICALUNITTABLESPACE-SVTLND„DS.Lƒ1’ENDOFLOGICALUNITTABLESPACESVTLUT„DS.Lƒ1’FIRSTTABLEENTRY&SVTDST„DS.Lƒ1’STARTOFDCBTABLESPACE$SVTDND„DS.Lƒ1’ENDOFDCBTABLESPACESVTDCB„DS.Lƒ1’FIRSTTABLEENTRYSVTSDCBƒDS.Bƒ1’DCBSEMAPHORESVTSLUTƒDS.Bƒ1’LUTSEMAPHORESVTSDCQƒDS.Bƒ1’DCQSEMAPHORESVTSFCBƒDS.Bƒ1’FCBSEMAPHOREO*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*0*SVTSID„DS.Lƒ4’I/OSYSTEMIDANDREVISIONNUMBER*SVTSTCFƒDS.Bƒ1*œSYSTEMTASKCORDINATIONFLAG *œBIT‡MEANING%*ž0‡0-->IOSINITIALIZATIONNOTDONE*¦1-->IOSINITIALIZATION…DONE%*ž1‡0-->FHSINITIALIZATIONNOTDONE*¦1-->FHSINITIALIZATION…DONE%*ž2‡0-->FMSINITIALIZATIONNOTDONE*¦1-->FMSINITIALIZATION…DONESVTFUTUƒDS.Bƒ15#*œREMAINING15BYTESFORFUTUREUSE*O*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<)SVTBRK„DS.Lƒ2’TASK-IDOFUNCLAIMEDBREAKS6SVTBSA„DS.Lƒ1’SERVICEADDRESSFORUNCLAIMEDBREAKTASK *Ç*‚EQUATESFORSVTSOP(32BITS)*ÇSVOPMU„EQU„0’MULTIPLEUSERSVOPFM„EQU„1’FMSPRESENT *À***********3*‚LOGICALUNITTABLE(LUT)DATASTRUCTURE—*‚LUT‚* *À*********** ŠOFFSET0’STARTWITHZEROOFFSET#LUTPTR„DS.Lƒ1’POINTERTONEXTTABLELUTTID„DS.Lƒ1’TASK-ID!LUTSES„DS.Lƒ1’TASKSESSIONNUMBER$LUTMLU„DS.Bƒ1’MAXIMUMNUMBEROFLUNS!LUTCAS„DS.Bƒ1’CURRENTASSIGNMENTSLUTUNM„DS.Wƒ1’USERNUMBERLUTBEG„EQU„*’BEGINLUENTRIES*Ç ŠOFFSET0’STARTWITHZEROOFFSET'LUTCAP„DS.Bƒ1’CURRENTACCESSPERMISSION!LUTCSF„DS.Bƒ1’CURRENTSTATUSFLAG'LUTATT„DS.Wƒ1’ATTRIBUTESOFDEVICE/FILE LUTDCB„DS.Lƒ1’ADDRESSOFDCB/FCB!LUTSEG„EQU„*’LENGTHOFEACHENTRY *Ç*‚LUTCSFBITEQUATES(8BITS)*ÇLUSFAC„EQU„0’ACTIVELUSFIO„EQU„1’I/OPENDINGLUSFCP„EQU„2’CLOSEPENDINGLUSFAS„EQU„3’ASSIGNPENDINGLUSFCW„EQU„4’CONNECTIONWAIT*LUSEVC„EQU„5’DRIVEREVENTSCLAIMEDIEEE488LUSFDV„EQU„7’DEVICEASSIGNMENT *À***********5*‚DEVICECONNECTQUEUE(DCQ)DATASTRUCTURE•*‚DCQ‚* *À*********** ŠOFFSET0’STARTWITHZEROOFFSET#DCQPTR„DS.Lƒ1’POINTERTONEXTTABLE'DCQNXT„DS.Lƒ1’POINTERTONEXTDCBENTRYDCQDCB„DS.Lƒ1’ADDRESSOFDCBDCQLUT„DS.Lƒ1’ADDRESSOFLUT"DCQLUE„DS.Lƒ1’ADDRESSOFLUNENTRY%DCQLAD„DS.Lƒ1’LOGICALADDRESSOFIOCBDCQTIN„DS.Bƒ1’TRAPINDICATORDCQRES„DS.Bƒ1’RESERVEDBYTE$DCQPLN„DS.Bƒ1’PARAMETERBLD OCKLENGTHDCQPRI„DS.Bƒ1’PRIORITY DCQLEN„EQU„************************ Ending of &.NIO.EQ ***********************‰PAGE**************************** Beginning of &.PANEL.EQ ******************************‰FRONTPANELEQUATES* ŠOFFSET00FPDMPTST‚DS.Wƒ1’MEMORYDUMP,ENABLE,SYSTEMTESTFPTTO…DS.Wƒ1’TESTTIME-OUTFPLEDSTƒDS.Wƒ1’LEDSTATUS************************* Ending of &.PANEL.EQ *************************ééééé鉊PAGE************************** Beginning of &.PAT.EQ ****************************ˆPERIODICACTIVATIONTABLE*!ŠOFFSET0’THISISANOFFSETTABLEPAT‡DS.Lƒ1’!PAT„DEBUGTOOL0PATFHDRƒDS.Lƒ1’ADDRESSOF1STENTRYINFREELIST*PATHDR„DS.Lƒ1’Addressof1stentryinlist9PATTSIZƒDS.Lƒ1’SizeofPeriodicActivationtableinbytes =PATBABTƒDS.BƒBABBLNŽSpaceforBABusedtoscheduleroutineto*¤firePATnodes $PATENTRY‚EQU„*’OFFSETTOFIRSTENTRY**ˆPATENTRYDEFINITION*&ŠOFFSET0’OFFSETISFROMENTRYPOINTER,PATNEXTƒDS.Lƒ1’POINTERTONEXTENTRYINLISTPATOCMSK‚EQU„$0202ŽMASKFORBOTHPATOCANCANDPATOFINLOPTE ION.*9PATBIGDELTAEQU‚$7FFFFFFFŠBigdeltavaluefordummynodes*PATDUMMYIDEQUƒ$FFFFFFFEŠIDfordummynodePATDATEIDEQU„$FFFFFFFF* Macro *Entry:‚A1…pointstoPATheader"*‰A2…pointstoentrytoberemoved>*Exit:ŠNoregistersaltered,PATnodepointedatbyA2nowin *“freequeue.*PAT_FREE_NODE MACROŠMOVE.LPATFHDR(A1),PATNEXT(A2)ŠMOVE.LA2,PATFHDR(A1)ŠENDM*********************** Ending of &.PAT.EQ ***********************’A‰PAGE************************** Beginning of &.RAD.EQ **************************K*==========================================================================**ˆEQUATEFILEFORRAD1TABLE*K*==========================================================================*'*ˆTheRAD1tableconsistsof4parts--8*’(1)‚The"header",whichcontainsvariousconstantsand'*œpointerstootherpartsofthetable.9*’(2)‚RAUSRLST,whichisatableofuser-RADcombinations2*œforkeepingtrackofwhichusersareusingwhich*œRADsandviceversa.6*’(3)‚RARADLST,whichisatableofRADsshowingwhich)*œchannelsareassigned,RADstatus,etc.@*and‚(4)‚RATEMP,whichisasectionofmemorytobeusedbythe**œdriverfortemporaryorworkingstorage.*K*==========================================================================**ƒHeaderareaequates...*4RARADTBL‚EQU„0’Startoftablearea,setto"!RAD"as*£an"eye-catcher".FRARADLAD‚EQU„RARADTBL+4†OffsettostartofRARADLSTintheRAD1table.6RARADUSD‚EQU„RARADLAD+2‰#ofRADsinRARADLSTalready.9RANUMRAD‚EQU„RARADUSD+1‰#ofRADsdefinedinthissystem.RAUSRLST‚EQU„RAHDRLNG‹RAUSRLSTalwaysstartsimmediatelyafter*£theheaderarea./RAUUSRNO‚EQU„0’Offsetintotableentryfortask*£name/session#.;RAURADID‚EQU„RAUUSRNO+8‰OffsetintotableentryforRAD-ID.8RAUSTATƒEQU„RAURADID+4‰Offsetintotableentryfor"RAD-&*£aborted/restarted"flag.‚(Usedtobe(*£sureallusersofaRADare"informed"*£ofabortorrestart.)7RAUEROPT‚EQU„RAUSTAT+2ŠError-notificationoptionsflag.;RAUERSTO‚EQU„RAUEROPT+2‰Error-notificationstorageaddrfor *£errorcode.;RAUERSUB‚EQU„RAUERSTO+4‰Error-notificationsubroutineaddr.›3¤5RAULNG„EQU„RAUERSUB+4‰LengthofanentryinRAUSRLST.**ƒRARADLSTequates...*)RARADLID‚EQU„0’OffsetinentrytoRAD-ID.>RARDSTAT‚EQU„RARADLID+4‰OffsetintotableentryforRADstatus*£flag.‰PAGE****************************** Beginning of &.SCN2681.EQ ****************************** H*‚TheSigneticsSCN2681DualUniversalAsynchronousReceiver/TransmitterB* (DUART) is a single-chip communications device that provides twoG* independent full-duplex asynchronous receiver/transmitter channels inA*asingle-package.‚Eachchannelcanbeprogrammedindependently. G*‚ChannelAisaddressedbeginningatthebaseofthememory-mappedI/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*otherregisterscanbeaccessedfromjustonechannel.‚Theoffsetsto-* the individual registers are defined below. ‰OFFSET„0*=*ˆArrangementofregistersoffmemory-mappedI/Obaseaddress*MREG1„EQU0‰ModeRegister1MREG2„EQU0‰ModeRegister2!SREG…EQU2‰StatusRegister(read)(CSEL…EQU2‰ClockSelectRegister(write)CREG…EQU4‰CommandRegister0DREG…EQU6‰Receiver/TransmitterHoldingRegisterO*------------------------------------------------------------------------------5IPCR…EQU8‰InputPortChangeRegister(read)‚-Aside5ACR†EQU8‰AuxiliaryControlRegister(write)-Aside4ISR†EQU10ˆInterruptStatusRegister(read)ƒ-Aside3IMR†EQU10ˆInterruptMaskRegister(write)„-Aside7OPSR…EQU28ˆOutputPort'Set'ƒRegister(write)-Bside9OPRR…EQU30ˆOutputPort'Reset'Register(write)-Bside SPC 3*+*ˆModeRegister1fielddefinitions(MREG1)* :*ˆMREG1isaccessedwhenthechannelmoderegisterpointer-*ˆpointstoMREG1whichoccursafterareset. F* Number of data bits per character to be transmitted & received [1:0]*DTBPC5ƒEQU%00000000‡5databits/character*DTBPC6ƒEQU%00000001‡6databits/character*DTBPC7ƒEQU%00000010‡7databits/character*DTBPC8ƒEQU%00000011‡8databits/character * Parity type select [2]PARODDƒEQU%00000100‡Odd‚parityÎ2×:ß6ç2ï) PAREVNƒEQU%00000000‡Evenparity * Parity mode select [4:3]"PARENBƒEQU%00000000‡Enableparity!PARFRCƒEQU%00001000‡Force‚parityPAROFFƒEQU%00010000‡No…parity+PARMLTƒEQU%00011000‡SpecialMulitdropMode PAGE/* Error mode for the three FIFG O status bits [5]=EMBLCKƒEQU%00100000‡Statusprovidedforallcharsincereset1EMCHARƒEQU%00000000‡Statusprovidedchar-by-char * Receiver interrupt select [6]5RXIFFFƒEQU%01000000‡InterruptsuponFIFOfullstatus:RXIRDYƒEQU%00000000‡Interruptsuponreceiverreadystatus &* Receiver Request-to-send control [7]6CRXRTSƒEQU%10000000‡UseRTSANoutputforflowcontrol SPC 3*+*ˆModeRegister2fielddefinitions(MREG2)* :*ˆMREG2isaccessedwhenthechannelmoderegisterpointer9*ˆpointstoMREG2whichoccursafteranyaccesstoMREG1. 5* Stop bit length select for char lengths 6,7,8 [3:0]"SB09_16‚EQU00.563stopbits/char"SB10_16‚EQU10.625stopbits/char"SB11_16‚EQU20.688stopbits/char"SB12_16‚EQU30.750stopbits/char"SB13_16‚EQU40.813stopbits/char"SB14_16‚EQU50.875stopbits/char"SB15_16‚EQU60.938stopbits/char"SB16_16‚EQU71.000stopbits/char"SB25_16‚EQU81.563stopbits/char"SB26_16‚EQU91.625stopbits/char#SB27_16‚EQU10Ž1.688stopbits/char#SB28_16‚EQU11Ž1.750stopbits/char#SB29_16‚EQU12Ž1.813stopbits/char#SB30_16‚EQU13Ž1.875stopbits/char#SB31_16‚EQU14Ž1.938stopbits/char#SB32_16‚EQU15Ž2.000stopbits/charSB1†EQUSB16_16‰1stopbit/char SB2†EQUSB32_16‰2stopbits/char 5*ˆNOTE:Add0.5tovaluesshownfor0-7ifchannelis!*ˆprogrammedfor5bits/character * Clear-to-send control [4]9CTXCTSƒEQU%00010000‡CTSANischeckedbeforetransmitting )* Transmitter request-to-send control [5]>CTXRTSƒEQU%00100000‡RTSANdeactivatediftransmitterdisabled * Channel mode select [7:6]*TheyareclearedwhentheIPCRisread.‚Theycangeneratean#* interrupt when programmed by ACR./DELIP0ƒEQU4(1)changeofstateatIP0detected/DELIP1ƒEQU5(1)changeofstateatIP1detected/DELIP2ƒEQU6(1)changeofstateatIP2detected/DELIP3ƒEQU7(1)changeofstateatIP3detected PAGE*;*ˆInterruptStatus/MaskRegistersbitdefinitions(ISR,IMR)* >* Setting a bit in the IMR causes an interrupt output when the%* correspnding bit is set in the ISR. (CLRTBEƒEQU0BittoclearTBEinterrupt.(CLRRCAƒEQU1BittoclearRCAinterrupt.(CLRBCIƒEQU2BittoclearBCIinterrupt.(CLRIP2ƒEQU3BittoclearIP2interrupt. SPC 3*1*ˆOutputPortSetandResetRegisters(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*AwritetoOPRRsetsRTSlow:‚useOP0forportAandOP1forportB.RTSAONƒEQU$01RTSBONƒEQU$02RTSAOFF‚EQU$55RTSBOFF‚EQU$AA*************************** Ending of &.SCN2681.EQ ***************************éé‰PAGE************************** Beginning of &.SEG.EQ ***************************/*ˆSEGMENTDIRECTIVEPARAMETERBLOCKDEFINITIONS*!ŠOFFSET0’THISISANOFFSETTABLE"SGPB†EQU„*’SEGMENTPARAMETERBLOCK SGPBTASK‚DS.Lƒ1’TARGETTASKNAMEH (SGPBSESS‚DS.Lƒ1’TARGETTASKSESSIONCODE SGPBOPTƒDS.Wƒ1’DIRECTIVEOPTIONS0SGPBATTR‚DS.Wƒ1’SEGMENTATTRIBUTES(SEETSTSTAT)SGPBNAME‚DS.Lƒ1’SEGMENTNAME%SGPBLA„DS.Lƒ1’SEGMENTLOGICALADDRESS%SGPBSL„DS.Lƒ1’SEGMENTLENGTHINBYTES,SGPBBUFF‚DS.Lƒ1’BUFFERADDRESSUSEDBYRCVSA*SGPBL…EQU„*’SEGMENTPARAMETERBLOCKLENGTH*#*„DIRECTIVEOPTIONSBITDEFINITIONS*;SGPBOATR‚EQU„15‘SEGMENTATTRIBUTESGIVENINPARAMETERBLOCK8SGPBOLAD‚EQU„14‘LOGICALADDRESSGIVENINPARAMETERBLOCK;SGPBOPAD‚EQU„13‘EXECSUPPLIESLOGICALADDRESS(=PHYSADDR)0SGPBOPRM‚EQU„12‘MAKESHAREABLESEGMENTPERMANENT:SGPBORMV‚EQU„11‘REMOVEPERMANENTSTATUSFROMSHAREABLESEG;SGPBOLNG‚EQU„10‘USESEGMENTLENGTHGIVENINPARAMETERBLOCK8SGPBOWAI‚EQU„10‘WAITIFMEMORYNOTAVAILABLENOW(GTSEG):SGPBOLES‚EQU„09‘WILLSETTLEFORLESSMEMORYTHANREQUESTED,SGPBOPHY‚EQU„08‘ALLOCATEATPHYSICALADDRESS2SGPBOTYP‚EQU„07‘MEMORYTYPEORPARTITIONSPECIFIED*********************** Ending of &.SEG.EQ ***********************ééé÷"‰PAGE****************************** Beginning of &.SIG2661.EQ *******************************‰TTL„SIG2661CHIPDESCRIPTION ŠOFFSET0*>*‚Arrangementofregistersoffmemory-mappedI/Obaseaddress.*CREG†EQU„6’Commandregister.SREG†EQU„2’Statusregister.DREG†EQU„0’Dataregister.MREG1…EQU„4’Moderegister1MREG2…EQU„4’Moderegister2 L*****************************************************************************(*‚Statusregisterbitdefinitionsƒ(SREG)*TXRDY…EQU„0’transmitterreadyRXRDY…EQU„1’receiverreadyDNR‡EQU„2’devicenotreadyPEˆEQU„3’parityerrorDOVR†EQU„4’dataoverrunFEˆEQU„5’framingerrororbreak(*£framingerrorifdatainreadregister*£breakifreadregisteris0DCD‡EQU„6’datacarrierdetectDSRB†EQU„7’datasetready**K****************************************************************************)*‚Commandregisterbitdefinitions‚(CREG)*TXEN†EQU„0’enabletransmitter!DTR‡EQU„1’setdataterminalreadyRXEN†EQU„2’enablereceiverFBˆEQU„3’forcebreak1ERRSET„EQU„4’reseterrorflagsinstatusregisterRTS‡EQU„5’requesttosendAAˆEQU„6’async:autoechomodeASˆEQU„7’asycnmode**N*******************************************************************************)*‚Moderegister2bitdefinitions(MREG2)*-*ˆbaudratebitsdefinedelsewhere(bits0-3)**„%1111xxxxfielddefinition*4ITCX16„EQU„%01110000Šinternalclocks,x16clockrate**O*********************************************************************************)*‚Moderegister1bitdefinitions‚(MREG1)*:*„%XXXXXX11‚fielddefinitionformodeandbaudratefactor**ASY16X„EQU„%00000010Šasynchronous16xrate*1*„%xxxx11xx‚fielddefinitionforcharacterlength*'BIT5†EQU„%00000000Š5bitspercharacter'BIT6†EQU„%00000100Š6bitspercharacter'BIT7†EQU„%00001000Š7bitspercharacter'BIT8†EQU„%00001100Š8bitspercharacter*'*…%xx11xxxx‚fielddefinition‚forparity*!PENBL…EQU„%00010000ŠparityenableH  K (PTYPE…EQU„%00100000Šparitytypeeven/odd*/*‰%11xxxxxxfielddefinitionfor#ofstopbits*SB1‡EQU„%01000000Š1stopbit SB15†EQU„%10000000Š1.5stopbitsSB2‡EQU„%11000000Š2stopbits**************************** Ending of &.SIG2661.EQ ***************************éééééé‰PAGE************************** Beginning of &.SPL.EQ ***************************5******************************************************‚SPOOLEREQUATEFILE-*‚CONTAINSMACROSFORFMSINTANDALLINTERNAL*‚SPOOLEREQUATES5*******************************************************ŠMACROSFORSPLFMS(FMSINT)** SFHSCO PARAMETERS: * 1. COMMAND * 2. OPTIONS0*3.ADDRESSREGISTER(->‚FHSPARAMETERBLOCK)*>SFHSCO„MACRO‚*ŽSETSCOMMANDANDOPTIONSINFHSPARAMETERBLOCKŠMOVE.L#((\1)*$10000)+\2,(\3)ŠENDM** SIOSCO PARAMETERS: * 1. COMMAND * 2. OPTIONS0* 3. ADDRESS REGISTER ( -> IOS PARAMETER BLOCK )*>SIOSCO„MACRO‚*ŽSETSCOMMANDANDOPTIONSINIOSPARAMETERBLOCKŠ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‚*’SETSFILEATTRIBUTESFORFHSALLOCATECALLŠOR.Wƒ#\1,FHSOPT(\5)…OPTIONSŠIFNEƒ\2$MOVE.W#\2,FHSLRL(\5)…RECORDLENGTHŠENDCŠIFEQƒ\2CLR.W‚FHSLRL(\5)ŠENDC<ŠMOVE.L#(\4)*$10000+\3,FHSSIZ(\5)KEY,FAB,DATABLOCKSIZEŠENDM*ŠPAGE**‚SPOOLERQUEUEENTRYSTRUCTURE* ŠOFFSET0"QDEVICEƒDS.Lƒ1’DEVICENAME(ASCII)/QFORMS„DS.Lƒ1’FORMSIDDEFAULT='STND'ƒ(ASCII)QVOL†DS.Lƒ1’VOLUMENAME“(ASCII)"QUSERN„DS.Wƒ1’USERNUMBER‘(BINARY)"QCATLG„DS.Lƒ2’CATALOGNAME(ASCII)QFILEN„DS.Lƒ2’FILENAME”(ASCII)QEXT†DS.Wƒ1’EXTENSION•(ASCII)QTASKN„DS.Lƒ1’TASKNAME“(ASCII)#QSESS…DS.Lƒ1’SESSIONNUMBER(ASCII)!QJOBID„DS.Lƒ1’JOBNUMBER’(BINARY)"QPRI†DS.Bƒ1’TASKPRIORITY‘(BINARY)#QLUN†DS.Bƒ1’LUNFOROUTPUT(BINARY)QDATE…DS.Lƒ1’DATE™(BINARY)QTIME…DS.Lƒ1’TIMI E™(BINARY)-QSIZE…DS.Lƒ1’FILESIZE-#OFBLOCKS†(BINARY)QSTAT…DS.Bƒ1’STATUS—(BINARY).QCOPYS„DS.Bƒ1’#OFCOPIESDEFAULT=1…(BINARY) QLNG†EQU„***‚QSTATBITDEFINITIONS*+QSTATRDY‚EQU„0’READYTOOUTPUTSPOOLERFILE L 7 "C *N 2 HQSTATACT‚EQU„1„ACTIVE-SPOOLERFILEASSIGNEDANDALLOCATEDFORUSERINPUT-QSTATOUT‚EQU„2’BEINGOUTPUTTOSPOOLERDEVICE4QSTATWAT‚EQU„3’MUSTWAITFORACONTINUETOBEISSUED1QSTATFRM‚EQU„4’CAN'TOUTPUT-NOTMATCHINGFORMSIDCQSTATIOE‚EQU„5‰IOERRORONOUTPUTFOUND,WAITFORCONTINUEORCANCEL+QSTATCAN‚EQU„6’CANCELANENTRYBEINGOUTPUT7QSTATOAA‚EQU„7’BEINGOUTPUTANDACTIVE(FILENOTCLOSED)*?*‚ENTRYSTRUCTUREOFRESERVEDRECORDSINTHESPOOLERQUEUEFILE3*ˆ(RECORDS0-8)(RECORD9CONTAINSLASTJOBNUMBER)* ŠOFFSET0RDEV†DS.Lƒ1’DEVICENAME…(ASCII)RFRM†DS.Lƒ1’FORMSID‡(ASCII)HRSTAT…DS.L‚1STATUS‚0=OKTOOUTPUT‚-1=FORMSWASISSUED,WAITFORCONTINUERLNG†EQU„*’ENTRYLENGTH-RREC†EQU„QLNG/12ŒNUMBEROFENTRIESPERRECORD**‚MISCEQUATES*USER0…EQU„0’USERNUMBER0FOUT†EQU„3’LUNFOROUTPUTFILE DOUT†EQU„4’LUNFOROUTPUTDEVICE3BLANK…EQU„$20202020ŠBLANKS-USEFORPARAMETERBLOCKS0ENTRYLNG‚EQU„FHSNLN+EVTLEN†LENGTHOF1ASQENTRYCRˆEQU„$0DCARRIAGERETURNCODELFˆEQU„$0ALINEFEEDCODESPOOLF„EQU„$40'@'&MYSES…EQU„1’.SPLSESSIONNUMBERNUMBER?BUFADR„EQU„$20000‹SEGMENTSTARTADDRESSFORNON-SPOOLERFILEIO@BUFLNG„EQU„$A00ŠSEGMENTLENGTH(CHANGESBYSUBTASKIFTOOSMALL)?REGOFF„EQU„50‹OFFSETTOREGISTERSINSTARTTASKPARAMETERBLOCK&FOUR†EQU„4’OFFSETOF4FORREGISTERA1**‚SPLFLGBITDEFINITIONS*9EOF‡EQU„0ŽFOUNDANENDOFFILEONREADSPOOLERQUEUEFILE"PRNTER„EQU„1’DOINGIOTOAPRINTER*NOTSPL„EQU„2’OUTPUTTINGANON-SPOOLERFILE!PIOF†EQU„3’PROCEEDIOINPROGRESS-IOERRF„EQU„4’IOERRORFOUNDDURINGPROCEEDIO$RDYERR„EQU„5’OUTPUTDEVICENOTREADY*1*‚SPLFLG1BITDEFINITIONS-USEDBYQUEUECOMMAND*$OUTDEV„EQU„0’OUTPUTMATCHINGDEVICES(OUTUSN„EQU„1’OUTPUTMATCHINGUSERNUMBER+OUTSES„EQU„2’OUTPUTMATCHINGSESSIONNUMBER OUTALL„EQU„3’OUTPUTENTIREQUEUE**‚BITDEFINITIONSFORSUBTRERR*'RDERR…EQU„0’IOERRORFOUNDONFILEREAD+WRTERR„EQU„1’IOERRORFOUNDONDEVICEWRITE?HDRERR„EQU„2‹IOERRORFOUNDONDEVICEWRITE-OUTPUTTINGHEADER?TERMERRƒEQU„3ŒTERMINATETHESUB-TASKANDSETTOFILENOTOUTPUT*A*‚SUB-TASKEVENTSTRUCTUREFORSENDINGIOERROREVENTSTOMONITOR* ŠOFFSET0 IOERLNGƒDS.Bƒ1’EVENTLENGTHƒ(12)IOERCDEƒDS.Bƒ1’EVENTCODE„(32)+IOERMSGƒDS.Wƒ1’EVENTMESSAGE(SUBTERRWORD)(IOERD0„DS.Lƒ1’CONTENTSOFDOONIOERRORIOERNAMƒDS.Lƒ1’SUBTASKNAME*%SUBTELNG‚EQU„12‘SUB-TASKEVENTLENGTH#SUBTECDE‚EQU„32‘SUB-TASKEVENTCODE*SPLECDEƒEQU„33‘.SPLEVENTCODETOSUB-TASK*.*ˆERRORMESSAGEHANDLERPARAMETRBLOCKOFFSETS* ŠOFFSET0#EM_D0…DS.Lƒ1’D0IOS/FHSRETURNCODE/EM_A0…DS.Lƒ1’A0IOS/FHSPARAMETERBLOCKADDRESSEM_OPT„DS.Bƒ1’OPTIONSFLAGEM_TLUNƒDS.Bƒ1’LDFLUN$EM_QRC„DS.Bƒ1’QUERYRETURNCHARACTEREM_KLUNƒDS.Bƒ1’CDFLUN(EM_SPA„DS.Lƒ1’STARTADDRESSOFUSERTEXT&EM_EPA„DS.Lƒ1’ENDADDRESSOFUSERTEXTŠPAGE*CMNˆEQU„$FFFFFF00ƒUSEDFORMOVE.L$80-$FFTOGEN2BYTEINSTRUCTIONS*%*‚SPLOOLERQUEUEENTRYRECORDEQUATES*+LINEBL„EQU„QLNGRECORD'SLINEBUFFERLENGTHKEYSIZ„EQU„0’NULLKEYS#VRLFIL„EQU„QLNGFIXEDRECORDLENGTH'MXRECL„EQU„LINEBLMAXIMUMRECORDLENGTH**‚FILENAMEEQUATES*4FILNML„EQU„24‘FULLYQUALIFIEDFILENAMEFIELDLENGTH**‚DATABLOCKEQUATES*BDEFSIZ„EQU„$108ˆ1SECTORFAB/8SECTORDATABLK(DEFAULTALLOCATION)$DBMAX…EQU„20‘MAXIMUMDATABLOCKSIZE*:*‚FMSLOGICALADDRESSESFORSEGMENTSTOBEUSEDASBUFFERS*IFMSDBA„EQU„$10000LOGICALBUFFERSTARTFORFILEDATABLOCK(SHAREDW/FMS)NFMSSRA‚EQUFMSDBA+DBMAX*$100BUFFERSTARTFORSOURCEFILEDBOREXTRACTBUI FFER**‚DEFINEDATALAYOUTS*:*‚********************************************************;*‚FMSINTPARAMETERBLOCK(USEDBETWEENFMSINTANDSPOOLER)::*‚*********************************************************1ŠOFFSET0’POINTEDTOBYA3(A0ONCALLTOFMSINT)*FMSTAT„DS.Bƒ1’STATUSFMSCMD„DS.Bƒ1’COMMANDFMSREC„DS.Lƒ1’LRN7FMSBUF„DS.Lƒ1’FWAOFLINEBUFFER,POINTERTOFILENAMES$FMSRECNƒDS.Wƒ1’#OFRECORDSAFFECTED*FMSEFS„DS.Bƒ1’FILESTATUS*=EFSCHG„EQU„1FILESTATUSCHANGED(EDITFILE.NE.OUTPUTFILE)* FMSOFS„DS.Bƒ1’OUTPUTFILESTATUS*&OFSDEL„EQU„1’OUTPUTFILESTATUSDELETE**!*‚********************************‚FILENAMEPARAMETERS!*‚********************************)ŠOFFSET0’POINTEDTOBYFMSBUFINOPENCMD*FLNM1…DS.BƒFILNMLFULLYQUALIFIEDFILENAMEŠDS.Wƒ1’RESERVEDŠDS.Wƒ1’READ/WRITECODES:OFSTAT„DS.Bƒ1ŽOUTPUTFILESTATUS„0=FILENAME1ISFOROUTPUTŠDS.Wƒ1’READ/WRITECODESŠPAGE**‚***************************‚MAPFORFMSINTSCRATCHPAD*‚***************************(ŠOFFSET0’POINTEDTOBYA6DURINGFMSINT**‚MAPFORUNINITIALIZEDDATA*EOFLRN„DS.Lƒ1’FILE'SLASTLRNEFLUN…DS.Bƒ1’FILELUNEFFLG…DS.Bƒ1’FILEFLAG'* EFFLG = 0 => 'FILENAME1' IS EDIT FILE**LRECBA„DS.Lƒ1’LASTRECORD'SBUFFERADDRESS*%OUTRCZ„DS.Wƒ1’OUTPUTFILERECORDSIZE"OUTKYZ„DS.Bƒ1’OUTPUTFILEKEYSIZE"SRCKYZ„DS.Bƒ1’SOURCEFILEKEYSIZE'SRCRCZ„DS.Wƒ1’SOURCEFILERECORDLENGTHSRCDBE„DS.Lƒ1’BUFFEREND SRCDBL„DS.Lƒ1’BUFFERLOGICALEND*?DATASGLƒEQU„*ŒENDOFUNINITIALIZEDDATA(ZEROEDOUTBYOPENCMD)**‚MAPFORINITIALIZEDDATA*.SRCDBS„DS.Lƒ1’SOURCEFILELOGICALBUFFERSTART*;LRECRD„DS.Lƒ1LRNOFLASTRECORDREAD(-1IFNONEAVAILABLE)*5STKPTR„DS.Lƒ1’STACKPOINTERFORABORTFROMSUBROUTINE****‡FMSINTCOMMANDEQUATES*#OPENCMDƒEQU„1’FMS-OPENFILECOMMAND#RDCMD…EQU„2’FMS-READRECORDCOMMAND&DELCMD„EQU„3’FMS-DELETERECORDCOMMAND(INSRTCMD‚EQU„4’FMS-INSERTRECORDCOMMAND(REPLCMDƒEQU„5’FMS-REPLACERECORDCOMMANDŠPAGE*.*ˆOFFSETSUSEDBYASPAWNEDSUB-TASKDOINGTHE*ˆACTUALSPOOLEROUTPUT* ŠOFFSET0 DATAST„EQU„*SCRATCHS‚DS.Bƒ154SCRATCHAREAŠDS.Bƒ200STACK STACK…EQU„*&FHSPBS„DS.BƒFHSNLNFHSPARAMETERBLOCK&IOSPBS„DS.BƒIOSBLNIOSPARAMETERBLOCK#SPLQNS„DS.Lƒ2’TASKNAMEANDSESSIONSPLFLGSƒDS.Bƒ2’FLAGSSUBTERRƒDS.Wƒ1’ERRORFLAGSCURRECSƒDS.Lƒ1’CURRENTRECORD)QEVTS…DS.BƒENTRYLNG‹EVENTPARAMETERBLOCK(QBUFS…DS.BƒQLNGQUEUEENRTYBEINGOUTPUT BUFEND„DS.Lƒ1’BUFFERENDADDRESS)SBUFSA„DS.Lƒ1’SHAREDBUFFERSTARTADDRESS'SBUFEA„DS.Lƒ1’SHAREDBUFFERENDADDRESS/CURPT…DS.Lƒ1’CURRENTPOINTERINTOSHAREDBUFFERSAVLNG„DS.Lƒ1’BUFFERSIZEFOPT†DS.Wƒ1’OUTPUTFILETYPE1BUFSTRTƒDS.Lƒ1’NON-SPOOLERFILEDATAAREAADDRESS DATALNGƒEQU„************************ Ending of &.SPL.EQ ***********************ééééJ éé‰PAGE*************************** Beginning of &.SRVR.EQ *****************************‰SERVEREQUATES*!*‰TYPE7MESSAGE(SERVERREQUEST)* ŠOFFSET0TYP7SIZE‚DS.Bƒ1’MESSAGELENGTH'TYP7CODE‚DS.Bƒ1’MESSAGETYPECODE($07)ATYP7TRAP‚DS.Bƒ1ŒTRAPNUMBER(BIT7=SYSTSK;6=TERMMSG;5=LASTTSK)TYP7PRIO‚DS.Bƒ1’PRIORITYTYP7TASK‚DS.Lƒ1’TASKNAMETYP7SESS‚DS.Lƒ1’SESSIONTYP7USER‚DS.Wƒ1’USERNUMBERTYP7D0„DS.Lƒ1’REQUESTOR'SD0TYP7A0„DS.Lƒ1’REQUESTOR'SA0&TYP7PBST‚DS.Bƒ1’PARAMETERBLOCKSTATUS$TYP7PBSZ‚DS.Bƒ1’PARAMETERBLOCKSIZE'TYP7PBLK‚EQU„*’STARTOFPARAMETERBLOCK**ˆPARAMETERBLOCKSTATUSCODES**T7STPMOV‚EQU„0’TOTALPARAMETERBLOCKMOVED,T7STPART‚EQU„1’PARTOFPARAMETERBLOCKMOVED*T7STPADR‚EQU„2’BADPARAMETERBLOCKADDRESS,T7STNORQ‚EQU„3’PARAMETERBLOCKNOTREQUESTED**…BITSSETINTYP7TRAPFIELD*2TYP7TSYS‚EQU„7’TASKSENDINGMESSAGEISSYSTEMTASK-TYP7TTRM‚EQU„6’MESSAGEISTERMINATIONMESSAGE+TYP7TLST‚EQU„5’TASKISLASTTASKINSESSION7TYP7TRTT‚EQU„4’TASKSENDINGMESSAGEISAREALTIMETASK*"*OPTIONSAVAILABLEONACKNOWLEDGE*-TACKOSCC‚EQU„14‘SETCONDITIONCODESONRETURN TACKOSD0‚EQU„13‘DETD0ONRETURN TACKOSA0‚EQU„12‘SETA0ONRETURNTACKORDY‚EQU„11‘READYTHETASK%TACKOWTƒEQU„10‘PUTTASKINWAITSTATETACKOSPD‚EQU„9’SUSPENDTHETASK,TACKOTRM‚EQU„8’SPECRESPONSETOTERMREQUEST************************ Ending of &.SRVR.EQ ************************éé :1‰PAGE************************** Beginning of &.STR.EQ ************************** ŠLLENƒ120**†GENERALEQUATES*"TRMODE„EQU„15‘TRACEMODEBITINSR'SRMODE„EQU„13‘SUPERVISERMODEBITINSRBMULTPROC‚EQU„0ŠCONDASSEMBLYFLAG(MULTIPLEPROCESSORS)1=ON0=OFFASHARMEMƒEQU„1ŠCONDASSEMBLYFLAG(MEMORYSHAREDBYMULTIPLEPROC)CWAITMEMƒEQU„1ˆCONDASSEMBLYFLAG(WAITFORMEMORYOPTIONAVAILABLE):EXECPRIO‚EQU„240PRIORITYSETWHENEXECROUTINESRESTARTED6HIBIT…EQU„15‘HIGHORDERBITNUMBER-USEDINBITTESTS**ŠSECTIONNUMBERSFORLEVELS* LVLBASEƒEQU„2LEVEL00ƒEQU„LVLBASE+0LEVEL01ƒEQU„LVLBASE+1LEVEL02ƒEQU„LVLBASE+2LEVEL03ƒEQU„LVLBASE+3LEVEL04ƒEQU„LVLBASE+4LEVEL05ƒEQU„LVLBASE+5PATCHESƒEQU„15*(*†TRACEFLAGS-SETINTRACFLAG(SYSPAR)*#TRCFTRP1‚EQU„15‘SETTOTRACETRAP1%TRCFIO„EQU„14‘SETTOTRACEINTERRUPTS-TRCFTIMR‚EQU„13‘SETTOTRACETIMERINTERRUPTS.TRCFTRAP‚EQU„12‘SETTOTRACEUSERTRAPS(2-15)'TRCFEXCP‚EQU„11‘SETTOTRACEEXCEPTIONS'TRCFDSPT‚EQU„10‘SETTOTRACEDISPATCHES2TRCFUIOƒEQU„9’SETTOTRACEUSERCLAIMEDINTERRUPTS.TRCFMMUƒEQU„8’SETTOTRACERETURNFROMLOADMMU/TRCFSINT‚EQU„7’SETTOTRACESIMULATEDINTERRUPT.TRCFSYSF‚EQU„6’SETTOTRACESYSFAILINTERRUPTSŠPAGE**ˆTRAP1EQUATJ ES*T10‡EQU„0’NODIRECTIVET1GTSEGƒEQU„1’ALLOCATESEGMENT T1DESEGƒEQU„2’DEALLOCATESEGMENTT1TRSEGƒEQU„3’TRANSFERSEGMENT'T1ATTSEG‚EQU„4’ATTACHSHAREABLESEGMENT*T1SHRSEG‚EQU„5’GRANTSHAREDSEGMENTACCESS'T1MOVELL‚EQU„6’MOVEDATABETWEENSPACES(T1DCLSHR‚EQU„7’DECLARESEGMENTSHAREABLE)T1SNAPTRACEQUƒ8’MOVETRACETABLETOUSER(T1RCVSAƒEQU„9’RECEIVESEGMENTATTRIBUTEST1GTTIDƒEQU„10‘GETTASKIDT1CRTCBƒEQU„11‘CREATETCBT1GTTNAMEEQU„12‘GETTASKNAMET1STARTƒEQU„13‘STARTTASK T1ABORTƒEQU„14‘ABORTTASK(SELF)#T1TERM„EQU„15‘TERMINATETASK(SELF)(T1TERMTƒEQU„16‘TERMINATETASK(NOTSELF)#T1SUSPND‚EQU„17‘SUSPENDTASK(SELF)%T1RESUME‚EQU„18‘RESUMESUSPENDEDTASK)T1WAIT„EQU„19‘TASKBECOMESBLOCKED(SELF) C? L@ T3 \™ d„ l-%T1WAKEUP‚EQU„20‘WAKEUPAWAITINGTASK0T1DELAYƒEQU„21‘DELAYSOMENUMBEROFMILLISECONDS$T1RELINQ‚EQU„22‘RELINQUISHEXECUTION'T1TSKATTREQU„23‘RETURNTASKATTRIBUTES$T1SETPRI‚EQU„24‘SETCURRENTPRIORITYT1STOP„EQU„25‘STOPRUNNINGTASK4T1EXPVCT‚EQU„26‘SAVETASK'SEXCEPTIONVECTORADDRESS/T1TRPVCT‚EQU„27‘SAVETASK'STRAPVECTORADDRESS)T1TSKINFOEQU„28‘MOVETASKINFOTOCALLER+T1RQSTPA‚EQU„29‘REQUESTPERIODICACTIVATION'T1DELAYW‚EQU„30‘DELAYWITHWAITOPTIONST1GTASQƒEQU„31‘ALLOCATEANASQT1DEASQƒEQU„32‘DEALLOCATEASQT1SETASQ‚EQU„33‘SETASQSTATUS#T1RDEVNT‚EQU„34‘READEVENTFROMASQ!T1QEVNTƒEQU„35‘QUEUEEVENTTOASQT1WTEVNT‚EQU„36‘WAITFOREVENT!T1RTEVNT‚EQU„37‘RETURNFROMEVENTT1GTEVNT‚EQU„38 T139†EQU„39 T140†EQU„40"T1ATSEMƒEQU„41‘ATTACHTOSEMAPHORE T1WTSEMƒEQU„42‘WAITONSEMAPHORET1SGSEMƒEQU„43‘SIGNALSEMAPHORET1DESEMƒEQU„44‘DETACHSEMAPHORET1CRSEMƒEQU„45‘CREATESEMAPHORE3T1DESEMA‚EQU„46‘DETACHALLSEMAPHORESFORTHISTASK T147†EQU„47 T148†EQU„48 T149†EQU„49 T150†EQU„50.T1SERVER‚EQU„51‘ESTABLISHSERVERFORUSERTRAP+T1DSERVE‚EQU„52‘DETACHFROMSERVERFUNCTION.T1DERQST‚EQU„53‘SETUSER/SERVERREQUESTSTATUS+T1AKRQST‚EQU„54‘ACKNOWLEDGESERVICEREQUEST T155†EQU„55 T156†EQU„56 T157†EQU„57 T1CDIR„EQU„58 T159†EQU„59T1CMR…EQU„60‘CHANNELREQUEST1T1CISR„EQU„61‘CLAIMVECTOR-INTRRUPTSERVICERTN)T1SINT„EQU„62‘SIMULATEUSERI/OINTERRUPT T163†EQU„63*T1EXMONƒEQU„64‘ATTACHTOEXCEPTIONMONITOR-T1DEXMON‚EQU„65‘DETACHFROMEXCEPTIONMONITOR*T1EXMMSK‚EQU„66‘SETEXCEPTIONMONITORMASK"T1RSTATE‚EQU„67‘RECEIVETASKSTATET1PSTATE‚EQU„68‘PUTTASKSTATE0T1REXMON‚EQU„69‘EXECUTETASKUNDEREXMONCONTROL T170†EQU„70 T171†EQU„71T1MOVEPL‚EQU„72!T1STDTIM‚EQU„73‘SETDATEANDTIME!T1GTDTIM‚EQU„74‘GETDATEANDTIME T1FLUSHC‚EQU„75‘FLUSHUSERCACHEŠPAGE**ˆTRAP0EQUATES*T0P‡EQU„1’SEMAPHOREP(WAIT)T0V‡EQU„2’SEMAPHOREV(SIGNAL) T0READYƒEQU„3’TASKTOREADYLIST%T0PAGALƒEQU„4’ALLOCATEPHYSICALPAGES T0PGFR„EQU„5’FREEPHYSICALPAGEST0GETTCB‚EQU„6’SEARCHTCBLIST'T0FNDSEG‚EQU„7’FINDSEGMENTNAMEINTST2T0LOGPHY‚EQU„8’LOGICALTOPHYSICALADDRESSCONVERT'T0FNDGSG‚EQU„9’FINDSEGMENTNAMEINGST5T0QEVNTN‚EQU„11‘PLACEEVENTINASQ-ARGISTASKNAME2T0FNDSEM‚EQU„12‘FINDENTRYINUSERSEMAPHORETABLE6T0GTXTCB‚EQU„13‘GETTCBUSINGSESSIONPROVIDEDINCALL5T0PAUSEƒEQU„14‘PAUSEWHILEWAITINGFORIOTOCOMPLETE.T0EXABRT‚EQU„21‘ABORTUSERTASKFROMEXECMODE*T0WAKEUP‚EQU„22‘WAKEUPTASKFROMEXECMODE7T0QEVNTT‚EQU„23‘PLACEEVENTINASQ-ARGISTCBADDRESST0SCHEDƒEQU„36SCHEDULEAROUTINEFOREXECUTIONINBACKGROUND.1T0GUARDƒEQU„37‘CALLK ASUBROUTINEINGUARDEDMODE.*8*„THEFOLLOWINGEQU'SDEFINEENTRIESTOSUBROUTINESONLY0*ˆTRAP0ENTRIESFOREXTERNALCALLSDONOTEXIST*5T0RYEXT1‚EQU„3’READYROUTINEENTRY-FROMTRAP1EXIT0T0RYEXIR‚EQU„3’READYROUTINEENTRY-FROMEXITIR'!TCB')thendo;*thenreturn(tasknotfound);*ˆend;*GET_TARGET_TCB MACROŠMOVE.L(A4),D0 ŠBEQ.S‚TCB1\@ ŠMOVE.LD0,A5TTB_01:ŠCMP.L‚#'!TCB',(A5)TTE_01: ŠBEQ.S‚TCB2\@ ŠEXITƒRTCDTASK TCB1\@: ŠMOVE.LA6,A5 TCB2\@:ŠENDM*********************** Ending of &.STR.EQ ***********************ééé‰PAGE*************************** Beginning of &.TACK.EQ *****************************‰SERVERACKNOWLEDGEEQUATES*"*‰OPTIONSAVAILABLEONACKNOWLEDGE*-TACKOSCC‚EQU„14‘SETCONDITIONCODESONRETURN TACKOSD0‚EQU„13‘SETD0ONRETURN TACKOSA0‚EQU„12‘SETA0ONRETURNTACKORDY‚EQU„11‘READYTHETASK%TACKOWTƒEQU„10‘PUTTASKINWAITSTATETACKOSPD‚EQU„9’SUSPENDTHETASK,TACKOTRM‚EQU„8’SPECRESPONSETOTERMREQUEST************************ Ending of &.TACK.EQ ************************éL éééé t' TCB EQ ‰ ‰šaaTERMCCB EQ ¢ ¢T3aaERMINALEQÿÿÿÿÿÿÿÿaa‰PAGE************************** Beginning of &.TCB.EQ ****************************ˆTASKCONTROLBLOCK**2*†USEASƒNAME(AX)‚WHEREAX=ADDRESSOFSTARTOFTCB1*‰WHERE‚AXISTHEADDRESSOFTHESTARTOFTHETCB"*‰ANDNAMEISONEOFTHEFOLLOWING*ŠOFFSET0’STARTATZERO"TCB‡DS.Lƒ1’'!TCB'‚DUMPEYECATCHER#TCBALL„DS.Lƒ1’LINKFORALLTCBLIST,TCBGROUP‚DS.Lƒ1’LINKFORTCB-THIS-GROUPLIST#TCBREADY‚DS.Lƒ1’LINKFORREADYLISTTCBNAMEƒDS.Lƒ1’4-BYTETASKNAMETCBSESSN‚DS.Lƒ1’SESSIONCODE-TCBMON„DS.Lƒ2’MONITORTASKNAME+SESSIONCODE+TCBSEM„DS.Lƒ1’LINKTONEXTSEMAPHOREWAITER$TCBCPRIƒDS.Bƒ1’CURRENTTASKPRIORITY"TCBLPRIƒDS.Bƒ1’TASKLIMITPRIORITY8TCBRPRIƒDS.Bƒ1’PRIORITYUSEDTOENTERTASKINREADYLIST'TCBIOCNT‚DS.Bƒ1’COUNTOFPENDINGINPUTSTCBATTRƒDS.Wƒ1’TASKATTRIBUTES=TCBATTIƒEQU„TCBATTR+1Š2NDBYTEOFATTRIBUTES(INTERNALFLAGS)TCBABORT‚DS.Wƒ1’ABORTCODE"TCBSTATE‚DS.Lƒ1’CURRENTTASKSTATE.TCBSTAT2‚EQU„TCBSTATE+1‰2NDBYTEOFSTATEWORDTCBTSTSM‚DS.Wƒ3’TSTSEMAPHORE+TCBTST„DS.Lƒ1’POINTERTOTASKSEGMENTTABLETCBASQSM‚DS.Wƒ3’ASQSEMAPHORETCBASQ„DS.Lƒ1’POINTERTOASQ1TCBCHANƒDS.Lƒ1’LINKTONEXTCHANNELCONTROLBLOCK0TCBEVECT‚DS.Lƒ1’ADDRESSOFTASKEXCEPTIONVECTOR+TCBTVECT‚DS.Lƒ1’ADDRESSOFTASKTRAPVECTOR*ŠDS.Lƒ1’RESERVEDFORFUTUREUSE6TCBNAU„DS.Lƒ1’ADDRESSOFNATENTRYIFTHISTASKISNAU;TCBDLAYƒDS.Lƒ1‘ADDRESSOFDELAYENTRYINPERIODICACTTABLE(ŠDS.Wƒ1’SAVEUPPER1/2OFD0ONTRAP1'S/TCBISRSƒDS.Wƒ1’ISRERRORCODE-SAVEFORWAKEUPŠDS.Lƒ3’RESERVEDFORFUTUREUSE(TCBENTRY‚DS.Lƒ1’TASKINITIALENTRYPOINT/TCBUSERƒDS.Wƒ1’USERNUMBERASSOCIATEDWITHTASKTCBSSP„DS.Bƒ1’EXECSTACKDEPTH6TCBUTRPƒDS.Bƒ1’USERTRAPNUMBER-SETWHENTRAPOCCURS* *†SAVEAREAS*TCBXREGS‚DS.Lƒ8’EXECREGL ISTERSTCBXA0„DS.Lƒ1’EXEXREGISTERA0ŠDS.Lƒ6TCBSAFEƒEQU„*’EXECREGISTERS8TCBATSKƒDS.Lƒ1’TASKNAMEOFTASKTHATCAUSEDTERMINATION6TCBASESƒDS.Lƒ1’SESSIONOFTASKTHATCAUSEDTERMINATION;TCBBERRƒDS.Lƒ2‘INFOPLACEDONSTACKBYBUSORADDRESSERROR : Š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'SD0TCBD1…DS.Lƒ7’USER'SD1THRUD7TCBA0…DS.Lƒ1’USER'SA0TCBA1…DS.Lƒ5’USER'SA1THRUA5TCBA6…DS.Lƒ1’USER'SA6TCBUSP„DS.Lƒ1’USER'SA7 #TCBSR…DS.Wƒ1’USER'SSTATUSREGISTER(TCBCC…EQU„TCBSR+1ŒUSER'SCONDITIONCODES#TCBPC…DS.Lƒ1’USER'SPROGRAMCOUNTERTCBPCLOƒEQU„TCBPC+2+TCBVOR„DS.Wƒ1’USER'SVOR(ORJUNKON68000)TCBRTCDƒDS.Wƒ1ŠDS.Wƒ1ŠDS.Lƒ1ŠDS.Lƒ4)TSTBEGIN‚EQU„*’OFFSETTOBEGINNINGOFTST ŠDS.Bƒ$200-$20-***‡EXCEPTIONMONITORPARAMETERS*)TCBEXM„DS.Lƒ1’EXCEPTIONMONITORTASKNAME(TCBEXMSƒDS.Lƒ1’EXCEPTIONMONITORSESSION&TCBEMMSK‚DS.Lƒ1’EXCEPTIONMONITORMASK,TCBEVMSK‚DS.Lƒ1’EXCEPTIONMONITORVALUEMASK0TCBEVLOC‚DS.Lƒ1’EXCEPTIONMONITORVALUELOCATION'TCBEVALU‚DS.Lƒ1’EXCEPTIONMONITORVALUE:TCBECNTƒDS.Lƒ1’EXCEPTIONMONITORMAXCOUNTOFINSTRUCTIONSŠDS.Lƒ1* **‰TCBATTRBITDEFINITIONS*TSKASYST‚EQU„15‘SYSTEMTASK'TSKAMRES‚EQU„14‘TASKISMEMORYRESIDENT@TSKACRIT‚EQU„13ŒTASKISCRITICALTOOS-CRASHSYSTEMIFABORTED,TSKADUMP‚EQU„12DUMPTASKTODISKIFABORTED=TSKARELO‚EQU„11TASKISRELOCATEABLE(NOMMU)-CONVERTENTRY.TSKIUSEM‚EQU„8’TASKHASCREATEDUSERSEMAPHORE'TSKARTIM‚EQU„7’TASKISAREALTIMETASK2TSKIEXMƒEQU„6’TASKCONTROLLEDBYEXCEPTIONMONITOR9TSKIEXMT‚EQU„5’TASKISEXCEPTIONMONITORFORANOTHERTASK,TSKIEVCT‚EQU„4’TASKHASOWNEXCEPTIONVECTOR'TSKITVCT‚EQU„3’TASKHASOWNTRAPVECTOR>TSKILAST‚EQU„2ŽTASKISLASTTASKINSESSION(SETONLYBYTERM)TSKIABRT‚EQU„1’TASKWASABORTED+TSKIUVCT‚EQU„0’TASKHASCLAIMEDUSERVECTOR**‰TCBSTATEBITDEFINITIONS*TSKSDORM‚EQU„15‘TASKISDORMANTTSKSBLCK‚EQU„14‘TASKISBLOCKED1TSKSSMWT‚EQU„13‘TASKISBLOCKEDONEXECSEMAPHORE)TSKSEVWT‚EQU„12‘TASKISWAITINGFOREVENT?TSKSAKWT‚EQU„11TASKISWAITINGFORSERVICEREQACKNOWLEDGEMENT6TSKSWTEM‚EQU„10‘TASKISWAITINGFORCOMMANDFROMEXMON TSKSSUSP‚EQU„9’TASKISSUSPENDED*+TSK2TRMP‚EQU„7’TASKHASPENDINGTERMINATION'TSK2RTEX‚EQU„6’TASKWILLRETURNTOEXEC%TSK2EVWK‚EQU„5’TASKISHEADEDFORASR$TSK2NRDY‚EQU„4’TASKISONREADYLIST&TSK2WKWT‚EQU„3’TASKHASPENDINGWAKEUP@TSK2ACK2‚EQU„2ŒTERMMESSAGETOSERVERSENTWHILEACKOUTSTANDING*/TSKSWMSK‚EQU„$FF00ŽMASKOFALLTASKWAITSTATES**…TCBEMMSKBITDEFINITIONS*"TEMTRAP1‚EQU„1’TRAP1ISMONITORED&TEMBUSER‚EQU„16‘BUSERRORISMONITORED*TEMADDER‚EQU„17‘ADDRESSERRORISMONITORED0TEMILLEG‚EQU„18‘ILLEGALINSTRUCTIONISMONITORED'TEMZDIVƒEQU„19‘ZERODIVIDEISMONITORED*TEMCHK„EQU„20‘CHKINSTRUCTIONISMONITORED.TEMTRAPV‚EQU„21‘TRAPVINSTRUCTIONISMONITORED/TEMPRIVƒEQU„22‘PRIVILEGEVIOLATIONISMONITORED&TEML1010‚EQU„23‘LINE1010ISMONITORED&TEML1111‚EQU„24‘LINE1111ISMONITORED*-TEMMCNTƒEQU„27‘MAXINSTRUCTIONCOUNTSUPPLIED=TEMTRACƒEQU„28ŽSINGLEINSTRUCTIONTRACEREQUESTED(IFVCHG=0)1TEMVEQUƒEQU„28‘VALUE=TESTREQUESTED(IFVCHG=1)*TEMVCHGƒEQU„29‘VALUECHANGETESTREQUESTED*********************** Ending of &.TCB.EQ ***********************éM éé‰PAGE****************************** Beginning of &.TERMCCB.EQ ******************************%*ˆ7/9/84…addedBABareaforterminals*(*‰NOTESONTHERECEIVE&TRANSMITQUEUES*@*‰ThesecircularqueuesarecontainedintheCCBattheverytop>*‰ofthedevice-dependentportion.‚ThereceivequeueisjustaA*‰type-aheadbuffer;thetransmitqueueisusedtoholdchar'sto0*‰betransmittedwhicharenotinauserbuffer.*J***************************************************************************H*‚TailorthefollowingequatestochangethesizesofthequeuesandtheF*‚thresholdsatwhichactionistakentosuspend/restoretransmissions8*‚fromthedevice.‚Thefollowinginequalitiesmusthold:*@*‰7‚<=‚TQ_MAX‚<=128„(7comesfromXON,BS,SP,BS,BS,SP,BSqueued,>*whichcanhappenifaBScausesacontrolchartobeerased)*#*‰0‚<=‚NUF_ROOM‚<‚NEAR_FUL‚<‚RQ_MAX**3*’<--------------ƒ<---queuesfill/emptythisway---*O* /-------------- ----------------- ----------------------------------- ------/+*‚device-indep.|„TRANSMIT…|ŒRECEIVE|‚rest&*ƒpartofCCB‚|…QUEUE‡|QUEUE‘|ofCCBO* /-------------- ----------------- ----------------------------------- ------/**|‘|£|9*|<---TQ_MAX---->|<-----------RQ_MAX-------------->| *|‘||…|!*¢|<-------NEAR_FUL---------->|*¢|™|ƒ|*¢|<-----NUF_ROOM-------->|*¢|™|*6TQ_MAX„EQU„16Sizeoftransmitqueueinbytes.‚Bewary#*§ofincreasingthissize,sinceit#*§couldpushRQpast$7F,makingit"*§impossibletousetheaddressing*§modeRQ(A5,Dn)..RQ_MAX„EQU„224Sizeofreceivequeueinbytes.BNEAR_FUL‚EQU„RQ_MAX-10‰Whentheadditionofacharmakesthequeue'*§thisfull,thedriverwillattemptto&*§suspendthedevice'stransmissionby*§loweringDTRorsendingXOFF.ANUF_ROOM‚EQU„RQ_MAX-20‰Whentheremovalofacharmakesthequeue$*§thisfull,thedriverreleasesthe$*§suspendeddevicebyraisingDTRor*§sendingXON.** š8 £& «/ ³7 »6 Ã9 Ë3 Ó8 Û9 ã9 ë$I*‚Thetransmitqueueisonlydealtwithfromwithinthebackground,soitJ*‚iscompletelysafefromanyproblemswhichmightbecausedbythedriver3*‚takinganinterruptwhiledealingwiththequeue.I*‚Thereceivequeue,however,isaddedtofromoutsidethebackground(inK*‚theRCAroutine).‚ThisdoesnotcauseanyproblemswiththeRECVroutine,H*‚whichtakescharactersoutofthereceivequeue,primarilybecausetheF*‚formerusesthePUTpointerandthelatterusestheGETpointer,andI*‚neithercaresabouttheotherpointer.‚ThecodethatclearsthereceiveE*‚queuecouldpotentiallycauseaproblem,though,soitisdonewithC*‚interruptsINHIBITed.‚AslongasthetwocontendersonlyrunwithB*‚interruptsINHIBITed,theycanneverinterferewithoneanother.ŠPAGE*B*‚EquatesforERR_CODEfieldinCCB.‚WeusetheIOSstatusvalues.*>PAR_FRAMEQU‡ISTACSMŠParityorframingerroronreceivedchar.=OVERRUN‚EQU‡ISTADO‹Eitherthedevice'sinternalbufferorthe *§receivequeuewasoverwritten. F*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% *ˆ7/9/84‚BWN6*ˆWearetakingthisstuffoutandreplacingitbythe@*ˆBABareaoffsetssowecanusetheexec'sbackgroundroutines.*C*‚EquatesforbitnumberM sintheWORKfieldintheCCB.‚Eachbitis@*‚aflagindicatingthepresenceofworkforagivenpartoftheE*‚background.‚Ifthebitis1,thereiswork;if0,thereisnowork.*/**W_XMIT„EQU„15‘Routinetotransmitcharacters..**W_RECV„EQU„14‘Routinetoreceive‚characters.5**W_BREAKƒEQU„13‘Routinetohandleanincomingbreak.7**W_DSR…EQU„12‘RoutinetohandleaDSRlinetransition.0**W_HALT„EQU„11‘RoutinetohaltoutstandingI/O.;**W_CONFIGUREEQU‚10‘Routinetofinishaconfigurerequest.5**W_BLOCKƒEQU„9’Routinetostopusfromtransmitting.8**W_UNBLOCKEQU„8’Routinetoallowustotransmitagain.;**W_STOP_ITEQU„7’Routinetostopthedevicefromxmitting.<**W_BEG_BREAKEQU‚6’Routinetostartsendingabreaksignal.;**W_END_BREAKEQU‚5’Routinetostop‚sendingabreaksignal.)**W_EVENTƒEQU„4’Routinetosendanevent.1**W_DCD…EQU„3’RoutinetohandleaDCDtransition.8**W_INIT„EQU„2’RoutinetodoRESETandSETUP(forinit). *L*‚EquatesforbitnumbersintheSPECIALbyteintheCCB.‚EachbitisaflagN*‚indicatingthatcontrolbelongstoaparticularhigh-priorityroutinewithinM*‚thetransmitfunction.‚WhensettingoneofthesebitsyoushouldbesuretoM*‚changethetransmitstatetoSPECIAL;ifitwasn'talreadyspecialyouhaveL*‚tosavetheoldtransmitstateinOLD_XMIT_ST.‚Ifoneofthesebitsisa13*‚thenthatroutinehascontrol;if0,itdoesnot.*-SPEC_BREAK‚EQU7•Transmittingabreaksignal.*SPEC_XOFFƒEQU6•TransmittinganXOFFchar.(SPEC_XON„EQU5•TransmittinganXON‚char.+SPEC_BLOCK‚EQU4•Blockedfromtransmitting.+SPEC_NUL„EQU3•TransmittingNULcharacters.6SPEC_QUEUE‚EQU2•Transmittingfromthetransmitqueue.ŠPAGE*H*‚Equatesformenuitems.‚RecallthattheMENUfieldintheCCBhasroomH*‚for41-bytemenuitems.‚ThevalueshaveaspecialcorrespondencewithE*‚theprocessstateswhichisusedindispatching--donotdisruptit.*1M_DOWN„EQU„-4‘Channeldown(unrecoverableerror).4M_INACTƒEQU„0’Channelinactive(noI/Oinprogress). -M_IMGWRT‚EQU„4’Imagewritefromwritebuffer.1M_FRMWRT‚EQU„8’Formattedwritefromwritebuffer.0M_CANCEL‚EQU„$C‘Cancelchar'sinputfromscreen.*M_REPRNT‚EQU„$10Reprintfromreadbuffer./M_BREAKƒEQU„$14Waitforbreaktimertoexpire. ,M_IMGRDƒEQU„$34Imagereadintoreadbuffer.0M_FRMRDƒEQU„$38Formattedreadintoreadbuffer. 1M_END…EQU„$70Endofmenu--sendcompletionevent. 6MHI_XMIT‚EQU„$2FCeilingfortransmit-typemenuitems.3MLO_RECV‚EQU„$30Floorƒforreceive-type‚menuitems.5MHI_RECV‚EQU„$3FCeilingforreceive-type‚menuitems.  *D*‚Equatesforprocessstates.‚Thevaluesgobyfour'ssotheycanbeB*‚usedwithbranchtables:‚JMPTBL(PC,D0.W)whereD0isthestate.$*¤----------------------------------&*£|Processeswhichassumethestate|$*¤----------------------------------*¤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_SPECIALEQU„$14˜X‰.ˆ.ˆ.S_REPORT‚EQU„$60˜.‰.ˆXˆ.S_WT4RDY‚EQU„$70˜.‰.ˆ.ˆXS_WT4UNR‚EQU„$74˜.‰.ˆ.ˆXŠPAGEJ***************************************************************************6*‰DEVICE-DEPENDENTPORTIONOFCCBFORTERMINALDRIVERS*=*‰Thisdefinesthatportionofthechannelcontrolblockthat>*‰isreservedforusebytheindividualdriver.‚TheCCBis512C*‰byteslong,andeverythingbeforeCCBDDPisdefinedinEQUCCB.SA.*A*‰Notethatvirtuallyeverywhereinthisdriver,A5ismaintained=*‰asapointertothebeginningoftheCCB.‚HencethedefinedA*‰labelsmaybeusedtoaccessfieldsintheCCBwithoutworrying4*‰aboutloadingtheaddressoftheCCB.‚Forexample,*ŒMOVE.LƒIOCB_ADR(A5),A0)*‰isvalidalmostanywhereinthedriver.*J************************************************************************** 7ŠOFFSET‚CCBDDPŒStartdefinitionatthebeginningofthe&*£device-dependentportionoftheCCB. *L*‚FirstcometN hequeues.‚TheseshouldalwayscomefirstsincetheaddressingL*‚modeDISPLACEMENT(A5,Rn)isusedtogettothequeuesandDISPLACEMENTmayJ*‚neverbelargerthan$7F.‚NotethatthelabelsTQandRQarebackabyteG*‚fromtheactualqueues;thiswasdoneintentionallytoallowspeedier *‚enqueueanddequeuesequences.* TQˆEQU„*-14ŠDS.BƒTQ_MAXReservestorageforthetransmitqueue. RQˆEQU„*-13ŠDS.BƒRQ_MAXReservestorageforthereceivequeue. >RESERVE.4STAK_PTR‘Stackpointerissavedhereduringcommand&*§processingsothatprocessingcanbe(*§abortedinthemiddleofasubroutine.'*§Thatis,thecommonexitcodeforthe#*§commandservicetourrestoresthe&*§stackpointerfromherebeforeexit. =RESERVE.4IOCB_ADR‘PhysicaladdressofIOCB.‚SavedwhenIOCB#*§isreceivedsothatstatusmaybe&*§updatedwhenprocessingiscomplete. =RESERVE.4TCB_ADDR‘AddressofTCBofbufferowner.‚Ifbit15'*§ofIOCBoptionsfieldisset,thisis'*§notthesameastheIOCBowner.‚Saved)*§sothatTCBIOCNTfieldcanbeaccessed. :RESERVE.4DCB_ADDR‘AddressofDCBforthischannel.‚Taken'*§fromtheINITIATEI/Oparameterblock"*§andusedinaccessingtheDCBto)*§changethedefaultconfigurationandto&*§setconfigurationcoordinationflag. RESERVE.4CHAR_CNT‘Countofthe#ofchar'sonthescreendue%*§toaformattedread.‚Usedtodeter-&*§minethe#oftosend*§foraCANCELLINEfunction. =RESERVE.4COLUMN“Countofthe#ofprintable($20-$FF)chars(*§sentduringaformattedwrite.‚Usedto&*§determinewhetherweshouldskipthe *§end-of-linestringattheend. ;RESERVE.4XFER_LEN‘NumberofbytestransferredduringI/O.%*§Setwhenthesignificantpartofan'*§I/Ooperationiscompleted(theWRITE#*§portionofOUTPUTW/INPUTisnot%*§significant).‚Eventuallythisfield%*§isusedtoupdatetheIOCB'sLENGTH*§OFDATATRANSFERfield. ;**RESERVE.2WORK•Thisfieldisacollectionof1-bitflags(*§eachofwhichindicateswhetherornot%*§aparticularpartofthebackground%*§hasworktodo.‚Onlywhenthisbyte$*§is$00hasallthebackgroundwork%*§beencompleted.‚Seetheequatesfor*§bitsinthisfieldlateron. 'char%*§shouldbesentbeforeanythingelse *§toenclosedeletedcharacters. ARESERVE.1WAIT_TQ‹Setbythereceiveprocesswhenithasworkto)*§dobutcan'tdoitbecausethetransmit%*§queueistoofull.‚Checkedwhenthe&*§transmitprocessidlestoseeifthe#*§receiveprocessshouldbegivena#*§chancetorun(sincethetransmit$*§queueisemptyiftransmitidles). BRESERVE.1TR_MODE‹Setifthedefaultconfigurationindicatesthat'*§weareintransparentmode.‚Thisflag)*§willcontrolwhatwedowhencharacters$*§arereceived,etc.‚NOTE:‚itisnot$*§possibletocomeupintransparent(*§mode;aCHANGEDEFAULTScmdisneeded.  *G*‚Processstates.‚NotethattransmitandreceivestatesarewordvaluesJ*‚sotheycanbereadilyputinadataregisterandusedintheaddressing*‚modeTABLE(PC,Dx)forajump.* *RESERVE.2XMIT_ST’Transmitprocessstate.)RESERVE.2RECV_ST’Receiveprocessstate.  *'*‚Pointersforreceiveandechoqueues.E*‚NotethatRQ_GETandRQ_PUTstartat#RQ_MAXandgetsmaller.‚AfterE*‚#1theygoto#RQ_MAXagaintoformacircularqueueofcharacters.E*‚Similarly,TQ_GETandTQ_PUTgofrom#TQ_MAXdownto#1andbackto#*‚#TQ_MAXtoformacircularqueue.* @RESERVE.2RQ_GET‹Offsetintoreceivequeueofnextbytetoget.@RESERVE.2RQ_PUT‹Offsetintoreceivequeueofnextbytetoput.7RESERVE.2RQ_CNT‹Contains#ofbytesinreceivequeue. ARESERVE.2TQ_GET‹Offsetintotransmitqueueofnextbytetoget.ARESERVE.2TQ_PUT‹Offsetintotransmitqueueofnextbytetoput.8RESERVE.2TQ_CNT‹Contains#ofbytesintransmitqueue.  *E*‚Receiveerrorinfo.‚Thisinfoissetwhentheconditionoccurs,butG*‚isnotuseduntilthereceiveprocessgoestogettheassociatedchar*‚fromthereceivequeue.* 0,offsetintoreceivequeueofbyte(*§associatedwithreceiveerror(copyof!*§RQ_PUTwhenerrorisdetected).*§If=0,thereisnoerror. 0. ;RESERVE.4ADRSIDEA‘AddressoftheAsidecontrolregister.&*§Althoughwealreadyhavetheaddress'*§ofthecontrolregisterforwhichever&*§portwe'reusinginCCBCHB,wesome-#*§timeshavetoissuecommandstoa&*§specificside(e.g.,theEOIcommand#*§alwaysgoestosideA).‚Forthose&*§occasions,thisaddresswillgetyou%*§tothesideAcontrolregister,and&*§thisaddress+4willgetyoutothe*§sideBcontrolregister.RESERVE.12‰B_BRK_BABŠRoutinetostartsendingabreaksignal.=RESERVE.12‰E_BRK_BABŠRoutinetostop‚sendingabreaksignal./*RESERVE.12‰EVENT_BABŠRoutinetosendanevent.=*RESERVE.12‰INIT_BAB‹RoutinetodoRESETandSETUP(forinit)*%%%%%%%%%%%%%%%%%%%%%%%%*9*‚Thefollowing5fieldsaresetupduringinitialization&*‚usingentriesintheTCHTYPEmodule.*7RESERVE.1DRV_CODE‘Drivercodewhichisreturnedfora*§statuscall.8RESERVE.2REC_ATT’Maskofattributesrecognizedbythis *¦driver.8RESERVE.2REC_PAR’Maskofparametersrecognizedbythis *¦driver.**%%%%%%%%‚BWN‚9/11/84.RESERVE.4REC_BAUD‘Recognizedbaudratesmask**£Eachbitinthis32bitmaskcorresponds#*£toabaudratecodeof$0to$1F.-*£ThevalueinthisentrycomesfromTCHTYPE.*%%%%%%%%%%%%%%%%%RESERVE.4DRV_ADDR‘Addressofdriver**%%%%%%%%%%‚bwn‚8/16/84*E*‚ThisprocessstateisclearedinTERM_INITandsetinTERM_COMMAND.*‚ItistestedinBREAK.B*‚Whenitisset,itisOKtoreportbreaksbecausesomeoneisout*‚there.*"RESERVE.1ES_ST”ES‚processstate.**4TERMDDP‚EQU‡*Thismarksthebeginningofthedevice#*£dependentpartoftheCCBthatis!*£uniqueforaparticulardriver.*************************** Ending of &.TERMCCB.EQ ***************************éééééééé