* 
* PRINT ERROR MESSAGE 
* 
      CLA,CLE       PREPARE FOR FMTR. 
      LDB MESPT     GET MESSAGE POINTER FROM JSB
      JSB FMTR,I    PRINT ERROR MESSAGE.
* 
* PRINT FAILING SELECT CODE MESSAGE(IF SPECIFIED) 
* 
      LDB PARAM     GET SENDM CONTROL WORD. 
      SLB,RSS       PRINT MESSAGE?
      JMP PEMES      NO! PRINT NEXT MESSAGE.
      CLA,CLE       READY FORMATTER.
      LDB SCFAL     GET MESSAGE POINTER.
      JSB FMTR,I    PRINT MESSAGE.
* 
* PRINT OUTPUT MESSAGE (IF SPECIFIED) 
* 
PEMES LDB PARAM     GET PARAMETER WORD. 
      RBL           SHIFT BIT 14 AROUND.
      SSB,RSS       PRINT ENTIRE ERROR MESSAGE? 
      JMP HONLY      NO! GO HALT. 
      RBR            YES! SHIFT CONTROL WORD BACK.
      SSB           PRINT OUTPUT MESSAGE? 
      JMP NOINM      NO! GO DO INPUT MESSAGE. 
      LDA CTLWD     GET CONTROL WORD THAT WAS OUTPUT
      LDB OSTR1      AND PUT IT IN
      JSB O2AS,I      THE OUTPUT MESSAGE. 
      CLA,CLE       PRINT 
      LDB OTMES      OUTPUT 
      JSB FMTR,I      MESSAGE.
* 
* PRINT ACTUAL INPUT FROM SC. 
* 
NOINM LDA SAVPA     GET PASSED INPUT VALUE
      LDB ISTR1      AND PUT IT 
      JSB O2AS,I      IN THE INPUT MESSAGE. 
      CLA,CLE       PRINT 
      LDB INMES      INPUT
      JSB FMTR,I      MESSAGE.
* 
* PRINT EXPECTED INPUT
* 
      LDA SAVPB     GET EXPECTED INPUT. 
      LDB ESTR1     GET MESSAGE POINTER.
      JSB O2AS,I    MERGE EXPECTED INPUT INTO MESG. 
      CLA,CLE       PRINT 
      LDB EXMES      EXPECTED INPUT 
      JSB FMTR,I      MESSAGE.
* 
* ERROR HALT SECTION
* 
HONLY ISZ SENDM     UPDATE RETURN THRU SENDM. 
      LDB BIT14     SUPPRESS
      JSB SWRT        ERROR HALTS?
      JMP EXITN         YES! RETURN TO PROGRAM. 
      LDA ERRCD     GET ERROR CODE. 
      AND B77       STRIP TO SC OF HALT.
      IOR HLT00     MERGE 102000. 
      LDB ERRCD     GET ERROR CODE. 
      BLF,BLF       MOVE UPPER DIGIT AROUND TO
      RBL,SLB        BIT 0. IS IT SET?
      IOR BIT11        YES! SET TO 1060XX HALT. 
      RBL,SLB       IS NEXT DIGIT SET?
      IOR BIT9      YES! FORM 103000 OR 107000. 
      STA INLIN     PUT HALT IN LINE. 
      LDB PARAM     GET SENDM CONTROL.
      RBL           IS ACTUAL AND EXPECTED
      SSB            DATA VALID?
      JMP RESAB       YES! GO GET DATA. 
      CLA             NO! SET NO CARE 
      CLB                  DATA IN A & B. 
      JMP INLIN     GO HALT.
RESAB LDA SAVPA     RESTORE ACTUAL AND
      LDB SAVPB      EXPECTED DATA. 
INLIN HLT 0         CODED ERROR HALT. 
* 
* THE ABOVE CONFIGURED HALT INDICATES AN ERROR HAS
*  OCCURRED. THE HALT CODE MAY BE INTERPRETED BY
*   REFERRING TO THE MOD OR DIAGNOSTIC ITSELF.
* 
*    A-REG=ACTUAL DATA RECEIVED FROM THE IBI
* 
*    B-REG=EXPECTED DATA FROM THE IBI.
* 
* *NOTE- IF A=B THEN THE ACTUAL AND EXPECTED DATA IS IRRELEVANT 
*         (E.G.- A SFS IBI ERROR OCCURRED)
* 
* **PRESS RUN TO OBTAIN FURTHER ERROR DATA**
* 
* 
      SKP 
      LDB BIT11     SUPPRESS
      JSB SWRT       ERROR MESSAGES?
      RSS             YES! HALT.
      JMP EXITN       NO! DON'T HALT. 
      LDA CTLWD     RESTORE OUTPUT DATA OR CNTL WD. 
      LDB TSTSC     GET TEST SELECT CODE. 
E267  OCT 106067    SECONDARY ERROR HALT. 
* 
* HALT 106067 IS REACHED BY PRESSING RUN AFTER THE
*  ORIGINAL ERROR HALT OCCURRED.
* 
*   A-REG=CONTROL WORD OR DATA LAST OUTPUT TO THE IBI.
* 
*   B-REG=SELECT CODE UNDER TEST WHEN FAILURE OCCURRED. 
* 
EXITN JSB GETTM     SEE IF OPERATOR WANTS TS MODULE.
      LDA SAVPA     RESTORE ACTUAL AND
      LDB SAVPB       EXPECTED DATA.
      JMP SENDM,I   RETURN. 
      SKP 
      SPC 3 
* 
* CNVRT CONVERTS A 2-DIGIT OCTAL NUMBER TO ASCII. 
* 
CNVRT NOP 
      STA SDATA     SAVE BOTH NUMBERS.
      AND B70       STRIP TO SECOND DIGIT.
      ALF,RAL       FORM ASCII INTO 
      ADA UPASC      UPPER BYTE.
      STA SAVEA     SAVE IT.
      LDA SDATA     GET LOWER DIGIT AND 
      AND SEVEN      STRIP TO IT. 
      IOR SAVEA     ASCII STRING FORMED.
      JMP CNVRT,I   EXIT. 
      SPC 1 
* 
* STAT COMPARES THE DATA IN THE B-REG (MASKED WITH THE TEST MASK) 
*  WITH THE STATUS OF THE IBI (MASKED WITH THE TEST MASK).
* 
STAT  NOP 
      STA SAVAH     SAVE A-REG
      LDA B         SHIFT B TO A FOR MASK.
      AND MASK      STRIP TO TEST BITS. 
      STA RSAVB     SAVE A-REG. 
IO.01 STF IBI       INITIALIZE IBI TO CNTL MODE.
      JSB LIAIB     GET IBI STATUS. 
      AND MASK      MASK TEST BITS
      CPA RSAVB     IS DATA AS EXPECTED?
      JMP GOODS       YES! PROCESS RETURN.
      LDB STAT,I      NO! GET MESSAGE POINTER.
      STB SK5       PUT IT IN LINE. 
      LDB RSAVB     GET EXPECTED STATUS BACK. 
      JSB SENDM     SEND ERROR MESSAGE. 
SK5   DEF *         MESSAGE POINTER.
GOODS ISZ ERRCD     UPDATE ERROR CODE.
      ISZ STAT      UPDATE RETURN ADDRESS.
      LDB RSAVB     GET ORIGINAL B-REG VALUE. 
      LDA SAVAH     RESTORE A-REG.
      JMP STAT,I    RETURN. 
      SPC 1 
* 
* CONT OUTPUTS A CONTROL WORD TO THE IBI. 
*  CALLING FORMAT=
*    JSB CONT 
*    OCT XX      WHERE XX=CONTROL WORD VALUE
* 
CONT  NOP 
      STA SAVAH     SAVE A-REG. 
      LDA CONT,I    GET COMMAND DATA. 
      JSB STFIB     INITIALIZE IBI TO CNTL MODE.
      STA CTLWD     SAVE CONTROL WORD.
      JSB DATOT     OUTPUT CONTROL WORD TO IBI. 
      ISZ CONT      UPDATE RETURN ADDRESS.
      LDA SAVAH     RESTORE A-REG.
      JMP CONT,I    RETURN. 
      SKP 
* 
* PCRLF PRINTS A CR-LF ON THE CONSOLE.
* 
PCRLF NOP 
      CLA,CLE       READY FORMATTER.
      LDB CRLF      GET CR-LF STRING POINTER. 
      JSB FMTR,I    GO PRINT CR-LF. 
      JMP PCRLF,I   RETURN. 
      SPC 2 
* 
* TIMOT DELAYS FOR APPROXIMATELY 1 MS.
* 
TIMOT NOP 
      STA SAVAH     SAVE A-REG. 
      STB SAVEB     SAVE B-REG
      CLA,INA       GET 1 MS TIME CONSTANT
      JSB TMRR,I    CALL TIMER
      LDA SAVAH      YES! RESTORE A-REG.
      LDB SAVEB       RESTORE B-REG 
      JMP TIMOT,I   EXIT. 
      SPC 3 
* 
* CKMYA DETERMINES IF A MYADDR WAS DECODED. 
* 
CKMYA NOP 
      STA SAVAH     SAVE A-REG. 
      ISZ ERRCD     UPDATE ERROR NUMBER.
      CPA MIN1      HAS A NEW PARAMETER BEEN STORED?
      RSS            NO! SEND ERROR MESSAGE.
      JMP OKEXT      YES! RETURN NORMALLY.
      CLA           SET THE NO-CARE VALUES OF THE 
      CLB            ACTUAL AND EXPECTED DATA.
      JSB SENDM     SEND ERROR
      DEF MYADR       MESSAGE.
      LDA SAVAH     RESTORE A-REG.
OKEXT ISZ ERRCD     UPDATE ERROR NUMBER.
      JMP CKMYA,I   RETURN. 
      SPC 3 
* 
* DECREMENT ERROR COUNT 
* 
DECEC NOP 
      STA SAVAH     SAVE A-REG. 
      CCA           FORM -1 
      ADA ERRCD     ERROR NUMBER-1
      STA ERRCD     SAVE NEW ERROR NUMBER.
      LDA SAVAH     RESTORE A-REG.
      JMP DECEC,I   RETURN. 
      SKP 
* 
* CKDAV IS A COMMON ROUTINE USED TO CHECK ASCIIMODE COMMANDS. 
* 
CKDAV NOP 
      STA HOLDD     SAVE OUTPUT DATA. 
      JSB INITF     INITIALIZE OBR LOGIC FOR OUTPUT.
      LDA HOLDD     RESTORE OUTPUT DATA.
      JSB ASCOT     CHECK ASCII COMMAND.
      JMP CKDAV,I   RETURN. 
      SPC 1 
* 
* ASCOT IS A COMMON ROUTINE USED TO CHECK ASCIIMODE COMMANDS. 
* 
ASCOT NOP 
      JSB DATOT     OUTPUT DATA TO IBI. 
      JSB STAT      CHECK STATUS. IS IT OK? 
      DEF ASCIM      NO! REPORT ASCIIMODE ERROR.
      LDA HOLDD     RESTORE TEST PATTERN. 
      JMP ASCOT,I   RETURN. 
      SPC 1 
*         SWITCH REGISTER CHECK 
* 
SWRT  NOP 
      STA SAVEA     SAVE A-REG. 
      JSB DEBON     GO DEBOUNCE SW.REG. 
      AND B         MASK OUT TEST BIT(S). 
      SZA,RSS       ANY SWITCHES UP?
      ISZ SWRT       NO! UPDATE RETURN TO P+2.
      LDA SAVEA     RESTORE A-REG.
      JMP SWRT,I    RETURN. 
      SKP 
* SWITCH REGISTER DEBOUNCE ROUTINE
*  TO PREVENT OVERLAY OF A HALT BY A DEPRESSED SW. REG. BIT.
* 
DEBON NOP 
      LIA 1         GET SWITCH REG. 
      STA SAVSR     SAVE SW.REG. SETTING. 
      CLE           FOR TESTING.
      LDA CPTO      GET COMPUTER TYPE WORD. 
      ADA BCCOM     E=0 IF 2115 OR 2116.
      CLA,SEZ,RSS   IS THIS A 2115 OR 2116? 
      JMP RESSW      YES! SKIP DEBOUNCE.
WAITS OTA 1         TRY TO CLEAR SW.REG.
      LIA 1         GET SW.REG. BACK. 
      SZA,RSS       IS OPERATOR PRESSING A SWITCH?
      JMP WAITO      NO! GO DO NEXT SW. REG. TEST.
      CLA,CLE       SET DELAY MARKER. 
      JMP WAITS     WAIT TIL OPER. LETS GO. 
WATM1 CLE           SET DELAY MARKER. 
WAITO CCA           SET TEST PATTERN. 
      OTA 1         ATTEMPT TO SET ALL SR BITS. 
      LIA 1         GET SR CONTENTS.
      ISZ A         IS OPERATOR CLEARING A SWITCH?
      JMP WATM1      YES! WAIT UNTIL HE LETS GO.
      SEZ           WAS A SW.REG. BIT PRESSED?
      JMP RESSW      NO! GO RESTORE SW.REG. 
      INA            YES! DELAY 
      SZA                   ABOUT 
      JMP *-2                400 MS.
      JMP WAITS     GO TRY AGAIN. 
RESSW LDA SAVSR     RESTORE ORIGINAL SW.REG.
      OTA 1         RESTORE DISPLAY.
      JMP DEBON,I   RETURN. 
      SKP 
* 
* STUFJ PUTS A JMP 3,I IN THE IBI TRAP CELL AND PUTS
*  THE ADDRESS FOUND IN JSB+1 INTO ADDRESS 3. 
* 
STUFJ NOP 
      LDB JMPT3     GET JMP 3,I.
      STB WSCOD,I   PUT IT IN IBI TEST SC.
      LDA STUFJ,I   GET SUBROUTINE ADDRESS. 
      STA 3         PUT IT IN ADDRESS 3.
      ISZ STUFJ     UPDATE RETURN.
      JMP STUFJ,I   RETURN. 
      SPC 3 
* 
* NOTWM INITIALIZES THE SENDM ROUTINE TO SEND THE FAILING SC
*  AND ERROR MESSAGE TO THE CONSOLE IF AN ERROR OCCURS. 
* 
NOTWM NOP 
      CLA,INA       SET ERROR REPORT TO PRINT FAILING 
      STA PARAM      SC AND MESSAGE ONLY. 
      JMP NOTWM,I   RETURN. 
      SPC 3 
* 
* PRWMS INITIALIZES THE SENDM ROUTINE TO SEND THE ENTIRE
*  ERROR MESSAGE TO THE CONSOLE IF AN ERROR OCCURS. 
* 
PRWMS NOP 
      LDA PSCW2     SET ERROR REPORT TO PRINT 
      STA PARAM      ENTIRE ERROR MESSAGE.
      JMP PRWMS,I   RETURN. 
      SPC 3 
* 
* DMAER IS A COMMON ROUTINE USED TO REPORT
*  IBI FAILURES RELATED TO DMA. 
* 
DMAER NOP 
      JSB SENDM     REPORT DMA
      DEF DMAFL      RELATED FAILURE. 
      JMP DMAER,I   RETURN. 
      SPC 3 
      HED MESSAGES
CF    ASC 01, / 
CRLF  DEF CF
INTRO ASC 11,HPIB 59310 DIAGNOSTIC
INTRX ASC 07,  DSN XXXXXX/
HDMX  DEF INTRX+3 
INTMS DEF INTRO 
OUTMS ASC 13, OUTPUT  XXXXXX TO SC XX/
OTMES DEF OUTMS 
OSTR1 DEF OUTMS+4 
OSTR2 DEF OUTMS+11
INMSG ASC 15, INPUT   XXXXXX FROM SC XX/
INMES DEF INMSG 
ISTR1 DEF INMSG+4 
ISTR2 DEF INMSG+12
EXMSG ASC 14, EXPECTED INPUT =  XXXXXX/ 
EXMES DEF EXMSG 
ESTR1 DEF EXMSG+9 
ISTAF ASC 12,INITIAL STATUS FAILURE/
ACTF  ASC 05,ACTIVE / 
RENF  ASC 04,REN /
ATNF  ASC 04,ATN /
TALKF ASC 04,TALK / 
LSTNF ASC 05,LISTEN / 
IFCF1 ASC 04,IFC OS/
RNIFC ASC 06,REN OR IFC/
EOR   ASC 02,EOR/ 
SCFAL DEF FAILS 
FAILS ASC 08,FAILING SC  XX/
FALSC DEF FAILS+6 
IOFLG ASC 05,I-O FLAG/
EOFEN ASC 05,EOR FLAG/
ORAFL ASC 05,ORA FLAG/
IRLFL ASC 05,IRL FLAG/
SPMFF ASC 05,SPM FLAG/
SRQFL ASC 04,SRQFLG/
PPFL2 ASC 03,PPPID/ 
PPREQ ASC 06,PP REQUEST/
BUSDF ASC 04,IB DATA/ 
MYADR ASC 04,MY ADDR/ 
ASCIM ASC 06 ASCII MODE/
HANDS ASC 05,HANDSHAKE/ 
DMAFL ASC 02,DMA/ 
FLGER ASC 02,SKF/ 
IENFL ASC 02,IEN/ 
SCFL  ASC 05,SC XTALK/
CLCFL ASC 02,CLC/ 
CABLF ASC 03,CABLE/ 
PASSC ASC 07,PASS  XXXXXX/
PASSN DEF PASSC 
PASPT DEF PASSC+3 
IAKFL ASC 02,IAK/ 
INTFL ASC 02,INT/ 
TSINM DEF *+1 
      OCT 6412,6412 
      ASC 18,HPIB DEVICE TROUBLESHOOTING MODULE/
ERMES DEF *+1 
EMESG ASC 03,EXXX _ 
PRMPT DEF *+1 
      ASC 01,:_ 
ERMSG DEF *+1 
      OCT 6412
      ASC 06,INPUT ERROR/ 
PRMSG DEF *+1 
      OCT 6412
      ASC 15,H256 PRESS PRESET(S) AND RUN/
PRERR ASC 13,PRESET DID NOT CLEAR IBI/
      SKP 
      HED MAIN 59310A DIAGNOSTIC
      ORG 2000B 
      CLC 0,C       CLEAR I-O.
      JMP STARX     GO TO RESTART LOCATION. 
* 
* CONFIGURATION SECTION 
CONFG CLC 0,C       CLEAR I-O.
      LIA 1         GET SC INFO FROM SW. REG. 
      AND B77       MASK TO FIRST IBI SC. 
      STA IBH1      SAVE IT FOR TESTING.
      AND B70       MASK TO UPPER SC DIGIT. 
      SZA,RSS       IS SC>7?
      JMP HLT73      NO! GO TELL OPERATOR.
      LIA 1         GET SW. REG. AGAIN. 
      ALF,ALF       SHIFT SECOND
      RAL,RAL        SC AROUND TO LOWER BYTE. 
      AND B77       MASK TO SECOND IBI SC.
      STA IBH2      SAVE IT FOR TESTING.
      SZA,RSS       IS THERE A SECOND SC? 
      JMP NOSC1      NO! GO HALT NORMALLY.
      AND B70       MASK TO UPPER SC DIGIT. 
      SZA           IS SC > 7 ? 
      JMP NOSC1      YES! CONTINUE NORMALLY.
HLT73 HLT 73B        NO! TELL OPERATOR HE ENTERED 
      JMP CONFG           ILLEGAL SC AND THEN RETURN. 
NOSC1 CLA 
      OTA 1         CLEAR SW REG
      HLT 70B       TEST SC'S ENTERED PROPERLY. 
      LIA 1         GET SW.REG. WITH MYADDR(S). 
      STA SAVEA     SAVE IT FOR LATER USE.
      AND B77       MASK TO FIRST MYADDR. 
      CPA B37       ADDRESS 37 IS NOT ALLOWED 
      JMP HLT73     TRY AGAIN 
      STA MYA1      SAVE IT.
      LDA SAVEA     GET ORIGINAL SW. REG. 
      ALF,ALF       ROTATE SECOND MYADDR INTO 
      RAL,RAL        POSITION FOR MASK. 
      AND B77       MASK TO SECOND MYADDR.
      CPA B37       ADDRESS 37 IS NOT ALLOWED 
      JMP HLT73     TRY AGAIN 
      STA MYA2      SAVE IT.
      CLA 
      OTA 1         CLEAR SW REG
      HLT 71B       MYADDR(S) ENTERED.
      LIA 1         GET PPPID INPUT FROM SW.REG.
      AND B377      MASK TO FIRST PPPID.
      STA PID1      SAVE IT.
      LIA 1         GET SW. REG. AGAIN. 
      ALF,ALF       SHIFT SECOND PPPID AROUND 
      AND B377       AND MASK IT OFF. 
      STA PID2      SAVE IT.
      LDA IBH2      IS THERE A SECOND SC
      SZA            UNDER TEST?
      JMP NOSSC      YES! GO HALT 74B.
      LDA IBH1       NO! UPDATE ALL INPUT PARAMETERS
      STA IBH2            SO THAT ONLY ONE IBI
      LDA MYA1              WILL BE TESTED BECAUSE OPERATOR 
      STA MYA2               INDICATED ONLY ONE IBI IS
      LDA PID1                 PRESENT. 
      STA PID2
NOSSC CLA 
      OTA 1         CLEAR SW REG
      HLT 74B       END OF CONFIGURATION. 
      SKP 
* 
* START OF MAIN DIAGNOSTIC
* 
STARX LDA HALTC     GET TRAP CELL HALT. 
      LDB TWO       GET FIRST TRAP CELL LOCATION. 
TRAPL STA B,I       PUT A HALT IN THE TRAP CELL.
      CPB B77       STORED LAST TRAP CELL?
      JMP SKIN       YES! GO TO TESTING.
      INB            NO! UPDATE TRAP CELL POINTER.
      JMP TRAPL     GO STORE THE NEXT TRAP CELL.
SKIN  CLA           INITIALIZE THE
      STA PASCT       PASS COUNT. 
      LDB BIT10     SEE IF OPERATOR SUPPRESSED NON- 
      JSB SWRT       ERROR MESSAGES. DID HE?
      JMP CKTSM      YES! SKIP PRINTING.
      CLE 
      LDA DSN       GET DSN 
      LDB HDMX      ADDR OF MESSAGE STRING
      JSB O2AS,I    CONVERT OCTAL TO ASCII. 
      JSB PCRLF     GO PRINT CR-LF. 
      CLA,CLE 
      LDB INTMS     GET INFORMATION AND MESSAGE POINTER.
      JSB FMTR,I    GO PRINT MESSAGE. 
CKTSM JSB GETTM     SEE IF OPERATOR WANTS TS MODULE.
      CLA           CLEAR THE 
      STA CTLWD       CONTROL WORD. 
      LDA B7760     GET THE INITIAL TEST MASK.
      STA MASK      SAVE IT FOR TEST. 
      CCA           INITIALIZE PASS 
      STA PSIND       INDICATOR.
MAINL JSB NOTWM     SET ERROR REPORTING MODE. 
      JSB SWAP      GO SET UP TEST INFORMATION. 
      CLA           SET UP INITIAL
      STA ERRCD      ERROR HALT NUMBER. 
* 
* TEST FLAG AND SKF LOGIC OF IBI
* 
      CLC INTP,C       SHOULD SET IFC FLG FF. 
      JSB CLCCF     CLEAR FLAG ON IBI.
      JSB TIMOT     ALLOW TIME FOR IFC TO SETTLE. 
      JSB SFCIB     IS I-O FLAG CLEAR?
E000  DEF FLGER      NO! REPORT ERROR.
      JSB CONT      SET ACTIVE AND
      OCT 100205      SRQFLGEN. I-O FLAG SHOULD SET.
      JSB SFSIB     DID FLAG SET? 
E001  DEF FLGER      NO! REPORT ERROR.
IO.02 SFS IBI       SKF SHOULD OCCUR. 
      RSS           IT DIDN'T. ERROR. 
      JMP SK6       IT DID . CONTINUE.
      JSB SENDM     REPORT ERROR. 
E002  DEF FLGER     NO SKF ON SFS.
SK6   ISZ ERRCD     UPDATE ERROR CODE.
      JSB CLCCF     SHOULD CLEAR IFC FLG FF.
IO.03 SFC IBI       SKF SHOULD OCCUR. 
      RSS           IT DIDN'T. REPORT ERROR.
      JMP SK7       IT DID SO CONTINUE NORMALLY.
      JSB SENDM     REPORT ERROR. 
E003  DEF FLGER     NO SKF ON SFC.
SK7   ISZ ERRCD     UPDATE ERROR CODE.
      SKP 
* 
* TEST INTERRUPT LOGIC
* 
      JSB STUFJ     SET UP RETURN JMP IN THE
      DEF RTN1       IBI TRAP CELL. 
      CLC INTP,C       SET IFC FLG FF.
      JSB TIMOT     ALLOW IFC TIME TO SETTLE. 
      JSB CONT      SET SRQFLGEN TO SET 
      OCT 100205     THE IBI FLAG FF. 
IO.04 STC IBI       SET THE CONTROL FF. 
      STF INTP      TURN I/O SYSTEM ON THEN 
      CLF INTP       TURN IT OFF. 
      NOP           IBI SHOULDN'T INTERRUPT.
      JMP XSCTT      IT DIDN'T.GO TO NEXT TEST. 
RTN1  JSB SENDM      IT DID SO REPORT ERROR.
E004  DEF IENFL     IEN LOW DIDN'T HOLD OFF INT.
XSCTT ISZ ERRCD     UPDATE ERROR CODE.
* 
* TEST FOR ILLEGAL SELECT CODE DECODE.
* 
      LDB BIT3      START WITH SC 10. 
SCLOP CLC INTP,C       ISSUE CRS TO IBI.
      JSB TIMOT     ALLOW TIME FOR IFC TO SETTLE. 
      JSB CONT      SET ACTIVE AND
      OCT 100205      SRQEN.
      LDA IO.04     GET I-O INSTRUCTION.
      AND B77       MASK TO SC. 
      CPB A         IS THIS THE IBI TEST SC?
      JMP EXCTT      YES! SKIP TEST.
      LDA CLC        NO! SET UP 
      AND NB77         A CLC IBI,C
      IOR B              INSTRUCTION. 
      STA CLC       PUT IT IN LINE. 
CLC   CLC IBI,C     ISSUE CLRINTFLG TO IBI. 
      JSB SFSIB     WAS FLAG CLEARED ILLEGALLY? 
E005  DEF SCFL       YES! REPORT ERROR. 
      JSB DECEC     DECREMENT ERROR CODE. 
EXCTT CPB B77       IS TEST FINISHED? 
      JMP BIO6C      YES! GO EXIT.
      INB            NO! UPDATE TO NEXT SC
      JMP SCLOP        AND GO TEST IT.
* 
* CHECK CONTROL FF LOW
*  HOLDS OFF AN INTERRUPT.
* 
BIO6C ISZ ERRCD     UPDATE ERROR CODE.
      JSB STUFJ     PUT RETURN JMP IN IBI 
      DEF RTN2        TRAP CELL.
IO.06 STC IBI       SET CONTROL FF ON IBI.
      STF INTP      TURN ON INTERRUPT SYSTEM. 
IO.15 CLC IBI       CLEAR CONTROL FF ON IBI.
      NOP           ALLOW TIME TO INTERRUPT.
      JMP XINTT     NO INT? GO DO NEXT TEST.
RTN2  JSB SENDM     INT? SEND ERROR MESSAGE.
E006  DEF CLCFL     CNTL LOW DIDN'T HOLD OFF INT. 
XINTT ISZ ERRCD     UPDATE ERROR CODE.
* 
* CHECK IBI CAN INTERRUPT 
* 
      JSB STUFJ     SET UP RETURN JMP 
      DEF RTN5       IN IBI TRAP CELL.
IO.16 STC IBI       SET CONTROL FF ON IBI.
      NOP           IBI SHOULD INTERRUPT HERE.
      JSB SENDM     NO INTERRUPT SO 
E007  DEF INTFL      REPORT ERROR.
RTN5  ISZ ERRCD     UPDATE ERROR CODE.
      JSB STUFJ     SET UP RETURN JMP IN
      DEF RTN6       IBI TRAP CELL. 
      STF INTP      TURN ON INTERRUPT SYSTEM. 
      NOP           NO INT SHOULD OCCUR.
      JMP CINST     IT DIDN'T! CONTINUE.
RTN6  JSB SENDM     IT DID! REPORT ERROR. 
E010  DEF IAKFL     IAK DID NOT WORK. 
* 
* TEST INITIAL STATUS OF IBI1 AND IBI2. 
* 
CINST CLF INTP      TURN OFF INT. SYSTEM. 
      ISZ ERRCD     UPDATE ERROR CODE.
      LDA PSCAE     UPDATE ERROR MESSAGE
      STA PARAM      CONTROL WORD.
      JSB CLCCF     INITIALIZE I-O. 
      JSB INITF     INITIALIZE OBR LOGIC. 
      LDB ISTAT     GET EXPECTED IBI STATUS WORD. 
      JSB STAT      GET IBI STATUS. IS IT OK? 
E011  DEF ISTAF      NO! INITIAL STATUS FAILURE.
      SKP 
* 
* TEST THE SET AND CLEAR CONTROL WORD 
*  CAPABILITIES OF THE ACTIVE,REN,ATN,TALK
*   AND LISTEN FLIP-FLOPS.
* 
      JSB PRWMS     SET UP ERROR REPORTING MODE.
      STO           SET MESG INDICATOR. 
      LDA B760      SET UP
      STA MASK       TEST MASK. 
      LDA MTABL     SET 
      STA MTAB1      UP 
      LDA CTABL      MESSAGE, 
      STA CTAB1      CONTROL DATA AND 
      LDA ETABL       EXPECTED
      STA ETAB1         DATA TABLE POINTERS.
TL01B LDA MTAB1,I   GET ERROR MESSAGE POINTER.
      STA E012      PUT IT IN LINE. 
      LDA CTAB1,I   GET CONTROL WORD FROM TABLE.
      STA INLCO     PUT IT IN LINE. 
      LDB ETAB1,I   GET EXPECTED STATUS.
      JSB CONT      OUTPUT CONTROL WORD TO IBI .
INLCO NOP           CONTORL WORD. 
      JSB STAT      GET STATUS FROM IBI . 
E012  DEF *         ERROR MESG POINTER.  *E012 - E027*
      ISZ CTAB1     INCREMENT CONTROL WORD POINTER. 
      LDA CTAB1,I   GET CONTROL WORD. 
      CPA MIN1      IS THIS THE END OF THE TABLE? 
      JMP TL02A      YES! GO TO NEXT TEST.
      ISZ ETAB1      NO! INCREMENT EXPECTED DATA TABLE. 
      SOS           OVERFLOW SET? 
      JMP SK8        NO! GO UPDATE MESG TABLE PNTR. 
      CLO            YES! CLEAR OVERFLOW AND SKIP 
      JMP TL01B           MESG PNTR UPDATE. 
SK8   STO           SET OVERFLOW. 
      ISZ MTAB1     UPDATE MESSAGE TABLE PNTR.
      JMP TL01B     GO CONTINUE TESTING.
      SKP 
* 
* THIS SECTION TESTS THE IFC ONE-SHOT LOGIC 
*  CAN CLEAR ATN AND SET ACTIVE.
* 
TL02A JSB CONT      SET ATN AND 
      OCT 64          CLEAR ACTIVE
      JSB IFCMD     SET IFC.
      LDB B31       EXPECTED STATUS.
      JSB STAT      GET IBI STATUS. IS IT OK? 
E030  DEF IFCF1      NO! IFC OS FAILURE.
* 
* NOW TEST IFC OS STAYS ON FOR APPROXIMATELY
*   40 MICROSECONDS.
* 
      JSB IFCMD     TRIGGER IFC.
      JSB CACTV     CLEAR ACTIVE. 
      JSB STAT      GET IBI STATUS. ACTIVE CLEAR? 
E031  DEF IFCF1      YES! IFC FAILED AFTER 40 US. 
* 
* INSURE IFC OS EVENTUALLY CLEARS 
* 
      JSB TIMOT     ALLOW TIME FOR IFC TO SETTLE. 
      JSB CACTV     CLEAR ACTIVE. 
      LDB B11       GET EXPECTED STATUS.
      JSB STAT      DID ACTIVE CLEAR? 
E032  DEF IFCF1      NO! REPORT ERROR.
* 
* THIS SECTION TESTS THE ABILITY OF CRS TO
*  SET IFC AND CLEAR REN. 
* 
      JSB CONT      SET THE 
      OCT 3           REN FF. 
      CLC INTP,C       ISSUE CRS. 
      JSB TIMOT     ALLOW IFC TIME TO SETTLE. 
      LDB B31       GET EXPECTED STATUS.
      JSB STAT      IS ACTIVE SET & REN CLEAR?
E033  DEF RNIFC      NO! REN OR IFC FAILURE.
      SKP 
* 
* THIS SECTION TESTS THE EORFLG 
*  AND EORFLGEN LOGIC 
* 
      LDB BIT12     SET TEST
      STB MASK       MASK TO 10000. 
      JSB SPPMD     SET ATN FF AND EOI FF.
      JSB SINPD     STROBE EOR FF.
      JSB STAT      GET IBI STATUS. IS EOR FF SET?
E034  DEF EOR        NO! EOR FAILURE. 
* 
* ATN SHOULD BE CLEAR FROM STROBE INPUT DATA, 
*  THUS DISABLING EOI.
* 
      JSB CLCCF     CLEAR EOR FF. 
      JSB SATN      SET ATN AND CLEAR EOI.
      JSB SINPD     STROBE EOR FF CLEAR.
      CLB           GET EXPECTED STATUS.
      JSB STAT      GET IBI STATUS. IS EOR FF CLEAR?
E035  DEF EOR        NO! EOR FAILURE. 
* 
* NOW CHECK THAT CLC IBI,C CLEARS THE EOR FF. 
* 
      JSB SPPMD     SET END OR IDENTIFY AND ATN.
      JSB SINPD     STROBE EOR FF SET.
      JSB CLCCF     CLC IBI,C CLEARS THE EOR FF.
      JSB STAT      GET IBI STATUS. IS EOR FF CLEAR?
E036  DEF EOR        NO! EOR FAILURE. 
* 
* CHECK NO ATN DISABLES EOI TO IB 
* 
      JSB SEOI      CLEAR ATN, SET EOI. 
      JSB SINPD     CLOCK EOI LOW.
      JSB STAT      DID EOI CLEAR?
E037  DEF EOR        NO! REPORT ERROR.
* 
* THIS SECTION CHECKS THE EOI FF CAN BE CLEARED.
* 
      JSB SATN      SET ATN FF. CLEAR EOI FF. 
      JSB SINPD     STROBE EOR FF. SHOULD CLEAR IT. 
      JSB STAT      GET IBI STATUS. IS EOR CLEAR? 
E040  DEF EOR        NO! EOR FAILURE. 
      JSB STALK     SET TALK MODE.
      JSB SEOI      SET EOI FF. 
      JSB IFCMD     TRIGGER IFC. CLEARS EOI.
      JSB TIMOT     ALLOW IFC TO SETTLE OUT.
      JSB SINPD     STROBE EOR FF. SHOULD CLEAR IT. 
      JSB STAT      GET IBI STATUS. IS EOI CLEAR? 
E041  DEF EOR        NO! EOR FAILURE. 
      SKP 
                                                                                                                                  