Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-03 - decus/20-0078/maint/suttrc.mac
There is 1 other file named suttrc.mac in the archive. Click here to see a list.
	TITLE	SUTTRC
	SEARCH	SIMMAC
	SALL
	MACINIT
	EXTERN	MAP
	EXTERN	PASSNO
	ENTRY	TRC

DEFINE ERROR(FIL,CAUSE)
<OUTSTR [ASCIZ/CAUSE ERROR FILE: *.'FIL
/]
EXIT
>

RNAME <XCH0,XCH,XBASE>,<X1,X2,X3>
RNAME <XADR,XACC,XBIN,XBIN1,XBIN2,XLSIZE,XP,XPP,XCNT,XW>,<X4,X5,X6,X7,X10,X11,X12,X13,X14,X15>

SCALAR <QBINCH,QLSTCH,QTRCCH>

IO.EOF=20000

;LOCATE/ENTER:
;------------

BINLK:	LOOKUP	QBINCH,LKBIN
	GOTO	MAPEOF
	IN	QBINCH,
	RETURN


LSTLK:	LOOKUP	QLSTCH,LKLST
	GOTO	NEWMOD
	IN	QLSTCH,
	RETURN


TRCLK:	ENTER	QTRCCH,LKTRC
	GOTO	[ERROR(TRC,ENTER)]
	OUT	QTRCCH,
	RETURN

TRCBUF:	BLOCK	3
LSTBUF:	BLOCK	3
BINBUF:	BLOCK	3

LKTRC:	0
	SIXBIT	/TRC/
	BLOCK	2

LKLST:	0
	SIXBIT	/LST/
	BLOCK	2

LKBIN:	SIXBIT	/TRACE/
	SIXBIT	/BIN/
	BLOCK	2

;CLOSE:
;-----

BINCL:	CLOSE	QBINCH,
	IF	STATZ	QBINCH,740000
		GOTO	FALSE
	THEN
		RETURN
	FI
	ERROR	BIN,CLOSE

LSTCL:	CLOSE	QLSTCH,
	IF	STATZ	QLSTCH,740000
		GOTO	FALSE
	THEN
		RETURN
	FI
	ERROR	LST,CLOSE

TRCCL:	CLOSE	QTRCCH,
	IF	STATZ	QTRCCH,740000
		GOTO	FALSE
	THEN
		RETURN
	FI
	ERROR	TRC,CLOSE
;INPUT ONE WORD FROM TRACE.BIN
;-----------------------------

	LOOP
		IF	IN	QBINCH,
			GOTO	FALSE
		THEN
			STATZ	QBINCH,IO.EOF
			GOTO	BINEOF
			ERROR	BIN,READ
		FI
BININ:	AS	SOSGE	BINBUF+2
		GOTO	TRUE
	SA
	ILDB	XBIN,BINBUF+1
	AND	XBIN,[XWD 777,777777]
	RETURN

;INPUT ONE CHARACTER FROM *.LST
;------------------------------

	LOOP
		IF	IN	QLSTCH,
			GOTO	FALSE
		THEN
			STATZ	QLSTCH,IO.EOF
			GOTO	LSTEOF
			ERROR	LST,READ
		FI
LSTIN:	AS	SOSGE	LSTBUF+2
	GOTO	TRUE
	SA
	ILDB	XCH,LSTBUF+1
	RETURN

;OUTPUT ONE CHARACTER TO *.TRC
;-----------------------------

	LOOP
		IF	OUT	QTRCCH,
			GOTO	FALSE
		THEN
			ERROR	TRC,WRITE
		FI
TRCOUT:	AS	SOSGE	TRCBUF+2
	GOTO	TRUE
	SA
	IDPB	XCH,TRCBUF+1
	RETURN
TOT:	BLOCK	1
HIGH:	BLOCK	1
LLIM:	ASCII/000000'	000 00 0 00 000000/
HLIM:	ASCII/999999'	999 99 9 99 999999/
INFO:	ASCII/
 
/
EXCT:	BLOCK	2
	ASCII/ INSTRUCTIONS EXECUTED 
/
TRCT:	BLOCK	2
	ASCII/ INSTRUCTIONS TRACED 

    /
PERC:	BLOCK	1
	ASCII/% OF TOTAL

    
/

SIMPRO:	BLOCK	400
INAR:	BLOCK	50
FREQ:	ASCII/        /
STACK:	BLOCK	50
LASTC:	BLOCK	1
OACC:	BLOCK	1
MODULE:	BLOCK	2
DONE:	BLOCK	1
PASS:	ASCII/	[PAS/
	ASCIZ/S  ]/
;OUTPUT ONE LINE TO *.TRC AND INPUT A NEW ONE:
;--------------------------------------------

LINE:	JUMPE	XLSIZE,NEWIN
	SETZ	XCH,
	L	XP,[POINT 7,INAR]
	LOOP
		ILDB	XCH,XP
		EXEC	TRCOUT
	AS
		DECR	XLSIZE,TRUE
	SA
NEWIN:	L	XP,[POINT 7,INAR]
	LOOP
		EXEC	LSTIN
		IDPB	XCH,XP
		AOJ	XLSIZE,
		CAIN	XCH,14		;<FF>
		GOTO	FALSE
	AS	CAIE	XCH,12		;<LF>
		GOTO	TRUE
	SA
	EXCH	XCH,LASTC
	CAIE	XCH,14		;<FF>
	RETURN
	EXEC	LINE
	GOTO	LINE

;OUTPUT 8 CHARACTERS TO *.TRC
;----------------------------

FIELD:	LI	XW,10
	LOOP
		ILDB	XCH,XP
		EXEC	TRCOUT
	AS
		DECR	XW,TRUE
	SA
	RETURN
XPL=XBIN1
XPH=XBIN2
XL=XCH0
XH=X16

;SEARCH A LINE IN *.LST WITH INSTRUCTION FORMAT
;----------------------------------------------

SINSTR:	EXEC	LINE
	LI	XW,14		;<FF>
	CAMN	XW,LASTC
	GOTO	PAGACC
	L	XW,[ASCII/PROGR/]
	CAMN	XW,INAR
	GOTO	FINAL

	L	XPL,[POINT 7,LLIM]
	L	XPH,[POINT 7,HLIM]
	L	XPP,[POINT 7,INAR+1,13]
	LI	XCNT,^D26
	LOOP
		ILDB	XCH,XPP
		ILDB	XL,XPL
		ILDB	XH,XPH
		IF	CAMGE	XCH,XL
			GOTO	TRUE
			CAMG	XCH,XH
			GOTO	FALSE
		THEN
			L	XP,[POINT 7,[ASCII/        /]]
			EXEC	FIELD
			GOTO	SINSTR
		FI
	AS
		DECR	XCNT,TRUE
	SA
	RETURN

PAGACC:	CAMN	XACC,OACC
	GOTO	SINSTR
	SUBM	XACC,OACC
	L	XBIN,OACC
	LI	XCNT,7
	L	XPP,[POINT 7,FREQ]
	EXEC	DECNV
	L	XP,[POINT 7,FREQ]
	EXEC	FIELD
	L	XP,[POINT 7,[ASCII/ SUM OF PAGE/]]
	LI	XW,14
	EXEC	FIELD+1
	ST	XACC,OACC
	GOTO	SINSTR

PURGE	XPL,XPH,XL,XH
;CONVERT TABLE ENTRY TO DECIMAL ASCII:
;------------------------------------

DECNV:	L	XW,XCNT
	SOJ	XW,
	LOOP
		IDIVI	XBIN,12
		ADDI	XBIN1,60
		PUSH	XPDP,XBIN1
	AS
		DECR	XCNT,TRUE
	SA
	LOOP
		POP	XPDP,XBIN
	AS	CAIE	XBIN,60
		GOTO	FALSE
		SUBI	XBIN,20
		IDPB	XBIN,XPP
		DECR	XW,TRUE
		GOTO	.+3
	SA
	LOOP
		IDPB	XBIN,XPP
	AS	SOJL	XW,FALSE
		POP	XPDP,XBIN
		GOTO	TRUE
	SA
	RETURN
;PROGRAM ENTRY:
;-------------

TRC::	SETZM	PASSNO
	SETZM	DONE

	OPEN	QBINCH,[14
			SIXBIT/DSK/
			XWD 0,BINBUF]
	GOTO	[ERROR(BIN,OPEN)]

	OPEN	QLSTCH,[0
			SIXBIT/DSK/
			XWD 0,LSTBUF]
	GOTO	[ERROR(LST,OPEN)]

	OPEN	QTRCCH,[0
			SIXBIT/DSK/
			XWD TRCBUF,0]
	GOTO	[ERROR(TRC,OPEN)]


TRAC:	AOS	XW,PASSNO
	ADDI	XW,20	;convert to SIXBIT
	DPB	XW,[POINT 6,LKBIN,35]
	ADDI	XW,40	;convert to ASCII
	DPB	XW,[POINT 7,PASS+1,20]
NEWMOD:	LI	XPDP,STACK
	L	XP,[POINT 6,LKLST]
	L	XPP,[POINT 6,LKTRC]
	SETZM	LKLST
	SETZM	LKTRC
	SETZM	LASTC
	SETZM	OACC
	EXEC	BINLK
	EXEC	MAP
	GOTO	MAPEOF
	ANDCMI	XBASE,400000

;store module name in ASCIZ
	STD	XCH0,MODULE

;convert to sixbit, and store in LOOKUP blocks
	L	XW,[POINT 7,XCH0]
	LI	XCNT,6
	LOOP	ILDB	XW
		SUBI	40
		IDPB	XP
		IDPB	XPP
	AS	DECR	XCNT,TRUE
	SA

;OPEN DATA SETS:
;--------------

	EXEC	BINLK
	EXEC	LSTLK
	EXEC	TRCLK

	EXEC	BININ		;get total num of traced instr
	ST	XBIN,TOT
	EXEC	BININ		;get low bound
	HRRZ	XADR,XBIN
	EXEC	BININ		;get high bound
	HRRZM	XBIN,HIGH


;GET PROGRAM TABLE
;-----------------

	HRLZI	XW,-400
	LOOP	EXEC	BININ
		LDB	XBIN,BINBUF+1
		ST	XBIN,SIMPRO(XW)
	AS	AOBJN	XW,TRUE
	SA

	EXEC 	BININ		;get first frequency value
	SETZ	XACC,
	SETZ	XLSIZE,
SEARCH:	EXEC	SINSTR
	L	XPP,[POINT 7,INAR+1,13]
	SETZ	XCH0,
	LI	XCNT,6
	;convert address field
	LOOP
		ILDB	XCH,XPP
		SUBI	XCH,60
		ROT	XCH,-3
		LSHC	XCH0,3
	AS
		DECR	XCNT,TRUE
	SA
	ADD	XCH0,XBASE
	;CHECK IF WITHIN TABLE
	IF	CAMGE	XCH0,XADR
		GOTO	TRUE
		CAMG	XCH0,HIGH
		GOTO	FALSE
	THEN
		L	XP,[POINT 7,[ASCII/        /]]
		EXEC	FIELD
		GOTO	SEARCH
	FI

;WHEN WITHIN TABLE, SEEK TABLE ENTRY:
;-----------------------------------

SEEK:	IF	CAMN	XCH0,XADR
		GOTO	FALSE
	THEN
		EXEC	BININ
		AOJA	XADR,SEEK
	FI
	IF	JUMPN	XBIN,FALSE
	THEN
		L	XP,[POINT 7,[ASCII/********/]]
		EXEC	FIELD
		GOTO	SEARCH
	FI
	ADD	XACC,XBIN
	LI	XCNT,7
	L	XPP,[POINT 7,FREQ]
	EXEC	DECNV
	L	XP,[POINT 7,FREQ]
	EXEC	FIELD
	GOTO	SEARCH
FINAL:	L	XP,[POINT 7,[ASCII/        /]]
	EXEC	FIELD
	EXEC	LINE
	L	XBIN,TOT
	L	XPP,[POINT 7,EXCT]
	LI	XCNT,12
	EXEC	DECNV
	L	XBIN,XACC
	L	XPP,[POINT 7,TRCT]
	LI	XCNT,12
	EXEC	DECNV
	L	XBIN,XACC
	IMULI	XBIN,^D1000
	IDIV	XBIN,TOT
	L	XPP,[POINT 7,PERC]
	LI	XCNT,4
	EXEC	DECNV
	L	XPP,[POINT 7,PERC,27]
	LDB	XW,XPP
	LI	XBIN,"."
	DPB	XBIN,XPP
	IDPB	XW,XPP

;OUTPUT PROGRAM TABLE:
;---------------------

	L	XP,[POINT 7,[ASCII/

SIMULA PROGRAMS TRACED: /]]
	LI	XW,^D28
	EXEC	FIELD+1
	SETO	XPP,
NEWL:	LI	XCNT,12
	LOOP	ADDI	XPP,1
		SKIPN	XBIN1,SIMPRO(XPP)
		GOTO	FALSE
	AS	LI	XW,10
		LOOP	SETZ	XBIN,
			LSHC	XBIN,6
			ADDI	XBIN,40
			L	XCH,XBIN
			EXEC	TRCOUT
		AS	DECR	XW,TRUE
		SA
		DECR	XCNT,TRUE
		L	XP,[POINT 7,[BYTE(7)15,12,11,11,11]]
		LI	XW,5
		EXEC	FIELD+1
		GOTO	NEWL
	SA
	L	XP,[POINT 7,[BYTE(7)15,12,15,12,15,12]]
	LI	XW,6
	EXEC	FIELD+1


;OUTPUT INFO AREA:
;----------------

	L	XP,[POINT 7,INFO]
	LI	XW,^D100
	EXEC	FIELD+1
	GOTO	INOUT

INOUT:	EXEC	LINE
	GOTO	INOUT

BINEOF:	GOTO	INOUT

LSTEOF:	EXEC	BINCL
	EXEC	LSTCL
	EXEC	TRCCL
	OUTSTR	[ASCIZ/TRC:	/]
	OUTSTR	MODULE
	IF	SKIPE	DONE
		GOTO	FALSE
	THEN	OUTSTR	PASS
		SETOM	DONE
	FI
	OUTSTR	[BYTE(7)15,12,0,0,0]	;<CR> <LF>
	GOTO	NEWMOD

MAPEOF:	SETZM	DONE
	LI	5
	CAMLE	PASSNO
	GOTO	TRAC

	RELEASE	QBINCH,
	RELEASE	QLSTCH,
	RELEASE	QTRCCH,
	EXIT

	LIT
	END	TRC