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"