*     CHARACTER (ALL ZEROS) ON A PORT AND CHECKS
*     THE BREAK BIT OF THE STATUS WORD AFTER EACH 
*     SEND AND RECEIVE TO SEE THAT IT IS SET TO ONE.
      SPC 1 
TST02 EQU * 
BKTST NOP            RETURN ADDRESS 
BRK   JSB MCLR,I    MASTER CLEAR MPX
      JSB STCH,I    SET UP PORT NUMBERS 
CH28  CLF CH        CLEAR I/O FLAG
      LDA CW1       SEND CONTROL WORD 
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW2       RECEIVE CONTROL WORD
      LDB PORT2     RECEIVE PORT NUMBER 
      JSB OUT,I     CONFIGURE RECEIVE PORT
      JSB CK21A     CHECK FOR 12921A
      JMP BKC03     CONTINUE
      LDA BKNON     CHARACTER 
      LDB PORT1     SEND PORT NO. 
      JSB OUT,I     SEND CHARACTER
      JSB SFS,I     WAIT FOR RECEIVE INTERRUPT
      NOP 
CH71  CLF CH
      LDA NULL      NULL CHARACTER
      LDB PORT1     SEND PORT NO. 
      JSB OUT,I     SEND CHARACTER
      LDA D2        WAIT 2 MS 
      JSB TMRR,I
CH72  LIA CH+1      READ STATUS 
      RAR,RAR 
      SLA,RSS        CHECK BREAK BIT
      JMP BKC01      CONTINUE 
      JSB ERMS,I     BREAK BIT SET - REPORT ERROR 
      DEF M37 
BKC01 JSB SFS,I      WAIT FOR RECEIVE INTERRUPT 
      NOP 
CH73  CLF CH        ACKNOWLEDGE RECEIVE INTERRUPT 
BKC03 LDA BKNON     NON-ZERO CHAR FOR BREAK TEST
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     SEND NON-ZERO CHARATER
      JSB SFS,I     WAIT FOR RECEIVE INTERRUPT
      NOP 
CH29  CLF CH        ACKNOWLEDGE RECEIVE INTERRUPT 
CH63  LIA CH+1      READ STATUS 
      RAR,RAR       POSITION BREAK BIT
      SLA,RSS       IS BREAK BIT = 0
      JMP BKC02     CONTINUE
      JSB ERMS,I    BREAK BIT IS SET - REPORT ERROR 
      DEF M40 
BKC02 LDA CW1       SEND CONTROL WORD 
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW2       RECEIVE CONTROL WORD
      LDB PORT2     REVEIVE PORT NUMBER 
      JSB OUT,I     CONFIGURE RECEIVE PORT
      LDA BT14      ALL ZERO'S FOR BREAK
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     SEND ALL ZERO'S 
      JSB SFS,I     WAIT FOR RECEIVE INTERRUPT
      NOP 
CH31  CLF CH        ACKNOWLEDGE RECEIVE INTERRUPT 
CH64  LIA CH+1      READ STATUS 
      RAR,RAR       POSITION BREAK BIT
      SLA            IS BREAK BIT = 1 
      JMP BKC04     CONTINUE
      JSB ERMS,I     BREAD BIT SHOULD BE SET
      DEF M41 
BKC04 JMP BKTST,I   RETURN
      HED  PYT - PARITY TEST - 12921 ASYNC MPX
*     PARITY TEST (PYT) 
      SPC 1 
*     THE PARITY TEST SENDS AND RECEIVES ODD ASCII
*     PARITY.  CHECKS BIT 15 OF THE RECEIVE WORD
*     FOR A ONE. THEN SENDS AND RECEIVES EVEN ASCII 
*     PARITY.  CHECKS BIT 15 OF THE RECEIVE WORD
*     FOR A ZERO. THIS TEST EXAMINS BIT 7 (RAW PARITY) OF 
*     THE RECEIVED DATA.
      SPC 1 
      ORG 4000B 
TST03 EQU * 
PYTST NOP            RETURN ADDRESS 
      JSB MCLR,I    MASTER CLEAR MPX
      JSB STCH,I    SET UP PORT NO. 
CH30  CLF CH        CLEAR I/O FLAG
      LDA CW8       CONTROL WORD PTY=1
      LDB PORT1     SEND PORT NO. 
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW7       RECEIVE CONTROL WORD
      LDB PORT2     REC PORT NO.
      JSB OUT,I     CONFIGURE REC PORT
      CLA 
PTYC1 STA PTYDA     INITIALIZE DATA PATTERN 
      LDA PT1       GENERATE OUTPUT DATA
      ADA PTYDA 
      LDB PORT1     SEND PORT NO. 
      JSB OUT,I     TRANSMIT DATA 
      JSB SFS,I     WAIT FOR RECEIVE INTERRUPT
      NOP 
CH34  LIA CH        READ RECEIVED DATA
      STA PTYIN     SAVE DATA 
      SSA            CHECK PARITY FLAG
      JMP PYC01      CONTINUE 
      JSB ERMS,I     PARITY FLAG SHOULD BE SET
      DEF M42 
PYC01 LDA PTYDA     GET TEST DATA 
      CLB 
      JSB PTYGN     GENERATE PARITY 
      AND BT7       MASK OFF DATA 
      STA B 
      LDA PTYIN     RESTORE INPUT DATA
      AND BT7       ISOLATE RAW PARITY
      CPA B         CHECK BIT 7 
      RSS 
      JMP CH33      CONTINUE
      JSB ERMS,I    PARITY ERROR
      DEF M43 
CH33  CLF CH        ACKNOWLEDGE REC IINTERRUPT
      LDA PTYDA     UPDATE PATTERN
      INA 
      AND MASKC 
      SZA 
      JMP PTYC1     CONTINUE
PTYC2 STA PTYDA     SAVE TEST DATA
      LDA PT4       EVEN PARITY 
      ADA PTYDA 
      LDB PORT1     SEND PORT NO. 
      JSB OUT,I     TRANSMIT DATA 
      JSB SFS,I     WAIT FOR RECEIVE INTERRUPT
      NOP 
CH48  LIA CH        READ RECEIVE DATA 
      STA PTYIN     SAVE DATA 
      SSA,RSS       CHECK BIT 15
      JMP PYC02     CONTINUE
      JSB ERMS,I    PARITY BIT SET ERROR
      DEF M44 
PYC02 LDA PTYDA     GET TEST DATA 
      CCB 
      JSB PTYGN     GENERATE PARITY 
      AND BT7 
      STA B 
      LDA PTYIN     RESTORE DATA
      AND BT7       ISOLATE RAW PARITY
      CPA B         CHECK BIT 7 
      RSS 
      JMP CH49      CONTINUE
      JSB ERMS,I    PARITY ERROR
      DEF M45 
CH49  CLF CH
      LDA PTYDA     UPDATE PATTERN
      INA 
      AND MASKC 
      SZA 
      JMP PTYC2     CONTINUE
      JMP PYTST,I   RETURN
      SPC 1 
*     PARITY GENERATOR ROUTINE
*     A REG = DATA
*     B REG = EVEN/ ODD PARITY
*     OUTPUT A REG  = DATA + PARITY(BIT 7)
PTYGN NOP           RETURN ADDRESS
      STB PYTYP     SAVE PARITY TYPE
      LDB MD8 
      STB PYCNT 
      CCB 
      AND B0TB6     MASK
PYC03 SLA 
      CMB 
      RAR 
      ISZ PYCNT 
      JMP PYC03 
      ALF,ALF 
      SZB 
      IOR BT7 
      LDB PYTYP     GIVE CORRECT
      SSB,RSS       PARITY TO 
      XOR BT7 
      JMP PTYGN,I   RETURN
      HED  DIAG - D IAGNOSE - 12921 ASYNC MPX 
*    DIAGNOSE PORT  (DIAG)
      SPC 1 
*    THIS ROUTINE TEST THE ABILITY TO ROUTE SEND
*    DATA TO THE AUXILIARY PORTS 16 - 20 WHEN 
*    BIT 11 (DIAGNOSE BIT) OF SEND CONTROL WORD 
*    IS SET TO A ONE.  THEN TESTS THE ABILITY TO
*    ROUTE RECEIVED DATA TO THE AUXILIARY PORTS 
*    16 - 20 WHEN BIT 11 OF THE RECEIVE CONTROL WORD
*    IS SET TO A ONE. 
      SPC 1 
TST04 EQU * 
DITST NOP           RETURN ADDRESS
      JSB MCLR,I    MASTER CLEAR MPX
      JSB STCH,I    SET UP PORT NUMBERS 
      LDA MM5       NUMBER OF TIMES TO REPEAT 
      STA CNT0      STORE NUMBER
      LDA PORT2     STORE THE VALUE 
      STA SAVE1      OF PORT2 
      LDA D16       SET UP PORT2 FOR
      STA PORT2      AUX PORT 16
DIAX  LDA CW4       SEND CONTROL WORD ENA=0 DIAG=1
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW2       REC CONTROL WORD ENA=1 DIAG=0 
      LDB PORT2     AUX PORT XX REC NUMBER
      JSB OUT,I     CONFIGURE AUX RECEIVE PORT
      LDA DAT1      DATA TO BE TRANSMITTED
      LDB PORT1     SEND PORT NUMBER
CH38  CLF CH        CLEAR FLAG FOR INTERRUPT
      JSB OUT,I     TRANSMIT DATA 
      JSB SFS,I     WAIT FOR AUX PORT TO INTERRUPT
      JSB ERRA,I    E031 NO INTERRUPT ON PORT XX
CH39  LIA CH       READ DATA
      AND B7600     MASK OFF PORT NUMBER
      ALF,ALF       POSITION PORT NUMBER
      RAR,RAR        IN BITS 4-0
      CPA PORT2     CHECK AUX PORT NUMBER 
      RSS           OK
      JSB ERRB,I    E033 REC PORT NO. IS XX S/B YY
CH41  LIA CH        READ DATA 
      AND B377      MASK OFF DATA 
      STA B         STORE REC DATA IN B-REG 
      LDA DAT1      DATA TRANSMITTED
      AND B377      MASK OFF DATA 
      CPA B         COMPARE DATA
      RSS           OK
      JSB ERRG,I    E046 SEND DATA NOT ON AUX CH XX.
CH40  CLF CH        ACKNOWLEDGE INTERRUPT 
      LDA CW1       SEND CONTROL WORD ENA=0 DIAG=0
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW5       REC CONTROL WORD ENA=0 DIAG=1 
      LDB SAVE1     ORGINAL REC PORT NUMBER 
      JSB OUT,I     CONFIGURE REC PORT
      LDA DAT1      DATA TO BE TRANSMITTED
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     TRANSMIT DATA 
      JSB SFS,I     WAIT FOR INTERRUPT
      JSB ERRA,I    E27. REC CH XX DID NOT  INTERRUPT 
CH42  LIA CH        READ DATA 
      AND B377      MASK OFF DATA 
      STA B         STORE REC DATA IN B-REG 
      LDA DAT1      DATA TRANSMITTED
      AND B377      MASK OFF DATA 
      CPA B         COMPARE DATA
      RSS           OK
      JSB ERRC,I    E047 REC DATA NOT ON AUX CHXX.
      LDA BT15
      LDB PORT2 
      JSB OUT,I 
      ISZ PORT2     ADD 1 TO AUX CH NUMBER
      ISZ CNT0
      JMP DIAX
      LDA SAVE1     RESTORE ORGINAL VALUE 
      STA PORT2      OF PORT2 
      JMP DITST,I   RETURN
      HED  ECHO - E CHO TEST - 12921 ASYNC MPX
*    ECHO TEST
*    THIS ROUTINE SENDS A CHARACTER ON PORT XX
*    WITH ENABLE =0, PARITY =0, DIAGNOSE =0.  THE 
*    CHARACTER IS RECEIVED ON PORT YY WITH
*    ENA =0, ECHO =1, DIAG =0.  THE CHARACTER IS
*    ECHO BACK TO RECEIVE PORT XX WITH THE
*    ENA =1, ECHO =0, DIAG =O.  THE DATA RECEIVED 
*    ON PORT XX IS COMPARED WITH THE DATA 
*    TRANSMITTED. 
      SPC 1 
TST05 EQU * 
ECTST NOP           RETURN ADDRESS
      JSB MCLR,I    MASTER CLEAR MPX
      JSB STCH,I    SET UP PORT NUMBERS 
CH32  CLF CH        CLEAR MPX I/O FLAG
      LDA CW1       SEND CW ENA=0 DIAG=0
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW3       REC CW ENA=0 ECHO=1 DIAG=0
      LDB PORT2     RECEIVE PORT NUMBER 
      JSB OUT,I     CONFIGURE RECEIVE PORT
      LDA CW2       REC CW ENA=1 ECHO=0 DIAG=0
      LDB PORT1     REC PORT NUMBER 
      JSB OUT,I     CONFIGURE REC PORT
      LDA DAT1      DATA TO TRANSMIT
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     SEND DATA 
      JSB SFS,I     WAIT FOR REC ECHO DATA TO INT.
      NOP 
CH43  LIA CH        READ DATA 
      AND B377      MASK OFF DATA RECEIVED
      STA B         STORE DATA INTO B-REG 
      LDA DAT1      GET DATA TRANSMITTED
      AND B377      MASK OFF DATA 
      CPA B         COMPARE DATA
      RSS           OK
      JSB ERRH,I    E050 NO ECHO ON PORT XX 
      JMP ECTST,I   RETURN
      HED SYNC - SYNC TEST - 12921 ASYNC MPX
*  SYNC TEST OUTPUTS A CHARACTER WITH ALL DATA
*    BITS SET TO A ONE AND BIT 11 (SYNC BIT) SET
*    TO A ONE.  THE ENABLE BIT IS SET IN THE RECEIVE
*    PARAMETER, NO INTERRUPT SHOULD OCCUR.
      SPC 1 
TST06 EQU * 
SYTST NOP           RETURN ADDRESS
      JSB MCLR,I    MASTER CLEAR MPX
      JSB STCH,I    SET UP PORT NUMBERS 
CH35  CLF CH        CLEAR MPX I/O FLAG
      LDA CW1       SEND CW ENA=0 
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW2       REC CW ENA=1 ECHO=0 DIAG=0
      LDB PORT2     REC PORT NUMBER 
      JSB OUT,I     CONFIGURE REC PORT
      LDA DAT2      DATA= ALL ONES + SYNC=1 
      LDB PORT1     SEND PORT 
      JSB OUT,I     TRANSMIT DATA 
      JSB SFS,I     TEST FOR INTERRUPT
      JMP SYC01     CONTINUE
      JSB ERMS,I    SYNC TEST FAILED
      DEF M51 
SYC01 JSB MCLR,I    MASTER CLEAR MPX
      JSB CK21A     CHECK FOR 12921A
      JMP SYTST,I   RETURN
      JSB STCH,I    SET UP PORT NO. 
CH70  CLF CH        CLEAR MPX I/O FLAG
      LDA CW6       SEND CW ENA=0 PTY=1 
      LDB PORT1     SEND PORT NO. 
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW2       REC CW ENA=1 ECHO=0 DIAG=0
      LDB PORT2     REC PORT NO.
      JSB OUT,I     CONFIGURE REC PORT
      LDA DAT2      DATA=ALL ONES + SYNC=1
      LDB PORT1     SEND PORT 
      JSB OUT,I     TRANSMIT DATA 
      JSB SFS,I     TEST FOR INTERRUPT
      JMP SYC02     CONTINUE
      JSB ERMS,I    SYNC TEST FAILED - SHOULD'NT INT
      DEF M52 
SYC02 JMP SYTST,I   RETURN
      HED LOST - LOST-CHARACTER - 12921 ASYNC MPX 
*  LOST-CHARACTER TEST - THIS TEST SENDS TWO
*    CHARACTERS TO A RECEIVE PORT WITHOUT 
*    ACKNOWLEDGING THE INTERRUPTS. THIS CONDITION 
*    IS FLAGGED BY SETTING BIT 1 (LOST-CHAR) OF THE 
*    STATUS WORD TO A ONE.
      SPC 1 
TST07 EQU * 
LOTST NOP           RETURN ADDRESS
      JSB MCLR,I    MASTER CLEAR MPX
      JSB STCH,I   SET UP PORT NUMBERS
CH47  CLF CH        CLEAR MPX I/O FLAG
      LDA CW1       SEND CW ENA=0 
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     CONFIGURE SEND PORT 
      LDA CW2       REC CW ENA=1
      LDB PORT2     REC PORT NUMBER 
      JSB OUT,I     CONFIGURE REC PORT
      LDA DAT1      SEND DATA 
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     TRANSMIT DATA 
      LDA TIMC      DELAY 
      JSB TMRR,I    CALL TIMER
CH68  LIA CH+1      READ STATUS 
      RAR           POSITION BIT 1
      SLA           OK IF ZERO
      JMP LOC01     ERROR LOST-CHAR SHOULD BE ZERO
      LDA DAT1      LOAD DATA 
      LDB PORT1     SEND PORT NUMBER
      JSB OUT,I     TRANSMIT DATA 
      LDA TIMC      DELAY 500 MS
      JSB TMRR,I    CALL TIMER
      LDA DAT1
      LDB PORT1 
      JSB OUT,I 
      LDA TIMC      DELAY 500 MS
      JSB TMRR,I    CALL TIMER
CH50  CLF CH
      LDA TIMC      DELAY 500 MS
      JSB TMRR,I    CALL TIMER
CH69  LIA CH+1      READ STATUS 
      RAR           POSITION BIT 1
      SLA           LOST-CHAR SHOULD BE SET 
      JMP CH54      CONTINUE
LOC01 JSB ERMS,I    CHARACTER LOST FAILED 
      DEF M53 
CH54  CLF CH        ACKNOWLEDGE 
      NOP            RECEIVED 
CH55  CLF CH           INTERRUPT
      JMP LOTST,I   RETURN
      HED  COMMON SUBRTNS - 12921 ASYNC MPX 
      SPC 1 
STCHI NOP          SET UP PORT 1 & 2
      LDA MPXCH     GET PORT NUMBERS
      AND BT4       ISOLATE AUTO MODE BIT 
      SZA           TEST FOR 2 CH'S OR ALL 16?
      JMP ALL16     YES, ALL 16 
      LDA MPXCH     GET PORT NUMBERS
      AND A17       NO, 2 ONLY
      STA PORT1     SAVE PORT 1 
      LDA MPXCH     GET SECOND PORT NUMBER
      ALF,ALF       POSITION
      RAL,RAL 
      AND A17       MASK OFF BITS 3-0 
      STA PORT2     STORE SECOND CH NO
      JMP STCHI,I   RETURN
ALL16 CLA          CONFIGURE PORT NUMBER FOR ALL 16 
      STA PORT1    FIRST PORT NUMBER
      INA 
      STA PORT2     SECOND PORT NUMBER
      LDA MPXCH     SET AUTO BIT
      IOR BT4 
      STA MPXCH     SAVE
      JMP STCHI,I  FRETURN
      SPC 1 
      SPC 1 
ERRAI NOP          E031 REC CH XX DID INTRUPT 
      LDA PORT2     GET REC CH NUMBER 
      JSB DECIN     CONVER TO DECIMAL 
      LDA CVT2       AND STORE NUMBER 
      STA M31A,I       IN ZZ OF MESSAGE 
      LDA PORT2     GET RECV PORT NO
      JSB ERMS,I    REPORT ERROR
      DEF M31 
      JMP ERRAI,I 
      SPC 1 
ERRBI NOP           E033 REC PORT # WAS XX S/B YY 
CH53  LIA CH        GET ACTUAL PORT NUMBER
      AND B7600     MASK OFF PORT NUMBER
      ALF,ALF       POSITION PORT NUMBER
      RAR,RAR        IN BITS 0-4
      STA SAVEA     STORE NUMBER ACTUAL 
      JSB DECIN     CONVERT PORT NUMBER 
      LDA CVT2       TO DECIMAL AND 
      STA M33A,I        STORE IN MESSAGE XX 
      LDA PORT2     EXPECTED PORT NO. 
      JSB DECIN     CONVER NUMBER TO
      LDA CVT2       DECIMAL AND
      STA M33B,I    STORE IN MESSAGE YY 
      LDA SAVEA     ACTUAL
      LDB PORT2     EXPECTED
      JSB ERMS,I    REPORT ERROR
      DEF M33 
      JMP ERRBI,I   RETURN
      SPC 1 
ERRCI NOP 
      LDA PORT2     AUX REC PORT
      JSB DECIN     CONVERT TO DECIMAL
      LDA CVT2       AND STORE NUMBER 
      STA M47A,I    IN XX OF MESSAGE
      LDA PORT2     AUX REC PORT
      JSB ERMS,I    REPORT ERROR
      DEF M47 
      JMP ERRCI,I   RETURN
      SPC 1 
ERRDI NOP 
      LDA PORT1     SEND PORT NUMBER
      JSB DECIN     CONVERT TO DECIMAL
      LDA CVT2        AND STORE NUMBER
      STA M30A,I    IN XX OF MESSAGE
      LDA PORT1     SEND PORT NO. 
      JSB ERMS,I    REPORT ERROR
      DEF M30 
      JMP ERRDI,I   RETURN
      SPC 1 
ERREI NOP           E032 SEND PORT # IS XX S/B YY 
      STA SAVEA     STORE ACTUAL PORT NO. 
      JSB DECIN     CONVERT TO DECIMAL
      LDA CVT2        AND STORE NUMBER
      STA M32A,I    IN XX OF MESSAGE
      LDA PORT1     EXPECTED PORT NO. 
      JSB DECIN     CONVERT TO DECIMAL
      LDA CVT2        AND STORE NUMBER
      STA M32B,I    IN YY OF MESSAGE
      LDA SAVEA     ACTUAL
      LDB PORT1 
      JSB ERMS,I    REPORT ERROR
      DEF M32 
      JMP ERREI,I 
      SPC 1 
ERRFI NOP 
      STA SAVEA     STORE RECEIVED DATA 
      LDA MSK0      GET MASK
      AND DS        MASK OFF SEND DATA
      STA SAVEB     STORE DATA
      JSB CNVRT     CONVERT 
      LDA CVT3        AND STORE 
      STA M34A,I    IN XX AND 
      LDA CVT2           YY OF
      STA M34AA,I   MESSAGE 
      LDA MSK0      GET MASK
      AND SAVEA     MASK OFF REC DATA 
      STA SAVEA     STORE DATA
      JSB CNVRT     CONVERT 
      LDA CVT3        AND STORE 
      STA M34B,I    IN XX AND 
      LDA CVT2           YY OF
      STA M34BB,I   MESSAGE 
      LDA PORT2     REC PORT NUMBER 
      STA SAVE1     STORE NUMBER
      JSB DECIN     CONVERT TO DECIMAL
      LDA CVT2        AND STORE NUMBER
      STA M34C,I    IN XX OF MESSAGE
      LDA SAVEA 
      LDB SAVEB 
      JSB ERMS,I    REPORT ERROR
      DEF M34 
      LDB BT14      CHECK FOR NO ERROR HALTS
      JSB SWRT,I
      JMP ERRFI,I   RETURN - NO ERROR HALTS 
      LDB 112B      CHECK FOR TELEPRINTER PRESENT 
      LDA PORT2     GET PORT NO 
      SZB,RSS 
      OCT 106034    SECOND HALT FOR DISPLAY OF PORT NO
      JMP ERRFI,I    RETURN 
      SPC 1 
ERRGI NOP 
      LDA PORT2     AUX REC PORT
      JSB DECIN    CONVERT TO DECIMAL 
      LDA CVT2        AND STORE NUMBER
      STA M46A,I    IN XX OF MESSAGE
      LDA PORT2     AUX REC PORT
      JSB ERMS,I    REPORT ERROR
      DEF M46 
      JMP ERRGI,I   RETURN
      SPC 1 
ERRHI NOP 
      LDA PORT1     REC PORT NUMBER 
      JSB DECIN     CONVERT TO DECIMAL
      LDA CVT2        AND STORE NUMBER
      STA M50A,I    IN XX OF MESSAGE
      LDA PORT1     RECV PORT NO. 
      JSB ERMS,I    REPORT ERROR
      DEF M50 
      JMP ERRHI,I   RETURN
      SPC 1 
      SPC 1 
*  THIS SR REVERSE  THE TWO PORT NUMBERS TO ALLOW 
*    EACH OF THE TWO SEND AND RECEIVE PORTS 
*    CONNECTED TO THE TEST CABLE TO BE TESTED IN
*    BOTH DIRECTION.
      SPC 1 
RCHI  NOP           REVERSE PORT NUMBER 
      LDA PORT1     INTER PORTGE
      LDB PORT2     PORT1 
      STA PORT2      WITH 
      STB PORT1       PORT2 
      JMP RCHI,I    FINISHED
      SPC 1 
OUTI  NOP          OUTPUT PARAMETERS OR DATA
      STB PORT          TO PORT 'PORT'
      CLB 
      STB SAVEB     TEMP STORAGE
CH66  LIB CH+1      GET SEEK BIT
      SSB,RSS       CHECK SEEK BIT
      JMP CH45      SEEK = 0
      ISZ SAVEB     SEEK = 1
      JMP CH66      LOOP
      JSB ERMS,I    SEEK BIT =1 SHOULD BE 0 
      DEF M54 
CH45  OTA CH
      LDA PORT
      ALF,ALF       POSITION PORT NUMBER
      RAL,RAL        IN BITS 14 - 11
CH67  OTA CH+1      PORT TO UPPER SELECT CODE 
CH46  STC CH        SEND
      JMP OUTI,I    RETURN
      SPC 1 
* DECIN 
*  CONVERTS DECIMAL INTEGERS TO ASCII 
*  A=VALUE ON INPUT 
*  CNVT1 = FIRST TWO DIGITS ON EXIT 
*  CNVT2 = SECOND TWO DIGITS ON EXIT
      SPC 1 
DECIN NOP 
      CCB           B = -1
DLP1  ADA M1000     ASSUME INTEGER LESS THAN 10000
      INB           COUNT UP THOUSANDS PART 
      SSA,RSS       SKIP WHEN B REG IS CORRECT
      JMP DLP1
      ADA D1000     RESTORE 
      BLF,BLF 
      ADB MM1 
DLP2  ADA MM100 
      INB           COUNT UP HUNDREDS PART
      SSA,RSS       SKIP WHEN B REG IS CORRECT
      JMP DLP2
      ADA D100      RESTORE 
      ADB ASCZZ 
      STB CVT1
      CCB 
DLP3  ADA MM10
      INB           COUNT UP TENS PART
      SSA,RSS       SKIP WHEN B REG IS CORRECT
      JMP DLP3
      ADA D10       RESTORE 
      BLF,BLF 
      IOR B 
      IOR ASCZZ 
      STA CVT2
      JMP DECIN,I 
      SPC 1 
*  THE CNVRT ROUTINE CONVERTS THE SINGLE WORD IN THE A
*  REG. TO THREE ASCII WORDS (OCTAL) IN CVT1, CVT2, AND CVT3. 
CNVRT NOP 
      STA TEMP5     SAVE WORD 
      LDB A         WORD TO B ALSO
      ALF 
      AND D7
      SSB 
      IOR BIT8      ONE FOR LEFT OCTAL DIGIT
      IOR ASCZZ 
      STA CVT1
      LDA TEMP5     GET WORD BACK 
      ALF,ALF 
      RAL,RAL 
      AND A0077     LEAVE TWO DIGITS
      LDB A         SAVE FOR A WHILE
      ALF,RAL       LEFTMOST TO POSITION
      IOR B          OR THE TWO TOGETHER
      AND B3407 
      IOR ASCZZ 
      STA CVT2
      LDA TEMP5     GET WORD BACK 
      AND A0077     LEAVE LAST TWO DIGITS 
      LDB A 
      ALF,RAL 
      IOR B 
      AND B3407 
      IOR ASCZZ 
      STA CVT3      SAVE RIGHTMOST DIGITS 
      JMP CNVRT,I   RETURN
      SPC 1 
MCLRI NOP           CLEAR 256 BIT MEMORY
      JSB CK21A     CHEK FOR 12921A 
      JMP MCLRA     CONTINUE - 12921A 
      CLC 0,C       ZAP 
      CLB           CLEAR B-REG 
CH65  LIA CH+1      CHECK SEEK BIT
      SSA,RSS       SEEK = 1 ?
      JMP MCL1      = 0 
      INB,SZB       = 1 
      JMP CH65      LOOP
      JSB ERMS,I    REPORT ERROR SEEK AFTER CLC 0 
      DEF M55 
      JMP MCLRI,I   EXIT
MCL1  SZB 
      JMP CH59      CONTINUE
      JSB ERMS,I    NO SEEK AFTER CLC 0 
      DEF M56 
CH59  CLF CH        CLEAR I/O FL
      JMP MCLRI,I   FINISHED
MCLRA CLA 
CH74  OTA CH        CLEAR INTERFACE 
CH75  OTA CH+1
      CLC 0,C       DO 65K CLC 0'S
      CLC 0,C       ZAP 
      CLC 0,C       ZAP 
      CLC 0,C       ZAP 
      ISZ A         LOOP 65K
      JMP CH75+1      TIMES 
CH76  CLF CH        CLEAR I/O FL
      JMP MCLRI,I   FINISHED - RETURN 
      SPC 1 
SFSI  NOP          TEST CHANNEL FLAG
      LDA M300      EXIT
      STA SAVE        P+1 
SFS.1 ISZ SAVE          IF
      RSS                 FLAG
      JMP SFSI,I             DID'NT SET 
CH56  SFS CH        IS FLAG SET ? 
      JMP *+3       NO
      ISZ SFSI      FLAG IS SET 
      JMP SFSI,I    RETURN P+2, FLAG IS SET 
      CLA,INA       DELAY FOR 
      JSB TMRR,I      1 MS OF TIME
      JMP SFS.1     LOOP
      HED  MESSAGES 
***       MESSAGES       ***
      SPC 1 
      SUP 
M30   ASC 8,E030 SEND PORT
      ASC 11,XX DID NOT INTERRUPT/
M31   ASC 9,E031 RECEIVE PORT 
      ASC 11,XX DID NOT INTERRUPT/
M32   ASC 13,E032 SEND PORT NUMBER IS 
      ASC 9,XX SHOULD BE  YY/ 
M33   ASC 14,E033 RECEIVE PORT NUMBER IS
      ASC 9,XX SHOULD BE  YY/ 
M34   ASC 15,E034 DATA RECEIVED ON PORT  XX 
      ASC 13, IS XXXX SHOULD BE  YYYY/
M35   ASC 14,E035 S-R BIT SHOULD BE SET/
M36   ASC 15,E036 S-R BIT SHOULD BE RESET/
M37   ASC 17,E037 BREAK BIT SHOULD NOT BE SET/
M40   ASC 17,E040 BREAK BIT SHOULD NOT BE SET/
M41   ASC 15,E041 BREAK BIT SHOULD BE SET/
M42   ASC 15,E042 PARITY BIT SHOULD BE SET/ 
M43   ASC 14,E043 RAW PARITY BIT 7 ERROR/ 
M44   ASC 10,E044 PARITY BIT SET/ 
M45   ASC 14,E045 RAW PARITY BIT 7 ERROR/ 
M46   ASC 16,E046 SEND DATA NOT ON AUXILIARY
      ASC 5,PORT  XX/ 
M47   ASC 18,E047 RECEIVED DATA NOT ON AUXILIARY
      ASC 5,PORT  XX/ 
M50   ASC 13,E050 NO ECHO ON PORT  XX/
M51   ASC 11,E051 SYNC TEST FAILED/ 
M52   ASC 15,E052 SYNC TEST FAILED (PTY=1)/ 
M53   ASC 14,E053 CHARACTER LOST FAILED/
M54   ASC 12,E054 SEEK BIT IS A ZERO
      ASC 8,SHOULD BE A ONE/
M55   ASC 17,E055 SEEK STAYED SET AFTER CLC 0/
M56   ASC 18,E056 SEEK FAILED TO SET AFTER CLC 0/ 
HDMS  OCT 6412
      ASC 11,ASYNC MULTIPLEXER DATA 
      ASC 9, BOARD DIAGNOSTIC 
HDM1  ASC 7,  DSN XXXXXX//
FWAA  EQU *         FIRST WORD OF AVAILABLE MEMORY
      END 
                                                                                                                                                                                                          