ASMB,R,L,C
      NAM DIAG,3 12792-16006 REV.2029 800724
******************************************************************
* 
*      RELOC.     12792-16006 
*      SOURCE     12792-18006 
*      ABSOLUTE   12792-16007 
*      (RTE-M)
* 
*      (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.
*      ALL RIGHTS RESERVED.  NO PART OF THIS PROGRAM
*      MAY BE PHOTOCOPIED, REPRODUCED OR TRANSLATED 
*      TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR
*      WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY.
* 
**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
* 
*     THIS PROGRAM DOWNLOADS SELF TEST IN TO THE MUX RAM .
*     IT FIRST SEND A DOWNLOAD COMMAND TO THE MUX.  SIZE OF THE 
*     CODE TO BE DOWNLOADED IS SPECIFIED IN BYTES IN THE SECOND 
*     WORD OF THE COMMAND.
*     MUX LOADS THE CODE IN TO THE RAM AND JUMPS TO THE STARTING
*     LOCATION OF THE DOWNLOADED CODE.
* 
* 
      EXT $LIBR,$LIBX,EXEC,NAMR 
SC    EQU 00B          DUMMY SELECT CODE
A     EQU 0B           A REG
B     EQU 1B           B REG
DIAG  NOP 
* 
START JSB EXEC  WRITE MESSAGE TO THE
      DEF *+5  CONSOLE ASKING OPERATOR
      DEF WRCOD  TO ENTER MUX SELECT CODE 
      DEF WRTRM 
      DEF MESS5 
      DEF MESS5-1 
* 
*     READ MUX SELECT CODE FROM THE USER
      JSB EXEC
      DEF *+5 
      DEF RDCOD 
      DEF RDTRM 
      DEF MUXSC 
      DEF THREE 
* 
*     CONVERT MUX SELECT CODE FROM ASCII
*     TO DECIMAL USING NAMR.
* 
*     INITIALIZE POINTER FOR THE STRING 
*     TO BE PARSED TO 1 EVERYTIME . 
      LDA ONE 
      STA ISTRC 
* 
      JSB NAMR
      DEF *+5 
      DEF IPR 
      DEF MUXSC 
      DEF THREE 
      DEF ISTRC 
* 
*     CHECK IF THE USER INPUT A NUMBER AND NOT LETTER.
* 
      LDA IPR+3 
      CPA ONE 
      JMP PUTSC 
      JMP START  IF NOT PRINT MESSAGE AGAIN.
* 
PUTSC LDA IPR    PUT SELECT CODE IN ALL I/O INSTRUCTIONS
      LDB IPR  CHECK TO SEE IF SELECT CODE
      ADB M100B  IS .LE. 77B
      SSB 
      JMP PUTS1  YES.  WE ARE OK. 
      JMP START  NO. TRY AGAIN. 
PUTS1 LDB .IOIN 
      JSB  SETEM
* 
      JSB  $LIBR WE WANT TO DO ONLINE I-O.
      NOP 
      LDA  DOWNL   SEND DOWN LOAD COMMAND.
OTA01 OTA SC,C
STC01 STC SC
      JSB WAIT   WAIT FOR THE FLAG OR TIMOUT
CLC01 CLC SC     CLEAR CONTROL SO DRIVER IS NOT CALLED
      LDA SIZE      SECOND WRD OF CMND-SIZE IN BYTES. 
OTA02 OTA SC,C
      JSB WAIT     WAIT FOR THE FLAG OR TIMOUT
      INA           FIGURE OUT SIZE IN WORDS
      ARS           SO WE CAN USE IT AS A COUNTER.
      CMA 
      INA 
      LDX ZERO      INITIALIZE POINTER OF CODE. 
LOOP  LBX MESS+1    POINT TO THE CODE TABLE ENTRY 
OTB01 OTB SC,C
      ISX           INCREMENT POINTER 
      JSB  WAIT     WAIT FOR THE FLAG OR TIMEOUT
      INA           ARE WE DONE?
      SZA 
      JMP LOOP
CLF01 CLF SC
      JSB $LIBX TURN INTERRUPT SYS ON AGAIN.
      DEF *+1 
      DEF *+1 
*     FOLLOWING CODE IS COMMENTED OUT BECAUSE IT
*     DOES NOT WORK WITHOUT TBG.  SO INSTEAD OF 
*     SCHEDULING MYSELF IN 5 SECS, I WILL 
*     WAIT IN A LOOP FOR 5 SECS.
*     JSB EXEC  SCHEDULE OURSELF TO BE
*     DEF L0    AWAKENED AFTER 5 SECONDS. 
*     DEF TIMLS 
*     DEF INAME 
*     DEF IRESL 
*     DEF MTPLE 
*     DEF IOFF
* 
*    WAIT FOR ABOUT 5 SECS. 
      LDB FACTR  COUNT * FACTOR DECIDES 
TIME1 LDA COUNT  WAIT TIME OF THIS LOOP.
TIME2 INA       INNER WAIT LOOP 
      SZA 
      JMP TIME2 
      INB 
      SZB       OUTER WAIT LOOP 
      JMP TIME1 
* 
*     NOW CHECK THE RESULTS OF THE SELF TEST
L0    JSB $LIBR  WANT TO DO I/O AGAIN.
      NOP 
LIA01 LIA SC  READ THE BACKPLANE LATCH. 
*             IT SHOULD BE A # BETWEEN 1 & 13.
      SSA     IS A POSITIVE?
      JMP  FAIL2 NO. PRINT TEST 14 FAILED OR LOOPED.
      LDB  0      B <- A
      ADB  M14     IS B > 13? 
      SSB          IF SO PRINT 14 IN MESSAGE. 
      JMP   SFS01   LATCH IS BETWEEN 1 & 13.
FAIL2 LDA   M1      THIS WILL PRINT 14 IN MESSAGE.
SFS01 SFS SC  IS MUX FLAG SET?
      JMP FAIL1 NO. MUX STUCK IN A LOOP.
CLF02 CLF SC  FLAG SET.  CLEAR IT.
      JSB $LIBX  TURN ON THE INTERRUPT SYSTEM 
      DEF *+1 
      DEF *+1 
      CPA D13  DID MUX PASS THE LAST TEST(SIO)? 
      JMP PASS  YES 
      INA      FIND TEST NUMBER FAILED
      ADA ERADR  CONVERT TO PRINTABLE ASCII 
      LDA A,I 
      STA MESS3+8  STORE IN THE MESSAGE 
      JSB EXEC  WRITE THE MESSAGE TO
      DEF *+5  TO THE OPERATOR
      DEF WRCOD 
      DEF WRTRM 
      DEF MESS3 
      DEF MESS3-1 
DONE  JSB EXEC
      DEF TAG 
      DEF ICODE 
      DEF INAME 
      DEF INUMB 
      DEF IPARM 
      DEF IPARM 
      DEF IPARM 
      DEF IPARM 
      DEF IPARM 
TAG   NOP 
* 
* 
WAIT  NOP         SUBROUTINE TO WAIT FOR THE FLAG 
      LDB TLEN  INITIALIZE WAIT LOOP COUNTER
WAITL INB    INCREMENT COUNTER
      SZB         COUNTER TURNED OVER?
      JMP SFS02  NO.
      JMP ERR1  YES.  MUX TIMED OUT 
SFS02 SFS SC  FLAG SET? 
      JMP WAITL  NO.
      JMP WAIT,I  YES.  RETURN
* 
* 
ERR1  JSB $LIBX       TURN INTERRUPTS BACK ON 
      DEF *+1 
      DEF *+1 
      JSB EXEC  WRITE ERROR MESSAGE TO THE
      DEF *+5  OPERATOR.
      DEF WRCOD 
      DEF WRTRM 
      DEF MESS1 
      DEF MESS1-1 
      JMP DONE  TERMINATE.
PASS  JSB EXEC   SEND PASS MESSAGE TO THE 
      DEF *+5   OPERATOR. 
      DEF WRCOD 
      DEF WRTRM 
      DEF MESS4 
      DEF MESS4-1 
      JMP DONE    TERMINATE.
* 
* 
FAIL1 JSB $LIBX  TURN INTERRUPTS BACK ON. 
      DEF *+1 
      DEF *+1 
      INA       FIND THE TEST NUMBER IN WHICH 
*               MUX IS STUCK. 
      ADA ERADR CONVERT THE NUMBER TO ASCII 
      LDA A,I    FOR PRINTING.
      STA MESS2+14  STORE IN THE MESSAGE. 
      JSB EXEC  INFORM THE OPERATOR OF THE
      DEF *+5   ERROR CONDITION 
      DEF WRCOD 
      DEF WRTRM 
      DEF MESS2 
      DEF MESS2-1 
      JMP DONE  TERMINATE.
* 
* 
SETEM NOP           SET I/O INSTRUCTIONS
      STA TMP1      SAVE WANTED SELECT CODE 
      STB TMP       SAVE A(INST ADDRESS TABLE)
      LDA B,I       FETCH FIRST 
      LDA A,I       ..INSTRUCTION 
      AND #SCOD     GET JUST SELECT CODE
      XOR TMP1      FIND DIFFERENCES
      SZA,RSS       ANY?
      JMP SETEM,I   NO, EXIT
      STA TMP1      SAVE
* 
SETM2 LDB TMP,I     GET A(INSTRUCTION)
      SZB,RSS       DONE? 
      JMP SETEM,I   YES 
      LDA B,I       FETCH INSTRUCTION 
      XOR TMP1      UPDATE
      STA B,I       RETURN
      ISZ TMP       NEXT! 
      JMP SETM2     LOOP FOR A WHILE
* 
.IOIN DEF *+1       CARD I/O INSTRUCTIONS 
      DEF OTA01 
      DEF OTA02 
      DEF OTB01 
      DEF LIA01 
      DEF STC01 
      DEF CLC01 
      DEF SFS01 
      DEF SFS02 
      DEF CLF01 
      DEF CLF02 
      OCT 0         END OF CARD I/O 
* 
* 
#SCOD OCT 77
MUXSC BSS 4 
ISTRC DEC 1 
IPR   BSS 10 STRING RETURNED BY NAMR
TMP   BSS 1        TEMPORARY
TMP1  BSS 1        TEMPORARY
ICODE DEC 6 
INAME DEC 0 
      DEC 0 
      DEC 0 
INUMB DEC 0 
IPARM DEF 0 
TIMLS DEC 12  SCHEDULE PROGRAM ITSELF 
IRESL DEC 2   TIME INTERVAL IN SECS.
MTPLE DEC 0   SCHEDULE PROGRAM ONLY ONCE. 
IOFF  DEC -2  2 SECONDS SCHEDULE. 
* 
RDCOD OCT 1   READ
RDTRM OCT 401 READ FROM TERMINAL. 
WRCOD DEC 2  WRITE COMMAND
WRTRM OCT 1  ASCII WRITE TO LU 1
ERADR DEF ERTBL    ADDRESS OF ASCII ERRORS. 
ERTBL ASC 1,14
      OCT 20061 
      OCT 20062 
      OCT 20063 
      OCT 20064 
      OCT 20065 
      OCT 20066 
      OCT 20067 
      OCT 20070 
      OCT 20071 
      OCT 30460 
      OCT 30461 
      OCT 30462 
      OCT 30463 
      ASC 1,??   TEST # ?? IN CASE LAST FLAG GOT LOST.
* 
      DEC 10
MESS1 ASC 10,NO RESPONSE FROM MUX 
* 
      DEC 15
MESS2 ASC 15,MUX LOOPING IN TEST NUMBER 
* 
      DEC 13
MESS3 ASC 13,MUX TEST NUMBER    FAILED
* 
      DEC 8 
MESS4 ASC 8,MUX TEST PASSED 
* 
      DEC 25
MESS5 ASC 25, ENTER MULTIPLEXER SELECT CODE IN OCTAL (E.G.21B)_ 
* 
TLEN  DEC -800   WAIT TIME LOOP COUNTER 
*                DECIDED BY MAKING SOME MEASUREMENTS
ERROR OCT 377 
D13   DEC 13
ZERO  OCT 0 
ONE   OCT 1 
M1    DEC -1
THREE  OCT 3
M14    DEC -14
M100B  OCT -100 
COUNT DEC -10000
FACTR DEC -100
DOWNL OCT 144000
MESS NOP
     OCT     141474 
     OCT     050400 
     OCT     000000 
     OCT     000000 
     OCT     000000 
     OCT     000000 
     OCT     000000 
     OCT     000000 
     OCT     015122 
     OCT     042522 
     OCT     026122 
     OCT     042522 
     OCT     015122 
     OCT     042522 
     OCT     026122 
     OCT     042522 
     OCT     000175 
     OCT     000163 
     OCT     000001 
     OCT     012020 
     OCT     126777 
     OCT     072202 
     OCT     147663 
     OCT     103407 
     OCT     003002 
     OCT     010004 
     OCT     042003 
     OCT     140405 
     OCT     165021 
     OCT     013400 
     OCT     030777 
     OCT     077715 
     OCT     052122 
     OCT     007024 
     OCT     037005 
     OCT     166571 
     OCT     037200 
     OCT     166571 
     OCT     127441 
     OCT     000001 
     OCT     021000 
     OCT     030026 
     OCT     000441 
     OCT     000020 
     OCT     007020 
     OCT     042453 
     OCT     103020 
     OCT     176015 
     OCT     020371 
     OCT     133702 
     OCT     042522 
     OCT     012441 
     OCT     000040 
     OCT     007000 
     OCT     020354 
     OCT     020400 
     OCT     001042 
     OCT     000060 
     OCT     012441 
     OCT     176577 
     OCT     076275 
     OCT     070040 
     OCT     000562 
     OCT     025574 
     OCT     177122 
     OCT     020364 
     OCT     020775 
     OCT     077574 
     OCT     136570 
     OCT     020001 
     OCT     075276 
     OCT     141105 
     OCT     051053 
     OCT     076376 
     OCT     051040 
     OCT     170257 
     OCT     134102 
     OCT     053450 
     OCT     154041 
     OCT     000003 
     OCT     021000 
     OCT     030016 
     OCT     004006 
     OCT     007041 
     OCT     020521 
     OCT     166663 
     OCT     010777 
     OCT     071041 
     OCT     177164 
     OCT     011443 
     OCT     015276 
     OCT     141105 
     OCT     051160 
     OCT     010366 
     OCT     020400 
     OCT     002042 
     OCT     000060 
     OCT     013112 
     OCT     075326 
     OCT     010127 
     OCT     045006 
     OCT     001041 
     OCT     027521 
     OCT     166663 
     OCT     020400 
     OCT     002755 
     OCT     074376 
     OCT     002702 
     OCT     042522 
     OCT     074776 
     OCT     005040 
     OCT     162442 
     OCT     000060 
     OCT     037125 
     OCT     151412 
     OCT     151432 
     OCT     037014 
     OCT     151412 
     OCT     151432 
     OCT     007020 
     OCT     037005 
     OCT     166571 
     OCT     037200 
     OCT     166571 
     OCT     007027 
     OCT     013007 
     OCT     037121 
     OCT     166507 
     OCT     003013 
     OCT     020461 
     OCT     050755 
     OCT     131755 
     OCT     057141 
     OCT     003101 
     OCT     064112 
     OCT     166501 
     OCT     046175 
     OCT     177133 
     OCT     024042 
     OCT     175566 
     OCT     014367 
     OCT     074376 
     OCT     055040 
     OCT     003076 
     OCT     024355 
     OCT     074430 
     OCT     002404 
     OCT     045355 
     OCT     040514 
     OCT     166515 
     OCT     045355 
     OCT     074114 
     OCT     163177 
     OCT     136440 
     OCT     010054 
     OCT     166515 
     OCT     037015 
     OCT     111062 
     OCT     000460 
     OCT     075015 
     OCT     012776 
     OCT     000040 
     OCT     135715 
     OCT     052122 
     OCT     035001 
     OCT     020333 
     OCT     177713 
     OCT     043440 
     OCT     175303 
     OCT     000000 
     OCT     003030 
     OCT     037020 
     OCT     047755 
     OCT     040474 
     OCT     177030 
     OCT     141130 
     OCT     051076 
     OCT     141723 
     OCT     004311 
SIZE  DEC        358
      END DIAG
      END$
                                                                                                                                                                                                                