Google
 

Trailing-Edge - PDP-10 Archives - BB-L288A-RM - swskit-utilities/dx20pc.mac
There are 5 other files named dx20pc.mac in the archive. Click here to see a list.
	TITLE	DX20PC	PROGRAM TO WATCH DX20 PC




;THIS PROGRAM IS USEFUL WHEN THE MICROCODE IN THE DX20 APPEARS TO
;BE HUNG IN A LOOP, TO DIAGNOSE THE PROBLEM BY SEEING WHERE THE
;MICROCODE IS LOOPING.  THIS WILL USUALLY INDICATE A PARTICULAR
;HARDWARE PROBLEM.  IT IS SAFE TO RUN THIS PROGRAM AT ANY TIME,
;EVEN WHEN THE DX20 IS BUSY DOING I/O FOR A DRIVE.



	SEARCH	MONSYM,MACSYM
	.REQUIR	MACREL



	DEV==560		;RH20 WHICH IS CONTROLLING THE DX20
				;       **** IMPORTANT ****
				;CHANGE THIS DEFINITION TO MATCH THE
				;SYSTEM'S CONFIGURATION!!



	T1=1			;TEMPORARIES
	T2=2
	T3=3
	T4=4



	PCMASK==7777		;WIDTH OF PC'S IN DX20
	PCWORD==31B5		;DEVICE REGISTER CONTAINING PC

	PI==4			;PI SYSTEM
	PIOFF==400		;CONO TO TURN INTERRUPTS OFF
	PION==200		;CONO TO TURN INTERRUPTS ON AGAIN
	SUBTTL	MAIN PROGRAM





DX20PC:	RESET			;RESET
	USRIO			;GET USER IO PRIVILEGE
	 JSHLT			;CAN'T DO THIS

AGAIN:	MOVE	T1,[TABLE,,TABLE+1]	;GET READY
	SETZM	TABLE		;TO CLEAR OUT PC TABLE
	BLT	T1,TABLE+PCMASK	;DO IT
	HRROI	T1,[ASCIZ/
Number of samples to take: /]	;GET READY
	PSOUT			;ASK
	MOVEI	T1,.PRIIN	;FROM INPUT
	MOVEI	T3,^D10		;DECIMAL
	NIN			;READ IT
	 ERJMP	.+2		;FAILED, USE DEFAULT
	SKIPG	T2		;SEE IF SPECIFIED GOOD NUMBER
	MOVEI	T2,^D10000	;NO, GET STANDARD AMOUNT
	MOVEM	T2,SAMPLE	;SAVE NUMBER OF SAMPLES TO MAKE
	HRROI	T1,[ASCIZ/
Minimum percentage for typeout: /]	;MORE
	PSOUT			;ASK
	MOVEI	T1,.PRIIN	;AGAIN
	MOVEI	T3,^D10		;DECIMAL AGAIN
	NIN			;ASK AGAIN
	 ERJMP	.+2		;FAILED, USE DEFAULT
	SKIPGE	T2		;MAKE VALID
	SETZ	T2,		;SO CLEAR IF NEGATIVE
	CAILE	T2,^D100	;AND SEE IF TOO LARGE
	MOVEI	T2,^D100	;YES
	IMUL	T2,SAMPLE	;GET SET TO COMPUTE MINIMUM SAMPLE
	IDIVI	T2,^D100	;DO IT
	MOVEM	T2,CUTOFF	;SAVE CUTOFF VALUE
	MOVE	T2,SAMPLE	;GET COUNTER READY


LOOP:	MOVX	T1,PCWORD	;GET REGISTER TO READ
	CONO	PI,PIOFF	;**** PREVENT INTERRUPTIONS
	DATAO	DEV,T1		;**** TELL RH20 WHICH REGISTER TO READ
	DATAI	DEV,T1		;**** READ BACK PC WORD
	CONO	PI,PION		;**** ALLOW INTERRUPTS AGAIN
	ANDX	T1,PCMASK	;REMOVE JUNK
	AOS	TABLE(T1)	;INCREMENT PC COUNT FOR THIS VALUE
	SOJG	T2,LOOP		;LOOP UNTIL DONE

	HRROI	T1,[ASCIZ/

 PC	Percent	   Count
-----	-------	 --------
/]				;GET STRING
	PSOUT			;START IT
	MOVEI	T1,.PRIOU	;PRIMARY OUTPUT
	MOVSI	T4,-<PCMASK+1>	;GET LOOP READY
	SETZM	TYPED		;HAVEN'T TYPED ANY YET


TYPLOP:	SKIPE	T2,TABLE(T4)	;WAS THIS PC EXECUTED AT ALL?
	CAMGE	T2,CUTOFF	;AND UP TO MINIMUM LEVEL?
	JRST	TYPNXT		;NO, GO ON
	ADDM	T2,TYPED	;ADD TO TYPED OUT SAMPLES
	HRRZ	T2,T4		;GET PC VALUE
	MOVX	T3,NO%LFL+<4,,^D8>	;FOUR COLUMNS IN OCTAL
	NOUT			;TYPE IT
	 JSHLT			;FAILED
	HRROI	T2,[ASCIZ@/	@]	;MORE TEXT
	SETZ	T3,		;ALL OF IT
	SOUT			;TYPE IT
	MOVE	T2,TABLE(T4)	;GET NUMBER OF TIMES EXECUTED
	IMULI	T2,^D100	;CONVERT TO PERCENTAGE
	IDIV	T2,SAMPLE	;OF TOTAL
	MOVX	T3,NO%LFL+<4,,^D10>	;GET SET
	NOUT			;TYPE IT
	 JSHLT			;FAILED
	HRROI	T2,[ASCIZ/	 /]	;GET READY
	SETZ	T3,		;TO SPACE
	SOUT			;DO IT
	MOVE	T2,TABLE(T4)	;GET NUMBER OF TIMES EXECUTED
	MOVEI	T3,^D10		;DECIMAL OUTPUT
	NOUT			;TYPE IT
	 JSHLT			;FAILED
	HRROI	T2,[ASCIZ/
/]				;FINISH WITH A CRLF
	SETZ	T3,		;ALL OF IT
	SOUT			;TYPE IT

TYPNXT:	AOBJN	T4,TYPLOP	;LOOP OVER WORDS
	MOVE	T2,SAMPLE	;GET TOTAL SAMPLES
	CAMN	T2,TYPED	;TYPED THEM ALL?
	JRST	HAVALL		;YES, SKIP OUTPUT
	HRROI	T2,[ASCIZ/
Samples not shown: /]		;GET READY
	SETZ	T3,		;ALL OF THE TEXT
	SOUT			;DO IT
	MOVE	T2,SAMPLE	;GET TOTAL SAMPLES
	SUB	T2,TYPED	;DECREMENT NUMBER TYPED
	MOVEI	T3,^D10		;DECIMAL
	NOUT			;TYPE IT
	 JSHLT			;ERROR
HAVALL:	HRROI	T2,[ASCIZ/

/]				;FINAL CRLFS
	SETZ	T3,		;END ON NULL
	SOUT			;TYPE IT
	JRST	AGAIN		;LOOP AGAIN
	SUBTTL	DATA




CUTOFF:	BLOCK	1		;LOWEST NUMBER OF SAMPLES TO TYPE
TYPED:	BLOCK	1		;NUMBER OF SAMPLES OUTPUT
SAMPLE:	BLOCK	1		;NUMBER OF SAMPLES TO DO
TABLE:	BLOCK	PCMASK+1	;NUMBER OF TIMES EACH PC WAS SEEN



	END	DX20PC