ASMB,A,B,L,C
      HED GENERAL PURPOSE REGISTER DIAGNOSTIC (DSN 143300)
      ORG 0   DSN = 143300  MAR.31, 1977   DATE CODE 1813 
      SUP 
*     GENERAL OPERATING PROCEDURE 
* 
*         A. LOAD DIAGNOSTIC CONFIGURATOR AND SET IT UP.
*         B. LOAD DIAGNOSTIC PROGRAM
*         C. LOAD ADDRESS 100B. 
*         D. LOAD SWITCH REG. WITH SELECT CODE AND OPTIONS
*                  BIT   MEANING IF SET 
*                  15*   HP 12849 IS BEING TESTED 
*                  14*      HP 12849 W10 IS IN POSITION A 
*                  13*      HP 12849 POSITIVE TRUE
*                  12*      HP 12849 W5 IS ABSENT (W4 IS IN B)
*                  11    HP 12597 8 BIT DUPLEX
*                  10    HP 12551 RELAY REGISTER UNDER TEST 
*                   9       HP 12551 RELAY REGISTER HAS READ BACK 
*                   8    HP 12589 AUTOMATIC DIALER
*                   7    HP 12930 UNIVERSAL INTERFACE 
*                   6    RESERVED 
*                   5 
*                        SELECT CODE OF INTERFACE 
*                   0 
* 
*                    *BIT 12 - 15 RELATE TO 12849 INTERFACE ONLY
* 
*                     BITS 8 - 15 CLEARED DEFAULTS TO 
*                     12554, 12566, 12602 OR 12875
* 
*         E. PRESS RUN AND WAIT FOR HALT 102074.
*         F. LOAD SWITCH REGISTER 
*                  BIT   MEANING IF SET 
*                   15   HALT AT END OF EACH TEST 
*                   14   SUPPRESS ERROR HALTS 
*                   13   LOOP ON LAST TEST
*                   12   LOOP ON DIAGNOSTIC 
*                        (SUPPRESS ALL OPERATOR INTERVENTION) 
*                   11   SUPPRESS ERROR MESSAGES
*                   10   SUPPRESS NON-ERROR MESSAGES
*                    9   GO TO USER CONTROL SECTION 
*                        AT END OF PRESENT TEST OR HALT 102034/42 
*                    8   SUPPRESS OPERATOR INTERVENTION TESTS 
*                    7   RESERVED 
*                    6
*                        PSEUDO OPDESIGN REFER TO TEST 08 
*                    0
*         NOTE: STANDARD RUN SHOULD BE WITH SW. REG. = 0
* 
*         G. PRESS RUN. 
* 
*         H. RESTART - LOAD ADDRESS 2000B 
*         I. RECONFIGURE - LOAD ADDRESS 100B
      SKP 
*         GENERAL COMPUTER HALTS
* 
*         1020XX    E OR H  000 TO 054 (ERROR OR OPERATOR)
*         102077    END OF DIAG (A = PASS COUNT)
*         102076    END OF TEST (A = TEST #)
*         102075    USER SELECTION REQUEST (SET A TO SELECTION) 
*         102074    SELECT CODE INPUT COMPLETE
*         102073    USER SELECT CODE ERROR
*         106077    TRAP CELL HALT
*                   FOR ANY OTHER HALTS FIRST REFER TO THE
*                   DIAGNOSTIC CONFIGURATOR MANUAL. 
* 
* 
* 
*         PROGRAM ORGANIZATION CHART
*         ******************************************* 
*         *         CONFIGURATOR            100B    * 
*         *            LINKAGE TABLE                * 
*         ******************************************* 
*         *         EXECUTIVE               130B    * 
*         *         LINKAGE                         * 
*         ******************************************* 
*         *         CONSTANTS               150B    * 
*         *            AND                          * 
*         *         STORAGE                         * 
*         ******************************************* 
*         *                                2000B    * 
*         *         EXECUTIVE CONTROL               * 
*         *                                         * 
*         ******************************************* 
*         *         IF USED                         * 
*         *         BASIC I/O TESTS (TEST 00)       * 
*         *                                ZCEND    * 
*         ******************************************* 
*         *         TABLE OF TEST POINTERS          * 
*         *         TABLE OF I/O INSTR POINTERS     * 
*         ******************************************* 
*         *                                         * 
*         *                                         * 
*         *                                         * 
*         *                                         * 
*         *                                         * 
*         *         MAIN DIAGNOSTICS (1-05)         * 
*         *                                         * 
*         *                                         * 
*         *                                         * 
*         *                                         * 
*         *                                         * 
*         ******************************************* 
      SKP 
*         CONFIGURATOR LINKAGE TABLE
A     EQU 0         A REGISTER REFERENCE
B     EQU 1         B REGISTER REFERENCE
SW    EQU 1         SWITCH REGISTER REFERENCE 
INTP  EQU 0         INTERRUPT CHANNEL REFERENCE 
* 
* 
      ORG 100B
* 
      JMP CFIG,I    GO TO CONFIGURATION SECTION 
FAIN  BSS 1         FAST INPUT (PHOTO READER) 
SLOP  BSS 1         SLOW OUTPUT (LIST)
FAOP  BSS 1         FAST OUTPUT (DUMP OR PUNCH) 
SLIN  BSS 1         SLOW INPUT (KEYBOARD) 
FWAM  DEF FWAA      FIRST WORD OF AVBL. MEMORY
LWAM  BSS 1         LAST WORD OF AVBL. MEMORY 
      BSS 1         NOT USED (MAG TAPE) 
OTMC  BSS 1         1 MILL SEC TIME OUT COUNT 
      BSS 4         SELECT CODES FOR I/O
CPTO  BSS 1         COMPUTER TYPE/OPTIONS 
USSC  BSS 1         USER CARD TYPE AND SELECT CODE
MEMO  BSS 1         MEMORY SIZE AND TYPE
ISWR  BSS 1         INTERNAL SWITCH REGISTER
TMRR  BSS 1         1 MILL SEC TIMER
SWRC  BSS 1         CONFIGURATOR SWITCH CK PTR
I2AS  BSS 1         INTEGER TO ASCII CONVERSION 
O2AS  BSS 1         OCTAL TO ASCII CONVERSION 
AS2N  BSS 1         ASCII CONVERSION
DSNL  OCT 143300    DIAGNOSTIC SERIAL NUMBER
FMTR  BSS 1         FORMATTER 
* 
* 
*         CONTROL LINKAGE AND DATA REFERENCES 
* 
CFIG  DEF ZCONF     CONFIGURATION SECTION 
MSGC  DEF ZMSGC     MESSAGE WITH NO HALT
MSGH  DEF ZMSGH     MESSAGE WITH HALT 
ERMS  DEF ZERMS     ERROR MESSAGE 
SWRT  DEF ZSWRT     SWITCH REGISTER CHECK ROUTINE 
TSTN  OCT 0         CURRENT TEST NUMBER 
EXRT  DEF ZEXRT     RETURN TO CONTROL PROGRAM 
      NOP           RESERVED
      SKP 
*           BASE PAGE POINTERS AND TABLES 
* 
      ORG 140B
IOIPL DEF IOIDL     POINTER TO LOWER SC I/O INSTRUCTIONS
IOIPU DEF IOIDU     POINTER TO UPPER SC I/O INSTRUCTIONS
TSTP  DEF TSTD      POINTER TO TESTS LIST 
HDMP  DEF HDMS      POINTER TO HEADER MESSAGE 
STDA  OCT 7773
STDB  OCT 0 
* 
HDMS  OCT 6412
      ASC 18,GENERAL PURPOSE REGISTER DIAGNOSTIC, 
      ASC 7,  DSN XXXXXX/ 
* 
IOIDL EQU * 
      DEF OUT+1 
      DEF ENCD+1
      DEF WFL+2 
      DEF IN+1
      DEF SC0 
      DEF SC1 
      DEF SC2 
      DEF SC3 
      DEF SC4 
      DEF SC5 
      DEF SC06
      DEF SC07
      DEF SC08
      DEF SC09
      DEF SC10
      DEF SC11
      DEF SC12      POINTERS TO ALL I-O INSTR.
      DEF T.SCO       FOR THE LOWER SC (DATA
      DEF LGSFS         CHANNEL) IN TESTS EXEPT 
      DEF LGSFC           BASIC I-O 
      DEF LGS1
      DEF LGS2
      DEF LGS3
      DEF MLS1
      DEF DPRS1 
      DEF DPRS2 
      DEF DPRS3 
      DEF DPRS4 
      DEF DPRS5 
      DEF DPRS6 
      DEF STCD
      DEF UI2 
      DEF UI5 
      DEF UI7 
      DEF UI8 
      DEF UI17
      DEF UI18
      DEF UI21
      DEF UI23
      DEF UI24
      DEF UI25
      DEF UI26
      DEF UI27
      DEF UI27A 
      DEF UI28
      DEF UI31
      DEF UI33
      DEF UI34
      DEF UI35
      DEF UI36
      DEF UI39
      DEF UI40
      DEC -1
* 
IOIDU EQU * 
      DEF UI3 
      DEF UI5A
      DEF UI6 
      DEF UI9 
      DEF UI11
      DEF UI12      POINTERS TO ALL I-O INSTR.
      DEF UI14        FOR THE UPPER SC (CONTROL 
      DEF UI16          CHANNEL) IN TEST 8 & 9
      DEF UI20
      DEF UI22
      DEF UI29
      DEF UI29A 
      DEF UI29B 
      DEF UI30
      DEF UI32
      DEF UI37
      DEF UI38
      DEF UI41
      DEF UI42
      DEC -1
* 
TSTD  EQU * 
      DEF TST00     BASIC I/O 
      DEF TST01     RELAY PATTERN 
      DEF TST02     RELAY COMMAND 
      DEF TST03     DATA BUFFER 
      DEF TST04     CONTROL SIGNALS 
      DEF TST05     ACU LOGIC TEST
      DEF TST06     ACU MULTI LINE OPERATION
      DEF TST07     ACU DPR (DS1) 
      DEF TST08     UNIV. INTERFACE 
      DEF TST09     UNIV. INTERFACE 
      DEF TST10     UNIV. INTERFACE 
      DEF TST11     UNIV. INTERFACE 
      DEF TST12     PSEUDO OPDESIGN 
      DEC -1
      SKP 
TMP   NOP 
CNTR  NOP 
DM20  DEC -20 
D100  DEC 100 
.2000 DEC 2000
.1    OCT 1 
.2    OCT 2 
.4    OCT 4 
.10   OCT 10
.20   OCT 20
.40   OCT 40
.77   OCT 77
.100  OCT 100 
.177  OCT 177 
.200  OCT 200 
.377  OCT 377 
B90   OCT 1001
SW010 OCT 2001
BIT11 OCT 4000
S128  OCT 10400 
B13   OCT 20000 
MIN1  OCT 177777
M14   OCT 177764
M201  OCT 177577
M1001 OCT 176777
B1510 OCT 176000
M4605 OCT 173173
NBT11 OCT 172000
ZTSH  OCT 106077
STCD  OCT 102700
B15   OCT 100000
D22   DEC 22
      SKP 
*           COMMON SUBROUTINES
*              INCREMENT PATTERN
* 
* 
INPT  NOP 
      LDA PTRN      GET PATTERN 
      INA           INCREMENT PATTERN 
      STA PTRN
      AND BTMSK     MASK UNWANTED BITS
      STA EXP 
      JMP INPT,I    RETURN
BTMSK NOP 
PTRN  NOP 
* 
*              OUTPUT PATTERN 
* 
OUT   NOP 
      OTA SC
      JMP OUT,I 
* 
*              ENCODE PATTERN 
* 
ENCD  NOP 
      STC SC,C
      JMP ENCD,I
* 
*              WAIT FOR FLAG
* 
WFL   NOP 
      LDA WFLT      SET WAIT TIME 
      SFC SC        IS FLAG SET 
      JMP WFL,I     YES - RETURN
      INA,SZA       NO COUNT TIME 
      JMP *-3 
E042  JSB ERMS,I    TELL OPERATOR 
      DEF WFLM      FLAG DID NOT SET
      LDB BIT9      CHECK TO ABORT
      JSB SWRT,I
      JMP EXRT,I
      JMP WFL,I 
* 
WFLT  DEC -200
WFLM  ASC 11,E042 FLAG DID NOT SET/ 
BIT9  OCT 1000
BIT10 OCT 2000
BT108 OCT 2400
      SKP 
*              INPUT PATTERN
* 
IN    NOP 
      LIA SC        GET DATA
      STA B 
      AND BTMSK     MASK UNWANTED BITS
      STA ACT       SAVE IT 
      LDA B 
      JMP IN,I
* 
*              COMPARE INPUT WITH OUTPUT
* 
CMPR  NOP 
      LDA EXP       GET EXPECTED
      CPA ACT       DOES IT COMPARE WITH ACTUAL 
      JMP CMPR,I
      LDB EXPP
      CLE 
      JSB O2AS,I    PUT EXPECTED IN MESSAGE 
      LDA ACT 
      LDB ACTP
      CLE 
      JSB O2AS,I    PUT ACTUAL IN MESSAGE 
      LDA EXP 
      LDB ACT 
E034  JSB ERMS,I    TELL OPERATOR 
      DEF MS034     OF NON-COMPARE
      LDB BIT9      CHECK TO ABORT
      JSB SWRT,I
      JMP EXRT,I    YES - RETURN TO EXEC
      JMP CMPR,I    NO CONTINUE 
* 
EXP   NOP 
ACT   NOP 
* 
MS034 ASC 11,E034 DATA NON-COMPARE
      OCT 6412
      ASC 05,EXPECTED 
MSE34 ASC 03,XXXXXX 
      OCT 6412
      ASC 05,ACTUAL 
MSA34 ASC 04,XXXXXX// 
EXPP  DEF MSE34 
ACTP  DEF MSA34 
      SKP 
*         OUTPUT A REG TO ACU 
* 
ACU   EQU 10B 
A2ACU NOP 
T.SCO OTA ACU 
      CLA,INA 
      JSB TMRR,I
      JMP A2ACU,I 
* 
*     CALL: 
* 
*         JSB SWLK            GOTO SWITCH LOCK UP 
*         OCT XXXXXX          SWITCH MASK 
*         JMP .               RETURN AFTER SWITCH UP-DOWN 
*          .                  NORMAL RETURN 
* 
SWLK  NOP 
      LDB SWLK,I    GET SWITCH MASK 
      JSB SWRT,I
      JMP *+3       SWITCH UP 
      ISZ SWLK      SWITCH DOWN 
      JMP SWLK0 
      LDA .2        WAIT FOR SWITCH BOUNCE
      JSB TMRR,I
      LDB SWLK,I    GET MASK
      JSB SWRT,I    WAIT TILL SW IS DOWN
      JMP *-2 
SWLK0 ISZ SWLK      ADJUST RETURN 
      JMP SWLK,I    RETURN
      SKP 
* 
*     SUBROUTINES FOR TESTS 08, 09 AND 10 
* 
* 
* 
*     ASSEMBLES THE 3 LINE ERROR MESSAGE
* 
EMR3L NOP 
      JSB EXCNV      CONVERT EXPEC WORD FROM OCTAL TO ASCII 
      JSB ACCNV         "    ACTUAL "    "     "    "   " 
      LDA EXPWD      LOAD A-REG WITH EXPECTED & 
      LDB INPAT        B-REG WITH ACUAL WORD &
      JSB ERMS,I         GO TO ERROR MESSAGE
MSXYZ NOP            POINTER TO ERROR MESSAGE, SUPPLIED 
*                                      BEFOR SUBR. WAS CALLED 
      DEF MSE54,I    POINTER TO EXPECTED DATA MESSAGE 
      DEF MSI54         "    "  ACTUAL    "      "
      JSB ABRT       CHECK S-REG IF TEST SHALL BE ABORTED 
      JMP EMR3L,I    RETURN TO CALLER 
* 
* 
* 
*     CONVERT EXPECTED WORD FROM OCTAL TO ASCII 
* 
EXCNV NOP 
      LDA EXPWD      LOAD A-REG WITH EXPECTED WORD TO BE CONVERTED
      LDB EXMSP      GET POINTER TO STORE CONVERTED ASCII STRING
      CLE              AND GO TO CONVERTION ROUTINE.
      JSB O2AS,I
      JMP EXCNV,I    RETURN TO CALLER 
* 
EXMSP DEF MSE54+7 
MSE54 ASC 11,     EXPECTED XXXXXX/
* 
* 
* 
*     CONVERT ACTUAL WORD FROM OCTAL TO ASCII 
* 
ACCNV NOP 
      LDA INPAT      LOAD A-REG WITH ACTUAL WORD TO BE CONVERTED
      LDB INMSP      GET POINTER TO STORE CONVERTED ASCII STRING
      CLE              AND GO TO CONVERTION ROUTINE.
      JSB O2AS,I
      JMP ACCNV,I    RETURN TO CALLER 
* 
INMSP DEF MSI54+7 
MSI54 ASC 11,     ACTUAL   XXXXXX/
      SKP 
* 
*     RESET 3 LOCATIONS TO NOP'S
* 
NOP   NOP 
      CLA            ASSURE THAT THE 3 LOC. WHICH MAY 
      STA STCDX,I      HAVE BEEN MODIFIED BY TST09
      STA STCDY,I        ARE RESET TO NOP'S.
      STA STCDZ,I 
      JMP NOP,I 
* 
STCDX DEF STCD1 
STCDY DEF STCD2 
STCDZ DEF STCD3 
* 
* 
* 
*     STORAGE LOCATIONS FOR TESTS 08, 09 AND 10 
* 
DARFL OCT 0 
OTPAT OCT 0 
INPAT OCT 0 
EXPWD OCT 0 
* 
CFTN DEF ZCFTN
* 
* 
* 
*     CREATE EXPECTED STATUS BIT PATTERN FROM CONTROL 
*     WORD IF U85S3 IN POS 10, U85S2 IN POS 6 AND 
*     U102S3 IN POS 11. 
* 
EXPAT NOP 
      LDA OTPAT      LOAD A-REG WITH PATTERN OUTPUT,
      AND B1510        MASK OUT BIT 0-9 & TRANSFER
      LDB A              TO B-REG.
      BLF,BLF        ROTATE B-REG 7 POS TO THE LEFT & 
      RBR              IOR WHITH A-REG WHICH CONVERTS 
      IOR B              COMMAND TO PARTIAL STATUS WORD.
      LDB A          CHECK IF B-REG BIT 10 IS SET. IF YES 
      BLF,RBL          COPY BIT 10 INTO BIT 0 & 9 
      SSB 
      IOR B90        YES, IOR BIT 9 & 0 
      ELB            STORE THE COMPLEMENT OF B-REG
      CLB,CME          BIT 10 (WHICH HAS BEEN ROTATED TO
      ELB,BLF            B-REG BIT 15) INTO A-REG BIT 7 
      BLF,BRS              (TEST HOOD REVERSES POLARITY)
      IOR B 
      STA EXPWD      STORE EXPECTED STATUS WORD 
      JMP EXPAT,I    RETURN TO CALLER.
* 
      SKP 
* 
* 
*     CHECK IF TEST SHALL BE ABORTED
* 
ABRT  NOP 
      LDB BIT9       LOAD MASK TO TEST S-REG BIT 9
      JSB SWRT,I     TEST S-REG 
      JMP EXRT,I     YES, ABORT TEST & RETURN TO EXEC 
      JMP ABRT,I     NO, CONTINUE 
* 
* 
* 
*     CHECK COMMAND AND STATUS REGISTER 
*     OUTPUT ALL POSSIBLE COMMAND WORD COMBINATIONS, READ THE 
*     APPROPR. STATUS WORD, THEN COMPARE THE EXPEC. W THE ACTUAL
*     STATUS WORD.
* 
CSDCH NOP 
      CLC INTP     SET CRS OS FOR U75B TESTING
      CLA 
      STA DARFL    DATA REG FLAG INDICATES 1.EXEC OF THIS ROUT
      STA OTPAT    STORE COMMAND WORD TO BE OUTPUTTED 
UI5   OTA SC       CLEAR OUTPUT DATA REG
STCD1 NOP          WILL BE OVERLAYED IN TST09 W STC SC
CSWCH LDA OTPAT    SET COMMAND REG TO OUTPAT
UI5A  OTA SC+1
UI6   LIB SC+1     READ STATUS WORD 
      STB INPAT    STORE STATUS WORD READ 
      JSB EXPAT    COMPUTE EXPECD STATUS WORD. A-REG=EXPECTED 
      CPA INPAT    COMPARE EXPECTED WITH ACTUAL WORD
      JMP CSOK     COMPARE OK.
      LDA MP54X,I  ERROR,DOES NOT COMPARE. READ MESSAGE PONT
      IOR B15        IOR BIT 15 TO LINK TO MULTIPLE MESSAGE & 
      STA MSXYZ        STORE INTO ERROR MESSAGE SUBROUTINE
E054  JSB EMR3L    GO TO ERROR MESSAGE SUBR.
CSOK  ISZ OTPAT    INCREMENT COMMAND WORD & 
      JMP CSWCH      RETURN TO REPEAT OUTPUT
      JMP STCDI,I 
* 
MP54X DEF MP54
STCDI DEF STCD3 
      SKP 
*     OUTPUT DATA WORD AND READ IMMEDIATELY BACK
*     USED IN TST08 
* 
TST8X NOP 
UI17  OTA SC
UI18  LIB SC
      JMP TST8X,I 
* 
* 
* 
*     OUTPUT DATA WORD AND READ IMMEDIATELY BACK
*     USED IN TST09 
* 
TST9X NOP 
UI23  OTA SC
UI24  STC SC
UI25  LIB SC
      JMP TST9X,I 
* 
* 
* 
*     LINKAGES FOR POWER FAIL ROUTINE 
* 
PUJP  JMP *+1,I 
      OCT 0 
* 
POWF  DEF POWOF 
PU09  DEF MSET9 
PU10  DEF UN10
PU11  DEF UN11
* 
* 
* 
*     POWER UP ROUTINE FOR TESTS 09, 10 AND 11
* 
POWUP NOP 
      LDA SWRPR      RESTORE S-REG
      OTA 1B
      STC 4,C        RESET POWER FAIL 
UI31  CLC SC,C
UI32  CLC SC+1,C
      JMP POWUP,I 
* 
SWRPR OCT 0 
* 
* 
* 
* 
PCB   DEF *+1        STORE DEC TEST 
      OCT 0            NUMBER INTO
      OCT 0              STRING 
PCBX  ASC 1,XX
      SKP 
*         EXECUTIVE CONTROL 
      ORG 2000B 
* 
ZSTEX CLC INTP,C    TURN I/O SYSTEM OFF 
      LDA DSNL      ADD DSN TO DIAGN HEADER MESSAGE,
      CLE             LOAD DSN, (UPPER BYTE), 
      LDB HDMP          DETERMEN STORAGE LOCATION 
      ADB D22             OF CONVERTED DSN &
      JSB O2AS,I            GO TO OCTAL-ASCII CONVERSION. 
      JSB MSGC,I    OUTPUT HEADER MESSAGE 
      DEF HDMS
      CLA           CLEAR PASS
      STA ZEOLC       COUNT 
      CCA           RESET TEST NUMBER 
      STA ZCFTT       COMPARATOR
ZNUSR LDA STDA      GET STANDARD TEST RUN 
ZEXCZ LDB ZSW9      CHECK FOR USER SELECTION REQ
      JSB SWRT,I
      JMP ZUSR      IT'S USERS CHOICE 
      JMP ZEXC
* 
ZUSR  LIA SW        CLEAR BIT 9 
      AND ZSWM9 
      OTA SW
      LDA ZSINA     RETRIEVE PREVIOUS RUN 
      HLT 75B       WAIT FOR USER INPUT 
ZEXC  STA ZUINA     SAVE
      CLB 
      STB ZUINB       USER
      STA ZSINA         INPUT 
      STB ZSINB           PROGRAM 
      CCA           SET TEST NUMBER 
      STA TSTN      =-1 
      CLA 
      STA ZTSTA     CLEAR TEST RUN FLAG 
      SKP 
ZEXCL LDA ZUINA     RESTORE A REG.
      LDB ZUINB     RESTORE B REG.
      ERA,RAL       ROTATE
      ERB             FIRST 
      ERA               TEST BIT
      STA ZUINA     SAVE POSITIONS
      STB ZUINB 
      ISZ TSTN      MOVE TEST UP ONE
      NOP 
ZXCL1 LDA TSTN
      ADA TSTP      GET IT'S
      LDA A,I         ADDRESS 
      CPA Z.M1      IS IT END OF LIST?
      JMP ZEOL      YES 
      LDB ZUINB 
      SSB,RSS       SHOULD IT BE RUN? 
      JMP ZEXCL     NO
      STA ZTSTA     YES - SAVE TEST ADDRESS 
      JSB ZITCH     INITIALIZE TRAP CELL HALTS
      JSB ZTSTA,I   GO DO TEST
ZEXRT LDA TSTN      DISPLAY TEST NUMBER IF HALTED 
      LDB ZSW15     CHECK FOR HALT AT END OF TEST 
      JSB SWRT,I
      HLT 76B       YES WAIT FOR OPERATOR 
      LDB ZSW9      CHECK FOR ABORT (USER SELECTION)
      JSB SWRT,I
      JMP ZUSR      YES 
      LDB ZSW13     CHECK FOR LOOP ON TEST
      JSB SWRT,I
      JMP ZXCL1     YES - LOOP
      JMP ZEXCL     NO - MOVE TO NEXT TEST
* 
ZEOL  LDA ZTSTA     CHECK IF ANY TESTS WERE RUN 
      SZA,RSS       ? 
      JMP ZNUSR     NO  SO PICK UP STANDARD RUN 
      LDA ZEOLC     YES - UP DATE PASS COUNT
      INA 
      STA ZEOLC 
      CCE 
      LDB ZPSCA     GET PASS COUNT
      ADB Z.3         ADDRESS 
      JSB O2AS,I    CONVERT IT FOR MESSAGE
      JSB MSGC,I    CALL PRINT ROUTINE
ZPSCA DEF ZPSC
      LDB ZSW12     CHECK FOR LOOP ON DIAG. 
      JSB SWRT,I
      JMP *+3       YES 
      LDA ZEOLC 
      HLT 77B       NO WAIT AND DISPLAY PASS COUNT
      LDA ZSINA     RESTORE ORIGINAL
      LDB ZSINB       PROGRAM 
      CLC INTP,C    TURN I/O SYSTEM OFF 
      JMP ZEXCZ     DO IT ALL AGAIN 
      SKP 
*         MESSAGE OUTPUT WITHOUT HALT 
* 
ZMSGC NOP           ENTRY 
      JSB ZMSG      OUTPUT MESSAGE
      OCT 2000      SWITCH 10 CHECK 
      JMP ZMSGC,I   RETURN TO CALLER
* 
*         MESSAGE OUTPUT WITH HALT
* 
ZMSGH NOP           ENTRY 
      JSB ZMSG      OUTPUT MESSAGE
      OCT 2000      SWITCH 10 CHECK 
      LDA ZHLT      GET HALT CODE 
      STA *+2       PUT IT IN PLACE 
      LDA ZSAVA     RESTORE A REGISTER
      NOP           HALT FOR DISPLAY
      JMP ZMSGH,I   RETURN TO CALLER
* 
*         ERROR MESSAGE WITH HALT 
* 
ZERMS NOP           ENTRY 
      JSB ZMSG      OUTPUT MESSAGE
      OCT 4000      SWITCH 11 CHECK 
      CLA 
      LDB ZSW14     CHECK SWR BIT 14 TO SUPPRESS
      JSB SWRT,I    HALT
      STA *+3       PUT  HALT IN PLACE
      LDA ZSAVA     RESTORE A & B 
      LDB ZSAVB 
ZHLT  NOP           WAIT FOR OPERATOR 
      JMP ZERMS,I   RETURN TO CALLER
* 
*        CHECK TO OUTPUT TEST NUMBER
* 
ZCFTN NOP 
      LDA TSTN      GET TEST NUMBER 
      CPA ZCFTT     IS IT THE SAME ONE? 
      JMP ZCFTN,I   YES - SKIP OUTPUT 
      STA ZCFTT     NO - THEN UPDATE IT 
      CLE           CONVERT OCTAL NUMBER
      LDB PCB         TO THE DEC EQUIVALENT 
      JSB I2AS,I
      LDB PCBX
      STB ZTSTN 
      CLA           DO CR/LF
      JSB SLOP,I
      CLA,CLE       INDICATE START OF FORMAT
      LDB ZTSTF     POINT TO STRING 
      JSB FMTR,I    OUTPUT IT 
      JMP ZCFTN,I   RETURN
      SKP 
*         OUTPUT MESSAGE
* 
ZMSG  NOP 
      STA ZSAVA     SAVE A AND B REGISTERS
      STB ZSAVB 
      LDB ZMSG,I    GET SWITCH REGISTER BIT 
      LDA ZMSG
      ADA Z.M2      DECREMENT RETURN ADDRESS
      STA ZMSG
      JSB SWRT,I    CHECK TO SUPPRESS MESSAGE 
      JMP ZMSG0     YES 
      LDA ZMSG,I    CHECK IF ERROR
      LDA A,I 
      ELA,CLE,ERA 
      LDA A,I       IF SO 
      ALF,ALF 
      AND Z.177 
      CPA ZA.E
      JSB ZCFTN     CHECK TO OUTPUT TEST NUMBER 
      LDA ZMSG,I    NO RETRIEVE FORMAT
      LDB A,I         ADDRESS 
      ELB,CLE,ERB 
      CLA,CLE 
      JSB FMTR,I
ZMSG0 LDA ZMSG,I    CONVERT HALT CODE 
      LDB A,I         FROM ASCII STRING 
      ELB,CLE,ERB 
      CCA,CCE 
      JSB AS2N,I
      STA ZN2AO     SAVE RESULT 
      AND Z.300     DECODE
      LDB ZH2         HALT CODE 
      CPA Z.100 
      LDB ZH6 
      CPA Z.200 
      LDB ZH3 
      CPA Z.300 
      LDB ZH7 
      LDA ZN2AO     GET HALT NUMBER 
      AND Z.77
      IOR B 
      STA ZHLT      SAVE IT 
ZMSG1 LDA ZMSG,I
      LDA A,I 
      SSA,RSS 
      JMP ZMSG2 
      ISZ ZMSG,I
      LDB ZMSG
      ADB Z.2 
      LDB B,I 
      JSB SWRT,I
      JMP ZMSG1 
      LDA ZMSG,I
      LDB A,I 
      ELB,CLE,ERB 
      CLA,CLE 
      JSB FMTR,I
      JMP ZMSG1 
ZMSG2 ISZ ZMSG,I    ADJUST RETURN POINTERS
      ISZ ZMSG
      ISZ ZMSG
      ISZ ZMSG
      LDA ZSAVA     RESTORE A AND B REGISTERS 
      LDB ZSAVB 
      JMP ZMSG,I
      SKP 
                                                                    