* MPCK1 EQU * OCT 107005 HALT ON PARITY ERROR JMP *-1 * * CHECK IF MEMORY PROTECT IS PRESENT * MEMPR NOP LDA CPTO CHECK COMPUTER AND BT5 TYPE & OPTIONS SZA FOR ISZ MEMPR MEM PROTECT JMP MEMPR,I * * TURN OFF MEMORY PROTECT LOGIC * MTNOF NOP CLC MPPAR TURN OFF MEM PROTECT LDA TSH RESTORE STA MPPAR TRAP CELL HALT CLF INTP CLEAR INTERRUPT SYS JSB LTN PRINT TEST-CASE NUMBER E012 JSB ERMS,I REPORT ERROR DEF ME012,I DEF ME00 JMP MTNOF,I EXIT * IIO NOP STB IOSC,I STORE RTN ADDR IN TRAP CELL JSB TOINT TURN ON I-O JMP IIO,I EXIT * TOINT NOP SC1 STC CH SET CONTROL AND SC2 STF CH FLAG ON I-O DEVICE JMP TOINT,I EXIT * * CHECK IF INTP OCCURRED * CKINT NOP SC5 CLF CH TURN OFF FLAG AND SC6 CLC CH CONTROL ON I-O DEVICE CLF INTP TURN OFF INTP SYS LDA INTFL TEST IF INTP SZA OCCURRED JMP CKINT,I EXIT JSB LTN OK - EXIT E013 JSB ERMS,I REPORT ERR DEF ME013,I DEF ME00 JMP CKINT,I EXIT * * * * * THE FOLLOWING INSTRUCTIONS CBT, CMW, MBT, SFB ARE TESTED * FOR INTERRUPTABILITY. THE DIAGONSTIC PROGRAMME HOLDS A * PENDING INTERRUPT DURNING THE EXECUTION OF INSTRUCTION * UNDER TEST. DURNING THE EXECUTION OF THE INSTRUCTION * THE U-CODE WILL ALLOW FOR THE INTERRUPT TO BE HANDLED. * THE FIRST PENDING INTERRUPT IS HANDLED BY ROUTINE RTX. * ROUTINE RTX ONLY HANDLES THE FIRST PENDING INTERRUPT * AND CHECKS THE ADDRESS OF THE INSTRUCTION ALLOWING THE * INTERRUPT TO BE PROCESSED. DEPENDING UPON THE INSTRUCTION * AND THE DATA TEST PARAMETER USED THE U-CODE MAY MODIFY * THE P-REGISTER OR TARGET ADDRESS MAKING IT IMPRACTICAL * TO VERIFY THE ADDRESS WHEN THE SUBSEQUENT INTERRUPT OCCURS. * THEREFORE, ROUTINE RTXZ WILL HANDLE ALL INTERRUPTS AFTER * ROUTINE RTX HAS HANDLED THE FIRST PENDING INTERRUPT. * * CHECK ADDR OF INTP * RTXX NOP RTX STA RTXX MODIFY RTN ADDR NOP DEBUG JSB TOIO TURN OFF I-O CPA B CHECK INTP LOCATION JMP *+5 OK JSB LTN REPORT ERR E014 JSB ERMS,I DEF ME014,I DEF ME00 LDB JSBX LOAD INTP TRAP CELL STB IOSC,I WITH ADDR OF RTXZ JSB TOINT TURN ON I-O DEVICE LDA AREG RESTORE LDB BREG A & B REG STF INTP TURN ON INTP SYS JMP RTXX,I EXIT * RTXZ NOP CLF INTP TURN OFF INTP SYST JSB SABEO SAVE REGS JSB TOIO TURN OFF I-O DEVICE NOP DEBUG LDA AREG RESTORE LDB BREG A & B REG NOP DEBUG JSB TOINT TURN ON INTP DEVICE STF INTP TURN OF INTP SYST JMP RTXZ,I RETURN TO MACRO * TOIO NOP CLF INTP TURN OFF INTP SYST SC3 CLF CH TURN OFF SC4 CLC CH I-O DEVICE JMP TOIO,I EXIT * XINST NOP CLA LDB INSTX STB SAVB XINT1 LDB SAVB,I CPB .M1 JMP XINST,I EXIT STA SAVB,I RESTORE NOP ISZ SAVB NEXT LOCATION JMP XINT1 * HED DIAGNOSTIC PROGRAM CONTROL ORG 2000B STEX CLC INTP,C TURN I/O SYSTEM OFF CLE LDA DSN LDB HDMX JSB O2AS,I JSB MSGC,I OUT PUT IT DEF HDMS LDA CPTO GET COMPUTER TYPE AND OPTIONS AND BT5 MASK OFF MPT BIT SZA IS MPT CONFIG. ? JMP *+3 YES, SKIP MESSAGE JSB MSGC,I PRINT MESSAGE DEF MH001 MPT NOT PRESENT CLA CLEAR PASS STA EOLC COUNT EXCZ LDB SW9 CHECK FOR USER SELECTION REQ JSB SWRT,I JMP USR IT'S USERS CHOICE NUSR LDA STDA GET STANDARD TEST RUN LDB STDB * JMP EXC * USR LIA SW AND MBT9 OTA SW LDA SINA RETRIEVE PREVIOUS RUN LDB SINB HLT 75B WAIT FOR USER INPUT EXC STA UINA SAVE STB UINB USER STA SINA INPUT STB SINB PROGRAM CCA SET TEST NUMBER STA TSTN =-1 STA CFTT CLA STA TSTA CLEAR TEST RUN FLAG SPC 2 EXCL LDA UINA RESTORE A REG. LDB UINB RESTORE B REG. ERA,RAL ROTATE ERB FIRST ERA TEST BIT STA UINA SAVE POSITIONS STB UINB ISZ TSTN MOVE TEST UP ONE NOP XCL1 LDA TSTN ADA TSTP GET IT'S LDA A,I ADDRESS CPA .M1 IS IT END OF LIST JMP EOL YES LDB UINB SSB,RSS SHOULD IT BE RUN? JMP EXCL NO STA TSTA YES - SAVE TEST ADDRESS JSB XINST RESTORE NOP IN 3'RD WORD OF MACRO JSB ITCH INITIALIZE TRAP CELL HALTS CLA CLEAR STA TN2 TEST-CASE NUM JSB TSTA,I GO DO TEST .EXRT LDA TSTN DISPLAY TEST NUMBER IF HALTED LDB SW15 CHECK FOR HALT AT END OF TEST JSB SWRT,I HLT 76B YES WAIT FOR OPERATOR LDB SW9 CHECK FOR ABORT JSB SWRT,I JMP USR YES LDB SW13 CHECK FOR LOOP ON ROUTINE JSB SWRT,I JMP XCL1 YES - LOOP JMP EXCL CONTINUE * EOL LDA TSTA CHECK IF ANY TESTS WERE RUN SZA,RSS ? JMP NUSR NO SO PICK UP STANDARD RUN LDA EOLC UP DATE PASS COUNT INA STA EOLC CCE LDB PSCA GET PASS COUNT ADB .+2 ADDRESS JSB O2AS,I CONVERT IT JSB MSGC,I CALL PRINT ROUTINE PSCA DEF PSC LDB SW12 CHECK FOR LOOP ON DIAG. JSB SWRT,I JMP *+3 YES LDA EOLC HLT 77B NO WAIT AND DISPLAY PASS COUNT LDA SINA RESTORE ORIGINAL LDB SINB PROGRAM JMP EXCZ DO IT ALL AGAIN SKP * MESSAGE OUTPUT WITH OUT HALT * .MSGC NOP ENTRY JSB MSG OUTPUT MESSAGE OCT 2000 SWITCH 10 CHECK JMP .MSGC,I RETURN TO CALLER * * MESSAGE OUTPUT WITH HALT * .MSGH NOP ENTRY JSB MSG OUTPUT MESSAGE OCT 2000 SWITCH 10 CHECK LDA HLT GET HALT CODE STA *+2 PUT IT IN PLACE LDA SAVA RESTORE A REGISTER NOP HALT FOR DISPLAY JMP .MSGH,I RETURN TO CALLER * * ERROR MESSAGE WITH HALT * .ERMS NOP ENTRY JSB MSG OUTPUT MESSAGE OCT 4000 SWITCH 11 CHECK CLA LDB SW14 CHECK SWR BIT 14 TO SUPPRESS JSB SWRT,I HALT STA *+3 PUT HALT IN PLACE LDA SAVA RESTORE A & B LDB SAVB HLT NOP WAIT FOR OPERATOR JMP .ERMS,I RETURN TO CALLER SKP * OUTPUT MESSAGE * MSG NOP STA SAVA SAVE A AND B REGISTERS STB SAVB LDB MSG,I GET SWITCH REGISTER BIT LDA MSG ADA .M2 DECREMENT RETURN ADDRESS STA MSG JSB SWRT,I CHECK TO SUPPRESS MESSAGE JMP MSG0 YES LDA MSG,I CHECK IF ERROR LDA A,I ELA,CLE,ERA LDA A,I IF SO ALF,ALF AND .177 CPA A.E JSB CFTN CHECK TO OUTPUT TEST NUMBER LDA MSG,I NO RETRIEVE FORMAT LDB A,I ADDRESS ELB,CLE,ERB CLA,CLE JSB FMTR,I MSG0 LDA MSG,I CONVERT HALT CODE LDB A,I FROM ASCII STRING ELB,CLE,ERB CCA,CCE JSB AS2N,I STA N2AO SAVE RESULT AND .300 DECODE LDB H2 HALT CODE CPA .100 LDB H6 CPA .200 LDB H3 CPA .300 LDB H7 LDA N2AO GET HALT NUMBER AND .77 IOR B STA HLT SAVE IT MSG1 LDA MSG,I LDA A,I SSA,RSS JMP MSG2 ISZ MSG,I LDB MSG ADB .+2 LDB B,I JSB SWRT,I JMP MSG1 LDA MSG,I LDB A,I ELB,CLE,ERB CLA,CLE JSB FMTR,I JMP MSG1 MSG2 ISZ MSG,I ADJUST RETURN POINTERS ISZ MSG ISZ MSG ISZ MSG LDA SAVA RESTORE A AND B REGISTERS LDB SAVB JMP MSG,I SKP CFTN NOP LDA TSTN GET TEST NUMBER CPA CFTT IS IT THE SAME ONE? JMP CFTN,I YES SKIP OUTPUT STA CFTT NO - THEN UPDATE IT CLE LDB PCB JSB I2AS,I LDB PCBX STB .TSTN CLA JSB SLOP,I CLA,CLE LDB TSTF JSB FMTR,I JMP CFTN,I SPC 2 * N2AO NOP IOAD NOP STA IOAD SAVE NUMBER AND .+7 CONVERT FIRST IOR .60 NUMBER STA B SAVE IT LDA IOAD GET RAR,RAR SECOND RAR NUMBER AND .+7 CONVERT IOR .60 IT ALF,ALF MOVE TO UPPER HALF IOR B ADD LOWER JMP N2AO,I AND RETURN * * SWITCH REGISTER CHECK * .SWRT NOP STA N2AO SAVE A REGISTER LIA SW GET SWITCH REG. AND B MASK OUT BIT SZA,RSS IS IT UP? ISZ .SWRT NO LDA N2AO RESTORE A REGISTER LIB SW LET B = SWITCH REGISTER JMP .SWRT,I RETURN TO CALLER * * INITIALIZE TRAP CELL HALTS * ITCH NOP LDA TSH GET STARTING TRAP CELL HALT LDB .+2 GET FIRST TRAP CELL LOCATION TSHL STA B,I PUT IT IN PLACE CPB .77 AM I FINISHED JMP ITCH,I YES INB NEXT ADDRESS JMP TSHL * * * PUT JSB INSTRUCTION IN TRAP CELL * TCJI NOP LDB JSBI GET INSTRUCTION STB IOSC,I PUT IT IN TRAP CELL LDA TCJI,I GET LOCATION STA 3B SAVE IT FOR JSB INSTRUCTION ISZ TCJI ADJUST RETURN JMP TCJI,I RETURN TO CALLER * JSBI JSB 3B,I JSB INSTRUCTION * * * INITIALIZE SELECT CODE I/O INSTRUCTIONS * ISC NOP STA IOSC SAVE SELECT CODE IOL LDA B,I GET ADDRESS OF LOCATION CPA IOM IS IT THE TERMINATOR JMP ISC,I YES RETURN TO CALLER STA SAVA SAVE ADDR LDA A,I GET INSTR AND IOM MASK OFF OLD SELECT CODE IOR IOSC ADD IN NEW SELECT CODE STA SAVA,I RESTORE IT INB MOVE TO NEXT ADDRESS JMP IOL DO IT * * * CONFIGURATION SECTION * .CONF JSB CONF CONFIG I-O CHANNEL JMP STEX RETURN TO DIAG CONTROL CONF NOP CLC INTP,C TURN I/O SYSTEM OFF CON1 LIA SW GET SELECT CODE AND OPTIONS STA USSC SAVE THEM AND .77 ELIMINATE OPTIONS LDB A CMB,INB CHECK THAT SC > 7 ADB .+7 SSB ? JMP *+3 OK GO ON HLT 73B NO JMP CON1 TRY AGAIN LDB IOID INITIALIZE TEST I/O JSB ISC INSTRUCTIONS CLA CLEAR OTA SW SWITCH REGISTER HLT 74B ALLOW OPERATOR TO CHANGE SR OPTIONS JMP CONF,I GO TO EXEC CONTROL SECTION HED TEST THE LOAD BYTE INSTRUCTION LBT TST00 EQU * LBTT NOP JSB MOVE PUT "LBT" DEF MLBT IN MESSAGE STRING LDA A.LBT ADDR OF LBT TEST TABLE STA TP STORE ADDR IN TABLE POINTER LBT1 JSB NXTP NEXT TEST PARAM FROM TEST TABLE JMP LBT2 EXECUTE TEST JMP LBTT,I EXIT TEST LBT2 JSB LBA SET UP ADDR CCA PRESET A-REG NOP DEBUG LDB WRD1,I LOAD B-REG WITH ADDR NOP DEBUG LBT EXECUTE LOAD BYTE INSTR NOP DEBUG JSB SABEO SAVE A,B,E,O-REGS JSB CKLB CHECK RESULT JMP LBT1 NEXT TEST CASE * * * LBT TEST TABLE * LBTTB EQU * * * MEANING OF THE TABLE ENTRIES: * * FIRST: BYTE ADDR OF VALUE TO BE LOADED * SECOND: BYTE ADDR OF RESULT STORED * DEC 0,0 DEC 1,1 DEC 2,2 DEC 3,3 DEC 4,4 DEC 5,5 DEC 6,6 DEC 7,7 DEC 8,8 * * TERMINATOR * DEC -1 HED TEST THE STORE BYTE INSTRUCTION SBT TST01 EQU * SBTT NOP JSB MOVE PUT "SBT" DEF MSBT IN MESSAGE STRING LDA A.SBT ADDR OF SBT TEST TABLE STA TP STORE ADDR IN TABLE POINTER CLA CLEAR JSB STDS DATA STRING SBT1 JSB NXTP NEXT TEST PARAM FROM TEST TABLE JMP SBT2 EXECUTE TEST JMP SBTT,I EXIT TEST JMP SBT4 EXECUTE MPT TEST SBT2 JSB LBA GET BYTE ADDR JSB SBA GET DATA ADDR LDA WRD2,I GET DATA LDB WRD1,I GET BYTE ADDR FOR DESTINATION NOP DEBUG SBT EXECUTE STORE BYTE INSTR NOP DEBUG SBT3 JSB SABEO SAVE A,B,E,O-REGS JSB CKSB CHECK RESULT JMP SBT1 NEXT TEST CASE * * TEST MEMORY PROTECT * SBT4 JSB MEMPR CHECK IF MPT IS PRESENT JMP SBT4B MPT NOT AVAILABLE CLA CLEAR JSB STDS DATA STRING JSB LBA GET BYTE ADDR JSB SBA GET DATA ADDR LDA SBTMP INTP ADDR JSB MEMTN TURN ON MPT LOGEC LDA WRD2,I GET DATA LDB WRD1,I GET BYTE ADDR FOR DESTINATION NOP DEBUG SBT EXECUTE STORE BYTE INSTR NOP DEBUG JSB MTNOF MPT FAILED, REPORT ERR JMP SBT4N NEXT TEST-CASE * SBT4B ISZ TP ADJUST TABLE POINTER ISZ TP FOR SBT4N ISZ TP NEXT PARAM JMP SBT1 * * SBT TEST TABLE * SBTTB EQU * * * MEANING OF THE TABLE ENTRIES: * * FIRST: BYTE ADDR OF VALUE TO BE STORED * SECOND: BYTE ADDR WHERE TO BE STORED * THIRD: CHECK RESULT * DEC 10,0,5 DEC 11,0,6 DEC 10,4,8 DEC 11,4,7 DEC 10,0,9 DEC 11,8,5 DEC 10,8,4 * * MEMORY PROTECT * DEC -2,10,0,4 * * TERMINATOR * DEC -1 HED TEST THE COMPARE BYTE INSTRUCTION CBT TST02 EQU * CBTT NOP JSB MOVE PUT "CBT" DEF MCBT IN MESSAGE STRING LDA A.CBT ADDR OF CBT TEST TABLE STA TP STORE ADDR IN TABLE POINTER CBT1 JSB NXTP NEXT TEST PARAM FROM TEST TABLE JMP CBT2 EXECUTE TEST JMP CBTT,I EXIT TEST JMP CBT4 EXECUTE INTERRUPT TEST CBT2 JSB DSABR SET UP ADDR FOR SOURCE & DESTINATION JSB WCX GET WORD COUNT LDA WRD1 LOAD A & B-REG LDB WRD2 WITH ADDR NOP DEBUG CBTA CBT WCP EXECUTE COMPARE BYTE INSTR JSB CPSK0 RECORD JSB CPSK1 SKIP JSB CPSK2 RESULT CBT3 JSB CKSK CHECK SKIP RESULT JMP CBT1 NEXT TEST CAST * * TEST CBT INSTR WITH INTERRUPT * CBT4 CLF INTP TURN OFF INTP LDB JSB2 GET INTP ADDR JSB IIO TURN ON I-O JSB DSABR SET UP ADDR FOR SOURCE & DESTINATION JSB WCX GET WORD COUNT LDA WRD1 LOAD A & B-REGS LDB WRD2 WITH ADDR NOP DEBUG STF INTP TURN ON INTP SYST II2 CBT WCP EXECUTE CBT INSTR JSB CISK0,I RECORD JSB CISK1,I SKIP JSB CISK2,I RESULT CLF INTP TURN OFF INTP SYST JSB TOIO TURN OFF I-O JMP CBT3 CHECK RESULT * RT2 NOP CLF INTP TURN OFF INTP SYST JSB SABEO SAVE REGS NOP DEBUG LDA RT2 ADDR OF INTERRUPTING INSTR LDB PTR2 EXP ADDR NOP DEBUG JMP RTX INTP ROUTINE * * * CBT TEST TABLE * CBTTB EQU * * * MEANING OF THE TABLE ENTRIES: * * FIRST: BYTE ADDR OF STRING 1 * SECOND: BYTE ADDR OF STRING 2 * THIRD: WORD COUNT VALUE * FOURTH: SKIP RESULT * DEC 6,7,8,0 DEC 8,9,8,1 DEC 8,10,8,2 * * INTERRUPT PARAMETER * DEC -2,6,7,8,0 DEC -2,8,9,8,1 DEC -2,8,10,8,2 * * TERMINATOR * DEC -1 HED TEST THE SCAN BYTE INSTRUCTION SFB TST03 EQU * SFBT NOP JSB MOVE PUT "SFB" DEF MSFB IN MESSAGE STRING LDA A.SFB ADDR OF SFB TEST TABLE STA TP STORE ADDR IN TABLE POINTER SFB1 JSB NXTP NEXT TEST PARAM FROM TEST TABLE JMP SFB2 EXECUTE TEST JMP SFBT,I EXIT TEST JMP SFB4 EXECUTE INTP TEST SFB2 JSB DSABR SET UP ADDR FOR SOURCE & DESTINATION LDA WRD1,I TEST & TERMINATION WORD LDB WRD2 ADDR OF STRING NOP DEBUG SFB EXECUTE SCAN BYTE INSTR JSB CPSK0 RECORD JSB CPSK1 SKIP JSB CPSK2 RESULT SFB3 NOP DEBUG JSB CKSK CHECK SKIP RESULT JSB CKSF CHECK FOR PROPER TERMENATION NOP DEBUG JMP SFB1 NEXT TEST CASE * * TEST SFB WITH INTERRUPT * SFB4 CLF INTP TURN OFF INTP SYST LDB JSB3 GET INTP ADDR JSB IIO TURN ON I-O DEVICE JSB DSABR SET UP ADDR LDA WRD1,I TEST AND DESTINATION WORD LDB WRD2 STRING ADDR NOP DEBUG STF INTP TURN OF INTP SYST II3 SFB EXECUTE SFB INSTR JSB CISK0,I RECORD JSB CISK1,I SKIP JSB CISK2,I RESULT JSB TOIO TURN OFF I-O DEVICE JMP SFB3 NEXT TEST-CASE * RT3 NOP CLF INTP TURN OFF INTP SYST JSB SABEO SAVE REGS LDA RT3 ADDR OF INTP INSTR LDB PTR3 EXP ADDR NOP DEBUG JMP RTX JUMP TO INTP ROUTINE * * * SFB TEST TABLE * SFBTB EQU * * * MEANING OF THE TABLE ENTRIES: * * FIRST: ADDR OF TERMINATION BYTE * SECOND: ADDR OF TEST BYTE * THIRD: SKIP RESULT * FOURTH: DATA RESULT * DEC 13,11,0,15 DEC 14,12,1,16 * * INTERRUPT PARAMETER * DEC -2,13,11,0,15 DEC -2,14,12,1,16 * * TERMINATOR * DEC -1