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-$50522020�test�for�special�case�of�'PR‚'ƒ&PRTDV„=�$50523020ENDC &PRTDV„=�\&PRTDV+(\NP050$1*$100) -* Adjust number of disk drivers using PRNTLIB&PRTFLAG‚=�\&PRTFLAG+1NNN()* *ˆ&.SIODRV.CI*GMSG‰*******************************************************************FMSG‰**‚SIO�(MK68564)�DRIVER�FOR�TERMINALS�-�local�VME130�&�VM04�boardsGMSG‰******************************************************************* IFGTˆ\NOLTERM-2ƒMSG†NOLTERM�must�be�<=�2ƒABORTENDC $=COPY‡VERSAPT.SIODRV.CF,VERSAPT.CF;A SIODRVƒ=�*SUBSˆ&.SIODRV.LG EXCLUDE…DRVL EXCLUDE…TERMLINKˆ&.SIODRV.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‰**…VME420�DRIVER�-�SASI�5�DISK�CONTROLLERGMSG‰******************************************************************* IFEQˆ\NH4205$1+\NF4205$15ƒMSG†NH4205$1�or�NF4205$1�must�be�at�least�set�to�a�1ƒABORTENDCIFGTˆ\NH4205$1-2ƒMSG†NH4205$1�must�be�<=�2ƒABORTENDCIFGTˆ\NF4205$1-4ƒMSG†NF4205$1�must�be�<=�4ƒABORTENDC IFGTˆ\NH4205$1+\NF4205$1-4%ƒMSG†\NH4205$1+\NF4205$1�must�be�<=�4ƒABORTENDC IFGEˆ\NVME4205-1!ƒ*‚Adjust�total�number�of�disks�-'ƒ&TOTDSKƒ=�\&TOTDSK+\NH4205$1+\NF4205$1ENDC IFEQˆ\&M420FLG5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M420DRV.CF,VERSAPT.CF;A M420DRVƒ=�*SUBSˆ&.M420DRV.LG EXCLUDE…DRVL EXCLUDE…DISKLINKˆ&.M420DRV.LGPROCESS…&.M420DRV.LOEND‰&.M420DRV.LO&M420FLG„=�\&M420FLG+1ENDC ?&NH420„=�\NH4205$1„Number�of�hardƒdisks�on�1st�controller�boardA&NF420„=�\NF4205$1„Number�of�floppy�disks�on�1st�controller�board@&M4200„=�\M42050$1„Type�of�1st�hardƒdisk�on�1st�controller�board@&M4201„=�\M42051$1„Type�of�2nd�hardƒdisk�on�1st�controller�boardB&M4202„=�\M42052$1„Type�of�1st�floppy�disk�on�1st�controller�boardB&M4203„=�\M42053$1„Type�of�2nd�floppy�disk�on�1st�controller�board 2&ADDRESS‚=�\L420$02…Address�of�VME420�board�SASI�5 8* Assemble the IOC portion and merge with current IOC.ROSUBS†IOC.M4205.AG/ASM‡IOC.M4205.AG,NEW.RO,\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‰**…VME420�DRIVER�-�SASI�8�DISK�CONTROLLERGMSG‰******************************************************************* IFEQˆ\NH4208$1+\NF4208$15ƒMSG†NH4208$1�or�NF4208$1�must�be�at�least�set�to�a�1ƒABORTENDCIFGTˆ\NH4208$1-2ƒMSG†NH4208$1�must�be�<=�2ƒABORTENDCIFGTˆ\NF4208$1-4ƒMSG†NF4208$1�must�be�<=�4ƒABORTENDC IFGTˆ\NH4208$1+\NF4208$1-4#ƒMSG‰NH4208$1+NF4208$1�must�be�<=�4ƒABORTENDC IFGEˆ\NVME4208-1!ƒ*‚Adjust�total�number�of�disks�-'ƒ&TOTDSKƒ=�\&TOTDSK+\NH4208$1+\NF4208$1ENDC IFEQˆ\&M420FLG5* Build VERSAdos patch chain file .VERSAPT.CF%=COPY‡VERSAPT.M420DRV.CF,VERSAPT.CF;A M420DRVƒ=�*SUBSˆ&.M420DRV.LG EXCLUDE…DRVL EXCLUDE…DISKLINKˆ&.M420DRV.LGPROCESS…&.M420DRV.LOEND‰&.M420DRV.LO&M420FLG…=�\&M420FLG+1ENDC ?&NH420„=�\NH4208$1„Number�of�hardƒdisks�on�2nd�controller�boardA&NF420„=�\NF4208$1„Number�of�floppy�disks�on�2nd�controller�board@&M4200„=�\M42080$1„Type�of�1st�hardƒdisk�on�2nd�controller�board@&M4201„=�\M42081$1„Type�of�2nd�hardƒdisk�on�2nd�controller�boardB&M4202„=�\M42082$1„Type�of�1st�floppy�disk�on�2nd�controller�boardB&M4203„=�\M42083$1„Type�of�2nd�floppy�di sk�on�2nd�controller�board 2&ADDRESS‚=�\L420$01…Address�of�VME420�board�SASI�8 8* Assemble the IOC portion and merge with current IOC.ROSUBS†IOC.M4208.AG/ASM‡IOC.M4208.AG,NEW.RO,\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/MVME332�driver�-�intelligent�communication�controllerMSG‰**GMSG‰******************************************************************* =*************************************************************9*‚Adjust�total�number�of�channels�(terminals)�-�1st�board=************************************************************* IFGEˆ\NVME331-1‚IFEQˆ\NT331$1&„MSG‰NT331$1�must�be�at�least�set�to�1„ABORT‚ENDC‚IFGTˆ\NT331$1-8"„MSG‰NT331$1�cannot�be�more�than�8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=�\&TOTTERM+\NT331$1ENDC >**************************************************************9*‚ Adjust�total�number�of�channels�(terminals)�-�2nd�board>************************************************************** IFGEˆ\NVME331-2‚IFEQˆ\NT331$2&„MSG‰NT331$2�must�be�at�least�set�to�1„ABORT‚ENDC‚IFGTˆ\NT331$2-8"„MSG‰NT331$2�cannot�be�more�than�8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=�\&TOTTERM+\NT331$2ENDC =*************************************************************9*‚Adjust�total�number�of�channels�(terminals)�-�3rd�board=************************************************************* IFGEˆ\NVME331-3‚IFEQˆ\NT331$3&„MSG‰NT331$3�must�be�at�least�set�to�1„ABORT‚ENDC‚IFGTˆ\NT331$3-8"„MSG‰NT331$3�cannot�be�more�than�8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=�\&TOTTERM+\NT331$3ENDC >**************************************************************9*‚Adjust�total�number�of�channels�(terminals)�-�4th�board>************************************************************** IFGEˆ\NVME331-4‚IFEQˆ\NT331$4&„MSG‰NT331$4�must�be�at�least�set�to�1„ABORT‚ENDC‚IFGTˆ\NT331$4-8"„MSG‰NT331$4�cannot�be�more�than�8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=�\&TOTTERM+\NT331$4ENDC UU^;=*************************************************************9*‚Adjust�total�number�of�channels�(terminals)�-�5th�board=************************************************************* IFGEˆ\NVME331-5‚IFEQˆ\NT331$5&„MSG‰NT331$5�must�be�at�least�set�to�1„ABORT‚ENDC‚IFGTˆ\NT331$5-8"„MSG‰NT331$5�cannot�be�more�than�8„ABORT‚ENDC*"* Adjust total number of terminals*‚&TOTTERM‚=�\&TOTTERM+\NT331$5ENDC =*************************************************************9*‚Adjust�total�number�of�channels�(terminals)�-�6th�board=************************************************************* IFGEˆ\NVME331-6‚IFEQˆ\NT331$6&„MSG‰NT331$6�must�be�at�least�set�to�1„ABORT‚ENDC‚IFGTˆ\NT331$6-8"„MSG‰NT331$6�cannot�be�more�than�8„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)�DRIVER�FOR�TERMINALS�-�local�VME117�boardsGMSG‰******************************************************************* IFGTˆ\NOSCC-2ƒMSG†NOSCC�must�be�<=�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‰**…MVME360�DRIVER�-�Disk�ControllerGMSG‰******************************************************************* ;MSG‰*******************************************************MSG‰*µ*)MSG‰*‹VME360�USER�CONFIGURATION�EQUATES‰*MSG‰*µ*;MSG‰******************************************************* GMSG‰*******************************************************************MSG‰*ƒVME360�CACHE�enable�flagMSG‰*MSG‰*ƒDK$CACHE=0‚Cache�disabledMSG‰*ƒDK$CACHE=1‚Cache�enabledGMSG‰******************************************************************* DK$CACHE‚=�1 GMSG‰*******************************************************************&MSG‰*ƒVME360�packet�memory�select�flagMSG‰*#MSG‰*ƒPFT$MEM=0‚Use�external�memory#MSG‰*ƒPFT$MEM=1‚Use�internal�memoryGMSG‰******************************************************************* PKT$MEMƒ=�1 IFEQˆ\NH360$1(ƒMSG†NH360$1�must�be�at�least�set�to�a�1ƒABORTENDCIFGTˆ\NH360$1-4ƒMSG†NH360$1�must�be�<=�4ƒABORTENDC *‚Adjust�total�number�of�disks�-&TOTDSKƒ=�\&TOTDSK+\NH360$1 IFGE \NVME360-2 IFEQˆ\NH360$2(ƒMSG†NH360$2�must�be�at�least�set�to�a�1ƒABORTENDCIFGTˆ\NH360$2-4ƒMSG†NH360$1�must�be�<=�4ƒABORTENDC *‚Adjust�total�number�of�disks�-&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+1�M**ˆ&.P117DRV.CI*GMSG‰*******************************************************************"MSG‰**‚VME117�LOCAL�PRINTER�DRIVERGMSG‰******************************************************************* IFGTˆ\NOLPRT-1ƒMSG†NOLPRT�must�be�<=�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-$50522020�test�for�special�case�of�'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:‚ALL�input�modules�should�be�in�SECTION�15=/*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‚modules�should�all�be�in�SECTION�15.=/*+=LINK ,&.TERMLIB.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT�TERM(R):14‚\TERMLIBSEGMENT�DRVL(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=/*=/*�changes�4/24/84‚bwn:E=/* These definitions added in order that the GPIB driver work on the=/* VME/10 as well as VME110.B=/* We use the parameters to define lower and upper limits for theD=/* on-board ram as viewed by the GPIB driver (ONBD_LO and ONBD_HI),@=/* the lower and upper limits of off-board ram as viewed by the9=/* MVME300 board (OFFBD_LO and OFFBD_HI), and the offset,=/*�between�ONBD_LO�and�OFFBD_LO‚(RAM_SKEW).=/*+=LINK ,&.M300DRV.LO,\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$HI�and�\RAM$SQ7=/*†=‚parameters�defined�by�the�macro�file�DUALPORT.MC.=/*;=/* The remaining Sysgen parameters are used by the driver.=/*I=/* The DEF statements in the link chain file satisfy the XREF statements%=/* in the macro file and the driver.=/*C=/* All of the following substitution parameters are defined in the==/* VMExxx.SYSTEM.CI file and should be modified to suit your=/* system configuration.=/*<=/*†ONBD$LO�On�board‚ram�base‚address�used�by�macro�DUALPORT;=/*†ONBD$HI�On�board‚ram�endƒaddress�used�by�macro�DUALPORT>=/*†OFFBD$LOŒOff�board�ram�base‚address�used�by�macro�DUALPORT==/*†OFFBD$HIŒOff�board�ram�endƒaddress�used�by�macro�DUALPORT==/*†RAM$SQŽOn�board�ram�offset�address�used�by�macro�DUALPORT=/*C=/* All of the following substitution parameters are defined in theO=/* &.M320DRV.CI file and should be modified to suit your system configuration.=/*6=/*†M320$SD�Post-data-gap�single-density�floppy�format6=/*†M320$DD�Post-data-gap�double-density�floppy�format*=/*†M320$HD�Post-data-gap�hard�disk�format==/*†M320$LT5ŒHead�load�time�5-1/4"�floppy�disk�drives�in�msec9=/*†M320$LT8ŒHead�load�time�8"�floppy�disk�drives�in�msec4=/*†M320$LTHŒHead�load�time�hard�disk�drives�in�msec<=/*†M320$ST5ŒHead�settling�time�5-1/4"�floppy�drives�in�msec8=/*†M320$ST8ŒHead�settling�time�8"�floppy�drives�in�msec8=/*†M320$STHŒHead�settling�time�hard�disk�drives�in�msec&=/*†M320$TYPŒHard�disk�drive�seek�type=/*+=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‚modules�should�all�be�in�SECTION�15.=/**=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‚modules�should�all�be�in�SECTION�15.=/*+=LINK ,&.DISKLIB.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT�DISK(R):14‚\DISKLIBSEGMENT�DRVL(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‚modules�should�all�be�in�SECTION�15.=/**=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‚modules�should�all�be�in�SECTION�15.=/**=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‚modules�should�all�be�in�SECTION�15.=/*+=LINK ,&.PRNTLIB.LO,\WORKLS;HAMIXS,\LISTOPTSEGMENT�PRNT(R):14‚\PRNTLIBSEGMENT�DRVL(R):15‚\DRVLINPUT &.PRNTLIB.TFINPUT &.DRVLIB.ROEND=/*=ENDNNNNNN¨B* &.MPSC400.SI - Include file for MVME400 local serial MPSC driver*9DEVADDR1�SET‡\L400$01‚Assign�address�of�1st�MVME400�board9DEVADDR2�SET‡\L400$02‚Assign�address�of�2nd�MVME400�board*ATT_MASK�SET‡$0FFF…Set�the�attributes�mask*PAR_MASK�SET‡$7FF3…Set�the�parameters�mask8CHANTYP1�SET‡XTS7AR„Set�the�channel�type�for�MPSC�A-side8CHANTYP2�SET‡XTS7BR„Set�the�channel�type�for�MPSC�B-side"IOCVECT‚SET‡\IOCVEC4‚Vector�number IOCLVLƒSET‡\IOCLVL4‚Vector�level:NOMPSCƒSET‡\NVME400‚Define�the�number�of�MPSC�chips/boards?NUBRD1ƒSET‡\NU400$1‚Define�the�number�of�terminals�on�1st�board?NUBRD2ƒSET‡\NU400$2‚Define�the�number�of�terminals�on�2nd�boardNNNN N± ?* &.MPSCV03.SI - Include file for VM03 local serial MPSC driver*0DEVADDR1�SET‡\LTDA$01‚Assign�address�of�1st�MPSC9DEVADDR2�SET‡0‰Assign�address�of�2nd�MPSC�(None�for�VM03)*ATT_MASK�SET‡$0FFF…Set�the�attributes�mask*PAR_MASK�SET‡$7FF3…Set�the�parameters�mask8CHANTYP1�SET‡XTS7A3„Set�the�channel�type�for�MPSC�A-side8CHANTYP2�SET‡XTS7B3„Set�the�channel�type�for�MPSC�B-sideIOCVECT‚SET‡$43‡Vector�numberIOCLVLƒSET‡4‰Vector�level3NOMPSCƒSET‡1‰Define�the�number�of�MPSC�chips/boards>NUBRD1ƒSET‡\NOLTERM‚Define�the�number�of�terminals�on�1st�MPSC=NUBRD2ƒSET‡0‰Define�the�number�of�terminals�on�2nd�MPSC�(N/A)NNNNNº @* &.PIA101.SI - Include file for VME101 local printer PIA driver*/DEVADDR1�SET‡\LPDA$01‚Assign�address�of�1st�PIA;DEVADDR2�SET‡0‰Assign�address�of�2nd�PIA�(None�for�MVME101) CHANTYPE�SET‡XTPRTL„Channel�typeIOCVECT‚SET‡$1B‡Vector�numberIOCLVLƒSET‡3‰Vector�level'NOPIA„SET‡1‰Define�the�number�of�boards=NUBRD1ƒSET‡\NOLPRTƒDefine�the�number�of�printers�on�1st�board=NUBRD2ƒSET‡0‰Define�the�number�of�printers�on�2nd�board�(N/A)NNN NNNà A* &.PIA410.SI - Include file for MVME410 local printer PIA driver*9DEVADDR1�SET‡\L410$01‚Assign�address�of�1st�MVME410�board9DEVADDR2�SET‡\L410$02‚Assign�address�of�2nd�MVME410�board CHANTYPE�SET‡XTPRTL„Channel�type"IOCVECT‚SET‡\IOCVEC1‚Vector�number IOCLVLƒSET‡\IOCLVL1‚Vector�level6NOPIA„SET‡\NVME410‚Define�the�number�of�MVME410�boards@NUBRD1ƒSET‡\NU410$1‚Define�the�number�of�printers�on�1st�MVME410@NUBRD2ƒSET‡\NU410$2‚Define�the�number�of�printers�on�2nd�MVME410NNNNNNÌ B* &.PIAEXM.SI - Include file for EXORmacs local printer PIA driver*/DEVADDR1�SET‡\LPDA$01‚Assign�address�of�1st�PIA;DEVADDR2�SET‡0‰Assign�address�of�2nd�PIA�(None�on�EXORmacs) CHANTYPE�SET‡XTPEXM„Channel�typeIOCVECT‚SET‡$8B‡Vector�numberIOCLVLƒSET‡5‰Vector�level5NOPIA„SET‡\NOLPRTƒDefine�the�number�of�local�printers7NUBRD1ƒSET‡1‰Define�the�number�of�printers�on�1st�board=NUBRD2ƒSET‡0‰Define�the�number�of�printers�on�2nd�board�(N/A)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ß`û&B�B‚)!) €Á"à‰à‰‚Â$àŠ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< a�F3`ö+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& ,q�g ,q�g`  ‘ @gøaF3` ‘&j ,p�g ,r�gr ,q�g ,‡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ß B�m| `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 @J�gHçþN�LßþJf¬a$Ha4+ Sg  G BF3` F B*6*$JBg*6*&tgj`g| ` F3g | ÂgJCg ¶@lr„`00aÈ|‰'­r2-r‰!|F3 '©1BrNu2+Af@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@Àh�ip0)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‚‚; ØNuX�Pí€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°NuB�F3B‚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ÂüX�B˜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(*‹MVME360�board,�part�number�MVME360-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ýÔ -´B�2-vF3g��nü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¦N�F3NuÀ-À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 ÂüS�B˜QÉÿü m†$H m""<„€S�gF3gög¼@¼agVí€Nu"<'S�gTgö¼ 5|"<èS�g:F3fö||" ÈÐ"<èS�g *€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„Routines�for�handling�the�VME/10�keyboard.O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***F***…FILENAME:‚KEYBRD�--�ROUTINES�FOR�HANDLING�THE�VME/10�KEYBOARD.…******É***I***…ENVIRONMENT:‚This�is�part�of�the�VERSAdos�keyboard/screen�driver,‚******‡TERMDRV.º******É***E***…FUNCTION:‚These�routines�provide�initialization�and�interrupt†***B***‡service�for�the�VME/10�keyboard,�which�is�connected�to�theˆ***?***‡processor�board�through�a�2661�half-duplex�serial�port.‹******É***H***…NOTES:‚This�module�is�very�much�table-driven,�so�pains�have�beenƒ***F***‡taken�to�reduce�the�size�of�the�tables.‚You�will�find�byte�andƒ***F***‡word�offsets�instead�of�longword�addresses,�and�where�feasible„***D***‡functions�are�used�instead�of�tables�to�generate�characters.†******É******É***,***…EXTERNAL�DATA�STRUCTURES�REFERENCED: ******É******É***)***…EXTERNAL�ENTRY�POINTS�REFERENCED:£***!***‡RESET_SCREEN„CLEAR_SCREEN¦******É***"***…SERVICES�CALLED�VIA�TRAPS:ª******É******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revision�history�(add�new�changes�to�top).*…Date†Author‰ChangesG*…--------‚-------------‚----------------------------------------------<*…01/30/85‚M.�DUH‰Using�new�keyboard�ROM�to�ring�the�'BELL'.7*…01/11/85‚D.VŒAdded�logic�to�allow�sysgen�parameter�to)*ždetermine�useage�of�Keyswitch�on�panel.:*…10/11/84‚BWNŒIn�GET_CHAR,�send�back�condition�codes�with0*ž�and��if�the�interrupt�was�not�for�us.=*…12/22/83‚Russ�Rustad„Increased�delay�during�keyboard�reset.9*†7/29/83‚Steve�FranckƒAdded�delay�during�keyboard�reset.M,VD^<fGn6v;~D†9ŽF–?ž6¦'®J¶/¾:Æ?ÎHÖ9ÞMæIîCöBþ1e56*†7/13/83‚Steve�FranckƒAdded�keyboard�lockout�sensing.'*†6/�3/83‚Steve�FranckƒInitial�writing.*ŠPAGE* *‚XDEF's.*@ŠXDEFƒINIT_KEYBOARD„Entry�point�for�INITIALIZE�KEYBOARD�routine.:ŠXDEFƒGET_CHAR‹Entry�point�for�routine�to�be�called�when�a'*§receive�interrupt�occurs�on�the�2661.9ŠXDEFƒRING_BELLˆFlag�telling�us�to�issue�a�command�to�the*§keyboard�to�ring�the�bell. *0*‚XREF's�(indicate�where�the�XDEF�is,�if�known).*?ŠXREFƒCLEAR_SCREEN,RESET_SCREENƒRoutines�to�clear�and�reset� the*§screen;�both�are�in�OUTCHS. **‚Equate�files�included:2*…&.UTILITY.MC„Utility�macros�(like�PUSH�and�POP).*ŠNOLISTŠINCLUDE�&.UTILITY.MCŠLISTŠPAGEO********************************************************************************3*‰DIAGRAM�DEPICTING�THE�ROLES�OF�THE�VARIOUS�TABLES*O*******************************************************************************  * *©routine *©offsets *Šscan�---*ŠcodeŒ-�is�routine„|ƒ|*Štable�index‡|ƒ|/*‹---�,------------->|ƒ|------------->�BSR‚....*ƒscanƒ|ƒ|‹/�|ƒ|�TST‚....*ƒcodeƒ|ƒ|Š/‘---�etc.*‚------->|ƒ|---------< *Š|ƒ|ƒ\†\‘--- *‹---…|†\�|ƒ|*“|‡`------------->|ƒ|--------.*“|‡+�is�group…|ƒ|ˆ|†char*“|Šindex‡|ƒ|ˆ|†table*“|—---‰`----->�--- *“|–group�|ƒ|*“|�parameter‹offsetsŽ|ƒ|*“|¢.------>|ƒ| *“|¢|‡|ƒ|**“`----------------------------------'ˆ---* *I*‚When�a�scan�code�is�received,�it�is�used�as�an�index�into�the�SCAN�CODE5*‚TABLE�to�get�a�group/routine�index�and�a�parameter.*I*‚If�the�group/routine�index�is�negative,�then�it�is�a�routine�index.‚TheJ*‚corresponding�offset�is�taken�from�the�ROUTINE�TABLE�and�that�routine�is@*‚JMPed�to.‚The�parameter�may�or�may�not�be�used�by�the�routine.*G*‚If�the�group/routine�index�is�positive,�then�it�is�a�group�index.‚TheH*‚corresponding�offset�is�taken�from�the�GROUP�TABLE,�giving�the�addressJ*‚of�the�character�table�currently�in�effect�for�that�group.‚The�parameterI*‚is�used�as�an�index�into�the�character�table�to�retrieve�the�character.F*‚If�the�entry�in�the�character�table�is�0,�no�character�is�generated.*ŠPAGEO*v***********************************************************************************…DATA�(OTHER�THAN�TABLES)***O*^***************************************************************************** ŠSECTION�0 *,*‚Modes�byte�and�bit�equates�relating�to�it.*6MODES…DC.Bƒ0’The�modes�byte.‚Bits�in�this�byte�reflect)*§the�status�(up�or�down)�of�various�mode*§keys�on�the�VME/10�keyboard. 4BLANK…EQU„0’If�this�bit�is�1,�the�blank�locking�mode*§key�is�down.*CTRL†EQU„1’If�this�bit�is�1,�CTRL�is�down.6SHIFT…EQU„2’If�this�bit�is�1,�one�or�both�of�the�SHIFT*§keys�are�down.3PAD‡EQU„3’If�this�bit�is�1,�FUNC/PAD�is�down�(PAD).6ALPHA_LOCK�EQUƒ4’If�this�bit�is�1,�ALPHA�LOCK�is�down.(ALT‡EQU„5’If�this�bit�is�1,�ALT�is�down. *>*‚Status�of�the�two�shift�keys�and�bit�equates�relating�to�it.*:SHIFT_KEYS�DC.B‚0’Bits�in�this�byte�reflect�the�status�(up%*§or�down)�of�the�two�SHIFT�keys.‚The&*§composite�of�these�two�keys�is�main-*§tained�in�the�MODES�register. 4LEFT†EQU„0’If�this�bit�is�1,�the�left‚SHIFT�is�down.6RIGHT…EQU„1’If�this�bit�is�1,�the�right�SHIFT�is�down. *4*‚Equates�for�the�values�generated�by�function�keys.*6FNKEY_F1‚EQU„$A0�Value�to�generate�for�function�key�1.;FNKEY_S1‚EQU„$B0�Value�to�generate�for�shifted�funct�key�1. *?*‚Equates�describing�what�we�need�of�the�VMEC1�status�register.****‡selects�the�keyboard,�and�enables�keyboard�interrupts.Œ******É***C***…NOTES:‚If�an�error�occurs,�keyboard�interrupts�will�be�leftˆ***@***‡disabled�to�prevent�erroneous�data�from�being�processed.Š***E***‡Currently,�however,�we�are�not�checking�the�self-test�status,…***E***‡and�therefore�there�is�no�possibility�of�an�error�return.‚The„***;***‡hooks�are�left�in�to�facilitate�later�enhancements.�******É***E***…REGISTER�USAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SR�hi„SR�lo�(CCR)…******‡D:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒ.ƒ.ƒ.ƒPƒPƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ***G***‡CCR:‚�=�Keyboard�initialization�was�completed�successfully.‚***7***��=�An�error� occurred�during�initialization.�******É***O*^*****************************************************************************O******************************************************************************* ŠDS…0 ŠSECTION�0ŠOPT„BRS INIT_KEYBOARD: ŠSAVEƒD0/A3/A4‹Save�registers. -ŠLEA„EPCI,A3ŒA3�<--�base�address�of�the�2661.3ŠLEA„CR2,A4�A4�<--�address�of�control�register�2�on*§the�processor�board. >ŠBSR„RESET_KEYBOARD…Initialize�the�2661�chip�and�the�keyboard.*5*‚Initialize�the�ring�bell�flag�to�be�sure�it�is�off.*3ŠSF…RING_BELLŠNo�bell�until�we�are�told�to�beep�it. *;*‚Check�if�we�are�connected�to�the�old�or�the�new�keyboard.G*‚The�old�keyboard�should�return�a�$FF�if�given�a�STATUS�command,�sinceB*‚it�does�not�support�this�command.‚The�new�keyboard�will�return�aF*‚code�between�$00�and�$70.‚If�it�is�the�old�keyboard�we�set�a�flag�toE*‚remind�us�to�only�use�the�READ_KB�command�when�requesting�data�from*‚the�keyboard.*8ŠMOVE.B�#STATUS_KB,DATA(A3)‡Issue�a�read�STATUS�command.AWAIT3…BTSTƒ#CHAR_AVAIL,STATUS(A3)„Wait�until�we�have�received�the.ŠBEQ„WAIT3•acknowledge�code�from�the�keyboard. +ŠMOVE.B�DATA(A3),D0�Is�it�the�old�keyboard? ,ŠCMP.B‚#2,D0•*�!!!�OLD�KEYBOARD�RETURNS�$02,%ŠIF.B‚�THEN’*�!!!�INSTEAD�OF�$FF. ***‡IF.B‚�THEN 4ŒST…OLD_KEYBOARDŒYes�-�set�our�flags�to�remind�us�to1ŒST…DOING_READŽuse�only�READ�commands,�then�issue 8ŒBSR„RESET_KEYBOARDŠ*�!!!�MUST�RESET,�ELSE�KEYBRD�HANGS. =ŒMOVE.B�#READ_KB,DATA(A3)‡the�first�read�to�start�things�off. ŠELSE 1ŒSF…OLD_KEYBOARDŒNo‚-�initialize�our�flag�for�NEW2ŒSF…DOING_READŽkeyboard,�clear�the�DOING_READ�flag%*§since�we�will�send�a�STATUS�command7ŒMOVE.B�#STATUS_KB,DATA(A3)…first,�to�start�things�off. ŠENDI *&*‚Enable�interrupts�from�the�keyboard.*1ŠBSETƒ#KB_ENABLE,(A4)„Enable�keyboard�interrupts. 2ŠCLR„D0‘Set�CCR:��to�indicate�success�on�exit.  **‚Exit.*6INIT_EXIT�RESTORE�D0/A3/A4ŠRestore�registers�and�exit.ŠRTS—*‰PAGEO*v*****************************************************************************O**********************************************************************************É***E***…RESET_KEYBOARD�--�ROUTINE�TO�SET�UP�THE�2661�AND�THE�KEYBOARD‡******É***<***…FUNCTION:‚This�routine‚is�called�from�INIT_KEYBOARD.Ž******É******…NOTES:¾******É******É***E***…REGISTER�USAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SR�hi„SR�lo�(CCR)…******‡D:ƒDƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆ.�******‡A:ƒ.ƒ.ƒ.ƒAƒAƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ******É******…D0�is�destroyed.´******É***O*^*****************************************************************************O*******************************************************************************RESET_KEYBOARD: **‚Reset�the�keyboard.*;ŠBCLRƒ#KB_ENABLE,(A4)„Disable�interrupts�from�the�keyboard. =ŠBCLRƒ#KB_RESET,(A4)…Momentarily�drive�low�(active)�the�RESET;ŠMOVEQ‚#RESET_WAIT,D0…line�to�the�keyboard.‚Because�we�need.ŠREPEAT”to�maintain�the�RESET�signal�for�about-ŠSUB.L‚#1,D0Ž13�usecs,�we�have�to�delay�a�bit&ŠUNTIL‚�before�removing�the�RESET.ŠBSETƒ#KB_RESET,(A4)…* ?ŠMOVE.L�#WAIT_COUNT,D0…Wait�a�predefined�amount�of�time�for�the8WAIT1…SUB.L‚#1,D0Žkeyboard�to�get�its�act�together�afterŠBNE„WAIT1Žthe�reset. *M*‚Initialize�the�2661.‚Because�the�2661�mode�register�is�really�two�registersM*‚and�the�one�you're�writing�to�depends�upon�the�sequence�of�prior�writes,�we(*‚must�do�this�with�interrupts�disabled.*(ŠPUSHƒSR‘Save�SR�and�disable�interrupts.ŠMOVEƒ#$2700,SRŠ*:ŠTST.B‚COMMAND(A3)ˆRead�the�command�register,�which�causes&*§the�mode�register�to�point�to�reg�1.?ŠMOVE.B�#MODE1_INIT,MODE(A3)�Initialize�mode�registers�1�and�2.ŠMOVE.B�#MODE2_INIT,MODE(A3)�*?ŠMOVE.B�#COMM_INIT,COMMAND(A3)�Initialize�the�command�register.ŠPOP„SR‘Restore�SR. **‚Select�the�keyboard.*D ŠMOVE.B�#SELECT_KB,DATA(A3)�Send�the�command�to�SELECT�the�KEYBOARD. AWAIT2…BTSTƒ#CHAR_AVAIL,STATUS(A3)�Wait�until�a�character�has�been ŠBEQ„WAIT2Žreceived�by�the�2661. :ŠTST.B‚DATA(A3)‹Read�the�response.‚If�it's�not�an�ACK�(0),'*§the�keyboard�failed�its�self-test.‚We(*§ignore�the�status,�though,�since�it�is$*§possible�that�the�self-test�failed)*§because�someone�was�holding�down�a�key,)*§and�we�don't�want�such�a�minor�thing�to"*§prevent�the�system�from�booting.ŠRTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***K***…CHK_INTERRUPT�--�ROUTINE�TO�CHECK�TO�SEE�IF�THE�INTERRUPT�IS�FOR�US�******É***7***…FUNCTION:‚This�routine‚is�called�from�GET_CHAR.“******É******…NOTES:¾******É******É***E***…REGISTER�USAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SR�hi„SR�lo�(CCR)…******‡D:ƒDƒDƒPƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒRƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ***-***‡CCR:�‚=�the�interrupt�is�not�oursœ***5***Œ:��=�no�error�was�indicated�in�status�***(***’�=�error�indicated�in�status—******É*** ***…D0�and�D1�are�destroyed.¬******É***O*^*****************************************************************************O*******************************************************************************CHK_INTERRUPT: (‰LEA„EPCI,A0�A0�<--�address�of�the�2661. 3‰MOVE.B‚COMMAND(A0),D1ˆGet�2661's�command�register.1‰MOVE.B‚STATUS(A0),D0‰Get�2661's�status‚register. #‰BTST„#TXEN,D1ŽTransmitter�enabled? ‰IF‚‚THEN�No,�check�receiver ŽBTSTƒ#RXEN,D1ŽReceiver�enabled?(ŽIF‚‚THEN‹No,�return�with�CCR�=�“RTSŽENDI‰ENDI*J*‚If�an�error�bit�is�set,�then�its�our�interrupt�and�we�will�go�handle�it.* ‰PUSH.L‚D2 ‰MOVE.L‚D0,D2"‰AND.Bƒ#ANY_ERROR,D2‰Error�status?‰IF‚‚THEN�If�so, �POP.LƒD2%�MOVE.B‚#-1,D0ŒReturn�with�CCR�=��RTS‰ENDI‰PAGE ‰POP.LƒD2*C*‚Well,�we�got�here�because�either�the�transmitter�or�receiver�is†.**‚enabled�and�there�is�no�error�condition.B*‚Check�bits�in�the�status�register�and�control�register�to�see�if*‚any�are�set.*+‰AND.Bƒ#KB_INTERRUPT,D0†Keyboard�interrupt?‰IF‚ƒTHEN�If�not,�then-�AND.Bƒ#FORCE_BREAK,D1ƒforce-break�condition?.�IF‚‚THENŒIf�not,�then�RTS�with�CCR�=�‘RTS�ENDI‰ENDI**‚The�interrupt�is�ours�!!!!*‚Return�with�CCR�=��and�*‰RTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***K***…CHK_READ�---�ROUTINE�TO�CHECK�IF�IT�IS�A�READ�OR�A�STATUS�INTERRUPT�******É***7***…FUNCTION:‚This�routine‚is�called�from�GET_CHAR.“******É******…NOTES:¾******É******É***E***…REGISTER�USAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SR�hi„SR�lo�(CCR)…******‡D:ƒRƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******‡A0.L�=�Address�of�2661¬******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ******É***9***‡CCR:�‚=�The�interrupt�is�from�a�READƒcommand.Ž***.***”D0.B�=�Contents�of�2661�data�register.�***6***Œ‚=�The�interrupt�is�from�a�STATUS�command.Ž******”D0.B�=�Zero.©******É***O*^*****************************************************************************O******************************************************************************* CHK_READ: ŠCLR.W„D04ŠMOVE.B�DATA(A0),D0ˆD0.W�<--�data�from�the�keyboard.*@*‚Check�to�see�if�this�interrupt�is�from�STATUS�or�READ�command:*ŠIF.B‚DOING_READ‚�#0�THEN @ŒBTST�#DATA_AVAIL,D0…This�is�a�STATUS�interrupt,�so�check�if�the)*§keyboard�FIFO�has�data�that�can�be�READ 7ŒIF��THENŒIt�does,�so�now�set�our�flag�to�inform�us5ŽST�DOING_READ‰the�next�interrupt�will�be�from�a�READ>ŽMOVE.B� #READ_KB,DATA(A0)‚command.‚Then�issue�the�READ�command'*§so�that�we�will�be�sent�the�scan�code*§in�the�keyboard's�FIFO. ŒELSE *D*‚At�this�point�our�status�says�there�is�no�character�to�read,�so�weC*‚use�this�opportunity�to�check�if�we�must�ring�the�bell.‚If�so,�we>*‚clear�the�bell�flag�for�next�time�and�issue�a�command�to�the#*‚keyboard�that�will�ring�the�bell.*ŽIF.B‚RING_BELL��#0�THEN"�SFƒRING_BELLŽClear�for�next�time.*�MOVE.B‚#ALARM_KB,DATA(A0)‚Beep�that�bell!*�BRA‚CHKOUT‘Return��since�no�char�yet.ŽENDI 9ŽMOVE.B�#STATUS_KB,DATA(A0)‚No�data�yet,�so�issue�another*©STATUS�command.ŒENDI 3CHKOUT†CLR.B�D0�Return�with�CCR�=��for�a�STATUS%ŒRTS•interrupt.‚This�will�be�ignored. ŠENDI 0ŠRTS—Return�with�CCR�=��for�a�READ�interruptŠPAGEO*v*****************************************************************************O**********************************************************************************É***B***…SEND_COMMAND�--�ROUTINE�TO�OUTPUT�ANOTHER�KEYBOARD�COMMANDŠ******É***7***…FUNCTION:‚This�routine‚is�called�from�GET_CHAR.“******É******…NOTES:¾******É******É***E***…REGISTER�USAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SR�hi„SR�lo�(CCR)…******‡D:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒAƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******‡A0.L�=�Address�of�2661¬***B***‡D0.B�=�Character�that�was�just�received�from�the�keyboard.ˆ******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ******É***C***‡CCR:�‚=�The�character�has�bit�8�set,�so�it�is�an�error.†***<***Œ‚=�Good�character,�next�command�has�been�issued.ˆ******É***O*^*****************************************************************************O******************************************************************************* SEND_COMMAND: (ŠTST.B‚D0‘Test�the�scan�code�for�errors. ŠIF��THEN$ŒRTS•Bit�8�must�be�zero,�else�error.ŠENDI *I*‚If�this�is�the�old�keyboard,�we�get�data�only�by�issuing�READ�commands.G*‚The�old�keyboard�does�not�allow�STATUS�commands.‚If�it�is�not�the�oldG*‚keyboard�we�just�issue�a�STATUS�command.‚This�effectively�'polls'�theH*‚keyboard�with�STATUS�commands,�until�it�has�a�character�in�its�FIFO�to *‚send�us.*ŠIF.B‚OLD_KEYBOARD�‚#0�THEN 0ŒST…DOING_READŠOld�keyboard�-�so�issue�it�a�READ<ŒMOVE.B�#READ_KB,DATA(A0)ƒcommand�to�get�the�next�scan�code. ŠELSE 2ŒSF…DOING_READŠNew�keyboard�-�so�issue�it�a�STATUS<ŒMOVE.B�#STATUS_KB,DATA(A0)�command�to�get�the�status�again. ŠENDI /ŠTST.B„D0’Test�the�character�to�set�CCR�=�.ŠRTSŠPAGEO*v*****************************************************************************O**********************************************************************************É***;***ŒGET_CHAR�--�ROUTINE�TO�GET�A�CHAR�FROM�THE�KEYBOARDŠ******É***)***…FUNCTION:‚This�routine�is�XDEFed.¢******É***C***…This�routine,�if�connected�to�an�OLD�keyboard�that�does�not‰***7***…support�the�STATUS�command�operates�as�follows:•******É***H***‡Entry�is�from�a�keyboard�interrupt.‚Since�it�is�the�old�keyboard�***H***‡this�must�be�an�interrupt�from�us�issuing�a�READ�command.‚We�get�***G***‡the�scan�code�from�the�2661�and�issue�the�keyboard�another�READƒ***H***‡command.‚The�scan�code�is�then�processed�by�jumping�to�a�routine�***I***‡or�by�converting�the�scan�code�into�a�character,�depending�on�the�***$***‡scan�code�that�was�received.¦******É******É***?***…This�routine,�if�connected�to�an�NEW�keyboard�that�does�***7***…support�the�STATUS�command�operates�as�follows:•******É***C***‡Entry�is�from�a�keyboard�interrupt.‚We�determine�if�we�have†***H***‡been�interrupted�by�the�STATUS�command.‚If�so,�we�check�the�data�***E***‡in�the�2661�to�see�if�the�keyboard�FIFO�has�data�in�it.‚If�it„***D***‡does�not,�we�simply�send�another�STATUS�command�and�exit.‚If…***H***‡the�FIFO�has�data�in�it,�we�send�a�READ�command�to�get�the�data.‚***F***‡If�the�inter rupt�was�not�from�the�STATUS�command,�it�must�have„***H***‡been�from�the�READ�command,�so�we�get�the�data�in�the�2661.‚This�***D***‡data�is�the�scan�code�set�by�the�keyboard�in�response�to�the†***A***‡READ�command.‚Another�STATUS�command�is�then�given�to�theˆ***@***‡keyboard�to�start�everything�over.‚The�scan�code�is�then‰***H***‡processed�by�jumping�to�a�routine�or�by�converting�the�code�into‚***9***‡a�character,�depending�on�the�scan�code�received.‘******É***C***…NOTES:‚An�old�keyboard�will�interrupt�us�only�when�it�has�aˆ***>***�character�to�give�us.‚A�new�keyboard�will�interrupt�on…***@***�every�STATUS�command,�since�we�are�polling�the�keyboard.„***B***�We�talk�to�the�keyboard�at�512�baud�so�we�get�an�interrupt‚***B***�about�every�50�milliseconds.‚The�new�keyboard�is�used�only�***2***�because�we�now�want�to�support�the�'bell'.’******É******É***E***…REGISTER�USAGE:‚(A)rgument‚(D)estroyed‚(P)reserved‚(R)eturnedƒ***)***Œ0ƒ1ƒ2ƒ3ƒ4ƒ5ƒ6ƒ7‡SR�hi„SR�lo�(CCR)…******‡D:ƒRƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.‡.ˆR�******‡A:ƒPƒ.ƒ.ƒ.ƒ.ƒ.ƒ.ƒP ******É******…ENTRY�CONDITIONS:³******É***-***…EXIT�CONDITIONS�DIFFERENT�FROM�ENTRY:Ÿ***F***‡CCR:��:��=�keystroke�did�not�generate�a�char�or�break.„***(***“�=�the�interrupt�is�not�ours–***A***Œ:��=�generated�char�is�in�D0.W�(bits�8-15�are�0).„***%***’�=�a�break�was�generated.š***(***‡D0�is�not�preserved�in�any�case.¢******É***O*^*****************************************************************************O******************************************************************************* $BASE†EQU„*’Base�for�all�the�offsets. GET_CHAR: ŠSAVEƒD1/A0ŽSave�registers. *&*‚Go�check�if�the�interrupt�is�for�us.* ‰BSR.LƒCHK_INTERRUPT*‰BEQ.LƒINTNOP�The�interrupt�was�not�for�us3‰BMI.LƒERROR‘There�was�an�error�condition�in�status*8*‚The�interrupt�is�ours,�go�see�which�command�caused�it.7*‚We�return�from�CHK_READ�with�the�scan�code�in�D0.B�if9*‚this�interrupt�was�caused�by�us�issuing�a�READ�command.* 8‰BSR.S�CHK_READ�Go�check�if�interrupt�is�READ�or�STATUS. ‰IF��THEN6‹BRA.L�IGNORE�Not�a�READ�interrupt,�so�just�ignore�it.‰ENDI *L*‚Check�the�new�scan�code�for�errors�and�issue�the�keyboard�another�command.* 6‰BSR.S�SEND_COMMAND‰Send�the�keyboard�another�command. ‰IF��THEN7‹BRA.L�ERRORŽThis�scan�code�had�an�error,�go�try�again.‰ENDI *9*‚Use�scan�code�to�get�group/routine�index�and�parameter.*8ŠADD„D0,D0ŒD0.W�<--�2�*�scan�code�for�use�as�word�index.EŠLEA�SCAN_CODE_TBL(PC,D0),A0�A0�<--�pointer�to�entry�in�the�scan�code(*§table�corresponding�to�this�scan�code. %ŠCLR„D1‘D1.W�<--�group/routine�index.ŠMOVE.B�(A0)+,D1‹*$ŠMOVE.B�(A0)+,D0‹D0.W�<--�parameter. *F*‚A�negative�group/routine�index�indicates�a�routine�should�be�called."*‚If�this�is�a�routine,�JMP�to�it.*,ŠEXT„D1‘Sign�extend�the�group/routine�index.5ŠIF…�THENŠIf�it's�negative,�this�is�a�routine,�so BŠIF�D1��#NONLOCKABLE�THEN„If�this�is�a�routine�affected�by�theAŠBTST‚#KBD_UNLOCK,STATUS_REGƒfront�panel�lock,�check�the�lock;�if* ŠIF�‚THEN:ŠBTST�#KBD_LOCK,KBD_OVRD„Check�the�condition�of�the�sysgen'*¤parameter�to�see�if�we�want�to�ignore*¤the�keyswitch. ŠIF��THEN ŠBRA.L‚IGNOREŠENDIŠENDIŠENDI–* ŠNEG„D1‘Make�the�index�positive.5ŠMOVEƒRTN_TBL(PC,D1),D1‚D1�<--�offset�to�the�routine.ŠJMP„BASE(PC,D1)ˆJMP�to�it. ŠENDI *H*‚It's�not�a�routine,�it's�a�group,�so�use�the�parameter�to�get�the�char4*‚from�the�table�currently�in�effect�for�that�group.*7ŠBTSTƒ#KBD_UNLOCK,STATUS_REGƒIf�the�keyboard�is�locked,* ŠIF�‚THENŠBTSTƒ#KBD_LOCK,KBD_OVRD ŠIF��THEN ŠBRA.L‚IGNOREŠENDIŠENDI?ŠADD„GRP_TBL(PC,D1),D0‚D0�<--�offset�from�BASE�to�char�in�table"*§*‚=�element�#�+�offset�to�table.2ŠMOVE.B�BASE(PC,D0),D0…D0�<--�char�from�the�table. ?EXIT_CHAR:�ANDƒ#$00FF,D0ŠSet�CCR:��if�D0�=�0�else�,2ŠRESTORE�D1/A0�to�indicate�CHAR�GENERATED.‚RestoreŠRTS—registers�and�exit. '*£Note�that�in�either�case�the�V�bit�is *£cleared.ŠPAGEO*v********************************************************************************#***…ROUTINE�AND�GROUP�OFFSET�TABLES***E***…FUNCTION:‚Each�entry�in�the�scan�code�table�contains�a�byte�valueE***‡called�the�group/routine�index.‚It�is�a�1-byte�value�in�which�bitA***‡0�is�always�0.‚If�bit�7�is�1,�it�is�a�routine�index�and�is�anB***‡offset�into�RTN_TBL.‚If�bit�7�is�0,�it�is�a�group�index�and�is@***‡an�offset�into�GRP_TBL.‚These�tables�contain�word�offsets�toG***‡routines�or�tables�in�this�module.‚The�whole�purpose�for�these�guysC***‡is�to�allow�each�scan�code�table�entry�to�be�just�2�bytes�long.***O*^***************************************************************************** *J*‚These�entries�are�at�negative�group/routine�indexes,�making�them�routineG*‚indexes.‚They�contain�the�offsets�to�the�specified�routine.‚Note�thatH*‚RTN_OFFSET�BLIP�also�creates�an�equate�for�the�routine�index,�RI$BLIP,I*‚which�is�used�by�the�RTN�macro�in�the�scan�code�tables�later.‚Also�noteF*‚that�RTN_TBL�is�set�back�2�bytes�so�that�there�is�no�entry�#0�in�theG*‚routine�table;�this�is�necessary�since�negative�0�is�0�and�that�indexJ*‚would�be�indistinguishable�from�the�positive�0�index�in�the�group�table.* *M*‚Note�the�NONLOCKABLE�label�within�the�routine�table.‚Routines�whose�entriesN*‚are�above�that�label�will�not�be�called�while�the�keyboard�lock�on�the�frontK*‚panel�is�in�the�LOCKED�position--only�when�it�is�UNLOCKED.‚Routines�at�orG*‚below�that�point�are�called�regardless�of�the�keyboard�lock's�status.*RTN_OFFSET MACRORI$\1…EQU„-(*-RTN_TBL) ŠDC.Wƒ\1-BASEŠENDM RTN_TBLƒEQU„*-2ŠRTN_OFFSET�TWO_ATŠRTN_OFFSET�ESC_RESETŠRTN_OFFSET�BREAK_CLEARŠRTN_OFFSET�GEN_ALPHAŠRTN_OFFSET�FNKEYGNONLOCKABLE�EQU‚-(*-RTN_TBL)‡Routines�below�this�get�called�even�if�the(*£keyboard�is�locked�on�the�front�panel.ŠRTN_OFFSET�SET_SHIFTŠRTN_OFFSET�CLR_SHIFTŠRTN_OFFSET�SET_MODEŠRTN_OFFSET�CLR_MODEŠRTN_OFFSET�IGNOREŠPAGE*G*‚This�table�contains�offsets�to�character�tables.‚GRP_TBL�is�used�whenH*‚a�the�group/routine�index�for�a�scan�code�is�positive�(�>=0�).‚Here�weK*‚define�the�space�for�the�table�and�set�the�offsets�for�the�initial�tablesH*‚(where�no�mode�keys�are�down).‚As�mode�keys�are�pressed,�these�offsets*‚may�get�replaced.*GRP_OFFSET MACRO ŠDC.Wƒ\1-BASEŠENDM GRP_TBLƒEQU„*7ŠGRP_OFFSET�TBL.___ˆGroup�0:‚no�mode�keys�affect�these.9ŠGRP_OFFSET�TBL.NN_ˆGroup�1:‚SHIFT�and�CTRL�affect�these./ŠGRP_OFFSET�TBL.__NˆGroup�2:‚PAD�affects�these.;MAX_GRP_NUM�EQU‚(*-GRP_TBL)/2†Highest�defined�group�number.ŠPAGEO*v********************************************************************************B***…SCAN�CODE�TABLE�--�CONVERTS�A�SCAN�CODE�TO�GROUP/ROUTINE�INDEX***˜&�PARAMETER.***D***…FUNCTION:‚The�scan�code�taken�from�the�2661,�multiplied�by�2,�isB***‡used�as�an�index�into�this�table.‚This�table�contains�a�2-byteC***‡entry�for�each�possible�scan�code:‚a�1-byte�group/routine�index4***‡(see�the�offset�table,�OFF_TBL)�and�a�parameter.***O*^***************************************************************************** SCAN_CODE_TBL: *H*‚The�RTN�macro�is�used�to�make�entries�in�the�scan�code�table�for�thoseG*‚scan�codes�which�will�result�in�some�routine�being�run.‚The�format�is"*„RTN�[,]G*‚The�first�argument�is�the�name�of�the�routine�to�go�to�when�this�scanJ*‚code�is�received.‚The�second�argument,�which�is�optional,�is�a�parameterI*‚to�pass�to�the�routine.‚That�is,�the�same�routine�may�be�used�with�many:*‚different�scan�codes,�each�passing�a�different�argument.* RTN‡MACRO ŠDC.BƒRI$\1 ŠIFC„'\2',''ŠDC.Bƒ0ŠMEXITŠENDCŠDC.Bƒ\2ŠENDM *J*‚The�ALPHA�macro�is�used�to�make�entries�in�the�scan�code�table�for�thoseE*‚scan�codes�which�will�generate�alphabetic�characters.‚The�format�is(*„ALPHA�* ALPHA…MA CROŠDC.BƒRI$GEN_ALPHA,'\1'ŠENDM *J*‚The�GROUP�macro�is�used�to�make�entries�in�the�scan�code�table�for�thoseB*‚scan�codes�which�have�entries�in�character�tables.‚The�format�is.*„GROUP�,G*‚Both�arguments�are�required.‚The�first�is�0,1,...whatever�the�highestI*‚group�index�is,�as�defined�in�OFF_TBL.‚The�second�argument�is�the�index5*‚into�the�chosen�character�table�for�this�scan�code.* GROUP…MACROŠIFGTƒ\1-MAX_GRP_NUM#ŠFAILƒ499�This�group�#�is�too�high.ŠENDC ŠDC.Bƒ2*\1,\2ŠENDMŠPAGE*§scan*‚$00�-�$1FœcodeƒKey&*§---„--------------------------------ŠRTN„IGNORE�$00�--�Ignore�it.ŠRTN„IGNORE�$01�--�Ignore�it.ŠRTN„IGNORE�$02�--�Ignore�it.ŠRTN„IGNORE�$03�--�Ignore�it.ŠRTN„IGNORE�$04�--�Ignore�it.ŠRTN„IGNORE�$05�--�Ignore�it.ŠRTN„IGNORE�$06�--�Ignore�it.5ŠRTN„SET_MODE,ALPHA_LOCK�$07�--�ALPHA�LOCK�depressed.0ŠRTN„SET_SHIFT,LEFT…$08�--�Left‚SHIFT�depressed.2ŠRTN„SET_SHIFT,RIGHT„$09�--�Right�SHIFT�depressed.)ŠRTN„SET_MODE,CTRL†$0A�--�CTRL�depressed.'ŠRTN„SET_MODE,ALT‡$0B�--�ALT‚depressed.<ŠRTN„SET_MODE,BLANK…$0C�--�Blank�locking�mode�key�depressed..ŠRTN„IGNORE�$0D�--�Clacker�mode�key�depressed.<ŠRTN„SET_MODE,PAD‡$0E�--�FUNC_PAD�depressed�(to�select�PAD).4ŠRTN„CLR_MODE,ALPHA_LOCK�$0F�--�ALPHA�LOCK�released. ŠRTN„IGNORE�$10�--�Ignore�it.ŠGROUP‚1,0�$11�--�`�~�key.ŠGROUP‚1,1�$12�--�1�!�key.ŠRTN„TWO_AT�$13�--�2�@�key.ŠGROUP‚1,2�$14�--�3�#�key.,ŠGROUP‚1,13�$15�--�TAB�key�on�main�keyboard.ŠALPHA‚Q’$16�--�Q�key.ŠALPHA‚W’$17�--�W�key.ŠALPHA‚E’$18�--�E�key.ŠALPHA‚A’$19�--�A�key.ŠALPHA‚S’$1A�--�S�key.ŠALPHA‚D’$1B�--�D�key.ŠALPHA‚Z’$1C�--�Z�key.ŠALPHA‚X’$1D�--�X�key.ŠGROUP‚1,23�$1E�--�Space�bar.3ŠRTN„CLR_SHIFT,LEFT…$1F�--�Left�SHIFT�key�released.ŠPAGE*§scan*‚$20�-�$3FœcodeƒKey&*§---„--------------------------------ŠRTN„IGNORE�$20�--�Ignore�it.#ŠRTN„FNKEY,1Œ$21�--�Function�key�1.#ŠRTN„FNKEY,2Œ$22�--�Function�key�2.#ŠRTN„FNKEY,3Œ$23�--�Function�key�3.ŠGROUP‚1,3�$24�--�4�$�key.ŠGROUP‚1,4�$25�--�5�%�key.ŠGROUP‚1,5�$26�--�6�^�key.ŠALPHA‚R’$27�--�R�key.ŠALPHA‚T’$28�--�T�key.ŠALPHA‚Y’$29�--�Y�key.ŠALPHA‚F’$2A�--�F�key.ŠALPHA‚G’$2B�--�G�key.ŠALPHA‚C’$2C�--�C�key.ŠALPHA‚V’$2D�--�V�key.ŠALPHA‚B’$2E�--�B�key.5ŠRTN„CLR_SHIFT,RIGHT„$2F�--�Right�SHIFT�key�released. ŠRTN„IGNORE�$30�--�Ignore�it.#ŠRTN„FNKEY,4Œ$31�--�Function�key�4.#ŠRTN„FNKEY,5Œ$32�--�Function�key�5.#ŠRTN„FNKEY,6Œ$33�--�Function�key�6.ŠGROUP‚1,6�$34�--�7�&�key.ŠGROUP‚1,7�$35�--�8�*�key.ŠGROUP‚1,8�$36�--�9�(�key.ŠALPHA‚U’$37�--�U�key.ŠALPHA‚I’$38�--�I�key.ŠALPHA‚H’$39�--�H�key.ŠALPHA‚J’$3A�--�J�key.ŠALPHA‚K’$3B�--�K�key.ŠALPHA‚N’$3C�--�N�key.ŠALPHA‚M’$3D�--�M�key.ŠGROUP‚1,20�$3E�--�,�<�key.,ŠRTN„CLR_MODE,CTRL†$3F�--�CTRL�key�released.ŠPAGE*§scan*‚$40�-�$5FœcodeƒKey&*§---„--------------------------------ŠRTN„IGNORE�$40�--�Ignore�it.#ŠRTN„FNKEY,7Œ$41�--�Function�key�7.#ŠRTN„FNKEY,8Œ$42�--�Function�key�8.ŠGROUP‚1,9�$43�--�0�)�key.ŠGROUP‚1,10�$44�--�-�_�key.ŠGROUP‚1,11�$45�--�=�+�key.ŠALPHA‚O’$46�--�O�key.ŠALPHA‚P’$47�--�P�key.ŠGROUP‚1,14�$48�--�[�{�key.ŠALPHA‚L’$49�--�L�key.ŠGROUP‚1,17�$4A�--�:�;�key.ŠGROUP‚1,18�$4B�--�'�"�key.ŠGROUP‚1,21�$4C�--�.�>�key.ŠGROUP‚1,22�$4D�--�/�?�key.ŠRTN„IGNORE�$4E�--�Ignore�it.*ŠRTN„CLR_MODE,ALT‡$4F�--�ALT�key�released. ŠRTN„IGNORE�$50�--�Ignore�it.#ŠRTN„FNKEY,9Œ$51�--�Function�key�9.%ŠRTN„FNKEY,10‹$52�--�Function�key�10.%ŠRTN„FNKEY,11‹$53�--�Function�key�11.%ŠRTN„FNKEY,12‹$54�--�Function�key�12.ŠGROUP‚1,12�$55�--�DEL�key.(ŠRTN„BREAK_CLEARˆ$56�--�BREAK�CLEAR�key.ŠGROUP‚1,15�$57�--�]�}�key.ŠGROUP‚1,16�$58�--�\�|�key.ŠGROUP‚0,1�$59�--�Home�key.ŠGROUP‚1,19�$5A�--�Return�key. ŠGROUP‚0,3�$5B�--�Backarrow�key.ŠRTN„IGNORE�$5C�--�SEL�key.ŠGROUP‚0,5�$5D�--�Backtab�key. ŠGROUP‚0,6�$5E�--�Downarrow�key.;ŠRTN„CLR_MODE,BLANK…$5F�--�Blank�locking�mode�key�released.ŠPAGE*§scan*‚$60�-�$7FœcodeƒKey&*§---„--------------------------------*ŠRTN„C LR_MODE,PAD‡$60�--�PAD�key�released.%ŠRTN„FNKEY,13‹$61�--�Function�key�13.%ŠRTN„FNKEY,14‹$62�--�Function�key�14.%ŠRTN„FNKEY,15‹$63�--�Function�key�15.%ŠRTN„FNKEY,16‹$64�--�Function�key�16.$ŠRTN„ESC_RESETŠ$65�--�ESC�RESET�key.ŠGROUP‚2,10�$66�--�A�DCHR�key.ŠGROUP‚0,2�$67�--�Uparrow�key.#ŠRTN„IGNORE�$68�--�CLR�TAB�SET�key.ŠGROUP‚2,7�$69�--�7�EOF�key.!ŠGROUP‚0,4�$6A�--�Rightarrow�key."ŠGROUP‚2,4�$6B�--�4�key�on�hexpad.0ŠGROUP‚0,7�$6C�--�Tab�key�on�cursor�control�pad.ŠGROUP‚2,1�$6D�--�1�ICHR�key.ŠGROUP‚2,0�$6E�--�0�on�hexpad.-ŠRTN„IGNORE�$6F�--�Clacker�mode�key�released. ŠRTN„IGNORE�$70�--�Ignore�it.ŠGROUP‚2,11�$71�--�B�DLINE�key.ŠGROUP‚2,12�$72�--�C�on�hexpad.ŠGROUP‚2,13�$73�--�D�on�hexpad.ŠGROUP‚2,8�$74�--�8�EOL�key.ŠGROUP‚2,9�$75�--�9�EOP�key.ŠGROUP‚2,14�$76�--�E�EAU�key.ŠGROUP‚2,5�$77�--�5�on�hexpad.ŠGROUP‚2,6�$78�--�6�on�hexpad.ŠGROUP‚2,15�$79�--�F�on�hexpad.ŠGROUP‚2,2�$7A�--�2�ILINE�key.ŠGROUP‚2,3�$7B�--�3�on�hexpad.ŠGROUP‚2,16�$7C�--�TEST�,�key.ŠGROUP‚2,17�$7D�--�HELP�.�key.ŠGROUP‚0,0�$7E�--�ENTER�key.ŠRTN„IGNORE�$7F�--�Ignore�it.ŠPAGEO*v********************************************************************************!***…TWO_AT�--�HANDLE�THE�2�@�KEY.***?***…FUNCTION:‚This�code�is�entered�when�the�2�@�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�dependingE***‡on�the�state�of�the�SHIFT�and�CTRL�mode�keys.‚The�reason�this�keyD***‡can't�be�handled�by�the�tables�is�that�if�CTRL�is�pressed,�a�NULA***‡($00)�character�must�be�generated.‚A�value�of�0�in�the�tables%***‡is�reserved�to�mean�NO�CHARACTER.******…ENTRY�CONDITIONS:***O*^***************************************************************************** TWO_AT: **‚Is�the�CTRL�key�down?*"ŠBTSTƒ#CTRL,MODESˆIf�CTRL�is�down,ŠIF…�THENŠ* !ŠCLR„D0‘D0�<--�$00,�the�NUL�char.4ŠMOVEQ‚#1,D1ŽSet�CCR:�,�to�indicate�D0�has�a6ŠRESTORE�D1/A0�char�in�it,�restore�registers,�and�exit*ŠRTS—from�GET_CHAR�to�generate�a�NUL�char. ŠENDI  *D*‚CTRL�key�is�not�down--generate�2�or�@�depending�on�the�SHIFT�keys.*$ŠBTSTƒ#SHIFT,MODES‡If�SHIFT�is�down,ŠIF…�THENŠ* !ŠMOVEQI�AT_CHAR,D0‰Generate�an�@; ŠELSE–Else�(SHIFT�is�not�down), !ŠMOVEQI�TWO_CHAR,D0ˆGenerate�a�2. ŠENDI  +ŠBRA„EXIT_CHARŠExit�saying�'we�got�a�char.'ŠPAGEO*v********************************************************************************&***…ESC_RESET�--�HANDLE�ESC�RESET�KEY.***E***…FUNCTION:‚This�code�is�entered�when�the�ESC�RESET�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�depending(***‡on�the�state�of�the�SHIFT�mode�keys.******…ENTRY�CONDITIONS:***O*^***************************************************************************** ESC_RESET: ,ŠBTSTƒ#SHIFT,MODES‡If�the�SHIFT�key�is�down,ŠIF…�THENŠ* >ŠBSR.L‚RESET_SCREEN‡RESET�the�screen�and�ignore�the�keystroke.ŠBRA.L‚IGNORE�* ŠENDI  8ŠMOVEQ‚#$1B,D0ŒThe�SHIFT�key�is�not�down,�so�generate�an#ŠBRA„EXIT_CHARŠASCII�ESC�character.ŠPAGEO*v************************************************************************************…BREAK_CLEAR�--�HANDLE�BREAK�CLEAR�KEY.***G***…FUNCTION:‚This�code�is�entered�when�the�BREAK�CLEAR�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�depending(***‡on�the�state�of�the�SHIFT�mode�keys.******…ENTRY�CONDITIONS:***O*^***************************************************************************** BREAK_CLEAR: $ŠBTSTƒ#SHIFT,MODES‡If�SHIFT�is�down,ŠIF…�THENŠ* >ŠBSR.L‚CLEAR_SCREEN‡CLEAR�the�screen�and�ignore�the�keystroke.ŠBRA.L‚IGNORE�* ŠENDI  *§SHIFT�is�not�down,�so3ŠMOVEQ‚#-1,D0�set�CCR:‚,�to�indicate�BREAK.:ŠRESTORE�D1/A0�Restore�registers�and�return�from�GET_CHAR.ŠRTS—*ŠPAGEO*v********************************************************************************( ***…GEN_ALPHA�--�HANDLE�ALPHABETIC�KEYS.***E***…FUNCTION:‚This�code�is�entered�when�an�alphabetic�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�depending>***‡on�the�state�of�the�SHIFT,�ALPHA�LOCK,�and�CTRL�mode�keys.******…ENTRY�CONDITIONS:4***‡D0.B�=�an�uppercase�alphabetic�char:�'A'�to�'Z'.***O*^***************************************************************************** GEN_ALPHA: *ŠBTSTƒ#CTRL,MODESˆIf�the�CTRL�key�is�down,ŠIF…�THENŠ* 0ŠADD.B‚#1-'A',D0ŠConvert�this�to�a�control�char; "ŠELSE–Else�(CTRL�key�is�not�down), <ŠMOVEQI�ALOCK_OR_SHIFT,D1‚Check�whether�either�SHIFT�(either3ŠAND.B‚MODES,D1‹one)�or�ALPHA�LOCK�is�down.‚If�not,ŠIF…�THENŠ* -ŠADD.B‚#'a'-'A',D0ˆConvert�this�to�lowercase. ŠENDI ŠENDI   +ŠBRA„EXIT_CHARŠExit�saying�'we�got�a�char!'ŠPAGEO*v********************************************************************************"***…FNKEY�--�HANDLE�FUNCTION�KEYS.***B***…FUNCTION:‚This�code�is�entered�when�a�function�key�is�pressed.G***‡Its�purpose�is�to�generate�the�appropriate�character�code�depending(***‡on�the�state�of�the�SHIFT�mode�keys.******…ENTRY�CONDITIONS:;***‡D0.B�=�the�number�of�the�function�key�pressed:�1�to�16.***O*^***************************************************************************** FNKEY: 8ŠBTSTƒ#SHIFT,MODES‡If�either�of�the�shift�keys�are�down,ŠIF…�THENŠ* 9ŠADD.B‚#FNKEY_S1-1,D0…Generate�the�shifted�function�code. %ŠELSE–Else�(the�SHIFT�keys�are�down), ;ŠADD.B‚#FNKEY_F1-1,D0…Generate�the�unshifted�function�code. ŠENDI  +ŠBRA„EXIT_CHARŠExit�saying�'we�got�a�char!'ŠPAGEO*v********************************************************************************F***…SET_SHIFT�AND�CLR_SHIFT�--�SET�OR�CLEAR�ONE�OF�THE�TWO�SHIFT�KEYS.***H***…FUNCTION:‚Use�these�routines�when�a�shift�key�is�pressed�or�releasedE***‡to�update�the�SHIFT_KEYS�byte�and�make�a�mode�change�for�SHIFT�if***‡necessary.***1***…ENTRY�CONDITIONS�FOR�SET_SHIFT�AND�CLR_SHIFT:8***‡D0.B�=�the�bit�number�of�the�mode�in�the�MODES�byte.***O*^***************************************************************************** SET_SHIFT: ;ŠBSETƒD0,SHIFT_KEYS†Set�the�bit�representing�this�shift�key7ŠMOVEQ‚#SHIFT,D0Š(left�or�right)�and�go�set�SHIFT�mode.ŠBRA„SET_MODE‹*  CLR_SHIFT: =ŠBCLRƒD0,SHIFT_KEYS†Clear�the�bit�representing�this�shift�key8ŠMOVEQ‚#SHIFT,D0Š(left�or�right).‚If�both�shift�keys�are8ŠTST.B‚SHIFT_KEYS‰up�now,�go�clear�SHIFT�mode;�otherwise(ŠBEQ„CLR_MODE‹just�ignore�the�keystroke. ŠBRA„IGNORE�*ŠPAGEO*v********************************************************************************?***…SET_MODE�AND�CLR_MODE�--�SET�OR�CLEAR�A�MODE�(E.G.,�SHIFT).***G***…FUNCTION:‚Use�these�routines�when�a�mode�key�is�pressed�or�releasedE***‡to�update�the�MODES�byte�and�set�the�appropriate�table�offsets�in***‡the�GRP_TBL.***/***…ENTRY�CONDITIONS�FOR�SET_MODE�AND�CLR_MODE:8***‡D0.B�=�the�bit�number�of�the�mode�in�the�MODES�byte.***E***…NOTES:‚IGNORE�is�another�entry�point�used�to�return�from�GET_CHARF***‡without�generating�a�char�or�break.‚There�are�no�entry�conditions.***O*^***************************************************************************** SET_MODE: 5ŠBSETƒD0,MODES‹Set�the�specified�mode�and�go�registerŠBRA„MODE_CHANGEˆthe�change.  CLR_MODE: (ŠBCLRƒD0,MODES‹Clear�the�specified�mode. *(*‚Change�the�offsets�in�the�group�table.* MODE_CHANGE<ŠLEA„GRP_TBL+2,A0‡A0�<--�address�of�the�group�1�offset�entry'*§in�the�group�table.‚We�can�skip�group*§0�since�it�never�changes. ŠIFNEƒSHIFT-2<ŠFAILƒ499ˆSHIFT�must�=�2�or�you�must�change�this�next�logic.ŠENDC ŠIFNEƒCTRL-1;ŠFAILƒ499‰CTRL�must�=�1�or�you�must�change�this�next�logic.ŠENDC :ŠMOVEQ‚#%110,D0‹Isolate�the�SHIFT�(bit�2)�and�CTRL�(bit�1):ŠAND.B‚MODES,D0‹modes�from�the�MODES�byte.‚Set�the�corres-7ŠMOVEƒGRP1_OFF(PC,D0),(A0)+�ponding�offset�for�group�1. (ŠB  TSTƒ#PAD,MODES‰If�the�PAD�key�is�down,ŠIF…�THENŠ*@ŠMOVEƒ#TBL.__Y-BASE,(A0)+�set�the�group�2�offset�to�the�PAD�mode(ŠELSE–table,�else�(PAD�key�is�not�down),AŠMOVEƒ#TBL.__N-BASE,(A0)+�set�the�group�2�offset�to�the�FUNC�mode ŠENDI–table. *N*‚Exit�GET_CHAR�saying�"no�char�or�break�was�generated--ignore�the�keystroke."*8IGNORE:ƒCLR„D0‘Set�CCR:��to�indicate�no�character�or4ŠRESTORE�D1/A0�break�was�generated�by�the�keystroke.)ŠRTS—Restore�registers�and�exit�GET_CHAR.&*£Note�that�the�V�bit�is�also�cleared.  *F*‚Some�kind�of�error�was�detected�in�either�getting�the�results�of�theG*‚STATUS�command�or�in�getting�the�scan�code�from�a�READ�command.‚Issue2*‚the�proper�command�to�the�keyboard�to�try�again.*‚A0�still�points�to�the�2661.*=ERROR…TST.B‚DATA(A0)‹Read�the�char�out�if�we�haven't�already.;ŠMOVE.B�#COMM_INIT,COMMAND(A0)‚Reset�the�error�in�the�2661. ŠIF.B‚DOING_READ‚�#0�THEN@ŒMOVE.B�#STATUS_KB,DATA(A0)�Tell�the�keyboard�to�send�the�status-*£of�the�keyboard�again,�just�ignore�this�one ŠELSECŒMOVE.B�#AGAIN_KB,DATA(A0)�Tell�the�keyboard�to�send�that�last�scan#*£code�again;�just�ignore�this�one.ŠENDI ŠBRA.S‚IGNORE  *F*‚Neither�the�receiver�nor�the�transmitter�are�enabled,�so�this�is�not8*‚our�interrupt.‚Set�the�Z�bit�and�the�V�bit�and�return. *’X�N�Z�V�C*INTNOPƒPOP.L‚D1$‰ORIƒ#%0000000000000100,SR‰Set�Z�bit$‰ORIƒ#%0000000000000010,SR‰Set�V�bit‰RTSŠPAGE  *7*‚Table�of�offsets�for�group�1,�depending�on�mode�keys.:*‚Note�that�we�use�the�same�table�for�CTRL�and�CTRL+SHIFT.*FGRP1_OFF‚DC.WƒTBL.NN_-BASE‡Offset�to�group�1�table:�no�SHIFT,�no�CTRL.;ŠDC.WƒTBL.XY_-BASE‡Offset�to�group�1�table:�no�SHIFT,„CTRL.;ŠDC.WƒTBL.YN_-BASE‡Offset�to�group�1�table:„SHIFT,�no�CTRL.8ŠDC.WƒTBL.XY_-BASE‡Offset�to�group�1�table:„SHIFT,„CTRL.ŠPAGEO*v********************************************************************************;***…GROUP�0�CHARACTER�TABLE�--�KEYS�UNAFFECTED�BY�MODE�KEYS***C***…FUNCTION:‚This�table�contains�the�characters�to�return�for�scanB***‡codes�which�fall�into�group�0.‚Use�the�parameter�obtained�fromA***‡the�scan�code�table�as�an�index�into�this�table.‚A�value�of�0&***‡will�cause�no�character�to�result.***6***‡Table�TBL.___�is�used�regardless�of�any�mode�keys.***O*^***************************************************************************** TBL.___: *£element�# *£---------'ŠDC.Bƒ$0D�0�--�CR�(from�the�ENTER�key).ŠDC.Bƒ$C0�1�--�Home.)ŠDC.Bƒ$0B�2�--�VT�(from�the�uparrow�key).+ŠDC.Bƒ$08�3�--�BS�(from�the�leftarrow�key).,ŠDC.Bƒ$0C�4�--�FF�(from�the�rightarrow�key).ŠDC.Bƒ$DB�5�--�Backtab.+ŠDC.Bƒ$0A�6�--�LF�(from�the�downarrow�key).*ŠDC.Bƒ$09�7�--�HT�(from�the�tab�key�on�the*®cursor�control�pad).ŠPAGEO*v********************************************************************************E***…GROUP�1�CHARACTER�TABLES�--�KEYS�AFFECTED�BY�SHIFT�AND�CTRL�KEYS.***D***…FUNCTION:‚These�tables�contain�the�characters�to�return�for�scanB***‡codes�which�fall�into�group�1.‚Use�the�parameter�obtained�fromC***‡the�scan�code�table�as�an�index�into�these�tables.‚A�value�of�0&***‡will�cause�no�character�to�result.***E***‡Table�TBL.NN_�is�used�when�we're�in�neither�SHIFT�nor�CTRL�modes.C***‡Table�TBL.XY_�is�used�when�we're�in�CTRL�mode�(SHIFTed�or�not).@***‡Table�TBL.YN_�is�used�when�we're�in�SHIFT�but�not�CTRL‚mode.***O*^***************************************************************************** TBL.NN_: *£element�# *£--------- ŠDC.Bƒ'`'�0. ŠDC.Bƒ'1'�1. ŠDC.Bƒ'3'�2. ŠDC.Bƒ'4'�3. ŠDC.Bƒ'5'�4. ŠDC.Bƒ'6'�5. ŠDC.Bƒ'7'�6. ŠDC.Bƒ'8'�7. ŠDC.Bƒ'9'�8. ŠDC.Bƒ'0'�9. ŠDC.Bƒ'-'�10. ŠDC.Bƒ'='�11.ŠDC.Bƒ$7F�12�--�DEL.3ŠDC.Bƒ$09�13�--�HT�(from�tab�key�on�main�keyboard). ŠDC.Bƒ'['�14. ŠDC.Bƒ']'�15. ŠDC.Bƒ'\'�16. ŠDC.Bƒ';'�17.ŠDC.Bƒ$27�18�--�Apostrophe.%ŠDC.Bƒ$0D�19�--�CR�(from�return�key). ŠDC.Bƒ','�20. ŠDC.Bƒ'.'�21. ŠDC.Bƒ'/'�22. ŠDC.Bƒ'�'�23.ŠPAGETBL.XY_:   *£element�# *£--------- ŠDC.Bƒ0’0. ŠDC.Bƒ0’1. ŠDC.Bƒ0’2. ŠDC.Bƒ0’3. ŠDC.Bƒ0’4.ŠDC.Bƒ$1E�5‚--�CTRL�^. ŠDC.Bƒ0’6. ŠDC.Bƒ0’7. ŠDC.Bƒ0’8. ŠDC.Bƒ0’9.ŠDC.Bƒ$1F�10�--�CTRL�_. ŠDC.Bƒ0’11. ŠDC.Bƒ0’12. ŠDC.Bƒ0’13.ŠDC.Bƒ$1B�14�--�CTRL�[.ŠDC.Bƒ$1D�15�--�CTRL�].ŠDC.Bƒ$1C�16�--�CTRL�\. ŠDC.Bƒ0’17. ŠDC.Bƒ0’18. ŠDC.Bƒ0’19. ŠDC.Bƒ0’20. ŠDC.Bƒ0’21. ŠDC.Bƒ0’22. ŠDC.Bƒ0’23.ŠPAGETBL.YN_: *£element�# *£--------- ŠDC.Bƒ'~'�0. ŠDC.Bƒ'!'�1. ŠDC.Bƒ'#'�2. ŠDC.Bƒ'$'�3. ŠDC.Bƒ'%'�4. ŠDC.Bƒ'^'�5. ŠDC.Bƒ'&'�6. ŠDC.Bƒ'*'�7. ŠDC.Bƒ'('�8. ŠDC.Bƒ')'�9. ŠDC.Bƒ'_'�10. ŠDC.Bƒ'+'�11.ŠDC.Bƒ$7F�12�--�DEL.3ŠDC.Bƒ$09�13�--�HT�(from�tab�key�on�main�keyboard). ŠDC.Bƒ'{'�14. ŠDC.Bƒ'}'�15. ŠDC.Bƒ'|'�16. ŠDC.Bƒ':'�17. ŠDC.Bƒ'"'�18.%ŠDC.Bƒ$0D�19�--�CR�(from�return�key). ŠDC.Bƒ'<'�20. ŠDC.Bƒ'>'�21. ŠDC.Bƒ'?'�22. ŠDC.Bƒ'�'�23.ŠPAGEO*v********************************************************************************C***…GROUP�2�CHARACTER�TABLES�--�KEYS�AFFECTED�ONLY�BY�FUNC/PAD�KEY.***D***…FUNCTION:‚These�tables�contain�the�characters�to�return�for�scanB***‡codes�which�fall�into�group�2.‚Use�the�parameter�obtained�fromC***‡the�scan�code�table�as�an�index�into�these�tables.‚A�value�of�0&***‡will�cause�no�character�to�result.***5***‡Table�TBL.__N�is�used�when�we're�not�in�PAD�mode.2***‡Table�TBL.__Y�is�used�when�we�are�in�PAD�mode.***E***‡These�tables�contain�characters�associated�with�the�hexpad.‚Note,7***‡however,�that�the�ENTER�key�is�not�in�these�tables.***O*^***************************************************************************** TBL.__N: *£element�# *£--------- ŠDC.Bƒ0’0.ŠDC.Bƒ$D0�1‚--�ICHR.ŠDC.Bƒ$D6�2‚--�ILINE. ŠDC.Bƒ0’3. ŠDC.Bƒ0’4. ŠDC.Bƒ0’5. ŠDC.Bƒ0’6. ŠDC.Bƒ0’7.ŠDC.Bƒ$D5�8‚--�EOL.ŠDC.Bƒ$D4�9‚--�EOP.ŠDC.Bƒ$D1�10�--�DCHR.ŠDC.Bƒ$D7�11�--�DLINE.ŠDC.Bƒ0’12�--�PMODE. ŠDC.Bƒ0’13. ŠDC.Bƒ0’14. ŠDC.Bƒ0’15. ŠDC.Bƒ0’16. ŠDC.Bƒ0’17.ŠPAGETBL.__Y: *£element�# *£--------- ŠDC.Bƒ'0'�0. ŠDC.Bƒ'1'�1. ŠDC.Bƒ'2'�2. ŠDC.Bƒ'3'�3. ŠDC.Bƒ'4'�4. ŠDC.Bƒ'5'�5. ŠDC.Bƒ'6'�6. ŠDC.Bƒ'7'�7. ŠDC.Bƒ'8'�8. ŠDC.Bƒ'9'�9. ŠDC.Bƒ'A'�10. ŠDC.Bƒ'B'�11. ŠDC.Bƒ'C'�12. ŠDC.Bƒ'D'�13. ŠDC.Bƒ'E'�14. ŠDC.Bƒ'F'�15. ŠDC.Bƒ','�16. ŠDC.Bƒ'.'�17.   ŠENDNNNN**ˆVMES10.DRVS10.CI*GMSG‰*******************************************************************(MSG‰**ƒScreen/keyboard�driver�for�VME/10GMSG‰******************************************************************* IFGTˆ\NOLTERM-1ƒMSG†NOLTERM�must�be�<=�1ƒABORTENDC "*‚Adjust�total�number�of�terminals&TOTTERM‚=�\&TOTTERM+\NOLTERM 5* Build VERSAdos patch chain file .VERSAPT.CF$=COPY‡VERSAPT.DRVS10.CF,VERSAPT.CF;A 5* Assemble the KEYBOARD portion before doing the 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ý4�y(–@a²`ˆBC`ô y( ±ù(c"H“Å/09(F3@ 1!QÈÿü _‘Å`à09( € <DQÈÿò` y(""HÓÅ09(³ù( d/0ÙQÈÿü _F3UA ÑÅ`àüD€ QÈÿò y("`ÜHçÿð69(#Eù(",9( y(%89(a`úˆ yÿÿ(# &G3($ fJXkP€XDQÌÿè89(Ðù(!QËÿØNu&H±ù("f y(0 Jk·Èfè`jB¹) &`"H3D ‚ T¹) & :ö°¹('e B ga `ô`ha–69(SC  f&J¹) &fAùñp:9(ÊùF3€ ()XÿQÍÿú`0 zönÑüñp  g– gèÑÅQËÿö`‚¨ÑÅQËÿö`F3 ÿt (fÑ`¼d¹(-|`Ú¹(-| (f‘`¼,`F3 ¸ (fÑ`¼L¹(-|`–¹(-| (f‘`¼D`F3 tø‚`dø‚`T (fÑ`¼T¹(-|`F3  ¤¹(-| (f‘`¼,`‚ (f‘`¼¹(-|`F3 î¹(-| (fÑ`¼D`> (fÑ`¼Ä¹(-|`¹J3€(  (-| (f‘`¼D`ŒHçÿðEù(",9(`3ü) .aB ôŠAùñp4±ù(fÑÅ#È(‘Æ#È("Pù* VH3J¨ ±ù( f y(%#È("#È(ݹ(Pù* V·ÈfŒ` QD y("a >` àa 6À`üNaJ3UP * ÿf 3üÿÿ($`3Â($Pù* PQù(&Qù(` ÌQù* P`  y(%#È("#È(ݪa ÚF3( ` |‘Å›’›ª±ù(%l$ �¹(" y( #È("�’#È( y("ÑÀAè`þ&ÑÅÛ’Ûª±ù( F3@ m �¹(" y(%#È("#È(ݪÑÀa f` &HTˆ`JXkJ(ÿÿf`LUˆ` ð 9ÿÿ(&G3 U f` â±ù( f y(%#È("#È(ݹ(±ù(fÑÅ#È(‘Æ#È("·Èf¤` Êa øÀ) aF3  îr ²y((e ª²y(b  p:ù� °y(e Œ°y(*b ‚ÀÅ€ñpÒAÒ€F3$ Ar29((ÒAÒ€#Á("Ò†#Á( 9ÿÿ(fa ~` a J‚ÅHAïI�Ý ÞAúù4 �3üI3¨QU (#È(aB ù` 3üÿÿ(&Qù(`þJBy(&Qù( y(%#È("#È(ݪ` ¼Pù(By(&I3D `þa  ´y(*b Â3Â(aB ø¬`ýôa â ´y(d ¢´y(e ˜3Â(*`ÔaF3� ¾ ´y(b ~3Â((`ºa ¤ ´y()d d´y((e Z3Â(`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þD�yF3€… (–@a`~ 9ÿÿ(f`p y( ±ù(c"H“Å/09(1!QÈÿü _‘Å`à09( €F3!  <DQÈÿò` 9ÿÿ(f`" y(""HÓÅ09(³ù( d/0ÙQÈÿü _ÑÅ`àüDF3" € QÈÿò y("`º?9(+ (f üD(+`"&H·ù("g +ÿÿf ëÿþ(+`F3 ( `U‹`à±ù(gù(+€ `è3ß(+`† y(%89(a`ú´ 9ÿÿ(fJXkhÿ€F3 … ÿþhÿþ`P€XDQÌÿÚ89(Ðù(!QËÿÊNu y(%/Cúõ.#É(üÝ3ü(49(#H3@  29(Jj&TˆQÉÿøÛ— W29(QÊÿê`^Jj üùRy(`fpÀ(fÛ— W29( 9ÿÿ* VK3AP f`^``ÀRy(TˆQù* VQÉÿ¼Û— W29(QÊÿ®üùRy(¼ÞRy(aB ô~ _`„JH3BUD jšTHPù* VQÉÿòÛ— W29(QÊÿä`̱ù(%f y( #È(#È("�¹("±ù("f‘Å#È("ÑÆ#ÈF3 @•I (±ù("gJ`j`ò`¸±ù("f8JPk`ä±ù(%f y( #È(#È("�¹("‘Å#È("ÑÆ#È(J3D J`j¼Tˆ`ªB¹* R`"T¹* R :õ°¹('e B gaà`ô`¨aÖ69(SC  f&J¹H3‚€ * RfAùñp:9(Êù()XÿQÍÿú`p zô²Ñüñp  g– gèÑÅQËÿöF3* `‚¨ÑÅQËÿö`ÿtBACúó6#É(üÝ3ü( y("±ù(g’Rˆf¼ÞI3P Ry(aB òð`ø fb(ÿÿäXâXdüå`üäâXdüâ`üãâXdüæ`üF3 çâXdüà`üáâXdüé`üèâXdüê`üë\y(`ÀRy(`ÿh`ÿxF3  (fÑ`¼d¹(+|P€aš`V¹(+¼ (f‘`¼F3@ DP€ar`. (fÑ`¼L¹(+|P€aH` (f‘F3 `¼D¹(+|P€a`Úø‚¹(+¼P€aü`¸F3 ø‚¹(+|P€aØ`” (fÑ`¼T¹(+|P€F3 a®`j (f‘`¼D¹(+|P€a„`@ (f‘`¼F3  ¹(+|P€aZ`¹(+| (fÑ`¼DP€a0`ìF3  (fÑ`¼Ä¹(+|P€a`¹(+| (f‘`K3( ¼dP€aÜ`˜3ü* \aB ð€Aùñp4"H³ù("fNu)ÿÿgNu³ù("g )ÿÿf)ÿþ``U‰`ä(3 <DÀ(+"H³ù("g!f `è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@Àh�i0)// Aè CéF3 Eúý¤B�gâHe SAØQÉÿü`ÑÁÓÁ`æ"_ _~A0<Ài @gh~@)( bF3)fJ©gN` rðÂé²f@) g )(c)(g )á˜g jBF3`öBm||PìPNu‡rˆ`ýøa°HípÄaFíB+g;|4pF3¦`;|8p¦`ZPíâPíãQíèB­¬Qíä+f -qWíäNua`HípÐFíBF3+gQíèPíã+g;|p¦`;|p¦"mdR)'í¸"m"Pí¿HzF3/`8Qí¿Fü p.m\Nu;kª+gAëpN@`r„`ý(+HdB­´,+ F3*+š†RE"mdaNuagr„`ý(Ú†S…NuHçýü?<fJ…g 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 ****************************ˆASYNCHRONOUS�EVENT�QUEUE*!ŠOFFSET�0’THIS�IS�AN�OFFSET�TABLEASQ‡DS.Lƒ1’!ASQ�DEBUG�TOOL $ASQASR„DS.Lƒ1’LOGICAL�ADDRESS�OF�ASR1ASQXFR„DS.Lƒ1’LOGICAL�INTERRUPT�ADDRESS�FOR�EVENT 1ASQDBUFƒDS.Lƒ1’PHYSICAL�ADDRESS�OF�DEFAULT�BUFFER.ASQA0BUF‚DS.Lƒ1’PHYSICAL�ADDRESS�OF�GET�BUFFER 5ASQBOT„DS.Lƒ1’PHYSICAL�ADDRESS�OF�FIRST�BYTE�OF�QUEUE4ASQTOP„DS.Lƒ1’PHYSICAL�ADDRESS�OF�LAST�BYTE�OF�QUEUE2ASQGET„DS.Lƒ1’PHYSICAL�ADDRESS�OF�NEXT�BYTE�TO�GET2ASQPUT„DS.Lƒ1’PHYSICAL�ADDRESS�OF�NEXT�BYTE�TO�PUT !ASQSTATE‚EQU„*’ASQ�STATE�VARIABLE'ASQSWMOD‚DS.Wƒ1’ASQ�SWITCHING�MODE�BITSASQSWMD2‚EQU„ASQSWMOD+1$ASQSTMOD‚DS.Wƒ1’ASQ�STATIC�MODE�BITSASQSTMD2‚EQU„ASQSTMOD+1 #ASQML…DS.Wƒ1’ASQ�MAX�MESSAGE�LENGTH1ASQCNT„DS.Wƒ1’NUMBER�OF�EVENTS�CURRENTLY�IN�QUEUE 0ASQSTART‚EQU„*’OFFSET�TO�FIRST�POSITION�IN�QUEUE+ASQLEN„EQU„*-ASQŽLENGTH�OF�ASQ�CONTROL�AREA***ˆASQ�STATE�DEFINITIONS*"RQ_DIS„EQU„0<<3�ASQ�DISABLED�STATEQ_EN†EQU„1<<3�ASQ�ENABLED�STATER_EN†EQU„2<<3�ASR�ONLY�STATE RQ_EN…EQU„3<<3�ASR�ENABLED�STATE!WT_EN…EQU„4<<3�WAIT�ENABLED�STATE GT_EN…EQU„5<<3�GET�ENABLED�STATE STATE_MASK�EQUƒ%00111000** *ˆASQ�SWITCHING�MODE�DEFINITIONS*ASQ_MT„EQU„1<<1�ASQ�EMPTYASQ_NMTƒEQU„0<<1�ASQ�NOT�EMPTY'DBUF_ENƒEQU„1<<2�DEFAULT�BUFFER�ENABLED)DBUF_DIS‚EQU„0<<2�DEFAULT�BUFFER�DISABLED (ASQMTBIT‚EQU„1’ASQ�EMPTY�(AS�BIT�NUMBER)3ASQDBBIT‚EQU„2’ASQ�DBUF�ENABLED�BIT�(AS�BIT�NUMBER) SWMD_MASK�EQU„ASQ_MT+DBUF_EN***ˆASQ�STATIC�MODE�DEFINITIONS*@*ˆ(See�last�three�bits�in�"STATUS�BITS�FOR�ASQALOC�&�ASQSTATS".) **#*ˆSTATUS�BITS�TO�ASQALOC�&�ASQSTATS*ASQSEN„EQU„0’ASQ�ENABLED&ASQSDBEN‚EQU„1’MESSAGE�RECEIPT�ENABLEDASQSRENƒEQU„2’ASR�ENABLED $ASQSKDIS‚EQU„3’DO�NOT�SAVE�REGISTERS&ASQS_DBV‚EQU„4’DEFAULT�BUFFER�IS�VALIDASQS_RNV‚EQU„5’ASR�IS�NOT�VALID (STMD_MASK�EQU„ASQSKDIS+ASQS_DBV+ASQS_RNV***ˆASQ�EVENT�OFFSETS* ŠOFFSET�0( Q CD7_LENƒDS.Bƒ1’LENGTH�OF�EVENTCD7_CODE‚DS.Bƒ1’EVENT�CODE'CD7_TRAP‚DS.Bƒ1’TRAP�INSTRUCTION�VECTOR CD7_CPRI‚DS.Bƒ1’CURRENT�PRIORITY,CD7_TCBƒEQU„*’TCB�ADDRESS�OF�REQUESTING�TASK+CD7_NAME‚DS.Lƒ1’TASKNAME�OF�REQUESTING�TASK1CD7_SESS‚DS.Lƒ1’SESSION�NUMBER�OF�REQUESTING�TASKCD7_ID„DS.Wƒ1’USER�GENERATED�ID"CD7_D0„DS.Lƒ1’REQUESTING�TASK'S�D0"CD7_A0„DS.Lƒ1’REQUESTING�TASK'S�A0&CD7_PBST‚DS.Bƒ1’PARAMETER�BLOCK�STATUS$CD7_PBSZ‚DS.Bƒ1’PARAMETER�BLOCK�SIZE2LEN_CD7ƒEQU„*-CD7_LENŠLENGTH�OF�CODE�7�EVENT�BLOCK**ˆASQ�EVENT�CODES* EVNTOWNƒEQU„1EVNTIO„EQU„2’I/O�COMPLETIONEVNTMSGƒEQU„3’MESSAGEEVNTUSER‚EQU„3’USER�EVENTEVNTTIME‚EQU„4’TIMER�EVENTEVNTTASK‚EQU„5’SUB-TASK�EVENTEVNTATTN‚EQU„6’ATTENTION�EVENTEVNTSERV‚EQU„7’SERVER�EVENT%BIT_7…EQU„7’BIT�7�SET�=�ALT�ASR�EVENT*********************** Ending of &.ASQ.EQ ***********************NNNN‰PAGE************************** Beginning of &.ASQ.MC ***************************#*ˆThis�is�the�macro�to�check�to�see(*ˆif�we�need�to�append�a�parameter�block*ˆto�the�end�of�a�type_7�event.**ˆif*ˆ(code�=�server_event)*ˆthen�call�append_pb;*CHECK_PB MACRO‰CMP.B…#EVNTSERV,D1 ‰BNE.S…CKPB\@‰BSR‡APPEND_PBCKPB\@‰ENDM *#*ˆThis�is�the�macro�to�check�to�see(*ˆif�we�need�to�append�a�parameter�block*ˆto�the�end�of�a�type_7�event.)*ˆ(This�is�a�special�version�for�EXQEVENT!*ˆbecause�the�code�is�not�in�D1.)**ˆif*ˆ(code�=�server_event)*ˆthen�call�append_pb;*E_CHK_PB MACRO ‰MOVE.L„D2,D1‰SWAP†D1‰AND.B…#$7F,D1‰CMP.B…#EVNTSERV,D1 ‰BNE.S…ECPB\@‰BSR‡APPEND_PBECPB\@‰ENDM    **ˆThis�is�the�freeze_asq�macro.*ˆIt�inhibits�interrupts.*FREEZE_ASQ‰MACRO‰MOVE.W„SR,-(A7)‰ORI.W…#$0700,SR‰ENDM  * *ˆThis�is�the�release_asq�macro.*ˆIt�enables�interrupts.*RELEASE_ASQˆMACRO‰MOVE.W„(A7)+,SR‰ENDM  *%*ˆThis�is�the�macro�to�get�the�length)*ˆof�the�event�into�the�msg_len�register.* GET_LEN‚MACRO ‰CLR.L…D0‰MOVE.B„(A1)+,D0‰ENDM  *&*ˆThis�is�the�macro�to�get�the�code�of'*ˆthe�event�into�the�msg_code�register.*GET_CODE MACRO‰MOVE.B„(A1)+,D1‰ENDM  *-*ˆThis�is�the�macro�to�set�the�asq_xfr�vector*ˆfrom�either:*(*�1.)‚the�alternate�asr�vector�contained$*’within�the�event�pointed�to�by�the*’asq_get�pointer,�or*�2.)‚the�default�asr�vector.* *’msg_ptr�<==�asq_get�(asq_ptr);'*’if�(bit_7�(msg_code�(msg_ptr))�=�set)6*’then�asq_xfr�(asq_ptr)�<==�alt_asr_vector�(msg_ptr);/*’else�asq_xfr�(asq_ptr)�<==�asq_asr�(asq_ptr); **ˆEquates�for�this�macro.* MSG_CODE�EQU‡1 ALT_ASR‚EQ) U‡2 GET_ASQXFR‰MACRO8‰MOVE.L„ASQASR(A4),ASQXFR(A4)‰Assume�default�asr�vector.4‰MOVE.L„ASQGET(A4),A1‘msg_ptr�<==�asq_get�(asq_ptr);.‰TST.B…MSG_CODE(A1)’is�bit_7�(msg_code)�=�set?‰BPL.S…GXF_\@˜branch�if�no. m4=‰MOVE.L„ALT_ASR(A1),ASQXFR(A4)ˆUse�alt_asr�vector�from�event.GXF_\@:‰ENDM  *.*ˆThis�is�the�macro�to�put�the�length�and�code*ˆfields�into�the�event.* PUT_LCƒMACRO‰MOVE.B„D0,(A0)+‰MOVE.B„D1,(A0)+ ‰SUB.W…#2,D0‰ENDM  *'*ˆThis�is�the�macro�to�move�the�message$*ˆfrom�the�src_ptr,�to�the�dest_ptr.*ˆ(Length�is�in�D0.)* PUT_MSG‚MACRO ‰LSR.W…#2,D0 ‰BCC.S…PM2_\@ ‰MOVE.W„(A1)+,(A0)+ ‰BRA.S…PM2_\@PM1_\@‰MOVE.L„(A1)+,(A0)+PM2_\@‰DBRA†D0,PM1_\@‰ENDM *'*ˆThis�is�the�macro�to�move�the�message$*ˆfrom�the�src_ptr,�to�the�dest_ptr.*ˆ(Length�is�in�D1.)*PUT_MSG1 MACRO ‰LSR.W…#2,D1 ‰BCC.S…PM2_\@ ‰MOVE.W„(A1)+,(A0)+ ‰BRA.S…PM2_\@PM1_\@‰MOVE.L„(A1)+,(A0)+PM2_\@‰DBRA†D1,PM1_\@‰ENDM*********************** Ending of &.ASQ.MC ***********************NNNN‰PAGE************************** Beginning of &.BAB.EQ **************************O********************************************************************************Í*D*‰Equates�relating�to�BAB�=�Background�Activation�Block�for�RMS68K„**Í*O******************************************************************************* *J*‚Interrupt�service�routines�in�supervisor�mode�may�schedule�a�routine�forL*‚execution�in�background�by�preparing�a�BAB�which�points�to�the�routine�andK*‚is�not�currently�in�use,�and�calling�the�exec's�BKG_SCHEDULE�routine�with*‚the�BAB�address�in�A0.*I*‚The�BKG_SCHEDULE�routine�sets�the�IN�USE�flag�in�the�BAB�and�adds�it�toI*‚the�end�of�a�queue�of�BAB's�which�will�be�dispatched�when�the�interruptF*‚level�returns�to�zero.‚You�may�NOT�alter�the�BABLNK�or�BABUSE�fieldsJ*‚while�the�BAB�is�in�use.‚An�attempt�to�schedule�using�a�BAB�whose�IN�USE$*‚flag�is�already�set�has�no�effect.*I*‚When�the�routine�is�dispatched,�A1�will�point�to�the�BAB,�and�all�otherH*‚registers�are�available;�only�the�stack�pointer�must�be�preserved.‚YouJ*‚will�be�at�interrupt�level�0�and�you�must�exit�at�interrupt�level�0�with*‚with�an�RTS.* ŠOFFSET�0 0BABLNK„DS.Lƒ1’Forward�link�to�next�BAB�in�queue.8BABPTR„DS.Lƒ1’Pointer�to�code�to�executed�in�background.0BABUSE„DS.Bƒ1’Flag:‚true�(nonzero)�means�IN�USE."ŠDS.Bƒ3’Reserved�(should�be�zero). BABBLN„EQU„*’Length�of�a�BAB.*********************** Ending of &.BAB.EQ ***********************) NN"&‰PAGE************************** Beginning of &.CCB.EQ **************************** CHANNEL CONTROL BLOCK (CCB)D*ƒCONTAINS�CHANNEL�DESCRIPTION�AND�DATA�AREAS�FOR�DEVICE�INDEPENDENT*ƒCMR�PORTION.**H* CHANNEL MANAGEMENT DATA AREA ****************************************** ŠOFFSET�0*ŠDS.Bƒ4’'!CCB'�DUMP�EYE�CATCHER-CCBALL„DS.Bƒ4’ALL�LINK�FOR�CCB�CHAIN�IN�ORDER*¨OF�ALLOCATION/CCBPOLLƒDS.Bƒ4’LINK�TO�NEXT�CCB�FOR�THIS�VECTOR5CCBTLNKƒDS.Bƒ4’LINK�TO�NEXT�CCB�ATTACHED�TO�SAME�TASKACCBSUB„DS.Bƒ4ŠLINK�TO�CCB�OF�NEXT�SUBORDINATE�CHANNEL�(MEANINGFUL(*§ONLY�IF�CCBSTR�OPTION�CCBFGSUP�IS�SET)*J* THE FOLLOWING 24 BYTES MUST BE CONTIGUOUS IN THE CCB (LOAD WITH MOVEM.L)(CCBMNEMƒDS.Bƒ4’MNEMONIC�FOR�THIS�CHANNELCCBTYPEƒDS.Bƒ1’CHANNEL�TYPE&CCBCMCTƒDS.Bƒ1’RESERVED�(USED�BY�CHPI)1CCBUSERƒDS.Bƒ4’I/O�HANDLER�SERVICE�VECTOR�ADDRESS,CCBRTNIƒDS.Bƒ4’INTERRUPT�ENTRY�POINT�ADDRESS-CCBCHB„DS.Bƒ4’BASE�OF�MEMORY�MAPPED�I/O�SPACE>CCBMME„DS.Bƒ2�0-REL�NUMBER�OF�CONSEC�BYTES�IN�MEM�MAPPED�SPACE&CCBVECTƒDS.Bƒ1’INTERRUPT�VECTOR�NUMBER:CCBPPRIO‚DS.Bƒ1’POLLING�PRIORITY�(HARDWARE�INTERRUPT�PRIO)1CCBSPRIO‚DS.Bƒ1’SOFTWARE�PRIO�(POSITION�IN�CHAIN).CCBPECTƒDS.Bƒ1’NUMBER�OF�POLLING�TABLE�ENTRIES*>CCBRQSTƒDS.Bƒ8ŽTASK�NAME�AND�SESSION�CODE�THAT�ORIGINALLY�MADE**CCBRQSTA‚DS.Bƒ4’ADDRESS�OF�REQUESTOR'S�TCB*!CCBKEY„DS.Bƒ1’REQUESTOR'S�I/O�KEY$CCBRTN„DS.Bƒ1’RETURN�OPTION�(BIT�0):*§0=PUT�RETURN�STATUS�IN*ªBUFFER,�ISSUE�WAKEUP*§1=PUT�RETURN�STATUS�ON*ªASQ*#CCBASQLƒDS.Bƒ1’MAX�ASQ�ENTRY�LENGTHŠDS.Bƒ1’RESERVED7CCBSVVCƒDS.Bƒ4’SERVICE�VECTOR�FOR�RETURN�FROM�INTERRUPT)CCBSR…DS.Bƒ2’UNMASK�STATUS�REGISTER�VALUE(CCBISR„DS.Bƒ2’MASK�STATUS�REGISTER�VALUECCBVADRƒDS.Bƒ4’VECTOR�ADDRESS!CCBSTR„DS.Bƒ2’CCB�STATUS�REGISTER1CCBJSR„DS.Bƒ6’HOLDS�JSR�INSTRUCTION�FOR�VECTORING-CCBIOH„EQU„*’I/O�HANDLER�PARAMETER�BLOCK�INFO&CCBTASKA‚DS.Bƒ4’ADDRESS�OF�ATTACHE�TCB4CCBTASKƒDS.Bƒ8’ATTACHEE�TASK�NAME�AND�SESSION�NUMBER*+:42HCCBRESV1‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATAHCCBRESV2‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATAHCCBRESV3‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATAHCCBRESV4‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATAHCCBRESV5‚DS.Lƒ1…FUTURE�USE�BUFFER�BETWEEN�CCB�INDEPENDENT/DEPENDENT�DATA%CCBDDP„EQU„*’DEVICE�DEPENDENT�PORTION***-* POLLING TABLE AND POLLING TABLE ENTRY COUNT**žSTART�OF�POLLING�TABLE�IN�CCB5CCBMCNTƒEQU„4’MAXIMUM�NUMBER�OF�POLLING�TABLE�ENTRIES6CCBPBASE‚DS.BƒCCBMCNT*8ŠRESERVE�REMAINING�SPACE�IN�CCB**"* POLLING TABLE RESIDES WITHIN CCB9*ƒCONTAINS�8-BYTE�ENTRIES�TO�ALLOW�HANDLING�MORE�THAN�ONE'*ƒINTERRUPT�TYPE�FROM�A�SINGLE�CHANNEL.* ŠOFFSET�0"CCBPOFFƒDS.Bƒ2’POLLING�BYTE�OFFSETCCBMASKƒDS.Bƒ1’POLLING�MASK)CCBPTSTƒDS.Bƒ1’POLLING�=�OR�<>�TEST�VALUE CCBRESOƒDS.Bƒ2’RESET�BYTE�OFFSETCCBRESVƒDS.Bƒ1’RESET�VALUECCBRESPƒDS.Bƒ1’RESET�OPTIONS  ** CCBSTR (BIT FLAGS)*�BI* T”MEANING�IF�SET-*�---”---------------------------------------#CCBFGATH‚EQU„15‘CHANNEL�IS�ATTACHED"CCBFGDIR‚EQU„8’EXCLUSIVE�VECTORING?CCBFGSUP‚EQU„2�THIS�IS�A�SUPERVISOR�CHANNEL;�THE�ADDRESS�OF�THE(*§CCB�OF�THE�FIRST�CHANNEL�IN�THE�SUBOR-*§DINATE�CHAIN�IS�IN�CCBSUB."CCBFGOFF‚EQU„1’CHANNEL�IS�OFF-LINE;CCBFGSYS‚EQU„0‘ONLY�SYSTEM�TASKS�MAY�ATTACH�TO�THIS�CHANNEL  ** CCBRESP -- RESET OPTIONS*CCBRSW„EQU„0’WRITE�RESET�BYTECCBRSR„EQU„1’READ�RESET�BYTE*********************** Ending of &.CCB.EQ ***********************N‰PAGE****************************** Beginning of &.CONNECT.EQ ******************************O*v*****************************************************************************O*******************************************************************************O**********************************************************************************É***G***…FILENAME:�CONNECT.EQ�--�EQUATES�FOR�CONNECT'S�COMMON�DATA�AREA.…******É***G***…ENVIRONMENT:�This�is�included�in�the�assembly�of�the�two�halves…***?***‡of�the�VERSAdos�utility�CONNECT:‚CONNECT1�and�CONNECT2.Š******É***,***…EXTERNAL�DATA�STRUCTURES�REFERENCED: ******É***)***…EXTERNAL�ENTRY�POINTS�REFERENCED:£******É***O*******************************************************************************O*******************************************************************************O*^***************************************************************************** *,*‚Revision�history�(add�new�changes�to�top).*…Date†Author‰ChangesI*…--------‚-------------‚------------------------------------------------G*†7/22/83‚Steve�FranckƒChanged�name�from�TMDATA.EQ,�and�added�stuff�for*žsupport�of�option�L.'*†5/31/83‚Steve�FranckƒInitial�writing.*ŠPAGEO*********************************************************************************‰THE�CHARACTER�QUEUES*O******************************************************************************* *&*‚Equates�describing�character�queues.J*‚The�way�the�queues�are�used,�they�are�empty�when�GET�=�PUT,�and�they�areL*‚full�if�adding�another�char�would�make�GET�=�PUT.‚That�is,�there�is�alwaysK*‚a�'dead�space'�of�1�char�to�keep�the�PUT�ptr�from�catching�up�to�GET.‚TheK*‚pointers�into�the�queues�advance�by�decrementing:‚each�pointer�moves�from0*‚Q_MAX�down�to�0�and�then�starts�over�at�Q_MAX.*5Q_MAX…EQU„2047�Highest�index�value�in�the�queue;�size"*§of�queue�will�be�this�value�+�1. ŠOFFSET�0.GET‡DS…1’Index�of�next�char�to�get�from�queue.<1EMM8U /PUT‡DS…1’Index�where�next�char�goes�into�queue.=QUEUE…DS.BƒQ_MAX+1ŒThe�data�area:�index�ranges�from�0..Q_MAX. #QUEUE_SIZE�EQUƒ*’Size�of�the�queue.ŠPAGEO********************************************************************************(*‰OFFSET�FOR�DATA�SHARED�BY�TM�AND�TMSUP*O******************************************************************************* ŠOFFSET�0 *%*‚Character�queues�for�the�two�ports.*ŠDS…0APORT1_QUEUE�DS.B�QUEUE_SIZE‰Queue�for�char's�coming�in�on�port�1.APORT2_QUEUE�DS.B�QUEUE_SIZE‰Queue�for�char's�coming�in�on�port�2.  *9*‚Area�to�save�data�passed�in�registers�at�task�creation.F*‚These�values�are�in�a�task's�registers�only�if�SCT�created�the�task.*ŠDS…0SCT_REGISTERS: * *-------- D0 - D3"SCT_MTSK‚DS.Lƒ1’Monitor�task�name."SCT_MSES‚DS.Lƒ1’Monitor�session�#.#SCT_VOLƒDS.Lƒ1’Default�volume�name.ŠDS.Wƒ1’Unused.SCT_USNƒDS.Wƒ1’Default�user�#. *-------- D4 - D7SCT_CLGƒDS.Lƒ1’Default�catalog. ŠDS.Lƒ1’*$SCT_COML‚DS.Lƒ1’Command�line�length.(SCT_LUMK‚DS.Lƒ1’Logical�unit�usage�mask. *-------- A0 - A3SCT_TASK‚DS.Lƒ1’Task�name.$SCT_TERM‚DS.Lƒ1’Associated�terminal.ŠDS.Wƒ1’Unused.SCT_LUSN‚DS.Wƒ1’Logon�user�#.SCT_SESS‚DS.Lƒ1’Session. *-------- A4 - A5SCT_DATE‚DS.Lƒ1’System�date.SCT_TIME‚DS.Lƒ1’System�time. **‚Flags.*5READY…DS.Bƒ1’Flag�checked�by�the�supervisor�mode�code(*§to�see�whether�or�not�we�are�ready�for%*§it�to�do�its�stuff.‚Initially�it�is'*§false�(we're�not�ready),�but�gets�set%*§true�after�we�have�linked�ourselves*§to�both�drivers. ;EXORTERM‚DS.Bƒ1’This�flag�is�set�if�the�terminal�from�which(*§we�were�invoked�is�an�EXORterm�155,�or%*§emulates�one.‚Actually,�if�option�L*§is�specified,�this�gets�set. BREAK2„EQU„BREAKS+1‹(True�if�a�break�is�being�sent�to�port�2.)  ***************** ŠDS…0;DATA_SIZE�EQU„*’Amount�of�space�required�for�all�this�data.*************************** Ending of &.CONNECT.EQ ***************************NN+ NNNNN‰PAGE**************************** Beginning of &.CRASH.MC *****************************D* Crash macro will generate a conditional long branch to any addressD*ƒwithin�range.‚It�is�normally�used�to�generate�a�conditional�branchC*ƒto�an�odd�address.�(The�assembler�will�not�allow�such�a�branch�toC*ƒbe�coded�directly).‚This�is�a�good�way�to�conditionally�crash�theB*ƒsystem�(in�supervisor�mode)�or�force�a�task�abort�(in�user�mode)** Example of usage:**‰CRASH.NE�*+1*E* The above would generate a DC.W $66FF - the equivalent of BNE.S *+1*T‰EQU„0F‰EQU„1HIˆEQU„2LSˆEQU„3CCˆEQU„4 HSˆEQU„CCCSˆEQU„5 LOˆEQU„CSNEˆEQU„6EQˆEQU„7VCˆEQU„8VSˆEQU„9 PLˆEQU„$A MIˆEQU„$B GEˆEQU„$C LTˆEQU„$D GTˆEQU„$E LEˆEQU„$F CRASH…MACROŠNOLIST \@A‡SET„\0\@B‡SET„\1-*-2ŠLIST*ŠDC.Lƒ(((6<<4)!(\@A&$0F))<<24)!(\@B&$FFFF)ŠENDM*8* ILLEGAL macro generates a two-byte illegal instruction* ILLEGALƒMACRO ŠDC.Wƒ$4AFCŠENDM************************* Ending of &.CRASH.MC *************************NNN]3‰PAGE*****************************�Beginning�of�&.DISK.EQƒ*****************************EXEC…EQU†0–RMS68K�trap�#. 7PAGESIZE�EQU†$100“The�size�in�bytes�used�to�dynamically%*¦allocate�memory�for�the�CCB�and�for*¦global�memory. 5VDOSRSZ‚EQU†256”The�Versados�operating�system�assumes#*¦that�all�disks�have�256�bytes�per(*¦sector�in�every�sector,�and�this�label'*¦defines�the�sector�size�that�Versados *¦assumes. 1LCDSCTBT�EQU†7–The�disk�driver�requires�(and�also=LCDSCTSZ�EQU†1<<+ LCDSCTBTŠverifies)�that�the�IOSPSM�value�is�a)*¦nonzero�number�that�is�evenly�divisible(*¦by�LCDSCTSZ.‚LCDSCTSZ�is�defined�to�be#*¦the�largest�common�divisor�of�all*¦possible�valid�sector�sizes. *ˆMOVEQWƒMACROF*‚This�macro�is�useful�when�we�want�to�put�an�immediate�value�into�theL* rightmost word of a Dn register and we don't care what value goes into the * other word of the Dn register."*�[