IMD 1.17: 25/11/2014 12:11:49 82VKXBVERDOS D* BT10:0 68K VERSADOS/RMS68K OBJECT 4.5 (EQUATE FILES) (DS,DD 96 tpi 5.1/4" DISK) REVISED: 04/22/86 DISK 10 OF 24  BT10 82VKXBVERDOS 0420±c-.VERSAPT.CF%=COPY‡VERSAPT.P050DRV.CF,VERSAPT.CF;A P050DRVƒ=*SUBSˆ&.P050DRV.LG EXCLUDE…DRVL EXCLUDE…PRNTLINKˆ&.P050DRV.LGPROCESS…&.P050DRV.LOEND‰&.P050DRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.P050DRV.AG1ASM‰IOC.P050DRV.AG,NEW.RO,\WORKLS;RMZ=80,\LISTOPT 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI !* 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) -* Adjust number of disk drivers using PRNTLIB&PRTFLAG‚=\&PRTFLAG+1NNN()* *ˆ&.SIODRV.CI*GMSG‰*******************************************************************FMSG‰**‚SIO(MK68564)DRIVERFORTERMINALS-localVME130&VM04boardsGMSG‰******************************************************************* IFGTˆ\NOLTERM-2ƒMSG†NOLTERMmustbe<=2ƒABORTENDC $=COPY‡VERSAPT.SIODRV.CF,VERSAPT.CF;A SIODRVƒ=*SUBSˆ&.SIODRV.LG EXCLUDE…DRVL EXCLUDE…TERMLINKˆ&.SIODRV.LGPROCESS…&.SIODRV.LOEND‰&.SIODRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.SIODRV.AG0ASM‰IOC.SIODRV.AG,NEW.RO,\WORKLS;RMZ=85,\LISTOPT 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI "* Adjust total number of terminals&TOTTERM‚=\&TOTTERM+\NOLTERM * Adjust starting CRT device #&CRTDV„=\&CRTDV+\NOLTERM &* Adjust number of serial port drivers&SERFLAG‚=\&SERFLAG+1NNN N1%* *ˆ&.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.LG EXCLUDE…DRVL EXCLUDE…DISKLINKˆ&.M420DRV.LGPROCESS…&.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,\WORKLS;RMZ=80,\LISTOPT 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI -* Adjust number of disk drivers using DISKLIB&DSKFLAG‚=\&DSKFLAG+1N:>* *ˆ&.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.LG EXCLUDE…DRVL EXCLUDE…DISKLINKˆ&.M420DRV.LGPROCESS…&.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„Typeof2ndfloppydi skon2ndcontrollerboard 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,\WORKLS;RMZ=80,\LISTOPT 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI -* Adjust number of disk drivers using DISKLIB&DSKFLAG‚=\&DSKFLAG+1NC>**‹&.TERMLIB.CI*7* File to be included at sysgen to bring in the TERMLIB*@* Assemble the TCHTYPE file of valid channel types for terminals*4ASM‰&.TCHTYPE.AG,&.TCHTYPE.RO,\WORKLS;RZ=60,\LISTOPT TERMLIBƒ=*SUBSˆ&.TERM1.LGLINKˆ&.TERM1.LG SUBSˆ&.TERMLIB.LG EXCLUDE…DRVLLINKˆ&.TERMLIB.LGPROCESS…&.TERMLIB.LOEND‰&.TERMLIB.LONNNNNNL**ˆ&.M331DRV.CI*GMSG‰*******************************************************************MSG‰**DMSG‰**‚MVME331/MVME332driver-intelligentcommunicationcontrollerMSG‰**GMSG‰******************************************************************* =*************************************************************9*‚Adjusttotalnumberofchannels(terminals)-1stboard=************************************************************* IFGEˆ\NVME331-1‚IFEQˆ\NT331$1&„MSG‰NT331$1mustbeatleastsetto1„ABORT‚ENDC‚IFGTˆ\NT331$1-8"„MSG‰NT331$1cannotbemorethan8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=\&TOTTERM+\NT331$1ENDC >**************************************************************9*‚ Adjusttotalnumberofchannels(terminals)-2ndboard>************************************************************** IFGEˆ\NVME331-2‚IFEQˆ\NT331$2&„MSG‰NT331$2mustbeatleastsetto1„ABORT‚ENDC‚IFGTˆ\NT331$2-8"„MSG‰NT331$2cannotbemorethan8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=\&TOTTERM+\NT331$2ENDC =*************************************************************9*‚Adjusttotalnumberofchannels(terminals)-3rdboard=************************************************************* IFGEˆ\NVME331-3‚IFEQˆ\NT331$3&„MSG‰NT331$3mustbeatleastsetto1„ABORT‚ENDC‚IFGTˆ\NT331$3-8"„MSG‰NT331$3cannotbemorethan8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=\&TOTTERM+\NT331$3ENDC >**************************************************************9*‚Adjusttotalnumberofchannels(terminals)-4thboard>************************************************************** IFGEˆ\NVME331-4‚IFEQˆ\NT331$4&„MSG‰NT331$4mustbeatleastsetto1„ABORT‚ENDC‚IFGTˆ\NT331$4-8"„MSG‰NT331$4cannotbemorethan8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=\&TOTTERM+\NT331$4ENDC UU^;=*************************************************************9*‚Adjusttotalnumberofchannels(terminals)-5thboard=************************************************************* IFGEˆ\NVME331-5‚IFEQˆ\NT331$5&„MSG‰NT331$5mustbeatleastsetto1„ABORT‚ENDC‚IFGTˆ\NT331$5-8"„MSG‰NT331$5cannotbemorethan8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=\&TOTTERM+\NT331$5ENDC =*************************************************************9*‚Adjusttotalnumberofchannels(terminals)-6thboard=************************************************************* IFGEˆ\NVME331-6‚IFEQˆ\NT331$6&„MSG‰NT331$6mustbeatleastsetto1„ABORT‚ENDC‚IFGTˆ\NT331$6-8"„MSG‰NT331$6cannotbemorethan8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=\&TOTTERM+\NT331$6ENDC  5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M331DRV.CF,VERSAPT.CF;A M331DRV„=*SUBSˆ&.M331DRV.LG EXCLUDE…DRVLLINKˆ&.M331DRV.LGPROCESS…&.M331DRV.LOEND‰&.M331DRV.LO %* SET ADDITIONAL SPACE FOR MERGEOS... PC‡=*+$1000 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.M331DRV.AG2ASM‰IOC.M331DRV.AG,NEW.RO,\WORKLS;RMZ=120,\LISTOPT 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CINN**‹&.DISKLIB.CI*7* File to be included at sysgen to bring in the DISKLIB*<* Assemble the DSKTYPE file of valid channel types for disks*4ASM‰&.DSKTYPE.AG,&.DSKTYPE.RO,\WORKLS;RZ=60,\LISTOPT DISKLIBƒ=*SUBSˆ&.DISK1.LGLINKˆ&.DISK1.LG SUBSˆ&.DISKLIB.LG EXCLUDE…DRVLLINKˆ&.DISKLIB.LGPROCESS…&.DISKLIB.LOEND‰&.DISKLIB.LO NNNNNNf* *ˆ&.SCCDRV.CI*GMSG‰*******************************************************************=MSG‰**‚SCC(Z8530)DRIVERFORTERMINALS-localVME117boardsGMSG‰******************************************************************* IFGTˆ\NOSCC-2ƒMSG†NOSCCmustbe<=2ƒABORTENDC $=COPY‡VERSAPT.SCCDRV.CF,VERSAPT.CF;A SCCDRV„=*SUBSˆ&.SCCDRV.LG EXCLUDE…DRVL EXCLUDE…TERMLINKˆ&.SCCDRV.LGPROCESS…&.SCCDRV.LOEND‰&.SCCDRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆSCCLOC.SISUBSˆIOC.SCCDRV.AG0ASM‰IOC.SCCDRV.AG,NEW.RO,\WORKLS;RMZ=85,\LISTOPT 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI "* Adjust total number of terminals&TOTTERM‚=\&TOTTERM+\NOSCC IFEQˆ"\SYSTEM","VME133"* Adjust starting CRT device #&CRTDV„=\&CRTDV+2ENDC IFNEˆ"\SYSTEM","VME133"* Adjust starting CRT device #&CRTDV„=\&CRTDV+\NOSCCENDC &* Adjust number of serial port drivers&SERFLAG‚=\&SERFLAG+1NNNNo- **‹&.PRNTLIB.CI*7* File to be included at sysgen to bring in the PRNTLIB*<* Assemble the PRTTYPE file of valid channel types for disks*4ASM‰&.PRTTYPE.AG,&.PRTTYPE.RO,\WORKLS;RZ=60,\LISTOPT PRNTLIBƒ=*SUBSˆ&.PRNT1.LGLINKˆ&.PRNT1.LG SUBSˆ&.PRNTLIB.LG EXCLUDE…DRVLLINKˆ&.PRNTLIB.LGPROCESS…&.PRNTLIB.LOEND‰&.PRNTLIB.LONNNNNNx**ˆ&.M360DRV.CI*GMSG‰*******************************************************************'MSG‰**…MVME360DRIVER-DiskControllerGMSG‰******************************************************************* ;MSG‰*******************************************************MSG‰*µ*)MSG‰*‹VME360USERCONFIGURATIONEQUATES‰*MSG‰*µ*;MSG‰******************************************************* GMSG‰*******************************************************************MSG‰*ƒVME360CACHEenableflagMSG‰*MSG‰*ƒDK$CACHE=0‚CachedisabledMSG‰*ƒDK$CACHE=1‚CacheenabledGMSG‰******************************************************************* DK$CACHE‚=1 GMSG‰*******************************************************************&MSG‰*ƒVME360packetmemoryselectflagMSG‰*#MSG‰*ƒPFT$MEM=0‚Useexternalmemory#MSG‰*ƒPFT$MEM=1‚UseinternalmemoryGMSG‰******************************************************************* PKT$MEMƒ=1 IFEQˆ\NH360$1(ƒMSG†NH360$1mustbeatleastsettoa1ƒABORTENDCIFGTˆ\NH360$1-4ƒMSG†NH360$1mustbe<=4ƒABORTENDC *‚Adjusttotalnumberofdisks-&TOTDSKƒ=\&TOTDSK+\NH360$1 IFGE \NVME360-2 IFEQˆ\NH360$2(ƒMSG†NH360$2mustbeatleastsettoa1ƒABORTENDCIFGTˆ\NH360$2-4ƒMSG†NH360$1mustbe<=4ƒABORTENDC *‚Adjusttotalnumberofdisks-&TOTDSKƒ=\&TOTDSK+\NH360$2ENDC 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M360DRV.CF,VERSAPT.CF;A M360DRVƒ=*SUBSˆ&.M360DRV.LG EXCLUDE…DRVL EXCLUDE…DISKLINKˆ&.M360DRV.LGPROCESS…&.M360DRV.LOEND‰&.M360DRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.M360DRV.AG2ASM‰IOC.M360DRV.AG,NEW.RO,\WORKLS;RMZ=100,\LISTOPT 2* Generate merge d IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI #* Adjust the number of disk drivers&DSKFLAG‚=\&DSKFLAG+1M**ˆ&.P117DRV.CI*GMSG‰*******************************************************************"MSG‰**‚VME117LOCALPRINTERDRIVERGMSG‰******************************************************************* IFGTˆ\NOLPRT-1ƒMSG†NOLPRTmustbe<=1ƒABORTENDC #* Adjust total number of printers -&TOTPRTƒ=\&TOTPRT+\NOLPRT 5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.P117DRV.CF,VERSAPT.CF;A P117DRVƒ=*SUBSˆ&.P117DRV.LG EXCLUDE…DRVL EXCLUDE…PRNTLINKˆ&.P117DRV.LGPROCESS…&.P117DRV.LOEND‰&.P117DRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.P117DRV.AG1ASM‰IOC.P117DRV.AG,NEW.RO,\WORKLS;RMZ=80,\LISTOPT 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI 5* Adjust printer device # for # of printers on VME1175IFEQˆ\&PRTDV-$50522020testforspecialcaseof'PR‚'ƒ&PRTDV„=$50523020ENDC&PRTDV„=\&PRTDV+(\NOLPRT*$100) -* Adjust number of disk drivers using PRNTLIB&PRTFLAG‚=\&PRTFLAG+1NNNŠ)=/*=/*†&.M319DRV.LG=/*E=/* Link chain file run at sysgen time to link MVME319/MVME315 driver=/*I=/* Sysgen parameter M319DRV = \M319DRV = address at which to link driver=/*+=LINK ,&.M319DRV.LO,\WORKLS;HAMIXS,\LISTOPTDEF ONBD_LO,\ONBD$LODEF ONBD_HI,\ONBD$HIDEF OFFBD_LO,\OFFBD$LODEF OFFBD_HI,\OFFBD$HIDEF RAM_SKEW,\RAM$SQSEGMENT M319:7 \M319DRVINPUT &.M319DRV.ROEND=/*=ENDNNN NNN“=/*=/*†&.SCSIDRV.LG=/*:=/* Link chain file run at sysgen time to link SCSI driver=/*I=/* Sysgen parameter SCSIDRV = \SCSIDRV = address at which to link driver=/*+=LINK ,&.SCSIDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT SCSI:0-13 \SCSIDRVSEGMENT DRVL:15 \DRVLSEGMENT DISK:14 \DISKLIBINPUT &.SCSIDRV.ROINPUT &.DRVLIB.ROINPUT &.DISKLIB.TFEND=/*=ENDNNNNNNœ=/*=/*†&.DRVLIB.LG=/*5=/* Link chain file run at sysgen time to link DRVLIB3=/*NOTE:‚ALLinputmodulesshouldbeinSECTION15=/*C=/* Sysgen parameter DRVL = \DRVL = address at which to link driver=/**=LINK ,&.DRVLIB.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT DRVL(R):15 \DRVLINPUT &.DRVLIB.ROEND=/*=ENDN NNNNN¥=/*=/*†&.ACIADRV.LG=/*:=/* Link chain file run at sysgen time to link ACIA driver=/*J=/* Sysgen parameter ACIADRV = \ACIADRV = address at which to link driver.=/*+=LINK ,&.ACIADRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT ACIA:0-13 \ACIADRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.ACIADRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDNNNNNN®=/*=/*†&.TERMLIB.LG=/*6=/* Link chain file run at sysgen time to link TERMLIB=/*I=/* Sysgen parameter TERMLIB = \TERMLIB = address at which to link driverC=/* Sysgen parameter DRVL = \DRVL = address at which to link driver=/*0=/* TERMLI B modules should all be in SECTION 14./=/*DRVLIB‚modulesshouldallbeinSECTION15.=/*+=LINK ,&.TERMLIB.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENTTERM(R):14‚\TERMLIBSEGMENTDRVL(R):15‚\DRVLINPUT &.TERMLIB.TFINPUT &.DRVLIB.ROEND=/*=ENDNNNNNN·=/*=/*†&.EPCIDRV.LG=/*:=/* Link chain file run at sysgen time to link EPCI driver=/*I=/* Sysgen parameter EPCIDRV = \EPCIDRV = address at which to link driver=/*+=LINK ,&.EPCIDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT EPCI:0-13 \EPCIDRVSEGMENT TERM:14 \TERMLIBSEGMENT DRVL:15 \DRVLINPUT &.EPCIDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDNNNNNN À=/*=/*†&.M300DRV.LG=/*D=/* Link chain file run at sysgen time to link MVME300 (GPIB) driver=/*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,\WORKLS;HAMIXS,\LISTOPTDEF 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=/*=ENDNNNNÉ=/*=/*†&.IPCDRV.LG=/*9=/* Link chain file run at sysgen time to link IPC driver=/*G=/* Sysgen parameter IPCDRV = \IPCDRV = address at which to link driver=/**=LINK ,&.IPCDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT 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=/*=ENDNNNN NNÒ›' M331DRV LGçç M320DRV LGðð @ MFPDRV LG MPCCDRV LG   MPSCDRV LG MPSCSPR LG  MPSCSUP LG%%  SIODRV LG.. M435DRV LG77  P050DRV LG@@ PIADRV LGII M420DRV LGRR TERM1 LG[[  DISKLIB LGdd VM22DRV LGmm RWINDRV LGvv DISK1 LG  M360DRV LGˆˆ SCCDRV LG‘‘ P117DRV LGšš =/*=/*†&.M331DRV.LG=/*==/* Link chain file run at sysgen time to link MVME331 driver=/*I=/* Sysgen parameter M331DRV = \M331DRV = address at which to link driver=/*+=LINK ,&.M331DRV.LO,\WORKLS;HAMIXS,\LISTOPTDEF ONBD_LO,\ONBD$LODEF ONBD_HI,\ONBD$HIDEF OFFBD_LO,\OFFBD$LODEF OFFBD_HI,\OFFBD$HIDEF RAM_SKEW,\RAM$SQSEGMENT M331:0-13 \M331DRVSEGMENT DRVL:15 \DRVLINPUT &.M331DRV.ROINPUT &.DRVLIB.ROEND=/*=ENDNNNNNNß =/*=/*†&.M320DRV.LG=/*==/* Link chain file run at sysgen time to link MVME320 driver=/*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&=/*†M320$TYPŒHarddiskdriveseektype=/*+=LINK ,&.M320DRV.LO,\WORKLS;HAMIXS,\LISTOPTDEF 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$HDDEF LDTM_5,\M320$LT5DEF LDTM_8,\M320$LT8è3ñDEF LDTM_HD,\M320$LTHDEF SETTM_5,\M320$ST5DEF SETTM_8,\M320$ST8DEF SETTM_HD,\M320$STHDEF TYP_SEEK,\M320$TYPSEGMENT M320:0-13 \M320DRVSEGMENT DRVL:15 \DRVLSEGMENT DISK:14 \DISKLIBINPUT &.M320DRV.ROINPUT &.DRVLIB.ROINPUT &.DISKLIB.TFEND=/*=ENDNNNNN N=/*=/*†&.MFPDRV.LG=/*I=/* Link chain file run at sysgen time to link MK68901 serial port driver=/* (local port on the VME120)=/*G=/* Sysgen parameter MFPDRV = \MFPDRV = address at which to link driver=/**=LINK ,&.MFPDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT MFP:0-13 \MFPDRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.MFPDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDNNNNNNù=/*=/*†&.MPCCDRV.LG=/*H=/* Link chain file run at sysgen time to link R68560 serial port driver6=/* (local port on the VME050 system controller board)=/*I=/* Sysgen parameter MPCCDRV = \MPCCDRV = address at which to link driver=/*+=LINK ,&.MPCCDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT MPCC:0-13 \MPCCDRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.MPCCDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDNNNN NN=/*=/*†&.MPSCDRV.LG=/*J=/* Link chain file run at sysgen time to link NEC 7201 subordinat driver.=/*I=/* Sysgen parameter MPSCDRV = \MPSCDRV = address at which to link driver=/*+=LINK ,&.MPSCDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT MPSC:0-13 \MPSCDRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.MPSCDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDNNNNNN =/*=/*†&.MPSCSPR.LG=/*I=/* Link chain file run at sysgen time to link NEC 7201 supervisor driver=/* for the MVME400 board=/*I=/* Sysgen parameter MPSCSPR = \MPSCSPR = address at which to link driver=/*+=LINK ,&.MPSCSPR.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT MPSC:0-15 \MPSCSPRINPUT &.MPSCSPR.ROEND=/*=ENDNN  NNNN=/*=/*†&.MPSCSUP.LG=/*I=/* Link chain file run at sysgen time to link NEC 7201 supervisor driver=/* for the VM03 board.=/*I=/* Sysgen parameter MPSCSUP = \MPSCSUP = address at which to link driver=/*+=LINK ,&.MPSCSUP.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT MPSC:0-15 \MPSCSUPINPUT &.MPSCSUP.ROEND=/*=ENDNNNNNN=/*=/*†&.SIODRV.LG=/*>=/* Link chain file run at sysgen time to link MK68564 driver.=/*G=/* Sysgen parameter SIODRV = \SIODRV = address at which to link driver=/**=LINK ,&.SIODRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT SIO:0-13 \SIODRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.SIODRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=END  NNNNNN&=/*=/*†&.M435DRV.LG=/*>=/* Link chain file run at sysgen time to link MAG tape driver=/*I=/* Sysgen parameter M435DRV = \M435DRV = address at which to link driver=/*+=LINK ,&.M435DRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT M435:8 \M435DRVINPUT &.M435DRV.ROEND=/*=ENDNNNNNN/   =/*=/*†&.P050DRV.LG=/*D=/* Link chain file run at sysgen time to link VME050 printer driver=/*I=/* Sysgen parameter P050DRV = \P050DRV = address at which to link driver=/*+=LINK ,&.P050DRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT PRT5:0-13 \P050DRVSEGMENT DRVL:15 \DRVLSEGMENT PRNT:14 \PRNTLIBINPUT &.P050DRV.ROINPUT &.DRVLIB.ROINPUT &.PRNTLIB.TFEND=/*=ENDNNNNNN8=/*=/*†&.PIADRV.LG=/*A=/* Link chain file run at sysgen time to link PIA printer driver=/*G=/* Sysgen parameter PIADRV = \PIADRV = address at which to link driver=/**=LINK ,&.PIADRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT PIAD:0-13 \PIADRVSEGMENT DRVL:15 \DRVLSEGMENT PRNT:14 \PRNTLIBINPUT &.PIADRV.ROINPUT &.DRVLIB.ROINPUT &.PRNTLIB.TFEND=/*=ENDNNNNN  NA=/*=/*†&.M420DRV.LG=/*C=/* Link chain file run at sysgen time to link (VME420) SASI driver=/*I=/* Sysgen parameter M420DRV = \M420DRV = address at which to link driver=/*+=LINK ,&.M420DRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT M420:0-13 \M420DRVSEGMENT DRVL:15 \DRVLSEGMENT DISK:14 \DISKLIBINPUT &.M420DRV.ROINPUT &.DRVLIB.ROINPUT &.DISKLIB.TFEND=/*=ENDNNNNNNJ=/*=/*†&.TERM1.LG=/*6=/* Link chain file run at sysgen time to link TERMLIB=/*0=/* TERMLIB modules should all be in SECTION 14./=/*DRVLIB‚modulesshouldallbeinSECTION15.=/**=LINK ,&.TERMLIB.TF,\WORKLS;HMIXR,\LISTOPTINPUT &.TERMLIB.ROINPUT &.TCHTYPE.ROEND=/*=ENDNNN  NNNS=/*=/*†&.DISKLIB.LG=/*6=/* Link chain file run at sysgen time to link DISKLIB=/*I=/* Sysgen parameter DISKLIB = \DISKLIB = address at which to link driverC=/* Sysgen parameter DRVL = \DRVL = address at which to link driver=/*0=/* DISKLIB modules should all be in SECTION 14./=/*DRVLIB‚modulesshouldallbeinSECTION15.=/*+=LINK ,&.DISKLIB.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENTDISK(R):14‚\DISKLIBSEGMENTDRVL(R):15‚\DRVLINPUT &.DISKLIB.TFINPUT &.DRVLIB.ROEND=/*=ENDNNNNNN\=/*=/*†&.VM22DRV.LG=/*:=/* Link chain file run at sysgen time to link VM22 driver=/*I=/* Sysgen parameter VM22DRV = \VM22DRV = address at which to link driver=/*+=LINK ,&.VM22DRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT VM22:0-13 \VM22DRVSEGMENT DRVL:15 \DRVLSEGMENT DISK:14 \DISKLIBINPUT &.VM22DRV.ROINPUT &.DRVLIB.ROINPUT &.DISKLIB.TFEND=/*=ENDN  NNNNNe=/*=/*†&.RWINDRV.LG=/*;=/* Link chain file run at sysgen time to link RWIN1 driver=/*I=/* Sysgen parameter RWINDRV = \RWINDRV = address at which to link driver=/*+=LINK ,&.RWINDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT RWIN:0-13 \RWINDRVSEGMENT DRVL:15 \DRVLSEGMENT DISK:14 \DISKLIBINPUT &.RWINDRV.ROINPUT &.DRVLIB.ROINPUT &.DISKLIB.TFEND=/*=ENDNNNNNNn=/*=/*†&.DISK1.LG=/*6=/* Link chain file run at sysgen time to link DISKLIB=/*0=/* DISKLIB modules should all be in SECTION 14./=/*DRVLIB‚modulesshouldallbeinSECTION15.=/**=LINK ,&.DISKLIB.TF,\WORKLS;HMIXR,\LISTOPTINPUT &.DISKLI  B.ROINPUT &.DSKTYPE.ROEND=/*=ENDNNNNNNw=/*=/*†&.M360DRV.LG=/*==/* Link chain file run at sysgen time to link MVME360 driver=/*I=/* Sysgen parameter M360DRV = \M360DRV = address at which to link driver=/*+=LINK ,&.M360DRV.LO,\WORKLS;HAMIXS,\LISTOPTDEFINE ABUS,\A$SIZEDEFINE DBUS,\D$SIZEDEFINE CACHE,\DK$CACHEDEFINE PKTMEM,\PKT$MEMDEFINE OFFBD_LO,\OFFBD$LODEFINE OFFBD_HI,\OFFBD$HIDEFINE ONBD_LO,\ONBD$LODEFINE ONBD_HI,\ONBD$HIDEFINE RAM_SKEW,\RAM$SQSEGMENT M360:0-13 \M360DRVSEGMENT DRVL:15 \DRVLSEGMENT DISK:14 \DISKLIBINPUT &.M360DRV.ROINPUT &.DRVLIB.ROINPUT &.DISKLIB.TFEND=/*=ENDNNNNN  €=/*=/*†&.SCCDRV.LG=/*E=/* Link chain file run at sysgen time to link Z8530 (VME117) driver.=/*G=/* Sysgen parameter SCCDRV = \SCCDRV = address at which to link driver=/**=LINK ,&.SCCDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT SCC:0-13 \SCCDRVSEGMENT DRVL:15 \DRVLSEGMENT TERM:14 \TERMLIBINPUT &.SCCDRV.ROINPUT &.DRVLIB.ROINPUT &.TERMLIB.TFEND=/*=ENDNNNNNN‰=/*=/*†&.P117DRV.LG=/*D=/* Link chain file run at sysgen time to link VME117 printer driver=/*I=/* Sysgen parameter P117DRV = \P117DRV = address at which to link driver=/*+=LINK ,&.P117DRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT P117:0-13 \P117DRVSEGMENT DRVL:15 \DRVLSEGMENT PRNT:14 \PRNTLIBINPUT &.P117DRV.ROINPUT &.DRVLIB.ROINPUT &.PRNTLIB.TFEND=/*=ENDNNNN  NN’³' PRNT1 LG§§  PRNTLIB LG°° MPSC400 SI¹¹  MPSCV03 SI  PIA101 SIËË  PIA410 SIÔÔ  PIAEXM SIÝÝ  ACIADRV ROææ DISKLIB ROïï EPCIDRV RO IPCDRV RO   M300DRV RO"" M319DRV ROCC M320DRV ROTT  M331DRV ROee M360DRV RO~~ M420DRV RO‡‡ M435DRV RO MFPDRV RO©© MPCCDRV RO²² =/*=/*†&.PRNT1.LG=/*6=/* Link chain file run at sysgen time to link PRNTLIB=/*0=/* PRNTLIB modules should all be in SECTION 14./=/*DRVLIB‚modulesshouldallbeinSECTION15.=/**=LINK ,&.PRNTLIB.TF,\WORKLS;HMIXR,\LISTOPTINPUT &.PRNTLIB.ROINPUT &.PRTTYPE.ROEND=/*=ENDNNNNNNŸ  =/*=/*†&.PRNTLIB.LG=/*6=/* Link chain file run at sysgen time to link PRNTLIB=/*I=/* Sysgen parameter PRNTLIB = \PRNTLIB = address at which to link driverC=/* Sysgen parameter DRVL = \DRVL = address at which to link driver=/*0=/* PRNTLIB modules should all be in SECTION 14./=/*DRVLIB‚modulesshouldallbeinSECTION15.=/*+=LINK ,&.PRNTLIB.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENTPRNT(R):14‚\PRNTLIBSEGMENTDRVL(R):15‚\DRVLINPUT &.PRNTLIB.TFINPUT &.DRVLIB.ROEND=/*=ENDNNNNNN¨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‚Definethenumberofterminalson2ndboardNNNN N± ?* &.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)NNNNNº @* &.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)NNN NNNà 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‚Definethenumberofprinterson2ndMVME410NNNNNNÌ 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)N NNNNNÕ b1ACIADRV -ASREL' ACIADRV SA"&†VERSAdos ACIA terminal driver with type-ahead 12/03/85S2pTERM_TBE pTERM_INI pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR F3~vP121854 4`ö````ä`²F3@`Ä`Æ`È`ØN¹(gk/ idR('@çFíB/ (mpN¬<(_Fß`û&BB‚)!) €Á"à‰à‰‚Â$àŠI3àŠNuaBùògr„`úòNuPíaQíg / / p*N@NuHç€A |& -L3$faBù´`aBù®LßNuHç XJgçða(Lé\”€)BQía¼g / / p*N@S)'LßF3NuIú6g.²fø)f i€&gp) ´€m∔€`âŠ(il)BNuÒÓãå 3 ìíï<4NNNNNNN Y1EPCIDRV -ASREL' EPCIDRV SA &†VERSAdos 2661 terminal driver with type-aheadS2pTERM_TBE pTERM_INI pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR *F3~vP121885 4` `<`x`’``F3@`(`:`L`bN¹(gk/,+a+FŒ FaD1@1A -fl’1l”l“B†ÆalF3a°2<0‰| |`  -gšaØ,+aª+FŒ FaÞH§ÀazF3+FŒB†ÆÆ -faîaNa’ - f(g2< `2< aF3`ö+f2< `2< B€(gJ(Qf €‚R(Qa”`Âaþ+FŒF3,+*++E˜aJ+F”B†ÆÆaÊa+f+f2<(`2<(F3`+f2<(`2<(‰B€+g€À+g€ˆHç€*mÀB€F3,*ÀüHÛÀLßKí-g€ - g€„- g€Lß F3É r‰ "-‰"-ŒÉB‰r‰("-˜‰,"-”É0|8|F3`´+g"+k²¬†m<…` B†ÆaÀa+f2<@‰F3| |`j2<@‰2<‰B‰ "+É||` gR g@†<£a4`"B,ƒJm|f S-‡a` F3Sm|B,ƒJ,g <¡a`Î|€|€ `B,ƒS-‡;m~|mÿp­qH3€g¤J,g <¤aÊ`”B­‚ ,…g +|* *‚`&B€,‰S€ãˆ€… 4g4+|H3€* L‚Sm€mB,||€ `j;m~€<¥aj`XB€,‹ n@ÀüHF3$mÀÕÀ;m~€,fÒS-‡JRf& ,qg ,qg`  ‘ @gøaF3` ‘&j ,pg ,rgr ,qg ,‡gÌ`– jB -F3fTCú @oaÄ`² @ fB€ãH1f*g<Ã`1gL•F3'BB„1g Bƒ • ™ÈÃ'DA`$ ,€gad`R$*gF B6F3ª`ª|æ/,j|,_B«6<æ<qp$*IíœafBR`b"jF3©øO`Â"j j,•$Bð -fB @g* @g$ @F3g @g @gJ@g @fa8`&B+L™#A Bi`ZJ@g,‡F3f^B+(g¼HçKêl£ l£ ,§Bmg í é lF3©l©Lß Bm| `jHçKê;i +i iiF3iB-ii+i+i""i&&i''0)2)Â@F@Àm€AF3;@Lß `„aŽ3A(m"B,||€ BmzJ,fúIì2<ŒìF3h*B(*ÂüH mÀÑÁAè2<@Œ0)2<_³Œ äHe#h æHehF3hhh` iiâHehh`iäHeF3hh`iâHehh`iâHe"(Ì#A`")F3ÌâHe2("Œ$3A"`2)"Œ$|(|íq"m"|€T-‡F3|€ B€`üGèzaH3A"(GêAèz3k #k #h fL#hF3kkkkkk#k#k""k&&k''hF3))B`@3h h`îCú @oar`b @ fB€ãH1B„1g ™F3'DAp$*6<pIíœaBR(m",f j S('B,||€F3 BmzS­ÆLß\þ|NuFíB+WrmpRmzaøŒJ€f mzf"íqmF3pIíœp<ÿ6<ÿ$-a†NuB,fÁgÁgÁF3 gÁ,ŸgÁ B&l¡'l£ B) ,¥gÁF3gÁ gÁgÁNu,~|)m<g X€X‡”€p­8F3pX€°-:c-:€)‚p9ƒp g9„p g…p B4p LÔüaNuHç m4F3pJ-ÆfpN@` Lß8+Wv`Lß8B­vNuãäáåÇÇéìíòèâñÇ>3ôÑîáõÒÓïæÇö÷øèÆáèÇêáÇÇòèÇÇÇ4B1M300DRV -ASREL' M300DRV SA#8&†MVME-300 (GPIB) driverH2pRAM_SKEW pONBD_HI pONBD_LO pGPIBXP pOFFBD_HI pOFFBD_LO ^F3€Ú–T 121285 4F3  !"  F3  #F3 ¢ ª ² ¾ Ð à  ú  " * 2 : B J R Z , 0 „F3  b V ô"tŽÔú0"P@´ÿ ÿÿÿ$ÿ&ÿ(ÿ*ÿ0ÿ4ÿ6ÿ>ÿ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 „p)á€)á€) €(e €(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 pLßðgaö g)%AÀpaÞgŠAíp P)- f((F3 gj|'aÊ;|jpa¤|'`P f|'`<#+3p `fF3(‚Aa 4` pg f |€|-|'grAíp PF3)-‚"(,)%g"((f|'`F|' -kfrÀÂ-yfF3ík`„By)%gík`)%gíkg pa È|'F3gaÒBmjpa ®|'ga¸Bmjpa ” 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€a eÈ ,´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@aZ((Aínpgü R€gF3ü R€g ÂR€t‘À`þšJ€fôîrNua(0+@g(F3g|'|þ|ÿ t`þhî-kg| 'rNu<_`.<?`F3&a2 `| 'a @`+ ``øAíp$Pê|F3-<`Þ+ adA``Æ<`¾<p`¶<`®<`F3¦<`ž<`–< `Ž<`†<`~<`vaöNHçÿþAú>"|F3èr-B$ p"N@` / / p*N@"Lßÿík|‰'| 'rNuHç*AF3 mL±íHg4­kg,(h&h"m"| ')/-kfèB-laú®LßF38Ns­kHçÿþAúÿª“É$ -B€p"N@` / / p*N@"LßÿNuaLF3 F+Ef+Hb` -kf4-kf@y+mVZr`8-yÂg,gvF3+ ÂÆ¶faõ4fB-y­kr<þNurÝ<Nu/F@@àH@  €(F3$e €(b€(@àˆ@àˆ@ Nu+|fA/rNua€(Nu mF3ZP'R­ZrNu|';|j0<–QÈÿþ|'rNu|Ž'0<QÈÿþi- F3|'rNu+ @+@mrNurÞa+ (ÿï€@aÈrNu)F3'j­k|'rNurÙNu)'k­k­kík| 'rNurÙNu)F3'j­k­k| 'rNurÙNu)'k­k­kík|'rNuF3rÙNua~$I"Fa 1|1|ÿpÐh82ØQÈÿürNu$IaT"FAìz`x$IaFF3"Fa.±üfd/ Eípp,*ç€ m^%ˆ%Œík0,²gR@Eð>+JF3^$_J,*f(/ aòº"_) gJ*)j© ` / "Jaþ`"_4<0<ÿàÀifF3R0<ðÀifF0)ÁiF@Àhip0)HçàAè Cé Eúñ†rgâHe F3SAØQÉÿü`ìÑÁÓÁ`æLß4<B) bðJ,*f4*)F fA)F3A)g)k @aä©ÿÿÿ(©ÿÿÿ,Jl²g"4<C ,´g$@F3JªgHçþNªLßþJf|J©(VÀJ©,VÁtD±fjJ,*f0-rÀJ©(f€F3;@rŠ!p0,²€HçÀAèCé0ÙQÈÿüLßÃHa*|PJ,*fÃHtAF3( gJ*)krNu‚rˆNuaXpJ,*f*%þ€l{l||JNuF3/ t(kff€Â"m"B-"_Nufæ`ìp,*Aípç€ pF3Nu mL.( ,(z:(x8(NuHç‚€0<$Aúï><r‚¼XWÈÿüf 4<$”@ãBrF3JLßANuAíH"mL³íHgÓü³ÈfCíè+IL³íHNu/ CíH mHBP!L!KF3!G !F1D1EÑü±ÉfAíè±íLg+HHp"_NuAúîþ80 ,K|fF3pÆg¶g±D4Bgaÿ6Æh¶f 4BgB0-j ,K|g f F3f*rÙ`pfö@gggä`  ggÖg, ,K|g-F3sgÀaþ¬$((f$(,+ rÜggrÚAíp hJ¨ grNuHç?~,mF3L½íHg¨aïaBf< g ,K|grÞ`*F3grÞAíp P( g g ,J|grÚ`rJNuHç½þfJ…g i0p3@N@`Nqr„`rLß½Nu4NN NNNP1M319DRV -ASREL' M319DRV SA&2&†VERSAdos M319 Disk Driver - 12/13/85=2pRAM_SKEW pONBD_HI pONBD_LO pOFFBD_HI pOFFBD_LO ' ÎF3 <@121385 4@€€ €¨\>ØF3/ |pN@`/&F-qg<ó`,(m"-‡g<„`(j+mPˆpAúþ´<¼XWÈÿüf F3Ñü 0Nð<‚`ìz<,+af+FŒB†aþ"HÓÀ. EéB…aR üÛóp0ÚF3QÈÿü ,€}gB$G`¬;|ÈEíþ+JŒ+|ÄB†ÆÆ2†aô2<aF3$G`^,+z`ˆaØ+FŒB†ÆÆa²a$aò,F3g2< `2< a`P+g&<‚ ,}gT ,€}gJ"+j<…F3`gp`nrõJ)Ff J©LfÿB)F3€G )Hfa„N¹(LíHíŒYmœbÿTaR-† -€†fòPí€`ì+_‚LßF3<NuQíž$¼­ `ÿ( m<ù`Ò )Hfr`Ä)Jg F3f aÊ`†``| fF -žf" -¥dR-¥R $¼Píž`þÆ`à`F3 -¥dR-¥$¼`þ¬`èav`4 g f -¥dT-¥Píž`þ†`ê` F3ôïáùùùäááöá;ò+R j¤v6* –j—©`†ézt4&)P–‚$B-ž`þÂF3Ñãêìáåäïãˆãáõïìö0*gtS‚âXdúD‚‚; ØNuXPí€rô`þŠå6åF3  °NuNu°Nu°NuHç   )X©\gR€#@pp)IÀü$mˆ$rµüF3’( eµü(b•ü(B‚)g<`*)f<)f<`<)F3g<B.BtB€)g)!` p)gp@/3@x) @03@vF3@!g <(!ã@2 <(ã@3`Ng0 <(ã@2 <(ã@3 <(f|F34`|4` <("ã@2 <(ã@3)/gAúþÅ`Aúþº0)fF3)fã|4ãA15i,8p5@63i&z fAúþt%P$ <(@$ F3 fAúþ`%P$ <(@$ fAúþH%P$ <(@$ fAúþ0%P$ <(@$F3€ fAúþ%P$ <(@$ fAúþ%P$ <(@$ )Hg )Paa,F3`‚ iJf*J©Pf)f i&f B€) â€#@T#|L iJf#iF3L iJf<‚`n`| )PažJ©|f |pHç`a”Lß#H|F3a<$¼)HH€»7%|)Jf| |`||BF3LßJNu@çH瀀Aíœ0!‰ðXPJ@fAúúô+H‚ m"aúlLßFßNu°NuBF3B‚2)x) €Á"à‰à‰‚Â$HBR‚5@ABNu )pgŒ")Tg$Âü€|LUF3 &$<(B$*.gS*.`"<ÿ°m`"p5A / i`±ü(e±ü(F3 bÑü(%H _Ó©`#@p‚ézÓ©P€éz#@LJ©Tg B€) #@PNuHçB‚4)vF3 iJf•©LÕ©PJ©Tg|& <(@$*.gS*.Aí¦&HB„)$fxF3p` ÁÒ„²ivoR€"QÊÿðB„)%g4)vS‚ÛQÊÿü*ÈÀ4)v”„Gí¦× i|F3) B‚4)vS‚°g*.gêêêÛê&`0rêêêÓüÿF3Hé é é Óé€üHQÉÿÖR‹QÊÿ®$)|"’‚ B±ü(e±ü(bÑü(%H5AF3 B‚4)v) gT*0`B0Lß NuHç@€rp i|#||aLßNuHç`N@F3`Lß/)h/ p*N@¨LßNu |pN@``Ž+HˆrÂüXB˜QÉÿü mˆ±üF3’$(e±ü(bÑü( €r mˆ À€XQÉÿö mˆ±ü(e±ü(bÑü("â™63tá€àQÊÿø m"Èÿôm(ÿü|ÿþ¼`Ví€Nu<4 NNNNNO1M331DRV ASREL' M331DRV SA0&†VERSAdos MVME331/332 ICC Driver 3.0Ž2GICC pI_NRM_QE pI_HLT_QE pRAM_SKEW pONBD_HI pN_NRM_QE pN_HLT_QE pONBD_LO pI_UNS_QE pLOGPHY pOFFBD_HI pOFFBD_LO 'àF3 † X042486 4 ­z+HzCéÿô"­~+I~R­‚F3 NuHçð±ü(e±ü(bÑü( ­‚gz@çFíB$mz+RzS­‚"m~+Q~HÑ8CéF3I  |&mr@AR)#H#B ³ü(e³ü(bÓü(&‰+Jrµü(eµü(F3 bÕü('JFß` // p*N@ „"m"¼LßNuHçà|$mr³ü(e³ü(bF3BHÓü($‰+Hr±ü(e±ü(bÑü(%H"m"¼LßNu+gAëpN@`NqF3<„Oï`’+H†JfB,+ *+š†R… m†N¹(g <„Oï`f.g <áF3Oï`T F$* & (-†Nu,+*+`ÀAB |N¹(g // p*N@ ¢ GS('F3` T|Lß\þNu|ÿþLß\þNuBA& |N¹(g // p*N@ ¡`2-C -EF3-D DR('Ö m"(fB`` J-pgB`B€Nu@çFíB|p<ó |F3 ,m”tg@B&nA&. JfN¹(g // p*N@ ¡`N¹(g // p*F3N@ ¢&nS+'Mî,S‚ Bf®FßJf`†`ÿ&Nua¢"H6<ÿB€aÐ`àa|"H60ü\‚f( ü0ü \‚B˜0ü\‚ üÿ0ü\‚ üÿ` ü0ü F3\‚ üÿ0ü\‚f. ü0<0ÀE @ g"Hç €Aíò$<<aû LßF3` üHç €Aíð$<<aúþLß0ü\‚f ü` ü0üF3\‚fB˜`f ü` üCîT2üfN®®0<><`BYRG GpoöCîV||0ü\‚ üÿ`,îF3®0<><`2ÀRG G€oö0ü\‚ ü0ü\‚fB˜` üÿ0üF3\‚gB˜` üÿCîR2ü><0<2ÇQÈÿü fCîT¼ g0üF3\‚ f üÿ`B˜Nu2Kn†–]fn,X°ÐF3 `À %€K–0ü\‚B€0+ ÀCîTB@0ü! üÿ\‚+gF3¼+g ¼B¨ÿüB@+g¼B@+g¼CîVB@+g¼F3B@+g¼0ü\‚ ë"EîVB@Cë<` g¼R oîEîF3X4ü"J0<BYQÈÿü| EîV4ü"J0<BYQÈÿü| 0ü\‚ ë"Eë&F3B€0<J"VÈÿüR@-@0ü\‚B€+&åˆCúþ´ ñ0ü\‚B€+' ÀJ+(g*CîVF3><`À+(é¶f¼pRG GÿoàNu/,m”4<,ÄÁMö($Nu,+F3z:"H m†N¹(g <„Oï`ù¸ I"F~ÀifÄifø~0<ðÀi fê0Cír  €(F3$Ie €(b€( À  €(e €(b€( À"m")Ag gìaAíF3Š4< ) gò gaæX¼) gò gaÆB)F3¼S f¸/ |*pN@`*_/J)F3Hf8ÖIé¹ü(e¹ü(bÙü(#L#| |aï®`ýêaîÖ<`ðdF3–g'B@ÿÐ@Iú 04Nô 88@–fT–®f†®F3f2f@aî‚<`ð<ÿ`ðœ–f–®fP®aîV<Æ`ïäF3 aîJ`ýVÖ|$. ‚(e ‚(b‚(#B#n aîä`ý aî B nF3|<æA |N¹(g // p*N@ ¤`üìL©À&)ÿôB©Biaî–F3g®`îg®`îgnfgF3. f`üŠfgî<aízîî`ü`î.F3@ÄáL< |N¹(g // p*N@ ¦`ü0aí`ü( )g<ÿ`ï2aíF3`üaìü`üaìô`üaìì`ûø )g )gþÈ<ÿ`îøaìÊJ*“gF3®`îJ*g®`î$n®<`î(aìŽ`ûš )@3g )g<ÿ`îœaìn`ûzaìf`ûraì^`ûjaìV`ûbaìN`ûZ4NJ* WARNING - The MVME360 driver is NOT supported without the purchase of an(*‹MVME360board,partnumberMVME360-VX.ŠENDN NNNNNNvO1M420DRV -ASREL' M420DRV SA3&†VERSAdos MVME420 (SASI) disk driver'2pCHAN_DON pDISK_INI pDISK_COM ŒF3phD121185 4`6` `h`°`´`´F3`ÞAúÿº+Hp;|t;|rvN¹(gNuaÀNuN¹(Nu m"pÀfNu|FíF3@Hçp8"m &m‚NÓ ÀGíŒ )Hf)fGíŒ`J)p )L"<ÿ°F3c ‘©L')P[)Ië ƒ#Ñ©P)HH€fi$Š iJfp;™a aF3\2)&J©TgâIS©TîISA&i`)H fZ)fR)g&Jí²fDv‚a¼F3Gí’ È È0ˆ`ÈGíŒJí²füÂR‹&üGíŒaÊaŽ`¼âF3gžmBapfBvH&ÀH&ÀH&ÀH&ÀH&ÀH&ÀH&ÀH&ÀQËF3ÿÎQÉÿÂ`Fv‚a.VéFfJv È È È È È È ÈF3 ÈQËÿÎQÉÿ¼#K`S-ŠbþæJna<¼ZWÏÿüf"EúÿÊF3gXŠ gPŠ6<–G(ÿà´20LßÜNu ‚ Nu°Nu@çH瀀Aí°0!‰ðXPJ@F3fAúû+H‚ m"aûfLßFßNu°Nu(m"Gì|€pU€°Ví€FF-€3f|Nu<4N G1M435DRV -ASREL' M435DRV SA46&†MAG TAPE driver for MVME4352(lF3 ^š" 4Aú :+HvAíœ0<B˜QÈÿü m"|F3 ÿè|ÿèNu>84@.@(@"@@@ F3 €ô€vx@ÿÿ+OpróJ-tQítf,*z:* mPaà(FF3 &j|+*kˆ o`~Cí¤0<lÀÆÓÀ0Aúÿbr‚<ÿÿR4kÐ6°XfòDF3 8BIF9zNð0Eéa üü0<0ÚQÈÿü`œ,,/z< mPad* F©F3 QížJmœgEú +JvF3 aö`EúÖ+Jv<æ|Fß`"Hçý€DÆeJ…g h0pN@`Nqr„`Lß¿NuNÓg&gJ)>gQé>NÓF3 `f|<`Pé@gNÓg fPé;gPé?NÓLßþ<F3 UNuÌ®L¶`fR¼(if|ÿè|ÿè|ÿè)S)Dg|ÿàaF3 `þò<ãJ)Egaf<ã`|ÿàaèaìgþQé:|ÿàaÒJ)F3 :g|ÿèiBÿð|ÿè<Ã(ÿøfÊJ)@fÂS)E`þ|<Ã(ÿøfF3 ¬J)@f¤<`œHç€&iZ ÈÿØ ÈÿØ ÈÿØ ÈÿØ ÈÿØ ÈÿØ F3 ÈÿØ Èÿ؃ fÈ#KZLßNuHç†*)N&iZ,äg ÈÿØ…`ðF3 g [ÿØ`ð@#KZLßaNu(ÿøVéF(ÿøfPé>aàgò|F3 ÿèaÊéBiBÿðQé;|axgŠ|ÿèab©BiBÿðaZgF3 lGúª&)at|ÿàa:QížJ(ÿø[éG )aîg|ÿèaØ)A`îF3 JƒgHçàÀp"BA-)$ K"CN@` LßQíž`LßPížNuHç?*AJ-žgQíž mF3 ""mzPíŸ&mvaRNÓLß8üNsHç?*AJ-žg$Qíž m""mzPíŸ&mva&QéF3 ><æ`dLß8üNsiC#iNR|AQé:Qé;Qé@#iRN#iVZagF3 , ©Nc@Gúÿˆ&)aÿ&|ÿàQé?PížaâQížJ)?gf`âF3 a’`ÜJ(ÿøj|=`|=J);g<Âf (ÿØ`ô`¶J):fJ)F3 @g  )AfrÃa`˜S)Cf arã`ˆanf<ã`z|ÿàaR|F3 ÿèiBÿð|ÿè`ÿ Hçü&)N&iZ(„*ä$< ƒm@HÿØ&ÀF3 HÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&ÀHÿØ&À‚ fȃ`Z BgF3 …gHÿØ&ÀYBS…Yƒ`ä Bg*<` g èÿØSƒS` |ÁA(ÿØR F3 oÞYB BgHÿØYB`ò#CN#KZLß?NuHç&)N&iZ)Af ƒgF3 èÿØSƒ`ê<ÁRƒ(ÿØgô#KZLß Nu|ÿè/(<@S„fü(ÿøgî|F3 ÿè|ÿè(Nu+_vJ-Ÿg QíŸLß8üNsLßþpUNu<pLé V–€)Ca÷šF3 S)'Líþ~Híþz"mzYmœbøÀa°Pít`ø<`<<ä(ÿøVéFf®(F3 ÿøVégJ)Hg)`<aøèQé:Qé@ang€Gúüì&) aüŠDÿàaÿPF3 QížJ(ÿøj|=`|=)=J)gBaîgÿGúüj&) aü| ÿèF3 aþÌQíž<`þÞ<`<Qé;Qé@a²gþÄGúü.&)$aûÌDÿàaþ’QíF3 ž<J);fþ <Ã(ÿøfþ’J)@fþŠ<Õ(ÿøfþ|<æ`þt<`F3 <Qé;aLgþ`GúûÊ&)aûhDÿàaþ.Qíž<ÂJ);fþ<<Õ(ÿøfþ.F3 <Ã(ÿøfþ <`þ(ÿøfLGú*&<aûJ-žf <á(ÿøNu+_53  aýÊ`ö°Hç?*A m""mzPíŸ/- <á(ÿøNu4NNNNNNN\1MFPDRV -ASREL' MFPDRV SA7D&†VERSAdos MK68901 terminal driver with type-aheadi2pTERM_TBE pMARK_DOW pTERM_INI pTERM_UNR pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR ¦F3ކP022686 4````*``ŽF3@`´`Ì`ä`èp-(Àü @!!N¹(gk/½f 9ø`9ôB)*B),B)F3B-{p(&㈠->½f0;``f0;`0;.@"àX@`` GF3A!  07  Q)      WF3 p€( g `( f`(F3 g( g@(FíB)@)\@ ->½g )F3À@ ->½f 9÷ø`9ýô|*|,Fü LßNuNuHç@@F3B€"m" ->½f`gÀLßNu ->½f 9ø`9ôF3Nu ->½f 9÷ø`9ýôNu| ,Nu|,Nu@çFíBIúüº+Lv+m"3 N¹(aýìFßNuN¹(FßNu<4NN N¡[1MPCCDRV -ASREL' MPCCDRV SA9&†VERSAdos R68560 terminal driver with tyep-aheadi2pTERM_TBE pMARK_DOW pTERM_INI pTERM_UNR pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR ”F3’ŠP022686 4`b`j`n`Ž`²`°F3`Ê`Î`Ò`Ö m" (ÿ0g&N¹(gk/-(F3@@@(- rf ü;ÿÿÁ`ü;ÿÿÃp)QÈÿú¼ÿ|À"|F3|€|ž |*LßNuNuHç@@B€"m") fÀLßNu©"F3‚Nué"NuéNu©Nu@çFíBIúüÌ+Lv+m"N¹(aþXFßNuN¹(Fß 3@Nu<4NNNª' MPSCDRV RO¿¿ MPSCSPR ROÈÈ MPSCSUP ROÑÑ P050DRV ROÚÚ P117DRV ROãã PIADRV ROìì PRNTLIB ROõõ RWINDRV ROþþ SCCDRV RO SCSIDRV RO SIODRV RO!! TERMLIB RO** VM22DRV ROCC DRVLIB ROHH Y1MPSCDRV -ASREL' MPSCDRV SA@1&†VERSAdos 7201 terminal driver with type-aheadi2pTERM_TBE pMARK_DOW pTERM_INI pTERM_UNR pTERM_COM pTERM_GOT pTERM_BRE pRESET pLOG_ERR F3˜~P121885 4`P`R`T` Ž` `ŠF3`Â`Î`Ú`ìNqNqNqNqN¹(gk/`P`jAúÿÆ+H~F3@€N¹(gNuahNuN¹(Nu"m"9ÿÿÇg)k|ÿþNuQív-If-HF3 gJ-wf aô|NuHç:aæ2<dJ))gQÉÿòR-xN¹(S-xLß\þ|F3NuHçÀ@"m"a˜ga¨0<LßNu-“g) gê fÖ€€F3€€€||||||2< )fQÉÿö0<ÿÿLßF3Nu2<dJ))gQÉÿò`ÿx<LßNu/ "m") "_Nu@çFíF3B/ ¹ÿÿÇ"m"J)"_FßNuùÿÿÇPívN¹(Nu@çFíBí(ÿÿÏí)ÿÿ 3Ç"m"ééa¦FßNu<4NNN NNÒK1P117DRV -ASREL' P117DRV SAE&†VERSAdos MVME117 printer driver'2pINTR_REC pPRNT_INI pPRNT_COM *F3XP8111185 4`°`n`~`žAúÿÆ+H~F3@€N¹(gNuažNuN¹(Nu"m")FÀf|ÿþNu-If-HgJ-wf F3a*|NuHç:a2<d| )fQÉÿð2<d|)fQÉÿðR-F3 xN¹(S-xLß\þ|NuHçÀ@"m"a¸g$2<d|)fQÉÿða°0<F3LßNu-“gà  gì  fØ@@@@@©©F3©©©é2< )gQÉÿö0<ÿÿLßNu2<d| )F3fQÉÿð`ÿn<LßNu/ "m"`  "_Nu@çFíB/ "m"||03| "_FßNu/ "m"©©"_NuaÄNu<4NNNNNÛG1PIADRV -ASREL' PIADRV SAET&†VERSAdos PIA printer driver'2pINTR_REC pPRNT_INI pPRNT_COM F3XP8111185 4`”``.`NAúÿÆ+H~F3@€N¹(gNuaNNuN¹(Nu"m") g) g|ÿþNu-IF3f-HgJ-wf aÊ|NuHç:a¼R-xN¹(S-xLß\þ|NuHçÀ@"m"F3a‚ga’0<LßNu-“g) gê fÖ€€€€€©F3©©©©é2< )fQÉÿö0<ÿÿLßNuJ<LßF3Nu/ "m") "_Nu@çFíB/ "m"|<|<JJ)"_FßNu/ F3"m"éé"_Nu@çFíB"m"||¼ÿ -Rf|€`| 3a” -Rf|FßNu<4N NNNNäT1PRNTLIB -ASREL' PRNTLIB SAFH&†VERSAdos printer driver generic routinesš2pI_NRM_QE pNUMBYTES pNUMTYPES pN_NRM_QE NFLT_TIME œpN_HLT_QE pCH_TYPES NINTR_REC ppSET_TIME NPRNT_INI NPRNT_COM `pLOGPHY .|G3$!PRNTLIB120685 4@€€¶ Þ-Aù(2<` °gÑü)ÿRA A oî|F3ùy<ÿÿNuXp;Xr;Xt<Nu+O‚,*z:* mPa®(F&jróJ-yffF3< Fg*+KÄ+LÈ -P+@À0,;@|J-wg<„NuprAúÿX¼XWÈÿüfÒpF3þNðþr‚`CíŠa&3mr3mtp4ÙQÈÿürAúDp%N@.m‚pNu,,z< mÀF3a$FBm|mpNuCëzaÔ`CíŠaÌ<*f¸#kŠ6FíB/ (m~N¬0(_QíwQív mÀS(' mÈ|æ!m¼B­¼|2*AJ-vfLß|üNsQív/ (m~N¬0(_Qíw mÀS('&mÄ(mÈ2<áA)m¼D3J-xgQízaÿ6g / / p*N@`Pízaÿ Qízg / / p*N@Lß|üNs<4NíE1RWINDRV -ASREL' RWINDRV SAH &†VERSAdos RWIN disk driver'2pCHAN_DON pDISK_INI pDISK_COM ¶F3phD121185 4`Ä``z`Â`Æ`ÆF3`ðAúÿº+Hp;|t;|rvN¹(gNuaÒNuN¹(Nu m"pPÀfNu¼F3fhÿþ Hçp8 m""mŒ&m‚NÓ ÀGíŒ)p )Tf )L"<ÿ°c F3')P[)Ië ƒ#‘©LÑ©P)HH€ f$i$Š iJg( iJg iJF3fp`pB) ²ko+ÇIúÿ4)Jf|Ÿ`|Ÿa˜2)&F3J©TgâIîIAža²&i`)H gx ÿÿgr  g\ )Hf^ iJfV0)F3 ) ) <a¬QíŠajf(J- füi$ŠahGí†aaDF3<@< arQíŠ`ì`òjÈgä €°©Xc Joa@`œJF3m`vH&ÀH&ÀH&ÀH&ÀH&ÀH&ÀH&ÀH&ÀQËÿÎ`^vHF3HHHHHHHQËÿÞNuv È È È È ÈF3 È È ÈQËÿÎ#K`S-žfþ¬R­†S-ŠbþŽfhÿþ ` aBF3@fJ- fÖB©TJ©LfýÆ)GN¹(LíHíŒYmœbý¨aPí€`øF3+_‚LßJ-Šg¼<Nu/"-†ÿà+i\†­ÿÿ†ƒ­†"NuHçþ< ¼¼0¼¼¼¼€¼ ¼-{ÀF3À(g€@{¼€LßNuNuB€ -=½f -fNuHç@@"m"F3fÀLßNu -=½f -fNu@çFíBHç€-{€@{¼€F3LßFßNu -=½f -fNu@çFíBHç€-{À@{¼€LßFßNu@çF3FíBHç€-{À@{¼€LßFßNu@çFíBHç€-{€@{¼€LßF3FßNu@çFíBIúû¢+Lv"m"+m"-f ¼ ¼€` -=½fT­`X­(3€¼ ¼@-(¼€N¹(aüôFßNu<4NNÿ E1SCSIDRV -ASREL' SCSIDRV SAQ &†VERSAdos SCSI disk driver22pCHAN_DON pDISK_INI pDISK_COM pLOGPHY1 F3phD022486 4`ü``þ`þ`þ`ìF3`(Aúÿº+Hp;|t;|@vN¹(gNua NuN¹(Nu/NùðLHç?>*AFíBJ-ÝgQíÝQíÛLß|üNsQíÛNùðLHç?>F3*AFíBJ-ÝgQíÝQíÜLß|üNsaQíÜNùðH·ügp×ü $fAúÿÂ`2 %fAúÿº`& &fAúÿ²` 'F3fAúÿª` (fAúÿ¢`Nq ±üNuH瀠$IÕüx2)pgÀ`2F3gÀÀf g€gÀ gÀ5@)fAúÿF3`AúÿB€)/0)f)fãd<ÿ@fê`ªi!F35i, i | |5i& JÑü$%H <ˆaþÄg*X)F3f5i*`5i"B€@ÐÑjBJLßNuNu°Nu°NuH熨$IÕüxB©F3< )Hg )ÿÿHg`0%i`%iP )L €ÿc€ÿ#@<0<ÿ5@ |F3= ih (0@àX0€)HH€{`m)m( )HF3fZi$BªBª iJf%i\%iP|`0 id(il*,,, gN¹F3€( F5X%H iJf|Lßa°NuHç`à#Mt#Ip$IÕüxaüÎJ-ÚfF3PíÚAúû´"|B-)S$ aýLßNu°Nup-(Àü @Cúú ‰ | ¼F3ðP MÑü–+H†+HŠ+HŽ MÑüÒ+H’p#r&N@`/p%N@NuN¹(Nu/"m"F3)g2B) -fg`fã AúNð``b``""pF3R@Nu©N¹(`n) N¹(`b)J) g pêN¹(`g pèN¹(`F3gpèN¹(¼0`&-{@{³¼€gÀ-{gN¹(`) "pU@Nu@çFíF3Bé@ FßNu)NuHç@"m"¼0¼LßNuHçÀÀAíl"m"¼p@F3( f` ( g( g@pr( g €F3€`ÀÀÁ@Ap(&ãˆ0;@ àX @ `"0 €F3@ ) ) ) ¼¼0p@éééF3é(g©LßNuNuHç@@B€"m")fÀLßNu©F3NuéNuéNu©Nu@çFíBIúýL+Lv+m""m"B)| i 3H{N¹(aþŒFßNuN¹(FßNu<4NNNNQ1TERMLIB -ASREL' TERMLIB SAT)&†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 àNMARK_DOW ’NTERM_INI LNTERM_UNR  NTERM_COM NTERM_GOT NTERM_BRE pLOGPHY NRESET âNLOG_ERR ˜.ŠF3!TERMLIB121985 4@@€€ú¦v„Ö@€G3€zú`ä`ø@çFíBB-z-Aù(2<` °g"Ñü)ÿRA A oî|ùÂ|ÿüªJ3DFß<ÿÿNuXl;Xn;Xp+Xrr$p#N@`Fß<Nu+HB­ªAù*˜+HAù* p+H(R3DDDAù*+H4Aù*,+H@Aù* 0+HAù*R+HLAù*6+HXAù*Ì+Hd-â@½Fß<F3Nu+O`|`z+jl,*B…:*"mPaš&F-Âg+Kd`><J-ìg prAúF3þè` Fgî+Kd+mPhprAúþ°¼XWÈÿüfÒpþNðþr‚(mdAAíʼ F3|p1AAújp%N@`Æ"m"Aú Žp%N@`¶,+z:"mha "F/ (mvN¬a8F3²-ˆf -Ža+mÆÚB­°+|8pª`¨²-‰f0+mÆÎJ-æg-ugp\F3aò -ŽaÂ`ý¾+| 8pª`p±íÊcpaÐ`DÁ+HÎR­°J-æg bF3p^a°R­°r@Òa¢-tg±íÊc ‘íÆ+H¸``ý^J-æg J-êgp>aF3t -ŽaDBmðHçÀAí "mN‘LßNuH瀀 -ªc®á˜+@ª /bB­´@F3ïHçÀAí "mN‘Lß`„ ?b2Qíê0@ñ-®f-ugadHçÀF3Aí"mN‘Lß`JB­ª md|!m¸QíäQíå mhS('Aíʼ |pF31|a g /-l/ p*N@LßNu@çFíB;|àò;|àôBmöBmþFßJ-çF3gaœNuJ-äf -Ú­Ò+@¸NuKéýÜ"m" -zg® -ìf¤J-ªkœF3fRAíØ¼ |€1|/ (mvN¬<(_À@ | a/ (mvN¬0(_F3aRg /-l/ p*N@¦`F mdaÔ!@pÆ@Aíʼ |p1@aÔ/ (mF3vN¬0(_a g /-l/ p*N@NuKéýô"m"/ (mvN¬,(_fNu0-îNû`xNqF3`æ``L`f`žJ-ég0B-¼;|ø;|úBmü -ÖR€+@ÚJ-ÃgB-F3Ä`B-ï`š/ (mvN¬((_ g fm“¼g a@íÃNuJ-ëgQíëF3HçÀAí"mN‘Lß` Jmðfaý†NuHçÀQíç-ugaúíÃHçÀAíF3 "mN‘Lß`FíB/ (mvN¬D(_Fü LßNu mÚ±íÖcaþBmî`ÿz`F3+HÚ`ÿ mÚ±íÖb g+HÚ cR­´`þèBmîaýÔ -´B2-vF3gnüg -ŽaþNu`þJ­°gS­° < aäNuBmî`ÿ mÚ±íÎfBmF3î`þò+HÚR­° bR­°@H@€^a¤Nu`þf-Ãf2-Ãf,F3-Ãf2-Ãf8-Ãf2-ÃfBmÄï`þ Nu­Ã-„`þR­ÃF3-…`þDNuJ-¼f­Ã`˜pS-¼`ýôJmüf­Ã`€2-ø5oSmøf;|F3øSmü`ýÊá˜g"a@Bá˜føaRíÃHçÀAí "mN‘LßNuaa4íÃHçF3ÀAí "mN‘LßNu2-ú€oSmúf;|úRmüNuJ-Ãf mïÄ|ïNuF3KéýÐ"m"J-ègaÜíÃNuKéýÄ"m"Qíè­ÃHçÀAí "mN‘LßNuKéF3ý¸"m"Píç-uga˜íÃHçÀAí "mN‘Lß`FíB/ (mvN¬@(_FüF3 NuJmþf"@;môþ màöfRmþ màþcBmþNu -¸fJ-äg -έF3Æ` -Ú­ÒNuHç@aûL;|ø;|úBmüBmîB-ÃBmðJ-ªc B­ª"mhF3S)'QíéQíäQíåQíëQíèB-¼LßNuKéý¬"m"Hç?|FíB/ (mvN¬H(_FüF3 aþ¨íÃAú$"|,r$ p"N@` /-l/ p*N@"Lß>üNu/ *AJ-ìg&@ç@ÀF3@FÀ"m"/ (mvN¬L(_Fß m¦N¨ `HçÀAí`"mN‘Lß*_NsKéý "m"F3­Ãg,FíB/ (mvN¬L(_Fü |pªHçÀAí "mN‘LßNuPíÁAíÊaL3$QíÁg /-l/ p*N@NuHçX2(&-l( pf -ÁfaBï¸`aBï²`: R3 @qf -ÁfaBïž`aBï˜` €f8( -ÁfaBï€`aBïz``þLßNu|F3ÿüª|ÑÂNuJ-ªc8AíÊ"mdaþ#@pá@¼ |p1@aþ/ (mvF3N¬0(_aÿLNuJ-ìg m¦N¨NuHçÀAí "mN‘LßNuJ-ìg À-À m¦NF3NuÀ-ÀfJ-ègJ-…gÊ-tfNu`f°-†fHçÀAí$"mN‘LßNu-…F3fJ-èf–²f J-èfŠNu°-„fPíèHçÀAí0"mN‘LßNu°-‡f J-åF3fF-éNu màöfpêaüðNu2- ô€Smôf;|àôRmö mÌöfHçÀAíHF3"mN‘LßHçÀAí"mN‘LßNuHçÀAí<"mN‘LßNuJ-ìg m¦N¨F3NuHçÀAí$"mN‘LßNu/ "m"/ (mvN¬((_"_pNuHç~@ç@À@FÀ"m"<3/ (mvN¬H(_FßAúý""|,r$ p"N@` /-l/ p*N@"Lß~þpNu4NNE1VM22DRV -ASREL' VM22DRV SAW0&†VERSAdos VM22 disk driver'2pCHAN_DON pDISK_INI pDISK_COM FF3phD021286 4`(`T`ä`ä`ä`F3`JAúÿº+Hp;| t;|vvN¹(gNua,NuN¹(Nu m†"mxp0-tS@J¨F3gJ(0gÑüfJ(fÑüDÓüvQÈÿØ<Nu(|Hçpt(F3€f )G ($#@`N¹(Lß<NuPí€ €g<Ñ` Bc<ù`; $(F3`ÂPí€rô`ºòÑéçáîì샃øù‚æƒõùùããäÑшõùùùùùùÑùùùùùùùùùùùùùùùùùùùùùùF3ùùùùùùùùùùù/ $iri)i! 5i* 5i, i i/$_°NuHçÀ F32)&pA€gR`öç2)g gBÀ`<fÀf€F3fÀgÀgÀ gÀ@p$m†pDr)IÀÁÕÀpÕüDF3B¢QÈÿü#JrLßNu°Nu°NuHçÁ $ir~ )Hg )ÿÿHg`*%iP%iL F3%i`J©Tg )L©Tg. ‡)Jg<`<)f<@F3ip)fp) °©Po*Çm(m)|iI|)F3HH€»` )Hf4i$i% iJf¼`%iP iJf %iF3\ ê|%Gg6")T%A $G )PÐ%@#@P )L%@ )`Âü€F3Ð%@~`ÿL߃°NuH瀀 m" <èS€gýœfô| )rÈÐF3LßNu°Nu |pN@``>+H†r ÂüSB˜QÉÿü m†$H m""<„€SgF3gög¼@¼agVí€Nu"<'SgTgö¼ 5|"<èSg:F3fö||" ÈÐ"<èSg *€fôJ*f*Nu<Nu4NN;,1DRVLIB ASREL' DRVLIB QEVENT RO (&†~2OI_HLT_QE €OI_NRM_QE OI_UNS_QE ”OLOGPHY æON_HLT_QE xON_NRM_QE ON_UNS_QE ŒOSET_TIME /8F3Hçÿüp`Hçÿüp:3BWNqNq0Lß?¿NuHçàÀ?<Jƒgp"BA-)$ K"CN@``BW0LßNu4N D' VMES10 KEYBRD AGUUà DRVS10 CI$ TERMDRV LG'' CRTINIT RO00 EDITMODERO99 FEEDER ROBB INCHAR ROKK OUTCHS ROTT PAGEMODEROee POUTCHS ROnn TERMDRV RO‡‡ :KEYBRD„IDNTƒ1,0„RoutinesforhandlingtheVME/10keyboard.O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***F***…FILENAME:‚KEYBRD--ROUTINESFORHANDLINGTHEVME/10KEYBOARD.…******É***I***…ENVIRONMENT:‚ThisispartoftheVERSAdoskeyboard/screendriver,‚******‡TERMDRV.º******É***E***…FUNCTION:‚Theseroutinesprovideinitializationandinterrupt†***B***‡servicefortheVME/10keyboard,whichisconnectedtotheˆ***?***‡processorboardthrougha2661half-duplexserialport.‹******É***H***…NOTES:‚Thismoduleisverymuchtable-driven,sopainshavebeenƒ***F***‡takentoreducethesizeofthetables.‚Youwillfindbyteandƒ***F***‡wordoffsetsinsteadoflongwordaddresses,andwherefeasible„***D***‡functionsareusedinsteadoftablestogeneratecharacters.†******É******É***,***…EXTERNALDATASTRUCTURESREFERENCED: ******É******É***)***…EXTERNALENTRYPOINTSREFERENCED:£***!***‡RESET_SCREEN„CLEAR_SCREEN¦******É***"***…SERVICESCALLEDVIATRAPS:ª******É******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revisionhistory(addnewchangestotop).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------<*…01/30/85‚M.DUH‰UsingnewkeyboardROMtoringthe'BELL'.7*…01/11/85‚D.VŒAddedlogictoallowsysgenparameterto)*ždetermineuseageofKeyswitchonpanel.:*…10/11/84‚BWNŒInGET_CHAR,sendbackconditioncodeswith0*žandiftheinterruptwasnotforus.=*…12/22/83‚RussRustad„Increaseddelayduringkeyboardreset.9*†7/29/83‚SteveFranckƒAddeddelayduringkeyboardreset.M,VD^<fGn6v;~D†9ŽF–?ž6¦'®J¶/¾:Æ?ÎHÖ9ÞMæIîCöBþ1e56*†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ƒRoutinestoclearandreset the*§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.‚TheparameterI*‚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***=Anerror occurredduringinitialization.******É***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***‡Iftheinter ruptwasnotfromtheSTATUScommand,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*‚areabovethatlabelwillnotbecalledwhilethekeyboardlockonthefrontK*‚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…MA CROŠ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„C LR_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.‚ThereasonthiskeyD***‡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. (ŠB  TSTƒ#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.   ŠENDNNNN**ˆ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 link! SUBSˆKEYBRD.AG.ASM‰KEYBRD.AG,KEYBRD.RO,\WORKLS;RZ=50,\LISTOPT TERMDRVƒ=*SUBSˆTERMDRV.LGLINKˆTERMDRV.LGPROCESS…TERMDRV.LOEND‰TERMDRV.LO 8* Assemble the IOC portion and merge with current IOC.ROSUBSˆIOC.DRVS10.AG0ASM‰IOC.DRVS10.AG,NEW.RO,\WORKLS;RMZ=80,\LISTOPT 2* Generate merged IOC.RO by appending new .RO fileINCLUDE…&.IOCGEN.CI * Adjust starting CRT device #&CRTDV„=\&CRTDV+\NOLTERMNNNN%=/*=/*†VMES10.TERMDRV.LG=/*L=/* Link chain file run at sysgen time to link VME/10 keyboard/screen driver=/*I=/* Sysgen parameter TERMDRV = \TERMDRV = address at which to link driver=/*0=LINK ,VMES10.TERMDRV.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT 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=/*=ENDNNNNNN! N1CRTINIT -ASREL' VMES10 CRTINIT SAXD&†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ßNu4NNNN(S1EDITMODE -ASREL' VMES10 EDITMODESAXQ&†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üô`ÿ.4NN" N1Z1FEEDER -ASREL' VMES10 FEEDER SAY9&†VME/10 subroutine to feed a buffer to TERMDRV.˜2@FEEDER_A @FEEDER_C @FEEDER_W @REL_PAGE @FEEDER @STOP_IT z@UNSTOP €pGOT_CHAR @REL_ADDR @REL_FLAG  K3RHçÀÈ(zÿêSy)k Hz/`AÖJ-ågæ#Ì(Pù)`4J9)g,H3 Hç?4 zÿº":ÿºpN@`Lß,ü/-h/ p*N@Qù)Lß,üLßNuPíåNuQíåJ9)g 3a‚Nu4NNNNNN:d1INCHAR -ASREL' VMES10 INCHAR SA#&†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 rLU ²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Â(`fow–à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 `èNu4NNNNNT1TERMDRV -ASREL' VMES10 TERMDRV SA5&†VERSAdos terminal driver with type-ahead[2pINIT_KEY pIN_CHAR pSTOP_IT pOUTCHS pUNSTOP @GOT_CHAR æ@CHECK_WO l zF3²²b120985 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 i0pN@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­4grHçF3?üm8!mhB(|$- MMBPMMU MCãã]Ä ‰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’MESSAGERECEIPTENABLEDASQSRENƒ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 ***********************NNNN‰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‚EQ) U‡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. m4=‰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 ***********************NNNN‰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’Pointertocodetoexecutedinbackground.0BABUSE„DS.Bƒ1’Flag:‚true(nonzero)meansINUSE."ŠDS.Bƒ3’Reserved(shouldbezero). BABBLN„EQU„*’LengthofaBAB.*********************** Ending of &.BAB.EQ ***********************) NN"&‰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*+:42HCCBRESV1‚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)*BI* T”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 ***********************N‰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.<1EMM8U /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'scominginonport1.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 ***************************NN+ NNNNN‰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 *************************NNN]3‰PAGE*****************************Beginningof&.DISK.EQƒ*****************************EXEC…EQU†0–RMS68Ktrap#. 7PAGESIZEEQU†$100“Thesizeinbytesusedtodynamically%*¦allocatememoryfortheCCBandfor*¦globalmemory. 5VDOSRSZ‚EQU†256”TheVersadosoperatingsystemassumes#*¦thatalldiskshave256bytesper(*¦sectorineverysector,andthislabel'*¦definesthesectorsizethatVersados *¦assumes. 1LCDSCTBTEQU†7–Thediskdriverrequires(andalso=LCDSCTSZEQU†1<<+ LCDSCTBTŠverifies)thattheIOSPSMvalueisa)*¦nonzeronumberthatisevenlydivisible(*¦byLCDSCTSZ.‚LCDSCTSZisdefinedtobe#*¦thelargestcommondivisorofall*¦possiblevalidsectorsizes. *ˆMOVEQWƒMACROF*‚ThismacroisusefulwhenwewanttoputanimmediatevalueintotheL* rightmost word of a Dn register and we don't care what value goes into the * other word of the Dn register."*[