Google
 

Trailing-Edge - PDP-10 Archives - BB-4170G-SM - sources/postld.mac
There are 51 other files named postld.mac in the archive. Click here to see a list.
;<3A.MONITOR>POSTLD.MAC.10, 22-Jun-78 20:34:53, Edit by ENGEL
;FIX XPUNGE
;<3A.MONITOR>POSTLD.MAC.9, 22-Jun-78 16:22:23, EDIT BY MILLER
;ADD AN "XPUNGE"
;<1BOSACK>POSTLD.MAC.1001, 15-Jun-78 15:36:36, EDIT BY BOSACK
;<1BOSACK>POSTLD.MAC.1000,  1-Jun-78 21:06:27, EDIT BY BOSACK
;CHANGES FOR MORE PSECTS
;<3A.MONITOR>POSTLD.MAC.7,  7-Mar-78 18:54:08, EDIT BY BOSACK
;<3A.MONITOR>POSTLD.MAC.6,  7-Mar-78 18:34:40, EDIT BY BOSACK
;<3A.MONITOR>POSTLD.MAC.5,  7-Mar-78 18:33:50, EDIT BY BOSACK
;OUTPUT TYPE OF BUGXXX IN BUGXXX LISTING
;<3A.MONITOR>POSTLD.MAC.4, 23-Jan-78 20:56:36, EDIT BY BOSACK
;<3A.MONITOR>POSTLD.MAC.3, 23-Jan-78 20:36:30, EDIT BY BOSACK
;MOVE BUGSTRINGS/POINTERS TO OVERLAP SWP PAGE VARS
;<3.SM10-RELEASE-3>POSTLD.MAC.2,  6-Dec-77 02:31:46, Edit by MCLEAN
;CROSSLANDS FIX IS BAD
;<3-MONITOR>POSTLD.MAC.147,  9-Nov-77 09:57:11, EDIT BY KIRSCHEN
;MORE COPYRIGHT UPDATING...
;<3-MONITOR>POSTLD.MAC.146, 26-Oct-77 23:49:18, EDIT BY CROSSLAND
;MAKE ROUTINE TO DELETE SYSMBOLS FOR A MODULE UNDERSTAND THAT FULL
;WORD OF ZERO IS A DELETED SYMBOL, NOT A PROGRAM NAME.
;<3-MONITOR>POSTLD.MAC.145, 10-Oct-77 14:12:15, EDIT BY KIRSCHEN
;UPDATE COPYRIGHT FOR RELEASE 3
;<3-MONITOR>POSTLD.MAC.144, 14-Sep-77 01:26:25, EDIT BY BOSACK
;<3-MONITOR>POSTLD.MAC.143, 13-Sep-77 00:11:08, EDIT BY BOSACK
;<3-MONITOR>POSTLD.MAC.142, 12-Sep-77 23:31:52, EDIT BY BOSACK
;<3-MONITOR>POSTLD.MAC.141,  7-Sep-77 15:28:59, EDIT BY BOSACK
;<3-MONITOR>POSTLD.MAC.140, 25-Aug-77 22:24:49, EDIT BY BOSACK
;LEAVE SOME SPACE FOR SYMTAB TO GROW
;<3-MONITOR>POSTLD.MAC.139, 23-Aug-77 15:39:36, EDIT BY BOSACK
;<3-MONITOR>POSTLD.MAC.138, 23-Aug-77 15:34:46, EDIT BY BOSACK
;DEFINE MDDT, CLEAR .JBHRL SO DDT ISN'T CONUFSED
;<3BOSACK>POSTLD.MAC.145, 23-Aug-77 03:34:11, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.144, 23-Aug-77 01:24:52, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.143, 23-Aug-77 01:19:27, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.142, 23-Aug-77 00:13:41, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.141, 23-Aug-77 00:02:12, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.140, 22-Aug-77 23:18:28, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.139, 22-Aug-77 23:16:19, EDIT BY BOSACK
;ADD INITCOD LOGIC
;PURIFY SYMTAB BEFORE MOVING IT
;<3BOSACK>POSTLD.MAC.138, 18-Aug-77 23:40:36, EDIT BY BOSACK
;ALWAYS FLUST EDDT,MDDT,POSTLD LOCALS
;<3BOSACK>POSTLD.MAC.137, 12-Aug-77 23:03:53, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.136, 12-Aug-77 23:02:27, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.1, 12-Aug-77 22:38:09, EDIT BY BOSACK
;SHUFFLE ADDRESS SPACE TO HAVE CODE LOWEST
;<3-MONITOR>POSTLD.MAC.135, 12-Aug-77 21:09:26, EDIT BY BOSACK
;<3-MONITOR>POSTLD.MAC.134, 12-Aug-77 02:03:06, EDIT BY BOSACK
;MAKE POSTLD LOAD IN ITS OWN PSECT.
;PRINT HEADING FOR FINAL SEG SIZES
;<3BOSACK>POSTLD.MAC.143,  9-Aug-77 03:11:53, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.142,  9-Aug-77 03:10:19, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.141,  9-Aug-77 02:31:36, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.140,  9-Aug-77 02:04:40, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.139,  9-Aug-77 01:48:11, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.138,  9-Aug-77 01:45:49, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.137,  9-Aug-77 01:42:24, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.136,  5-Aug-77 02:26:43, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.135,  5-Aug-77 02:15:15, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.134,  5-Aug-77 01:49:15, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.133, 24-Jun-77 22:50:35, EDIT BY BOSACK
;<3BOSACK>POSTLD.MAC.132, 24-Jun-77 20:41:20, EDIT BY BOSACK
;TCO 1832 - PSECT CHANGES
;<3-MONITOR>POSTLD.MAC.131, 10-May-77 15:48:12, EDIT BY HURLEY
;<3-MONITOR>POSTLD.MAC.130, 10-May-77 14:05:05, EDIT BY HURLEY
;FIX UP TITLES FOR THE VARIOUS ASSEMBLIES
;<3-MONITOR>POSTLD.MAC.129,  9-May-77 11:07:15, EDIT BY HURLEY
;<3-MONITOR>POSTLD.MAC.128,  2-May-77 18:35:48, EDIT BY HURLEY
;<3-MONITOR>POSTLD.MAC.127,  2-May-77 18:32:15, EDIT BY HURLEY
;<3-MONITOR>POSTLD.MAC.126,  3-Feb-77 23:01:50, Edit by MCLEAN
;<3-MONITOR>POSTLD.MAC.125, 30-Dec-76 02:30:33, Edit by MCLEAN
;<3-MONITOR>POSTLD.MAC.124, 27-Dec-76 17:36:30, EDIT BY HURLEY
;<2-MONITOR>POSTLD.MAC.123, 18-Aug-76 11:41:49, Edit by HESS
;<2-MONITOR>POSTLD.MAC.122, 16-Aug-76 19:12:35, EDIT BY MURPHY
;<2-MONITOR>POSTLD.MAC.121,  9-Aug-76 12:09:37, EDIT BY MURPHY
;TCO #1485 - CLEAR .JBHSM
;<1B-MONITOR>POSTLD.MAC.120, 16-Jun-76 15:17:28, EDIT BY OSMAN
;TCO 1430 REMOVE REFERENCE TO VERSIO.MAC - MAKE WAY FOR STANDARD VERSION
;<1B-MONITOR>POSTLD.MAC.119, 10-JUN-76 11:02:47, EDIT BY JMCCARTHY
;TCO 1369 - CLOSE BUGSTRINGS.TXT FILE PROPERLY
;<1B-MONITOR>POSTLD.MAC.118, 24-MAY-76 14:34:48, EDIT BY MURPHY
;TCO #1313 - REMOVE LOCAL SYMS PER LOCSF
;<1MONITOR>POSTLD.MAC.117, 26-FEB-76 18:09:18, EDIT BY MURPHY
;<1MONITOR>POSTLD.MAC.116, 26-FEB-76 17:35:00, EDIT BY MURPHY
;<2MONITOR>POSTLD.MAC.115, 16-FEB-76 17:54:23, EDIT BY MURPHY
;TCO #1097 - INCREASE FREE MONITOR VAS
;<2MONITOR>POSTLD.MAC.113, 26-JAN-76 15:23:12, EDIT BY HURLEY
;MCO 28 - CLOSE THE BUGSTRINGS.TXT FILE
;<2MONITOR>POSTLD.MAC.112, 23-DEC-75 13:08:08, EDIT BY LEWINE


;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1976, 1977, 1978 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

	SEARCH PROLOG,MONSYM,MACSYM
	TITLE POSTLD
	ENTRY $POSTLD
	$POSTLD==:0
	SALL
	.PSECT NRCOD
	GGLOBS

;POST-LOADING ONE-SHOT INIT

EXTN <IEDDTF,ILOCSF,MONSNM,BGSTR,NRESBG,RESLOC,ZROCOR>
EXTN <INCDBG,MDDTX,BUGHLT,BUGCHK,BUGINF>
EXTN <JSLSTA,PSB1A,PSSPSA>
NPDL==100			;SIZE OF LOCAL PDL

;BIT DEFINITIONS IN SYMBOL TABLE ENTRIES

SYMDOB==1B0			;DELETE OUTPUT
SYMDIB==1B1			;DELETE INPUT
SYMLOC==1B2			;LOCAL
SYMGLO==1B3			;GLOBAL
;NO BITS - PROGRAM NAME
;SYMLOC+SYMGLO - BLOCK NAME

DEFINE TSTR ($MSG)<
	HRROI A,[ASCIZ \$MSG\]
	PSOUT>

DEFINE JSERR <
	JSP 2,JSEX0>

;GET FINAL VALUE OF LOAD PC'S
DEFINE FIXPC (PC,EPC)<
	.PSECT PC
EPC::	BLOCK 0
	.ENDPS PC
>

;FIXPC(RSCOD,RESEND)	;DEFINED LATER
FIXPC(INCOD,INCODZ)
FIXPC(RSVAR,RESVLZ)
FIXPC(PPVAR,PPRVLZ)
FIXPC(NRVAR,NRESLZ)
FIXPC(NRCOD,NRCODZ)
FIXPC(NPVAR,NRPLOZ)
FIXPC(BGSTR,BGSTRZ)
FIXPC(BGPTR,BGPTRZ)

NBUGP==BGPTRZ-BGPTR##
	.PSECT NRCOD
MDDT=:MDDTX

SWPF::				;DEFINE SWAPPABLE PATCH SPACE

	RESCD
INIMPN==3			;MAX SIZE OF INITCOD MAP

INIMAP:: XWD -INIMPN,.+1	;POINTER TO REGION TABLE
	BLOCK INIMPN		;TABLE - FILLED IN LATER IN POSTLD
NINIPG::BLOCK 1		;NUMBER OF INIT PAGES BELOW SWPCP0

EDDT=:DDTX			;DEFINE DDT START ADDRESS
	BLOCK 10		;LEAVE SOME SPACE AFTER LAST PROG
RESEND::			;DEFINES END OF CODE, SYMTAB MOVED TO HERE

;LOAD POSTLD WHERE IT WILL GET OVERLAYED BY RUNTIME STORAGE

	.ENDPS RSCOD
	.PSECT POSTCD

;LOCAL SYMBOL FLAG - RETAIN LOCALS IF NON-0

LOCSF:	ILOCSF
;START HERE AT COMPLETION OF LOADING

SYSG0:	MOVE P,[IOWD NPDL,PDL]
	GTAD			;GET TIME AND DATE OF NOW
	MOVEM A,SYSTAD		;REMEMBER IT IN SWPMON
	MOVE A,[RADIX50 0,SWPF]	;GET RADIX50 FOR SWAPPABLE PATCH SPACE
	CALL LOOKU5		;FIND IT IN SYMTAB
	 CALL LOOKXX		;FAILED
	HRRZ B,1(A)		;GET VALUE OF SWPF
	HRRM B,.JBHRL		;MAKE IT BE DEFINED END OF HISEG
	HRRZ 2,.JBHRL
	SUBI 2,1
	LSH 2,-PGSFT
	MOVEM 2,SWCEND
	MOVEM 2,SWCEN0
	HRROI 1,[ASCIZ /
ADDRESS SPACE AT LINK TIME:
/]
	PSOUT

;DEFINE LOCAL MACRO FOR SPACE PRINTOUTS
DEFINE PRSEG($START,$END,$NEXT,$STR1,$STR2)<
	HRROI A,[ASCIZ \
$STR1 START: \]
	PSOUT
	MOVEI B,$START
	CALL OCTOUT
	HRROI A,[ASCIZ /, END: /]
	PSOUT
	MOVEI B,$END
	CALL OCTOUT
	HRROI A,[ASCIZ \
  FREE SPACE TO $STR2: \]
	PSOUT
	MOVEI B,$NEXT
	SUBI B,$END
	CALL PRSVAL
>

;PRINT FREE SPACE IN WORDS OCTAL AND DECIMAL

	PRSEG (RSCDBG,RESEND,INCDBG,<RES MON>,<INIT CODE>)
	PRSEG (INCDBG,INCODZ,RESLOC,<INIT CODE>,<RES VARS>)
	PRSEG (RESLOC,RESVLZ,PPRMA,<RES VARS>,<PER PROC VARS>)
	PRSEG (PPRMA,PPRVLZ,NRESBG,<PER PROC VARS>,<SWP VARS>)
	PRSEG (NRESBG,NRESLZ,SWPMA,<SWP VARS>,<SWP MON>)
	PRSEG (SWPMA,NRCODZ,NRPLBG,<SWP MON>,<SWP PAGE VARS>)
	PRSEG (BGSTR,BGSTRZ,BGPTR,<BUGSTRINGS>,<BUGPOINTERS>)
	PRSEG (BGPTR,BGPTRZ,JSBPGA,<BUGPOINTERS>,<JSB>)
	PRSEG (NRPLBG,NRPLOZ,JSBPGA,<SWP PAGE VARS>,<JSB>)
	PRSEG (JSBPGA,JSLSTA,PSSPSA,<JSB>,<PSB>)
	PRSEG (PSSPSA,PSB1A+777,777777,<PSB>,<SEC 0 END>)
	JRST PLD1
;SUBROUTINE TO PRINT SPACE AS OCTAL AND DECIMAL

PRSNUM:	PUSH P,B		;SAVE SECOND ARG
	CALL LOOKU5		;LOOK "TO"
	 CALL LOOKXX		;FAILED
	MOVE A,1(A)		;GET VALUE OF "TO"
	EXCH A,0(P)		;SAVE IT, GET "FROM"
	CALL LOOKU5		;LOOKUP "FROM"
	 CALL LOOKXX		;FAILED
	POP P,B			;RECOVER VALUE OF "TO"
	SUB B,1(A)		;COMPUTE "TO" - "FROM"
PRSVAL:	MOVEI 1,101		;ENTRY WITH VAL IN B
	MOVEI 3,^D8
	NOUT			;PRINT QUANTITY IN OCTAL
	 JSERR
	HRROI 1,[ASCIZ /, =^D/]
	PSOUT
	MOVEI 1,101
	MOVEI 3,^D10
	NOUT			;PRINT QUANTITY IN DECIMAL
	 JSERR
	RET
;FLUSH CERTAIN SYMBOLS WHICH CAN BE RECOGNIZED AS CONSTRUCTED
;BY MACROS, ETC.

PLD1:	SKIPL 7,.JBSYM		;GET SYMTAB PTR
SR3:	AOBJP 7,SR2		;JUMP IF DONE SCANNING TABLE
	MOVE 1,0(7)		;GET SYMBOL
	CALL R50TO6		;CONVERT RADIX 50 TO SIXBIT
	LDB 2,[POINT 6,1,5]	;LOOK AT FIRST CHAR
	CAIE 2,'%'		;SPECIAL?
	CAIN 2,'$'
SRDEL:	JRST [	SETZM 0(7)	;YES, DELETE IT
		AOBJN 7,SR3]	;ALWAYS JUMP
	LDB 2,[POINT 12,1,11]
	CAIN 2,'..'
	JRST SRDEL
	SETZ 2,
	LSHC 1,-^D6		;GET LAST CHAR
	JUMPN 2,.+2		;JUMP IF GOT IT
	JUMPN 1,.-2		;KEEP SKIPPING BLANKS
	CAIE 2,'%'		;SPECIAL?
	CAIN 2,'$'
	SETZM 0(7)		;YES, DELETE IT
	AOBJN 7,SR3		;ALWAYS JUMP
;REMOVE REDUNDANT SYMBOLS FROM TABLE

SR2:	SKIPL 7,.JBSYM
SS2:	AOBJP 7,SS8		;JUMP IF DONE
	MOVE 1,0(7)		;GET SYMBOL
	TLCE 1,14B23		;PROGRAM NAME, OR
	TLCN 1,14B23		;BLOCK NAME?
	AOBJN 7,SS2		;YES (ALWAYS JUMP)
	SKIPN LOCSF		;FLUSH LOCAL SYMBOLS?
	TXNN T1,SYMLOC		;YES, THIS A LOCAL?
	TXNE T1,SYMDIB		;THIS A NO-INPUT SYMBOL?
	JRST SS6		;YES, FLUSH IT
	MOVE 2,1(7)		;GET VALUE
	CAIGE 2,20		;VALUE 0-17?
	JUMPGE 2,[TLNN 1,(04B5)	;GLOBAL?
		AOBJN 7,SS2	;NO, LEAVE AS IS (ALWAYS JUMP)
		JRST SS22]	;YES, HANDLE NORMALLY
;		TLO 1,(40B5)	;GLOBAL AND 0-17, MAKE NO OUTPUT
;		MOVEM 1,0(7)
;		AOBJN 7,SS2]	;(ALWAYS JUMP)
	CAIGE 2,1000		;IF VALUE 20-XXX
	JUMPGE 2,[TLO 1,40B23	;MAKE SYMBOL NO-OUTPUT
		MOVEM 1,0(7)
		JRST .+1]
SS22:	AOBJN 7,SS2		;NOP THIS TO INCLUDE FOLLOWING CODE
;***************************************************
	MOVE 3,1
	TLZ 1,14B23		;FLUSH LOCAL-GLOBAL BITS
	MOVE 6,7		;SETUP INNER LOOP TO SCAN FOR
	AOBJP 6,.+1		;OTHER OCCURRANCES
SS1:	AOBJP 6,SS61		;JUMP IF DONE
	CAMN 2,1(6)		;VALUE THE SAME?
	SKIPN 4,0(6)		;SYMBOL NOT PREVIOUSLY DELETED?
	AOBJN 6,SS1		;NO (ALWAYS JUMP)
	TLCE 4,14B23		;PROGRAM NAME, OR
	TLCN 4,14B23		;BLOCK NAME?
	AOBJN 6,SS1		;YES (ALWAYS JUMP)
	XOR 4,3
	TDNE 4,[XWD 037777,-1]	;SYMBOL EQUAL (EXCLUDING BITS)?
	AOBJN 6,SS1		;NO (ALWAYS JUMP)
	PUSH P,1
	PUSH P,2
	MOVEI D,CPBOUT
	MOVE A,0(6)		;GET SYMBOL
	TLZ A,(74B5)		;FLUSH BITS
	CALL R50T1		;TYPE IT
	MOVEI A," "
	PBOUT
	POP P,2
	POP P,1
	SETZM 0(6)		;YES, DELETE SYMBOL
	TLON 1,04B23		;AND MAKE ORIGINAL GLOBAL
	MOVEM 1,0(7)
	AOBJN 6,SS1		;(ALWAYS JUMP)

CPBOUT:	PBOUT
	RET
SS6:	SETZM 0(7)		;DELETE NO-INPUT SYMBOL
SS61:	AOBJN 7,SS2

SS8:	HRROI 1,[ASCIZ /
REMOVING SYMBOLS FOR:
/]
	PSOUT
	MOVSI 16,-NPNMS		;SETUP TO REMOVE CERTAIN PRG SYMBOLS
SR1:	MOVEI 1,0(16)
	SKIPL PNAMES+1(16)	;THIS AN ALWAYS REMOVE?
	CALL CSS		;YES
	AOBJN 16,.+1
	AOBJN 16,SR1
	MOVE 7,.JBSYM		;SCAN TABLE AND COMPACT
	MOVEI 6,0(7)		;WILL BE NEW TABLE POINTER
SS5:	SKIPN 1,0(7)		;DELETED?
	JRST SS4		;YES
	MOVEM 1,0(6)
	MOVE 1,1(7)
	MOVEM 1,1(6)
	ADD 6,[XWD -2,2]	;MOVE TO NEW POSITION
SS4:	AOBJN 7,.+1
	AOBJN 7,SS5
	HLLM 6,.JBSYM		;STORE NEW COUNT
	CALL FIXLEN		;FIXUP LENGTH OF PROGRAM BLOCKS
;MOVE SYMBOL TABLE FROM END OF HIGHSEG TO END OF LOWSEG

	MOVEI 1,RESVLZ+60	;SETUP NEW LOC OF SYMTAB
	HLRE 2,.JBUSY		;GET LENGTH OF UNDEF SYMTAB
	JUMPGE 2,PLD2		;JUMP IF NO UNDEF TABLE
	HRLZ 3,.JBUSY		;SETUP BLT PTR - SOURCE
	HRRM 1,.JBUSY		;STORE NEW LOC OF USY
	HRR 3,1			;BLT PTR - DEST
	SUB 1,2			;CALC FINAL ADR (ORG-(-LENGTH))
	BLT 3,-1(1)		;MOVE UNDEF SYMTAB TO RES AREA
PLD2:	HLRE 2,.JBSYM		;GET LENGTH OF SYMTAB
	HRLZ 3,.JBSYM		;SET BLT PTR - SOURCE
	HRRM 1,.JBSYM		;STORE NEW LOC OF SYMTAB
	HRR 3,1			;BLT PTR - DEST
	SUB 1,2			;CALC FINAL ADR (ORG-(-LENGTH))
	BLT 3,-1(1)		;MOVE SYMTAB TO RES AREA
	HRRZM 1,.JBFF		;SET END OF LOW CODE
	HRLM 1,.JBSA

;SET ENTRY VECTOR AND START ADDRESS

	MOVE 2,[JRST EVGO]	;MAIN START LOCATION
	HRRM 2,.JBSA
	SETOM DDTPRS		;NOTE DDT PRESENT
	MOVEI 1,IEDDTF		;INIT EDDTF
	MOVEM 1,EDDTF
	MOVEI 1,.FHSLF
	SEVEC
	; ..
;SORT THE BUG TABLE BY BUG ADDRESS, AFTER WHICH TABLE WILL BE COMPACT

	MOVSI 7,-NBUGP
BUGSR4:	MOVSI 5,-NBUGP(7)	;SCAN FROM HERE TO END
	HRRI 5,0(7)
	HRLOI 3,377777		;INITIAL MINIMUM
BUGSR1:	HLRZ 1,BGPTR(5)	;BUG ADDRESS
	JUMPE 1,BUGSR2		;IGNORE ZEROS
BUGSR5:	MOVE 2,1(1)		;GET NEXT WORD FROM BLOCK
	TLNN 2,770000		;FOUND THE SIXBIT NAME?
	AOJA 1,BUGSR5		;NO, LOOP BACK UNTIL FOUND
	TXC 2,1B0		;SO COMPARE WORKS ON SIXBIT NAME
	CAML 2,3		;MIN SO FAR?
	JRST BUGSR2		;NO
	MOVE 3,2		;YES, REMEMBER THIS VALUE
	MOVEI 4,0(5)		;AND LOCATION
BUGSR2:	AOBJN 5,BUGSR1
	CAMN 3,[377777,,777777]	;FOUND A MIN?
	JRST BUGSR3		;NO, NOTHING BUT ZEROS LEFT
	MOVE 1,BGPTR(4)	;INTERCHANGE MIN WITH TOP OF TABLE
	EXCH 1,BGPTR(7)
	MOVEM 1,BGPTR(4)
	AOBJN 7,BUGSR4		;(ALWAYS JUMP)
;DUMP BUG STRINGS TO FILE, SETUP BUGTABLE IN SWPMON

BUGSR3:	HRRZM 7,NBUGTP		;SAVE COUNT OF POINTER ENTRIES
	MOVNI 1,0(7)		;CONSTRUCT ABOJN PTR
	HRLM 1,BUGTP
	HRRZ 1,.JBHRL		;FOR BUG TABLE AS MOVED TO AREA
	ADDI 1,100		;AFTER SWAPMON, ALLOWING 100 WDS FOR
	HRRM 1,BUGTP		;PATCH SPACE
	MOVX T1,GJ%FOU+GJ%SHT
	HRROI 2,[ASCIZ /BUGSTRINGS.TXT/]
	GTJFN
	 JSERR
	MOVE 2,[7B5+1B20]
	OPENF
	 JSERR
	SETZ 3,
	HRROI 2,TSVN		;SYSTEM VERSION TEXT
	SOUT
	HRROI 2,[ASCIZ /
BUGHLT AND BUGCHK NAMES AND DESCRIPTIONS

/]
	SOUT

;MOVE AND COMPACT STRINGS TO AREA IMMEDIATELY AFTER POINTERS

	HRRZ 5,BUGTP		;GET START OF TABLE
	ADD 5,NBUGTP		;COMPUTE START OF STRINGS AREA
	HLLZ 7,BUGTP		;SETUP NEG COUNT
	HRRZ 4,BUGTP		;SETUP POINTER TO DEST POINTER AREA
BUGD1:	MOVE 6,BGPTR(7)	;TABLE ENTRY
	MOVEM 6,0(4)		;MOVE IT TO NEW PLACE
	HRRM 5,0(4)		;SET NEW ADDRESS OF STRING
	ADDI 4,1		;BUMP PTR ADDRESS
	HLRZ 2,6		;ADDRESS
BUGD2:	MOVE 3,1(2)		;GET NEXT WORD FROM BLOCK
	TLNN 3,770000		;FOUND THE SIXBIT NAME YET?
	AOJA 2,BUGD2		;NO, LOOP UNTIL IT IS FOUND
BUGD4:	SETZ 2,			;NOW TYPE OUT NAME
	LSHC 2,6		;GET NEXT CHARACTER
	ADDI 2," "		;MAKE IT ASCII
	BOUT			;OUTPUT IT
	JUMPN 3,BUGD4		;LOOP UNTIL NAME IS FINISHED
	HLRZ 3,6		;GET ADDRESS
	HRRZ 3,(3)		;GET BUGXXX ADDRESS
	HRROI 2,[ASCIZ /	[UNK] /]
	CAIN 3,BUGHLT		;BUGHLT?
	HRROI 2,[ASCIZ /	[HLT] /]
	CAIN 3,BUGCHK		;BUGCHK
	HRROI 2,[ASCIZ /	[CHK] /]
	CAIN 3,BUGINF		;BUGINF?
	HRROI 2,[ASCIZ /	[INF] /]
	MOVEI 3,0
	SOUT			;OUTPUT DESCRIPTION
;	MOVEI 2,.CHTAB		;END WITH A TAB
;	BOUT
	HRROI 2,0(6)
	SETZ 3,
	SOUT			;PRINT THE STRING
	HRROI 2,[ASCIZ /
/]
	SOUT
BUGD3:	MOVE 2,0(6)		;MOVE STRING TO COMPACTING AREA
	MOVEM 2,0(5)
	ADDI 5,1
	TRNE 2,177B34		;UNTIL (LAST) CHAR OF 0 ENCOUNTERED
	AOJA 6,BUGD3
	AOBJN 7,BUGD1
	CLOSF			;CLOSE BUGSTRINGS.TXT
	JFCL
	HRRM 5,.JBHRL		;UPDATE NEW END OF SWPMON
	; ..

;UPDATE HIGHSEG END

	HRRZ 1,.JBHRL		;UPDATE HISEG END
	SUBI 1,1		;COMPUTE LAST PAGE USED
	LSH 1,-PGSFT
	MOVEM 1,SWCEND
	; ..
;REMOVE PAGES AFTER SWPMON WHERE SYMTAB WAS

	SETO T1,
	MOVE T2,SWCEND
	ADD T2,[.FHSLF,,1]	;START WITH PAGE AFTER SWCEND
	MOVEI T3,777		;TO END OF VAS
	SUBI T3,0(T2)		;COMPUTE NUMBER PAGES
	HRLI T3,(1B0)
	PMAP
;SET LOWSEG BOUNDARIES

	MOVEI 1,RESVLZ		;END OF RESIDENT STORAGE AREA
	MOVEM 1,ZROEND		;SET AS END OF AREA ZEROED ON STARTUP
	MOVEI 1,RESEND		;INITIALIZE END OF MONITOR CORE
	ADDI 1,PGSIZ-1		; ...
	LSH 1,-PGSFT
	MOVEM 1,MONCOR		; STORE
	MOVE 3,.JBSYM		;MOVE POINTER TO EXEC DDT LOCATION
	MOVEM 3,36
	HRRZ 3,.JBFF		;END OF SYMTAB
	ADDI 3,PGSIZ-1		;ADJUST TO NEXT PAGE BOUNDARY
	LSH 3,-PGSFT		;NUMBER OF FIRST PAGE AFTER SYMTAB
	MOVEM 3,SWPCP0		;SETUP FIRST SWAP PAGE

;BUILD MAP OF CODE TO UNLOCK AFTER SWPMON LOAD

	MOVE Q1,INIMAP		;GET POINTER TO TABLE
	MOVEI T1,INCDBG		;GET START OF INITCD
	ADDI T1,PGSIZ-1		;ROUND UP TO NEXT PAGE
	ANDI T1,777000		;MASK TO PAGE
	HRLZM T1,(Q1)		;STORE AS START OF THIS REGION
	MOVEI T2,INCODZ		;GET END OF INIT CODE
	ANDI T2,777000		;MASK TO PAGE BOUNDRY
	HRRM T2,(Q1)		;FINISH POINTER
	SUB T2,T1		;COMPUTE NUMBER OF PAGES
	LSH T2,-PGSFT		; ...
	ADDI T2,1		; ...
	MOVE Q2,T2		;ACCUMULATE IN Q2
	AOBJN Q1,.+1		;INCREMENT
	HRRZ T1,.JBSYM		;GET START OF SYMTAB
	ADDI T1,PGSIZ-1		;ROUND TO NEXT PAGE
	ANDI T1,777000		; ...
	HRLZM T1,(Q1)		;STORE START OF THIS REGION
	MOVE T2,SWPCP0		;GET FIRST FREE PAGE
	SUBI T2,1		;GET LAST PAGE IN SYMTAB
	LSH T2,PGSFT		;AS AN ADDRESS
	HRRM T2,(Q1)		;STORE IN TABLE
	SUB T2,T1		;GET SIZE OF REGION
	LSH T2,-PGSFT		;AS A PAGE
	ADDI T2,1		; ...
	ADD Q2,T2		;ACCUMULATE
	MOVEM Q2,NINIPG		; SAVE FOR PGRINI

;PRINT FINAL SEGMENT SIZES
	HRROI A,[ASCIZ /
SEGMENTS AFFECTED BY POSTLD:
/]
	PSOUT


DEFINE PRSEG($START,$END,$NEXT,$STR1,$STR2)<
	HRROI A,[ASCIZ \
$STR1 START: \]
	PSOUT
	HRRZ B,$START
	CALL OCTOUT
	HRROI A,[ASCIZ /, END: /]
	PSOUT
	HRRZ B,$END
	CALL OCTOUT
	HRROI A,[ASCIZ \
  FREE SPACE TO $STR2: \]
	PSOUT
	HRRZ B,$NEXT
	HRRZ A,$END
	SUB B,A
	CALL PRSVAL
>

	PRSEG ([0],.JBFF,[PPRMA],<RESIDENT SEGMENT>,<PER PROC VARS>)
	PRSEG ([NRESBG],.JBHRL,[NRPLBG],<SWAPPABLE SEGMENT>,<SWP PAGE VARS>)
	HRROI 1,[ASCIZ /
/]
	PSOUT
	SETZM .JBHRL		;SO DDT DOESN'T GET CONFUSED

	; ..
;CREATE THE EXE FILE CONTAINING THE MONITOR

	MOVX A,GJ%FOU+GJ%SHT	;GET NEXT VERSION OF MONITOR FILE
	HRROI B,MONSNM		;GET NAME TO SAVE AS
	GTJFN
	 JSERR
	PUSH P,A
	TSTR <SAVING MONITOR AS >
	MOVEI A,101
	HRRZ B,0(P)
	SETZ C,
	JFNS
	POP P,A
	HRLI A,.FHSLF		;CONSTRUCT  FORKH,,JFN  FOR SSAVE
	MOVEI B,1(P)		;BUILD SSAVE LIST ON STACK

DEFINE SSEG($START,$END)<
	..NSG==..NSG+1
	HRRZ C,$END
	SUB C,$START
	ADDI C,777
	TLZ C,-1
	LSH C,-PGSFT
	MOVN C,C
	HRRZ D,$START
	LSH D,-PGSFT
	TRO D,1B18!1B20!1B22
	HRL D,C
	PUSH P,D
>
	..NSG==0

	SSEG([EXP 0],[EXP ZROCOR-1])
	SSEG([EXP RESVLZ&777000],.JBFF)
	SSEG([EXP SWPMA&777000],.JBHRL)

	PUSH P,[0]		;TERMINATE LIST WITH 0
	SETZ C,
	SSAVE
	SUB P,[XWD ..NSG+1,..NSG+1] ;FLUSH ARG LIST FROM STACK
	TSTR <
>				;NOTE SUCCESSFUL COMPLETION
;ALL USEFUL STUFF HAS BEEN WRITTEN, FLUSH THIS ADR SPACE

	SETO T1,
	MOVE T2,[.FHSLF,,1]	;FLUSH PAGES 1-777
	MOVE T3,[1B0+777]
	MOVE 16,[CLRPRG,,5]	;THIS CODE WILL VANISH IN THE CLEARING,
	BLT 16,16		;SO PUT THE CLEAR LOOP IN THE AC'S
	JRST 5

CLRPRG:	PHASE 5
	PMAP
	HALTF
	JRST .-1
	DEPHASE
;PROGRAM AND BLOCK NAMES TO FLUSH LOCAL SYMS

	DEFINE PNX (A)<
	RADIX50 0,A
	XWD 0,[ASCIZ /A/]>

PNAMES:	PNX <EDDT>		;FLUSH ALL SYMS OF EDDT
	PNX <MDDT>
	PNX <POSTLD>
NPNMS==.-PNAMES
;REMOVE LOCAL SYMBOLS FROM BLOCK OR PROGRAM
;INDEX TO PNAMES TABLE GIVEN IN 1
;CALLED WITH CALL CSS

CSS:	MOVEI 4,0(1)
	MOVE 5,PNAMES(1)	;GET RADIX50 OF NAME
	HRRO 1,PNAMES+1(1)	;GET ASCIZ OF NAME
	PSOUT			;SO WE KNOW WHAT WAS CRUNCHED
	MOVE 7,.JBSYM		;SCAN WHOLE TABLE
	MOVE 6,7		;REMEMBER START OF CURRENT PRG
CSS1:	SKIPN 1,0(7)
;	JRST CSS3		;IF ZERO A DELETED SYMBOL
	JFCL
	TLCE 1,(14B5)		;PRG OR
	TLCN 1,(14B5)		;BLOCK NAME?
	JRST CSS2		;YES
CSS3:	AOBJN 7,.+1
	AOBJN 7,CSS1		;KEEP SCANNING TABLE
	HRROI 1,[ASCIZ / - NOT FOUND
/]
	PSOUT
	RET

CSS2:	TLZ 1,(74B5)		;CLEAR TYPE BITS
	CAMN 1,5		;DESIRED NAME?
	JRST CSS4		;YES
	MOVE 6,7		;NO, REMEMBER LOC OF END OF BLOCK
	ADD 6,[XWD 2,2]
	JRST CSS3
;FOUND DESIRED BLOCK, NOW REMOVE LOCAL SYMBOLS

CSS4:	MOVE 5,6
CSS6:	CAMN 5,7		;SCANNED WHOLE BLOCK?
	JRST CSS8		;YES
	MOVE 1,0(5)		;GET NEXT SYMBOL
	SKIPGE PNAMES+1(16)	;FLUSHING ALL SYMS THIS PGM, OR
	TLNE 1,(10B5)		;LOCAL?
	SOJA 10,[SOJG 10,CSS5	;ELIMINATED EXCESS SYMBOLS YET?
		SKIPL PNAMES+1(16) ;YES, REMOVING ALL OF PGR BLOCK?
		JRST CSS5	;YES, KEEP REMOVING
		ADD 5,[XWD 2,2]	;YES
		JRST CSS8]	;FINISH UP
	MOVEM 1,0(6)		;NOT LOCAL, MOVE IT
	MOVE 1,1(5)
	MOVEM 1,1(6)		;MOVE VALUE
	ADD 6,[XWD 2,2]		;UPDATE 'TO' POINTER
CSS5:	ADD 5,[XWD 2,2]		;UPDATE 'FROM' POINTER
	JRST CSS6

CSS8:	MOVSI 1,0(5)		;MOVE REST OF TABLE WITH BLT
	HRRI 1,0(6)
	HLRE 2,5		;COMPUTE NEW END OF TABLE
	MOVEI 3,0(6)		;AS AMOUNT LEFT TO MOVE PLUS
	SUB 3,2			;CURRENT 'TO' LOCATION
	BLT 1,-1(3)		;MOVE REST OF TABLE
	MOVEM 3,.JBFF		;UPDATE LOWER CORE
	HRLM 3,.JBSA
	HRRZ 2,.JBSYM		;CALC NEW LENGTH AS
	SUB 2,3			;BEG-END
	HRLM 2,.JBSYM
CSSRET:	MOVEI 1,.CHLFD
	PBOUT
	RET
;LOCAL SUBROUTINES

;RADIX-50 TO SIXBIT CONVERSION
; 1/ RADIX-50 SYMBOL
;	CALL R50TO6
; RETURN +1,
; 1/ SYMBOL IN SIXBIT

R50TO6:	LDB A,[POINT 32,A,35]	;GET SYMBOL ONLY
	PUSH P,[0]		;INIT PLACE TO BUILD SIXBIT
	MOVSI C,(<POINT 6,0>)	;BUILT BYTE PTR TO IT
	HRRI C,0(P)
	MOVEI D,R50T3		;ROUTINE TO CALL FOR EACH CHAR
	CALL R50T1		;DO CONVERSION
	POP P,A			;RECOVER SIXBIT
	RET

;LOCAL ROUTINE SPECIFIED BY ABOVE TO 'OUTPUT' CHARS

R50T3:	SUBI A,40		;CONVERT TO SIXBIT FROM ASCII
	IDPB A,C
	RET

;RADIX-50 SYMBOL 'PRINTER' - DOES RECURSIVE RADIX OUTPUT
;ASSUMES:
; D/ ADDRESS OF ROUTINE TO CALL TO 'OUTPUT' EACH CHAR

R50T1:	IDIVI A,50		;SEPARATE OUT LOW-ORDER CHARACTER
	HRLM B,0(P)		;SAVE IT ON STACK
	JUMPE A,R50T2		;DONE IF NO MORE CHARACTERS
	CALL R50T1		;RECURSE FOR REMAINING CHARS
R50T2:	HLRZ A,0(P)		;RECOVER CHARACTER
	JUMPE A,[RET]		;FLUSH NULLS
	ADDI A,60-1		;CONVERT TO ASCII - START WITH NUMBERS
	CAILE A,71		;DIGIT?
	ADDI A,101-72		;NO, TRY LETTERS NEXT
	CAILE A,132		;LETTER?
	SUBI A,134-44		;NO, MUST BE $, %, OR .
	CAIN A,43		;DOT?
	MOVEI A,56		;YES, OTHERWISE $ AND % CODES OK
	CALLRET 0(D)		;OUTPUT THIS CHAR AND UNRECURSE
;ROUTINE TO FIXUP LENGTH OF PROGRAM BLOCKS--LH OF 'VALUE' WORD OF 
;PROGRAM NAME

FIXLEN:	HRRZ 7,.JBSYM		;COMPUTE TOP OF SYMTAB
	HLRE 1,.JBSYM
	SUB 7,1
	SUBI 7,2		;POINT TO FIRST PRG NAME
	HRRZ 6,.JBSYM		;SETUP BOTTOM OF SYMTAB FOR COMPARES
	MOVE 5,7		;GET START OF THIS BLOCK
	MOVSI 1,(SYMLOC+SYMGLO)	;BITS--BOTH OFF FOR PRG BLOCK
FIXLE1:	SUBI 5,2		;GET TO NEXT SYMBOL
	CAML 5,6		;END OF TABLE?
	TDNN 1,0(5)		;OR PROG NAME?
	JRST FIXLE2		;YES
	JRST FIXLE1		;NO, KEEP LOOKING

FIXLE2:	MOVE 2,7		;COMPUTE  NEG LENGTH = THIS-LAST
	SUBM 5,2
	HRLM 2,1(7)		;PUT IN LENGTH FIELD OF LAST BLOCK
	MOVEM 5,7		;START NEXT BLOCK
	CAML 7,6		;END OF TABLE?
	JRST FIXLE1		;NO, DO NEXT BLOCK
	RET			;YES, DONE
;LOOKUP ROUTINE FOR LOADER SYMBOL TABLE
; 1/ RADIX50 + SYMLOC=0 GLOBAL ONLY, OR SYMLOC=1 LOCAL OR GLOBAL OK.
;	CALL LOOKU5
; RETURNS +1 - SYMBOL NOT FOUND
;  +2 - SYMBOL FOUND, A/ ADR OF SYMTAB ENTRY (I.E. 1(A) IS VALUE)

LOOKU5:	SKIPL D,.JBSYM		;GET SYMTAB PTR
LOOK51:	AOBJP D,R		;SEARCH FAILED IF PTR GOES POSITIVE
	MOVE B,A
	XOR B,0(D)		;COMPARE SYMBOL WITH TABLE ENTRY
	TDNE B,[1B3-1]		;SYMBOL BITS SAME?
	AOBJN D,LOOK51		;NO, (ALWAYS JUMP)
	MOVE B,0(D)		;YES, GET ENTRY
	TLCE B,(SYMLOC+SYMGLO)	;LOCAL OR GLOBAL SYMBOL?
	TLCN B,(SYMLOC+SYMGLO)
	AOBJN D,LOOK51		;NO, PGM OR BLOCK NAME.
	TLNE A,(SYMLOC)		;LOCAL SYMBOL OK?
	JRST LOOK52		;YES, DONE
	TLNN B,(SYMGLO)		;NO, IS THIS A GLOBAL?
	AOBJN D,LOOK51		;NO, KEEP SEARCHING
LOOK52:	MOVEI A,0(D)		;RETURN PTR TO ENTRY
	RETSKP

;ERROR HANDLER FOR SYMBOL LOOKUP FAILURE (SHOULD NEVER HAPPEN)
; 1/ RADIX50 OF SYMBOL

LOOKXX:	PUSH P,A
	HRROI A,[ASCIZ /
SYMTAB LOOKUP FAILURE FOR /]
	PSOUT
	POP P,A
	MOVEI D,[MOVE B,A	;GET ADR OF ROUTINE TO TYPE CHARS
		PBOUT
		RET]
	CALL R50T1		;PRINT RADIX50
	HRROI A,[ASCIZ /
/]
	PSOUT
	RET
;JSYS ERROR

JSEX0:	HRROI 1,[ASCIZ /
?JSYS ERROR: /]
	PSOUT
	MOVEI 1,101		;PRINT ERROR STRING ON PRIMARY OUTPUT,
	HRLOI 2,400000		; THIS FORK ,, LAST ERROR
	SETZ 3,
	ERSTR
	 JFCL
	 JFCL
	HRROI 1,[ASCIZ /
/]
	PSOUT
	HALTF

OCTOUT:	MOVEI 1,101		;OCTAL OUTPUT TO PRIMARY
	MOVEI 3,^D8
	NOUT
	 JSERR
	RET


;LITERALS XLISTED

	XLIST
	LIT
	LIST

NBUGTP:	0			;NUMBER OF BUG TABLE POINTERS
PDL:	BLOCK NPDL

	XPUNGE
	END SYSG0