* * 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