*     SUBROUTINE TO CHECK FOR DMA IN CONFIGURATION
*     TEST  15
* 
CHCON NOP           ENTRY POINT 
      LDA CPTO      GET CONFIGURATION WORD
      AND .4        MASK TO DMA BIT 
      SZA           IS DMA PRESENT? 
      JMP CHCON,I   YES 
      JSB NONO      NO, ISSUE MESSAGE OF NO DMA 
      SPC 1 
*     SUBROUTINE TO CHECK DMA RESIDUE 
*     TEST 15 
* 
CHRES NOP           ENTRY POINT 
      CLC 6,C       DISABLE DMA 
      STC 2 
      LIA 2         READ RESIDUE
      AND DMAMA     MASK IN CASE 2116, 2114 
      CPA DMA50     EQUUAL TO -50?
      JMP CHRES,I   YES, EXIT 
* 
      STA RESID     SAVE FOR ERROR MESSAGE
      LDA .5        ERROR CODE = 5
      ISZ CHRES 
      JMP CHRES,I   ERROR EXIT
* 
DMAMA OCT 17777 
DMA50 OCT 17716 
RESID NOP 
      SKP 
* 
*     SUBROUTINE TO FIND OUT WHAT KIND OF ERROR IT IS 
* 
ERRS  NOP           ENTRY POINT 
* 
      SSA           WAS IT A FLAG NOT SET 
      JMP TETX2     YES 
* 
      CPA .10       IS IT A STATUS WORD FLAG? 
      JMP TETX4     YES 
* 
      CPB .1        TIME TO EXIT? 
      JMP ERRS,I    YES 
* 
      SZA,RSS       WAS IT A RCVR ABORT?
      JMP TETX1     YES 
* 
      CPB .2        TIME TO EXIT? 
      JMP ERRS,I    YES 
* 
      CPA .1        IT IS A COMPARE ERROR?
      JMP TETX5     YES 
* 
      JMP ERRS,I    EXIT
      SPC 4 
CRLF  NOP           ENTRY POINT 
      JSB MS,I      OUTPUT CARRIAGE RETURN
      DEF *+3        AND LINE FEED
      DEF *+1 
      ASC 1,/ 
      JMP CRLF,I    EXIT
      SPC 4 
DMAS  JMP *+1,I     INDIR JMP INSTR TO BE STORED IN TRAP CELL 
      DEF DMAIN       WITH LINK TO DMA INTP ROUTINE 
      SKP 
*         CONFIGURATION SECTION 
* 
      ORG 1760B 
* 
CONF  LIA 1         GET SELECT CODE 
      STA USSC      SAVE IT 
      AND .77       MASK OFF THE SC ENTERED 
      LDB A           AND CHECK IF IT IS
      CMB,INB           > 7.
      ADB .7
      SSB 
      JMP *+4       YES, VALID SC ENTERED 
      JSB STOP
      HLT 73B       NO, INVALID SC ENTERED
      JMP CONF      RETURN FOR NEW CONFIGURATION
      STA SC        SAVE SC 
      CLA           CLEAR S-REG 
      OTA 1 
      JSB STOP
      HLT 74B       OPERATOR ENTERS OPTIONS 
      CLC 0,C       TURN EVERYTHING OFF 
      LDA IODL      GET USER DEF LIST 
      STA TMP       SAVE IT AS A POINTER
IOL   LDB TMP,I     GET ADDRESS OF LOCATION 
      CPB .M1       IS IT -1 ?
      JMP TSHLT     PUT HALTS IN TRAP CELLS 
      LDA B,I       NO - GET CONTENTS 
      AND MSKSC     MASK OFF SELECT CODE
      IOR SC        ADD IN NEW SELECT CODE
      STA B,I       RESTORE  IT 
      ISZ TMP       MOVE TO NEXT ADDRESS
      JMP IOL       DO IT 
      SPC 4 
*         PUT HALTS IN ALL TRAP CELLS 
* 
TSHLT LDA TSH4      GET STARTING TRAP CELL HALT 
      LDB .4        GET FIRST TRAPCELL ADDRESS
TSHL  STA B,I       PUT IT IN PLACE 
      INA           MOVE TO 
      INB             NEXT ADDRESS
      CPB SC        IS IT THE TBG?
      STA HLTSC     YES - SAVE FOR LATER
      CPB .100      AM I FINISHED?
      JMP EXEC      YES - GO TO EXEC CONTROL
      JMP TSHL      NO
* 
MSKSC OCT 177700
TSH4  OCT 106004
      SKP 
* 
*         EXECUTIVE CONTROL 
* 
EXEC  CLA           CLEAR PASS
      STA EOLC       COUNT
      CCA           SET TEST NO = -1
      STA TST#
      JSB CRLF      DO CARRIAGE RETURN, LINE FEED 
      LDB SW9       CHECK FOR USER SELECTION REQUEST
      JSB SWR,I 
      JMP USR       IT'S USERS CHOICE 
NUSR  LDA .M1       GET STANDART TEST RUN 
      LDB .M1       * 
      JMP EXC 
USR   LIA 1         CLEAR S-REG BIT 9 
      AND NBIT9 
      OTA 1 
      LDA SUINA     LOAD A-REG WITH TEST SELETION 
      CLB 
      JSB STOP
      HLT 75B       WAIT FOR USER INPUT 
REST  SZA,RSS           INPUT?
      JMP NUSR      NO - DO ALL OF THEM 
* 
* 
EXC   STA UINA      SAVE
      STB UINB        USER
      STA SUINA         INPUT 
      STB SUINB           PROGRAM 
      LDB SW9       CHECK IF SW9 IS DOWN
      JSB SWR,I 
      RSS           RETURN IF SWITCH IS SET 
      JMP *+4       OK GO ON (RETURN IF SWITCH IS CLEARED 
USR1  LDA SUINA     RESTORE ORIGINAL PROGRAM
      LDB SUINB     * 
      JMP USR       NOW GO BACK AND WAIT
      CCA           SET TEST NUMBER 
      STA TST#      =-1 
      SKP 
EXCL  LDA UINA      RESTORE A REG.
      LDB UINB      RESTORE B REG.
      ERA,RAL       ROTATE
      ERB             FIRST 
      ERA               TEST BIT
      STA UINA      SAVE POSITIONS
      STB UINB
      ISZ TST#      MOVE TEST UP ONE
      NOP 
      LDA TST#
      CPA .10       FINISHED WITH BASIC?
      JSB EXBC      YES - TELL OPERATOR 
EXCL1 LDA TST#
      ADA DFPA      GET IT'S
      LDA A,I         ADDRESS 
      CPA .M1       IS IT END OF LIST 
      JMP EOL       YES 
      LDB UINB
      SSB,RSS       SHOULD IT BE RUN? 
      JMP EXCL      NO
      STA TMP       SAVE FOR CALL 
      JSB INIT      INITIALIZE
      LDA EXECR 
      STA TSTX
      SKP 
      JSB TMP,I     YES 
EXCR  CLC 0,C       TURN OFF INTERRUPT SYSTEM 
      LDA HLTSC     RESTORE TRAP CELL 
      STA SC,I       HALT 
      LDB SW15      CHECK FOR HALT AT END OF TEST 
      JSB SWR,I 
      RSS 
      JMP *+4       NO - CONTINUE 
      LDA TST#      YES - DISPLAY TEST NUMBER 
      JSB STOP
      HLT 76B       WHEN HALTED 
      LDB SW9       CHECK FOR ABORT 
      JSB SWR,I 
      JMP USR1      YES 
      LDB SW13      CHECK FOR LOOP ON ROUTINE 
      JSB SWR,I 
      JMP EXCL1     YES - LOOP
      JMP EXCL      CONTINUE
* 
* 
EOL   ISZ EOLC      COUNT THIS TEST 
      STA TST#      DON'T PRINT TEST #
      LDB SW12      CHECK FOR LOOP ON ALL TESTS 
      JSB SWR,I 
      JMP EXCNT     CONTINUE WITH ANOTHER LOOP
      CLE           CONVERT THE PRESENT PASS
      LDA EOLC        COUNT TO ASCII AND STORE
      LDB PSCP          IT INTO THE MESSAGE.
      JSB O2ASC,I 
      JSB MSG       OUTPUT "TEST COMPLETE"
      DEF .EOL
      DEF *+1 
PSCT  ASC 14,DIAG COMPLETE, PASS XXXXXX/
.EOL  LDB SUINB     RESTORE ORIGINAL PROGRAM
      JSB STOP
      LDA EOLC      LOAD DIAGNOSTIC LOOP COUNT
      HLT 77B       WAIT FOR ANY CHANGES
      LDA SUINA     RESTORE ORIGINAL PROGRAM
      JMP REST      GO TO IT
EXCNT JSB CRLF      DO CARRIAGE RETURN, LINE FEED 
      CCE 
      LDA EOLC
      LDB EOLCP 
      JSB O2ASC,I 
      JSB MSG       OUTPUT "PASS #" 
      DEF ..EOL 
      DEF *+2 
EOLC  NOP           DIAG LOOP COUNT 
      ASC 6,PASS XXXXXX/
..EOL JSB CRLF      DO CARRIAGE RETURN, LINE FEED 
      LDA SUINA     RESTORE ORIGINAL
      LDB SUINB       PROGRAM 
      JMP EXC       DO IT ALL AGAIN 
      SKP 
*     BASIC I/O COMPLETE
* 
EXBC  NOP           ENTRY POINT 
      CLA 
      STA TST#      DON'T PRINT TEST NUMBER 
      LDA SUINA     CHECK IF ANY
      AND EXBCM     BASIC TESTS DONE
      SZA,RSS       ? 
      JMP EX.BC     NO - SKIP IT
      JSB MS,I      YES - PRINT COMPLETE MESSAGE
      DEF EXBC. 
      DEF *+1 
      ASC 14,BASIC I-O (TESTS 1-7) COMP/
EXBC. LDA USSC      CHECK FOR 2 CPU 
      AND BIT8       CONFIGURATION
      SZA,RSS       SKIP IF TRUE
      JMP EX.BC     NOT TRUE, NO HALT 
* 
      JSB MS,I      OUTPUT MESSAGE
      DEF E.XBC     RETURN
      DEF *+1 
      ASC 17,START RCVR AND XMTR AT SAME TIME/
* 
E.XBC JSB STOP
      OCT 106000     WAIT FOR OPERATOR RESPONSE 
* 
EX.BC LDA .10 
      STA TST#      RESTORE TEST NUMBER 
      JMP EXBC,I    EXIT
* 
EXBCM OCT 376 
* 
SUINA NOP 
SUINB NOP 
UINA  NOP 
UINB  NOP 
EXECR DEF EXCR
      SKP 
* 
*         ERROR REPORTING 
* 
*         CALLING SEQUENCE: 
* 
*         JSB ERR 
*         DEF RTN 
*         DEF <FORMAT ADDRESS OF ERROR MESSAGE> 
*         NOP <NUMBER REQUIRED FOR ERROR MESSAGE (A REG.)>
*         NOP <NUMBER REQUIRED FOR ERROR MESSAGE (B REG.)>
*         NOP <NUMBER REQUIRED FOR ERROR MESSAGE> 
*         . 
*         . 
*   RTN   EQU * <NEXT EXECUTABLE INSTRUCTION> 
* 
*         NOTE IF THE FORMAT STARTING ADDRESS IS
*         MISSING THE MESSAGE WILL BE OMITED
* 
* 
ERR   NOP 
      CLC 0,C       TURN OFF I/O SYSTEM 
      LDB SW11      CHECK IF SUPRESS ERROR MESSAGES 
      JSB SWR,I 
      JMP CKEH      YES 
      LDA ERR       NO
      JSB OPMSG     OUTPUT MESSAGE
* 
CKEH  LDB SW14      CHECK IF HALT ON ERRORS 
      JSB SWR,I 
      RSS 
      JMP *+3 
ERREX LDA ERR,I     GET RETURN ADDRESS
      JMP A,I       RETURN TO CALLER
      LDA TST#      SET HALT NUMBER 
      AND .77       INSURE NOT GREATER THAN 77
      IOR EHLT
      STA EHLT0     PUT IT IN PLACE 
      LDB ERR       GET A REG 
      ADB .2          AND 
      LDA B,I           BREG. 
      INB                 FOR DISPLAY WHEN
      LDB B,I 
      JSB STOP
EHLT0 NOP 
      JMP ERREX     CONTINUE
* 
EHLT  HLT 0 
      SKP 
*         NON-ERROR MESSAGES REPORTING
* 
*     CALLING SEQUENCE: 
* 
*         JSB MSG 
*         DEF RTN 
*         DEF <FORMAT STARTING ADDRESS> 
*         NOP <NUMBER FOR FORMAT> 
*         . 
*         . 
*   RTN   EQU * <NEXT EXECUTING INSTRUCTION>
* 
* 
MSG   NOP 
      CLC 0,C       TURN OFF I/O SYSTEM 
      LDA TST#      IS IT CR-LF CALL? 
      INA,SZA,RSS   TEST IF TST# WAS -1 
      STA TST#      YES, CLEAR TST# 
      LDB SW10      NO, CHECK IF SUPRESSED
      JSB SWR,I 
      JMP MSGEX     YES, EXIT 
MSG2  LDA MSG       NO - OUTPUT MESSAGE 
      JSB OPMSG     OUTPUT MESSAGE
MSGEX LDA MSG,I     GET RETURN ADDRESS
      JMP A,I       RETURN TO CALLER
      SKP 
OPMSG NOP           ENTRY TO OUTPUT A MESSAGE 
      INA 
      LDB A,I       GET FORMAT ADDRESS
      INA 
      STA NUA       SAVE NUMBER ADDRESS 
      STB FPTA      SAVE FORMAT STARTING ADDRESS
      SZB,RSS       IS THERE A MESSAGE
      JMP OPMSG,I   NO
      LDB BIT8      CHECK IF FAST DEVICE
      JSB SWR,I      WAS REQUESTED
      CLA,CCE,RSS   YES 
      CLA,CLE 
      LDB TST#      DO WE WANT TEST # 
      SZB,RSS       YES 
      JMP MSGA      NO, DON'T PRINT IT
      LDB TSTF
      JSB FMTR,I    OUTPUT "TST"
      LDB TST#
      JSB FMTR,I    OUTPUT NUMBER 
      LDB BIT8
      JSB SWR,I 
      CLA,CCE,RSS 
      CLA,CLE 
MSGA  LDB FPTA      RETRIEVE MESSAGE
      JSB FMTR,I    START FORMAT
MSGL0 CPA .43       IS THERE ANY NUMBER REQUESTED 
      RSS 
      JMP OPMSG,I   NO
      LDB NUA,I     YES GET NUMBER
      CCA 
      JSB FMTR,I    OUTPUT IT 
      ISZ NUA       MOVE TO NEXT NUMBER 
      JMP MSGL0 
NUA   NOP 
FPTA  NOP 
TSTF  DEF *+1 
      ASC 4,TEST #/ 
* 
.43   OCT 43
      SKP 
SDS   EQU *         SUB DEF START 
      DEF TST0
      DEF TST1
      DEF TST2
      DEF TST3
      DEF TST4
      DEF TST5
      DEF TST6
      DEF TST7
      DEF TST8
      DEF TST9
      DEF TST10 
      DEF TST11 
      DEF TST12 
      DEF TST13 
      DEF TST14 
      DEF TST15 
      DEC -1
      SPC 5 
* 
IODS  EQU *         I/O DEF START 
      DEF T2SC1 
      DEF T2SC2 
      DEF T2SC3 
      DEF T3SC1 
      DEF T3SC2 
      DEF T3SC3 
      DEF T3SC4 
      DEF T3SC5 
      DEF T3SC6 
      DEF T3SC7 
      DEF T4SC1 
      DEF T4SC2 
      DEF T5SC1 
      DEF T5SC2 
      DEF T5SC3 
      DEF T6SC1 
      DEF T6SC2 
      DEF T6SC3 
      DEF T6SC4 
      DEF T6SC5 
      DEF T6SC6 
      DEF T7SC1 
      DEF T7SC2 
      SKP 
*     HWSIC UNIQUE SETTINGS 
* 
      DEF ISC1
      DEF ISC2
      DEF ISC3
      DEF ISC4
      DEF ISC7
      DEF XSC1
      DEF RSC1
      DEF LSC1
      DEF FSC1
      DEF FSC2
      DEF ESC1
      DEF ESC2
      DEF ESC3
      DEF ESC4
      DEF ESC5
      DEF ESC6
      DEF ESC7
      DEF WSC1
      DEF WSC2
      DEF WSC3
      DEF CXSC1 
      DEF CXSC2 
      DEF CRSC1 
      DEF CHSC1 
      DEF CHSC2 
      DEF CWSC1 
      DEF CWSC2 
      DEF SSC1
      DEF SSC2
      DEF SSC3
      DEF ESC8
      DEF ESC9
      DEF ESC10 
      DEF ESC11 
      DEF ESC12 
      DEF ESC14 
      DEF FXSC1 
      DEF FXSC2 
      DEF T13C1 
      DEF T13C2 
      DEF T13C3 
      DEF T13C4 
      DEF T13C5 
      DEF T13C6 
      DEF T13C7 
      DEF T13C8 
      DEF T13C9 
      SKP 
      DEF CW1 
      DEF DSCX1 
      DEF DSCR1 
      DEF ISC5
      DEF ISC6
      DEF ISC8
      DEF HXSC1 
      DEF HXSC3 
      DEF HXSC4 
      DEF HXSC5 
      DEF XSTA3 
      DEF RSTA1 
      DEF TXMI1 
      DEF TXMI2 
      DEF TRCV1 
      DEC -1
      SKP 
* 
*     TEST 0  HEADING 
* 
TST0  NOP 
      CLE           ADD DSN TO HEADER MESSAGE 
      LDA DSN         BY GETTING DSN
      LDB DSNP          SPECIFY STORAGE POINTER 
      JSB O2ASC,I         & CONVERT STRING TO ASCII 
      JSB MS,I
      DEF TST0,I
      DEF *+1 
      ASC 20,HARDWIRED SERIAL INTERFACE DIAGNOSTIC, 
DSNB  ASC 6,DSN XXXXXX/ 
DSNP  DEF DSNB+2
* 
      SKP 
* 
*         TEST 1  STF 0 - CLF 0 - SFS 0 - SFC 0 
* 
TST1  NOP P
      LDA LPCNT     SET LOOP
      STA CNTR        COUNTER 
      LDA HLT0      PUT HALT TRAP IN AREG.
TLT1  CLB 
      STF 0         * 
      RSS           SAFTY FOR BAD SKP LINE
      JMP TET1      REPORT ITS BAD
      CLF 0         * 
      LDB .1        .1
      SFC 0         *?
      JMP TET1      *BAD
      LDB .2        .2
      SFS 0         *?
      RSS           * 
      JMP TET1      *BAD
      STF 0         * 
      LDB .3        .3
      SFC 0         *?
      RSS           * 
      JMP TET1      *BAD
      LDB .4        .4
      SFS 0         *?
      JMP TET1      *BAD
      ISZ CNTR      NO LOOP AGAIN?
      JMP TLT1      YES 
      JMP TST1,I    NO - RETURN TO EXEC 
* 
TET1  STB TBT1      INDICATE ERROR
      JSB ER,I      REPORT ERROR
      DEF TST1,I
      DEF *+3 
TBT1  NOP 
      NOP 
      ASC 19,STF 0 - CLF 0 - SFS 0 - SFC 0 FAILURE
      ASC 4,(A = #)/
      SKP 
*         TEST 2 CHECK FOR NO INTERRUPT AFTER CLF 0 
* 
TST2  NOP 
      LDA LPCNT     SET LOOP
      STA CNTR        COUNTER 
TLT2  JSB TCJMP     PUT JMP IN TRAP CELL
      DEF TIT2      RETURN LOCATION IF INTERRUPT
      LDA HLT0
      LDB HLT1
T2SC2 STF TSC       SET THE FLAG FF 
T2SC1 STC TSC       SET THE CONTROL FF
      CLF 0         TURN OFF INTERRUPT SYSTEM 
      NOP           GIVE IT A CHANCE
      NOP 
      NOP 
T2SC3 CLF TSC       RESET TSC FLAG
      ISZ CNTR      LOOP DONE?
      JMP TLT2      NO
      JMP TST2,I
* 
TIT2  JSB ER,I      REPORT ERROR
      DEF TST2,I
      DEF *+1 
      ASC 8,INT AFTER CLF 0/
      SKP 
                                                                                          