File: 80870.PA of Tape: Various/Decus/decus-3
(Source file text)
/80870.PA FINDS INTERUPTING DEVICES / /WRITTEN BY BILL NOWICKI / NORTHWESTERN UNIVERSITY / COMPUTER SCIENCE RESEARCH LABORATORY / EVANSTON, ILLINOIS 60201 / /JULY 15, 1976 / /+BUS /THIS PROGRAM IS A SIMPLE BUT USEFUL HARDWARE DIAGNOSTIC, /WHICH USES THE "PAL8" SUBROUTINE LIBRARY. /WHEN INTERRUPT DRIVEN SYSTEMS REFUSE TO WORK, THE PROBLEM /IS OFTEN ONE DEVICE WHICH REFUSES TO STOP INTERRUPTING, /OR A DEVICE WHICH THE PROGRAM DOES NOT KNOW ABOUT. / /THIS PROGRAM TAKES A TABLE CONSTRUCTED FOR EACH /MACHINE, (SEE THE "PAL8" SYMBOL "TABLE" NEAR THE END OF /THE PROGRAM) AND SIMPLY TESTS THE SKIP "IOT" FOR EACH DEVICE. / /:CODE: / /DEFINE A USEFUL INSTRUCTION SRQ=6003 / / /AUTO INDEXES: *10 XR1, 0 / PAGE ZERO POINTERS / *20 / MSGC= JMS I .;XMSGC / (PRINT A MESSAGE FOLLOWED BY CR-LF) MSG= JMS I .;XMSG / (PRINT A STRING) TEST= JMS I .;OPTST / (TRANSFER TO ADDRESS BY CHARACTER) CRACK= JMS I .;XCRACK / (TWO CHARS) CRLF= JMS I .;XCRLF / TYPE= JMS I .;XTYPE /TYPE ONE CHARACTER /END OF POINTERS / / COUNT, 0 / /END OF PAGE ZERO PAGE MAX=00 /ITERATIONS OF TESTS /WHEN SET TO 0 CAUSES /EVERY DEVICE TO BE TESTED 4096 TIMES /PER ITERATION /START OF THE MAIN PROGRAM MSGC /IDENTIFY US IDMSG ASK, MSG /ASK A QUESTION QUES JMS TREAD /GET A CHARACTER TEST /TEST THE RESPONSE CMD-1 JMP ASK /ERROR RETURN FUDGE, CLA TAD (JMP AGAIN /FUDGE INSTRUCTION DCA PATCH AGAIN, CLA DCA COUNT /CLEAR THE COUNTER KRS /TEST FOR THE CONTROL C TAD (-203 SNA CLA JMP I (7600 TAD (TABLE-2 /RESET THE POINTER DCA XR1 DEVLP, ISZ XR1 /SKIP THE CLEAR INSTR DEVLP2, CLA /HERE WE GET THE NEXT VICTIM TAD I XR1 /GET THE MESSAGE ADDRESS SNA /END OF THE LIST ? JMP EOT /YES DCA MESS TAD I XR1 /GET THE SKIP INSTR. DCA SKIPR SKIPR, HLT /PLUGGED JMP DEVLP /GREAT - NO SKIP MSGC /PRINT THE BAD NEWS MESS, HLT CLA DCA COUNT /RESTART COUNTDOWN TAD I XR1 /GET THE CLEAR INSTRUCT. DCA CIOT CIOT, HLT /PLUGGED JMP DEVLP2 /CONTINUE UNTIL OK / EOT, SRQ /STILL HARD INTERUPT BUS ? JMP GOOD /GREAT - TASK COMPLETE JMP AGAIN /TRY TRY AGAIN GOOD, CLA ISZ COUNT /BUMP THE COUNTER TAD COUNT /ENOUGH PASSES ? TAD (-MAX SZA CLA JMP AGAIN /NO-TRY AGAIN MSGC /PRINT OUT OUR JOY AOK PATCH, JMP I (7600 /RETURN TO MONIT / CMD, /COMMAND TABLE -215; AGAIN /ASSUMED -"Y; FUDGE /LOOP -"N; AGAIN /NO LOOP -"Y-40; FUDGE -"N-40; AGAIN -203; 7600 /CONTROL C 0;0;0 / TREAD, 0 CLA KSF JMP .-1 /WAIT FOR A CHARACTER KRB DCA COUNT /STORE IT TAD COUNT /ECHO IT TYPE CRLF TAD COUNT /VCAK IN AC JMP I TREAD /RETURN / / PAGE /+MSGC (PRINT A MESSAGE FOLLOWED BY CR-LF) / /TYPE THE STRING OF SIX BIT PACKED CHARACTERS OF THE PARAMETER /LIST AND FOLLOW IT WITH A CARRIAGE RETURN / LINE FEED />CALL: MSGC / FWA OF STRING / RETURNS HERE WITH THE AC CLEARED / /<ROUTINES USED: MSG CRLF /$LOCATIONS: 11 /:CODE: XMSGC, 0 CLA TAD I XMSGC /GET THE FWA OF THE STRING DCA MSGCA /PUT IT WHERE "MSG" CAN GET AT IT MSG /PRINT THE STRING WITHOUT ANY CR/LF MSGCA, HLT CRLF /NOW PRINT THE CRLF ISZ XMSGC /BUMP TO GET AROUND THE ARG. JMP I XMSGC /-MSGC /+MSG (PRINT A STRING) /SEND AN ASCII CHARACTER STRING TO THE TELETYPE />CALL: MSG / POINTER TO STRING / RETURN HERE WITH AC CLEARED /POINTER, SIX BIT PACKED ASCII CHARACTERS OF ORDER 0102 / . . . / 0000 OR XX00 AS END OF LIST / /<ROUTINES USED: CRACK /$LOCATIONS: 17 /:CODE: XMSG, 0 CLA CLL TAD I XMSG /POINTER DCA MSG3 ISZ XMSG /BUMP TO RETURN MSG2, TAD I MSG3 /GET TWO CHARACTERS SNA JMP I XMSG /IF ITS ENTIRELY ZERO, DON'T PRINT IT CRACK /CRACK AND PRINT THE SIX BITS TAD I MSG3 /RESTORE AND (77 SNA CLA /SKIP IF THIS IS NOT THE END OF THE LIST JMP I XMSG ISZ MSG3 /POINT AT NEXT VICTIM JMP MSG2 MSG3, 0 /-MSG /+TYPE XTYPE, 0 TLS TSF JMP .-1 TCF /CLEAR THE FLAG CLA JMP I XTYPE /-TYPE / PAGE /+TEST (TRANSFER TO ADDRESS BY CHARACTER) /GIVEN AN ADDRESS OF A TABLE, /CHECKS IF THE AC IS / IN THE TABLE, AND IF SO, TRANSFERS / TO THE CORRECT PROGRAM SEGMENT. /<CALL: TAD CHAR /GET TEST CHARACTER IN AC / TEST /TEST IT ! / TBLAD-1 /ADDRESS OF TABLE - 1 / ... /CHARACTER NOT IN TABLE / /TBLAD, -CHAR1; ADDR1 / -CHAR2; ADDR2 / ...; ... / 0; 0 /END OF LIST / /:CODE: OPTST, 0 DCA OPCHR /SAVE THE CHARACTER TAD I OPTST /GET THE TABLE ADDRESS DCA XR4 /STORE TABLE ADDRESS-1 ISZ OPTST /FIX RETURN ADDRESS OPLP, ISZ XR4 TAD I XR4 /GET ANOTHER OPTION SNA /END OF LIST ? JMP I OPTST /END OF LIST-BAD TAD OPCHR SNA CLA JMP OPGOT /WE GOT AN OPTION ! ISZ XR4 /NO-SKIP ADDRESS JMP OPLP /THEN GET NEXT ONE OPGOT, ISZ XR4 TAD I XR4 /GET THE ADDRESSS DCA OPNT JMP I OPNT /TRANSFER TO THE OPTION OPNT, 0 /ADDRESS POINTER XR4, 0 OPCHR, 0 /SEARCH CHARACTER /-TEST PAGE /+CRACK (TWO CHARS) / /PRINT THE TWO SIX BIT CHARACTERS IN THE AC. /THIS IS NOT THE STANDARD SIX BIT PACKING, BECAUSE FILE NAMES /CAN BE ONLY ALPHANUMERICS. THE CODE IS: /= 0 = 40 / 1 - 37 = ADD 300 / 40 - 77 = ADD 200 />CALL: TAD WORD TO CRACK / CRACK /:CODE: XCRACK, 0 DCA CRACK4 CLA CMA DCA CRACK5 /SWITCH TAD CRACK4 AND (7700 /LEFT CHAR CLL RTR /RIGHT JUSTIFY RTR RTR CRACK2, SNA /SKIP IF NOT A ZERO (BLANK) JMP CRACK3 TAD (-40 /FIND BREAKPOINT FOR RESTORATION SPA TAD (100 CRACK3, TAD (240 TYPE ISZ CRACK5 /SKIP IF HAVE RIGHT CHAR TO DO JMP I XCRACK TAD CRACK4 AND (77 JMP CRACK2 CRACK4, 0 CRACK5, 0 /-CRACK /+CRLF /ROUTINE TO TYPE <CR-LF>. /$LOCATIONS USED: 9 /:CODE: XCRLF, 0 CLA CLL TAD (215 TYPE TAD (212 TYPE JMP I XCRLF /THEN RETURN /-CRLF PAGE /THIS IS THE ALL-IMPORTANT DEVICE TABLE /EACH ENTRY CONSISTS OF A MESSAGE POINTER, /THE SKIP IOT, AND THE CLEAR IOT. /THE TABLE NOW CONTAINS MOST OF THE STANDARD /DEVICES AS DESCRIBED IN THE SMALL COMPUTER HANDBOOK. / / TABLE, TTY; 6031; 6032 TTY; 6041; 6042 /CONSOLE TTY KP8E; 6102; NOP /POWER FAIL EPCLOK; 6131; 6130 /DK8-EP CLOCK CLOCK; 6133; 6132 /CLOCK USER; 6254; 6204 /USER MODE INTERUPT RK08; 6745; 6751 /RK08 RK08; 6747; 6751 /RK08 TC58; 6701; 6712 /TC58 MAGTAPE TM8E; 6724; 6725 /TM8E MAGTAPE TM8E; 6723; 6725 TM8E; 6721; 6725 RF08; 6623; 6611 /RF08 DISK CASS; 6701; 6700 CASS; 6702; 6700 /CASSETTES HAVE THREE SKIPS CASS; 6703; 6700 LPT; 6661; 6662 /LE-8 LINE PRINTER DECTAP; 6771; 6772 /DECTAPE TC08 PTR; 6011; 6012 PTP; 6021; 6022 0;0;0;0;0;0;0 /***** END OF TABLE / /MESSAGES IDMSG, TEXT " INTERUPTING DEVICES:" QUES, TEXT "LOOP FOREVER (Y OR N) ?" AOK, TEXT "ALL OK" TTY, TEXT "CONSOLE TELETYPE" KP8E, TEXT "POWER FAIL" EPCLOK, TEXT "DK8-EP CLOCK" CLOCK, TEXT "CLOCK" USER, TEXT "USER MODE INTERUPT" RK08, TEXT "RK08 DISK" TC58, TEXT "TC58 MAGTAPE" TM8E, TEXT "TM8E MAGTAPE" RF08, TEXT "RF08 DISK" CASS, TEXT "CASSETTES" LPT, TEXT "LINE PRINTER" DECTAP, TEXT "TC08 DECTAPE" PTR, TEXT "PAPER TAPE READER" PTP, TEXT "PAPER TAPE PUNCH"