ASMB,R,L,C
      HED *                          ID.66   91750-18126 REV.2013 
      NAM ID.66 91750-16126 REV.2013 800724 (L) 
      EXT $IF2,$IF5,$IF7,$IFTX,$DV1,$DV4,$DV6,$DV13 
      EXT $DV15,$DV16,$DV17,$DV18,$DV19,$DV20 
      EXT $DIOC,$XQSB,$DMPR 
      ENT ID.66 
      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: ID.66
*  SOURCE: 91750-18126
*   RELOC: 91750-16126
*    PGMR: JOHN LAMPING 
* 
*    WRITTEN BY JOHN LAMPING [APRIL 1979] 
* 
*                   L-SERIES 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 
**************************************************
*                                                *
*          TEMPORARIES AND CONSTANTS             *
*                                                *
**************************************************
      SPC 2 
* 
*     IFT 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 
TRIPL DEF *-XTBEG   DMA TRIPLE AREA (SIX WORDS) 
MXTPL ABS XTBEG-* 
MXTLN ABS XTBEG-TRIPL-6 
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
RENTR BSS 1         NON-ZERO SAYS DRIVER REENTRY REQUESTED
FNMBR DEC 29150     SECURITY CODE (TEMP1 MUST BE NEXT)
TEMP1 BSS 1         SIX WORD TEMPORARY AREA FOR ACTIVE
TEMP2 BSS 1           PROCESS, USED FOR SCHEDULING QUEUE
TEMP3 BSS 1             AMONG OTHER THINGS
TEMP4 BSS 1 
TEMP5 BSS 1 
TEMP6 BSS 1 
      SPC 1 
* 
*     FBITS BIT EQUIVALENCES
* 
FW    EQU 000000B   WAIT FOR READ FOR FRONT PANEL MESSAGES
*                                     SHOULD BE 10000B
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 
CDATA EQU 30B 
CDMA0 EQU 20B 
CDMA1 EQU CDMA0+1 
CDMA2 EQU CDMA0+2 
CDMA3 EQU CDMA0+3 
CFPFG EQU 24B       SET TO -1 IF CARD USED BY FRONT PANEL 
      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    DEC 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
.15   DEC 15
B17   EQU .15 
.50   DEC 50
B77   OCT 77
B100  OCT 100 
B200  OCT 200 
B377  OCT 377 
B400  OCT 400 
B600  OCT 600 
B777  OCT 777 
B1000 OCT 1000
B2000 OCT 2000
B7703 OCT 7703
B7777 OCT 7777
B10K  OCT 10000 
B40K  OCT 40000 
BIT15 OCT 100000
MB1K1 ABS -1000B-1
MB400 OCT -400
M60   DEC -60 
MB36  OCT -36 
M20   DEC -20 
M10   DEC -10 
M5    DEC -5
M3    DEC -3
M2    DEC -2
M1    DEC -1
      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 
* 
!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 43000     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 
RRLIM DEC -20       READ RETRY LIMIT
RINIA DEF RINI
WINIA DEF WINI
RSERA DEF RSER
WSERA DEF WSER      SEVERE ERROR RECOVERY ADDRESS 
WPFLA DEF WPFL      POWER FAIL RECOVERY ADDRESS 
WFPRA DEF WFPR      FRONT PANEL RECOVERY ADDRESS
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   ABS AC
NDB   ABS 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
M3NB  ABS -RC-ND-10000B+FW-FW-1 
WANB  EQU M3+WA-WA
      SKP 
**************************************************
*                                                *
*                 SYSTEM SECTION                 *
*                                                *
**************************************************
      SPC 2 
****                                       **** 
*   *** ENTRY PART: HANDLE DRIVER ENTRY ***   * 
****                                       **** 
      SPC 1 
* 
*     DO CONFIGURATION OF DRIVER
* 
ID.66 NOP 
      AND .7        GET JUST GOOD STUFF 
      STA ENTRY     REMEMBER WHY WE ARE HERE
      LDA $IFTX     GET IFT EXTENSION ADDRESS 
      CPA XTBEG     ALREADY POINTING THERE? 
      JMP S1A2      YES, BE LAZY
      LDB MXTPL     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 SRVOK 
* 
*     HANDLE FIRST DRIVER ENTRY 
* 
      LDA $IF7,I    HAVE WE BEEN ON THIS
      ALF,RAL         IFT BEFORE
      SSA,RSS           (FIRST ENTRY FLAG CLEAR)? 
      JMP S1C       YES 
      LDA $IF7,I
      AND B377      IS IFT EXTENSION
      ADA MXTLN       OF THE
      CCE,SZA,RSS       RIGHT SIZE? 
      JMP S1B       YES, PROCEED
      LDA .50       NO, SAY ERROR SO SOMEBODY 
      STA $DV16,I     WILL GET THE IDEA 
      CLA           DO COMPLETION 
      JMP ID.66,I     RETURN
S1B   STA RDSIZ,I   CLEAR CRITICAL
      STA WBUFS,I     IFT EXTENSION WORDS 
      STA FBITS,I   CLEAR ALL FLAGS 
      LDA $IF7,I    CLEAR 
      XOR B2000       FIRST ENTRY 
      STA $IF7,I        FLAG
      LDA RINIA     SET 
      STA RCONT,I     PROCESS 
      LDA WINIA         RESTART 
      STA WCONT,I         ADDRESSES 
* 
*     DETERMINE TYPE OF ENTRY, HANDLE IT
* 
S1C   LDA ENTRY     INITIATE
      SLA,RAR         OR TIMEOUT ENTRY? 
      JMP S1C0      YES 
      SLA,RAR       NO, CONTINUE? 
      JMP S1C1      YES 
      SLA           NO, POWER FAIL
      JMP PFAIL     YES, HANDLE THAT
* 
*     HANDLE ABORT REQUESTS 
* 
      LDA $DV20,I   FIND WHICH
      ALF,ALF         PROCESS WAS 
      AND .3            SERVING THIS
      LDB A               DVT 
      LDA FBITS,I   SET HIS 
      IOR B+WA-WA     ABORT BIT 
      CMB           REQUEST 
      STB SSERV       COMPLETION
      RBL,RBL       CLEAR PROPER
      AND B+WP-WP     PENDING BIT 
      STA FBITS,I   SAVE NEW FLAGS
      JMP INIT      ENTER MAIN CODE 
* 
*     HANDLE TIMEOUT
* 
S1C0  SLA,RSS       TIMEOUT?
      JMP S1C2      NO, INITIATE ENTRY
      LDA FBITS,I   MEDIUM
      ALF,ALF         LENGTH
      RAL,SLA           TIMEOUT?
      ISZ TGONE+MT-MT YES, FLAG IT
      CMA,SSA,SLA   MEDIUM OR SHORT TIMEOUT?
      JMP SICK+ST-ST NO, BAD TROUBLES 
      JMP INIT      YES, HANDLE NORMALLY
* 
*     HANDLE CONTINUE ENTRY 
* 
S1C1  SFC CDMA2     DMA PARITY ERROR? 
      JMP $DMPR     YES, REPORT 
      LDA FBITS,I   HAS THE LINE BEEN 
      AND BUSYB       INITIALIZED 
      SZA               OR ARE WE TRYING? 
      JMP CONTN     YES, PROCESS THIS INTERRUPT 
      CLF CDATA     NO, TURN OFF FLAG 
      JMP EXIT      IGNORE INTERRUPT
      SPC 1 
****                                                 **** 
*   *** COMMAND PART: IDENTIFY AND VERIFY COMMAND ***   * 
****                                                 **** 
S1C2  LDA $DV15,I   GET REQUEST 
      AND B7703     ISOLATE FUNCTION/SUBFUNCTION
      CLB 
      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 $DV16,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 $DV18,I     PARAMETER FOR SECURITY CODE 
      CCE,RSS       RIGHT 
      JMP S2A6      WRONG!
      LDA FMISC,I   GET OUT 
      AND LUB         LU TIMES 32 
      ALF,ELA           PLUS 1
      CPA $DV19,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 $DV15,I   YES,
      ELA,ALF         CLASS I/O 
      ERA               AND DOUBLE
      SSA,SLA,RSS         BUFFERED? 
      JMP S2A6      NO, ERROR 
      LDA $DV19,I   YES, SECOND BUFFER
      ADA M2          AT LEAST
      SSA               TWO WORDS?
      JMP S2A6      NO, ERROR 
      CCA           YES,
      ADA $DV19,I     POINT TO
      ADA $DV18,I       LAST WORD 
      STA TEMP1     SAVE POINTER
      LDA FMISC,I   GET 
      AND LUB         LU
      XOR TEMP1,I   GET REST OF 
      SLB             LAST WORD 
      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 SRVOK     INDICATE COMPLETION LIMITATION
      ALF,ALF       INDICATE
      IOR $DV20,I     WHO WILL DO 
      STA $DV20,I       THIS COMMAND
      LDA SRVOK     SET COMMAND 
      RAL,RAL         PENDING 
      IOR FBITS+WP-WP,I FLAG
      CPA FBITS,I   REQUEST ALREADY PENDING?
      JMP S2A8      YES, REJECT THIS ONE
      STA FBITS,I   SET PENDING FLAG
      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       DVT 
      JSB STAT      SET STATUS
      CCA           SET COMPLETION
      STA SSERV       FLAG
      JMP EXIT      GO RESTORE TIMEOUTS 
* 
*     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 DVTST       THE CORRECT COMMAND 
      LDA $DV15,I   GET REQUEST 
      LDB $DV17,I   GET LENGTH
      STB TEMP3       OF FIRST BUFFER 
      LDB $DV16,I   GET POINTER 
      STB TEMP2       TO BUFFER 
      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 $DV18,I   GET OPTIONAL PARAMTER 
      JMP CMDA2 
CMDA1 SLA,RSS       ARE WE TO IGNORE FIRST BUFFER?
      JMP CMDA3     NO
      CLB           YES, SET LENGTH 
      STB TEMP3       TO ZERO 
      LDB $DV18,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 $DV19,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 FBITS,I   GET TIMEOUT FLAGS 
      CLB 
      ALF,ALF       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 
      CMB,INB       MAKE TIMEOUT NEGATIVE 
      STB TEMP1     SAVE TIMEOUT VALUE
      LDA SSERV     DO WE NEED TO ASK FOR 
      SZA,RSS         A COMPLETION RETURN?
      JMP EXIT4     NO
      CMA           YES, SET UP 
      JSB DVTST       RIGHT DVT 
      LDB $DV6,I    GET STATUS
      LDA $DV15,I   IS REQUEST
      IOR B100        A WRITE 
      CPA $DV15,I       REQUEST?
      ADB .4        YES, SET NOT READ BIT 
      AND B600      IS REQUEST
      SZA             NON-DS? 
      ADB .8        YES, SET NON-DS BIT 
      STB $DV6,I    SET STATUS
      LDA $DV20,I   CLEAR PROCESS 
      AND B377        SERVER
      STA $DV20,I       FLAG
      CLA           SAY NO
      STA $DV16,I     ERROR 
      JMP EXIT5 
EXIT4 LDA ENTRY     WERE WE ENTERED 
      CLE,ERA         ON ABORT
      SZA,RSS           OR INITIATE?
      JMP EXIT7     YES 
      ISZ ID.66     NO, DO PHYSICAL WAIT
EXIT5 CLA,RSS 
EXIT7 LDA .8        GET PHONY DONE REQUEST
      LDB TEMP1     SET 
      STB $IF2,I      TIMEOUT 
      SZB           ACTIVATE IT 
      INA             IF ANY
      JMP ID.66,I   RETURN FROM WHENCE WE CAME
      SPC 1 
* 
*     SET UP DVT SERVED BY PROCESS INDICATED BY A 
* 
DVTST NOP 
      SZA,RSS       DO WE WANT THE CURRENT DVT? 
      JMP DVTST,I   YES 
      LDB $IF5,I    MAKE
      CPB $DV1        SURE
      JMP DVTS1         WE HAVE 
      STA DVTMP           ONE OF
      CLA,INA               OUR OWN 
      JSB $DIOC               DVT'S 
      LDA DVTMP 
DVTS1 ALF,ALF       IS THIS DVT 
      AND $DV20,I     BEING SERVED BY 
      SZA               THE PROPER PROCESS? 
      JMP DVTST,I   YES 
      LDB $IF5,I    NO, GO TO 
      LDA .5          THE OTHER 
      JSB $DIOC          DVT
      JMP DVTST,I 
DVTMP BSS 1 
* 
*     SET STATUS OF REQUEST ON ACTIVE PROCESS 
* 
STAT  NOP 
      ALF           SET STATUS IN 
      SZA             PROPER
      ADA .2            FORM
      STA CMDAT     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 DVTST       DVT 
      LDA $DV6,I    UPDATE
      AND MB400       STATUS
      IOR CMDAT 
      STA $DV6,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 
      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$ 
      LIA CDATA,C   FIRST WORD IS LENGTH
      STA RLEN1,I     OF FIRST BUFFER 
      JSB WFLG$     SECOND WORD 
      LIA CDATA,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 $XQSB     SCHEDULE
      DEF QUEUE       PROGRAM 
      DEF FNMBR         WITH PARAMETERS 
      DEC 0 
      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 $DV18,I   NO, 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 INDICATION? 
      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 DMA 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 IN FIRST BUFFER 
      SZB           SET TRANSMISSION LOG
      STA $DV17,I     TO REAL LENGTH FOR NOT DS 1 
      CMA,INA       GET NUMBER OF WORDS TO SKIP 
      ADA TEMP3       FOR A DS 1 TYPE 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 
      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     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 
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     COMPUTE 
      ADA RDSIZ,I     COMMAND TO
      STA TEMP6         READ IN THE FRAME 
      LDA TRIPL     SET POINTER 
      STA TEMP5       TO TRIPLE AREA
      LDA RPTRY,I   SET DMA STARTING ADDRESS
      STA TEMP1       WITH INPUT BIT SET
      ADA RDSIZ,I   UPDATE
      STA RPTRY,I     BUFFER POINTER
      LDA RDSIZ,I   SET DMA 
      CMA,INA         TRANSFER
      STA TEMP2         LENGTH
      ADA RLEN2,I   SAY HOW MANY WORDS
      STA RLEN2,I     MUST STILL BE READ
      CLA           SAY NO
      STA RDSIZ,I     FRAME READY 
      JSB DMA$      SET UP TRIPLE, START UP DMA 
* 
*     WAIT FOR TRANSFER TO FINISH, HANDLE EXCEPTIONS
* 
R4E   JSB WTRN$     WAIT FOR TRANSFER TO FINISH 
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 
WFPR  EQU *         FRONT PANEL RECOVERY
      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
      RSS 
      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 COMING
      JSB DVTST     GET OUR 
      LDA $DV13,I     TIMEOUT VALUE 
      CMA,INA           AS A POSITIVE QUANTITY
      OTA CDATA,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
* 
*     SEND OUTPUT TRANSFER COMMAND
* 
W2D   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 
      STA TEMP6     SAVE COMMAND
* 
*     START UP DMA
* 
W2E   LDA TRIPL     SET POINTER 
      STA TEMP5       TO TRIPLE AREA
      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 CMDAT     GET OUR DVT SET UP
      JMP W3D       NOT THERE ANY MORE
      LDA TEMP4     PUT LENGTHS IN DVT
      STA $DV18,I     WHERE THEY WILL BE SAFE 
      LDA TEMP3         WHILE DMA IS
      STA $DV17,I         RUNNING 
      LDA $DV17     SET ADDRESS 
      STA TEMP1       OF LENGTH WORDS 
      LDA M2        MUST WRITE
      STA TEMP2       TWO LENGTH WORDS
      LDA BIT15     SET UP
      JSB TRPL$       TRIPLE
      LDA WFSIZ,I   MAX DMA TRANSFER NOW
      ADA M2          IS TWO LESS THAN
      JMP W2E2          MAX FRAME SIZE
W2E1  LDA WFSIZ,I   GET MAX DMA 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 DMA 
      STB TEMP1       STARTING ADDRESS
      ADB A         ADJUST BUFFER 
      STB WPTR,I      POINTER 
      CMA,INA       SET DMA 
      STA TEMP2       WORD COUNT
      ADA WLEN,I    UPDATE NUMBER OF WORDS
      STA WLEN,I      THAT MUST BE TRANSFERRED
      LDA B400      USE AUTO
      LDB TRIPL       MODE IF 
      CPB TEMP5         SECOND
      CLA                 TRIPLE
      JSB DMA$      SET UP TRIPLE AND START DMA 
* 
*     WAIT FOR DMA TO FINISH OR ABORT, HANDLE IT
* 
W2F   JSB WTRN$     WAIT FOR DONE 
      JMP W2B       SEE IF THERE IS MORE TO SEND
      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 $DV4,I    GET POINTER 
      ELB,CLE,ERB     TO OTHER DVT
      CMB,INB       IS THIS 
      ADB $DV1        THE FIRST 
      SSB,RSS           DVT?
      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 
* 
*     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       REALLY SET/CLEAR 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 ANNOUNCE NEW STATE 
      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 TYPE
      INA             IS ONE
      IOR !SIDT     TELL CARD 
      JSB OTCM$       ABOUT TYPE
      JSB WFLG$         OF DATA 
      JSB CMDAT     GET BACK INFO 
      JMP W3G       REQUEST ABORTED, BACK OFF 
      LDA TRIPL     SET POINTER 
      STA TEMP5       TO TRIPLE AREA
      LDA TEMP3     GET BUFFER LENGTH 
      LDB TEMP1     INPUT 
      CMB,CCE,SLB     OR OUTPUT 
      RAL,ERA           TRANSFER
      STA TEMP6     PUT IT WHERE DMA$ LOOKS 
      LDA TEMP2     SET ADDRESS 
      CCE,SLB,RSS     WITH
      RAL,ERA           DIRECTION 
      STA TEMP1           BIT 
      LDA TEMP3     SET LENGTH
      CMA,INA         NEGATIVE
      STA TEMP2         FOR DMA 
      CLA           STANDARD CONTROL WORD 
      JSB DMA$      START DMA 
      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
      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+WL-WL 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
      JMP UNLK$,I 
      SPC 1 
* 
*     WAIT FOR DMA TRANSFER TO FINISH OR BE ABORTED 
*     IF ABORTED, STOP DMA, 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 
      SFS CDMA0     DMA FINISH? 
      JMP SUSPB     NO, WAIT
      CLF CDMA0     YES, STOP FURTHER INTERRUPTS
      JMP WTRN$,I   RETURN
WTRN1 CLC CDMA1     STOP DMA
      LDA !ABDM     GET ABORT DMA COMMAND 
      OTA CDATA,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 STC CDATA,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 
      OTA CDATA     SEND THE COMMAND
      STC CDATA,C   TELL THE CARD IT IS A COMMAND 
      JMP OTCM$,I 
      SPC 1 
* 
*     SET UP A DMA TRIPLE 
*     TEMP5 => LOCATION TO STORE TRIPLE 
*     TEMP1 = DATA ADDRESS WITH SIGN SET FOR READ 
*     TEMP2 = NEGATIVE TRANSFER LENGTH
*     A     = CONTROL WORD 1 WITHOUT IN BIT 
* 
TRPL$ NOP 
      LDB TEMP1     GET DATA ADDRESS
      RBL,CLE,SLB,ERB CLEAR ADDRESS SIGN
      ADA B200      SET 'IN' IF READ DESIRED
      STA TEMP5,I   SET CONT 1
      ISZ TEMP5     SET 
      STB TEMP5,I     CONT 2
      ISZ TEMP5 
      LDA TEMP2     SET 
      STA TEMP5,I     CONT 3
      ISZ TEMP5     ADVANCE POINTER FOR NEXT TRIPLE 
      JMP TRPL$,I 
      SPC 1 
* 
*     SET UP TRIPLE, START DMA, DO COMMAND IN TEMP6 
* 
DMA$  NOP 
      JSB TRPL$     SET UP A TRIPLE 
      LDA ACTIV     REQUEST ON
      AND FBITS+WA-WA,I CURRENT PROCESS 
      SZA               ABORTED?
      JMP DMA1      YES, JUST DO COMMAND
      LDA TRIPL     SET SELF CONFIGURATION
      OTA CDMA0       ADDRESS 
      STC CDMA0,C   START SELF CONFIGURATION
DMA1  LDA TEMP6     TELL CARD 
      JSB OTCM$       TO DO COMMAND 
      JMP DMA$,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 
      LIA CDATA     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 
      SFS CDATA     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 
      CLF CDATA     ALLOW ANOTHER INTERRUPT 
      LIA CDATA     GET CARD'S RESPONSE 
      SSA           POWER FAIL? 
      JMP SICK      YES, GET HIM BACK ON HIS FEET 
      SZA           AN ACKNOWLEDGMENT?
      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 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 
      STA FBITS,I       LONG TIMEOUT
      JMP EXIT
      SPC 1 
* 
*     PROCESS DRIVER ENTRY FROM CARD INTERRUPT
* 
CONTN LIA CFPFG     HAS THE FRONT PANEL 
      SZA             USED OUR CARD?
      JMP RSTRT     YES, RESET
      JSB BSYCK     BACKPLANE LOCKED? 
      JMP GO        YES, NONE OF OUR BUSINESS 
      LIA CDATA     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     TELL HIGHER UPS IF NECESSARY
      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 * 
      LIA CDATA     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?
RSTR1 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   SET WRITE RECOVERY ADDRESS
      LDA RSERA     SET READ
      STA RCONT,I     RECOVERY ADDRESS
      CLC CDMA1     SUSPEND DMA 
      CLC CDMA3     STOP DMA COLD 
      JMP GO
      SPC 1 
* 
*     RESET CARD AFTER FRONT PANEL HAS USED IT
* 
RSTRT CLA           CLEAR 'BEEN IN
      OTA CFPFG       FRONT PANEL' FLAG 
      LDB WFPRA     GET FRONT PANEL RECOVERY ADDRESS
      JMP RSTR1     ENTER RECOVERY CODE 
      SPC 3 
      BSS 0         FIND HOW MUCH SPACE WE TAKE 
      END 
                                                                                    