ASMB,A,B,L,C
      ORG 100B
* 
*    12604 DIAGNOSTIC PROGRAM 
* 
*    MARCH 1975 
* 
*    STARTING OCTAL ADDRESS = 100 
* 
*    REQUIRES AN SIO TELEPRINTER DRIVER 
* 
*    THE FOLLOWING SWITCH REGISTER SETTINGS 
*       ARE USED FOR PROGRAM CONTROL
* 
*    BIT  0 = 1 -> HALT AT BEGINNING OF PROGRAM 
*    BIT  1 = 1 -> HALT AT END OF SCOPE LOOP
*    BIT  2 = 1 -> LOOP FOR SCOPE TEST
*    BIT  3 = 1 -> PERFORM INITIAL TEST- ITEST
*    BIT  4 = 1 -> PERFORM BASIC TIMING TEST- BTEST 
*    BIT  5 = 1 -> PERFORM TIME DELAY TEST- TTEST 
*    BIT  6 = 1 -> PERFORM INPUT TEST- INTST
*    BIT  7 = 1 -> HOLD COMMAND SCOPE LOOP- HTEST 
*    BIT  8 = 1 -> ENCODE COMMAND SCOPE LOOP- ETEST 
*    BIT 14 = 1 -> LOOP THRU ENTIRE CURRENT TEST(S) 
*    BIT 15 = 1 -> INHIBIT CERTAIN TTY MESSAGES 
      HED 12604 DIAGNOSTIC - MAIN PROGRAM 
      JMP 115B,I    IN PROGRAM LINKAGE
      ORG 105B
      DEF X         FIRST AVAIL MEMORY AFTER PROG 
      ORG 110B      INTERRUPT LINKAGES
      DEF ERROR       ILLEGAL 
      DEF INTR        LEGAL 
      ORG 115B      MAIN PROGRAM
      DEF START       LINKAGE 
      DEF P4
      ORG 200B
      JMP 116B,I
      ORG 2000B 
START CLC 0,C       INTERRUPT SYSTEM OFF
      LIA 1 
      SSA 
      JMP L10 
      LDA ML1       PRINT 1ST MESSAGE 
      LDB MAD1        "12604 DIAGNOSTIC 
      JSB 102B,I         PROGRAM  -   7/71" 
P14   LDA ML9       PRINT 9TH MESSAGE 
      LDB MAD9        "WHAT 
      JSB 102B,I        COMPUTER MODEL?"
L10   LDA RL2       RECEIVE 
      LDB RAD2        REPLY 
      JSB 104B,I        ON TTY KBD
      LDA REP2      CHECK FIRST WORD
      CPA A21         IS IT 21? 
      JMP P20           YES 
P21   LDA ML10          NO - PRINT 10TH MESSAGE 
      LDB MAD10                "NOT VALID"
      JSB 102B,I
      JMP P14 
P20   LDA RFP2      CHECK SECOND WORD 
      CPA A14         IS IT 14? 
      JMP P22           YES 
      CPA A15           NO - IS IT 15?
      JMP P22                  YES
      CPA A16                  NO - IS IT 16? 
      JMP P216                        YES 
      CPA A00                         NO - IS IT 00?
      JMP P200                        YES 
      CPA AMX                         NO -IS IT MX? 
      JMP *+2                                   YES 
      JMP P21         NO - NOT VALID, TRY AGAIN 
      CLA,INA       SET INDICATOR FOR 21MX
      CMA 
      JMP *+6 
P200  CCA           SET INDICATOR FOR 2100
      JMP *+4 
P216  CLA,INA       SET INDICATOR FOR 2116
      JMP *+2 
P22   CLA           SET INDICATOR FOR 2114/2115 
      STA COMP      SAVE INDICATOR
      JMP *+5 
P1    LDA *+3       HALT AT 
      LDB *+2         BEGINNING OF
      CLC 0,C           PROGRAM 
HLT1  HLT 0         102000
      LDB M67       PREPARE 
      LDA HIS         TRAPS 
      STA *+2           FOR 
      LDA HI              ILLEGAL 
      STA 10B               INTERRUPT 
      ISZ *-1                 FROM
      INA                       ANY 
      INB,SZB                     DEVICE
      JMP *-4 
      LIA 1 
      SSA 
      JMP L11 
P2    LDA ML2       PRINT 2ND MESSAGE 
      LDB MAD2        "I/O CHANNEL?"
      JSB 102B,I
L11   LDA RL1       RECEIVE 
      LDB RAD1        REPLY 
      JSB 104B,I        ON TTY KBD
      LDA REP1      CHECK 1ST CHARACTER 
      AND MSK1        FOR VALIDITY
      CPA C1        VALID?
      JMP *+2         YES 
      JMP P2          NO
      LDA REP1      CHECK 
      ALF,ALF         SECOND
      AND MSK1          CHARACTER 
      CPA C1        VALID?
      JMP *+2         YES 
      JMP P2          NO
      LDA REP1      GENERATE
      AND MSK2        DATA
      STA ADDR          SOURCE
      LDA REP1            INTERFACE 
      ALF,ALF               CARD
      AND MSK2                ADDRESS 
      ALF,ARS 
      IOR ADDR
      STA ADDR
      JSB ADIN      ADDRESS INCLUSION 
      LIA 1 
      SSA 
      JMP L12 
P23   LDA ML11      PRINT 11TH MESSAGE
      LDB MAD11       "TYPE "1" FOR 1.0 MSEC DELAY
      JSB 102B,I       TYPE "0" FOR 0.1 MSEC DELAY" 
L12   LDA RL3       RECEIVE 
      LDB RAD3        REPLY 
      JSB 104B,I        ON TTY KBD
      LDA REP3      CHECK WORD
      CPA A1          IS IT 1?
      JMP P24           YES 
      CPA A0            NO - IS IT 0? 
      JMP *+2                  YES
      JMP P23                  NO 
      CLA           SET INDICATOR FOR 0.1 MSEC
      JMP *+2 
P24   CLA,INA       SET INDICATOR FOR 1.0 MSEC
      STA DELAY     SAVE INDICATOR
      JSB DCIDE     GET DLY1 COUNTER
      DEC -5        2114/2115 - 0.1 MSEC
      DEC -44       2114/2115 - 1.0 MSEC
      DEC -7        2116 - 0.1 MSEC 
      DEC -55       2116 - 1.0 MSEC 
      DEC -9        2100 - 0.1 MSEC 
      DEC -60       2100 - 1.0 MSEC 
      DEC -9        21MX - 0.1 MSEC 
      DEC -65       21MX - 1.0 MSEC 
      STA CNT3      SET DLY1 COUNTER
      LIA 1 
      SSA 
      JMP P4
      LDA ML3       PRINT 3RD MESSAGE 
      LDB MAD3        "CONNECT PERIPHERAL DEVICE
      JSB 102B,I         AND PUSH RUN"
      HLT 0 
      SPC 3 
P4    CLB 
P3    JSB MODE1     SWITCH REGISTER STORAGE 
P25   CLB 
      STB TEST
      LDA BIT3
      SLA,RSS 
      JMP *+4 
      JSB ITEST     PERFORM INITIAL TEST
      CLB,INB 
      STB TEST
      LDA BIT4
      SLA,RSS 
      JMP *+4 
      JSB BTEST     PERFORM BASIC TIMING TEST 
      CLB,INB 
      STB TEST
      LDA BIT5
      SLA,RSS 
      JMP *+4 
      JSB TTEST     PERFORM TIME DELAY TEST 
      CLB,INB 
      STB TEST
      LDA BIT6
      SLA,RSS 
      JMP *+3 
      JSB INTST     PERFORM INPUT TEST
      JMP *+4 
      LDB TEST
      SZB,RSS 
      JMP P5
      JSB MODE2     CHECK BIT 14 FOR LOOP 
      LIA 1         CHECK SWITCH REGISTER 
      RAR,RAR         TO ADD
      RAR,RAR           EXTRA 
      STA BIT4           TESTS
      RAR                 TO
      STA BIT5             LOOP 
      RAR 
      STA BIT6
      JMP P25 
P5    LDA BIT7
      SLA,RSS 
      JMP P6
      JSB HTEST     PERFORM HOLD COMMAND LOOP TEST
      JSB MODE2     CHECK BIT 14 FOR LOOP 
      JMP *-2 
P6    LDA BIT8
      SLA,RSS 
      JMP P4
      JSB ETEST     PERFORM ENCODE COMMAND LOOP TEST
      JSB MODE2     CHECK BIT 14 FOR LOOP 
      JMP *-2       END OF MAIN PROGRAM 
      SPC 3 
* 
*    SWITCH REGISTER STORAGE ROUTINE - ONE
* 
MODE1 NOP           ENTER 
P7    LIA 1         READ SWITCH REGISTER
      AND MSK5      ISOLATE BITS 0,3,4,5,6,7, & 8 
      SLA           HALT AT START?
      JMP P1          YES 
      SZA             NO - CHECK FOR A MODE 
      JMP P8                 MODE SET 
      CLB                    NO MODE
      JSB DEL       CONTACT CHATTER DELAY 
      JMP P7                   LOOK AGAIN 
P8    SZB           OLD MODE? 
      JMP P7          YES 
      RAR,RAR         NO
      RAR           EACH BIT
      STA BIT3       FROM THE 
      RAR             SWITCH
      STA BIT4         REGISTER 
      RAR               IS ROTATED
      STA BIT5           TO LEAST 
      RAR                 SIGNIFICANT 
      STA BIT6             POSITION 
      RAR                   AND IS
      STA BIT7               STORED IN
      RAR                     ITS RELATIVE
      STA BIT8                 LOCATION 
      JMP MODE1,I   EXIT
* 
*    SWITCH REGISTER STORAGE ROUTINE - TWO
* 
MODE2 NOP           ENTER 
      LIA 1         READ SWITCH REGISTER
      SLA           HALT AT START?
      JMP P1          YES 
      RAL             NO
      SSA           LOOP? 
      JMP MODE2,I     YES - EXIT
      CLB,INB         NO
      JMP P3        EXIT TO MODE WAIT LOOP
      HED 12604 DIAGNOSTIC - INITIAL TEST ROUTINES
* 
*    INITIAL TEST ROUTINE 
* 
ITEST NOP           ENTER 
      CLF 0 
      LDA ML4       PRINT 4TH MESSAGE 
      LDB MAD4        "PUSH PRESET
      JSB 102B,I         THEN RUN"
      HLT 0         HALT TO PRESET
SFS1  SFS 0         CHECK TO SEE
      JSB INERR       THAT THE
SFC1  SFC 0             FLAG WAS
      JMP *+2             SET BY
      JSB INERR             PRESET
      LDA ERR       SET ERROR INTERRUPT 
      STA ADDR,I      IN TRAP CELL
      STF 0         TURN ON INTERRUPT SYSTEM
      NOP           WAIT FOR
      NOP             INTERRUPT 
      JMP P10       OK - NO INTERRUPT 
P9    CLF 0 
      LDA ML5       PRINT 5TH MESSAGE 
      LDB MAD5        "INT. CONT. FF NOT
      JSB 102B,I         CLEARED BY PRESET" 
      HLT 0         ERROR HALT
P10   LDA HLT1      RESTORE 
      IOR ADDR        TRAP CELL 
      STA ADDR,I        TO HALT 
      CLF 0         TURN OFF INTERRUPT SYSTEM 
      LIA 1         CHECK SWITCH REGISTER 
      SLA           HALT AT START?
      JMP P1          YES 
      SSA             NO - CHECK BIT 15 TO
      JMP P11                SKIP STATIC TEST 
      LDA ML6       PRINT 6TH MESSAGE 
      LDB MAD6        "STATIC TEST FOR STATE
      JSB 102B,I        OF FLIP-FLOPS AND LEVELS OF 
      HLT 0              HOLD AND ENCODE LINES" 
P11   JMP ITEST,I   EXIT
      SKP 
* 
*    INITIAL TEST ERROR ROUTINE 
* 
INERR NOP           ENTER 
      LDA ML7       PRINT 7TH MESSAGE 
      LDB MAD7        "FLAG NOT SET 
      JSB 102B,I        BY PRESET"
      HLT 0         ERROR HALT
      JMP INERR,I   EXIT
* 
*    SW REG CONTACT CHATTER DELAY ROUTINE 
* 
DEL   NOP           ENTER 
      STA ATMP1     SAVE A
      LDA CNT1
      STA CNT4      SET COUNTER 
      LDA ATMP1     RESTORE A 
      ISZ CNT4      DELAY 
      JMP *-1         LOOP
      JMP DEL,I     EXIT
      