ASMB,Q,R,C
      HED *                          DVA66   91750-18107 REV.2013 
      NAM DVA66 91750-16107 REV.2013 800724 (IV, M) 
      EXT $LIST 
      ENT IA66,CA66 
      SPC 2 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT PACKARD COMPANY.        * 
*  **************************************************************** 
      SPC 2 
*    NAME: DVA66
*  SOURCE: 91750-18107
*   RELOC: 91750-16107
*    PGMR: JOHN LAMPING 
* 
*    WRITTEN BY JOHN LAMPING [FEBRUARY 1979]
* 
*                   21MX PSI DS/1000 DRIVER 
* 
* NOTE: WHENEVER KNOWLEDGE OF THE BIT POSITION OF A FLAG IS USED
*       BUT NO REFERENCE TO THE FLAG WOULD OTHERWISE BE GENERATED,
*       THE LABEL OF THE FLAG IS DOUBLE REFERENCED. ( +FL-FL )
      SPC 2 
**************************************************
*                                                *
*                 SYSTEM SECTION                 *
*                                                *
**************************************************
      SPC 2 
****                                       **** 
*   *** ENTRY PART: HANDLE DRIVER ENTRY ***   * 
****                                       **** 
      SPC 1 
* 
*     DO CONFIGURATION OF DRIVER
* 
IA66  NOP 
      CLB           GET INITIATE FLAG 
      JMP S1A 
CA66  NOP 
      CCB           GET NO INITIATE FLAG
S1A   STB ENTRY     RECORD WHERE WE CAME FROM 
      LDB SCTPT     CONFIGURE CARD I/O
      JSB IOCON       INSTRUCTIONS
      LDA EQT2,I    IS A
      CCB             DEFFERRED ENTRY 
      SSA               PENDING?
      STB EQT15,I   YES, RESTORE TIMEOUT
      LDA EQT13,I   GET EQT EXTENSION ADDRESS 
      CPA XTBEG     ALREADY POINTING THERE? 
      JMP S1A2      YES, BE LAZY
      LDB MXTLN     NO, GET NUMBER OF WORDS 
      STB TEMP1       WE MUST SET 
      LDB XTPTR     GET POINTER TO FIRST
S1A1  STA B,I       CONFIGURE WORD
      INA           ADVANCE 
      INB             POINTERS
      ISZ TEMP1     DONE? 
      JMP S1A1      NO, WORK SOME MORE
S1A2  CLA           CLEAR 
      STA SSERV       DRIVER
      STA ACTIV         STATUS
      STA TGONE           TEMPORARY 
      STA RENTR             VARIABLES 
      STA SCCLF 
      STA SRVOK 
      LDB INTBA     FIND
      INB             WHICH 
      STB TEMP1         DCPC
      LDB EQT1            CHANNEL 
      CPB INTBA,I           WE
      LDA .6                  HAVE
      CPB TEMP1,I               IF
      LDA .7                      ANY 
      LDB EQT12,I                   CHECKING
      CPB INTBA,I                     BOTH
      LDA .6                             EQT'S
      CPB TEMP1,I 
      LDA .7
      STA DCHAN     RECORD IT 
      LDB DCTPT     GET DCPC INSTRUCTIONS POINTER 
      SZA           DO WE HAVE DCPC?
      JSB IOCON     YES, CONFIGURE DCPC INSTRUCTIONS
* 
*     HANDLE FIRST DRIVER ENTRY 
* 
      LDA EQT4,I    HAVE WE BEEN ON THIS EQT BEFORE 
      ALF,SLA         (DRIVER PROCESSES TIMEOUT BIT SET)? 
      JMP S1C       YES 
      LDA EQT12,I   NO, IS THE EQT EXTENSION
      ADA MXTLN       OF THE RIGHT SIZE?
      CCE,SZA,RSS 
      JMP S1B       YES, PROCEED
      LDA .3        NO, DO ERROR
      ISZ CA66        OR CONTIUNE 
      JMP EXIT7         RETURN
S1B   STA FBITS,I   CLEAR ALL FLAGS 
      LDA EQT4,I    TELL SYSTEM THAT
      IOR B30K        WE CAN HANDLE 
      STA EQT4,I        TIMEOUT AND POWER-FAIL
      LDA RINIA     SET 
      STA RCONT,I     PROCESS 
      LDA WINIA         RESTART 
      STA WCONT,I         ADDRESSES 
      LDB EQT1      PUT IN OUR
      ADB .15         LINK TO THE 
      STB EQT12,I       OTHER EQT 
      ADB .3        SET DRIVER
      LDA B,I         PROCESSES TIMEOUT 
      IOR B30K          AND POWERFAIL 
      STA B,I             IN OTHER EQT
      ADB .8        MAKE OTHER
      LDA EQT1        EQT POINT 
      STA B,I           TO US 
      INB           MAKE HIM
      LDA EQT13,I     HAVE OUR
      STA B,I           EXTENSION 
* 
*     DETERMINE TYPE OF ENTRY, HANDLE IT
* 
S1C   LDA ENTRY     ENTRY THROUGH 
      SZA,RSS         IA66? 
      JMP S1C2      YES 
      LDA EQT4,I    NO, DID 
      AND MB4K1       TIMEOUT 
      CPA EQT4,I        OCCUR 
      JMP S1C1      NO
* 
*     HANDLE TIMEOUT
* 
      STA EQT4,I    YES, CLEAR TIMEOUT FLAG 
      LDA FBITS,I   MEDIUM
      ALF,ALF         LENGTH
      RAL,SLA           TIMEOUT?
      ISZ TGONE+MT-MT YES, FLAG IT
      CMA,SSA,SLA   MEDIUM OR SHORT TIMEOUT?
      RAR,SLA       NO, LONG TIMEOUT CLEAR? 
      JMP INIT      YES, HANDLE NORMALLY
      JMP SICK+ST-ST+LT-LT NO, BAD TROUBLES 
MB4K1 ABS -4000B-1
MB36  OCT -36 
* 
*     HANDLE CONTINUE ENTRY 
* 
S1C1  LDA FBITS,I   HAS THE LINE BEEN 
      AND BUSYB       CONNECTED 
      SZA,RSS           OR ARE WE TRYING? 
      JMP EXIT      NO, IGNORE INTERRUPT
SC101 STF SCODE     PUT BACK FLAG 
      JMP CONTN     PROCESS THIS INTERRUPT
S1C2  LDA EQT5,I    WAS INITIATE ENTRY
      SSA             REALLY POWER-FAIL?
      JMP PFAIL     YES, THE CARD WILL INFORM US
      SPC 1 
****                                                 **** 
*   *** COMMAND PART: IDENTIFY AND VERIFY COMMAND ***   * 
****                                                 **** 
      LDA EQT6,I    GET REQUEST 
      AND B7703     ISOLATE FUNCTION/SUBFUNCTION
      CPA .3        CLEAR REQUEST?
      JMP S2B       YES 
      LDB EQT11,I   ALREADY DOING A 
      SZB             COMMAND ON THIS EQT?
      JMP S2A14     YES, RTE IS GIVING US DCPC
      RRR 6         ISOLATE FUNCTION CODE 
      BLF,RBL       IS REQUEST TYPE 
      SSB,SLB,RSS     CONTROL REQUEST?
      JMP S2A1      NO, READ OR WRITE 
      ADA MB36      YES, IS FUNCTION CODE 
      SSA,RSS         UNDER 36B?
      JMP S2A9      NO, INDICATE IF LINK IS UP
      ADA .6        YES, IS IT
      SSA             UNDER 30B?
      JMP S2A6      YES, ILLEGAL
      LDB EQT7,I    GET OPTIONAL PARAMETER
      ARS           IS REQUEST SET DS/NON-DS MODE?
      SZA             OR SET/CLEAR FRONT PANEL WAIT 
      CPB FNMBR     YES, IS SECURITY CODE WRONG?
      CCB,RSS       NO, ALL IS COOL, GET PHONY MESSAGE TYPE 
      JMP S2A6      YES, DUMP THIS DUDE 
S2A13 LDA .2
      JMP S2A4      SET WRITE FLAG
S2A1  AND B77       GET MESSAGE TYPE AND DIRECTION
      LDB A         SAVE IT 
      ARS           GET JUST TYPE 
      CPA B17       READ/WRITE SPECIAL DATA?
      JMP S2A13     YES 
      CPA .3        BREAK FRAME 
      SLB,RSS         DATA TYPE WRITE?
      JMP S2A11     NO
      LDA FNMBR     YES, CHECK FIRST
      CPA EQT9,I      PARAMETER FOR SECURITY CODE 
      CCE,RSS       RIGHT 
      JMP S2A6      WRONG!
      LDA FMISC,I   GET OUR 
      AND LUB         LU TIMES 32 
      ALF,ELA           PLUS 1
      CPA EQT10,I   EQUAL TO SECOND PARAMETER?
      JMP S2A12     YES, PROCEED
      JMP S2A6      NO, NO FOOLING US 
S2A11 SZA           DS 1
      CPA B10         MESSAGE 
      RSS               TYPE? 
      JMP S2A10     NO
      LDA EQT6,I    YES,
      ELA,ALF         CLASS I/O 
      ERA               AND DOUBLE
      SSA,SLA,RSS         BUFFERED? 
      JMP S2A6      NO, ERROR 
      LDA EQT10,I   YES, SECOND BUFFER
      ADA M2          AT LEAST
      SSA               TWO WORDS?
      JMP S2A6      NO, ERROR 
      CCA           YES,
      ADA EQT10,I     POINT TO
      ADA EQT9,I        LAST WORD 
      STA TEMP1     SAVE POINTER
      LDA FMISC,I   GET 
      AND LUB         LU
      XOR TEMP1,I   MERGE INTO
      SLB             LAST WORD OF BUFFER 
      AND B777          UNLESS IT IS A READ 
      XOR TEMP1,I         IN WHICH CASE JUST STORE
      STA TEMP1,I   STUFF IT
      CLA           RESTORE TYPE
S2A10 ADA M5        IS TYPE 
      SSA,RSS         TOO BIG?
      JMP S2A6      YES, ERROR
S2A12 CLA,INA 
      SLB,RSS       IS REQUEST A READ?
      JMP S2A4      YES 
      LDA FBITS+ND-ND,I NO, WRITE,
      ALF           GET NON DS ALLOWED
      IOR FBITS+FW-FW,I IN SIGN BIT 
      RBR,RBR       DS 1 OR DS 2
      CMB,SSB,SLB     MESSAGE TYPE? 
      CMA           YES 
      SSA,RSS       MODES MATCH?
      JMP S2A5      NO, ERROR 
      LDA .2        GET WRITE FLAG
      LDB FBITS+AC-AC,I ARE WE
      BLF,SLB         INITIALIZED?
      JMP S2A4      YES 
      LDA #NOIN     NO, STOP THIS 
      JMP S2A7        IMPOSTOR
S2A4  STA EQT11,I   INDICATE WHO DOES THIS COMMAND
      RAL,RAL       POSITION FLAG 
      IOR FBITS+WP-WP,I SET COMMAND PENDING FLAG
      CPA FBITS,I   REQUEST ALREADY PENDING?
      JMP S2A8      YES, REJECT THIS ONE
      STA FBITS,I   SET PENDING FLAG
S2A14 LDA EQT11,I   INDICATE ONLY COMPLETIONS 
      STA SRVOK       ON THIS EQT ARE ALLOWED 
      JMP INIT      ENTER MAIN CODE 
S2A8  LDA #LBUS     LOCAL BUSY ERROR SAYS 
      JMP S2A7        TOO MUCH TO HANDLE
S2A9  LDA FBITS,I   DETERMINE WHTEHER WE
      AND M4B         ARE READY FOR A DS 1 MESSAGE
      LDB WBUFS,I   HAVE WE GIVEN UP
      CPB M1          ON GETTING A BUFFER?
      CLA           YES, NOT READY
      CPA LCRCB     OTHERWISE READY?
      CLA,RSS       YES, GOOD STATUS
S2A5  LDA #WRMD     WRONG MODE ERROR
      RSS 
S2A6  LDA #ILRQ     GET ILLEGAL REQUEST STATUS
S2A7  CLB           SAY CURRENT 
      STB ACTIV       EQT 
      JSB STAT      SET STATUS
      CCA           SET COMPLETION
      STA SSERV       FLAG
      JMP EXIT      GO RESTORE TIMEOUTS 
.15   DEC 15
B17   EQU .15 
B7703 OCT 7703
B777  OCT 777 
* 
*     HANDLE CLEAR (ABORT) REQUESTS 
* 
S2B   LDA FBITS,I   GET FLAGS WORD
      LDB EQT11,I   SET PROPER
      IOR B+WA-WA     REQUEST ABORTED BIT 
      CMB           REQUEST 
      STB SSERV       COMPLETION
      RBL,RBL       CLEAR PROPER
      AND B+WP-WP     REQUEST PENDING BIT 
      STA FBITS,I   SAVE NEW FLAGS
      JMP INIT      ENTER MAIN CODE 
* 
*     PUT INFORMATION ON COMMAND FOR ACTIVE PROCESS IN TEMP1 : TEMP4
*     NO SKIP RETURN IF REQUEST HAS BEEN ABORTED
*     SKIP RETURN WITH TEMPS VALID IF REQUEST STILL PENDING 
* 
CMDAT NOP 
      LDA ACTIV     HAS 
      AND FBITS+WA-WA,I REQUEST BEEN
      SZA               ABORTED?
      JMP CMDAT,I   YES, NO SKIP RETURN 
      ISZ CMDAT     NO, PREPARE SKIP RETURN 
      LDA ACTIV     MAKE SURE WE HAVE 
      JSB EQTST       THE CORRECT COMMAND 
      LDB EQT8,I    GET LENGTH
      STB TEMP3       OF FIRST BUFFER 
      LDB EQT7,I    GET POINTER 
      STB TEMP2       TO BUFFER 
      LDA EQT6,I    GET REQUEST 
      ALF,ALF       ARE BITS
      RAR,RAR         NINE AND TEN
      SSA,SLA,RSS       SET?
      JMP CMDA1     NO, MUST BE READ OR WRITE 
      ALF           ISOLATE OPTION PART 
      AND .7          OF FUNCTION CODE
      CMA           MAKE NEGATIVE FOR COMMAND TYPE
      LDB EQT9,I    GET OPTIONAL PARAMETER
      JMP CMDA2 
CMDA1 SLA,RSS       ARE WE TO IGNORE FIRST BUFFER?
      JMP CMDA3     NO
      CLB           YES, SET LENGTH 
      STB TEMP3       TO ZERO 
      LDB EQT9,I    SET POINTER 
      STB TEMP2       TO SECOND BUFFER
CMDA3 ALF,RAR       GET BITS 9, 8, AND 7 OF FUNCTION CODE 
      AND .7          WHICH ARE MESSAGE TYPE
      LDB EQT10,I   GET LENGTH OF SECOND BUFFER 
      ADB M2          WITHOUT LU WORD 
      SZA           DS 1 MESSAGE TYPE?
      CLB           NO, IGNORE SECOND BUFFER
CMDA2 STB TEMP4     STORE SECOND LENGTH / OPTIONAL PARAMETER
      STA TEMP1     STORE MESSAGE TYPE / COMMAND
      JMP CMDAT,I   THAT'S ALL FOLKS
      SPC 1 
****                                                            ****
*   *** EXIT PART: LEAVE DRIVER, REQUEST / RELEASE RESOURCES ***   *
****                                                            ****
EXIT  LDA EQT12,I   SEE IF
      INA             RTE IS ABOUT
      LDA A,I           TO ENTER US 
      IOR EQT2,I          WITH A DEFFERRED
      SSA,RSS               ENTRY 
      JMP EXIT1     NO
      LDA FBITS,I   YES, CLEAR ALL
      AND XTNB        TIMEOUTS
      STA FBITS,I 
      CCB           SAY DON'T SET TIMEOUTS
      JMP EXIT2 
EXIT1 LDA FBITS,I   GET TIMEOUT FLAGS 
      CLB 
      RAL,RAL       RECONNECT AFTER 
      SLA,ALF         POWER FAIL? 
      LDB VLONG+RC-RC YES SET A TIMEOUT 
      RAL,RAL       LONG
      SLA             TIMEOUT?
      LDB LONG+LT-LT  YES 
      RAL,SLA       MEDIUM TIMEOUT? 
      LDB MDIUM+MT-MT YES 
      RAL,SLA       SHORT TIMEOUT?
      LDB SHORT+ST-ST YES 
EXIT2 STB TEMP1     SAVE TIMEOUT VALUE
      LDA SSERV     DO WE NEED TO ASK FOR 
      SZA             SYSTEM SERVICE? 
      JMP EXIT8     YES 
      LDA SRVOK     NO, MAKE SURE THE EQT 
      JSB EQTST       IS SET BACK UP IF ENTERED AT I.66 
      CLA           DO CONTINUE RETURN
      JMP EXIT4 
EXIT8 SSA,RSS       DO WE ASK FOR DCPC? 
      JMP EXIT3     YES 
      CMA           NO, SET UP
      JSB EQTST       RIGHT EQT QUEUE 
      LDB EQT5,I    GET STATUS
      LDA EQT6,I    IS REQUEST
      IOR B100        A WRITE 
      CPA EQT6,I        REQUEST?
      ADB .4        YES, SET NOT READ BIT 
      AND B600      IS REQUEST
      SZA             NON-DS? 
      ADB .8        YES, SET NON-DS BIT 
      STB EQT5,I    SET STATUS
      CLB           CLEAR SERVER PROCESS FLAG 
      STB EQT11,I     IN EQT
      LDA .4        GET COMPLETION RETURN CODE
      JMP EXIT5     GO DO COMPLETION RETURN 
EXIT3 CPA .8        RETURN DCPC?
      JMP EXIT9     YES 
      JSB EQTST     GET CORRECT EQT 
      LDA .5        ASK FOR DCPC
      RSS 
EXIT9 LDA .6        RELEASE DCPC
      ISZ CA66      DCPC EXIT 
EXIT4 ISZ CA66      CONTINUE EXIT 
EXIT5 LDB EQT12,I   POINT TO TIMER WORD 
      ADB .14         OF OTHER EQT
      STB TEMP2 
      LDB TEMP1     GET TIMEOUT VALUE 
      CMB,SSB,INB,RSS MAKE NEGATIVE 
      JMP EXIT0     NOT SUPPOSSED TO SET TIMEOUT
      STB TEMP2,I   SET TIMEOUT 
      CLB           SAY NO TIMEOUT ON 
      STB EQT15,I     CURRENT EQT 
EXIT0 LDB EQT5,I    RECORD IF THIS
      RBR,RBR         IS A
      ERB               READ
      LDB RLEN1,I   GET POSSIBLE TRANSMISSION LOG 
      SEZ,RSS       WRITE OR
      SZB,RSS         DS 1 READ?
      LDB EQT8,I    YES, USE REQUEST LENGTH 
EXIT7 ISZ ENTRY     GO OUT THE WAY
      JMP IA66,I      WE CAME IN
      CPA .4        TRANSFORM COMPLETION
      CLA             REQUEST 
      JMP CA66,I
.14   DEC 14
      SPC 1 
* 
*     SET UP EQT SERVED BY PROCESS INDICATED BY A 
* 
EQTST NOP 
      SZA           DO WE WANT THE CURRENT EQT? 
      CPA EQT11,I     OR DO WE HAVE THE RIGHT EQT?
      JMP EQTST,I   YES, NOTHING TO DO
      LDA EQT12,I   SET UP POINTERS 
      LDB M15         TO OTHER EQT
      STB TEMP2 
      LDB EQT1A 
EQTS1 STA B,I 
      INA 
      INB 
      CPB EQ111 
      LDB EQ12A 
      ISZ TEMP2 
      JMP EQTS1 
      JMP EQTST,I   WE ARE DONE 
* 
M15   DEC -15 
EQT1A DEF EQT1
EQ111 DEF EQT11+1 
EQ12A DEF EQT12 
* 
*     CONFIGURE I/O INSTRUCTIONS
* 
IOCON NOP 
      XOR B,I       COMPUTE DIFFERENCE WITH OLD CODE
      SZA,RSS       ARE WE ALREADY CONFIGURED RIGHT?
      JMP IOCON,I   YES, NOTHING TO DO
      STA TEMP1     NO, SAVE DIFFERENCE 
IOCO1 LDA B,I       GET WORD TO CONFIGURE 
      CPA M1        END OF LIST?
      JMP IOCON,I   YES, DONE 
      XOR TEMP1     NO, SET NEW VALUE 
      STA B,I         OF WORD 
      INB           MOVE TO NEXT WORD 
      JMP IOCO1 
* 
*     SET STATUS OF REQUEST ON ACTIVE PROCESS 
* 
STAT  NOP 
      ALF           SET STATUS IN 
      SZA             PROPER
      ADA .2            FORM
      STA IOCON     SAVE IT 
      LDA ACTIV     HAS REQUEST 
      AND FBITS+WA-WA,I BEEN
      SZA               ABORTED?
      JMP STAT,I    YES, DO NOTHING 
      LDA ACTIV     GET RIGHT 
      JSB EQTST       EQT 
      LDA EQT5,I    UPDATE
      AND MB400       STATUS
      IOR IOCON 
      STA EQT5,I
      JMP STAT,I    ALL DONE
      SKP 
**************************************************
*                                                *
*                  READ SECTION                  *
*                                                *
**************************************************
      SPC 2 
****                                      ****
*   *** PART -1: SEVERE ERROR RECOVERY ***   *
****                                      ****
RSER  EQU * 
      LDA FBITS,I   IS A
      AND RPB         READ REQUEST
      SZA,RSS           PENDING?
      JMP RINI      NO
      JSB COMPL     YES, COMPLETE IT
      LDA #SERR     DECLARE A SEVERE
      JSB STAT        ERROR 
      SPC 1 
****                                      ****
*   *** PART 0: INITIALIZE FOR READING ***   *
****                                      ****
RINI  CLA           SAY NO FRAME
      STA RDSIZ,I     PENDING 
      SPC 1 
****                              ****
*   *** PART 1: WAIT FOR FRAME ***   *
****                              ****
R1    LDA M10       SET TIMEOUT 
      STA RPTRY,I     COUNTER 
R1A   LDA FMISC,I   NEED TO TELL
      AND CIB         HIGHER LEVELS ABOUT 
      SZA               CONNECT?
      JMP R2D       YES 
      LDA RDSIZ,I   FRAME 
      SZA             READY?
      JMP R2        YES 
      LDA FBITS,I   NO, CLEAR 
      ERA,CLE,ELA     READ ABORTED BIT
      STA FBITS+RA-RA,I JUST IN CASE
      AND RPNB      READ
      CPA FBITS,I     PENDING?
      JMP R1D       NO
      AND ACB       YES, ARE WE AUTHORIZED
      SZA,RSS         TO CONNECT? 
      JMP R1B       NO, ERROR 
      JSB CMDAT     GET READ'S
      NOP 
      LDA TEMP1       MESSAGE TYPE
      CPA .4        DS 2 TYPE?
      JMP R1D       YES, DON'T TIME HIM 
      LDA TGONE     DID A 
      SZA             TIMEOUT OCCUR?
      ISZ RPTRY,I   YES, TOO MANY?
      JMP R1C       NO
      LDA #TMOT     YES, BOUNCE THIS
      RSS             REQUEST WITH TIMEOUT
R1B   LDA #NOIN     NOT INITIALIZED 
      JSB STAT      INDICATE ERROR
      JSB COMPL     DUMP REQUEST
      JMP R1        TRY AGAIN 
R1C   LDA FBITS,I   REQUEST 
      IOR MTB         TIMEOUT 
      STA FBITS,I 
R1D   JSB SUSP      WAIT
      JMP R1A       SEE WHAT HAPPENED 
M10   DEC -10 
      SPC 1 
****                                            ****
*   *** PART 2: DETERMINE MESSAGE PARAMETERS ***   *
****                                            ****
R2    LDA FMISC,I   IS MESSAGE
      AND TRB         TYPE
      SZA,RSS           DS 1? 
      JMP R2A       YES 
      LDA RDSIZ,I   NO, FIRST BUFFER
      STA RLEN1,I     LENGTH IS FRAME SIZE
      CLA           SECOND BUFFER LENGTH IS ZERO
      JMP R2E 
* 
*     DS MESSAGE, GET TOTAL LENGTHS FROM FIRST TWO WORDS
* 
R2A   JSB LOCK      GRAB BACKPLANE
      LDB RDSIZ,I   IS FRAME
      ADB M3          AT LEAST
      LDA FBITS,I       THREE WORDS LONG
      AND SMB             AND IS START
      SSB,INB,RSS           OF MESSAGE
      SZA,RSS                 BIT SET?
      JMP R2B       NO, THROW THE BUM OUT 
      STB RDSIZ,I   SAY BUFFER TWO WORDS SHORTER
      LDA !R2WD     TELL CARD THAT WE WANT
      JSB OTCM$       TO READ IN TWO WORDS
      JSB WFLG$ 
SC201 LIA SCODE,C   FIRST WORD IS LENGTH
      STA RLEN1,I     OF FIRST BUFFER 
      JSB WFLG$     SECOND WORD 
SC202 LIA SCODE,C     IS LENGTH 
      STA RLEN2,I       OF SECOND BUFFER
      ARS           IS SECOND BUFFER
      SZA             SHORTER THAN 2 WORDS? 
      JMP R2C       NO, GOOD
* 
*     ILLEGAL FRAME, THROW IT AWAY
* 
R2B   LDA !DCRD     TELL CARD 
      JSB OTCM$       TO THROW
      JSB WCOM$         OUT FRAME 
      JSB UNLK$ 
      CLA           NO MORE 
      STA RDSIZ,I     FRAME PENDING 
      JMP R1        TRY AGAIN 
* 
R2C   JSB UNLK$     GIVE BACK BACKPLANE 
      JMP R3
* 
*     SEND CONNECT INDICATION REQUEST TO HIGHER UPS 
* 
R2D   CLA           REQUEST 
      STA RLEN1,I     CONNECT 
R2E   STA RLEN2,I       INDICATION
      SPC 1 
****                                  ****
*   *** PART 3: GET A READ REQUEST ***   *
****                                  ****
R3    CLA           CLEAR OUT 
      STA RPTRY,I     RETRY COUNTER 
* 
*     WAIT FOR A READ REQUEST, MAKE ONE IF NEEDED 
* 
R3A   LDA FBITS+RA-RA,I CLEAR READ ABORTED BIT
      ERA,CLE,ELA     IN CASE IT WAS SET
      STA FBITS,I       FROM BEFORE 
      AND RPB       IS A READ REQUEST 
      SZA             PENDING?
      JMP R3B       YES, DO OUR STUFF 
      LDB RLEN1,I   IS THIS A 
      ADB RLEN2,I     CONNECT 
      SZB,RSS           INDICATION? 
      JMP R3A2      YES, DS 1 MESSAGE TYPE
      LDA FBITS,I 
      AND RCB       IS THIS A 
      SZA,RSS         3000 CALL?
      JMP R3B2      YES, WAIT FOR QUEZ
      LDB FMISC,I   GET AND 
      RRL 6+TR-TR     SAVE
      AND .7            MESSAGE 
R3A2  STA TEMP4           TYPE
      CPA .2        FRONT PANEL 
      RSS             MESSAGE TYPE? 
      JMP R3A1      NO
      LDA FBITS+FW-FW,I YES, IN FRONT PANEL 
      SSA             WAIT MODE?
      JMP R3B2      YES, WAIT 
      LDA FMISC,I   NO, IS THIS THE 
      AND FMB         FIRST FRONT PANEL 
      SZA               MESSAGE SEEN? 
      JMP R3B4      NO, DISCARD IT
R3A1  LDB RLEN1,I   GET LENGTHS 
      LDA RLEN2,I     OF BUFFERS
      STA TEMP3     SAVE SECOND LENGTH
      SZA           IS SECOND LENGTH
      LDA RPTRY,I     NON-ZERO AND IS 
      ADA RRLIM         RETRY COUNTER 
      SSA,RSS             BIG?
      CLB           YES, DUMP FIRST BUFFER
      STB TEMP2     SAVE FIRST LENGTH 
      LDA FMISC,I   SAVE
      AND LUB         LU
      IOR BIT15         INDICATING SECOND EQT 
      STA TEMP1 
      JSB $LIST     SCHEDULE
R3A3  OCT 701         PROGRAM 
      DEF R3A5
R3A4  DEF QUEUE     NAME = QUEUE
      DEF FNMBR     SECURITY CODE SO QUEUE IS HAPPY 
      DEF TEMP1     LU
      DEF TEMP2     BUFFER
      DEF TEMP3       LENGTHS 
      DEF TEMP4     MESSAGE TYPE
R3A5  SZA           SCHEDULED OK? 
      JMP R3A6      NO
      STB R3A4      YES, MODIFY CALL SO NEXT TIME 
      CLA,INA         WE WILL USE 
      STA R3A3          ID SEGMENT POINTER
R3A6  LDA FBITS,I   ASK FOR 
      IOR STB         QUICK 
      STA FBITS,I       TIMEOUT 
      JSB SUSP      WAIT
      JMP R3A       SEE IF A GOOD THING HAPPENED
* 
*     HANDLE NO SAM REQUESTS
* 
R3B   CLA           SET 
      JSB STAT        GOOD STATUS 
      JSB CMDAT     FIND OUT ABOUT REQUEST
      JMP R1        REQUEST ABORTED 
      LDA TEMP3     IS IT A 
      IOR TEMP4       NO SAM
      SZA               REQUEST?
      JMP R3C       NO
      JSB COMPL     MAYBE, DO A COMPLETION
      JSB CMDAT     IS THIS 
      JMP R1        REQUEST ABORTED 
      LDA TEMP1       A CONNECT 
      SZA,RSS           INDICATION? 
      JMP R3B3      YES 
      LDA EQT9,I    DOES THIS SAY 
      CPA .1          BAD LENGTHS?
      JMP R3B4      YES, TOSS OUT FRAME 
      CLB           CLEAR RETRY COUNTER 
      CPA .2          IF DS/1000
      STB RPTRY,I       IS ILL
      JSB LOCK      WAIT FOR BACKPLANE
      JSB UNLK$       TO QUIET DOWN 
      LDA FBITS,I   ASK FOR 
      IOR MTB         MEDIUM
      STA FBITS,I       TIMEOUT 
R3B2  JSB SUSP      WAIT FOR SOMETHING
      LDA TGONE     INCREMENT 
      ADA RPTRY,I     RETRY COUNTER 
      STA RPTRY,I       IF TIMEOUT OCCURRED 
      JMP R3A       TRY AGAIN 
R3B3  LDA FMISC,I   CLEAR "MUST 
      AND CINB        TELL ABOUT
      STA FMISC,I       CONNECT" BIT
      LDA RLEN1,I   WERE WE 
      IOR RLEN2,I     LOOKING FOR A 
      SZA               CONNECT REQUEST?
      JMP R3A       NO, WAIT FOR READ 
      JMP R1        DONE
R3B4  JSB LOCK      GRAB BACKPLANE
      JMP R2B         GO TOSS FRAME 
* 
*     MAKE SURE COMMAND IS LEGAL
* 
R3C   LDA FMISC,I   DO READ 
      RRR 10+TR-TR    MESSAGE TYPE
      XOR TEMP1         AND FRAME 
      AND .7              TYPE
      SZA                   AGREE?
      JMP R3C1      NO, ERROR 
      LDB TEMP1     DS 1
      SZB             MESSAGE TYPE? 
      JMP R3C3      NO, TAKE ANYTHING 
      LDA TEMP4     SECOND
      CPA RLEN2,I     LENGTHS 
      RSS               EQUAL?
      JMP R3C1      NO, COMPLAIN
      LDA TEMP3     FIRST LENGTHS 
      CPA RLEN1,I     EQUAL?
      JMP R4        YES, GOOD 
      SZA,RSS       NO, IS REQUEST FOR ZERO WORDS?
      JMP R3C2      YES, SORT OF GOOD 
R3C1  JSB COMPL     CLAIM 
      LDA #WRMD       ILLEGAL 
      JSB STAT          REQUEST 
      JMP R3A       TRY AGAIN 
R3C2  LDA #RBUS     SET STATUS TO 
      JSB STAT        LOCAL BUSY
      JMP R4
R3C3  LDA FMISC,I   INDICATE
      IOR FMB         FRONT PANEL MESSAGE 
      CPB .2            IF THAT IS
      STA FMISC,I         WHAT WE HAVE
      SPC 1 
****                         **** 
*   *** PART 4: READ DATA ***   * 
****                         **** 
* 
*     SET UP RLEN1, RLEN2, RPTRY
* 
R4    LDA TEMP2     SET BUFFER POINTER
      IOR BIT15       WITH DCPC INPUT 
      STA RPTRY,I       DIRECTION BIT 
      LDA TEMP3     SET COMBINED
      ADA TEMP4       LENGTHS TO READ 
      ADA BIT15         AND START OF MESSAGE BIT
      STA RLEN2,I         ALLOWED FLAG
      LDB TEMP1     GET MESSAGE TYPE
      LDA RLEN1,I   GET THE NUMBER OF WORDS 
      CMA,INA         WE MUST SKIP
      ADA TEMP3         FOR A DS 1 MESSAGE
      SZB,RSS       DS 1 MESSAGE? 
      STA RLEN1,I   YES, RECORD SKIP COUNT
* 
*     WAIT FOR A FRAME TO ARRIVE, HANDLE EXCEPTIONS 
* 
R4B   LDA RLEN2,I   DO WE NEED
      SZA,RSS         TO READ MORE WORDS? 
      JMP R4F       NO, WE ARE DONE 
R4B1  JSB CMDAT     REQUEST STILL PENDING?
      JMP R1        NO, ABORTED 
      LDB RDSIZ,I   IS A
      SZB             FRAME READY?
      JMP R4C       YES 
      LDA FBITS,I   GET STATUS
      AND LCB       IS THE LINK 
      SZA,RSS         LOGICALLY CONNECTED?
      JMP R4B2      NO, GO STOP THE READ
      JSB SUSP      WAIT FOR SOME SIGNIFICANT EVENT 
      JMP R4B1      TRY AGAIN 
R4B2  JSB COMPL     REQUEST COMPLETION
      LDA #LFAL     LINE FAILURE
      JSB STAT        IS THE STATUS 
      JMP R1        TRY AGAIN 
* 
*     MAKE SURE WE HAVE A GOOD LOOKING FRAME
* 
R4C   LDA FMISC,I   DO INPUT
      RRR 10+TR-TR    MESSAGE TYPE
      XOR TEMP1         AND COMMAND 
      AND .7              TYPE
      SZA                   AGREE?
      JMP R4C1      NO, ERROR 
      LDA RLEN2,I   GET START OF MESSAGE
      RAL,CLE,ERA     ALLOWED INDICATOR 
      STA RLEN2,I   CLEAR IT
      LDA FBITS,I   IS START
      AND SMB         OF MESSAGE
      CME               BIT SET AND 
      SEZ,SZA             NOT ALLOWED?
      JMP R4C1      YES, THAT'S BAD 
      LDB RLEN1,I 
      SSB,RSS 
      CLB           IS THE
      ADB RDSIZ,I     FRAME SIZE
      CMB,INB           BIGGER THAN 
      ADB RLEN2,I         THE NUMBER OF 
      SSB,RSS               WORDS WE WANT?
      JMP R4C2      NO, GOOD
R4C1  JSB COMPL     YES, COMPLETE THIS REQUEST
      LDA #MEAB     BLAME THINGS ON 
      JSB STAT        THE OTHER SIDE
      JMP R1        GO GET BACK IN SYNC 
R4C2  JSB LOCK      WE WILL NEED THE BACKPLANE
* 
*     DO SOMETHING WITH THIS FRAME
* 
R4D   LDA RLEN1,I   DO WE 
      SSA,RSS         NEED
      CLA               TO
      ADA RDSIZ,I         SKIP THE
      LDB A                 ENTIRE
      CMA,SSA,INA,SZA         FRAME?
      JMP R4D1      NO
      STB RLEN1,I   YES, UPDATE COUNT 
      CLA           NO FRAME
      STA RDSIZ,I     READY NOW 
      LDA !DCRD     TELL CARD 
      JSB OTCM$       TO DUMP 
      JSB WCOM$         FRAME 
      JMP R4E1
R4D1  STB RDSIZ,I   UPDATE FRAME SIZE 
      JSB RDCP$     GET DCPC
R4D2  LDA RLEN1,I   DO WE NEED
      CMA,SSA,INA     TO SKIP SOME WORDS? 
      JMP R4D3      NO
      ADA MB400     YES, SKIP 
      SSA,RSS         AT MOST 
      CCA               255 
      ADA B400            WORDS 
      LDB A         UPDATE
      ADB RLEN1,I     SKIP
      STB RLEN1,I       COUNT 
      IOR !ADBP     TELL
      JSB OTCM$       CARD
      JSB WCOM$     WAIT FOR CARD TO FINISH 
      JMP R4D2      SEE IF WE MUST SKIP MORE
R4D3  LDA !INTR     TELL CARD THAT
      ADA RDSIZ,I     WE WANT TO
      JSB OTCM$         READ IN THE FRAME 
      LDA RPTRY,I   SET DCPC STARTING ADDRESS 
      STA TEMP2       WITH INPUT BIT SET
      ADA RDSIZ,I   UPDATE
      STA RPTRY,I     BUFFER POINTER
      LDA RDSIZ,I   SET DCPC
      CMA,INA         TRANSFER
      STA TEMP3         LENGTH
      ADA RLEN2,I   SAY HOW MANY WORDS
      STA RLEN2,I     MUST STILL BE READ
      CLA           SAY NO
      STA RDSIZ,I     FRAME READY 
      JSB DCPC$     START UP DCPC 
* 
*     WAIT FOR TRANSFER TO FINISH, HANDLE EXCEPTIONS
* 
R4E   JSB WTRN$     WAIT FOR TERMINATION
R4E1  JSB UNLK$     UNLOCK BACKPLANE
      LDA FMISC,I   IS
      AND TRB         MESSAGE TYPE
      SZA,RSS           DS 1? 
      JMP R4B       YES, GET NEXT FRAME 
* 
*     ENTIRE MESSAGE HAS BEEN READ, COMPLETE
* 
R4F   JSB COMPL     DONE AT LAST
      JMP R1        BACK FOR MORE WORK
      SKP 
**************************************************
*                                                *
*                 WRITE SECTION                  *
*                                                *
**************************************************
      SPC 2 
****                                                   **** 
*   *** PART -1: HANDLE POWER-FAIL AND SEVERE ERROR ***   * 
****                                                   **** 
WSER  EQU *         SEVERE ERROR RECOVERY 
      LDA FBITS,I   REQUEST ON
      AND WPB         WRITE 
      SZA,RSS           PROCESS?
      JMP W1C       NO
      JSB COMPL     YES, DUMP IT
      LDA #SERR       WITH NASTY
      JSB STAT          ERROR 
W1C   JSB SUSP      WAIT FOR A NEW COMMAND
      LDA FBITS,I   DID A CONFIGURATION 
      AND WPB         COMMAND 
      SZA,RSS           ARRIVE? 
      JMP W1C       NO, WAIT SOME MORE
      LDA FBITS,I   CLEAR SICK CARD 
      AND SERCN       AND AUTOMATIC RECONNECT 
      STA FBITS,I       FLAGS 
      JSB LOCK      RESERVE BACKPLANE 
      LDA !RSET     RESET 
      JSB OTCM$       CARD
      JSB WFLG$     WAIT FOR HIM TO RECOVER 
      RSS 
WPFL  EQU *         POWER FAIL RECOVERY 
      JSB LOCK      KEEP THINGS FOR OURSELVES 
      LDA !PWUP     TELL CARD THAT
      JSB OTCM$       WE UNDERSTAND 
      JSB WCOM$         HIS TROUBLES
      JSB UNLK$     RELEASE DCPC IF WE HAVE SOME
      SPC 1 
****                                      ****
*   *** PART 0: HANDLE STARTUP OF CARD ***   *
****                                      ****
WINI  JSB LOCK      LOCK THINGS UP
      CLA           SAY NO BUFFERS
      STA WBUFS,I     READY 
      LDA FMISC,I   SET WRITE TYPE
      IOR TWB         UNDEFINED 
      AND CINB          AND NO CONNECT
      STA FMISC,I         INDICATION NEEDED 
      LDA FBITS,I   AUTOMATIC 
      AND RCB         RECONNECTION? 
      SZA,RSS 
      JMP W1D       NO, DON'T BOTHER
      LDA !CNCT     TELL CARD 
      JSB OTCM$       TO CONNECT
      JSB WCOM$         ONCE MORE 
      LDA FBITS,I   SET 
      IOR ACB         ASKED TO CONNECT
      STA FBITS,I       FLAG
W1D   LDA !TIME     TELL
      JSB OTCM$       CARD
      JSB WFLG$         THAT TIMEOUT IS COMMING 
      LDA EQT14,I   GET OUR TIMEOUT VALUE 
      CMA,INA         AS A POSITIVE QUANTITY
SC301 OTA SCODE,C   TELL CARD 
      JSB WCOM$       ABOUT IT
      JSB UNLK$     GIVE BACK BACKPLANE 
****                                        ****
*   *** PART 1: WAIT FOR SOMETHING TO DO ***   *
****                                        ****
W1    LDA FBITS,I   IS A REQUEST PENDING
      AND WPB         FOR THE WRITE PROCESS 
      SZA               TO EXECUTE? 
      JMP W1A       YES, GO DO OUR THING
      JSB SUSP      NO, WAIT FOR SOMETHING TO HAPPEN
      JMP W1
W1A   CLA           SET GOOD
      JSB STAT        STATUS
      LDA FBITS,I   CLEAR WRITE ABORT BIT 
      AND WANB        IN CASE IT WAS
      STA FBITS,I       SET FROM BEFORE 
      JSB LOCK      WE ARE GOING TO NEED THE BACKPLANE
      JSB CMDAT     GET COMMAND 
      JMP W3D       ABORTED 
      LDB TEMP1       TYPE
      CCE,SSB       SPECIAL COMMAND?
      JMP W3        YES, GO TO PART 3 
      CPB .3        SEND BREAK MESSAGE? 
      JMP W3C       YES, DO THAT
      SPC 1 
****                               **** 
*   *** PART 2: SEND WRITE DATA ***   * 
****                               **** 
* 
*     SET MESSAGE TYPE
* 
W2    LDA FMISC,I   GET CARD'S
      ALF,RAR         CURRENT 
      AND .7+TW-TW      OUTPUT TYPE 
      CPA TEMP1     MATCH?
      JMP W2A       YES, WE CAN SAVE SOME WORK
      LDA FMISC,I   NO, SET TW
      ALF,RAR         TO NEW
      RRR 3+TW-TW       MESSAGE TYPE
      STA FMISC,I 
      LDA TEMP1     GET BACK MESSAGE TYPE 
      ADA !NMT      MAKE COMMAND TO TELL CARD 
      JSB OTCM$     TELL IT 
      JSB WCOM$     WAIT FOR IT TO FINISH 
      JSB CMDAT     RESTORE COMMAND INFORMATION 
      JMP W3D       COMMAND ABORTED 
* 
*     GET MESSAGE PARAMETERS
* 
W2A   LDA TEMP2     GET POINTER TO START OF BUFFERS 
      LDB TEMP1     SET SIGN BIT
      CCE,SZB,RSS     IF MESSAGE TYPE 
      RAL,ERA           IS DS 
      STA WPTR,I    SAVE POINTER
      LDA TEMP3     GET LENGTH OF FIRST BUFFER
      ADA TEMP4       ADD LENGTH OF SECOND BUFFER 
      STA WLEN,I    SAVE NUMBER OF WORDS TO WRITE 
* 
*     TRANSFER EACH FRAME 
* 
W2B   LDA WLEN,I    MORE DATA TO
      CCE,SZA,RSS     WRITE OUT?
      JMP W3D       NO, ALL DONE
* 
*     WAIT FOR BUFFER TO BE READY OR ERROR CONDITION
*     THE BACKPLANE IS LOCKED IFF E IS SET
* 
W2C   LDA FBITS,I   WRITE REQUEST ABORTED 
      AND WALCB       OR LINE LOGICALLY 
      CPA LCB           DISCONNECTED? 
      JMP W2C0      NO, SO FAR SO GOOD
      SEZ           GIVE BACK BACKPLANE 
      JSB UNLK$       IF WE HAVE IT 
      LDA #LFAL     LINE FAILURE STATUS 
      JMP W2C5      REPORT
W2C0  LDA WBUFS,I   HAVE WE ASKED 
      SSA             FOR A OUTPUT BUFFER?
      JMP W2C2      YES, WAIT SOME MORE 
      SEZ,RSS       NO, GRAB BACKPLANE
      JSB LOCK        IF WE DON'T HAVE IT 
      LDA WBUFS,I   SEE HOW MANY BUFFERS WE HAVE
      SZA           ARE THERE ANY?
      JMP W2C1      YES, FILL ONE UP
      CLB           NO, COMPUTE 
      LDA WLEN,I      HOW MANY BUFFERS
      DIV WFSIZ,I       WE WILL NEED
      AND B77 
      ADA !OTBF     ASK 
      JSB OTCM$       FOR 
      JSB WCOM$         BUFFERS 
W2C1  ADA M1        GET HOW MANY
      STA WBUFS,I     MINUS ONE 
      CCE,SSA,RSS   DID WE GET ANY? 
      JMP W2D       YES, FILL ONE UP
      LDA M60       SET TIMEOUT 
      STA WBUFS,I     LIMIT 
W2C2  SEZ           GIVE BACK BACKPLANE 
      JSB UNLK$       IF WE HAVE IT 
      LDA WBUFS,I   IS TIME 
      INA,SZA,RSS     UP? 
      JMP W2C3      YES, ERROR
      LDB TGONE     NO, DID TIMEOUT 
      SZB             OCCUR?
      STA WBUFS,I   YES, COUNT IT 
      LDA FBITS,I   ASK FOR 
      IOR MTB         MEDIUM
      STA FBITS,I       TIMEOUT 
      JSB SUSP      WAIT FOR SOMETHING
      CLE           SAY WE DON'T OWN THE BACKPLANE
      JMP W2C       SEE WHAT WE GOT 
W2C3  LDA #RBUS     REMOTE BUSY 
W2C5  JSB STAT        STATUS
      JSB COMPL 
      JMP W1        WAIT FOR A NEW REQUEST
M60   DEC -60 
* 
*     SEND OUTPUT TRANSFER COMMAND
* 
W2D   JSB RDCP$     GET DCPC
      LDA WLEN,I    GET LENGTH
      CPA WFSIZ,I   LAST FRAME CANNOT BE FULL SIZE
      ADA M1          SO WE CAN DETECT DUPLICATE FRAMES 
      LDB WPTR,I    ADD TWO WORDS TO LENGTH 
      SSB             IF LENGTH WORDS MUST BE 
      ADA .2            WRITTEN OUT 
      LDB WFSIZ,I   IS LENGTH 
      CMB             GREATER THAN
      ADB A             MAXIMUM FRAME 
      SSB,RSS             SIZE? 
      LDA WFSIZ,I   YES, USE MAX FRAME SIZE 
      ADA !OTTR     MAKE OUTPUT TRANSFER COMMAND
      LDB WPTR,I    IS THIS FRAME 
      SSB             START OF DS 1 MESSAGE?
      ADA !SMB      YES, SET START OF MESSAGE BIT 
      JSB OTCM$     SEND COMMAND
* 
*     START UP DCPC 
* 
W2E   LDA WPTR,I    DO WE HAVE TO SEND
      SSA,RSS         LENGTH WORDS? 
      JMP W2E1      NO
      ELA,CLE,ERA   YES, BUT WE WON'T 
      STA WPTR,I      ANY MORE
      JSB WFLG$ 
      JSB CMDAT     SEND LENGTH 
      JSB WTRN$     COMMAND ABORTED 
      LDA TEMP3       OF FIRST
SC303 OTA SCODE,C       BUFFER
      JSB WFLG$ 
      JSB CMDAT     SEND LENGTH 
      JSB WTRN$     COMMAND ABORTED 
      LDA TEMP4       OF SECOND 
SC304 OTA SCODE,C       BUFFER
      LDA WFSIZ,I   MAX DCPC TRANSFER NOW 
      ADA M2          IS TWO LESS THAN
      JMP W2E2          MAX FRAME SIZE
W2E1  LDA WFSIZ,I   GET MAX DCPC TRANSFER 
      CPA WLEN,I    LAST FRAME CANNOT BE FULL SIZE
      ADA M1          SO WE CAN DETECT DUPLICATE FRAMES 
W2E2  LDB WLEN,I    BIGGER
      CMB             THAN
      ADB A             WORDS TO
      SSB,RSS             WRITE?
      LDA WLEN,I    YES, USE WORDS TO WRITE 
      LDB WPTR,I    SET DCPC
      STB TEMP2       STARTING ADDRESS
      ADB A         ADJUST BUFFER 
      STB WPTR,I      POINTER 
      CMA,INA       SET DCPC
      STA TEMP3       WORD COUNT
      ADA WLEN,I    UPDATE NUMBER OF WORDS
      STA WLEN,I      THAT MUST BE TRANSFERRED
      JSB DCPC$     START DCPC
* 
*     WAIT FOR DCPC TO FINISH OR ABORT, HANDLE IT 
* 
W2F   JSB WTRN$     WAIT FOR DCPC TO FINISH 
      JMP W2B       DO NEXT FRAME 
      SPC 1 
****                                        ****
*   *** PART 3: PROCESS CONTROL COMMANDS ***   *
****                                        ****
W3    ERB,RBR       GET LAST THREE BITS OF FUNCTION CODE
      CMB,CME,SZB   WAS COMMAND 30 OR 31? 
      JMP W3B       NO
* 
*     PROCESS INITIALIZE LINK 
* 
      SEZ           REALLY INITIALIZE LINK? 
      JMP W3A       NO, MUST BE CLEAR LINK
      LDA #ILRQ     GET POSSIBLE ERROR
      LDB EQT12,I   IS THIS     
      CMB,INB         THE 
      ADB EQT12         FIRST 
      SSB,RSS             EQT?
      JMP W3F       NO, REJECT
      LDA TEMP2     GET 
      AND LUB         THE LU
      LDB ACB       RECONNECT ALLOWED 
      CPA TEMP2       ONLY FOR TYPE 0 
      ADB RCB           CONNECT 
      XOR FMISC,I   PUT LU
      AND LUB         WHERE WE
      XOR FMISC,I       CAN GET IT
      STA FMISC,I         LATER 
      LDA FBITS,I   CLEAR FUNNY FLAGS 
      AND M3NB        ADD ASKED TO CONNECT, 
      IOR B             AND RECONNECT IF NECESSARY
      STA FBITS,I   SAVE FLAGS
      LDA TEMP2     GET 
      ALF,ALF         CONNECT 
      AND B377          TYPE
      IOR !CNCT     TELL
      JSB OTCM$       CARD
      JSB WCOM$         TO CONNECT
      LDB A         SAVE RESPONSE 
      LDA #NOIN     GET POSSIBLE ERROR
      SZB           CONNECT OK? 
      JMP W3F       NO, COMPLAIN
      LDA !MIFL     ASK CARD
      JSB OTCM$       WHAT THE LARGEST
      JSB WCOM$         BUFFER SIZE IS
      STA WFSIZ,I   SAVE ANSWER 
      JSB UNLK$     RELEASE BACKPLANE 
      JSB COMPL     COMPLETE
      JSB LOCK      GET BACK BACKPLANE
      JMP W1D       UPDATE CARD'S TIMEOUT 
M3NB  ABS -RC-ND-100000B+FW-FW-1
* 
*     PROCESS CLEAR LINK
* 
W3A   LDA FBITS,I   SAY 
      AND XCNB        NOT ASKED TO CONNECT
      STA FBITS,I       NOT CONNECTED, AND NO RECONNECT 
      LDA !DSCN     TELL CARD 
      JSB OTCM$       TO HANG UP
      JSB WCOM$     HEAR ME, OH CARD
      JMP W3D       COMPLETE
* 
*     PROCESS SET/CLEAR MODE COMMANDS 
* 
W3B   SSB,SLB         MODE COMMAND? 
      JMP W3E       NO, MUST BE READ/WRITE FUNNY STUFF
      LDA NDB       GET APPROPRIATE BIT 
      SLB             FOR THIS
      LDA FWB           COMMAND 
      XOR FBITS,I   GET THE REST OF THE BITS
      SEZ,RSS       CLEAR BIT?
      AND FBITS,I   YES 
      SEZ           SET BIT?
      IOR FBITS,I   YES 
      STA FBITS,I   SAVE NEW BITS 
      JSB CIBCK     SEE IF WE MUST FLAG LINE UP FOR DS
      JMP W3D 
* 
*     PROCESS SEND BREAK
* 
W3C   LDA !BRK      GET STOMP ON NEIGHBOR COMMAND 
      JSB OTCM$     TELL CARD 
      JSB WCOM$       TO SEND BREAK 
      SZA,RSS       DID THINGS GO WELL? 
      JMP W3D       YES 
      LDA #LFAL     NO, TELL
W3F   JSB STAT        PROBLEMS
W3D   JSB UNLK$ 
      JSB COMPL     REQUEST COMPLETION
      JMP W1        BACK TO MAIN LOOP 
* 
*     READ OR WRITE CONFIGURATION DATA
* 
W3E   LDA TEMP4     GET 
      AND B377        DATA TYPE 
      SZA,RSS       DEFAULT IS
      INA             ONE 
      IOR !SIDT     TELL CARD 
      JSB OTCM$       ABOUT TYPE
      JSB WCOM$         OF DATA 
      JSB RDCP$     GET DCPC
      JSB CMDAT     GET BACK INFO 
      JMP W3G       COMMAND ABORTED, BACK OFF 
      LDA TEMP3     GET BUFFER LENGTH 
      LDB TEMP1     INPUT 
      CMB,CCE,SLB     OR OUTPUT 
      RAL,ERA           TRANSFER
      JSB OTCM$     TELL CARD 
      LDA TEMP3     SET LENGTH
      CMA,INA         NEGATIVE
      STA TEMP3         FOR DCPC
      LDA TEMP2     SET ADDRESS 
      CCE,SLB,RSS     WITH
      RAL,ERA           DIRECTION 
      STA TEMP2           BIT 
      JSB DCPC$     START DCPC
      JSB WTRN$     WAIT FOR COMPLETION 
      JMP W3D       COMPLETE
W3G   LDA !SIDT     SET CARD BACK 
      JSB OTCM$       TO ORDINARY 
      JSB WCOM$         DATA TRANSFER 
      JMP W3D 
      SKP 
**************************************************
*                                                *
*                BACKPLANE SECTION               *
*                                                *
**************************************************
      SPC 2 
* 
*     REQUEST COMPLETION RETURN 
* 
COMPL NOP 
      LDA ACTIV+WA-WA 
      AND FBITS,I   IS THE ABORT BIT OF THE 
      SZA,RSS         ACTIVE PROCESS SET? 
      JMP COMP1     NO
      XOR FBITS,I   YES, CLEAR IT AND RETURN, 
      STA FBITS,I     A COMPLETION RETURN HAS ALREADY 
      JMP COMPL,I       BEEN REQUESTED
COMP1 LDA SRVOK     DO WE WANT WHAT 
      CPA ACTIV       WE CAN'T HAVE 
      CLA               OR HAS A
      IOR SSERV           SYSTEM SERVICE
      AND .7                EXCEPT DCPC RETURN
      SZA,RSS                 ALREADY BEEN REQUESTED? 
      JMP COMP2     NO
      ISZ RENTR     YES, REQUEST DRIVER REENTRY 
      LDB COMPL     SUSPEND THIS
      JMP SUSPB       PROCESS 
COMP2 LDA ACTIV     SET UP THE
      CMA             SERVICE 
      STA SSERV         WORD
      RAL,RAL       CLEAR THE PROPER
      AND FBITS+WP-WP,I REQUEST PENDING 
      STA FBITS,I         BIT 
      JMP COMPL,I 
      SPC 1 
* 
*     LOCK THE BACKPLANE
* 
LOCK  NOP 
      LDB LOCK      GET RETURN ADDRESS
      JSB BSYCK     CAN WE HAVE THE BACKPLANE?
      JMP SUSPB     NO, GO WAIT FOR IT
      LDA ACTIV+WL-WL 
      ALF           SET THE BACKPLANE 
      IOR FBITS,I     LOCKED TO OUR 
      STA FBITS,I       PROCESS 
      JMP LOCK,I    TELL OUR GOOD NEWS
      SPC 1 
* 
*     UNLOCK THE BACKPLANE
* 
UNLK$ NOP 
      LDA ACTIV     CLEAR THE 
      ALF             CORRECT 
      XOR FBITS,I       BACKPLANE LOCK
      STA FBITS,I         FLAG
      CCA           MAKE SURE THE NEXT PROCESS
      STA ADV         IS ACTIVATED WHEN WE SUSPEND
      LDB DCHAN     DO WE HAVE A
      SZB,RSS         DCPC CHANNEL? 
      JMP UNLK$,I   NO, DONE
      ADB M6        YES, CLEAR
      ADB INTBA       THE 
      CLA               ALLOCATION
      STA B,I             WORD
      STA DCHAN     SAY DCPC NOT AVAILABLE
      LDA SSERV     REMEMBER
      IOR SRVOK 
      LDB .8          TO TELL 
      SZA,RSS           SYSTEM
      STB SSERV           ABOUT CHANNEL 
      JMP UNLK$,I 
M6    DEC -6
      SPC 1 
* 
*     REQUEST DCPC
* 
RDCP$ NOP 
      LDA ACTIV     HAS THE 
      AND FBITS+WA-WA,I CURRENT REQUEST 
      SZA               BEEN ABORTED? 
      JMP RDCP$,I   YES, PRETEND WE GOT DCPC
      LDA DCHAN     DO WE HAVE
      SZA             DCPC? 
      JMP RDCP$,I   YES, NO WORK
      LDA ACTIV     HAVE WE 
      JSB EQTST       ALREADY 
      LDA EQT5,I        ASKED FOR 
      RAL                 A DCPC
      SSA,SLA               CHANNEL?
      JMP RDCP1               YES, WAIT 
      LDB ACTIV     NO, GET WHO WE WANT 
      LDA SSERV     SYSTEM SERVICE
      IOR SRVOK       NOT ALLOWED 
      SZA,RSS           OR ALREADY NEEDED?
      STB SSERV     NO, ASK FOR DCPC
      SZA 
      ISZ RENTR     YES, ASK TO TRY AGAIN 
RDCP1 ISZ SCCLF     TELL SUSP TO CLEAR FLAG ON CARD 
SC404 STF SCODE     BUT SET IT IN CASE
      LDB RDCP$     SUSPEND THIS
      JMP SUSPB       PROCESS 
      SPC 1 
* 
*     WAIT FOR DCPC TRANSFER TO FINISH OR BE ABORTED
*     IF ABORTED, STOP DCPC, TELL CARD, AND RETURN TO R1 OR W1
* 
WTRN$ NOP 
      LDA FBITS+WA-WA,I 
      AND ACTIV     HAS THIS TRANSFER 
      SZA             BEEN ABORTED? 
      JMP WTRN1     YES, TUBE IT
      LDB WTRN$     NO, GET SUSPEND ADDRESS 
DC409 SFS DCPCH     DCPC FINISH?
      JMP SUSPB     NO, WAIT
SC413 SFS SCODE     YES, CARD FINISH? 
      JMP SUSPB     NO, WAIT
      JMP WTRN$,I   YES 
WTRN1 EQU * 
      LDA !ABDM     GET ABORT DMA COMMAND 
SC407 OTA SCODE,C   SEND IT 
WTRN2 LDA MTB       ASK FOR 
      IOR FBITS,I     HALF SECOND 
      STA FBITS,I       TIMEOUT 
      JSB WAIT      HAS THE CARD SET THE FLAG?
      RSS           NO
      JMP WTRN3     YES 
      JSB SUSP      WAIT FOR CARD'S DMA TO DO SOMETHING 
      LDA TGONE     TIMEOUT?
      SZA,RSS       IF YES, THEN DMA MUST HAVE FINISHED 
      JMP WTRN2     NO, KEEP WAITING
WTRN3 EQU * 
SC408 STC SCODE,C   INDICATE COMMAND TO CARD
      JSB WFLG$     WAIT FOR HIM TO FINISH
      JSB UNLK$     RELEASE BACKPLANE 
      LDA ACTIV     RETURN TO 
      CPA .2          THE CORRECT 
      JMP W1            PROCESS 
      CLB                 FIXING RDSIZ
      STB RDSIZ,I           IF FROM 
      JMP R1                  READ PROCESS
      SPC 1 
* 
*     OUTPUT A COMMAND TO THE CARD
* 
OTCM$ NOP 
SC401 OTA SCODE     SEND THE COMMAND
SC402 STC SCODE,C   TELL THE CARD IT IS A COMMAND 
      JMP OTCM$,I 
      SPC 1 
* 
*     SET UP AND START DCPC 
* 
DCPC$ NOP 
      LDA ACTIV     HAS THE 
      AND FBITS+WA-WA,I CURRENT REQUEST 
      SZA               BEEN ABORTED? 
      JMP DCPC$,I   YES, PRETEND WE ARE DONE
      LDA DCPCC     SET 
DC401 OTA DCPCH       CONTROL WORD
DC402 CLC DCPCL     SET 
      LDA TEMP2       MEMORY
DC403 OTA DCPCL         ADDRESS 
DC404 STC DCPCL     SET 
      LDA TEMP3       WORD
DC405 OTA DCPCL         COUNT 
DC406 STC DCPCH,C   START DCPC
DC407 CLC DCPCH     PREVENT INTERRUPTS
      JMP DCPC$,I 
      SPC 1 
* 
*     WAIT FOR FLAG FROM CARD 
* 
WFLG$ NOP 
      LDB WFLG$     GET RETURN ADDRESS
      JSB WAIT      FLAG SET? 
      JMP SUSPB     NO, SUSPEND 
      JMP WFLG$,I   YES, RETURN 
      SPC 1 
* 
*     WAIT FOR RESPONSE TO COMMAND, MAKE SURE RESPONSE
*     IS GOOD, RETURN RESPONSE IN A 
* 
WCOM$ NOP 
      LDB WCOM$     GET RETURN ADDRESS
      JSB WAIT      FLAG SET? 
      JMP SUSPB     NO, SUSPEND 
SC405 LIA SCODE     YES, GET ANSWER 
      SSA           FAILURE BIT SET?
      JMP SICK      YES, MUST BE POWERFAIL OR WORSE 
      JMP WCOM$,I   NO, MUST BE OK
      SPC 1 
* 
*     WAIT A SHORT TIME FOR FLAG
*     SKIP RETURN IF FLAG IS SET, B IS UNCHANGED
* 
WAIT  NOP 
      LDA M20       GET SHORT TIME COUNTER
WAIT1 INA,SZA,RSS   TIME UP?
      JMP WAIT,I    YES, THAT'S ALL 
SC403 SFS SCODE     NO, FLAG SET? 
      JMP WAIT1     NO, WAIT SOME MORE
      ISZ WAIT      YES, SAY FLAG SET 
      JMP WAIT,I    RETURN
      SPC 1 
* 
*     CHECK FOR BACKPLANE NO LONGER BUSY
*     SKIP RETURN IF SO, B IS UNCHANGED 
* 
BSYCK NOP 
      LDA FBITS,I   GET LOCK
      AND WLRLB       FLAGS 
      SZA,RSS       ANY LOCK? 
      JMP BSYC2     NO, SAY SO
      CPA WLRLB     YES, LOCKED TO BACKPLANE? 
BSYC1 JSB WAIT      YES, HAS CARD RESPONDED?
      JMP BSYCK,I   NO, STILL LOCKED UP 
SC409 CLF SCODE     ALLOW ANOTHER INTERRUPT 
SC410 LIA SCODE     GET CARD'S RESPONSE 
      SSA           POWER FAIL? 
      JMP SICK      YES, GET HIM BACK ON HIS FEET 
      SZA           AN ACKNOWLEDGEMENT? 
      JMP BSYC1     NO, GIVE HIM ANOTHER CHANCE 
      LDA FBITS,I   YES, CLEAR
      XOR WLRLB       LOCK
      STA FBITS,I       FLAGS 
BSYC2 ISZ BSYCK     SAY NOT BUSY
      JMP BSYCK,I   RETURN TO POINT OF ORIGIN 
      SPC 1 
* 
*     SUSPEND ACTIVE PROCESS, ACTIVATE OTHER ONE OR SET UP
*     BACKPLANE FOR DRIVER EXIT AND EXIT
* 
SUSP  NOP 
      LDB SUSP      RETURN ADDRESS IS 
      RSS             PROCESS CONTINUATION ADDRESS
SUSPB ADB M1        ALTERNATE ENTRY, B IS ADDRESS + 1 
      LDA ACTIV     SAVE
      CPA .1          RESTART 
      STB RCONT,I       ADDRESS 
      CPA .2              IN CORRECT
      STB WCONT,I           WORD
      ISZ ADV       SHOULD WE ACTIVATE OTHER PROCESS? 
      JMP SUSP1     NO, PREPARE BACKPLANE TO EXIT 
      XOR .3        YES, ADJUST 
SUSP3 STA ACTIV       ACTIVE PROCESS INDICATOR
      ADA RCNTA     JUMP TO 
      LDB A,I         NEW 
      JMP B,I           PROCESS 
SUSP1 LDA SCCLF     NEED TO CLEAR FLAG
      CMA,SLA,RSS     ON CARD?
      LDA RENTR     MAYBE, DO WE WANT 
      SZA,RSS         RE-ENTRY
SC411 CLF SCODE     NO, CLEAR FLAG
      LDA FBITS,I   IS
      AND WLRLB       BACKPLANE 
      SZA               LOCKED? 
      JMP SUSP4     YES, KEEP OUR HANDS OFF 
      LDA !UNST     GET UNSOLICITED STATUS INPUT COMMAND
      LDB RENTR     DRIVER REENTRY
      SZB,RSS         REQUESTED?
      JMP SUSP2     NO
      LDA FBITS,I   YES, SET BACKPLANE
      IOR WLRLB       BUSY FLAGS
      IOR LTB           AND REQUEST 
      STA FBITS,I         TIMEOUT 
      LDA !NOOP     GET NO-OP COMMAND 
SUSP2 JSB OTCM$     SEND OUR PARTING COMMAND
      JMP EXIT      RETURN TO THE SYSTEM
SUSP4 LDA FBITS,I   BACKPLANE LOCKED, 
      IOR LTB         REQUEST 
      LDB SCCLF         LONG TIMEOUT
      SZB,RSS             UNLESS WAITING
      STA FBITS,I           FOR DCPC
      JMP EXIT
      SPC 1 
* 
*     PROCESS DRIVER ENTRY FROM CARD INTERRUPT
* 
CONTN JSB BSYCK     BACKPLANE LOCKED? 
      JMP GO        YES, NONE OF OUR BUSINESS 
SC406 LIA SCODE     GET CARD'S RESPONSE 
      SSA           FAILURE?
      JMP SICK      YES, MUST BE POWERFAIL OR WORSE 
      LDB A         SAVE INPUT
      RBL,RBL       SCRAMBLE SOME BITS
      SLB,RSS       UNSOLICITED INPUT?
      JMP GO        NO, MUST HAVE BEEN A NO-OP
      RBL,SLB,RBL   YES, INCOMMING FRAGMENT?
      JMP CONT1     YES 
      RBL,SLB       NO, NEW MESSAGE TYPE? 
      JMP CONT2     YES 
      RBL,SLB,BLF   NO, OUTPUT BUFFER READY?
      JMP CONT3     YES 
      LDA FBITS,I   NO, STATUS CHANGE, GET FLAGS
      RBL,RBL 
      RBL,SLB       DISCONNECT, TRYING TO RECONNECT?
      AND LCNB      YES, RECORD IT
      RBL,SLB       COMPLETE DISCONNECT?
      AND XCNB      YES, RECORD IT
      RBL,SLB       CONNECT?
      IOR LCB       YES, RECORD CONNECT 
      STA FBITS,I   SAVE NEW STATUS 
      JSB CIBCK     SEE IF WE MUST FLAG CONNECT 
      JMP CONT4 
CONT1 AND B7777     SET 
      STA RDSIZ,I     FRAGMENT SIZE 
      LDA FBITS,I   RECORD
      IOR SMB         START OF
      SLB,RSS           MESSAGE 
      XOR SMB             BIT 
      STA FBITS,I           VALUE 
      JMP CONT4 
CONT2 RRL 10+TR-TR  MOVE TYPE TO PROPER FIELD 
      XOR FMISC,I   PUT IT IN 
      AND TRB         THE REST OF 
      XOR FMISC,I       THE WORD
      STA FMISC,I   SAVE NEW TYPE 
      JMP CONT4 
CONT3 AND B77       GET NUMBER OF BUFFERS 
      LDB WBUFS,I   GET OLD NUMBER OF BUFFERS 
      STA WBUFS,I   SAVE NEW NUMBER OF BUFFERS
      LDA FBITS,I   GET FLAGS IN CASE 
      CPB M1        HAD WE GIVEN UP ON GETTING A BUFFER?
      JSB CIBCK     YES, TELL RE-ROUTING THE GOOD NEWS
CONT4 JMP GO        START THINGS UP 
      SPC 1 
* 
*     SET FLAG TO SEND INDICATION OF LINE UP TO HIGHER UPS
*     IF THE LINE IS NOW READY FOR DS/1000 TRAFFIC
*     ON ENTRY A MUST EQUAL FBITS,I 
* 
CIBCK NOP 
      AND M4B       ISOLATE RC, LC, FW, ND
      LDB A         SAVE THEM 
      LDA WBUFS,I   HAVE WE GIVEN UP
      CPA M1          ON GETTING A BUFFER?
      CLB           YES, THEN WE ARE NOT READY
      LDA FMISC,I   GET THE INFO
      AND FMNB      SAY NO FRONT PANEL MESSAGE
      CPB LCRCB     READY FOR DS/1000 TRAFFIC?
      IOR CIB       YES, SET FLAG 
      STA FMISC,I   PUT IT ALL BACK 
      JMP CIBCK,I   FIN 
      SPC 1 
* 
*     PROCESS DRIVER ENTRY NOT FROM CARD INTERRUPT
* 
PFAIL LDA .3        SAY NO SYSTEM SERVICE 
      STA SRVOK       AVAILABLE 
INIT  LDA FBITS,I 
      AND WLRLB     BACKPLANE 
      SZA             LOCKED? 
      JMP GO        YES, NONE OF OUR BUSINESS 
      LDA !UNDS     NO, GET DISABLE UNSOLICITED INPUT 
      JSB OTCM$     SEND CANCEL COMMAND 
      LDA FBITS,I   INDICATE
      IOR WLRLB       BACKPLANE 
      STA FBITS,I       BUSY
      SPC 1 
* 
*     START UP WRITE PROCESS
* 
GO    LDA FBITS,I   CLEAR 
      AND XTNB        TIMEOUT 
      STA FBITS,I       REQUEST BITS
      CCA           TELL SUSP TO ACTIVATE READ PROCESS
      STA ADV         WHEN WRITE PROCESS SUSPENDS 
      LDA .2        START UP WITH 
      JMP SUSP3       WRITE (RIGHT) PROCESS 
      SPC 1 
* 
*     HANDLE UNEXPECTED TIMEOUT 
* 
SICK  EQU * 
SC412 LIA SCODE     GET WHAT THE CARD HAS TO SAY
      LDB WPFLA     GET POWERFAIL RECOVERY ADDRESS
      CPA !STGD     RECOVERY FROM POWER-FAIL? 
      CLA,RSS       YES 
      CPA !STG2     OTHER GOOD STATUS?
      CLA,RSS       YES 
      LDA SEB       NO, THE CARD IS SICK
      SZA           IF,SICK, MUST USE 
      LDB WSERA       SEVERE ERROR RECOVERY ADDRESS 
      IOR FBITS,I   BESTOW THE BUSTED BOARD BIT IF SICK 
      AND PWUPB       AND SAVE SE, WP, RP, AND RC 
      STA FBITS,I   SAVE NEW BITS 
      STB WCONT,I     RECOVERY
      LDA RSERA         RESTART 
      STA RCONT,I         ADDRESSES 
      LDA DCHAN     STOP DCPC 
      SZA             IF WE HAVE
DC410 STF DCPCH         A CHANNEL 
      JMP GO
      SKP 
**************************************************
*                                                *
*          TEMPORARIES AND CONSTANTS             *
*                                                *
**************************************************
      SPC 2 
* 
*     EQT EXTENSION POINTERS
* 
XTBEG EQU * 
RPTRY DEF *-XTBEG   RETRY COUNTER / => NEXT WORD TO READ
RLEN1 DEF *-XTBEG   BUFFER LENGTH / - WORDS TO SKIP 
RLEN2 DEF *-XTBEG   BUFFER LENGTH / WORDS TO READ 
RDSIZ DEF *-XTBEG   LENGTH OF FRAME READY ON CARD 
WPTR  DEF *-XTBEG   => NEXT WORD TO WRITE 
WLEN  DEF *-XTBEG   LENGTH OF WRITE BUFFERS 
WFSIZ DEF *-XTBEG   MAXIMUM PSI FRAME SIZE
WBUFS DEF *-XTBEG   NUMBER OF ALLOCATED OUTPUT BUFFERS
*                                     - NUMBER OF TIMEOUTS LEFT IF CARD 
*                                     HAS BEEN ASKED TO ALLOCATE BUFFERS
RCONT DEF *-XTBEG   READ PROCESS CONTINUATION ADDRESS 
WCONT DEF *-XTBEG   WRITE PROCESS CONTINUATION ADDRESS
*                                   THE ABOVE TWO WORDS MUST BE IN ORDER
FBITS DEF *-XTBEG   FLAG BITS 
FMISC DEF *-XTBEG   MISCELLANEOUS INFORMATION 
MXTLN ABS XTBEG-* 
XTPTR DEF XTBEG 
      SPC 1 
* 
*     TEMPORARY VARIABLES 
* 
SSERV BSS 1         SYSTEM SERVICE REQUEST
*                                     -3 = COMPLETE WRITE PROCESS REQUEST 
*                                     -2 = COMPLETE READ PROCESS REQUEST
*                                     -1 = COMPLETE CURRENT REQUEST 
*                                      0 = NO SYSTEM SERVICE
*                                      1 = REQUEST DCPC FOR READ PROCESS
*                                      2 = REQUEST DCPC FOR WRITE PROCESS 
*                                      8 = RELEASE DCPC 
SRVOK BSS 1         PROCESS ALLOWED TO DO COMPLETION RETURN 
*                                     0 IF ANY SYSTEM SERVICE OK
ACTIV BSS 1         WHICH PROCESS IS ACTIVE 
*                                     1=READ, 2=WRITE 
ADV   BSS 1         -1 SAYS ACTIVATE OTHER PROCESS
ENTRY BSS 1         DRIVER ENTERED AT CA66 IF -1, IA66 IF 0 
TGONE BSS 1         ONE IFF MEDIUM TIMEOUT EXPIRED
SCCLF BSS 1         ONE SAYS DO CLF TO CARD ON EXIT 
DCHAN BSS 1         DCPC CHANNEL ASSIGNED TO DRIVER, IF ANY 
RENTR BSS 1         NON-ZERO SAYS DRIVER REENTRY REQUESTED
TEMP1 BSS 1         FOUR WORD TEMPORARY AREA FOR ACTIVE 
TEMP2 BSS 1           PROCESS, USED FOR DCPC CONFIGURATION
TEMP3 BSS 1             AMONG OTHER THINGS
TEMP4 BSS 1 
      SPC 1 
* 
*     DRIVER CONFIGURATION VARIABLES
* 
SCCON ABS SCODE     SELECT CODE FOR WHICH DRIVER IS CONFIGURED
DCCON ABS DCPCH     DCPC CHANNEL FOR WHICH DRIVER IS CONFIGURED 
      SPC 1 
* 
*     SYSTEM BASE PAGE EQUIVALENCES 
* 
INTBA EQU 1654B 
EQT1  EQU 1660B 
EQT2  EQU EQT1+1
EQT3  EQU EQT2+1
EQT4  EQU EQT3+1
EQT5  EQU EQT4+1
EQT6  EQU EQT5+1
EQT7  EQU EQT6+1
EQT8  EQU EQT7+1
EQT9  EQU EQT8+1
EQT10 EQU EQT9+1
EQT11 EQU EQT10+1 
EQT12 EQU 1771B 
EQT13 EQU EQT12+1 
EQT14 EQU EQT13+1 
EQT15 EQU EQT14+1 
      SPC 1 
* 
*     FBITS BIT EQUIVALENCES
* 
FW    EQU 000000B   WAIT FOR READ FOR FRONT PANEL MESSAGES
*                                     SHOULD BE 100000B 
RC    EQU 40000B    RECONNECTION AFTER POWER-FAIL WANTED
SE    EQU 20000B    SEVERE ERROR OCCURRED ON CARD 
AC    EQU 10000B    CARD HAS BEEN ASKED TO CONNECT
ND    EQU 4000B     LINK IS IN NON-DS MODE
SM    EQU 2000B     START OF DS 1 MESSAGE 
LC    EQU 1000B     LINE IS LOGICALLY CONNECTED 
LT    EQU 400B      LONG TIMEOUT RUNNING
MT    EQU 200B      MEDIUM TIMEOUT RUNNING
ST    EQU 100B      SHORT TIMEOUT RUNNING 
WL    EQU 40B       BACKPLANE LOCKED TO WRITE PROCESS 
RL    EQU 20B       BACKPLANE LOCKED TO READ PROCESS
*                                   BOTH SET SAY BACKPLANE BUSY 
WP    EQU 10B       WRITE REQUEST PENDING 
RP    EQU 4B        READ REQUEST PENDING
WA    EQU 2B        REQUEST ON WRITE PROCESS ABORTED
RA    EQU 1B        REQUEST ON READ PROCESS ABORTED 
      SPC 1 
* 
*     FMISC BIT EQUIVALENCES
* 
TW    EQU 60000B    CARD OUTPUT MESSAGE TYPE
*                                     SHOULD BE 160000B 
TR    EQU 16000B    CARD INPUT MESSAGE TYPE 
FM    EQU 1000B     FRONT PANEL MESSAGE SEEN
CI    EQU 400B      MUST SEND CONNECT INDICATION
LU    EQU 377B      LOGICAL UNIT NUMBER OF CARD 
      SPC 1 
* 
*     OTHER EQUIVALENCES
* 
A     EQU 0 
B     EQU 1 
SCODE EQU 0 
DCPCL EQU 2 
DCPCH EQU 6 
      SPC 1 
* 
*     DECIMAL AND OCTAL CONSTANTS 
* 
.0    DEC 0 
.1    DEC 1 
.2    DEC 2 
.3    DEC 3 
.4    DEC 4 
.5    DEC 5 
.6    DEF 6 
.7    DEC 7 
.8    DEC 8 
B10   EQU .8
.9    DEC 9 
B11   EQU .9
.10   DEC 10
B12   EQU .10 
B13   OCT 13
.50   DEC 50
B77   OCT 77
B100  OCT 100 
B377  OCT 377 
B400  OCT 400 
B600  OCT 600 
B1000 OCT 1000
B4000 OCT 4000
B7777 OCT 7777
B10K  OCT 10000 
B30K  OCT 30000 
B40K  OCT 40000 
BIT15 OCT 100000
MB1K1 ABS -1000B-1
MB400 OCT -400
M20   DEC -20 
M5    DEC -5
M3    DEC -3
M2    DEC -2
M1    DEC -1
      SPC 1 
* 
*     I/O CHANNEL RECONFIGURATION TABLE 
* 
SCTPT DEF *+1,I 
      DEF SCCON 
      DEF SC101 
      DEF SC201 
      DEF SC202 
      DEF SC301 
      DEF SC303 
      DEF SC304 
      DEF SC401 
      DEF SC402 
      DEF SC403 
      DEF SC404 
      DEF SC405 
      DEF SC406 
      DEF SC407 
      DEF SC408 
      DEF SC409 
      DEF SC410 
      DEF SC411 
      DEF SC412 
      DEF SC413 
      DEF M1
      SPC 1 
* 
*     DCPC CHANNEL RECONFIGURATION TABLE
* 
DCTPT DEF *+1,I 
      DEF DCCON 
      DEF DC401 
      DEF DC402 
      DEF DC403 
      DEF DC404 
      DEF DC405 
      DEF DC406 
      DEF DC407 
      DEF DC409 
      DEF DC410 
      DEF M1
      SPC 1 
* 
*     ERROR CODES 
* 
#LFAL EQU .1
#TMOT EQU .2
#LBUS EQU .3
#MEAB EQU .4
#NOIN EQU B10 
#WRMD EQU B11 
#ILRQ EQU B12 
#RBUS EQU .5
#SERR EQU B13 
      SPC 1 
* 
*     CARD COMMANDS 
* 
DCPCC EQU SCCON     DCPC CONTROL WORD 
* 
!NOOP EQU B40K      NO OPERATION (CANCELS UNSOLICITED INPUT)
!UNST OCT 50000     ENABLE UNSOLICITED STATUS INPUT 
!UNDS OCT 45401     ABORT UNCOLICITED STATUS INPUT
!ABDM OCT 45402     ABORT DMA TRANSFER
!OTBF OCT 43001     ALLOCATE OUTPUT BUFFERS 
!NMT  OCT 40400     NEW MESSAGE TYPE
!OTTR EQU BIT15     OUTPUT DATA TRANSFER
!SMB  EQU B10K      START OF MESSAGE BIT FOR !OTTR
!INTR EQU .0        INPUT DATA TRANSFER 
!RSET OCT 57400     RESET 
!MIFL OCT 42400     WHAT IS MAXIMUM I FIELD?
!R2WD OCT 45002     READ 2 WORDS FROM BUFFER
!TIME OCT 140401    SET CARD TIMEOUT
!CNCT OCT 41400     CONNECT 
!DSCN OCT 41000     DISCONNECT
!DCRD OCT 46000     DISCARD INPUT FRAME 
!ADBP OCT 52400     ADVANCE BUFFER POINTER
!PWUP OCT 77400     POWER UP ACKNOWLEDGE
!BRK  OCT 50400     SEND BREAK FRAME
!SIDT OCT 44000     SET INTERNAL DATA TYPE
!STGD OCT 135336    GOOD POWER UP STATUS
!STG2 OCT 177164    OTHER GOOD POWER UP STATUS
      SPC 1 
* 
*     PARAMATERS AND POINTERS 
* 
SHORT EQU .10       COUNTER FOR SHORT TIME
MDIUM EQU .50       MEDIUM TIMEOUT
LONG  DEC 1500      15 SECOND TIMEOUT 
VLONG DEC 3000      30 SECOND TIMEOUT 
RRLIM DEC -20       READ RETRY LIMIT
FNMBR DEC 29150     SECURITY CODE FOR QUEUE 
RINIA DEF RINI
WINIA DEF WINI
RSERA DEF RSER
WSERA DEF WSER
WPFLA DEF WPFL
RCNTA DEF RCONT-1,I 
QUEUE ASC 3,QUEUE   PROGRAM THAT MAKES READ REQUESTS
      SPC 1 
* 
*     BIT MASKS 
* 
TRB   ABS TR
FMB   EQU B1000+FM-FM 
CIB   EQU B400+CI-CI
LUB   EQU B377+LU-LU
FWB   EQU BIT15+FW-FW 
RCB   ABS RC
SEB   ABS SE
ACB   EQU B10K+AC-AC
NDB   EQU B4000+ND-ND 
SMB   ABS SM
LCB   EQU B1000+LC-LC 
LTB   ABS LT
MTB   ABS MT
STB   EQU B100+ST-ST
WPB   EQU .8+WP-WP
RPB   EQU .4+RP-RP
WALCB ABS WA+LC 
LCRCB ABS LC+RC 
M4B   ABS LC+RC+ND+100000B+FW-FW
BUSYB ABS AC+WP+RP+WL+RL
TWB   ABS 160000B+TW-TW 
FMNB  EQU MB1K1+FM-FM 
CINB  ABS -CI-1 
PWUPB ABS SE+RC+WP+RP 
WLRLB ABS WL+RL 
SERCN ABS -SE-RC-1
XTNB  ABS -ST-MT-LT-1 
XCNB  ABS -AC-RC-LC-1 
LCNB  EQU MB1K1+LC-LC 
RPNB  EQU M5+RP-RP
WANB  EQU M3+WA-WA
      SPC 3 
      BSS 0         FIND HOW MUCH SPACE WE TAKE 
      END 
                                                                        