Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-05 - 43,50337/08/lowseg.mac
There are 2 other files named lowseg.mac in the archive. Click here to see a list.
00010	;<ENDERIN>LOWSEG.MAC.6,  9-Dec-76 12:15:48, Edit by ENDERIN
00020	
00030	Comment;
00040	Author:		Claes Wihlborg
00050	Version:	[030406,130012,43,144,203,225,243,247,306]
00060	Contents:	Compiler data areas
00070	;
00080	
00090		SEARCH SIMMAC
00100		SALL
00110		CTITLE	LOWSEG
     
00010		SUBTTL	GLOBAL DATA AREAS
00020	
00030	;The following data areas are not present in production version
00040	
00050		IFN QDEBUG,<
00060		LOC	7000	; To accommodate DDT for other passes
00070		; Set breaks here for DDT control after segment switches
00080		YP1IN::	RETURN
00090		YP2IN::	RETURN
00100		YP3IN::	RETURN
00110		>
00120	; Debug switches
00130	IFN QDEBUG,<DEFINE x(a),<IRP a,<a::Z>>>;;[247]
00140	IFE QDEBUG,<DEFINE x(a),<IRP a,<a=:0>>>;;[247]
00150	x<YCADB,YCGDB,YM2DB,YDBRTA,YDBRTC,YO2DB,YO2DBZ>;;[247]
00160	;YO2DBZ Saves ZQU from GETAD to GENOP for debug output
00170	
00180	YTIMER::	BLOCK	1	;???
00190	
00200	IFN QTRACE,<
00210	;*************** Trace data *************
00220	YTRSAV::	BLOCK	2
00230	YTRPAS::	EXP	0,0,0,0
00240	YTRLC::		BLOCK	1
00250	YTRJLC::	BLOCK	1
00260	YTRINS::	BLOCK	1
00270	YTRTP::		BLOCK	1
00280	QTRTAB==52000
00290	YTRACC=:.+0+QTRTAB
00300	YTRLOW=:.+1+QTRTAB
00310	YTRHGH=:.+2+QTRTAB
00320	YTRSIM=:.+3+QTRTAB
00330	YTRTAB=:.+3+400+QTRTAB
00340	;*************** End trace **************
00350	>
     
00010	;  The following data areas are not reset between compilations:
00020	
00030	YCBBH::		BLOCK	3	;Command buffer header
00040	YCBUF::		BLOCK	QBUFS	;Command buffer
00050	YI1CB::		BLOCK	^D27	;Command line buffer
00060					;Room for 135 characters
00070	YI1CBE::
00080	YI1P::		BLOCK	1	;Pointer to YI1CB
00090	YI1P1::		BLOCK	2	;Contains pointer and delimiter to switches after source
00100	YSWITCH::	BLOCK	1	;Word containing global switches
00110	YSWDEF::	BLOCK	1	;Contains default values of certain switches
00120	YSWCHA::	BLOCK	1	;Contains value of changed switches
00130	IFE QDEC20,<;[225]
00140	YP1PPN::	BLOCK	1	;[144] PPN from where PASS1 was taken
00150	YP1DEV::	BLOCK	1	;[144] Device of PASS1
00160	>
00170	
00180	;I/O buffers
00190	
00200	YBRBUF::	BLOCK	1
00210	YBRSRC::	BLOCK	1
00220	YBRZSE::	BLOCK	1
00230	
00240	DEFINE ELBH(X,F)<;;[225]
00250	IRP F,<
00260	IFG X,<IFN QDEC20,<
00270	Y'F'LI::	BLOCK	ZLF%S
00280	Y'F'SZ::	BLOCK	1;;File size
00290	Y'F'JFN::	BLOCK	1;;Job File Number
00300	Y'F'MP::	BLOCK	1;;First page,,number of pages of map area
00310	Y'F'DV::	BLOCK	1;;Device name
00320	>>
00330	YEL'F::	BLOCK	4	;;ENTER/LOOKUP block
00340	YBH'F::	BLOCK	3	;;Buffer header
00350	>
00360	>
00370	ELBH(0,<IC1,DF1,LS1,ZSE,XRF,SRC,ATR,IC2,REL,LS3>);;[225]
00380	IFN QDEC20,<
00390	YFILSP::BLOCK	^D140/5	;Space for file spec
00400	YJFNTB::BLOCK	16	;Space for JFN info (long form)
00410	YEXTAD::BLOCK	1
00420	YEXTLX::BLOCK	ZLF%S>;[225]
00430	ELBH(1,EXT)
00440	
00450	DEFINE BUFFER(no)<
00460	IRP no,<
00470	Y'no'BUF::	BLOCK	QBUFS+1>
00480	>
00490	
00500	BUFFER(<1,2,33,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18>)
00510	
00520	IFG QDEBUG,<
00530	YDEBH::YDEBH::YO2DBB::YO1DBB::
00540	YBHDEB::	BLOCK	3
00550	YO1DBL::YELDEB::BLOCK	4
00560	YBUF1::
00570	YBUFR7::	BLOCK	2*<QBUFS+1>
00580	>
00590	
00600	IFN QDEC20,<;[225] Areas for high seg data
00610	YHILIM=:600		;Leave this page untouched
00620	YHIFP1::BLOCK	1	;First free hiseg page after hiseg break
00630	YHIFP:: BLOCK	1	;Currently first free hiseg page
00640	>
     
00010	YZEROB::
00020	
00030	;  Start of data area that is reset between compilations
00040	;  YZEROB should always be the first item in this area
00050	
00060	
00070	YJOB::		BLOCK	1	;Job number
00080	YRELBL::	BLOCK	1	;[030406] Last filled block for rel file [RH],
00090					;left half negative for global class/proc
00100	
00110	YMAXFX::			;Index of highest fixup allocated
00120	YSRFIX::	BLOCK	1
00130	YMAXID::			;Number of differently spelled identifiers
00140	YSHNID::	BLOCK	1
00150	YREL::
00160	YBREAK::	BLOCK	1	;Amount of code output on the rel file
00170	YO1CNB::
00180	YO2CNB::	BLOCK	1	;Block counter in code item
00190	YO1ACN::
00200	YO2ACN::	BLOCK	1	;Address of code item counter
00210	YSIMNAME::	BLOCK	1	;[130012] Radix50 SIMULA name of global module
00220	YATRFIL::	BLOCK	1	;[130012] Radix50 ATR file name - " -
00230	YATRFN::	BLOCK	1	;[144] Name of ATR file (SIXBIT). Only if old
00240	YATRPPN::	BLOCK	1	;[144] file exists. YATRPPN=ppn of that file.
00250	YATRDEV::	BLOCK	1	;[144] Device of the old ATR file.
00260	YATROFS::	BLOCK	1	;[144] Offset of ATR module within ATR file
00270					;[144] (word offset,,block number)
00280	IFN QDEC20,<;[225]
00290	YATRJFN::	BLOCK	1
00300	YATRSZ::	BLOCK	1
00310	>
00320	YPASSNO::	BLOCK	1	;[225] Pass number
00330			q==^D30		;[144] Size of space for swapping code
00340	Y3SW:!
00350	Y3SWAP::			;Space for swapping code starts here
00355		DEFINE bl(n) <
00356		BLOCK n
00357		q==q-n>
00360	YZQUGL::	bl	8	;[144] Space for global ZQU-ZHB (Pass1)
00370	QSFDN=:		6		;[144] Max number of SFD names in path
00380	YSFDN::		bl	1	;[144] Count of SFD names in path
00390	YSFDP::		bl	1	;[144] Pointer word for YSFD
00400	YSFD::		bl	1	;[144] Temporary SFD list
00410	YSFDSW::	bl	1	;[144] -1 when SFD is being parsed in SR
00420	YSFDPPN::	bl	1	;[144] ppn of SFD path
00430	YSFD1::		bl	QSFDN+1	;[144] SFD list starts here
00450			BLOCK	q	;[144] Rest of area for swapping code
00460	YERRCT::	BLOCK	1	;Number of errors encountered
00470	YWARCT::	BLOCK	1	;Number of warnings encountered
00480	YOLINE::
00490	YELIN1::	BLOCK	1	;Number of first line in error message
00500	YLINE::
00510	YELIN2::	BLOCK	1	;Number of last line in error message
00520	YSTATM::
00530	YESEM::		BLOCK	1	;Number of semicolons on current line
00540	YECHDM::	BLOCK	1	;Start of chain of errors with last line missing
00550			BLOCK	3	;Dummy header ZDM
00560	ZDM::		BLOCK	QLDM
00570			BLOCK	3	;Dummy tail ZDM
00580	YDMEND::	BLOCK	1	;Index to first free word in DM
00590	YPROCI::	BLOCK	1	;??PASS2
00600	YTEXTI::	BLOCK	1	;??PASS2
00610	YSIMUI::	BLOCK	1	;??PASS2
00620	YSYSI::		BLOCK	1	;??PASS2
00630	YSYSO::		BLOCK	1	;??PASS2
00640	YEXTS::		BLOCK	12
00650	YEXENT::	BLOCK	1	;Entry of external MACRO-10/FORTRAN procedure
00660	YSWRF::		BLOCK	8
00670	YSWCCL::	BLOCK	1
00680	YBEGNO::	BLOCK	1	;Number of BEGIN in sourcecode
00690	YENDNO::	BLOCK	1
00700	ZLEREC::	BLOCK	1	;Prototype for type 4 record in LS1
00710					;Used by pass 1 and pass 3
00720	YMPSIZ::	BLOCK	1	;Size of main program if
00730					;outermost block is reduced
00740	YLCSTA::	BLOCK	1
00750	YLTIND::	BLOCK	1	;Pointer to YLTAB
00760	YLTAB::		BLOCK	^D40	;Table with LOOKUP blocks and device name
00770	YRLSFD=:	YLTAB		;[144] REL file SFD info copied here at Pass1 end
00780	YLSSFD=:	YLTAB+QSFDN+3	;[144] LST file SFD
00790	YATSFD=:	YLSSFD+QSFDN+3	;[144] ATR file SFD
00800		IFG <YATSFD+2*<QSFDN+3>-.>,<PRINTX No space for /R SFD>	;[144]
00810	YRSSFD=:	YATSFD+QSFDN+3	;[144] /R switch file spec SFD
00820	YSTK::		BLOCK	QSTSIZ	;Pushdown stack
00830	Y1MASK::	BLOCK	1	;Switches in X1MASK saved to Pass 3
00840	Y3OPEN::	BLOCK	1	;Switches for status of files
00850	
00860		QLOC=.
     
00010		SUBTTL	PASS1 DATA AREAS
00020	
00030	;O1 module
00040	
00050	YO1RBP::	BLOCK	1	;Byte pointer to relocation bits
00060	YO1DFC::	BLOCK	1	;Initial size of DF1 core file
00070	YO1ASB::	BLOCK	2	;[306] Block no, byte ptr to word where
00080					; last part of an ASCII string was put
00090					; in REL file buffer
00100	YO1ASC::	BLOCK	1	;[306] Last word of this string before
00110					; zero fill
00120	
00130	;SM module
00140	
00150	YSMLIN::	BLOCK	1	;Line no where current statement starts
00160	YSMSEM::	BLOCK	1	;Semicolon preceding current statement
00170	
00180	;SD & DP modules
00190	
00200	YRQHEAD::	BLOCK	1	;[13] Head of ZRQ chain (file def's)
00210	YBSTP::		BLOCK	1	;Current stack level (pointer to YDPD)
00220	YEXZQU::	BLOCK	1	;[144] XWD last ZQU for external,first such ZQU
00230	YASTR::		BLOCK	1	;Pointer to array segment start
00240	YDLV::		BLOCK	1	;Compilation level of this module
00250	YRFLAG::	BLOCK	1	;???
00260	YSDENL::	BLOCK	6	;Linkage list used by SDEND
00270	YDPD::		BLOCK	100*QSTLL ;Block stack
00280	YC1DC::		BLOCK	1	;Pointer to next free DC record
00290	YDPATH::			;Temp storage of attribute-file header
00300	YSRIN::		BLOCK	1	;Name of external module
00310	YDPZQQ::			;Start of ZQQ records
00320	YSRDEV::	BLOCK	1	;Device of ATR file
00330	YSREN::				;Name of ATR file
00340	YDPSOL::	BLOCK	1	;Source level of external module
00350	YSRPPN::			;PPN of ATR file
00360	YDPLIN::	BLOCK	1	;Line of declaration of external module
00370	YDPZUC::	BLOCK	1	;Start link of ZUC records
00380	YDPFUN::	BLOCK	1	;First unique no in current external
00390	YDPLUN::	BLOCK	1	;Last  unique no in current external
00400	YDPUNR::	BLOCK	1	;Start link of requested externals
00410	
00420	;LS module
00430	
00440	YLSVAL::	BLOCK	2	;Value of constant
00450	YLSNPM::	BLOCK	1	;Decimal point marker
00460	YLSNSD::	BLOCK	2	;Number of digits after overflow
00470	YLSNLS::	BLOCK	1	;Next    counter:Line & semicolon
00480	YLSCLS::	BLOCK	1	;Current   -"-
00490	YLSLLS::	BLOCK	1	;Last      -"-
00500	
00510	;P1DUMP module
00520	
00530	IFG QDEBUG,<
00540	P1PAGE::	BLOCK	1	;Page count
00550	P1LINE::	BLOCK	1	;Line count
00560	P1TAB::		BLOCK	1	;Position on current line (no of tabs left)
00570	P1HEAD::	BLOCK	1	;Pointer to page header
00580	P1Z::		BLOCK	5	;Temporary storage of DF1 record
00590	>
00600	
00610	;LC module
00620	
00630	YLCLB::		BLOCK	34	;Source line buffer
00640	YLCLBE::	BLOCK	1	;End of YLCLB
00650	YLCRT4::	BLOCK	1	;LS1 type 4 record buffer
00660	YLCBEG::	BLOCK	1	;Total no of BEGIN's so far
00670	YLCEND::	BLOCK	1	;Total no of END's so far
00680	YLCADR::	BLOCK	1	;Relative address to CR in YLCLB
00690	YLCLBS::	BLOCK	1	;Pointer to first byte in current line
00700	YLCLN::		BLOCK	1	;Switch word
00710	YLCLNO::	BLOCK	1	;Line number from source
00720	
00730	;I1 module
00740	
00750	YI1SNN::	BLOCK	1	;Number preceding compiler switch
00760	YI1SWF::	BLOCK	1	;First source switch
00770	YI1SWP::	BLOCK	1	;Byte pointer to YI1SNN
00780	YI1SWN::	BLOCK	4	;Switch name used in error messages
00790	YI1CRC::	BLOCK	1	;Control record to LS1
00800	YI1FN::		BLOCK	6	;File specification record
00810	YI1PS::		BLOCK	1	;Switch word
00820	
00830	YRQDEV=:	YI1FN	;[13]
00840	YRQFIL=:	YI1FN+1	;[13]
00850	YRQPPN=:	YI1FN+4	;[13]
00860	YEXNAM=:	YI1FN+2	;[13]
00870	
00880	YZEROE::
00890	
00900	;SH module
00910	
00920	ZHT::		BLOCK	200	;Hash table
00930	ZSE1::		BLOCK	QNRESW+QZSELE	;Identifier table: First six chars
00940	ZSE2::		BLOCK	QNRESW+QZSELE	;	"	 : Last  six chars
00950	ZSE3::		BLOCK	QNRESW+QZSELE	;	"	 : Link higher,,link lower
00960	
00970	;Start dynamic data area
00980	
00990	DC1::		BLOCK	QDC1LE	;Declaration table
01000	Y1LOWE::			;End of Pass 1 initial
     
00010		SUBTTL	Pass 2 and Pass 3 variables
00020	
00030	IFG QDEBUG,<LOC QLOC>
00040	IFE QDEBUG,<RELOC QLOC>
00050		Y2START=:QLOC
00060	
00070	;	The components of the relocation counter.
00080	;	Table must not be reordered without changes to QREL?? (relocation bytes in MC2)
00090	;
00100	YNOREL=:.-1		; Start of relocation counter table
00110	YRELNO=YNOREL
00120	YRELCN::	BLOCK	1	; Number of words output on the rel file
00130	YRELCD::	BLOCK	1	; Number of words output to instruction code stream
00140	YRELPT::	BLOCK	1	; Number of words output to prototype stream
00150	YRELLT::	BLOCK	1	; Number of words output to line number tables
00160	YRELST::	BLOCK	1	; Number of words output to symbol tables
00170	;
00180	;	End of relocation counter table
00190	;
00200	YDCSTP::	BLOCK	1	; Pointer to first free word after declaration stack
00210	YDCSTO::	BLOCK	1	; Pointer to word following declaration stack space
00220	YRDSTO::			; Word following redeclaration stack and
00230	YDCSTB::	BLOCK	1	; Pointer to base of declaration stack
00240	YCANTRY::	BLOCK	1	; Program entry point relative rel origin
00250	YCADLV::	BLOCK	1	; Level of Simulation/Simset
00260	
00270		QLOC2=.
     
00010		SUBTTL	Pass 2 variables
00020	
00030	YCABKB::	BLOCK	1	; Base offset in obj code of outermost block
00040	YCALID::	BLOCK	1	; Lexical id no used in CA
00050	YCAMTC::	BLOCK	1	; Points to matching virtual ZQU or is zero
00060	YCAPLE::	BLOCK	1	; Prefix level
00070	YCAQND::	BLOCK	1	; Used to point to end of ZQU list
00080	YCASM::		BLOCK	1
00090	YCATYE::	BLOCK	1	; Holds flag for type error in CARL
00100	YCAVRT::	BLOCK	1	; Number of virtuals
00110	YCAZHE::	BLOCK	1	; Value of XZHE at start of CAEB actions
00120	YCAZMP::	BLOCK	4	; Map of subblock in CA
00130	YCA1SC::	BLOCK	1	; Location for SCAN1 switch in CARL
00140	YCERFL::	BLOCK	1	; Expression error flag (local error)
00150	YCGACT::	BLOCK	1	; Value of top accumulator shifted to ac position.
00160					; Set after CGG2 etc.
00170	YCGDBL::	BLOCK	1	; =1 if two words to be moved to formal parameter loc.
00180	YCGFOX::	BLOCK	1	; Variable used in FOR statement generation
00190	YCGFX1::	BLOCK	1	; Used to save a fixup number
00200	YCGFX2::	BLOCK	1	; Used to save a fixup number
00210	YCGICR::	BLOCK	1	; Relad of FOR statmt increment computing routine
00220	YCGINS::	BLOCK	1	; Used to build an instruction
00230	YCGISG::	BLOCK	1	; Sign of FOR incr: +1-pos, -1-neg,
00240					; 0- not known at compile time
00250	YCGNAC::	BLOCK	1
00260	YCGPAF::	BLOCK	1	; Used in parameter handling
00270	YCGSK::		BLOCK	1
00280	YCGSWC::	BLOCK	1	; Left half: Current switch fixup, right half: Element count
00290	YCGXAC::	BLOCK	1
00300	YFORSI::	BLOCK	1	; Non-zero if %FORSI was part of current FOR list
00310	YO2ADF::	BLOCK	1	; Signifies if YO2ADI is a fixup type instr (-1)
00320					; absolute instr (0) or relocated (1)
00330	YO2ADI::	BLOCK	1	; Instruction built up by O2AD (except opcode)
00340	YO2IQI::	BLOCK	1	; Current index of YO2IQB, first free place
00350	YO2LAS::	BLOCK	1	; Chain start for last and redefinable fixup
00360			BLOCK	1	; Value for last and redefinable fixup
00370	YO2FIX::	BLOCK	1	; Negative left half means right half is
00380					; address of redefinable fixup entry
00390	YO2DFW::	BLOCK	1	; Buffers current word of DF1
00400	YO2CDP::	BLOCK	4	; Parameter blocks for the different code streams
00410	YO2PTP::	BLOCK	4
00420	YO2LTP::	BLOCK	4
00430	YO2STP::	BLOCK	4
00440	YO2STS::	BLOCK	1	; Status of i/o channel after error
00450	YO2CNC::	BLOCK	1
00460	YO2LII::	BLOCK	1	; Literal table index
00470	YO2LIR::	BLOCK	1	; Relad of current literal table start
00480	YO2LIT::	BLOCK	1	; Number of literals following symbol in IC1
00490	YO2LIB::	BLOCK	QO2LIS	; Literal table
00500	
00510	;  Buffers for code output
00520	
00530	YO2CDB::	BLOCK	QBUFS-3
00540	YO2IQB::	BLOCK	QBUFS-3
00550	YO2PTB::	BLOCK	QBUFS-3
00560	YO2LTB::	BLOCK	QBUFS-3
00570	YO2STB::	BLOCK	QBUFS-3
00580	YO2ITB::	BLOCK	QBUFS-3	; Buffers fixup requests
00590	
00600	YORDLV::	BLOCK	1	; Display level
00610	YORFOR::	BLOCK	1	; Copy of ZID of control variable in FOR loop
00620			BLOCK	1	; - " - ,Second word
00630	YELEV::		BLOCK	1	; Effective level of XCB at run time
00640	YEXPL::		BLOCK	1	; Address of word following tree area
00650	YEXPP::		BLOCK	1	; Address of first used word in tree area
00660	YFOP::		BLOCK	1	; Address of first operand in operand  stack (used in OR)
00670	YFXCH::		BLOCK	1	; Start of chain of available fixups used in O2
00680	YFXTAB::	BLOCK	1	; Address of fixup table
00690	YGAP::		BLOCK	1	; Target relocation counter for O2GA
00700	YLINK::		BLOCK	1	; Start of chain through CGVA/CGAD calls to the root
00710	YLXIAC::	BLOCK	1	; Effective level of display loaded to XIAC at run time
00720	IFN <QDEBUG>,<
00730	YMESS::		BLOCK	1	; Message is saved here by M2UU
00740	YM2DBC::	BLOCK	1	; YRELCD is kept here to see if code has been
00750					; output between two line symbols
00760	YM2DADR::	BLOCK	6	; DAEMON parameter list>
00770	YM2EWS::	BLOCK	1	; Sum of warning and error messages at start of statement
00780	YNOPD::		BLOCK	1	; Number of operands processed in OR
00790	YNZCN::		BLOCK	1	; Number of ZCN operands
00800	YNZID::		BLOCK	1	; Number of ZID operands
00810	YNZNS::		BLOCK	1	; Number of ZNS operands
00820	YOPCOD::	BLOCK	1	; Opcode to be output by O2GI
00830	YOPSTB::	BLOCK	1	; Address of first word of operand stack
00840	YOPSTP::	BLOCK	1	; Operand stack pointer (pushdown pointer with
00850					; overflow check)
00860	YORACT::	BLOCK	1	; ACTIVATE code mask saved in OREN
00870	YORFX::		BLOCK	1	; Fixup saved in OREN
00880	YORLID::	BLOCK	1	; Holds LID for diagnostics
00890	YORZHB::	BLOCK	1	; ZHB pointer for inspection and prefixed block
00900	YORZQU::	BLOCK	1	; ZQU pointer saved in OREN
00910	YORPAR::	BLOCK	1	; Switch used to decide if the outermost
00920					; expression was enclosed by parentheses
00930	YPAFIX::	BLOCK	1	; Used by CGPA for saving fixup for address
00940					; after a thunk
00950	YQREL::		BLOCK	1	; Parameter to O2
00960	YQRELL::	BLOCK	1	; Left relocation byte for O2GR (GENREL)
00970	YQRELR::	BLOCK	1	; Right halfword relocation
00980	YQRELT::	BLOCK	1	; Target relocation
00990	YRDSTB::	BLOCK	1	; Address of first word of redeclaration stack
01000	YRDSTP::	BLOCK	1	; Redeclaration stack pointer. updated by CADS and CAUD.
01010	YSTEPP::	BLOCK	1	; Right half: YFOP, left half: -(numberopds*2-1)
01020	YSTKNU::	BLOCK	1	; Controls stacking in ORRP
01030	YTAC::		BLOCK	1	; Address to the descriptor of the top accumulator
01040	YTENT::		BLOCK	1	; Flag used for O2 communication (O2DF, O2RF)
01050	YZHBXC::	BLOCK	1	; Pointer to ZHB corresponding to XCB contents at run time
01060	YZHET::		BLOCK	1	; Pointer to currently innermost ZHB or ZHE record
01070	YUNDEC::	BLOCK	4	; Undeclared id ZQU pointer
01080	YACTAB::	BLOCK	2*QNAC
01090		YACTAE=:.
01100	; Statically allocated areas
01110	YBKST::		BLOCK	100	; Block	stack
01120		QBKSTZ=:YBKST-.
01130	YOPST::		BLOCK	700	; Operand stack
01140		QOPSTZ=:YOPST-.
01150			BLOCK	63	;[43]This can be used for patches in pass 2
01160	YO2CIQ::	BLOCK	1	;[43] Current IQ buffer pointer
01170	YO2ZSD::	BLOCK	1	;Link to symbol table communicated between O2SM and CAMM
01180	YLSLIN::	BLOCK	1	;Last line for which a line table entry has been output (O2LN2)
01190	YO2LNB::	BLOCK	1	; Offset of last ZLN entry of block type in line table
01200	YBKSTP::	BLOCK	1	; Block stack ptr (pushdown ptr with oflow chk)
01210	YDICT::	BLOCK	700		; Dictionary start
01220	YDICTB=:<YDICT-QLOWID>		; Dictionary base
01230	YPAS2E=:.
     
00010		SUBTTL	Pass 3 data areas
00020	
00030	IFG QDEBUG,<LOC QLOC2>
00040	IFE QDEBUG,<RELOC QLOC2>
00050	
00060	
00070	
00080	Y3ERRL::	BLOCK	4	;Lookup arg SIMERR.ERR
00090	
00100	YE3SW::		BLOCK	1	;Word containing switches
00110	
00120	;Data module E3
00130	
00140	YZDM::		BLOCK	QLDM	;Buffer used when sorting ZDM
00150	YZDMI::		BLOCK	QLDM/3	;Buffer used when sorting ZDM
00160	Y3LINH::	BLOCK	3	;Buffer to start address of line used if error on line
00170	YE3PGH::	BLOCK	20	;Buffer first part of standard text page header
00180	YE3PNM::	BLOCK	13	;Buffer second part of text page header
00190	Y3BUF::		BLOCK	^D19	;Buffer to store intermediate data
00200	YE3ERR::	BLOCK	^D30	;Buffer errormessage
00210	YE3LIN::	BLOCK	^D30	;Line buffer
00220	YE3LIP::	BLOCK	1	;Byte pointer YE3LIN 7 bit byte
00230	YE3LNO::	BLOCK	1	;Current line number
00240	YE3RUB::	BLOCK	14	;Page heading given in PAGE switch
00250	YE3NRU::	BLOCK	1	;Rh= number of words in YE3RUB,
00260					;lh=-1  after a page switch
00270	YBEGST::	BLOCK	QBEG	;Stack begin number
00280	YBEGSP::	BLOCK	1	;Stack pointer YBEGST
00290	YE3BEG::	BLOCK	1	;Number of BEGIN's generated
00300	YE3END::	BLOCK	1	;END number of current line
00310	YE3PNN::	BLOCK	1	;Number of bytes in second part of header in list
00320	YE3LS3::	BLOCK	1	;Number of bytes that are to be output to LS3,
00330					;usually number of bytes in YE3LIN
00340	YE3PAG::	BLOCK	1	;Number of lines per page
00350	YE3PNO::	BLOCK	1	;Number of lines left on current page to print
00360	YE3PGN::	BLOCK	1	;Lh= main number of page
00370					;Rh= secondary number of page
00380	YDMB2::		BLOCK	1	;For sorting ZDM
00390	YDMPT3::	BLOCK	1
00400	YSIXB::		BLOCK	1
00410	Y3DEV::		BLOCK	1	;Device of source in sixbit format
00420	
00430	
00440	;Data module M3
00450	
00460	Y3REL::		BLOCK 7		;Initial start addr of different streams
00470	Y3PLTE::	BLOCK	1	;Pointer end of line number table
00480	Y3PLTS::	BLOCK	1	;Pointer start of line number table
00490					;Word 1=0 followed by addr of
00500					;code,const,prot line,symb
00510	YM3B::		BLOCK	QBUFS-3+^D18	;Local buffer for the different streams
00520						;Max 18 data words terminate the buffer
00530	YM3BI::		BLOCK	1	;Index of YM3B
00540	YM3BRP::	BLOCK	1	;Pointer rel word in YM3B
00550	Y3ATE2::	BLOCK	1	;Pointer ATR file in core
00560	Y3ATRE::	BLOCK	1	;Pointer ATR file in core
00570	Y3SIEN::	BLOCK	1	;Number of words in block defined in M3ATR
00580	Y3UNRA::	BLOCK	1	;[243] Part of unique number
00590	Y3UNRD::	BLOCK	1	;[243] Part of unique number
00600	Y3UNRE::	BLOCK	1	;[243] Part of unique number
00610	Y3UNRF::	BLOCK	1	;[243] Part of unique number
00620	
00630	;Edit [6] (pass 3) start
00640	Q1==1+QSFDN+4	;[43] [144]
00650	Q==QSTSIZ-Q1		;Use top of pdl for pass 3 data (stack is too big)
00660	IFL <Q-200>,<PRINTX PASS3 stack too small>
00670	IFG <Q-200-1>,<	;Go on, use the area, lots more where it came from
00680	Q3STSZ=:Q	;This size will do for pass 3
00690	Q==.	;Remember this point
00700	IFG QDEBUG,<	LOC	YSTK+Q3STSZ> ;[203]
00710	IFE QDEBUG,<	RELOC	YSTK+Q3STSZ> ;[203]
00720	Y3ENTRY::	BLOCK	1	;Name of entry in case of global class/proc
00730	IFN QDEC20,<
00740	Y3LKU::		;LOOKUP block space + overhead to be used in T3I
00750	>
00760	Y3SFD::		BLOCK	QSFDN+4	;[144] Space for SFD path block
00770	;**** NOTE !!!! **** Q1 above must reflect size from Y3ENTRY to here !!!! ****
00780		IFG <Y3ENTRY+Q1-.>,<PRINTX Allocation error for Pass3 data>
00790	
00800	
00810	IFG QDEBUG,<	LOC	Q> ;[203]
00820	IFE QDEBUG,<	RELOC	Q> ;[203]
00830		PURGE	Q
00840	>;End [6]
00850	
00860		;Tables for creating error messages
00870	
00880		;The order between the tables must not be changed
00890		; without changing O3ERR in module O3
00900	Y3BUFS::	BLOCK	4	;Buffer length of error tables
00910	YE3DL::		BLOCK	^D16
00920	YE3D::		BLOCK	QE3D
00930	YE3M::		BLOCK	QE3M
00940	YE3MI::		BLOCK	300	;600 error messages
00950	
00960	
00970	Y3INBU::	BLOCK	2	;Command list for unbuffered input of error tables
00980	Y3INZS::	BLOCK	2	;Command list for input of ZSE.TMP
00990	Y3INER::	BLOCK	4	;Command list for input from SIMERR.ERR
01000	
01010	ZSE::		BLOCK	14000	;Symbol table
01020	
01030		;Tables used to
01040		;-Hold intermediate data from IC2.TMP for creating line number table
01050		;-Hold data from ATR.TMP
01060		;-Create cross reference listing
01070	ZINA::		BLOCK	1
01080	IDL::		;BLOCK	6000		;Hash link
01090	IDLA=:IDL+20	;[12] Start of space for ATR info from ATR.TMP
01100	IDR=:IDL+6000	;BLOCK	6000		;Link bin tree
01110	REF=:IDR+6000	;BLOCK	1000		;References
01120	
01130	Y3LOWE=:REF+1000			;End of Pass3 varibles
     
00010		;[203] Generate a word at max used loc + 1 if QDEBUG is on
00020	IFN QDEBUG,<;;[203]
00030		Y123MX=Y1LOWE
00040	IFG <YPAS2E-Y123MX>,<Y123MX=YPAS2E>
00050	IFG <Y3LOWE-Y123MX>,<Y123MX=Y3LOWE>
00060		LOC	Y123MX+1
00070		EXP	Y123MX
00080	>;[203]
00090	REPEAT 0,<;[225] Define hiseg end
00100		RELOC	400K
00110	YHIEND::BLOCK	1
00120	>
00130		END