* 
*  SUBROUTINE TO SET UP SUBTEST AND CALL MICRO. 
*  ENTER WITH (A)=POINTER TO INPUT
* 
MPSUB NOP 
      STA XMLP1       IN MICRO CALL.
      ADA .+3       SET POINTER TO 2ND OPERAND
      STA XMLP2       IN MICRO CALL.
      ADA .+3       SET POINTER TO EXPECTED 
      STA TEMP+1      OUTPUT. 
* 
*  CALL MICRO 
* 
      RAM .XMPY     CALLING SEQUENCE. 
      DEF OUTPT     POINTER TO OUTPUT LOCATION
XMLP1 BSS 1         POINTER TO 1ST OPERAND
XMLP2 BSS 1         POINTER TO 2ND OPERAND
* 
      JMP MPSUB,I   EXIT. 
* 
* 
* 
*  SUBROUTINE TO DO SOME PROCESSING 
*  IF MORE SUBTESTS ARE TO BE MADE, EXIT TO (P+1) 
*  OTHERWISE EXIT TO (P+2)
* 
MPPRC NOP 
      LDA TEMP+1    CHECK 
      JSB PDATC,I     RESULTS.
      JMP MPPR2     ERROR.
MPPR1 EQU * 
      ISZ INDIC     BUMP COUNTER. 
      JMP *+3 
      ISZ MPPRC     DONE. EXIT TO (P+2).
      JMP MPPRC,I 
      LDA TEMP      NOT DONE. MOVE POINTER
      ADA .+9         TO NEXT ENTRY.
      STA TEMP
      JMP MPPRC,I   EXIT TO (P+1).
* 
MPPR2 EQU * 
      LDB PERN4 
      JSB PERMS,I   OUTPUT ERROR MESSAGE. 
      JMP MPPR1 
* 
* 
* 
PXMP5 DEF XMPY5 
PXMP4 DEF XMPY4 
* 
* 
* 
      HED FFP DIAGNOSTIC - TEST 11
* 
********* 
* .XDIV * 
********* 
TST10 EQU * 
XXDIV NOP 
* 
      JSB MSGC,I    OUTPUT MESSAGE. 
      DEF MMS11 
* 
*  DO STANDARD TEST TABLE 
* 
      LDA PDVHD,I   SET 
      CMA,INA 
      STA INDIC       COUNTER.
      LDA PDVBS     SET 
      STA TEMP        POINTER.
* 
XDIV1 EQU * 
      JSB DVSUB     DO SUBTEST. 
* 
      JSB DVPRC 
      JMP XDIV1     DO NEXT SUBTEST.
* 
*  DO SPECIAL TEST TABLE
* 
      LDA PDVH1,I    SET
      CMA,INA 
      STA INDIC       COUNTER.
      LDA PDVB1     SET 
      STA TEMP        POINTER.
* 
XDIV5 EQU * 
      CLO           CLEAR OVERFLOW. 
      JSB DVSUB     DO SUBTEST. 
      SOC           CHECK OVERFLOW. 
      JMP XDIV2     SET! CONTINUE.
      LDB PR201     NOT SET! OUTPUT 
      JSB PPROV,I     MESSAGE.
XDIV2 EQU * 
      JSB DVPRC 
      JMP XDIV5     DO NEXT SUBTEST.
* 
* 
* 
*  DO INTERRUPT TEST
* 
      JSB PINTK,I   IF NOT CONF. FOR INTERR., 
      JMP XXDIV,I     EXIT
* 
      CLA           CLEAR INDICATOR 
      STA INTID 
      LDA PDVBS     SET POINTERS IN 
      STA XDVP3       MICRO 
      ADA .+3           CALL
      STA XDVP4 
      LDA PXDV6     SET EXIT ADDRESS
      STA INTN1 
      JSB INTON     TURN ON INTERR. INTERF. 
      STF INTP      ENABLE INTERRUPTS 
XDIV4 EQU * 
      RAM .XDIV     MICRO CALL
      DEF OUTPT     POINTER TO OUTPUT LOCATION
XDVP3 BSS 1         POINTER TO 1ST OPERAND
XDVP4 BSS 1         POINTER TO 2ND OPERAND
* 
      CLF INTP      DISABLE INTERRUPTS
      JSB INTOF     TURN OFF INTERR. INTERF.
XDIV6 EQU * 
      JSB PCHEK,I   CHECK INTERRUPT 
      RSS 
      JMP XDIV3     INTERRUPTED 
      LDB PR202     NOT INTERRUPTED. OUTPUT 
      JSB PPRNN,I     ERROR MESSAGE 
      JMP XXDIV,I       AND EXIT
* 
XDIV3 EQU * 
      LDA INTAD     WAS P RESTORED? 
      CPA PXDV4 
      JMP XXDIV,I   YES. EXIT.
      LDB PR203     NO. OUTPUT ERROR
      JSB PPNRS,I     MESSAGE 
      JMP XXDIV,I   EXIT
* 
* 
* 
* 
* 
*  SUBROUTINE TO SET UP SUBTEST AND CALL MICRO
*  ENTER WITH (A)=POINTER TO INPUT
* 
DVSUB NOP 
      STA XDVP1     SET POINTER TO 1ST OPERAND IN 
      ADA .+3         MICRO CALL. SET POINTER TO
      STA XDVP2     2ND OPERAND IN MICRO CALL.
      ADA .+3       SET POINTER TO EXPECTED 
      STA TEMP+1      OUTPUT. 
* 
*  CALL MICRO 
* 
      RAM .XDIV     CALLING SEQUENCE. 
      DEF OUTPT     POINTER TO OUTPUT LOCATION
XDVP1 BSS 1         POINTER TO 1ST OPERAND
XDVP2 BSS 1         POINTER TO 2ND OPERAND
* 
      JMP DVSUB,I   EXIT. 
* 
* 
* 
*  SUBROUTINE TO DO SOME PROCESSING 
*  IF MORE SUBTESTS ARE TO BE MADE, EXIT TO (P+1).
*  OTHERWISE EXIT TO (P+2)
* 
DVPRC NOP 
      LDA TEMP+1    CHECK 
      JSB PDATC,I     RESULTS.
      JMP DVPR2     ERROR.
DVPR1 EQU * 
      ISZ INDIC     BUMP COUNTER. 
      JMP *+3 
      ISZ DVPRC     DONE. EXIT TO (P+2).
      JMP DVPRC,I 
      LDA TEMP      NOT DONE. MOVE POINTER
      ADA .+9         TO NEXT ENTRY.
      STA TEMP
      JMP DVPRC,I   EXIT TO (P+1).
* 
DVPR2 EQU * 
      LDB PERN5 
      JSB PERMS,I   OUTPUT ERROR MESSAGE. 
      JMP DVPR1 
* 
* 
* 
PR202 DEF E202
PXDV4 DEF XDIV4 
PR203 DEF E203
PXDV6 DEF XDIV6 
* 
* 
* 
      HED FFP DIAGNOSTIC - TEST 12
* 
********* 
* XDV  *
********* 
* 
TST11 EQU * 
XXDV  NOP 
      JSB MSGC,I    OUTPUT MESSAGE
      DEF MMS12 
* 
*  DO JUST ONE TEST, SINCE XDIV SUBROUTINE USES THE 
*  SAME CODE AS .XDV SUBROUTINE 
* 
* 
      LDA PDVBS     SET POINTER TO INPUT
      STA TEMP
      STA XDV1      SET POINTER TO 1ST OPERAND
      ADA .+3 
      STA XDV2      SET POINTER TO 2ND OPERAND
      ADA .+3 
      STA TEMP+1
* 
*  CALL MICRO 
* 
      RAM XDIV
      DEF *+4 
      DEF OUTPT     POINTER TO OUTPUT 
XDV1  BSS 1         POINTER TO 1ST OPERAND
XDV2  BSS 1         POINTER TO 2ND OPERAND
* 
*  EXIT FROM MICRO
* 
      LDA TEMP+1    CHECK RESULT
      JSB PDATC,I 
      RSS 
      JMP XXDV,I    OK. 
* 
      LDB PER12     ERROR. OUTPUT ERROR 
      JSB PERMS,I     MESSAGE 
      JMP XXDV,I    EXIT
* 
* 
      HED SUBROUTINES 
* 
*  SUBROUTINE TO DISABLE MEMORY PROTECT LOGIC AND 
*  TO RESTORE TRAP CELL HALT. 
* 
MTNOF NOP 
      CLC MPPAR     DISABLE MEM. PROTECT LOGIC. 
      LDA TRHLT     RESTORE TRAP CELL HALT. 
      STA MPPAR 
      CLA           RESET MEM. PROTECT TEST 
      STA MPTES       INDICATOR.
      CLF INTP      TURN OFF INTERRUPT SYSTEM.
      JMP MTNOF,I   EXIT. 
* 
* 
* 
*  SUBROUTINE TO PRINT "NO CHECK ON MEM PROT VIOLATION".
*  ALSO TO TURN OFF MEM PROTECT LOGIC.
*  ENTER WITH (B)= POINTER TO ERROR NUMBER STRING 
* 
PRNMP NOP 
      JSB MTNOF     TURN OFF MEM PROTECT LOGIC. 
      LDA B,I       MOVE
      STA RMS09       ERROR 
      INB               NUMBER
      LDA B,I             INTO
      STA RMS09+1           MESSAGE BUFFER. 
* 
      JSB ERMS,I    PRINT ERROR MESSAGE.
      DEF RMS09 
      JMP PRNMP,I   EXIT. 
* 
* 
      SKP 
* 
      ORG 6000B 
* 
* 
*  SUBROUTINE TO PROCESS DATA ERROR MESSAGES FOR
*         .XADD     .XSUB     XADD        XSUB
*         .XMPY     .XDIV     XMPY        XDIV
*  TESTS. 
* 
*  ENTER WITH (B)= POINTER TO ERROR NUMBER STRING.
*  PRIOR TO ENTERING THE FOLLOWING SHOULD BE SET UP:
*         (TEMP+1)=POINTER TO EXPECTED OUTPUT 
*         (POUTP)= POINTER TO OBTAINED OUTPUT 
* 
ERMES NOP 
      LDA B,I       MOVE
      STA RMS00       ERROR NUMBER
      INB 
      LDA B,I     I    INTO 
      STA RMS00+1        MESSAGE BUFFER.
* 
*  MOVE ACTUAL DATA INTO BUFFER 
* 
      LDA POUTP     SET POINTER 
      STA TEMP+5      TO OBTAINED OUTPUT. 
      LDB .-3 
      LDA PRAC1 
      JSB CBNOC     MOVE DATA.
* 
*  MOVE EXPECTED DATA INTO BUFFER 
* 
      LDA TEMP+1    SET POINTER 
      STA TEMP+5      TO EXPECTED OUTPUT. 
      LDB .-3 
      LDA PREX1 
      JSB CBNOC     MOVE DATA.
* 
*  OUTPUT MESSAGE 
* 
      LDB POUTP 
      INB 
      STB TEMP+6
      LDA POUTP,I   (A)=1ST WORD OF OBTAINED OUTPUT.
      LDB B,I       (B)=2ND WORD OF OBTAINED OUTPUT.
      JSB ERMS,I    GO TO ERROR PRINTING ROUTINE. 
      DEF RMS00 
      LDB BIT14     IF BIT#14 IS NOT SET, 
      JSB SWRT,I
      JMP ERMES,I     EXIT. 
      ISZ TEMP+6    OTHERWISE SET (A)=3RD WORD
      LDB TEMP+6,I    OF OBTAINED OUTPUT, 
      CLB               SET (B)=0 AND 
      OCT 107002          HALT. 
* 
      LDA TEMP+1,I  SET (A)=1ST WORD OF EXPECTED
      ISZ TEMP+1    OUTPUT. 
      LDB TEMP+1,I  SET (B)=2ND WORD OF EXPECTED
      OCT 107001      OUTPUT AND HALT.
* 
      ISZ TEMP+1    SET (A)=3RD WORD OF EXPECTED
      LDA TEMP+1,I    OUTPUT. 
      CLB           SET (B)=0 
      OCT 107000      AND HALT. 
      JMP ERMES,I   EXIT. 
* 
* 
* 
*  SUBROUTINE TO CONVERT A SET OF BINARY NUMBERS
* (STORED IN A BUFFER) INTO OCTAL AND INSERT THEM 
*  IN ASCII FORMAT INTO A MESSAGE BUFFER. 
* 
*  ENTER WITH (A)= POINTER TO DESTINATION STRING
*  ENT        (B)= -NR OF DATA ITEMS TO BE PROCESSED
* 
*  PRIOR TO ENTERING THE SUBROUTINE,LOCATION
* (TEMP+5)MUST CONTAIN THE POINTER TO THE SOURCE STRING 
*  (OBTAINED OR EXPECTED OUTPUT). 
*  THE NUMBERS TO BE PRINTED ARE ASSUMED TO BE
*  SEPERATED BY TWO BLANKS. 
* 
CBNOC NOP 
      STA TEMP+7    SAVE POINTER. 
      STB TEMP+6    SET COUNTER.
CBNC1 EQU * 
      LDB TEMP+5,I  (B)=BINARY NUMBER 
* 
*  CONVERT AND INSERT.
* 
      STA TEMP+3    SET POINTER.
      LDA .-3       SET COUNTER.
      STA TEMP+4
* 
*  FIRST PROCESS BIT#15.
* 
      CLA           (A)=0.
      RBL,SLB       IF BIT#15 IS SET, 
      INA             ADD 1.
      ADA B60       MAKE ASCII. 
      ALF,ALF       ROTATE INTO UPPER AND STORE.
      STA TEMP+3,I
* 
*  NOW PROCESS THE OTHER BITS.
* 
      CLE           (E)=0.
CBNC2 EQU * 
      CLA           (A)=0. ROTATE.
      RBL,SLB       IF BIT IS SET,
      ADA .+4         ADD 4.
      RBL,SLB       ROTATE. IF BIT IS SET,
      ADA .+2         ADD 2.
      RBL,SLB       ROTATE. IF BIT IS SET,
      INA             ADD 1.
      ADA B60       MAKE ASCII. 
      ALF,ALF       ROTATE 8 BITS.
      SEZ           IF LOWER CHAR., 
      JMP CBNC3       ROTATE 8 BITS 
      ALF,ALF           AND 
      IOR TEMP+3,I       "OR IN" DATA.
CBNC3 EQU * 
      STA TEMP+3,I
* 
      CME           COMPLEMENT (E). 
      SEZ,RSS       IF UPPER CHAR. JUST DONE, 
      JMP CBNC2       GO BACK.
      ISZ TEMP+3    IF LOWER CHAR. JUST DONE, 
      ISZ TEMP+4      BUMP POINTER AND GO BACK. 
      JMP CBNC2     NOT ALL BITS PROCESSED YET. 
* 
* 
      ISZ TEMP+6    ALL DATA ITEMS PROCESSED? 
      RSS 
      JMP CBNOC,I   YES. EXIT.
      ISZ TEMP+5    NO. BUMP
      LDA TEMP+7      POINTERS
      ADA .+4           AND 
      STA TEMP+7          GO
      JMP CBNC1             BACK. 
* 
* 
*  SUBROUTINE TO PRINT "OVERFLOW NOT SET".
*  ENTER WITH (B)= POINTER TO ERROR NUMBER STRING 
* 
PROVN NOP 
      LDA B,I       MOVE
      STA RMS18       ERROR 
      INB               NUMBER
      LDA B,I             INTO
      STA RMS18+1           MESSAGE BUFFER. 
* 
      JSB ERMS,I    PRINT ERROR MESSAGE.
      DEF RMS18 
      JMP PROVN,I   EXIT. 
* 
* 
* 
* 
* 
* 
* 
*  SUBROUTINE TO CHECK RESULTS OBTAINED BY
*         .XADD     .XSUB     XADD        XSUB
*         .XMPY     .XDIV     XMPY        XDIV
* 
*  MICRO CODE.
* 
*  ENTER WITH (A)=POINTER TO EXPECTED OUTPUT. 
*  IF NO COMPARISON, EXIT TO (P+1). 
*  OTHERWISE EXIT TO (P+2). 
DATCK NOP 
      STA TEMP+2    SAVE POINTER EXPECTED OUTPUT. 
      LDA POUTP 
      STA TEMP+3    SET POINTER TO OBTAINED OUTPUT. 
      LDB .-3       (B)=COUNTER 
DTCK1 EQU * 
      LDA TEMP+2,I
      CPA TEMP+3,I  COMPARE?
      RSS 
      JMP DATCK,I   NO. ERROR. EXIT TO (P+1). 
      ISZ TEMP+2    YES. BUMP POINTERS. 
      ISZ TEMP+3
      INB,SZB       DONE? 
      JMP DTCK1     NO. 
      ISZ DATCK     YES. EXIT TO (P+2). 
      JMP DATCK,I 
* 
* 
* 
* 
*  SUBROUTINE TO CHECK IF DIAGNOSTIC IS CONFIGURED
*  FOR INTERRUPT TEST 
*  IF NOT, EXIT TO (P+1). OTHERWISE EXIT TO (P+2) 
* 
* 
INTCK NOP 
      LDA INTSC     IF NOT CONF. FOR INTERRUPTS,
      SZA             EXIT TO (P+1) 
      ISZ INTCK 
      JMP INTCK,I   OTHERWISE EXIT TO (P+2) 
* 
* 
* 
* 
* 
* 
*  INTERRUPT SUBROUTINE 
* 
INTSB NOP 
      CLF INTP      STOP INTERRUPTS 
      STA AREG      SAVE (A)
      STB BREG      SAVE (B)
      JSB INTOF     TURN OFF INTERR. INTERF.
      ISZ INTID     SET INDICATOR=1 
      LDA INTSB     SAVE (P)
      STA INTAD 
      JMP INTN1,I     EXIT. 
* 
* 
* 
* 
*  SUBROUTINE TO CHECK IF INTERRUPT OCCURRED
*  IN MICROCODE 
*  IF NOT, EXIT TO (P+1). OTHERWISE EXIT TO (P+2) 
* 
* 
CHECK NOP 
      LDA INTID     CHECK INDICATOR 
      SZA           IF=0, EXIT TO (P+1) 
      ISZ CHECK     OTHERWISE EXIT TO (P+2) 
      JMP CHECK,I 
* 
* 
* 
* 
* 
* 
* 
* 
*  SUBROUTINE TO PRINT "NOT INTERRUPTABLE". 
*  ENTER WITH (B)= POINTER TO ERROR NUMBER STRING.
* 
PRNIN NOP 
      LDA B,I       MOVE
      STA RMS25       ERROR 
      INB               NUMBER
      LDA B,I             INTO
      STA RMS25+1           MESSAGE BUFFER. 
* 
      JSB ERMS,I    PRINT ERROR MESSAGE.
      DEF RMS25 
      JMP PRNIN,I   EXIT. 
* 
* 
*  BUFFER TO OUTPUT "NOT INTERRUPTIBLE" 
* 
RMS25 ASC 12,XXXX NOT INTERRUPTIBLE/
E105  ASC 2,E105
E142  ASC 2,E142
E162  ASC 2,E162
E202  ASC 2,E202
* 
* 
* 
* 
*  SUBROUTINE TO PRINT "A-REG NOT RESTORED ON INTERR" 
*  ENTER WITH (B)=POINTER TO ERROR NUMBER STRING
* 
ANRES NOP 
      LDA B,I       MOVE
      STA RMS26       ERROR NUMBER
      INB               INTO
      LDA B,I             MESSAGE 
      STA RMS26+1           BUFFER
      JSB ERMS,I    PRINT ERROR MESSAGE 
      DEF RMS26 
      JMP ANRES,I   EXIT
* 
RMS26 ASC 16,XXXX A-REG NOT REST. ON INTERR/
E107  ASC 2,E107
* 
* 
* 
* 
* 
* 
*  SUBROUTINE TO PRINT "B-REG NOT RESTORED ON INTERR" 
*  ENTER WITH (B)=POINTER TO ERROR NUMBER STRING
* 
BNRES NOP 
      LDA B,I       MOVE
      STA RMS27       ERROR 
      INB                NUMBER 
      LDA B,I             INTO
      STA RMS27+1           MESSAGE BUFFER
      JSB ERMS,I    PRINT ERROR MESSAGE 
      DEF RMS27 
      JMP BNRES,I   EXIT
* 
RMS27 ASC 16,XXXX B-REG NOT REST. ON INTERR/
E110  ASC 2,E110
* 
* 
* 
*  SUBROUTINE TO PRINT "P-REG NOT RESTORED ON INTERR" 
*  ENTER WITH (B)=POINTER TO ERROR NUMBER STRING
* 
PNRES NOP 
      LDA B,I       MOVE
      STA RMS28       ERROR 
      INB               NUMBER
      LDA B,I             INTO
      STA RMS28+1           MESSAGE BUFFER
      JSB ERMS,I    PRINT ERROR MESSAGE 
      DEF RMS28 
      JMP PNRES,I   EXIT
* 
RMS28 ASC 16,XXXX P-REG NOT REST. ON INTERR/
E163  ASC 2,E163
E203  ASC 2,E203
E106  ASC 2,E106
* 
* 
* 
* 
* 
* 
* 
FWAA  EQU * 
      END 
                                            