      JMP ZBIO6 
ZBI5A JSB ZTCJI     SET SECOND INT TRAP 
      DEF ZBT5
      STF INTP      TURN I/O SYSTEM ON
      JMP ZBI5,I    CONTINUE TEST 
* 
* 
ZBT5  NOP 
      CLF INTP      TURN I/O SYSTEM OFF 
E013  JSB ERMS,I    E013 SECOND INT OCURRED 
      DEF ZBE13 
* 
* 
* 
* 
* 
      SKP 
*         CLC SC AND  CLC 0 
* 
ZBIO6 JSB ZTCJI     SET JSB INSTRUCTION 
      DEF ZBI61 
ZBS61 STC SC        SET SC CONTROL
ZBS62 STF SC        SET SC FLAG 
      STF INTP      TURN ON INTERRUPTS
ZBS63 CLC SC        CLEAR SC CONTROL
      NOP           GIVE IT A CHANCE
      NOP 
      CLF INTP      TURN INTS OFF 
ZB60  JSB ZTCJI     SET JSB INSTRUCTION 
      DEF ZBI62 
ZBS64 CLF SC        CLEAR SC FLAG 
ZBS65 STC SC        SET SC CONTROL
ZBS66 STF SC        SET SC FLAG 
      STF INTP      TURN ON INTS
      CLC INTP      CLEAR I/O SYSTEM
      NOP           GIVE IT A CHANCE
      NOP 
      CLF INTP      TURN OFF INTS 
      JMP ZBIO7 
* 
* 
ZBI61 NOP 
      CLF INTP      TURN OFF INTS 
E016  JSB ERMS,I    E016 CLC SC ERROR 
      DEF ZBE16 
      JMP ZB60
* 
ZBI62 NOP 
      CLF INTP      TURN OFF INTS 
E017  JSB ERMS,I    E017 CLC 0 ERROR
      DEF ZBE17 
      JMP ZBIO7 
* 
ZBE16 ASC 6,E016 CLC SC/
ZBE17 ASC 6,E017 CLC 0/ 
* 
* 
* 
* 
* 
      SKP 
*         EXTERNAL & INTERNAL PRESET TEST 
* 
ZBIO7 LDB ZS812     CHECK TO SUPPRESS 
      JSB SWRT,I    ? 
      JMP H025      YES - SKIP PRESET TEST
H024  JSB MSGC,I    TELL OPERATOR 
      DEF ZBM24     PRESS PRESET
* 
ZBS71 CLF SC        CLEAR SC FLAG 
      STF INTP      TURN ON INTS
      JSB ZTCJI     SET TRAP CELL JSB INSTRUCTION 
      DEF ZBI70 
      HLT 24B       WAIT FOR OPERATOR 
      CLA,INA       SET UP FLAGS FOR TESTS
      SFS INTP      CHECK INTP FLAG 
      CLA           NOT SET SO CLEAR FLAG 
      RAL           MOVE TO NEXT FLAG 
      CLF INTP      TURN OFF ONTPS
ZBS72 SFS SC        CHECK CHANNEL FLAG
      INA           NOT SET SO FLAG IT
      RAL           MOVE TO NEXT FLAG 
      LIB 0         CHECK I/O BUSS
      SZB           SHOULD BE ZERO
      INA           NOT SO FLAG IT
      RAL           MOVE TO NEXT FLAG 
      STF INTP      CHECK CONTROL ON CARD 
      NOP           GIVE IT A CHANCE
      NOP 
      CLF INTP      TURN OFF INTPS
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
      SKP 
ZB70  SLA,RSS       CHECK FOR ERRORS
      JMP *+3 
E022  JSB ERMS,I    E022 DID NOT CLEAR CONTROL
      DEF ZBE22 
      RAR 
      SLA,RSS 
      JMP *+3 
E023  JSB ERMS,I    E023 I/O LINES NOT CLEAR
      DEF ZBE23 
      RAR 
      SLA,RSS 
      JMP *+3 
E020  JSB ERMS,I    E020 FLAG NOT SET 
      DEF ZBE20 
      RAR 
      SLA,RSS 
      JMP *+3 
E021  JSB ERMS,I    E021 DID NOT DIABLE INTS
      DEF ZBE21 
H025  JSB MSGC,I    TELL OPERATOR 
      DEF ZBM25     BASIC I/O IS COMPLETE 
      JMP ZBIO,I    RETURN TO CALLER
* 
ZBI70 NOP           CONTROL FAILED
      CLF INTP      TURN OFF INTPS
      INA 
      JMP ZB70
* 
ZBE20 ASC 17,E020 PRESET(EXT) DID NOT SET FLAG/ 
ZBE21 ASC 19,E021 PRESET(INT) DID NOT DISABLE INTS/ 
ZBE22 ASC 20,E022 PRESET(EXT) DID NOT CLEAR CONTROL/
ZBE23 ASC 21,E023 PRESET(EXT) DID NOT CLEAR I-O LINES/
ZBM24 ASC 9,H024 PRESET, RUN/ 
ZBM25 ASC 08,H025 BI-O COMP/
      SKP 
ZBIOD DEF *+1 
      DEF ZBS21 
      DEF ZBS22 
      DEF ZBS23 
      DEF ZBS24 
      DEF ZBS25 
      DEF ZBS26 
      DEF ZBS27 
      DEF ZBS31 
      DEF ZBS32 
      DEF ZBS33 
      DEF ZBS41 
      DEF ZBS42 
      DEF ZBS51 
      DEF ZBS52 
      DEF ZBS53 
      DEF ZBS61 
      DEF ZBS62 
      DEF ZBS63 
      DEF ZBS64 
      DEF ZBS65 
      DEF ZBS66 
      DEF ZBS71 
      DEF ZBS72 
      DEC -1
* 
ZCEND EQU * 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
      HED 12968 ASYNC COMM INTFC DIAGNOSTIC 
* 
      ORG 126B
DSN   OCT 103121    DIAGNOSTIC SERIAL NO. 
      ORG 140B
IOIP  DEF IOID      POINTER TO I-O INSTRUCTIONS 
TSTP  DEF TSTD      POINTER TO TEST DEF TABLE 
HDMP  DEF HDMS      POINTER TO HEADER MESSAGE 
STDA  OCT 001777    STANDARD TESTS
STDB  OCT 000000    STANDARD TESTS
      ORG 150B
IOCLR EQU 0 
SARI  EQU 12B 
NULL  EQU 0 
WRD0  EQU 00000B
WRD1  EQU 10000B
WRD2  EQU 20000B
WRD3  EQU 30000B
WRD4  EQU 40000B
WRD5  EQU 50000B
SCFE  EQU 1 
CFE   EQU 2 
CEE   EQU 4 
CCE   EQU 10B 
CBE   EQU 20B 
SCFR  EQU 1 
CFR   EQU 2 
CER   EQU 4 
CCR   EQU 10B 
CBR   EQU 20B 
DIAGC EQU 40B 
PASNS EQU 4 
PAR   EQU 10B 
ECHO  EQU 20B 
STB   EQU 40B 
DMA   EQU 20B 
SCA   EQU 40B 
CD    EQU 100B
CA    EQU 200B
XMIT  EQU 400B
CLPE  EQU 1 
CLBRK EQU 2 
CBEF  EQU 4 
CBF   EQU 10B 
SCF   EQU 1 
CF    EQU 2 
CE    EQU 4 
CC    EQU 10B 
CB    EQU 20B 
PARR  EQU 40B 
BRK   EQU 100B
BEF   EQU 200B
BFF   EQU 400B
SPCHR EQU 40000B
DEVI  EQU 40000B
B5    EQU 40B 
B7    EQU 200B
SDMAL EQU 2         LOWER SELECT CODE DMA 
SDMAH EQU 6         UPPER SELECT CODE DMA 
IRTN  DEF *-* 
BUFFA BSS 1 
BUFFB BSS 1 
BXMIT DEF XBUF      POINTER TO TRANSMIT BUFFER
BRCV  DEF RBUF      POINTER TO RECEIVE BUFFER 
      SPC 3 
TRJSB DEF ZTCJI     POINTER 
D1    EQU * 
SW0   OCT 1 
D2    EQU * 
SW1   OCT 2 
.7    OCT 7 
SW2   EQU * 
D4    DEC 4 
MD1   DEC -1
MD8   DEC -8
MD38  DEC -38 
MD9   DEC -9
MD15  DEC -15 
MD16  DEC -16 
BCNTR BSS 1 
MSK3  OCT 3 
PATUP DEC 16
      SKP 
PUPLO NOP           RETURN ADDRESS
      CLE,ERB 
      AND LOHWD 
      STA PCH 
      LDA B,I 
      SEZ,RSS 
      ALF,ALF 
      AND UPHWD 
      IOR PCH 
      SEZ,RSS 
      ALF,ALF 
      STA B,I 
      ELB 
      JMP PUPLO,I   RETURN
PCH   BSS 1 
UPHWD OCT 177400    MASK FOR UPPER HALF WORD
LOHWD OCT 000377    MASK FOR LOWER HALF WORD
      SKP 
*     THIS SECTION IS FOR INTERNAL USE ONLY.
*     TO ENABLE SUB-TEST HALTS AND LOOPS IT 
*     IS NECESSARY TO CONFIGURE THE DIAGNOSTIC
*     STARTING AT LOCATION 100 OCTAL WITH THE 
*     SELECT CODE AND BIT 15 = 1.  AT EXECUTION 
*     SWITCH REGISTER BIT 0 HAS 
*     THE MEANING LOOP ON SUB-TEST AND
*     SWITCH REGISTER BIT 1 MEANS HALT
*     AT THE END OF THE CURRENT SUB-TEST. 
*     THIS HALT IS 102070 (OCTAL).
*     THE SUB-TEST LOOP 
*     WILL CAUSE LOOPING ON A SMALL 
*     PROGRAM SEGMENT.
      SPC 2 
SUBT  NOP           RETURN ADDRESS
      LDA USSC      GET CONFIG INFO 
      SSA,RSS 
      JMP SUBC1     CONTINUE
      LDB SW1       MASK FOR SWITCH 1 
      JSB SWRT,I    CHECK SWITCH 1 - SUB-TEST HALT
      RSS 
      JMP SUBT1     CONTINUE
      LDA TSTN      GET TEST NO.
      LDB SUBT.     GET SUB-TEST NO.
      HLT 70B       HALT
SUBT1 LDB SW0       MASK FOR SWITCH 0 
      JSB SWRT,I    CHECK SWITCH 0 - SUB-TEST LOOP
      JMP SUBT,I    RETURN
SUBC1 ISZ SUBT
      JMP SUBT,I    RETURN
      SPC 1 
SUBTH NOP           RETURN ADDRESS
      JSB SUBT      CHECK SUB-TEST HALT 
      NOP           BYPASS LOOP 
      JSB SUBUP     UPDATE SUB-TEST NO. 
      JMP SUBTH,I   RETURN
      SPC 1 
SUBTT NOP           RETURN ADDRESS
      JSB SUBT      CHECK SUB-TEST HALT,LOOP
      JMP SUBLL     LOOP ON THIS SUB-TEST 
      JSB SUBUP     UPDATE SUB-TEST NO. 
      JMP SUBTT,I   RETURN
      SPC 1 
STSUB NOP           RETURN ADDRESS
      LDA STSUB     SAVE LOOP ADDRESS 
      INA 
      STA SUBLP 
      LDA STSUB,I   GET SUB-TEST NO.
      STA SUBT.     SAVE
      STA SUBLN     SAVE FOR USE WHEN LOOPING 
      ISZ STSUB     UPDATE RETURN 
      JMP STSUB,I   RETURN
      SPC 1 
SHUTA NOP           RETURN ADDRESS
      JSB SUBTT     CHECK SUB-TEST HALT/LOOP
      LDA SHUTA     GET LOOP ADDRESS
      STA SUBLP     SAVE
      LDA SUBT.     GET SUB-TEST NO.
      STA SUBLN     SAVE FOR FUTURE LOOPING 
      JMP SHUTA,I   RETURN
      SPC 1 
SUBLL LDA SUBLN     GET SUB-TEST NO.
      STA SUBT.     SAVE
      JMP SUBLP,I   GO LOOP 
      SPC 1 
SUBUP NOP           RETURN ADDRESS
      LDA SUBT.     GET SUB-TEST NO.
      INA 
      AND .77        MASK 
      CPA .70        CHECK FOR OCT X70
      JMP SUBT3      CONTINUE 
      ISZ SUBT.      OK UPDATE SUBT.
      JMP SUBUP,I    RETURN 
SUBT3 LDA SUBT.      GET SUB-TEST NO. 
      AND .300       MASK X00 
      ADA .100       UPDATE SUB-TEST NO.
      STA SUBT.      SAVE 
      JMP SUBUP,I    RETURN 
.300  OCT 300 
.70   OCT 70
.77   OCT 77
SUBLP DEF *-*       LOOP ADDRESS
SUBLN BSS 1         LOOP SUB-TEST NO. 
SUBT. BSS 1         SUB-TEST NUMBER 
.100  OCT 100 
      SKP 
ERNO  NOP           RETURN ADDRESS
      LDB ERNO,I    GET BUFFER POINTER
      BLS           CONVERT TO BYTE ADDRESS 
      INB 
      LDA SUBT.     GET SUB-TEEST NO. AND E NO. 
      ALF,ALF 
      RAL,RAL 
      AND LOHWD     MASK
      ADA ASC0      CONVERT TO ASCII
      JSB PUPLO     PLACE IN MESSAGE
      INB 
      LDA SUBT. 
      RAR,RAR 
      RAR 
      AND .7
      ADA ASC0      CONVERT TO ASCII
      JSB PUPLO     PLACE IN MESSAGE
      INB 
      LDA SUBT. 
      AND .7        MASK
      ADA ASC0       CONVERT TO ASCII 
      JSB PUPLO     PLACE IN MESSAGE
      ISZ ERNO      UPDATE RETURN 
      JMP ERNO,I    RETURN
      SPC 2 
ASC0  OCT 60        ASCII ZERO
      SKP 
CMNDD  NOP           RETURN ADDRESS 
      LDA CMNDD,I    GET OPTIONS IN COMMAND 
FNIO1 OTA SARI      GIVE COMMAND
      ISZ CMNDD      UPDATE RETURN ADDRESS
      LDA D4         WAIT 4 MS
      JSB TMRR,I
      JMP CMNDD,I    RETURN 
      SPC 2 
RSTUS NOP           RETURN ADDRESS
FNIO2 CLC SARI      SELECT STATUS 
STIO1 LIA SARI      READ STATUS 
      JMP RSTUS,I   RETURN
      SPC 2 
RDDTA NOP           RETURN ADDRESS
FNIO6 STC SARI      SET CONTROL = DATA
IOIN6 LIA SARI      INPUT DATA
      JMP RDDTA,I   RETURN
      SPC 2 
MRST  NOP           RETURN ADDRESS
      LDA MRSTC     GET MASTER RESET COMMAND
FNIO0 OTA SARI      GIVE COMMAND
      LDA D2
      JSB TMRR,I    WAIT 2 MS 
      JMP MRST,I    RETURN
MRSTC ABS 100000B+WRD5+CLPE+CLBRK+CBF+CBEF
      SPC 2 
CLF   NOP           RETURN ADDRESS
CNIO1 CLF SARI      CLEAR INTERFACE FLAG
      JMP CLF,I     RETURN
      SPC 2 
SFS   NOP           RETURN ADDRESS
CNIO2 SFS SARI      SKIP ON FLAG SET
      JMP SFS,I     RETURN - FLAG CLEAR 
      ISZ SFS       UPDATE RETURN ADDRESS 
      JMP SFS,I     RETURN
      SPC 2 
STC   NOP           RETURN ADDRESS
CNIO3 STC SARI      SET INTERFACE CONTROL FF
      JMP STC,I     RETURN
      SPC 2 
CLK16 NOP           RETURN ADDRESS
      LDA MD16
      STA CLKNT 
CLKC1 LDA CLKON     RISING EDGE OF 16 X BAUD RATE CLOCK 
CLK01 OTA SARI      OUTPUT
      LDA CLKOF     FALLING EDGE OF 16 X BAUD RATE CLOCK
CLK00 OTA SARI      OUTPUT
      ISZ CLKNT 
      JMP CLKC1 
      JMP CLK16,I   RETURN
      SPC 1 
CLKON ABS WRD2+DIAGC
CLKOF ABS WRD2+NULL 
CLKNT BSS 1 
      SPC 2 
SDIN  NOP           RETURN ADDRESS
      LDA SDIN,I     GET PARAMETERS 
      STA SDTYP     SAVE
      LDA SDTYP 
      LDB MD9 
      AND MSK3      BITS / CHAR 
      CMA,INA 
      ADB A 
      LDA SDTYP 
      AND SDP       PARITY BIT
      SZA,RSS 
      INB 
      LDA SDTYP 
      AND SDST      NO OF STOP BITS 
      SZA,RSS 
      INB 
      LDA SDTYP     GET TYPE
      AND SDSTX 
      CPA SDST
      INB           SPECIAL FOR 5 BIT 2 STOPS 
      STB SDCNT     SAVE NO BITS / CHAR 
      STB SDDTC 
      CLA 
      STA BUFFA,I   PLACE IN BUFFER 
SDC01 JSB CLK16     SUPPLY CLOCKS TO INTERFACE
      JSB RSTUS     READ STATUS 
      AND SDBA      ISOLATE SIGNAL BA 
      LDB BUFFA,I   GET PARTIAL DATA
      RBR           ADD THIS BIT TO DATA
      SZA 
      INB 
      STB BUFFA,I   PLACE DATA IN BUFFER
      ISZ SDCNT     UPDATE BIT COUNTER
      JMP SDC01 
      LDA SDTYP     GET TYPE
      AND SDSTX 
      CPA SDST
      JMP SDC06     CONTINUE - 5 BIT AND 2 STOPS
SDC05 LDA SDDTC 
      INA 
SDC02 RBL           PREPARE CHARACTER 
      INA,SZA 
      JMP SDC02 
      STB BUFFA,I   PLACE ASSEMBLED CHARACTER IN BUFFER 
      ISZ BUFFA     UPDATE BUFFER POINTER 
      JMP SDIN,I    RETURN
SDC06 LDB MD8 
      STB SDCNT 
SDC04 JSB CMND
      ABS WRD2+DIAGC
      JSB CMND
      ABS WRD2+NULL 
      ISZ SDCNT 
      JMP SDC04 
      JSB RSTUS     GET BA
      AND SDBA
      LDB BUFFA,I 
      RBR 
      SZA 
      INB 
      STB BUFFA,I 
      LDA SDDTC 
      ADA MD1 
      STA SDDTC 
      JMP SDC05 
      SPC 2 
SDDTC BSS 1 
SDCNT BSS 1 
SDTYP BSS 1 
SDBA  ABS CE
SDP   ABS PAR 
SDST  ABS STB 
SDSTX ABS STB+3 
      SPC 2 
SDOUT NOP           RETURN ADDRESS
      LDA SDOUT,I   GET PARAMETER 
      ISZ SDOUT     UPDATE RETURN ADDRESS 
      STA SDOP1     SAVE
      LDA SDWD4     GET WORD 4 COMMAND
      STA SDOP3     SAVE
      LDA SDOP1     GET PARAMETER 
      AND MSK3
      STA B 
      LDA SDOP1 
      AND SDST
      SZA 
      INB 
      LDA SDOP1 
      AND SDP 
      SZA 
      INB 
      ADB D6
      CMB,INB 
      STB SDOCN     COUNTER - BITS / CHARACTER
      JSB CMND      PREPARE FOR RECEIVE 
SDOP3 BSS 1         WORD 4 COMMAND
      JSB CLK16     START BIT 
SDOC2 LDA BUFFA,I   GET DATA
      CMA 
      AND MSK1
      ALF,ALF 
      RAR,RAR 
      ADA SDWD4 
      STA SDOP2 
      LDA BUFFA,I 
      RAR 
      STA BUFFA,I 
      JSB CMND
SDOP2 BSS 1 
      JSB CLK16     SUPPLY 16 CLOCKS
      ISZ SDOCN     UPDATE BIT COUNTER
      JMP SDOC2     CONTINUE WITH THIS CHARACTER
      ISZ BUFFA     UPDATE BUFFER POINTER 
      JSB CLK16 
      JMP SDOUT,I   RETURN
      SPC 2 
MSK1  EQU D1
SDOCN BSS 1 
SDOP1 BSS 1 
D6    DEC 6 
SDWD4 BSS 1 
      SPC 2 
LINBF NOP           RETURN ADDRESS
      LDA MD16      INITIALIZE COUNTER
      STA BCNTR 
      LDB BRCV      INITIALIZE BUFFER POINTER 
      STB BUFFB 
      LDB BXMIT     INITIALIZE BUFFER POINTER 
      STB BUFFA 
LIC01 LDA BUFFB,I   PREPARE DATA
      AND LOHWD 
      STA BUFFB,I   REPLACE IN BUFFER 
      LDA BUFFA,I 
      AND MSKCZ 
      STA BUFFA,I   REPLACE IN BUFFER 
      ISZ BUFFB     UPDATE BUFFER POINTER 
      ISZ BUFFA     UPDATE BUFFER POINTER 
      ISZ BCNTR     UPDATE COUNTER
      JMP LIC01     CONTINUE
      JMP LINBF,I   RETURN
      SPC 2 
FIXDA NOP           RETURN ADDRESS
      LDA FIXDA,I   GET DATA FORMAT 
      STA FXDAT     SAVE
      ISZ FIXDA     UPDATE RETURN ADDRESS 
      LDB BXMIT     GET BUFFER POINTER
      STB BUFFA     SAVE
      LDB MD16      INITIALIZE COUNTER
      STB BCNTR 
FXC07 LDA FXDAT 
      AND MSK3
      LDB MSK37 
FXC09 SZA,RSS 
      JMP FXC08-1 
      RBL 
      INB 
      ADA MD1 
      JMP FXC09 
      STB MSKCZ     SAVE MASK 
FXC08 LDA BUFFA,I 
      AND B 
      STA BUFFA,I 
      LDA FXDAT 
      AND SDP       IS PARITY USED
      SZA,RSS 
      JMP FXC01     NO- DO START AND STOP(S)
      LDA FXDAT 
      AND .B2       YES - WHAT TYPE 
      SZA,RSS 
      CCB,RSS 
      CLB 
      LDA BUFFA,I   GET DATA
      JSB PTYGN     GENERATE PARITY 
      STA BUFFA,I   SAVE
      AND .B8 
      STA B         SAVE PARITY BIT 
      RBR,RBR 
      RBR 
      LDA FXDAT 
      AND MSK3      NO BITS / CHAR
FXC03 SZA,RSS 
      JMP FXC02     CONTINUE
      RBL 
      ADA MD1 
      JMP FXC03     CONTINUE
FXC02 LDA BUFFA,I 
      AND B0TB7 
      IOR B 
      RSS 
FXC01 LDA BUFFA,I   GET DATA
      RAL           INSERT START BIT
      AND NB0       MASK
      STA BUFFA,I   SAVE
      LDB .B6 
      LDA FXDAT 
      AND SDST      CHECK NO STOP BITS
      SZA 
      ADB .B7       USE 2 
      LDA FXDAT 
      AND MSK3      GET NO OF BITS / CHAR 
FXC06 SZA,RSS 
      JMP FXC05     CONTINUE
      RBL           PUT STOP BITS IN CORRECT POSITION 
      ADA MD1 
      JMP FXC06 
FXC05 LDA FXDAT 
      AND SDP 
      SZA           IS PARITY USED
      RBL           POSITION STOP BIT(S)
      LDA BUFFA,I   GET DATA
      IOR B 
      STA B 
      STB BUFFA,I   SAVE COMPLETE DATA
      ISZ BUFFA     UPDATE BUFFER POINTER 
      ISZ BCNTR     UPDATE BUFFER COUNTER 
      JMP FXC07 
      JMP FIXDA,I   RETURN
      SPC 2 
FXDAT BSS 1 
MSKCZ BSS 1 
.B2   EQU D4
.B6   EQU .100
.B7   ABS B7
NB0   OCT 7776
      SPC 2 
PTYGN NOP           RETURN ADDRESS
      STB PYTYP     SAVE PARITY TYPE
      LDB MD8 
      STB PYCNT 
      CCB 
      AND B0TB7     MASK
PYC01 SLA           GENERATE PARITY 
      CMB 
      RAR 
      ISZ PYCNT 
      JMP PYC01 
      ALF,ALF 
      SZB 
      IOR .B8 
      LDB PYTYP     GIVE CORRECT
      SSB,RSS       PARITY TO 
      XOR .B8       DATA
      JMP PTYGN,I   RETURN
PYCNT BSS 1         COUNTER 
MSK37 OCT 37
PYTYP BSS 1         PARITY TYPE 
.B8   OCT 400 
B0TB7 EQU LOHWD 
      SPC 2 
CMND  NOP           RETURN ADDRESS
      LDA CMND,I    GET DATA
      ISZ CMND      UPDATE RETURN 
OTIO1 OTA SARI      OUTPUT
      JMP CMND,I    RETURN
      SPC 2 
PTG   NOP           RETURN ADDRESS
      LDA PTG,I     GET ADDRESS OF
      STA PTGI      INTERRUPT ROUTINE 
      ISZ PTG 
      LDA PTG,I     GET ADDRESS OF
      STA IRTN      INTERRUPT RETURN
      JSB TRJSB,I   FILL TRAP CELL
PTGI  DEF *-* 
      ISZ PTG       UPDATE RETURN 
      JMP PTG,I     RETURN
      SPC 2 
CBUFS NOP           RETURN ADDRESS
      CLA 
      STA NOERS     INITIALIZE ERROR FLAG 
      LDA CBUFS,I   GET ERROR POINTER 
      STA CBERR 
      LDA MD16      INITIALIZE COUNT
      STA CBCNT 
      LDA BXMIT     INITIALIZE POINTERS 
      STA BUFFA 
      LDA BRCV
      STA BUFFB 
CBC02 LDA CBC1A 
      STA CDATA 
      LDA BUFFA,I 
      ISZ BUFFA 
      STA CEXPD     SAVE
      LDA BUFFB,I 
      ISZ BUFFB 
      LDB A 
      JMP CDAC1     CHECK DATA
CEXPD BSS 1         EXPECTED DATA 
CBERR DEF *-*       ERROR MESSAGE POINTER 
      ISZ NOERS     CHECK FOR ERRORS
      RSS           CONTINUE
      JMP CBC03     DO NOT REPORT ANY MORE ERRORS 
      ISZ CBCNT     DONE? 
      JMP CBC02     CONTINUE
CBC03 ISZ CBUFS     UPDATE RETURN 
      JMP CBUFS,I   RETURN
CBCNT BSS 1 
CBC1A DEF CEXPD 
      SPC 2 
EPREP NOP           RETURN ADDRESS
      LDA EPREP,I   GET TO ADDR 
      STA EMTO      SAVE
      ISZ EPREP 
      LDA EPREP,I   GET ERROR NO PTR
      STA EMNO      SAVE
      STA EMSGG 
      ISZ EPREP 
      LDA EPREP,I   GET FROM ADDR 
      STA EMFRN     SAVE
      ISZ EPREP 
      JSB MOVE
EMTO  DEF *-* 
EMFRN DEF *-* 
      JSB ERNO
EMNO  DEF *-* 
      JSB ERMS,I   REPORT ERROR 
EMSGG DEF *-* 
      JMP EPREP,I  RETURN 
      SPC 2 
DMAON NOP           RETURN ADDRESS
      LDA DMACF     PLACE 
      STA SDMAH     CLF IN TRAP CELL
      LDA CW1       GET COMMAND WORD 1
      OTA SDMAH     OUTPUT TO DMA 
      CLC SDMAL     PREPARE FOR CW2 
      LDA DMAON,I   INPUT OR OUTPUT + 
      OTA SDMAL     ADDRESS TO DMA
      STC SDMAL     PREPARE FOR CW3 
      LDA CW3       GET CONTROL WORD 3
      OTA SDMAL     OUTPUT TO DMA 
FNIO5 STC SARI,C    START ARI 
      STC SDMAH,C   START DMA 
      ISZ DMAON     UPDATE RETURN 
      JMP DMAON,I   RETURN
      SPC 1 
CW1   ABS SARI      CONTROL WORD 1 FOR DMA
CW3   EQU MD16
      SPC 2 
XARI  NOP           RETURN ADDRESS
      LDA BUFFB,I   GET DATA
      AND LOHWD     MASK
      STA XARP1     SAVE
      JSB CMND      OUTPUT CHARACTER
XARP1 BSS 1         CHARACTER 
      ISZ BUFFB     UPDATE BUFFER POINTER 
      JMP XARI,I    RETURN
      SPC 2 
RARI  DEF *-*       RETURN
      JSB RDDTA     READ DATA 
      STA BUFFB,I   PLACE IN BUFFER 
      ISZ BUFFB     UPDATE BUFFER POINTER 
      JMP RARI,I    RETURN
      SPC 2 
DMAOF NOP           RETURN ADDRESS
DMACF CLF SDMAH     TURN OFF DMA
      LIA SDMAL     GET COUNT 
      SZA,RSS       CHECK COUNT = 0 
      JMP DMAOF,I   RETURN
      CLF INTP      CLEAR INTERRUPT SYSTEM
      JSB ERMS,I    REPORT ERROR
      DEF EM132 
      JMP DMAOF,I   RETURN
      SPC 2 
CLBFR NOP           RETURN ADDRESS
      LDB MD16      INITIALIZE COUNTER
      CLA           CLEAR 
      STB CLCNT 
      LDB BRCV      BUFFER POINTER
CLC01 STA B,I       CLEAR BUFFER
      INB           UPDATE POINTER
      ISZ CLCNT     UPDATE COUNT
      JMP CLC01     CONTINUE
      JMP CLBFR,I   RETURN
CLCNT BSS 1         COUNTER 
      SPC 2 
PTGNR NOP           RETURN ADDRESS
      LDA PTGNR,I    GET START PATTERN
      STA PTGTY     SAVE
      LDB MD16      INITIALIZE COUNTER
      STB PTNCT     SAVE
      LDB BXMIT     GET BUFFER POINTER
                                                                                                                                                                                                                    