Google
 

Trailing-Edge - PDP-10 Archives - bb-jr93e-bb - algots.c05
There are 15 other files named algots.c05 in the archive. Click here to see a list.
 REP 3/1	;05C1
	;COPYRIGHT (C) 1975,1981,1982 BY
 WIT
	;COPYRIGHT (C) 1975,1982,1983 BY
 INS 23/7	;05C2
		TLNN	DB,OMC1!OMC2	; [336] WAS IT A KI OR KL?
		 TLO	DB,OMC2		; [336] NO, MUST BE A KA
 REP 15/75	;05C3
		MOVEI	A0,0		; SET A0 FOR GETOWN

	BLKE1:	POP	SP,A1		; UNSTACK
		JUMPL	A1,BLKE2	; BLOCK POINTER?
		TLZE	A1,(<Z 17,0>)	; [E057] IS THIS A STRING ARRAY ?
		PUSHJ	SP,DELSCN	; [E057] YES - DELETE SUB-STRINGS
		MOVEI	A1,@A1		; GETSTRING ITSELF, IF STRING VARIABLE.
		JUMPE	A1,BLKE1	; IF NO STRING ASSIGNED, DON'T DELETE.
		PUSHJ	SP,GETOWN	; NO - DELETE ITEM
		JRST	BLKE1
 WIT
		MOVE	A2,[-20,,%IODR+20] ; [316] AOBJN PTR. TO SCAN LOGICAL I/O TABLE
		ADDI	A2,(DB)		; [316] RELOCATE
		SETZM	A01TMP(DB)	; [316] CLEAR "LOGICAL CHANNELS IN USE" FLAG
	BLKELP:	SKIPN	A3,(A2)		; [316] IS THIS LOGICAL CHANNEL IN USE?
		JRST	BLKE1A		; [316] NO, SKIP TO NEXT ENTRY
		HRRZ	A3,1(A3)	; [316] YES, LOAD CURRENT ADDR. OF I/O STRING
		MOVEM	A3,%DDTCB-%IODR-20(A2) ; [316] PUT ADDR. INTO TABLE FOR LATER
		SETOM	A01TMP(DB)	; [316] SET FLAG TO SAY WE FOUND A CHANNEL
		TRNA			; [316] AND SKIP THE NEXT SETZM
	BLKE1A:	SETZM	%DDTCB-%IODR-20(A2) ; [316] UNASSIGNED CHANNEL, CLEAR ENTRY
		AOBJN	A2,BLKELP	; [316] LOOP UNTIL DONE SCANNING I/O TABLE

		MOVEI	A0,0		; [316] SET A0 FOR GETOWN
	BLKE1B:	POP	SP,A1		; [316] UNSTACK
		JUMPL	A1,BLKE2	; [316] JUMP IF THIS ISN'T A BLOCK POINTER
		TLZE	A1,(<Z 17,0>)	; [316] [E057] ELSE, IS THIS A STRING ARRAY?
		PUSHJ	SP,DELSCN	; [316] [E057] YES, DELETE SUB-STRINGS
		MOVEI	A1,@A1		; [316] NO, STATICISE
		JUMPE	A1,BLKE1B	; [316] LOOP IF NO STRING ASSIGNED
		SKIPN	A01TMP(DB)	; [316] ELSE, ANY LOGICAL I/O CHANNELS IN USE?
		JRST	BLKE1C		; [316] NO, JUMP AHEAD
		MOVE	A2,[-20,,%DDTCB]; [316] YES, LOAD PTR. TO SCAN I/O TABLE
		ADDI	A2,(DB)		; [316] RELOCATE
	BLKEL1:	SKIPN	(A2)		; [316] GET NEXT I/O ENTRY - UNUSED CHANNEL?
		JRST	BLKE1D		; [316] YES, SKIP TO NEXT ENTRY
		CAMLE	A1,(A2)		; [316] NO, RETURNED SPACE ABOVE I/O SPACE?
		JRST	BLKE1D		; [316] YES, STRING IS OK
		HLRZ	A3,-1(A1)	; [316] NO, GET STRING'S HEAP SPACE LENGTH
		ADDI	A3,-1(A1)	; [316] CALCULATE STRING END ADDR.
		CAMG	A3,(A2)		; [316] IS I/O CHANNEL OPEN TO THIS STRING?
		JRST	BLKE1D		; [316] NO, STRING AND CHANNEL ARE BOTH OK
		SETZM	%IODR+20-%DDTCB(A2)  ; [323] AND SHUTDOWN THE CHANNEL
		SETZM	%IOSTS+20-%DDTCB(A2) ; [323] ALSO CLEAR EXTRA STATUS BITS
	BLKE1D:	AOBJN	A2,BLKEL1	; [316] LOOP UNTIL DONE WITH I/O TABLE
	BLKE1C:	PUSHJ	SP,GETOWN	; [316] DELETE STRING SPACE
		JRST	BLKE1B		; [316] LOOP UNTIL ALL STRINGS RELEASED
 REP 26/93	;05C4
	GETKNL:	; KERNEL OF GETOWN - A2 = TABLE POINTER (-LENGTH,,ADDR)
	Edit(062); Use current top of heap if possible
		PUSH	SP,A2		; [E062] SAVE TABLE POINTER
 WIT
	;	EDIT(062); Use current top of heap if possible

	; KERNEL OF GETOWN - A2 = TABLE POINTER (-LENGTH,,ADDR)
	GETKNL:	PUSH	SP,A2		; [E062] SAVE TABLE POINTER
 REP 33/93	;05C5
	GET1:				; ORDINARY GET-N-WORDS ENTRY
		ADDI	A0,1		; ALLOW FOR LINK-WORD
 WIT
	; ORDINARY GET-N-WORDS ENTRY
	GET1:	ADDI	A0,1		; ALLOW FOR LINK-WORD
 REP 50/93	;05C6
		CAIN	A5,0		; [246] IS THIS HEAP ENTRY ALREADY IN USE?
		JRST	[			; [246]
			POP	SP,A5		; [246] YES, IT'S NO GOOD - RESTORE A5
			JRST	GET15		; [246] KEEP SCANNING HEAP TABLE
			]			; [246]
		POP	SP,A5		; [246] NO, RESTORE A5
		MOVEI	A3,(A1)		; [246] THIS ENTRY IS GOOD - REMEMBER IT
		HRLI	A3,(A2)

 WIT
		JUMPE	A5,[POP	SP,A5		; [316] [246] JUMP IF ENTRY IS IN USE
			JRST	GET15]		; [316] [246] KEEP SCANNING HEAP TABLE
		POP	SP,A5		; [316] [246] ELSE RESTORE A5
		MOVEI	A3,(A1)		; [246] THIS ENTRY IS GOOD - REMEMBER IT
		HRLI	A3,(A2)
 REP 1/95	;05C7
	GET2:				; A0 = 0 - RETURN SPACE ADDRESSED BY A1
		TLZ	DB,TMPFL1!TMPFL2; CLEAR TEMPORARY FLAG BITS
		HLRZ	A0,-1(A1)	; A0 IS LENGTH OF RETURNED PIECE
		ADDI	A0,-1(A1)	; NOW TOP ADDRESS + 1
		MOVEI	A1,-1(A1)	; GET ADDRESS OF BOTTOM OF PIECE
 WIT

	GET2:				; A0 = 0 - RETURN SPACE ADDRESSED BY A1
		TLZ	DB,TMPFL1!TMPFL2; CLEAR TEMPORARY FLAG BITS
		MOVEI	A1,-1(A1)	; [326] GET BOTTOM ADDR. OF RETURNED SPACE
	IFN FTGETCHK,<			; [326] MAKE SURE SPACE ISN'T RETURNED TWICE
	GET2A:	SKIPN	A3,(A2)		; [326] GET TABLE ENTRY ADDR.
		 JRST	GET2B		; [326] NULL ENTRY, IGNORE
		CAIGE	A1,(A3)		; [326] IS RETURNED SPACE BELOW THIS ENTRY?
		 JRST	GET2B		; [326] YES, OK SO FAR
		HLRZ	A0,A3		; [326] NO, CHECK IF COMPLETELY ABOVE ENTRY
		ADDI	A0,-1(A3)	; [326] GET END ADDR. OF HEAP ENTRY
		CAMG	A1,A0		; [326] IS RETURNED SPACE ABOVE THIS ENTRY?
		 PUSHJ	SP,GETERR	; [326] NO, SPACE IS BEING RETURNED TWICE
	GET2B:	AOBJN	A2,GET2A	; [326] LOOP UNTIL DONE WITH HEAP TABLE
		SKIPE	A2,(A2)		; [326] ANY MORE HEAL TABLES TO USE?
		 JRST	GET2A		; [326] YES, KEEP WORKING
		MOVE	A2,%SYS2(DB)	; [326] NO, RESTORE HEAP TABLE PTR.
	> ; [326] END IFN FTGETCHK
		HLRZ	A0,(A1)		; [326] A0 IS LENGTH OF RETURNED PIECE
		ADDI	A0,(A1)		; [326] NOW TOP ADDRESS + 1
	; [326]	MOVEI	A1,-1(A1)	; GET ADDRESS OF BOTTOM OF PIECE
 REP 24/96	;05C8
	;[251] IS NOT, THEN SOME PARTS OF EACH TABLE ENTRY OVERLAP AND THE TABLE IS BAD.
 WIT
	;[251] IS NOT, THEN SOME PART OF EACH TABLE ENTRY OVERLAP AND THE TABLE IS BAD.
 REP 32/96	;05C9
	GET001:	SKIPN	A4,(A2)		;[251] GET REFERENCE ENTRY'S LOW ADDRESS LIMIT
		JRST	GET003		;[251] NULL ENTRY, SKIP IT
		TLZ	A4,-1		;[251] CLEAR LENGTH OUT OF LEFT HALF
		SKIPN	A5,(A3)		;[251] GET NEXT HEAP COMPARISON ENTRY
 WIT
		SKIPN	A4,(A2)		;[326] [251] GET REF. ENTRY'S LOW ADDR. LIMIT
		JRST	GET003		;[251] NULL ENTRY, SKIP IT
		HLRZ	A5,(A4)		;[326] GET LENGTH OF HEAP AREA FROM MEMORY
		MOVSS	A4		;[326] GET LENGTH FROM HEAP TABLE
		SKIPN	A5		;[326] LENGTH=0?
		 PUSHJ	SP,GETERR	;[326] YES, BAD HEAP
		CAIE	A5,(A4)		;[326] NO, LENGTHS THE SAME?
		 PUSHJ	SP,GETERR	;[326] NO, HEAP PROBLEMS
		HLRZS	A4		;[326] YES, GET ADDR. BACK
		HRRZ	A5,(A4)		;[326] GET TABLE ADDR. W/O LENGTH
		CAIE	A5,(A2)		;[326] HEAP & TABLE PTRS. POINT TO EACH OTHER?
		 PUSHJ	SP,GETERR	;[326] NO, HEAP PROBLEMS
	GET001:	HRRZ	A4,(A2)		;[326] YES, GET REF. ENTRY ADDR. BACK
		SKIPN	A5,(A3)		;[326] [251] YES, GET NEXT HEAP COMPARE ENTRY
 REP 45/96	;05C10
		SUB	A5,A4		;[251] DO AREAS OVERLAP AT ALL?
		JUMPL	A5,GETERR	;[251] YES, HEAP TABLE IS BAD
 WIT
		SUB	A5,A4		;[316] [251] CALCULATE IF THEY OVERLAP
		SKIPGE	A5		;[316] [251] DO THEY OVERLAP?
		PUSHJ	SP,GETERR	;[316] YES, FATAL ERROR
 REP 1/97	;05C11
	GETOWN:	MOVE	A2,%SYS2(DB)	; GET POINTER TO PUBLIC HEAP-TABLE
		PUSHJ	SP,GETKNL	; DO THE JOB
		IFN	FTGETCHK,<
		; ***** OPTIONAL HEAP INTEGRITY CHECKER *****

 WIT

	GETOWN:	MOVE	A2,%SYS2(DB)	; GET POINTER TO PUBLIC HEAP-TABLE
		PUSHJ	SP,GETKNL	; DO THE JOB
	IFN	FTGETCHK,<
 REP 11/97	;05C12
		HRRZ	A2,%SYS2(DB)
		HLRE	A3,%SYS2(DB)	; - (LENGTH OF LIST -1)
 WIT
		HLRE	A3,A2		; [326] - (LENGTH OF LIST -1)
		MOVEI	A2,(A2)		; [326] CLEAR LENGTH OUT
 REP 21/97	;05C13
		JUMPE	A0,GETERR	; [263] ERROR IF ENTRY IS ZERO
		ADD	A2,A0		; MOVE TO NEXT CHUNK
 WIT
		SKIPN	A0		; [316] IS ENTRY ZERO?
		PUSHJ	SP,GETERR	; [316] [263] YES, FATAL ERROR
		ADD	A2,A0		; [316] NO, MOVE TO NEXT CHUNK
 REP 26/97	;05C14
		JRST	GETERR		; NO
 WIT
		PUSHJ	SP,GETERR	; [316] NO
 REP 36/97	;05C15
		JRST	GETERR		; [263] NO, ERROR
 WIT
		PUSHJ	SP,GETERR	; [316] [263] NO, ERROR
 REP 41/97	;05C16
		JRST	GETERR		; NOPE
		JRST	GETX3		; YES - OK

	GETX9:	>	; END OF FTGETCHK
 WIT
		PUSHJ	SP,GETERR	; [316] NOPE
		JRST	GETX3		; YES - OK
	GETX9:
	> ; END OF FTGETCHK
 REP 50/97	;05C17
	?ALGCEH CONSISTENCY ERROR IN HEAP HANDLER/]  ;[251]
 WIT
	?ALGCEH CONSISTENCY ERROR IN HEAP HANDLER
	/]  ; [316] [251]
 REP 6/107	;05C18
	INCHAR:
		TLNE	DB,INDDT	; IF DDT 
		  JRST	DDTIN%		;  LET HIM DO IT.
		PUSHJ	SP,INBYTE	; GET NEXT BYTE
		IOERR	6,(A13)		; END OF FILE - A13 = CHAN #
		JRST	CNC.AX

		;
		EDIT(145) ; Make EOF a terminator.
		;
	INCHR0:	TLNE	DB,INDDT	; [E145] If in DDT
		  JRST	DDTIN%		; [E145] .. then let him do it.
		PUSHJ	SP,INBYTE	; [E145] Get next byte
	EDIT (175); IF TRAPPING FOR EOF, USE TRAP
		SKIPA			; EOF, CHECK TO SEE IF WE ARE TRAPPING IT
		JRST	CNC.AX		; [E145]
		PUSH	SP,A13		;[175] SAVE THE CHANNEL NUMBER
		MOVEI	A13,^D38	;[175] CHECK TO SEE IF WE ARE TRAPPING EOF
		ADDI	A13,(DB)	;[175] RELOCATE THE TRAP NUMBER IN THE D.B.
		HRRZ	A13,%TRAPS(A13)	;[175] GET ADDRESS OF TRAP BLOCK, OR ZERO
		SKIPN	A13		;[175] SKIP IF A TRAP IS SET HERE
		 JRST	INCHR1		;[175] NONE SET, GIVE A LF
		POP	SP,A13		;[175] TRAP SET, RESTORE CHANNEL NUMBER
		IOERR	6,(A13)		;[175] AND GIVE THE ERROR
		JRST	CNC.AX		;[175] AND RETURN

	INCHR1:	POP	SP,A13		;[175] NO TRAP SET, RETURN LF LIKE EDIT 145
		MOVEI	A13,LF		;[175] AFTER POPPING THE STACK
		JRST	CNC.AX		;[175] RETURN WITH FREE LF
 WIT
	INCHAR:	TLNE	DB,INDDT	; IF DDT 
		 JRST	DDTIN%		;  LET HIM DO IT.
		PUSHJ	SP,INBYTE	; GET NEXT BYTE
		 IOERR	6,(A13)		; END OF FILE - A13 = CHAN #
		JRST	CNC.AX

	;	EDIT(145) ; Make EOF a terminator.

	INCHR0:	TLNE	DB,INDDT	; [323] [E145] IF IN ALGDDT
		 JRST	DDTIN%		; [323] [E145] THEN LET IT DO INPUT ITSELF
		PUSHJ	SP,INBYTE	; [323] [E145] ELSE READ NEXT BYTE
		 TRNA			; [323] EOF, SKIP AND CHECK STATUS
		JRST	CNC.AX		; [323] NORMAL RETURN
		HLRZ	A10,%CHAN(DB)	; [323] GET CHANNEL NUMBER
		ADDI	A10,%IOSTS(DB)	; [323] RELOCATE IT
		SKIPGE	A11,(A10)	; [323] HAVE WE ALREADY GIVEN AN EOF <LF>?
		 IOERR	6,(A13)		; [323] YES, GIVE TRAP/FATAL ERROR THIS TIME
		TLO	A11,(LFEOF)	; [323] NO, SAY THAT THIS IS FIRST EOF FOUND
		MOVEM	A11,(A10)	; [323] REMEMBER FOR NEXT TIME THROUGH
		MOVEI	A13,LF		; [323] LOAD A <LF>
		JRST	CNC.AX		; [323] RETURN WITH FREE <LF>
 INS 1/108	;05C19

 REP 33/117	;05C20
		JOV	[
		TLO	A2,INTOVL	; OVERFLOWED - SET FLAG
		MOVE	A0,[
		^D24359738368]		; AND LOAD 2^35 - 10^10
		JRST	PRIN7]
 WIT
		JOV	[TLO	A2,INTOVL	; [327] OVERFLOWED - SET FLAG
			MOVE	A0,[^D24359738368] ; [327] AND LOAD 2^35 - 10^10
			JRST	PRIN7]		; [327]
 REP 20/118	;05C21
		JOV	[
		MOVSI	A0,244400	; OVERFLOW - FORM 2.0^35
		JRST	PRIN18]

	PRIN15:	CAML	A0,[
		^D100000000]		; 9 OR MORE DIGITS?
 WIT
		JOV	[MOVSI	A0,244400	; [327] OVERFLOW - FORM 2.0^35
			JRST	PRIN18]		; [327]

	PRIN15:	CAML	A0,[^D100000000] ; [327] 9 OR MORE DIGITS?
 REP 3/119	;05C22
		FADRI	A0,000000	; ENSURE STANDARDIZED
		JFOV	[
		MOVEI	A0,0		; BAD NUMBER - ZERO IT
		JRST	PRIN22]
 WIT
		FADRI	A0,0		; [327] INSURE STANDARDIZED
		JFOV	[MOVEI	A0,0		; [327] BAD NUMBER - ZERO IT
			JRST	PRIN22]		; [327] AND CONTINUE
 REP 18/119	;05C23
		CAMGE	A0,[
		XWD	002663,437347]	; VERY SMALL NUMBER?
 WIT
		CAMGE	A0,[2663,,437347] ; [327] VERY SMALL NUMBER?
 REP 3/120	;05C24
		LDB	A7,[
		POINT	9,A0,8]		; EXTRACT EXPONENT
		TLZ	A0,377000	; AND CLEAR IT OUT
		ASH	A0,-170(A7)	; AND CONVERT TO FRACTIONAL FORM
		JOV	[
		MOVE	A0,[
		XWD	031463,146315]
		AOJA	A13,PRIN36]	; CORRECT IF OVERFLOWED
 WIT
		LDB	A7,[POINT 9,A0,8] ; [327] EXTRACT EXPONENT
		TLZ	A0,377000	; AND CLEAR IT OUT
		ASH	A0,-170(A7)	; [327] CONVERT TO FRACTIONAL FORM
		JOV	[MOVE	A0,[31463,,146315] ; [327]
			AOJA	A13,PRIN36]	; [327] CORRECT IF OVERFLOWED
 REP 24/122	;05C25
		JOV	[LRLOAD	A0,A01TMP(DB)	; [231] RECOVER A0 AND A1 AFTER OVERFLOW
			LRLOAD	A5,A56TMP(DB)	; [231] RECOVER OLD A5 AND A6
			MOVE	A13,A13TMP(DB)	; [231] RECOVER OLD A13
			SUB	A13,[1,,1]	; [231] CORRECT IT
			JRST	JBS231]		; [231] GO BACK TO BEFORE ERROR HAPPENS
 WIT
		JOV	[LRLOAD	A0,A01TMP(DB)	; [231] RESTORE A0, A1 AFTER OVERFLOW
			LRLOAD	A5,A56TMP(DB)	; [231] RESTORE A5, A6
			MOVE	A13,A13TMP(DB)	; [231] RESTORE A13
			SUB	A13,[1,,1]	; [231] MODIFY SO IT'LL WORK THIS TIME
			JRST	JBS231]		; [231] TRY AGAIN
 REP 49/132	;05C26
		TLOA	A1,INEOF	; [E131] FLAG (INEOF OR
		TLO	A1,OUTEOF	; [E131] OUTEOF) IF NO BYTES
 WIT
		 JRST	[TLO	A1,INEOF	; [323] SET INPUT EOF
			SETZM	%IOSTS(A2)	; [323] FIRST TIME WE FOUND EOF
			JRST	INOU17]		; [323]
		TLO	A1,OUTEOF	; [323] SET OUTPUT EOF
 INS 21/134	;05C27
		SETZM	%IOSTS(A1)	; [323] CLEAR EXTRA EOF FLAG
 REP 11/136	;05C28
		MOVEM	A4,.JBFF	; AND SET UP JOBFF
 WIT
		MOVEM	A4,.JBFF	; AND SET UP JBFF
 REP 32/136	;05C29
		MOVEM	A0,(A4)		; STORE DEVICE NAME
		SETOM	.JBFF		; FIX JOBFF
 WIT
		SETZM	%IOSTS(A1)	; [323] CLEAR EXTRA EOF FLAG
		MOVEM	A0,(A4)		; STORE DEVICE NAME
		SETOM	.JBFF		; FIX JBFF
 INS 29/137	;05C30
		SETZM	%IOSTS(A4)	; [323] AND EXTRA EOF FLAG
 INS 42/139	;05C31
		SETZM	%IOSTS(A10)	; [323] CLEAR EXTRA EOF FLAG
 INS 28/140	;05C32
		SETZM	%IOSTS(A4)	; [323] CLEAR EXTRA EOF FLAG
 INS 34/146	;05C33
		SETZM	%IOSTS(A1)	; [323] CLEAR EXTRA EOF FLAG
 INS 170/148	;05C34
		TLNE	A6,-1		; [330] REAL POINTERS HAVE ZERO LEFT HALVES
		 AOJA	A7,PRFPR1	; [330] THIS ISN'T A REAL POINTER, LOOP
 INS 6/150	;05C35
		MOVE	A0,.JBTPC	; [311] GET PC OF ERROR
		MOVEM	A0,PDLTMP(DB)	; [311] SAVE IN CASE OF PDL TRAP NOW
 DEL 11/150	;05C36
		PUSHJ	SP,BRKBYT	; [274] THIS PROGRAM IS FAILING - BREAKOUTPUT
		JFCL			; [274] IGNORE ERROR RETURN FROM BRKBYT
 DEL 2/154	;05C37

 REP 36/158	;05C38
	M4:	XWD	ERR2PT+ERRDEV+40+<M400A-M400>_6,M400
 WIT
	M4:	XWD	ERR2PT+ERRDEV+40+<M400A-M400>_6,M400 ; [316] IOERR
 REP 49/158	;05C39
		IFN	FTOVRL,<
		XWD	55,M415>
 WIT
	IFN FTOVRL,<55,,M415>		; [324]
	IFE FTOVRL,<0>			; [324]
		XWD	56,M416		; [324]

 REP 59/158	;05C40
	M6:
	M000:	ASCIZ /FATAL /
	M001:	ASCIZ /Run-time error at address /
 WIT
		XWD	70,M510		; [336]
	M6:
	M000:	ASCIZ /FATAL /
	M001:	ASCIZ /Run-time error at address /
 DEL 12/166	;05C41
 REP 8/167	;05C42
		IFN	FTOVRL,<
	M415:	ASCIZ	/Attempt to use overlay handler's />
	M500:	ASCIZ /Undefine operation (SQRT argument negative)/
 WIT
	IFN FTOVRL,<			; [324]
	M415:	ASCIZ	/Attempt to use overlay handler's/> ; [324] END IFN FTOVRL
	IFE FTOVRL,<0>			; [324] KEEP TABLE ORDER IF FTOVRL IS OFF
	M416:	ASCIZ	/Invalid file specification/ ; [324]

	M500:	ASCIZ /Undefined operation (SQRT argument negative)/ ; [325]
 INS 10/168	;05C43
	M510:	ASCIZ /Illegal INFO parameter value/ ; [336]
 REP 23/169	;05C44
	;[211]APRERR:	MOVEM	A1,%SYS17(DB)	; SAVE A1
		MOVE	A1,.JBTPC	; AND GET PC DUMP
		TLZN	A1,PCFPU	; FLOATING POINT UNDERFLOW?
		JRST	APR6		; NO
		TLZ	A1,PCOVL	; YES - CLEAR OVERFLOW FLAGS
		MOVEM	A1,.JBTPC
 WIT
		JFOVO	.+1		; [327] CLEAR BOTH OVERFLOW FLAGS
		MOVE	A1,.JBTPC	; AND GET PC DUMP
		TLZ	A1,(1B0!1B3!1B11!1B12) ;[311] TURN OFF MATH ERROR BITS
		EXCH	A1,.JBTPC	; [311] SAVE MODIFIED .JBTPC AND GET OLD ONE
		TLZN	A1,PCFPU	; FLOATING POINT UNDERFLOW?
		JRST	APR6		; NO
 REP 12/172	;05C45
		JRSTF	@.JBTPC		; AND RE-ENTER PROGRAM
	SUBTTL Debuggiing system - object code dump routine.
 WIT
		SKIPN	PDLTMP(DB)	; [311] APR TRAP WHILE HANDLING ANOTHER ERROR?
		JRSTF	@.JBTPC		; [311] NO, CONTINUE PROGRAM NORMALLY
		HRRZ	A1,PDLTMP(DB)	; [311] YES, GET SAVED 0,,.JBTPC BACK
		EXCH	A1,.JBTPC	; [311] RESTORE IT AND GET OUR RETURN PC
		HRRZM	A1,APRTMP(DB)	; [311] PUT IT IN A TEMP. LOCATION
		MOVE	A1,%SYS17(DB)	; [311] RESTORE A1
		JRSTF	@APRTMP(DB)	; [311] AND CONTINUE WHAT WE WERE DOING
	SUBTTL Debugging system - object code dump routine.
 REP 24/176	;05C46
	SILR:				;[172]
		JUMPG	DB,SILR1	;[172] SKIP KA CODE IF NOT A KA PROCESSOR
 WIT
	SILR:	JUMPL	DB,SILR1	; [313] [172] JUMP IF KI/KL
 SUM 53283