Google
 

Trailing-Edge - PDP-10 Archives - tops10_tools_bb-fp64a-sb - 10,7/who/whomap.mac
There are 4 other files named whomap.mac in the archive. Click here to see a list.
TITLE	WHOMAP -- Interface to MAP, the DECsystem-10 page mapper

	SEARCH	WHOMAC

	$SETUP	(WHOMAP)
	SUBTTL	MAP interface -- Initialize the page mapper

MAPDEF::MOVE	T1,[MP.JRM##+.MPMON##]	;MONITOR MAPPING
	PUSHJ	P,MAPINI		;INIT MAPPER
	PUSHJ	P,SPYINI##		;AND INITIALIZE SPY ROUTINES
	TLZ	F,(FL.CRASH)		;NOT CRASH FILE READING
	MOVE	T1,[%CNDAE]		;SPECIAL GETTAB TO CHECK VERSION
	PUSHJ	P,.MAPG##		;DO IT
	  MOVEI	T1,0			;PREHISTORIC MONITOR
	MOVEM	T1,MAPMVR		;SAVE
	POPJ	P,			;AND RETURN

MAPMON::SKIPE	ONCFLG##		;ONCE-ONLY INITIALIZATION?
	TLNE	F,(FL.LOGIN)		;NO--ARE WE LOGGED IN?
	SKIPA	T1,[MP.JRM##+.MPMON##]	;OK TO USE MONITOR MAPPING
	$FATAL	(LPM,<Login please to use switch MONITOR>)
	PUSHJ	P,MAPINI		;INIT MAPPER
	TLZ	F,(FL.CRASH)		;NOT CRASH FILE READING
	JRST	MAPCOM			;ENTER COMMON CODE

MAPCRS::SKIPE	ONCFLG##		;ONCE-ONLY INITIALIZATION?
	TLNE	F,(FL.LOGIN)		;NO--ARE WE LOGGED IN?
	SKIPA	T1,[MP.EXE##+.MPFIL##]	;OK TO USE CRASH FILE MAPPING
	$FATAL	(LPC,<Login please to use switch CRASH>)
	PUSHJ	P,MAPINI		;INIT MAPPER
	TLO	F,(FL.CRASH)		;FLAG CRASH FILE READING

MAPCOM:	SKIPN	ONCFLG##		;ONCE-ONLY INITIALIZATION?
	POPJ	P,			;YES--DONE
	PUSHJ	P,SPYINI##		;AND INITIALIZE SPY ROUTINES
	$INFO	(SMN,<Status of >,E.SMN);TYPE MONITOR STATUS
	TLNE	F,(FL.CRASH)		;IS THIS A CRASH?
	$INFO	(RCF,<Report from crash file >,E.RCF);TYPE CRASH FILE NAME
	PJRST	.TCRLF##		;CRLF AND RETURN 

MAPINI:	SKIPE	MAPRTM			;WANT TO INCLUDE MAPPER RUNTIME?
	IOR	T1,[MP.RTM##]		;YES
	MOVEM	T1,MAPARG##+.MPFNC##	;SAVE THEM
	SKIPN	ONCFLG##		;ONCE-ONLY INITIALIZATION?
	JRST	MAPI.1			;YES
	SKIPG	T1,S.CACHE##		;GET PAGES TO CACHE
	 MOVEI	T1,^D50			;ASSUME 50
	PUSHJ	P,MAPPGS		;NO--RESERVE PAGES FOR THE MAPPER
	JRST	MAPI.2			;ONWARD

MAPI.1:	SETZB	T1,T2			;USE MAPPER DEFAULTS

MAPI.2:	MOVEM	T1,MAPARG##+.MPNPC##	;SAVE NUMBER OF PAGES
	MOVEM	T2,MAPARG##+.MPSPN##	;SAVE STARTING PAGE NUMBER
	SETZM	MAPARG##+.MPDSN##	;DEFAULT SECTION NUMBER IS ZERO
	MOVEI	T1,CRSFIL##		;GET ADDRESS OF FILESPEC BLOCK
	MOVEM	T1,MAPARG##+.MPARG##	;SAVE IT
	MOVEI	T1,MAPARG##		;POINT TO BLOCK
	PUSHJ	P,.MAPI##		;FIREUP THE PAGE MAPPER
	  JRST	MAPI.3			;MAPPING ERROR--LOSE
	MOVEM	T1,MAPPTR		;SAVE ADDRESS OF DATA BLOCK
	SKIPN	.MPSPY##(T1)		;ARE WE SPYING?
	 TLZA	F,(FL.SPY)		;NO--MAKE SURE THE BIT IS OFF
	  TLO	F,(FL.SPY)		;FLAG SPYING (SPY PAGES)
	POPJ	P,			;AND RETURN

MAPI.3:	SKIPN	ONCFLG##		;ONCE-ONLY INITIALIZATION?
	JRST	MAPSTP			;YES--STOPCODE
	JRST	MAPFAT			;ELSE CALL IT A FATAL ERROR
E.SMN:	PUSHJ	P,XB$DVN##		;GET DEC VERSION NUMBER
	LOAD	T1,T1,VR.VER		;GET MAJOR VERSION NUMBER
	PUSHJ	P,.TOCTW##		;TYPE IT
	MOVEI	T1,[ASCIZ | monitor |]	;ASSUME THE RUNNING MONITOR
	TLNE	F,(FL.CRASH)		;CRASH FILE READING?
	MOVEI	T1,[ASCIZ | crash |]	;YES
	PUSHJ	P,.TSTRG##		;TYPE TEXT
	PUSHJ	P,XB$NAM##		;GET MONITOR NAME
	PUSHJ	P,.TSTRG##		;TYPE IT
	$TYPE	< on >
	PUSHJ	P,XB$UDT##		;GET DATE/TIME
	PJRST	.TDTTM##		;TYPE UDT AND RETURN

E.RCF:	MOVE	T1,MAPPTR		;GET MAPPER DATA BLOCK ADDRESS
	MOVEI	T1,.MPAFS##(T1)		;POINT TO THE RETURNED ASCIZ FILESPEC
	PUSHJ	P,.TSTRG##		;TYPE IT
	PUSHJ	P,XB$SCN##		;GET STOPCODE NAME
	JUMPE	T1,.POPJ##		;SKIP IF NO STOPCODE
	PUSH	P,T1			;SAVE STOPCODE NAME
	$TYPE	<, stopcode >
	POP	P,T1			;GET STOPCODE NAME BACK
	PJRST	.TSIXN##		;TYPE IT AND RETURN
SUBTTL	MAP interface -- Allocate pages


; Here to acquire pages for use by the page mapper
; Call:	MOVE	T1, number of pages
;	PUSHJ	P,MAPPGS
;	<RETURN>			;T1 = #PAGES, T2 = STARTING PAGE
;
MAPPGS:	AOS	T2,MAPFLG		;BEEN HERE ALREADY?
	CAIN	T2,1			;FIRST TIME THROUGH?
	JRST	MAPP.1			;YES
	MOVE	T2,MAPPTR		;GET POINTER TO DATA BLOCK
	MOVE	T1,.MPPGS##(T2)		;PAGES AVAILABLE FOR MAPPING
	MOVE	T2,.MPCPN##(T2)		;STARTING PAGE NUMBER
	POPJ	P,			;RETURN

MAPP.1:	PUSHJ	P,.SAVE4##		;SAVE SOME ACS
	MOVE	P1,T1			;GET NUMBER OF PAGES TO ALLOCATE
	MOVE	P3,P1			;MAKE A COPY

MAPP.2:	PUSHJ	P,M$NXPG##		;RESERVE A PAGE
	  $STOP	(FAP,<Failed to reserve a page for SPYing>)
	JUMPN	P2,MAPP.3		;FIRST TIME THROUGH?
	MOVE	P4,T1			;YES--SAVE STARTING PAGE NUMBER
	MOVEI	P2,-1(T1)		;FAKE OUT PREVIOUS PAGE NUMBER

MAPP.3:	CAIE	P2,-1(T1)		;CONSECUTIVE PAGES?
	JRST	MAPP.4			;NO--ALL CAN'T CACHE ANYMORE
	MOVE	P2,T1			;SAVE NEW PREVIOUS PAGE NUMBER
	SOJG	P1,MAPP.2		;LOOP

MAPP.4:	MOVE	T1,P3			;GET REQUESTED NUMBER OF PAGES
	SUB	T1,P1			;GET NUMBER OF PAGES RESERVED
	MOVE	T2,P4			;GET STARTING PAGE NUMBER
	POPJ	P,			;AND RETURN
SUBTTL	MAP interface -- Error handling


; This routine will build an argument block for
; the verbosity controlled error processor.
;
;
MAPFAT::PUSH	P,[CAIA	4,]		;FATAL ERROR
	JRST	MAPERR			;ENTER COMMON CODE
MAPSTP::PUSH	P,[CAIA	5,]		;STOPCODE
MAPERR:	PUSH	P,T1			;SAVE T1
	PUSH	P,T2			;SAVE T2
	MOVE	T1,MAPPTR		;GET POINTER TO DATA BLOCK
	MOVE	T2,[PUSHJ P,.ERROR##]	;INST TO CALL THE ERROR HANDLER
	MOVEM	T2,MPEBLK+0		;SAVE IT
	MOVE	T2,-2(P)		;GET NO-OP AND SEVERITY CODE
	IOR	T2,.MPPFX##(T1)		;INCLUDE THE PREFIX
	MOVEM	T2,MPEBLK+1		;SAVE IT
	MOVE	T2,[-3,,MPEBLK+3]	;POINTER TO ERROR ARGS
	MOVEM	T2,MPEBLK+2		;SAVE IT
	MOVSI	T2,MAPER1		;CONTINUATION ADDRESS
	HRRI	T2,.MPMET##(T1)		;TEXT ADDRESS
	MOVEM	T2,MPEBLK+3		;SAVE IT
	POP	P,T2			;RESTORE T2
	POP	P,T1			;RESTORE T1
	POP	P,(P)			;TRIM STACK
	JRST	MPEBLK			;GENERATE AN ERROR AND RETURN

; Handle extended error text if there is some
;
MAPER1:	MOVE	T4,MAPPTR		;GET MAPPING DATA BLOCK ADDRESS
	SKIPN	.MPXET##(T4)		;HAVE EXTENDED ERROR TEXT?
	POPJ	P,			;NO
	PUSHJ	P,.TCRLF##		;TYPE A CRLF
	MOVEI	T1,.MPXET##(T4)		;GET EXTENDED ERROR TEXT
	PUSHJ	P,.TSTRG##		;TYPE IT
	POPJ	P,			;RETURN
	SUBTTL	Performance display


MAPPRF::SKPYES	S.MPERFORMANCE##	;WANT MAPPER PERFORMANCE DATA?
	POPJ	P,			;NO
	PUSHJ	P,.SAVE1##		;SAVE P1
	PUSHJ	P,.TCRLF##		;START WITH A CRLF
	MOVEI	T1,[ASCIZ |Incremental|]
	SKPYES	S.INCREMENTAL##		;INCREMENTAL MODE?
	MOVEI	T1,[ASCIZ |Accumulated|]
	PUSHJ	P,.TSTRG##		;TYPE INTRO
	$TYPE	< statistics for MAP %>
	MOVE	P1,MAPPTR		;GET MAP'S PERFORMANCE DATA BLOCK ADDR
	MOVE	T1,.MPVER##(P1)		;GET THE VERSION NUMBER
	PUSHJ	P,.TVERW##		;TYPE IT
	MOVEI	T1,[ASCIZ |; mapper runtime is |]
	SKIPE	.MPRTM##(P1)		;IS IT AVAILABLE?
	PUSHJ	P,.TSTRG##		;YES
	SKIPE	T1,.MPRTM##(P1)		;GET TOTAL RUNTIME IF AVAILABLE
	PUSHJ	P,HPTOUT		;TYPE HIGH PRECISION TIME
	PUSHJ	P,.TCRLF##		;END LINE

MPERF1:	$TYPE	<   Cache data: >
	MOVE	T1,.MPCPC##(P1)		;GET CACHE SIZE
	PUSHJ	P,.TDECW##		;TYPE IT
	$TYPE	< pages, >
	MOVE	T1,.MPHSF##(P1)		;GET NUMBER OF HASH TABLE SEARCHES
	PUSHJ	P,.TDECW##		;TYPE IT
	$TYPE	< searches, >
	MOVE	T1,.MPHSC##(P1)		;GET COLLISION COUNT
	PUSHJ	P,.TDECW##		;TYPE IT
	$TYPE	< collisions, >
	MOVE	T1,.MPEXM##(P1)		;GET COUNT OF EXAMINES
	SUB	T1,.MPPGC##(P1)		;MINUS THE PAGES WE HAD TO CREATE
	IMULI	T1,^D100		;MULTIPLY BY 100 SO WE CAN
	IDIV	T1,.MPEXM##(P1)		; COMPUTE HIT RATIO
	PUSHJ	P,.TDECW##		;TYPE RATIO
	$TYPE	<% hit ratio>
	PUSHJ	P,.TCRLF##		;END LINE

MPERF2:	$TYPE	<   Paging data: >
	MOVE	T1,.MPPGC##(P1)		;GET PAGE CREATE COUNT
	PUSHJ	P,.TDECW##		;TYPE IT
	$TYPE	< page creates, >
	MOVE	T1,.MPPGD##(P1)		;GET PAGE DESTROY COUNT
	PUSHJ	P,.TDECW##		;TYPE IT
	$TYPE	< destroys>
	PUSHJ	P,.TCRLF##		;END LINE

MPERF3:	$TYPE	<   Simulated/Actual UUOs: >
	$TYPE	< GETTAB: >
	MOVE	T1,.MPGTB##(P1)		;GET GETTAB SIMULATION COUNT
	PUSHJ	P,.TDECW##		;TYPE IT
	MOVEI	T1,"/"
	PUSHJ	P,.TCHAR##
	MOVE	T1,.MPGTU##(P1)		;GET GETTAB UUO COUNT
	PUSHJ	P,.TDECW##		;TYPE IT
	$TYPE	<   JOBPEK: >
	MOVE	T1,.MPJPK##(P1)		;GET JOBPEK SIMULATION COUNT
	PUSHJ	P,.TDECW##		;TYPE IT
	MOVEI	T1,"/"
	PUSHJ	P,.TCHAR##
	MOVE	T1,.MPJPU##(P1)		;GET JOBPEK UUO COUNT
	PUSHJ	P,.TDECW##		;TYPE IT
	$TYPE	<   PEEK: >
	MOVE	T1,.MPEXM##(P1)		;GET PEEK SIMULATION COUNT
	PUSHJ	P,.TDECW##		;TYPE IT
	PUSHJ	P,.TCRLF##		;END LINE

MPERF5:	SKPNO	S.INCREMENTAL##		;INCREMENTAL MODE?
	PUSHJ	P,.MAPC##		;YES--ZAP MAPPER COUNTERS
	  JFCL				;IGNORE ERRORS
	POPJ	P,			;RETURN
SUBTTL	Special typeout routines -- High precision time output


; Call:	MOVE	T1, time in 10-microsecond units
;	PUSHJ	P,HPTOUT
;
HPTOUT:	IDIVI	T1,^D100		;CONVERT TO MILLISECONDS
	IDIVI	T1,^D1000		;GET MILLISECONDS
	PUSH	P,T2			;SAVE IT
	IDIVI	T1,^D60			;GET SECONDS
	PUSH	P,T2			;SAVE IT
	IDIVI	T1,^D60			;GET HOURS
	PUSH	P,T2			;SAVE MINUTES
	JUMPN	T1,HPTO.1		;HAVE HOURS?
	JUMPN	T2,HPTO.2		;HAVE MINUTES?
	JRST	HPTO.3			;THEN TYPE SECONDS AND FRACTION

HPTO.1:	SETZ	T2,			;NO PADDING
	PUSHJ	P,.TDEC2##		;TYPE HOURS
	PUSHJ	P,.TCOLN##		;TYPE A COLON
	SKIPA	T2,["0"]		;PAD MINUTES WITH A ZERO

HPTO.2:	SETZ	T2,			;NO PADDING
	MOVE	T1,(P)			;GET MINUTES
	PUSHJ	P,.TDEC2##		;TYPE MINUTES
	PUSHJ	P,.TCOLN##		;TYPE A COLON
	SETZ	T4,			;WE DON'T WANT FRACTIONS TYPED
	SKIPA	T2,["0"]		;PAD SECONDS WITH A ZERO

HPTO.3:	SETZ	T2,			;NO PADDING
	MOVE	T1,-1(P)		;GET SECONDS
	PUSHJ	P,.TDEC2##		;TYPE SECONDS
	POP	P,(P)			;PRUNE
	POP	P,(P)			; STACK
	PUSHJ	P,.TDOT##		;TYPE A PERIOD
	POP	P,T1			;GET MILLISECONDS
	IDIVI	T1,^D10			;STRIP OFF LOW ORDER DIGIT
	CAIL	T2,5			;NEED TO ROUND UP?
	ADDI	T1,1			;YES
	MOVEI	T2,"0"			;PAD WITH A ZERO
	PJRST	.TDEC2##		;TYPE FRACTION AND RETURN
	SUBTTL	Data storage

MAPRTM::EXP	0			;MAPPER RUNTIM FLAG SET BY WHOONC

	$LOW

MAPFLG:	BLOCK	1			;INITIALIZED FLAG
MPEBLK:	BLOCK	6			;MAPPING ERROR BLOCK
MAPPTR::BLOCK	1			;POINTER TO DATA IN THE MAPPER
MAPMVR::BLOCK	1			;MONITOR VERSION


	END