Google
 

Trailing-Edge - PDP-10 Archives - bb-x130a-sb - dbusy.mac
There are 4 other files named dbusy.mac in the archive. Click here to see a list.
	TITLE	DBUSY -- Count number of disk UNITS BUSY

;COPYRIGHT (C) 1979,1980 BY DIGITAL EQUIPMENT CORPORATION,
;MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
;TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
;AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

;Assembly instructions:  .LOAD DBUSY

	SEARCH	MACTEN,UUOSYM,SNUP
	.REQUIRE SNUP
	SALL

	DEFINE	COMAND<
	XX	"A",<PUSHJ P,SETALL>
	XX	"C",<PUSHJ P,COM.C>
	XX	"H",<PUSHJ P,HELP>
	XX	"N",<PUSHJ P,SET.RN>
	XX	"P",<PUSHJ P,SET.RP>
	XX	"R",<PUSHJ P,REFRESH>
	XX	"V",<PUSHJ P,SETHPQ>
	XX	" ",<PUSHJ P,DATDMP>
	XX	"<",<PUSHJ P,SLOWER>
	XX	">",<PUSHJ P,FASTER>
	XX	4,<PUSHJ P,TODDT>
	XX	32,<JRST CONTRZ>
>

	DEFINE	COUNT(HISTO)<
	CAIL	%T1,HSTLEN-1	;IN RANGE?
	MOVEI	%T1,HSTLEN-1	;NO, USE DEFAULT CASE
	ADD	%T1,%R		;RELOCATE OFFSET
	AOS	HISTO(%T1)	;HISTOGRAM IT
>

ESC==33
	DEFINE	HOME<
	OUTCHR	[ESC]
	OUTCHR	["H"]
>
	DEFINE	CLEAR<
	OUTCHR	[ESC]
	OUTCHR	["J"]
>
	DEFINE	MOVETO(XP,YP)<
	OUTCHR	[ESC]
	OUTCHR	["Y"]
	PUSH	P,SECRET
	MOVE	SECRET,YP
	ADDI	SECRET," "
	OUTCHR	SECRET
	MOVE	SECRET,XP
	ADDI	SECRET," "
	OUTCHR	SECRET
	POP	P,SECRET
>
	DEFINE	OBYTE(LIST)<IRP LIST,<
	MOVEI	T0,LIST
	IDPB	T0,T4>
>
	DEFINE	ODEC(WID)<
	SETZB	T0,T2
	MOVE	T3,[SETZ WID]
	EXTEND	T0,[CVTBDO "0"
		           " "]
	HALT
>

HSTLEN==20
NL==10

D==1	; Disk output channel
IDDNUM==^D<5*6>	; .2 * seconds between screen updates (initial value)
T0=0
T1=T0+1
T2=T1+1
T3=T2+1
T4=T3+1
P1=T4+1
P2=6
P3=7
C=10
HACK=12
SECRET=HACK+1

	MONREF	<CHN0CB,.CHSYS,CHNQUL,UNISTS,UNISYS,UNIQUL>
	MONREF	<UNYKTP,PCOD,TCOD,TWCOD,TYPRP,TYPRN>
	BRKPNT	APRSU1,COLECT

DBUSY:	JFCL
	RESET
	MOVE	P,[-20,,PDL]
	PUSHJ	P,ZAPTOT
	SETOM	U.TYPE
	SETZM	HI.PRI
	MOVEI	T1,IDDNUM
	MOVEM	T1,DDNUM

	MOVE	T1,[%LDUNI]
	GETTAB	T1,
	FATL	<GETTAB failure for %LDUNI>
	HLRZM	T1,UNIT.P
	PUSHJ	P,GETINF##
REBREAK:PUSHJ	P,SCREEN
	PUSHJ	P,XWRSNP##
	SETZM	COUNTR
FOO:	SOSGE	COUNTR
FOOBAR:	PUSHJ	P,DATDMP
	SOSL	T1,HI.PRI
	JRST	CHKV
FOO3A:	SKPINC
	JRST	[MOVEI	T1,^D200
		 HRLI	T1,(HB.RTC)	; OR CHARACTER
		 HIBER	T1,
		 JFCL
		 SKIPGE HI.PRI
		 JRST	FOO
		 JRST	FOOBAR]
	INCHRW	T1
	CAIL	T1,"a"
	SUBI	T1,40
	MOVSI	T2,-COMLEN
CLOOP:	CAMN	T1,COMTAB(T2)
	XCT	COMINS(T2)
	AOBJN	T2,CLOOP
	HOME
	MOVETO	([1],[^D22])
	OUTSTR	[BYTE (7)ESC,"K",0,0,0]
	JRST	FOO		;END OF COMMAND

CHKV:	JUMPN	T1,FOO3A
	HOME
	CLEAR
	PUSHJ	P,DATDMP
CHKV3:	HPQ	T1,		; TO HPQ 0
	  JFCL
	JRST	FOO

CONTRZ:	HOME
	CLEAR
	REMBRK			;REMOVE BREAKPOINTS
	RESET
	EXIT	1,
	HALT	.
	JRST	REBREAK

SETALL:	SETOM	T1
	JRST	SETANY
SET.RN:	SKIPA	T1,TYPRN
SET.RP:	MOVE	T1,TYPRP
SETANY:	MOVEM	T1,U.TYPE
	PUSHJ	P,ZAPTOT
	PUSHJ	P,SCREEN
	MOVEI	T1,1
	SLEEP	T1,	; Get some data
	PJRST	DATDMP

TODDT:	HRRZ	T1,.JBDDT##
	JUMPN	T1,(T1)
	OUTSTR	[ASCIZ /? No DDT
/]
	MOVEI	T1,^D200
	HIBER	T1,
	JFCL
	POPJ	P,

REFRESH:PUSHJ	P,SCREEN
	PJRST	DATDMP

FASTER:	MOVE	T1,DDNUM
	LSH	T1,1
	TRO	T1,1
	IDIVI	T1,3
	MOVEM	T1,DDNUM
	MOVEM	T1,COUNTR
	POPJ	P,

SLOWER:	MOVE	T1,DDNUM
	IMULI	T1,3
	ADDI	T1,1
	LSH	T1,-1
	MOVEM	T1,DDNUM
	POPJ	P,

SETHPQ:	SKIPLE	HI.PRI
	JRST	[SETZB T1,HI.PRI
		 JRST CHKV3]
	MOVEI	T1,1
	HPQ	T1,
	JFCL
	MOVEI	T1,^D100
	MOVEM	T1,HI.PRI
	POPJ	P,

COM.C:	PUSHJ	P,ZAPTOT
	PJRST	DATDMP

HELP:	MOVSI	T2,-COMLEN
	OUTSTR	[ASCIZ /
One of: /]
HLOOP:	MOVE	T1,COMTAB(T2)
	CAIGE	T1,40
	OUTCHR	["^"]
	CAIGE	T1,40
	ADDI	T1,"A"-1
	OUTCHR	T1
	OUTCHR	[","]
	AOBJN	T2,HLOOP
	OUTSTR	[ASCIZ / no carriage return needed./]
	HOME
	OUTSTR	[BYTE(7)15,12,0,0,0]
	POPJ	P,

DATDMP:	HOME
	MOVETO	([^D4],[^D00])
	OUTSTR	[ASCIZ /Position count/]
	PUSHJ	P,TYPTYP
	MOVE	P1,[-NL,,PHISTO]
	PUSHJ	P,DUMPIT
	MOVETO	([^D4],[^D11])
	OUTSTR	[ASCIZ /Transfer count/]
	PUSHJ	P,TYPTYP
	MOVE	P1,[-NL,,THISTO]
	PUSHJ	P,DUMPIT
	OUTSTR	[BYTE(7)15,12,12,"!",33,"K",0]
	MOVE	T1,DDNUM
	MOVEM	T1,COUNTR
	POPJ	P,

TYPTYP:	OUTSTR	[ASCIZ /	(/]
	MOVE	T1,[ASCIZ /???)/]
	SKIPGE	T2,U.TYPE
	MOVE	T1,[ASCIZ /All)/]
	CAMN	T2,TYPRP
	MOVE	T1,[ASCIZ /RPx)/]
	CAMN	T2,TYPRN
	MOVE	T1,[ASCIZ /RNx)/]
	OUTSTR	T1
	OUTSTR	[BYTE(7)15,12,0,0,0]
	POPJ	P,

DUMPIT:	SETZB	P2,P3		; ZERO TOTAL
	PUSH	P,P1
DTOTAL:	ADD	P3,(P1)
	AOBJN	P1,DTOTAL
	POP	P,P1
DLOOP:	MOVE	T3,[LINE,,LINE+1]
	SETZM	LINE
	BLT	T3,LINEND
	MOVE	T4,[POINT 7,LINE]
	OBYTE	<15,12>
	MOVE	T1,P2
	ODEC	2
	OBYTE	<" "," ">
	MOVE	T1,(P1)
	ODEC	7
	OBYTE	<" "," ">
	MOVE	T1,(P1)
	IMULI	T1,^D100
	IDIV	T1,P3		; P3/ TOTAL
	PUSH	P,T1
	ODEC	3
	OBYTE	<"%"," ">
	POP	P,T1
	JUMPE	T1,ELINE
	CAILE	T1,^D60
	MOVEI	T1,^D60
STARS:	OBYTE	<"*">
	SOJG	T1,STARS
ELINE:	OBYTE	<ESC,"K",0>
	OUTSTR	LINE
	AOS	P2
	AOBJN	P1,DLOOP
	POPJ	P,

ZAPTOT:	MOVE	T1,[PHISTO,,PHISTO+1]
	SETZM	PHISTO
	BLT	T1,PHISTO+HSTLEN
	MOVE	T1,[THISTO,,THISTO+1]
	SETZM	THISTO
	BLT	T1,THISTO+HSTLEN
	POPJ	P,

SCREEN:	HOME
	CLEAR
	POPJ	P,

;HERE IN EXEC MODE ON A CLOCK TICK (CH7)

COLECT:	PUSH	%P,%T1
	PUSH	%P,%T2
	PUSH	%P,%T3
	PUSH	%P,%T4
	PUSH	%P,%U
	MOVE	%U,UNIT.P(%R)	; ADDRESS OF 1ST UNIT
	SETZB	%T1,%T4
DO.PQ1:	LDB	%T2,@UNYKTP(%R)	; GET UNIT TYPE
	SKIPL	U.TYPE(%R)	; ALL OK?
	CAMN	%T2,U.TYPE(%R)	; OR RIGHT UNIT?
	CAIA			; YES
	JRST	DO.NXT(%R)
	MOVE	%T3,%U		; T3/ UDB BASE ADDRESS
	ADD	%T3,UNISTS(%R)	; T3/ XXXXCB+UNISTS
	MOVE	%T3,(%T3)	; GET STATUS FOR THIS UDB
	CAMN	%T3,PCOD(%R)	;UNIT POSITIONING?
	AOS	%T1		;EWE-BETCHA
;	CAME	%T3,TWCOD(%R)	;TRANSFER WAIT?
	CAMN	%T3,TCOD(%R)	;OR ACTIVE?
	AOS	%T4		;YES, COUNT IT
	MOVE	%T3,UNIQUL(%R)
	ADD	%T3,%U
;	ADD	%T1,(%T3)	;PLUS LENGTH OF POSITION QUEUE
DO.NXT:	ADD	%U,UNISYS(%R)
	HLRZ	%U,(%U)
	JUMPN	%U,DO.PQ1(%R)
	COUNT	(PHISTO)	;SO MUCH FOR P'S
	MOVE	%T1,%T4
	JRST	DO.CH9(%R)

DO.CHN:	MOVE	%T2,CHN0CB(%R)
	SETZM	%T1
DO.CH1:	SKIPL	(%T2)		; WORD 0 = -1 ?
	AOS	%T1		; NO--FILE IN T STATE
	MOVE	%T3,CHNQUL(%R)
	ADD	%T3,%T2		; T3/ CHNQUL(THIS CHN DB)
	ADD	%T1,(%T3)	; T1/ TWQ ACTIVITY
	MOVE	%T3,.CHSYS(%R)
	ADD	%T2,%T3
	HLRZ	%T2,(%T2)	; T2/ NEXT CHN DB
	JUMPN	%T2,DO.CH1(%R)
DO.CH9:	COUNT	(THISTO)
	POP	%P,%U
	POP	%P,%T4
	POP	%P,%T3		;DONE, RESTORE ACS
	POP	%P,%T2
	POP	%P,%T1
	POPJ	%P,

PDL:	BLOCK	20		;PDL
	BLOCK	10		;ABJECT PARANOIA
PHISTO:	BLOCK	HSTLEN+1	;FIRST WORD TO GO TO OUTPUT FILE
	BLOCK	10		;DITTO
THISTO:	BLOCK	HSTLEN+1
	BLOCK	10		;DATTO
U.TYPE:	EXP	-1
HI.PRI:	EXP	0
UNIT.P:	EXP	444444
COUNTR:	BLOCK	1
LINE:	BLOCK	^D30
LINEND:	BLOCK	1
DDNUM:	EXP	0

	DEFINE	XX(AA,BB)<
	EXP	AA
>
COMTAB:	COMAND
COMLEN=.-COMTAB

	DEFINE	XX(AA,BB)<
	BB
>
COMINS:	COMAND
	END	DBUSY