Google
 

Trailing-Edge - PDP-10 Archives - BB-BT99V-BB_1990 - 10,7/mon/common.mac
Click 10,7/mon/common.mac to see without markup as text/plain
There are 16 other files named common.mac in the archive. Click here to see a list.
TITLE COMMON - MONITOR COMMON DATA AREA AND CONFIGURATION DEFINITION -V2420
SUBTTL PART 6 COMMON.MAC - T. HASTINGS/PH/TWE/DAL/EVS/JBS/EGF	7-NOV-90

	SEARCH	F,S,DEVPRM
IFN FTNET,<SEARCH NETPRM>

	$RELOC
	$ABS

;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION
; 1973,1974,1975,1976,1977,1978,1979,1980,1982,1984,1986,1988,1990.
;ALL RIGHTS RESERVED.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
;TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
;AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
;SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.


XP VCOMMN,2420		;PUT VERSION NUMBER IN GLOB AND LOADER STORAGE MAP
	SUBTTL	SET PSECT ORIGINS

;MONITOR PSECT ORIGINS MAY BE CHANGED BY EDITTING THE FOLLOWING DEFINITIONS.
;THE DEFINITIONS OF THE ORIGINS MAY APPEAR IN THE HARDWARE CONFIGURATION FILE
;SYSCNF.MAC TO OVER-RIDE THE DEFAULT ORIGINS DEFINED BELOW.

IFN FTXMON,<
ND	CSBORG,330000		;ORIGIN OF COMMON SUBROUTINES
>; END IFN FTXMON
IFN M.KL10,<
ND	MONORG,340000		;ORIGIN OF HIGH SEGMENT ON KL
>; END IFN M.KL10
IFN M.KS10,<
ND	MONORG,340000		;ORIGIN OF HIGH SEGMENT ON KS
>; END IFN M.KS10
IFE FTXMON,<
XP	CSBORG,MONORG		;JUST FOR THOSE WHO CARE
>; END IFE FTXMON
IFN FTXMON,<
ND	XHIORG,<MS.HGH+630000>	;ORIGIN OF EXTENDED HIGH SEGMENT
>; END IFN FTXMON


;NOW SET THE PSECT ORIGINS BEFORE ANY CODE IS GENERATED.

				;*** .HIGH. MUST BE FIRST DUE TO A LINK BUG ***
	.PSECT	.HIGH.,MONORG	;HIGH SEGMENT
	.ENDPS
IFN FTXMON,<
	.PSECT	.CSUB.,CSBORG	;COMMON SUBROUTINES
	.ENDPS
>; END IFN FTXMON
	.PSECT	.INIT.,FYSORG	;INITIALIZATION CODE OVERLAYS FUNNY SPACE
	.ENDPS
	.PSECT	.TWIC.,.UPMAP	;USER MODE DISK ONCE-ONLY
	.ENDPS
IFN FTXMON,<			;IF EXTENDED MONITOR
	.PSECT	.XHGH.,XHIORG	;EXTENDED HIGH SEGMENT
	.ENDPS
	.PSECT	.SYMS.,MS.HGH	;EXTENDED SYMBOL TABLE
	.ENDPS
>; END IFN FTXMON


;TELL LINK WHERE TO PUT SYMBOL TABLE.  FOR SINGLE SECTION MONITOR SYMBOLS
;GO IN PSECT .LOW., FOR MULTI SECTION MONITOR SYMBOLS GO IN EXTENDED HIGH
;SEGMENT (AT BEGINNING OF THAT SECTION).

IFE FTXMON,<
	.TEXT	"/SYMSEG:PSECT:.LOW."
>; END IFE FTXMON
IFN FTXMON,<
	.TEXT	"/SYMSEG:PSECT:.SYMS."
>; END IFN FTXMON

;*** CODE TO SET PSECT LIMITS IS AT THE END OF COMMON.MAC ***
SUBTTL	HISTORICAL NOTES

REPEAT 0, <
;THE COMMON SUBPROGRAM CONSISTS OF 6 FILES ASSEMBLED TOGETHER AS ONE SUBPROGRAM
	1. F.MAC -- FEATURE TESTS (OUTPUT OF MONGEN).
	2. S.MAC -- THE USUAL SYSTEM SYMBOL DEFINITIONS ASSEMBLED WITH
		    EVERY MONITOR SUBPROGRAM
	3. SYSCNF.MAC -- SYSTEM CONFIGURATION
	4. COMMON.MAC - THE REST OF THIS PROGRAM WHICH IS THE SAME SOURCE FOR
	ALL	CONFIGURATIONS.  HOWEVER, THE ASSEMBLIES ARE CONDITIONED BY
	SYMBOLS	AND MACROS DEFINED IN 2.

	THE	FOLLOWING SYMBOLS AND TABLES ARE GENERATED BELOW:

	A. MONITOR STARTUP LOCATIONS (400-407), HENCE LOAD THIS FIRST.
	B. JOB TABLES - LENGTH DEPENDENT ON MAXIMUM NUMBER OF JOBS ALLOWED
	C. ALL VARIABLE STORAGE NOT ASSOCIATED WITH A PARTICULAR DEVICE
	D. COMMON SUBROUTETURNS
	E. COMMON BYTE POINTERS
	F. TABLE OF SERVICE ROUTINE INTERRUPT LOCS TO BE LINKED BY ONCE ONLY CODE
	G. TABLE OF DEVICE DATA BLOCK ADDRESSES AND NUMBER TO BE USED BY ONCE TO
		LINK THEM TOGETHER AND GENERATE MULTIPLE COPIES.
	H. ASSIGNMENT OF PI CHANNELS
	I. PI CHANNEL SAVE AND RESTORE ROUTINES
	J. UUO TRAP LOCATIONS 40/41, 60/61
	K. APR INTERRUPT LOCATIONS CPU0,1, KA10/KI10
	L. SYSTEM CRASH STOP CONI'S.
	NOTE:  SEE COMDEV FOR DEVICE DEPENDENT CODE, DATA, AND SYMBOLS


LEVEL D DISK SERVICE PARAMETERS:

	ALL	SYMBOLS ANAS ONATIONS ARE IN A SEPARATE FILE CALLED
	COMMOD.MAC WHICH IS ALSO ASSEMBLED WITH S AND CONFIG (BUT NOT WITH FEATURS FILES).
	THE	SEPARATE FILE IS FOR TWO REASONS:	1.  ANTICIPATING MULTIPROCESSING SYSTEMS WHICH SHARE DISKS AND 1 16K MEMORY
	(THE DATA MUST BE IN THE COMMON MEMORY)
	2.  ELIMINATE THE NEED TO ASSEMBLE COMMOD IF NOT A DISK SYSTEM
	(COMMOD.MAC TAKES LOTS OF CORE FOR ITS COMPLICATED MACROS)

>
IFE FTNET,<IFN M.NET,<PRINTX ?ASSEMBLE SOURCES WITH FTNET=-1
			M.NET==0>>

;Verify that the correct version of MONGEN was used in making the SYSCNF
;files.
;
;Every time that MONGEN is edited, the following check "M.GEN-nnn" should
;also be updated to reflect the new MONGEN edit level (symbol 'EDITNO' in
;MONGEN.MAC).

IFN	M.GEN-331,<
	PRINTX	? Wrong version of MONGEN was used in SYS dialog
	PASS2
	END
>
IFN FTEMRT,<IFE M.KL10,<PRINTX ? CPU MUST BE A KL10 TO SELECT EBOX/MBOX RUNTIME>>
IFN FTCIDSK!FTCITAP,<IFE FTSCA,<PRINTX ?ASSEMBLE SOURCES WITH FTSCA=-1
				XP FTCIDSK,0	;FORCE MULTIPLY DEFINED GLOBALS
				XP FTCITAP,0>>
IFN M.ENET,<IFE FTENET,<PRINTX ?ASSEMBLE SOURCES WITH FTENET=-1
			XP M.ENET,0>>
IFE M.NET,<EQUATE (GLOBAL,0,<M.ENET,M.LAT,M.DECN,M.ANF,M.RTTY>)>
IFE M.ANF,<EQUATE (GLOBAL,0,<M.RMCR,M.RVTM>)>
SUBTTL CONVERT MONGEN SYMBOLS

;THIS SECTION CONVERTS NEW MONGEN SYMBOLS TO OLD MONGEN SYMBOLS
;SO THAT THE REST OF COMMON AND MONITOR CAN STILL USE THE OLD
;SYMBOLS.  THIS WAS DONE RATHER THAN CONVERTING ALL OF THE
;MONITOR TO NEW SYMBOLS FOR TWO REASONS:
; 1.  IT IS EASIER AND FASTER AND LESS LIKELY TO INTRODUCE BUGS, AND
; 2.  IT ALLOWS CUSTOMERS TO USE OLD MONGEN WITH A MINIMUM
;OF TROUBLE: ONLY A FEW EXTRA SYMBOLS MUST BE DEFINED.
;THE MONITOR WILL PROBABLY BE CONVERTED TO THE NEW MONGEN SYMBOLS
;AFTER THE 5.04 RELEASE.  THE ORDER HERE PARALLELS THE OLD
;MONGEN ORDER.

XP JOBN,M.JOB+1

IFG	JOBN-^D512,<XP JOBN,^D512
		PRINTX %NUMBER OF JOBS REDUCED TO MAX=511>
XP PDP10N,1
XP SEGN,MD.SEG

XP VBCN,M.VBXC
XP XTCN,M.XTC

IFE	M.XTC,<
XP M.XTL,0
XP XTTDSP,CPOPJ
XP XTKLDB,CPOPJ
XP XTUUO,CPOPJ
XP XTCTTY,CPOPJ2
XP XTCIOS,CPOPJ
XP XTCSEC,CPOPJ
XP XTCLNK,CPOPJ
>

IFE M.DAS78,<			;IF NO DAS78 SUPPORT
	CALL78==:CPOPJ		;CAL78. UUO IS A NOOP
	D78SEC==:CPOPJ		;NO ONCE-A-SECOND CODE
	D78MIN==:CPOPJ		;NO ONCE-A-MINUTE CODE
	CWHD78==:CWHNCN##	;NOT CONNECTED IF NO DRIVER
> ;END IFE M.DAS78
IFN M.DAS78,<			;IF DAS78 SUPPORT
	M.D78L==:M0D78L		;HACK FOR D78INT
> ;END IFN M.DAS78


XP DISN,M.DIS
XP PENN,M.DIS
XP T340N,M.340
XP TVP10N,M.VP10
XP T30N,0		;NO TYPE 30
;DEFINE ALL DL10 SYMBOLS

	DLX.CK(1)		;MACRO DEFINED IN S.MAC
	INTERN	DL10XI		;FOR UUOCON

IFN M.KL10!DLX.78,<
IFE M.KL10,<
	PRINTX	?DEFINING A DAS78 REQUIRES FTKL10 TO BE ON
PDP11N==PDP11N-DLX.78
DLX.78=0			;ACTUAL NUMBER
> ;END IFE M.KL10
> ;END IFN M.KL10!DLX.78

IFN DLX.76,<EXTERN D76INT>
IFE PDP11N,<
	XP	D76MIN,CPOPJ
	XP	D76SIL,CPOPJ
>
IFE PDP11N!M.KL10!M.DN60!M.KDUP!M.DMRN,<
	XP	CALL11,CPOPJ
	XP	DLXSEC,CPOPJ
	XP	DLXWIN,0
> ; END IFE PDP11N!M.DN60!M.KDUP!M.DMRN
IFE DL10XI,<
	XP	DLXBAT,0
 IFN PDP11N,<
	XP	DLXDWN,0	;;IF NO PDP-11S ON DL10'S
>>; END OF IFE DL10XI AND IFN PDP11N
DEFINE TDMAC(X),<
	XP	DT'X'N,M.DT'X
M.DTXN==M.DTXN+M.DT'X
>
ZZ=="A"
M.DTXN==0
REPEAT	M.TD10,<
	TDMAC(\"ZZ)
ZZ==ZZ+1
>
IFN FTKS10,<
    DEFINE RX2MAC(X),<
	XP	RX'X'N,M.RX'X
    M.RXXN==M.RXXN+M.RX'X
    >
    ZZ=="A"
    M.RXXN==0
    REPEAT M.RX20,<
	RX2MAC(\"ZZ)
    ZZ==ZZ+1
    >
>;End FTKS10
ND M.TTDN,0
XP TTD28N,M.XTL
IFN M.KS10,<
XP	KLILIN,M.TLTL+M.RTTY	;LINE NO. FOR KS10 KLINIK
>

	DEFINE	OPRL(LINE),<
IFIDN <LINE> <CTY>,<SIXBIT /CTY/>
IFDIF <LINE> <CTY>,<
	SIXBIT	/TTY'LINE/
	IFG LINE-M.TLTL,<PRINTX %OPR LINE NOT DEFINED TO BE A LOCAL TTY>
>;END IFDIF <LINE><CTY>
>
SUBTTL DEFAULT SYMBOLS
;THE FOLLOWING STANDARD SYMBOLS CAN BE SUPERSEDED BY A CUSTOMER HAVING
; PREVIOUSLY DEFINED THEM ON THE HDWGEN.MAC FILE USING THE MONGEN PROGRAM....
;**********************************************************************
;ADD NEW SYMBOLS AT END SO EASY TO UPDATE MONGEN APPENDIX	      *
;SYMBOLS SHOULD APPEAR HERE IN COMMON (AND NOT IN COMDEV, OR COMMOD)  *
; UNLESS THEY REFER TO NON-DISK DEVICES OR DISKS RESPECTIVELY.        *
; IF A SYMBOL IS IN COMDEV OR COMMOD, IT SHOULD NOT APPEAR HERE.      *
;**********************************************************************
ND	XPANDN,0		;FORCE NO EXPANSION OF MACROS
				; UNLESS XPANDN IS DEFINED NON-ZERO WITH MONGEN

ND	M.C0SN,0		;SERIAL NUMBER OF ARITHMETIC PROCESSOR

				;STANDARD MAG TAPE DENSITY IN BITS PER INCH
ND	STDENS,5		;STANDARD = 6250 BPI
				;1=200, 2=556, 3=800, 4=1600, 5=6250

				;NUMBER OF TIMES TO TRY ON DECTAPE ERRORS
ND	DTTRY,4			;STANDARD == 4 TRIES

				;NUMBER OF NANO-SECONDS PER MEMORY CYCLE
ND	NSPMEM,^D1000		;STANDARD == 1000 NANO-SECONDS PER MEMORY CYCLE

ND	M.LPOK,1		;DEFAULT IS TO LOG POKE UUOS VIA DAEMON

ND	M.EDIT,0		;TTY EDITOR EXCLUSION
ND	TTXTRA,0		;NUMBER OF EXTRA TTY DDBS FOR SLAVE LINES
				; AND THE LIKE

ND	M.CRSH,<SIXBIT/CRSCPY/>	;NAME OF PROGRAM TO COPY CRASHES
	EXTERN	MONBTS

ND	M.MAIL,<SIXBIT/MS/>	;NAME OF MAIL PROGRAM

ND	M.DTCK,0		;OPR MUST VERIFY DATE/TIME IF NON-ZERO
;FREE CORE ALLOCATION REQUIREMENTS FOR SCA'S RANDOM SIZED POOL.

IFE M.SCA,<			;IF NO SCA SUPPORT
XP SCASIZ,0			;NO SCA FREE POOL
>; END IFE M.SCA
IFN M.SCA,<			;IF SCA SUPPORT
ND M.SCSZ,4000			;CAN BE REDEFINED AT MONGEN TIME
XP SCASIZ,<^D144*<<M.SCSZ+^D143>/^D144>>
>; END IFN M.SCA
;FREE CORE ALLOCATION REQUIREMENTS FOR DISK
; DEVICE DATA BLOCKS AND ACCESS TABLE ENTRIES.

XP CORSIZ,4			;NO. OF WORDS IN MONITOR FREE CORE BLOCKS

ND	LOGSIZ,^D41		;STANDARD == 20K (CURRENT SIZE OF LOGIN CUSP)
				;MINIMUM AMOUNT OF VIRTUAL CORE WHICH CAN REMAIN
				; AND STILL LET THE SYSTEM PERMIT LOG-INS.  MUST
				; BE AT LEAST AS BIG AS LOGIN CUSP IN K.
XP MAXLVL,5			;ABSOLUTE MAX LEVEL OF NESTED SFD'S

ND	INDPPN,0		;NON-ZERO IF CUSTOMER WANTS PROGRAMMER NOS
				; IN PROJECT X TO BE INDEPENDENT OF THOSE IN
				; PROJECT Y

IF1,<
IFNDEF SYSSEG,<XP SYSSEG,-1>	;MINUS ONE FOR FAST GETSEG FROM SYS
				; WITH SOMEWHAT DIFFERENT BEHAVIOR
				; WHEN SHR FILES ARE SUPERCEDED
IFDEF	SYSSEG,<IFN	<SYSSEG+1>,<XP SYSSEG,0>>
XP SYSSEG,SS.SYS&SYSSEG		;SYSSEG=:0 OR SS.SYS
>
ND	CTYDCR,0		;DELAY FOR CR ON LA36 CTY DURING ONCE
ND	CTYDLF,0		;DELAY FOR LF ON LA36 CTY DURING ONCE
ND	RLDTIM,^D112		;TIME TO AUTO-RELOAD
ND	M.STOF,0		;FREQUENCY TO CALL START TERMINAL OUTPUT
				; (SHOULD BE 2**N-1)
ND	M.RCMP,0		;DEFAULT TO PERMISSIVE ACCESS
				;SET TO 1 FOR MORE SECURE ACCESS
ND	M.NPPC,0		;DEFAULT TO PRIMARY PROTOCOL ON DTE'S
				;SET TO 1 TO DISABLE PRIMARY PROTOCOL
ND	M.NRQT,0		;NUMBER OF TICKS BETWEEN CALLS TO CALCULATE
				; WANT-TO-RUN TIME FOR ALL JOBS.  ZERO IMPLIES
				; NO (EXPENSIVE) CALCULATION.
ND	MINMAX,^D1024*^D12	;SMALLEST LEGAL CORMAX
;NOTE--IN ORDER TO RESERVE PI-CHANNELS FOR
;NON-STANDARD USAGE, FOR EACH CHANNEL (SAY N)
;DEFINE SYMBOL UNIQN==1 VIA MONGEN.  FOR
;EXAMPLE, TO RESERVE CHANNEL 4, DEFINE
;UNIQ4==1.

;MOST OF THE SLAVE PROCESSOR CHANNELS ARE BUSIED OUT TO PREVENT CORE
;FROM BEING WASTED FOR CHANNEL SAVE ROUTINES

IFNDEF CPTOS,<XP CPTOS,0>	;CPTOS EQUAL TO ZERO MAKES CPU0 TRAP TO 40-61, CPU1 TO 140-161
				;CPTOS NON-ZERO MAKES CPU0 TRAP TO 140-161, CPU1 TO 40-61

IFNDEF SFC0,<XP	SFC0,^D20>	;CPU0 SCHEDULER FAIRNESS COUNT.  PICK A JOB OUT OF
				;PQ2 INSTEAD OF PQ1 IF 'SFC0' PICKS IN A ROW HAVE COME FROM PQ1 AND NULL JOB DID NOT RUN.

IFNDEF SFC1,<XP	SFC1,^D20>	;CPU1 SCHEDULER FAIRNESS COUNT
				;PICK THIS MANY JOBS TO RUN ON CPU0.  WHICH
				; CAME FROM CPU1 UUOS BEFORE PICKING OTHER JOBS

IFNDEF IFC0,<XP IFC0,^D5>	;SWAPPER FAIRNESS COUNT MAXIMUM


IFNDEF UFC0,<XP	UFC0,^D10>	;UUO FAIRNESS COUNTER MAXIMUM

IFNDEF UFC1,<XP	UFC1,^D10>	;UUO FAIRNESS COUNTER FOR SLAVE
				;PICK UFC1 JOBS TO RUN ON CPU1
				;WHICH CAME FROM CPU0 AND JUST FINISHED
				;A UUO
IFNDEF MEMITL,<XP MEMITL,^D4>	;NUMBER OF WAYS MEMORY CAN BE INTERLEAVED
IFNDEF	MLACTS,<XP MLACTS,^D39>  ;MAXIMUM LENGTH OF THE ACCOUNT STRING
				; IF NOT DEFINED, 39 CHARACTERS
IFNDEF SCHEDN,<SCHEDN==0>	;SCHEDULE VALUE
SCHEDN==SCHEDN&777777		;ONLY A RIGHT HALF NUMBER
IFNDEF	PAVJSP,<XP PAVJSP,^D20>	;PREDICTED AVERAGE JOB SIZE
IFG	MLACTS-^D39,<XP MLACTS,^D39>  ;MAXIMUM LENGTH IS 39 CHARACTERS
IFL	MLACTS,<XP MLACTS,0>
IFG	MLACTS,<XP ACTSTL, MLACTS/^D5+1> ;LENGTH OF ACCOUNT STRING IN WORDS
IFE	MLACTS,<XP ACTSTL,0>
XP MACTSL,-ACTSTL
XP MAXACS,^D8		;MAX LENGTH OF ACCOUNT STRING
IFNDEF M.CBAT,<XP M.CBAT,^D10>	;NO. OF BAD ADDRESSES IN PER CPU BAD
				; ADDRESS TABLE FOR MEMORY PARITY RECORDING
IFNDEF M.BMAX,<XP M.BMAX,^D13>	;MAX. NO. OF SIMULTANEOUS BATCH JOB STREAM'S
				; INITIATES LOC BATMAX, CHECKED BY BATCON
IFNDEF M.BMIN,<XP M.BMIN,0>	;MIN. NO. OF GUARRANTEED BATCH JOBS
IFNDEF M.EXE,<XP M.EXE,1>	;SYMBOL WHICH DETERMINES TYPE OF FILE
				; CREATED ON "SAVE".  IF OFF, NORMAL (SAV,HGH,
				; LOW,..), IF ON AN EXE FILE IS CREATED
IFNDEF M.JMAX,<XP M.JMAX,M.JOB-M.BMIN>	;MAX. NO. OF SIMULTANEOUS INTERACTIVE JOBS
IFNDEF M.WCH,<XP M.WCH,JW.WMT>	;WATCH BITS USED TO SET INITIAL
				; WATCHING. SINCE LOGIN SETS JBTWCH
				; THIS IS USEFUL ONLY FOR LINES WHICH
				; DON'T NEED LOGIN - INITIA.
				;200000 = TIME OF DAY STARTED TO WAIT
				;100000 = RUN TIME
				;40000 = WAIT TIME
				;20000 = BLOCKS READ
				;10000 = BLOCKS WRITTEN
				;4000 = VERSION NOS.
				;2000 = MTA STATISTICS
IFNDEF M.CMCT,<XP M.CMCT,^D32>	;NO. OF CALLS TO CHKTAL ROUTINE
				; BEFORE DOING 5 M.S. OF OVERHEAD
				; CHECKING CORE TABLES. I.E. ONLY
				; EVERY 32 TIME IS OVERHEAD PERFORMED
				;THIS REDUCES CPU TIME FOR
				; CORE, GETSEG, RUN UUOS
				; SYMBOL CANNOT EXCEED 262,000.
IFNDEF M.EBPS,<XP M.EBPS,^D12500000> ;DEFAULT # EBOX TICKS PER SECOND
					  ; (ACCT METER COUNTS AT 1/2 SYSTEM CLOCK RATE)
					  ; SYSTEM CLOCK RATE IS 25MHZ

IFNDEF M.MBPS,<XP M.MBPS,^D9750000> ;DEFAULT MBOX REFS/SECOND
				     ; THIS NUMBER WAS EXPERIMENTALLY
				     ; DETERMINED AT A CPU CLOCK RATE
				     ; OF 25MHZ SUCH THAT THE CPU TIME
				     ; OF A JRST . MATCHED ELAPSED TIME.
				     ; JRST . WAS ASSUMED TO BE A BEST CASE CONDITION.

				     ; THIS TERM MAKES EBOX/MBOX RUNTIME
				     ; PER REAL TIME UNIT DEPENDENT ON
				     ; CACHE HIT RATE, ALTHOUGH INSTRUCTIONS
				     ; PER E/MBOX RUNTIME UNIT SHOULD REMAIN CONSTANT.

IFNDEF M.EMRT,<XP M.EMRT,0>	;DEFAULT IS REGULAR RUNTIME
IFNDEF M.XPI,<XP M.XPI,0>	;AND INCLUDE PI TIME IN USER RUNTIME
IFNDEF M.ITA,<XP M.ITA,0>	;DEFAULT IS TO USE INTERVAL TIMER

IFNDEF M.XFFA,<XP M.XFFA,0>	;DO FILE ACCESS PROTACTION CHECKING ON [1,2] AND JACCT

IFN FTNSCHED,<
	ND	M.CLSN,^D16	;DEFAULT NUMBER OF CPU CLASSES FOR SCHEDULER
	ND	M.CLSS,1	;DEFAULT SCHEDULER IS CLASS SYSTEM SCHEDULER.
				; IF THIS MONGEN SYMBOL IS DEFINED
				; TO BE ZERO, THEN THE SCHEDULER WILL
				; RUN IN WMU MODE.

	ND	M.DCLS,0	;DEFAULT SCHEDULER CLASS FOR NEW JOBS.
				; CAN OBTAIN THIS FROM GETTAB OR SCHED UUO
IFG M.DCLS-M.CLSN,<PRINTX VALUE OF M.DCLS EXCEEDS M.CLSN.
			M.DCLS==M.CLSN-1>

>;END IFN FTNSCHED
IFE FTNSCHED,<
	ND	M.CLSN,1
	ND	M.CLSS,0
	ND	M.DCLS,0
	XP	SCHED.,CPOPJ	;NO SCHED. UUO
>;END IFE FTNSCHED

IFN FTKL10,<
ND	TTDMOS,^D16		;MAXIMUM OUTPUT STRING
				; DEFINES THE NUMBER OF CHARACTERS THAT CAN
				; BE SENT TO -20F IN A SINGLE BUFFER
>  ;END OF FTKL10

ND	HIGHXC,^D80		;HIGHEST EXTENDED CHANNEL
IFG HIGHXC-^D512,<PRINTX HIGHEST EXTENDED CHANNEL IS GREATER THAN 512
	PRINTX	REDUCING IT TO 512
	XP	HIGHXC,^D512>

ND	MAXNBP,^D64		;MAXIMUM NUMBER OF SNOOP UUO
				; BREAK POINTS ALLOWED
ND	M.OMSM,^D60		;NUMBER OF MINUTES BETWEEN CALLS
				; TO BIGBEN TO TYPEOUT MONITOR NAME,
				; UPTIME, AND DATE/TIME
				;SET TO <-1>_-1 TO NEVER PRINT
ND	M.DTLS,^D90		;CPU TIME LIMIT (SECONDS) TO SET
				; ON A FORCED DETACH (.BYE) COMMAND
ND	LIM1MS,4		;LIMIT OF STOPCD'S IN ANY 1 MINUTE PERIOD
ND	LIM8MS,7		;LIMIT OF STOPCD'S IN ANY 8 MINUTE PERIOD
ND	LIM1HS,^D30		;LIMIT OF STOPCD'S IN ANY 1 HOUR PERIOD

ND	SEBAGE,^D10		;MAXIMUM AGE IN MINUTES FOR A SYSTEM ERROR BLOCK
				; BEFORE WE DELETE EVEN IF DAEMON HASN'T SEEN IT
;THESE SYMBOLS DEFINE THE VALUES OF VERSION FROM MONGEN

AXXWHO==2
IFNDEF	A00CVN,<IFNDEF A00CLH,<AXXWHO=0>>
ND	A00CVN,0		;CUSTOMER VERSION NUMBER (36-BITS)
ND	A00MVN,705		;MAJOR VERSION OF MONITOR--UPDATED AT
				;  START OF DEVELOPMENT CYCLE (9-BITS)
ND	A00SVN,0		;SOUP NUMBER--UPDATED AT START
				;  OF EACH SOUP DEVELOPMENT CYCLE (6-BITS)
ND	A00MCO,^D14328   	;HIGHEST MCO IN THIS LOAD (26-BITS)
ND	A00CLH,0		;CUSTOMER LH (%CNVER) (18-BITS)
ND	A00DLN,0		;DEC LOAD NUMBER (6-BITS)
				; SET TO ZERO FOR ANY RELEASE, ELSE
				; 1-7 IF SOUP, 10-77 IF DEVELOPMENT
ND	A00WHO,AXXWHO		;DEC LAST EDITED (3-BITS)

AXXVER==< BYTE (18) A00CLH (12) A00MVN-IFE A00SVN,<IFN A00DLN,<1>> (6) IFGE A00DLN*<A00DLN-10>,<A00DLN>>

ND	A00VER,AXXVER		;DEFINES %CNVER

AXXDVN== BYTE (3) A00WHO (9) A00MVN (6) A00SVN (18) A00MCO

;DEFINE DAEVER TO BE THE SIXBIT NAME OF THE MONITOR VERSION IN THE
;LEFT HALF, AND THE BINARY MONITOR VERISON IN THE RIGHT HALF. THE
;SYMBOL BECOMES THE VALUE OF THE %CNDAE GETTAB WHICH DAEMON USES TO
;DETERMINE IF IT IS COMPATIBLE WITH THIS MONITOR. IF THE PROGRAM
;DECIDES IT ISN'T COMPATIBLE BY RANGE CHECKING THE RIGHT HALF, IT
;WILL USE THE LEFT HALF TO DETERMINE THE NAME OF THE PROGRAM TO RUN.
DEFINE ..CNFD(VERSION),<XWD SIXBIT \   VERSION\,VERSION>
DAEVER==..CNFD(705)

;DEFINE CTHR TO BE THE CTERM HOST REVISION STRING FOR NRTSER (AND GETTABS).
;THIS STRING IS ALWAYS EIGHT (8-BIT) BYTES IN LENGTH, AND IS OF THE FOLLOWING
;FORM:
;
;	7.03BK42
;
;WHERE THE "7.03" BYTES ARE TAKEN FROM A00MVN, THE "BK" BYTES ARE THE TRANSLATED
;FORM OF A00SVN, AND THE "42" BYTES ARE FROM A00DLN.  THE A00SVN AND A00DLN
;FIELDS WILL BE BLANKS IF THEIR VALUES ARE ZERO.

IFN M.DECN,<
CCLEAR (CTHR)			;CLEAR OUT THE STRING ACCUMULATION
CONCAT (CTHR,<BYTE (8) ">)	;START OFF THE STRING
CONCAT (CTHR,\<A00MVN/100>)	;GET FIRST DIGIT
CONCAT (CTHR,<",".",">)		;ADD THE DOT FILLER
CONCAT (CTHR,\<<A00MVN/10>&7>)	;GET THE SECOND DIGIT
CONCAT (CTHR,<",">)		;MOVE TO NEXT BYTE FIELD
CONCAT (CTHR,\<A00MVN&7>)	;GET THE THIRD DIGIT
CONCAT (CTHR,<",">)		;MOVE TO NEXT BYTE
IFN A00SVN,<
 IFG A00SVN-^D26,<
  CONCAT (CTHR,\"<<A00SVN/^D26>+"A">)	;ADD IN FIRST OF 2-CHAR MINOR VERSION
  CONCAT (CTHR,<",">)		;MOVE TO NEXT BYTE
 >
 CONCAT (CTHR,\"<A00SVN-1-<<A00SVN-1>/^D26>*^D26+"A">)	;ADD MINOR VERSION
 IFLE A00SVN,<CONCAT (CTHR,<"," >)>	;PAD IF SHORT MINOR VERSION
 CONCAT (CTHR,<",">)		;MOVE TO NEXT BYTE
> ;END OF IFN A00SVN
IFE A00SVN,<CONCAT (CTHR,< "," ",">)>	;PAD WITH SPACES IF NO MINOR VERSION
IFN A00DLN,<
CONCAT (CTHR,\<A00DLN/10>)	;ADD FIRST DIGIT OF LOAD NUMBER
CONCAT (CTHR,<",">)		;MOVE TO NEXT BYTE
CONCAT (CTHR,\<A00DLN&7>)	;ADD LAST DIGIT OF LOAD NUMBER
CONCAT (CTHR,<">)		;CLOSE THE STRING
>
IFE A00DLN,<
CONCAT (CTHR,< "," ">)		;PAD WITH SPACES IF NO LOAD NUMBER
>
				;"CTHR" STRING COMPLETE

;DEFINE THE VALUE OF THE HIGH-AVAILABILITY OPTION FOR CTERM AS WELL

IFG M.CPU-1,<XP CTHOPT,1>	;ON IF MULTI-CPU
IFLE M.CPU-1,<XP CTHOPT,0>	;OFF IF SINGLE

> ;END OF IFN M.DECN


;DEFINE THE PFH TIMER TRAP INTERVAL IN TICKS
IFNDEF	M.PFHT,<M.PFHT==:^D60>

;DEFINE DEFAULT VALUE OF DEBUGF TO STOP ON STOPCD'S DURING FIELD-TEST,
; BUT NOT TO STOP IN RELEASED VERSIONS OF MONITOR.
IFNDEF DEFDEB,<DEFDEB==0>

; DEFINE DEFAULT CPU MASK FOR EDDT.  THIS MASK INDICATES WHICH CPUS
; MAY ENTER EDDT VIA THE UNSOLICITED BREAKPOINT FACILITY.
	ZZ==<1+<ZZZ==-1>>
	REPEAT M.CPU,<ZZ==<ZZ!<DF.BP0_-<ZZZ==ZZZ+1>>>>
IFNDEF DEFBPT,<DEFBPT==ZZ>

IFNDEF BPTBIT,<XP BPTBIT,0>	;VALUE OF JS.BPT FOR NEW JOBS

;PRIV BITS TO ALLOW CHGPPN TO WORK IF ALREADY LOGGED IN
IFNDEF	CHGPPP,<CHGPPP==:0>	;DEFAULT TO ILLEGAL UNLESS LOGGED OUT

;FLAG TO INDICATE OF DUMPING IS DESIRED WHEN SYSTEM UPTIME IS .LT. 5 MINUTES
IFNDEF	ATODMP,<ATODMP==:1>		;DEFAULT TO DUMP

;ADD NEW MONGEN SYMBOLS HERE (SEE ALSO COMDEV FOR MONGEN SYMBOLS)
SUBTTL	AUTOCONFIGURATION DEFINITIONS


	EXTERN	AUTCON		;FORCE LOADING AUTOCONFIGURATION CODE

IFNDEF M.GENL,<M.GENL==20>	;NUMBER OF FREE GENTAB ENTRIES FOR
				; USE BY AUTCON
IFN M.KL10,<
IFNDEF M.FDVC,<M.FDVC==:034>	;FIRST DEVICE CODE TO SCAN
IFNDEF M.LDVC,<M.LDVC==:574>	;LAST DEVICE CODE TO SCAN
> ;END IFN M.KL10
IFN M.KS10,<
IFNDEF M.FDVC,<M.FDVC==:760000>	;FIRST UNIBUS ADDRESS TO SCAN
IFNDEF M.LDVC,<M.LDVC==:777777>	;LAST UNIBUS ADDRESS TO SCAN
> ;END IFN M.KS10
; CONTEXT SYMBOLS
IFNDEF	M.CTX,<M.CTX==:1>	;LOAD CONTEXT SERVICE BY DEFAULT


; CONSTANTS USED TO MANIPULATE CONTEXT AND JOB NUMBERS IN A JOB/CONTEXT
; HANDLE (JCH).  THE CONTEXT AND JOB MASKS MUST BE ADJACENT BYTES.

CTXMAX==:777			;ABSOLUTE MAXIMUM CONTEXTS PER JOB

CTXMSK==:<CTXMAX>B26		;MASK OF CTX #
JOBMSK==:777B35			;MASK OF JOB #
JCHMSK==:CTXMSK!JOBMSK		;MASK OF JCH #

CTXWID==<^L<-<<CTXMSK>_<^L<CTXMSK>>>-1>> ;WIDTH OF CTX # MASK
JOBWID==<^L<-<<JOBMSK>_<^L<JOBMSK>>>-1>> ;WIDTH OF JOB # MASK
JCHWID==<^L<-<<JCHMSK>_<^L<JCHMSK>>>-1>> ;WIDTH OF JCH # MASK

CTXPOS==<^L<<CTXMSK>&<-<CTXMSK>>>> ;RIGHT MOST BIT IN CTX # MASK
JOBPOS==<^L<<JOBMSK>&<-<JOBMSK>>>> ;RIGHT MOST BIT IN JOB # MASK
JCHPOS==<^L<<JCHMSK>&<-<JCHMSK>>>> ;RIGHT MOST BIT IN JCH # MASK

CTXLSH==:^D36-CTXPOS-1		;BITS TO SHIFT CTX # INTO POSITION
JOBLSH==:^D36-JOBPOS-1		;BITS TO SHIFT JOB # INTO POSITION
JCHLSH==:^D36-JCHPOS-1		;BITS TO SHIFT JCH # INTO POSITION

CTXPTR==:POINT CTXWID,,CTXPOS	;BYTE POINTER TO CTX # (OR WITH ADDR)
JOBPTR==:POINT JOBWID,,JOBPOS	;BYTE POINTER TO JOB # (OR WITH ADDR)
JCHPTR==:POINT JCHWID,,JCHPOS	;BYTE POINTER TO JCH # (OR WITH ADDR)

CTXCBP==:POINT CTXWID,,35	;BYTE POINTER TO A CONTEXT QUOTA
CTXPBP==:POINT <^D36-CTXWID>,,<^D35-CTXWID> ;BYTE POINTER TO PAGE QUOTA

CTXBPW==:^D36/CTXWID		;BYTE PER WORD IN DIRECTORY MAP
CTXMAP==:<CTXMAX/CTXBPW>+1	;SIZE OF A DIRECTORY MAP + TERMINATING NULL
CTXDIR==:POINT CTXWID,,<^D36-<^L<CTXMAX>>-1> ;BYTE POINTER TO A DIRECTORY MAP
IFN M.CTX,<

IFNDEF	M.CTXC,<M.CTXC==:^D4>	;DEFAULT CONTEXT QUOTA
IFNDEF	M.CTXP,<M.CTXP==:^D1000>;DEFAULT SAVED PAGE QUOTA
IFNDEF	M.CTXR,<M.CTXR==:M.JOB/4> ;DEFAULT RESERVED CONTEXT BLOCK COUNT
	EXTERN CTXSER		;FORCE LOADING OF CONTEXT SERVICE

> ;END IFN M.CTX

IFE M.CTX,<			;DEFINE DUMMY GLOBALS IF NOT LOADING CTXSER

CTXTAB==:NULGTB##		;GETTAB TABLE
CTXMXL==:0			;GETTAB TABLE LENGTH
CTXINI==:CPOPJ			;INITIALIZATION AT SYSINI TIME
CTXBLK==:CPOPJ1			;CONTEXT BLOCK CREATION
CTXPRT==:CPOPJ			;CONTROL-T DISPLAY
CTXLGO==:CPOPJ			;DELETE CONTEXT BLOCKS ON LOGOUT
CTXATO==:CPOPJ			;AUTO-SAVE
CTXSCD==:KCORE1##		;SCHEDULER CALL ON SWAP OUT
CTXPOP==:CPOPJ			;AUTO-RESTORE
CTXRUE==:CPOPJ			;RUN UUO ERROR RECOVERY
CTXUUO==:CPOPJ			;CTX. UUO
CTXMIG==:CPOPJ			;NO IDLE CONTEXTS TO MIGRATE
CTXMGN==:CPOPJ			;NO MORE CONTEXTS TO MIGRATE
CTXWKJ==:WAKEJ##		;LET CLOCK1 EXPIRE SLEEP REQUESTS

	$HIGH

CTXJCJ::SKIPA	T1,J		;SET TO CONTEXT 0 FOR THIS JOB
CTXNUM::TDZA	T1,T1		;CURRENT CTX IS ZERO
CTXJCH::JUMPLE	T1,CPOPJ	;NO SUCH JOB
	CAMG	T1,HIGHJB	;IN RANGE?
	AOS	(P)		;YES, RETURN GOODNESS
	POPJ	P,		;RETURN

CTXPSI::PUSHJ	P,CTXVAL	;VALIDITY CHECK
	  POPJ	P,		;NO SUCH JCH
	MOVE	T1,J		;SET TO CONTEXT 0 FOR THIS JOB
	MOVE	T2,JBTPIA(J)	;GET PIT FOR JOB
	JRST	CPOPJ1		;RETURN

CTXVAL::JUMPLE	J,CPOPJ		;NO SUCH JOB
	CAMG	J,HIGHJB	;IN RANGE?
	AOS	(P)		;YES, RETURN CURRENT
	POPJ	P,		;NO, RETURN NONESUCH

CTXIPC::MOVE	J,T1		;SET TO CONTEXT 0 FOR THIS JOB
	PUSHJ	P,FNDPDB##	;FIND THE PDB
	  POPJ	P,		;NO SUCH JOB
	XMOVEI	W,.PDIPC(W)	;POINT TO IPCF DATA BLOCK
	JRST	CPOPJ1		;RETURN

CTXENQ::MOVE	J,T1		;SET TO CONTEXT 0 FOR THIS JOB
	PUSHJ	P,FNDPDB##	;FIND THE PDB
	  POPJ	P,		;NO SUCH JOB
	MOVE	T2,.PDEQJ(W)	;GET ADDR OF QUEUE CHAIN
	JRST	CPOPJ1		;RETURN

CTXJPK::PUSHJ	P,CTXVAL	;VALIDITY CHECK
	  POPJ	P,		;NO SUCH JCH
	MOVE	T1,J		;SET TO CONTEXT 0 FOR THIS JOB
	MOVE	T2,JBTSWP(J)	;GET DISK ADDRESS
	JRST	CPOPJ1		;RETURN

CTXSGN::PUSHJ	P,CTXJCH	;VALIDITY CHECK
	  POPJ	P,		;NO SUCH JCH
	HRRZ	T1,JBTSGN(T1)	;GET JBTSGN
	JRST	CPOPJ1		;RETURN

CTXWAK::PUSHJ	P,WAKJOB##	;WAKE JOB UP
	JRST	CPOPJ1		;RETURN

CTXCMD::
PSHCMD::
POPCMD::JSP	T1,ERRMES##	;CAN'T DO THESE IF CONTEXT SERVICE NOT LOADED
	ASCIZ	/Job contexts not supported/

	$ABS

> ;END IFE M.CTX
SUBTTL COMPUTE SPECIAL SYMBOLS

SEGN=JOBN+SEGN

IFN M.KL10,<

XP EBCPT,10000		;KL10 EBOX CLOCK DOES THIS MANY COUNTS PER EBOX TICK
XP MBCPT,10000		; MBOX CLOCK DOES THIS MANY COUNTS PER MBOX TICK
>;END IFN M.KL10
SUBTTL ABSOLUTE LOCATIONS IN LOWER MEMORY

;DATA STARTING AT 140:

	LOC	41
	JSR	LUUOPC
	LOC	ARSLOC
	HALT	.
	LOC	KAFLOC
	HALT	.
IFN M.KL10,<
	LOC	WRSINS
	HALT	.
>

;SET JOBVER TO SYSTEM VERSION

	LOC	136
	A00CVN			;(136) CUSTOMER
	AXXDVN			;(137) DEC


	COMORG=140		;ORIGIN OF COMMON IS 140
	LOC	COMORG		;MAKE LISTING BE SAME AS LOADING SO IT WILL BE EASY
				; TO EXAMINE SYSTEM LOCATIONS WITH CONSOLE SWITCHES
				; WITHOUT NEEDING A STORAGE MAP

	SYSDSP=:400		;FIRST STARTING LOCATION OF MONITOR

;LOWER CORE FROM 140 UP THRU 410 (START LOCATIONS):
ASCIZ /
THIS SOFTWARE IS FURNISHED UNDER LICENSE AND MAY BE USED
OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.

COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1969,1990.
ALL RIGHTS RESERVED.
/
SUBTTL	EXECUTIVE PROCESS TABLE(S)

	DEFINE	EPT(N)<

.E'N'EPT::			;ADDRESS OF EXECUTIVE PROCESS TABLE FOR CPU'N'
	.E'N'MP==:.E'N'EPT	;FOR THOSE WHO CAN'T REMEMBER THE NEW NAME

IFN M.KL10,<
	LOC	.E'N'EPT+.EPLGO
	BLOCK	40		;LOGOUT AREAS FOR INTERNAL CHANNELS
>;END IFN M.KL10

	LOC	.E'N'EPT+.EPUUO
	IOP			;CAUSE AN IOP STOPCD IF A DEVICE INTERRUPTS
				; TO 40
	JSR	LUUOPC		;LUUO HANDLER

	LOC	.E'N'EPT+.EPPII	;STANDARD PRIORITY INTERRUPT INSTRUCTIONS
	ZZ==10*N
REPEAT 7,<
	ZZ==ZZ+1
	INTINS	\ZZ		;NON-VECTORED INTERRUPT LOCATIONS
				; (INTINS GENERATES TWO WORDS PER PI CHANNEL)
>; END REPEAT 7

IFN M.KL10,<
	LOC	.E'N'EPT+.EPCFW	;LOCS USED BY RH20 FOR ZERO-FILL
	0
	0
	0
	0
>;END IFN M.KL10

IFN M.KS10,<
	LOC	.E'N'EPT+.EPVIT	;POINTERS TO UBA INTERRUPT VECTOR TABLES
	VC'N'TB1		;UBA 1
	0			;UBA 2
	VC'N'TB3		;UBA 3
	0			;UBA 4
>;END IFN M.KS10

IFN M.KL10,<
	LOC	.E'N'EPT+.EPDTM	;SCRATCH BUFFER FOR GET DATE/TIME
.E'N'DTM::BLOCK	3		;CAN BE ANYWHERE IN EPT

	LOC	.E'N'EPT+.EPDCB	;START OF DTE0 HARDWARE LOCATIONS
.E'N'DCB::BLOCK	^D8*4		;8 WORDS FOR EACH OF 4 DTE20S
>;END IFN M.KL10

	LOC	.E'N'EPT+.EPETL	;EXEC TRAPS
	JFCL			;ARITHMETIC TRAP
	EXP	SEPDLO##	;PUSH DOWN OVERFLOW TRAP
	JSR	TRP3PC		;TRAP 3 TRAP

IFN M.KS10,<
	LOC	.E'N'EPT+.EPHSB
.E'N'HSB::BLOCK	^D18		;HALT STATUS BLOCK AREA
>; END IFN M.KS10

IFN M.KL10,<
	LOC	.E'N'EPT+.EPDDG	;DTE AREA
.E'N'STD:JRST	DEBUG##		;DIAGNOSTIC START
.E'N'DDT:XCT	SYSDDT		;DDT START
.E'N'STL:XCT	SYSCRH		;LOADER START ADDRESS (BOOTS)
.E'N'STM:XCT	SYSDSP		;START MONITOR

	LOC	.E'N'EPT+.EPDSC	;SECONDARY PROTOCOL DTE CONTROL BLOCK AREA
.E'N'DSC::BLOCK	^D11		;(MASTER FRONT-END ONLY)

	LOC	.E'N'EPT+.EPTMB
.E'N'TMB::BLOCK	2		;TIME BASE WORD
.E'N'PAC::BLOCK	2		;PERFORMANCE COUNTER WORD

	LOC	.E'N'EPT+.EPTII
.E'N'TII::XPCW	TM'N'INT
>;END IFN M.KL10

	LOC	.E'N'EPT+.EPSTB
.E'N'STB::
	EXP	<PM.DCD>B2+PM.WRT+PM.CSH+.E'N'MAP/PAGSIZ
IFN FTXMON,<
	EXP	<PM.DCD>B2+PM.WRT+PM.CSH+.E'N'MAP/PAGSIZ
	EXP	<PM.DCD>B2+PM.WRT+PM.SWB+PM.CSH+<.E'N'MP1/PAGSIZ>
	BLOCK	^D31-<.-.E'N'STB>
	EXP	<PM.DCD>B2+PM.WRT+PM.CSH+<.C'N'MMA/PAGSIZ>
>; END IFN FTXMON

IFN M.KL10,<
;GENERATE TABLE OF CONSTANTS USED BY KL10 MICROCODE FOR OWGBP

	LOC	.E'N'EPT+.EPOWG
.E'N'OWGP:
	EXP	440606360607
	EXP	300610220611
	EXP	140612060613
	EXP	000646441015
	EXP	341016241017
	EXP	141020041055
	EXP	440722350723
	EXP	260724170725
	EXP	100726010762
	EXP	441130331131
	EXP	221132111133
	EXP	001170442235
	EXP	222236002275
	EXP	000000000000
	EXP	464750515253
	EXP	626364656600
	EXP	555657600000
	EXP	707172730000
	EXP	757600000000
>;END IFN M.KL10
;SECTION 0/1 MAP

	LOC	.E'N'EPT+PAGSIZ
.E'N'MAP::

;LOW SEGMENT MAPPING
DEFINE	ONE41,<
	EXP	<PM.DCD>B2+PM.WRT+PM.PUB+<IFE <M.CPU-1>,<ZZCSH>>+ZZ
	ZZCSH==PM.CSH
	ZZ==ZZ+1
>
	ZZ==0
IFN M.KS10,<ZZCSH==0>		;ON KS10, DON'T CACHE PAGE 0
IFE M.KS10,<ZZCSH==PM.CSH>	;OTHERWISE, DO
	XLIST
	REPEAT	CSBORG/PAGSIZ,<ONE41>	;TRADITION HASN'T IT
	LIST

;COMMON SUBROUTINES/HIGH SEGMENT MAPPING
DEFINE	ONE41,<
	EXP	<PM.DCD>B2+PM.WRT+PM.PUB+PM.CSH+ZZ
	ZZ==ZZ+1
>
	LOC	.E'N'MAP+CSBORG/PAGSIZ
	ZZ==CSBORG/PAGSIZ
	XLIST
	REPEAT	<FYSORG-CSBORG-EVAPGS*PAGSIZ>/PAGSIZ,<ONE41>
	LIST

;FUNNY SPACE MAPPING
DEFINE	ONE41,<
	EXP	<PM.ICD>B2+PM.WRT+PM.PUB+PM.CSH+<ZZ+.UMORG>B17+N
	ZZ==ZZ+1
>
	LOC	.E'N'MAP+FYSORG/PAGSIZ
	ZZ==0
	XLIST
	REPEAT	PAGSIZ-<FYSORG/PAGSIZ>,<ONE41>
	LIST

	LOC	.E'N'MAP+PAGSIZ	;GET TO END OF THE MAP

;SECTION 2 MAP

IFN FTXMON,<
	LOC	.E'N'EPT+<2*PAGSIZ>
.E'N'MP1::
DEFINE	ONE41,<
	EXP	<PM.DCD>B2+PM.WRT+<IFE <M.CPU-1>,<PM.CSH>>+ZZ
	ZZ==ZZ+1
>
	ZZ==MS.HGH/PAGSIZ	;BOOT READ THIS IN 1:1
	XLIST
	REPEAT	CSBORG/PAGSIZ,<ONE41>	;MAKE SECTION MAP 1:1
	LIST

DEFINE	ONE41,<
	EXP	<PM.ICD>B2+PM.WRT+PM.PUB+PM.CSH+PM.SWB+<ZZ+.UMORG>B17+N
	ZZ==ZZ+1
>
	LOC	.E'N'MP1+FYSORG/PAGSIZ
	ZZ==0
	XLIST
	REPEAT	PAGSIZ-<FYSORG/PAGSIZ>,<ONE41>
	LIST

	LOC	.E'N'MP1+PAGSIZ
>; END IFN FTXMON
>;END DEFINE EPT
DEFINE	INTINS(X)<
	XPCW	CH'X		;DISPATCH TO START OF CONSO SKIP CHAIN
IFN M.KL10,<IOP>		;CAUSE AN IOP STOPCODE IF BLKO INTERRUPT
IFN M.KS10,<JSR	PIERR##>	;SHOULDN'T GET A BLKO ON THE KS
>; END DEFINE INTINS

;NOW GENERATE EPT'S

IFN M.KL10,<
	LOC	1000		;START AT PAGE 1 (RESERVE PAGE 0 FOR IOWD SPACE)
>
IFN M.KS10,<
	LOC	2000		;START AT PAGE 2 (FE USES PAGE 1 FOR SOFT CRAM
				; PARITY ERROR RECOVERY)
>

IFN XPANDN,<LALL>

	ZZ1==0

REPEAT M.CPU,<
	EPT(\ZZ1)
	ZZ1==ZZ1+1
>; END REPEAT M.CPU

IFE M.CPU-1,<
EPTDIF==:0
>
IFG M.CPU-1,<
EPTDIF==:.E1MAP-.E0MAP
>

	LOC	777000&<.+PG.BDY>	;ROUND UP TO NEXT PAGE BOUNDARY
NLUPMP::			;NULL JOB USER PROCESS TABLE/PAGE MAP GOES HERE
	SUBTTL INITIALIZATION DISPATCH TABLE, STARTING AT LOCATION 400

	LOC	SYSDSP		;ORIGIN START LOCATIONS TO 400

SYSDSP::XJRST	[MCSEC0+SYSTRT]	;(400) INITIALIZE SYSTEM VARIABLES IF CPU0
SYSDDT::XJRST	[MCSEC0+ENTDDT]	;(401) ENTER EXEC DDT
	HALT	.		;(402)
	HALT	.		;(403)
	XJRST	[MCSEC0+STPALL]	;(404) SET CRSHWD TO -1 AND DO A 406
				;  START TO STOP ALL OTHER CPU'S AND
				;  GET TO BOOTS.  MOSTLY FOR DEBUGGING.
	XJRST	[MCSEC0+STPCPU]	;(405) STARTING THE BOOT CPU AT 405 IS THE SAME
				;  AS A 407 START.  ON ALL OTHER CPUS, A 405
				;  START WILL CAUSE THE CPU TO SAVE THE
				;  MACHINE STATE AND JUMP INTO THE AC'S UNTIL
				;  MANUALLY RESTARTED THROUGH 400.
	XJRST	[MCSEC0+STPLDB]	;(406) SET SR.LBH IN .CPSBR AND DO A 407
				;  START TO FORCE BOOTS TO BE LOADED ON
				;  THIS CPU REGARDLESS OF WHO IS THE BOOT
				;  CPU NOW
SYSCRH::XJRST	[MCSEC0+SYSTOP]	;(407) MONITOR CRASH AND RELOAD LOCATION

;START ABSOLUTE LOCATIONS HER TO BE PUBLISHED FOR USERS( UP TO 417)


ABSTAB::EXP	NUMTAB##	;(410) ABSOLUTE LOCATION OF GETAB TABLE TABLE.
				; USED TO BE LOC 151. NEEDED TO DO GETTAB UUO
				; SIMULATION ON A CRASHED MONITOR.
MBTCOM::EXP	0		;(411) ABSOLUTE LOCATION USED FOR MONBTS COMMUNICATION
				;(417) CUSTOMER WORD
	LOC	420		;SKIP RESERVED SPACE
SUBTTL	(NULL JOB AND) USER PROCESS TABLE(S)

;REDEFINE ONE41 FOR GENERATION OF THE NULL JOB'S MAP

DEFINE	ONE41,<
	EXP	<PM.DCD>B2+PM.WRT+PM.PUB+ZZ
	ZZ==ZZ+1
>

	NUPMPP==:NLUPMP/PAGSIZ	;NULL JOB'S UPT PAGE NUMBER

	LOC	NLUPMP+0

	LOC	NLUPMP+.UMORG
NUPPPM::			;PER-PROCESS MAPPING
	ZZ==FYSORG/PAGSIZ
	XLIST
	REPEAT	<.UPMAP/PAGSIZ>-<FYSORG/PAGSIZ>,<ONE41>
	LIST

	LOC	NLUPMP+.UPTVC
NUPPMT::			;USER TRAPS
	EXP	0		;(420) PAGE FAIL WORD (USER OR EXEC)
	JFCL	SAROVF##	;(421) ARITHMETIC TRAP
	EXP	SEPDLO##	;(422) PUSH DOWN LIST OVERFLOW TRAP
	JFCL			;(423) TRAP 3 TRAP
	EXP	0		;(424) MUUO STORED HERE
	EXP	0		;(425) MUUO PC STORED HERE
	EXP	0		;(426) PROCESS CONTEXT WORD
IFE FTXMON,<
	EXP	0		;(427) UNUSED
>; END IFE FTXMON
IFN FTXMON,<
	EXP	LG.LAB+LG.LPC+1B8+1B11 ;(427) LOAD AC BLOCKS AND SET PCS
				; TO DO A USERAC AND LOAD PCS=0 FOR NULL JOB
>; END IFN FTXMON
	EXP	MUUO		;(430) KERNEL NO TRAP MUUO NEW PC
	EXP	KTUUO		;(431) KERNEL TRAP MUUO NEW PC
	EXP	SNTUUO		;(432) SUPERVISOR NO TRAP MUUO NEW PC
	EXP	STUUO		;(433) SUPERVISOR TRAP MUUO NEW PC
	EXP	MUUO		;(434) CONCEALED NO TRAP MUUO NEW PC
	EXP	CTUUO		;(435) CONCEALED TRAP MUUO NEW PC
	EXP	MUUO		;(436) PUBLIC NO TRAP MUUO NEW PC
	EXP	PTUUO		;(437) PUBLIC TRAP MUUO NEW PC

	LOC	NLUPMP+.UPPFW	;GET TO PAGE FAIL WORD
	EXP	0		;(500) PAGE FAIL WORD
	EXP	0		;(501) PAGE FAIL OLD FLAGS/PC DOUBLEWORD
	EXP	0		;(502) ...
	EXP	SEILM##		;(503) PAGE FAIL NEW PC
NUPMPL==:.-NLUPMP

;HARDWARE LOCATIONS
;504 - 507 EBOX/MBOX METERS
;510 - 537 RESERVED

	LOC	NLUPMP+SECTAB
NULSTB::			;SECTION TABLE ORIGIN
	EXP	<PM.DCD>B2+PM.PUB+PM.WRT+NLUPMP/PAGSIZ
	BLOCK	^D31		;RESERVE THE REST

;SOFTWARE LOCATIONS

.USPAT=:.USPAT			;FORCE DEFINITION FROM S

NULASW==:NLUPMP+PAGSIZ		;FIRST LOC AVAIL TO SOFTWARE
	LOC	NULASW
SUBTTL	EXECUTIVE UUO DISPATCHERS

	$HIGH

KTUUO:	JRST	@.USMUE		;E FIELD OF THE MUUO IS TRAP HANDLER ADDRESS
				; N.B., USRIOT ISN'T ON

SNTUUO:	HALT	.		;NOT IMPLEMENTED
STUUO:	HALT	.		;NOT IMPLEMENTED
CTUUO:
PTUUO:
	EXECAC
	HRLZ	T1,.USMUO
	IOR	T1,.USMUE
	JUMPL	T1,ILLTIN##

	CAILE	T1,UP.MLT
	JRST	ILLTIN##
	JRSTF	@UUTDSP(T1)
UUTDSP:	IC.UOU+SEILM##		;PAGE FAULT
	IC.UOU+ILLTIN##		;NOT IMPLEMENTED
	IC.UOU+SEPDLO##		;PUSH DOWN LIST OVERFLOW
	IC.UOU+ILLTIN##		;TRAP 3
	IC.UOU+SUILMX##		;USER ENABLED PAGE FAULT
	IC.UOU+SAROVF##		;USER ENABLED ARITHMETIC OVERFLOW
	IC.UOU+SUPDLO##		;USER ENABLED PDL OVERFLOW
	IC.UOU+ILLTIN##		;NOT IMPLEMENTED
	IC.UOU+ILLTIN##		;NOT IMPLEMENTED
	IC.UOU+PSIAPR		;PSI ENABLED ARITHMETIC OVERFLOW
	$ABS
LUUOPC::0			;JSR HERE ON A LUUO IN EXEC MODE
	EXCH	T1,LUUOPC
	MOVEM	T1,.USMUP
	JRST	UUOERR##
TRP3PC:	0			;JSR HERE ON A TRAP 3 IN EXEC MODE
	HALT	.
SUBTTL	SOME DEFINITIONS FOR KL10'S
IFN M.KL10,<
KLRELC==.
	LOC	420
	IFN	./2*2-.,<0>	;MAKE SURE THEY START ON EVEN LOCATION
FREORG:	BLOCK	1000-.		;ICCW BLOCKS
FRE4LN==<.-FREORG>/4		;NUMBER OF 4-WORD BLOCKS

	LOC	KLRELC
>;END IFN M.KL10
SUBTTL	KS10 UBA INTERRUPT VECTOR TABLES

IFN M.KS10,<
;TABLES FOR DISPATCHING 11-STYLE VECTORED INTERRUPTS FROM THE
;KS10'S UNIBUS ADAPTORS. INITIALLY SET TO ZEROS.
;APPROPRIATE LOCATIONS WILL BE SET UP BY THE DEVICE SERVICE ROUTINES.
;MACRO TO GENERATE THE INTERRUPT VECTOR TABLES

DEFINE	GENVCT(N),<
VC'N'TB1::			;UBA 1 VECTOR TABLE
XLIST
REPEAT ^D128,<0>
LIST
VC'N'TB3::			;UBA 3 VECTOR TABLE
XLIST
REPEAT ^D128,<0>
LIST
>; END DEFINE GENVCT

;NOW GENERATE THE TABLES (ONE PER CPU (HA!))

	N==0			;START WITH CPU0
REPEAT M.CPU,<			;ONCE PER CPU
	GENVCT	(\N)
	N==N+1			;NEXT CPU
>; END REPEAT M.CPU
>;END IFN M.KS10
SUBTTL	VIRTUAL MEMORY DATA

EVTABL==^D512/^D36+1
EVBMAX::0			;FILLED IN BY SYSINI
EVBTAB::BLOCK	EVTABL

ALPHA==1			;FRACTIONAL PART OF TIME CONSTANT
EXPON==^D10			;NEGATIVE EXPONENT OF TIME CONSTANT
.GTVM::
SWPCNT::0			;(0)
SCNCNT::-1			;(1)
SPRCNT::0			;(2) COUNT OF SWAPS + PAGE OPERATIONS IN PROGRESS
				;  (SQREQ IS ONLY SWAPS)
SLECNT::0			;(3) TOTAL NUMBER OF SWPLST ENTRIES
VMTOTL::0			;(4) TOTAL AMOUNT OF VM CURRENTLY IN USE
VMCMAX::0			;(5) MAX ALLOWABLE VALUE OF VMTOTL
VMRMAX::1			;(6) OBSOLETE
VMCNST::ALPHA			;(7) CONSTANT USED TO COMPUTE SWAPPING RATE
VMQJOB::0			;(10) OBSOLETE
JBRMAX::RTUPS/^D10		;(11) OBSOLETE
LSFTIM::0			;(12) TIME OF LAST FAULT
SYSVCT::0			;(13) TOTAL NUMBER OF PAGE FAULTS (OBSOLETE)
	EXP	SWPLST		;(14) LCTN OF SWAP TABLE #1
	EXP	SW2LST		;(15) LCTN OF SWAP TABLE #2
	EXP	SW3LST		;(16) LCTN OF SWAP TABLE #3
VMCEXP::EXPON			;(17) TIME CONSTANT EXPONENT
VMCDIF::EXPON-ALPHA		;(20)
MAXINT::777777			;(21) MAX INTERVAL FOR FAULT-RATE CALCULATION (ABOUT 8 SEC. BETWEEN FAULTS)
IPCCNT::0			;(22) COUNT OF IPCF PAGES BEING SWAPPED OUT
	EXP	.UPJOB	 	;(23) OFFSET OF JOB NUMBER IN UPMP
	EXP	.UPREL		;(24) OFFSET OF END OF LOW SEG IN UPMP
	EXP	.UPLST		;(25) OFFSET OF POINTER TO SWAPABLE
	EXP	.UPMP		;(26) VIRTUAL ADDRESS OF PAGE MAP
	EXP	.UPLNM		;(27) OFFSET OF POINTER TO LOGICAL NAMES
SINCNT::0			;(30) NUMBER OF SWAP INPUT REQUESTS IN SWPLST
	EXP	CSBORG-1	;(31) HIGHEST "UNMAPPED" EXEC ADDRESS
	EXP	.FPPP		;(32) START OF "PER PROCESS" ADDRESS SPACE
	EXP	.LPPP		;(33) END (+1) OF "PER PROCESS" ADDRESS SPACE
	EXP	.JDAT		;(34) "PER PROCESS" ADDRESS OF USER JOBDAT
	EXP	.UPFCC		;(35) OFFSET IN UPMP FOR TMPCOR POINTERS
	EXP	.UPCTA		;(36) OFFSET IN UPMP FOR EXTENDED CHANNEL TABLE POINTER
	EXP	USRJDA		;(37) OFFSET IN UPMP FOR USRJDA
RMCMAX::0			;(40) "REAL" MAXIMUM VALUE OF CORMAX
				;(ADJUSTED FOR FUNNY SPACE)
SYSWLF::0			;(41) SYSTEM WIDE COUNT OF PAGE FAULTS DUE TO
				; WRITES INTO WRITE LOCKED PAGES (TO KEEP TRACK
				; OF MODIFIED PAGES - NOT UWPOFF PAGES)
SYSIWS::0			;(42) SYSTEM "IN WORKING SET" FAULTS
SYSNIW::0			;(43) SYSTEM "NOT IN WORKING SET" FAULTS
	EXP	MS.MEM+PAGTAB	;(44) ADDRESS OF PAGTAB
	EXP	MS.MEM+PT2TAB	;(45) ADDRESS OF PT2TAB
	EXP	MS.MEM+MEMTAB	;(46) ADDRESS OF MEMTAB
EVMPTR::XWD	-EVTABL,EVBTAB	;(47) AOBJN POINTER TO EVM TABLE
PAGPTR::0			;(50) HEAD OF FREE QUEUE
PAGINQ::0			;(51) HEAD OF THE "IN" PAGE QUEUE
PAGINC::0			;(52) COUNT OF PAGES IN THE "IN" QUEUE
PAGSNQ::0			;(53) HEAD OF THE SLOW SWAPPING "IN" PAGE QUEUE
PAGSNC::0			;(54) COUNT OF PAGES IN THE SLOW "IN" QUEUE
PAGIPQ::0			;(55) HEAD OF THE "IN PROGRESS" PAGING QUEUE
PAGIPC::0			;(56) COUNT OF PAGES IN "IP" QUEUE
PAGOUQ::0			;(57) HEAD OF THE "OUT" PAGE QUEUE
PAGOUC::0			;(60) COUNT OF PAGES IN THE "OUT" QUEUE
LOKPTR::0			;(61) HEAD OF LOKCON'S QUEUE
LOKHOL::0			;(62) COUNT OF PAGES IN LOKCON'S QUEUE
LOKTAL::0			;(63) LOKCON'S VERSION OF CORTAL
GTVMXL==:<.-.GTVM-1>B26		;MAXIMUM ENTRY IN GETTAB
SUBTTL	IOWD SPACE ALLOCATION

IFN M.KL10,<
NPAGUC==^D512
IFL <2*M.NKC-^D512>,<NPAGUC==2*M.NKC>
IFNDEF XTR4WD,<XTR4WD==<<NPAGUC+3>/4-<FRE4LN>>>
LTINIT::
IFG FRE4LN,<XWD	FRE4LN,FREORG>
IFG XTR4WD,<XWD	XTR4WD,X4WORG>
	0		;END OF LTINIT XWD'S

XP X4WORG,<<.-1>/4*4+4>
	LOC	X4WORG
IFG XTR4WD,<BLOCK 4*XTR4WD>
IOWNUM==.-FREORG

NOIOWD::EXP	FRE4LN+XTR4WD ;NUMBER OF FREE IOWD BLOCKS

DF10ZR::EXP	0		;GUARANTEED ZERO FOR TERMINATING DF10C CCLS
>;END IFN M.KL10

XP CHKSHF,CPOPJ
XP UPMPSZ,1
XP UPMSZW,PAGSIZ*UPMPSZ
	SUBTTL	COMMON MEMORY FOR KDP (KMC-11/COM-IOP/DUP-11) & DMR11

;NOTE: TO AVOID WASTING SPACE THE VALUE OF "XTR4WD" ON
;  THE LAST PAGE CAN BE ADJUSTED.

;NOTE: KDL PAGES ARE BOTH AS BUFFERS AND COMM REGIONS.  SINCE THEY
;  ARE MAPPED BY THE UBA, IT IS ASSUMED THAT THEY CAN BE TRASHED
;  BY AN ERRANT UNIBUS DEVICE.  FOR THIS REASON, THEY ARE NOT STATICALY
;  INITIALIZED.  INSTEAD, THERE IS CODE IN THE KDP UUO SERVICE
;  TO CLEAR OUT AND INITIALIZE A KDL PAGE.

IFNDEF M.KDUP,<M.KDUP==0>	;MAKE SURE M.KDUP IS DEFINED
IFNDEF M.DMRN,<M.DMRN==0>	;Do the same for DMRs
IFE M.KDUP+M.DMRN,<		;IF NO KMC/DUP-11S THEN
	KDLFST==:0		;  DEFINE THESE TWO SYMBOLS
	KDLLST==:0		;  TO KEEP SYSINI HAPPY
>
IFN M.KDUP+M.DMRN,<		;ONLY ALLOCATE PAGES IF WE HAVE KDP'S or DMRs
	BLOCK	<PAGSIZ-<.&PG.BDY>> ;GO TO A PAGE BOUNDARY
	KDLFST=:.		;DEFINE SYMBOL = TO FIRST LOC OF FIRST PAGE
	BLOCK	KDLLEN * M.KDUP	;ALLOCATE SPACE FOR THE I/O BUFFERS
	BLOCK	PAGSIZ * M.DMRN * DMRPPL ;Allocate space for DMR11 comm region
	KDLLST=:.-1		;REMEMBER LAST ADDRESS USED.
>				;END M.KDUP

	DEFINE KDLDEF(N,V),<	;;MACRO TO DEFINE KDL'N'PG SYMBOLS
	KDL'N'PG=:KDLFST+V
	  ZZZ==.
	  LOC KDL'N'PG+KDLUSR
	  EXP M.'N'KDP
	  LOC ZZZ
>

ZZ=0
Z=0

REPEAT M.KDUP,<
	KDLDEF(\Z,\ZZ)		;DEFINE THE NEXT SYMBOL
	Z=Z+1			;STEP THE KDL INDEX
	ZZ=ZZ+KDLLEN		;STEP THE PAGE ADDRESS
>;END REPEAT

;Do DMRs too
	DEFINE DMRDEF(N,V),<	;;MACRO TO DEFINE DMR'N'PG SYMBOLS
	DMR'N'PG=:KDLFST+V>

Z=0
REPEAT M.DMRN,<
	DMRDEF(\Z,\ZZ)
	Z=Z+1
	ZZ=ZZ+<DMRPPL*1K>
>;End REPEAT (Note the DMRs start after KDPs)
	SUBTTL	COMMON MEMORY FOR PDP10/PDP11

;NOTE: TO AVOID WASTING SPACE BEFORE THE FIRST DL10 WINDOW
;  THE VALUE OF "XTR4WD" ON THE LAST PAGE CAN BE ADJUSTED.

IFN	PDP11N,<
;;THIS MACRO BUILDS THE DL10 MAP FOR A GIVEN PORT.
DEFINE	BLDM76(CPU,PORT),<

;;COMPUTE THE SIZE OF THE MAP
	DEFINE	WORD(A,B),<A==ZZ	;;DEFINE THE OFFSET
	XP	DLX'A,ZZ	;DEFINE GLOBAL SYMBOL
	ZZ==ZZ+1>
	DEFINE	DATA(A,B),<A==ZZ	;;DEFINE THE OFFSET
	XP	DLX'A,ZZ	;DEFINE GLOBAL SYMBOL
	ZZ==ZZ+1>
	DEFINE	PNTR(A,B),<A==ZZ	;;DEFINE THE OFFSET
	XP	DLX'A,ZZ	;DEFINE GLOBAL SYMBOL
	ZZ==ZZ+1>
	DEFINE	BLK(A,B),<
	XP DLX'A,ZZ			;DEFINE GLOBAL SYMBOL
	ZZ==ZZ+B>

;;SIZE OF TO -10 AND TO -11 QUEUES
	TTBS'PORT==:<<M.D7'PORT'N!7>+1>*2
	TEBS'PORT==:<<M.D7'PORT'N*2>!17>+21

;;EXPAND MAP76 TO SEE HOW BIG IT IS
	ZZ==0
	MAP76(CPU,PORT)
REPEAT ^D18,<ZZ==ZZ!<ZZ_<-1>>>

	ZZ==ZZ!<<DLX8K*777>!77>  ;MUST BE BIG ENOUGH
IFN M.DC75,<ZZ=ZZ!177>		;MIN OF 128 WORDS IF MAY BE DC75

	LOC	<<.-1>!ZZ>+1	;LOC TO BEGINNING OF WINDOW
	ZZ==ZZ_<-<6+<3*DLX8K>>>	;SIZE OF BLOCK
	M7'PORT'END==<<<<ZZ+1>_<DLX8K*3>>*^D64>+.-1>
IFN ZZ&777760 <PRINTX ?DL10 MAPPED AREA IS TOO LARGE.>
	XP	M7'PORT'BAM,ZZ	;DL10 WINDOW MASK
	ZZ=ZZ*4			;SHIFT TO PROPER PLACE
	ZZ=ZZ+<PORT&3>		;MASK OUT OVEERFLOW IN PORT

;;NOW LAY OUT THE MAP FOR REAL
DEFINE	WORD(SYM),<
M7'PORT''SYM::	0
>

DEFINE	DATA(SYM,THING),<
IF2,< IFNDEF THING,<EXTERNAL THING>>
M7'PORT''SYM::	THING
>

DEFINE PNTR(SYM,PLACE),<
IF2,< IFNDEF PLACE,<EXTERNAL PLACE>>
M7'PORT''SYM::	<61B5>+PLACE
>

DEFINE BLK(SYM,SIZE),<
M7'PORT''SYM::	BLOCK	SIZE
>

IFNDEF DLXFST,<DLXFST==:.>		;START OF DL10 UNCACHED SPACE

.DL'CPU'PORT'B::	;;FIRST ADDRESS IN COMMON MEMORY
	MAP76(CPU,PORT)
> ;END DEFINITION OF BLDM76
IFN	XPANDN,<LALL>			;EXPAND LISTING IF WANTED FROM MONGEN
	ZZD78L==0			;LINE NUMBER CONCATENATOR

;THIS MACRO USES THE "MAP78" MACRO TO ACTUALLY BUILD THE
;THE WINDOW.  IT CALLS "MAP78" TO FIRST CALCULATE THE WINDOW
;SIZE AND THEN IT CALLS "MAP78" AGAIN TO ACTUALLY BUILD THE
;THE DAS78 WINDOW.
;
DEFINE	BLD78	(CPU,PORT),<

IFN <M'CPU'PORT'D78>,<			;ONLY BUILD IF THERE IS LINES ON PORT

;THESE MACRO'S ARE USED FOR COMPUTING THE SIZE OF THE MAP
;
DEFINE	Q78BLK(A),<
	ZZD78A==ZZD78A+A>
;
DEFINE Q78WRD(A),<
	ZZD78A==ZZD78A+1>
;
DEFINE	Q78DAT(A,B),<
	ZZD78A==ZZD78A+1>
;
DEFINE	Q78SYM(A,B),<
	;A>
DEFINE	Q78INC(A,B),<
	;A==A+B>
;END OF MACRO'S THAT DETERMINE MAP SIZE

	ZZD78A==0			;START WITH 0

IFNDEF	M78FPO,<M78FPO==:PORT>		;FIRST PORT INUSE BY DAS78.
	M78HPO==:PORT			;FIGURE HIGHEST DAS78 PORT.

;CALL MAP78 TO CALCULATE WINDOW SIZE
;
	MAP78	(CPU,PORT)

	ZZD78A==<ZZD78A-1>		;ADJUST TO LAST USED LOCATION

REPEAT ^D18,<ZZD78A==ZZD78A!<ZZD78A_<-1>>>

	ZZD78A==<ZZD78A!<<M78M8K*777>!77>>	;MAKE BIGGER IF 8K DL10

IFN	<.&ZZD78A>,<
	LOC	<.!ZZD78A>+1
>;END IFN <.&ZZD78A>

	ZZD78A==<ZZD78A_<-<6+<3*M78M8K>>>>	;SIZE OF BLOCK
	M8'PORT'END==<<<<ZZD78A+1>_<M78M8K*3>>*^D64>+.-1>

IFN	<ZZD78A&777760>,<PRINTX ?DAS78 DL10 MAPPED AREA TOO LARGE.>
	M8'PORT'BAM==<ZZD78A*4>		;SHIFT TO CORRECT PLACE FOR BASE ADR MASK
DEFINE	Q78BLK(A),<
	BLOCK	A>

DEFINE	Q78WRD(A),<
	A::!Z>

DEFINE	Q78DAT(A,B),<
	A::!B>

DEFINE	Q78SYM(A,B),<
	A'B::>
DEFINE	Q78INC(A,B),<
	A==A+B>
;CALL MAP78 NOW TO ACTUALLY BUILD THE WINDOW
;
.DL'CPU'PORT'B::
	MAP78	(CPU,PORT)

	M78NUM==:<-<M78HPO-M78FPO+1>>	;MINUS NUMBER OF POSSIBLE PDP11'S


	LOC	<M8'PORT'END>+1

>;END OF IFN M'CPU'PORT'D78
>;END OF DEFINITION OF BLD78
; CALCULATE WINDOW SIZE AND BUILD THE PDP11 WINDOW
;
DEFINE	MAPIT	(P),<
	IFN TP.DL'P,<
		IFE M0'P'D78,<BLDM76(0,P)>
		IFN M0'P'D78,<BLD78(0,P)>
	> ;;END IFN TP.DL'P
> ;END MAPIT


ZZZ=0			;FIRST PORT
	REPEAT	10,<
	IFLE	<ZZZ-3>,<
IFNDEF	DLX08K,<DLX08K==0	;;ASSUME JUMPERED FOR 1K MAXIMAL>
IFN	DLX08K,<DLX08K==1	;;FORCE TO 1 IF NOT ZERO>
DLX8K==DLX08K			;;USED BY BLDM76
M78M8K==DLX08K			;;USED BY BLD78
>
	IFG	<ZZZ-3>,<
IFNDEF	DLX18K,<DLX18K==0	;;ASSUME JUMPERED FOR 1K MAXIMAL>
IFN	DLX18K,<DLX18K==1	;;FORCE TO 1 IF NOT ZERO>
DLX8K==DLX18K			;;USED BY BLDM76
M78M8K==DLX18K			;;USED BY BLD78
>
	MAPIT(\ZZZ)	;GET THE RIGHT MAP OR NOTHING
ZZZ=ZZZ+1
>
SUBTTL	DL10 INTERRUPT HANDLING


;INTERRUPT ROUTINE FOR EACH DL10 BASED DAS78
DEFINE	EACH78(PORTN),<
IFN	M0'PORTN'D78,<

IFLE	PORTN-3,<DLBD78=60
	DLCD78=64>			;FIRST DL10
IFG	PORTN-3,<DLBD78=160
	DLCD78=164>			;SECOND DL10

	$ABS

D80'PORTN'KI:				;DL10 FORCES JSR HERE
	EXP	0,0,IC.UOU,<D80'PORTN'IN>

	$HIGH

DEFINE	D8.CH(A,B),<IF2,<A'B>>
IFNDEF	DLXSCC,<DLXSCC:>
D80'PORTN'KA:
	CONSO	DLCD78,1B<32-<3*<PORTN&3>>> ;IS THIS PDP11 INTERRUPTING?
	JRST	DLX'PORTN'NX		;TRY THE NEXT ONE
	CONSO	DLCD78,1B31_<<PORTN&3>*3> ;PORT PORTN ENABLED?
	JRST	.-2			;NO, IGNORE.
	JRST	D80'PORTN'CM		;ENTER COMMON CODE

D80'PORTN'IN:
	CONO	DLCD78,1B19+1B<32-<3*<PORTN&3>>>+XXICHN	;TURN OFF INTERRUPT
	DMOVEM	0,D8.CH(SVAC,\XXICHN)	;SAVE ACS 0 AND 1
	DMOVE	0,D80'PORTN'KI		;GET INPTERRUPT PC DOUBLE WORD
	DMOVEM	0,D8.CH(CH,\XXICHN)	;STORE SO WE CAN USE CHN SAVE ROUTINES
	DMOVE	0,D8.CH(SVAC,\XXICHN)	;RESTORE ACS 0 AND 1

D80'PORTN'CM:
	CONO	DLCD78,1B19+1B<32-<3*<PORTN&3>>>+XXICHN	;TURN OFF INTERRUPT
	JSR	D8.CH(SAV,\XXICHN)	;SAVE THE ACS AND SET UP P
	SKIPE	J,M78BT+PORTN		;J TO POINT TO WINDOW FOR PORT PORTN
	  PUSHJ	P,D78KII##		;GO TO DAS78 INTERRUPT SERVICE ROUTINE
	POPJ	P,			;DISMISS INTERRUPT


;BASE TABLE FOR DAS78 DL10
;
M80'PORTN'BT:
	PHASE	0
M78CPE::!CONO	DLCD78,XXICHN+<1B31_<<PORTN&3>*3>>	;CLEAR PORT ENABLE FOR PORT PORTN
M78I10::!CONSO	DLCD78,1B32_<<PORTN&3>*3>		;SEE IF PDP11 PORTN SET 10 INT
M78I11::!CONO	DLCD78,1B19+1B20+XXICHN+<1B30_<<PORTN&3>*3>>	;SET PDP11 INTERRUPT ON PORTN
M78SWA::!CONO	DLBD78,M8'PORTN'KII!M8'PORTN'BAM!<PORTN&3>	;LOAD ADDRESS FOR PORT PORTN
M78ENP::!CONO	DLCD78,1B20+XXICHN+<1B31_<<PORTN&3>*3>>	;ENABLE PORT PORTN
M78CPI::!CONSO	DLCD78,7			;SEE IF PIA ASSIGNED
M78SPI::!CONO	DLCD78,XXICHN			;GIVE PI CHN ASSIGNMENT
M78PNO::!PORTN,,.DL0'PORTN'B			;;PORT##,,WINDOW
IFN M.PSI,<
M78PSI::!DATAO	DLCD78,[200001,,0]	;KA STYLE INTERRUPTS
>					; SO PSISER CAN FIND THE PC
IFE M.PSI,<
M78PSI::!JFCL
>
M78SER::!DATAO	DLBD78,[<PORTN&3>_^D<35-5>]  ;PUT PORT NUMBER IN THE "R" REGISTER
M78GWA::!CONI	DLBD78,T1	;GET BASE ADDRESS
	DEPHASE

DLX'PORTN'NX::
	$ABS

>;END IFN M0'PORTN'D78
>;END DEFINE EACH78
;INTERRUPT ROUTINE FOR EACH DL10 BASED ANF10 PDP11
DEFINE	EACH76(N)<
IFN TP.DL'N,<			;IF PORT DEFINED
IFE M0'N'D78,<			;AND NOT A DAS78
IFLE N-3,<DLX=DLC
	DLBX=DLB>		;FIRST DL10
IFG N-3,<DLX=DLC2
	DLBX=DLB2>		;SECOND DL10
	$ABS
D70'N'KI:Z			;DL10 FORCES JSR TO HERE
	Z
	IC.UOU
	D70'N'IN

	$HIGH
DEFINE	D7.CH(A,B),<IF2,<A'B>>
IFNDEF	DLXSCC,<DLXSCC==.>	;DEFINE START OF KA SYTLE DL10 CONSO CHAIN
D70'N'KA:CONSZ	DLX,1B32_<<N&3>*3> ;IS THIS -11 INTERRUPTING
	CONSO	DLX,1B31_<<N&3>*3> ;YES, PORT ENABLED ?
	JRST	DLX'N'NX	;NO, TRY THE NEXT -11
	JRST	D70'N'CM	;JOIN COMMON CODE WITH VECTORED STYLE
D70'N'IN:
	DMOVEM	0,D7.CH(SVAC,\SCNCHN)
	DMOVE	0,D70'N'KI
	DMOVEM	0,D7.CH(CH,\SCNCHN)
	DMOVE	0,D7.CH(SVAC,\SCNCHN)

D70'N'CM:CONO	DLX,1B19+<1B32_<<N&3>*3>>+SCNCHN ;TURN OFF INTERRUPT
	JSR	D7.CH(SAV,\SCNCHN) ;SAVE AC'S AND STUFF
	SKIPE	W,DLXBAT+N	;SET UP BASE ADDRESS
	XCT	DLXINI(W)	;TAKE ACTION FOR THIS INTERRUPT
	POPJ	P,		;DISMISS INTERRUPT

	IFE	TP.DL'N-TP.D76,<	;THIS IS A DC76 PORT
DC76'N'D::JRST	[PUSHJ P,SETJ'N	;SET UP J AS BASE ADDRESS
		 PJRST D76TYP##];CALL TYPEOUT ROUTINE
	JRST	[PUSHJ P,SETJ'N
		 PJRST D76DSC##];MODEM CONTROL
	POPJ	P,		;NO PI CHANNEL TO CHECK ON
	POPJ	P,0		;NO INIT
	JRST	[PUSHJ P,SETJ'N
		 PJRST D76CHP##];CHANGE HARDWARE PARAMETERS
	JRST	[PUSHJ P,SETJ'N
		 PJRST D76LPC##];LINE PARAMETER CONTROL
	JFCL
	JFCL
	JRST	[PUSHJ P,SETJ'N
		 PJRST D76OFL##]

SETJ'N:	EXCH	J,(P)		;SAVE J
	MOVEM	J,1(P)		;SAVE RETURN ADDRESS
	MOVE	J,DLXBAT+N	;POINT TO BASE OF MAP
	MOVE	J,DLXWIN(J)	; ..
	PUSHJ	P,@1(P)		;DO FUNCTION
	  PJRST	IPOPJ		;RETURN
	PJRST	IPOPJ1		;ALLOW CPOPJ1
> ;END OF IFE TP.DL'N-TP.D76
DLX'N'NX:
> ;END IFE M0'N'D78
> ;IFN TP.DL'N
> ;END OF DEFINITION OF EACH76
> ;END IFN PDP11N
; PDP11 BASE TABLE OFFSETS
	  PHASE	0		;START BASE TABLE
DLXWIN::! BLOCK	1		;STANDARD XWD CPU#,DTE#
DLXNMT::! BLOCK	1		;FRONT END NAME
DLXSTA::! BLOCK	1		;DTE KNOW'S WHEN THE -10'S ALIVE
DLXINI::! BLOCK	1		;DO THIS ON INTERRUPT
DLXCAL::! BLOCK	1		;POINTER TO CAL11. UUO TABLE
DLXCEU::! BLOCK	1		;CAL11. USER'S JOB NUMBER
DLXPRG::! BLOCK	1		;DO THIS WHEN PDP11 GOES DOWN
DLXTYP::! BLOCK	1		;TYPE OF PDP11 (FOR CALL11)
DLXTIM::! BLOCK	1		;CONTAINS UPTIME OF TIMEOUT, OR 0
DLXPRE::! BLOCK	1		;
DLXCEV::! BLOCK	1		;CAL11. UUO ENTRY VECTOR
DLXFEK::! BLOCK	1		;ADDRESS OF ASSOCIATED FEK
DLXLEN::!			;LENGTH OF COMMON BASE TABLE AREA
	  DEPHASE

IFN FTKL10,<		;DL10 SPECIFIC BASE TABLE OFFSETS
	  PHASE	DLXLEN
DLXMSK::! BLOCK	1		;MASK OF FRONT END BITS
DLXKAX::! BLOCK	1		;INSTRUCTION FOR NON-KA10 STYLE INTERRUPTS
DLXSWA::! BLOCK	1		;WINDOW ADDRESS
DLXENB::! BLOCK	1		;INSTRUCTION TO ENABLE WINDOW AND INTERRUPTS
DLXCLR::! BLOCK	1		;INSTRUCTION TO CLEAR PORT ENABLE
DLXCNI::! BLOCK	1		;INSTRUCTION TO READ DL10 CONDITIONS
DLXI11::! BLOCK	1		;
DLXDBL::!			;LENGTH OF DL10 BASE TABLE
	  DEPHASE
> ;END IFN FTKL10

IFN FTKL10,<			;DTE SPECIFIC BASE TABLE OFFSETS
	  PHASE	DLXLEN
DLXEVM::! BLOCK	1		;REMEMBER NUMBER OF PAGES OF EVM AND THE EXEC
				; VIRTUAL ADDR FOR RETURNING EVM
DLXOCN::! BLOCK	1		;COUNT OF BYTES IN DIRECT OUT MSG
DLXODA::! BLOCK	2		;BYTES TO BE PUT IN THE DIRECT MSG
DLXICI::! BLOCK	1		;# BYTES EXPECTING IN THE INDIRECT INPUT MSG
DLXIBP::! BLOCK	1		;BYTE PTR TO USER BUFFER PASSED TO DTESER
DLXICN::! BLOCK	1		;COUNT OF BYTES RECEIVED IN INPUT DIRECT MSG
DLXIDA::! BLOCK	2		;BYTES FROM THE INPUT DIRECT MSG
DLXETD::! BLOCK	1		;POINTER TO CORRESONDING ETD
DLXSBL::!			;DTE BASE TABLE LENGTH
	  DEPHASE
> ;END IFN FTKL10

IFN FTKS10,<			;KMC/DUP SPECIFIC BASE TABLE OFFSETS
				;D6RINT USES THE SAME OFFSETS...
	  PHASE	DLXLEN
DLXFLG::! BLOCK	1		;GENERAL PURPOSE FLAGS WORD (SEE D6KINT)
DLXICI::! BLOCK	1		;# BYTES EXPECTING IN THE INDIRECT INPUT MSG
DLXIBP::! BLOCK	1		;BYTE POINTER TO USER BUFFER PASSED TO KDPINT
DLXIMQ::! BLOCK	1		;INPUT MESSAGE QUEUE (0 OR 1 LONG)
DLXKBL::!			;KMC/DUP (AND DMR) BASE TABLE LENGTH
	  DEPHASE
> ;END IFN FTKS10
SUBTTL	BASE TABLE GENERATION -- DL10


DEFINE	BASE11	(CPX,N),<	;;CPX = CPU NUMBER, N = PORT NUMBER
IFN TP.DL'N,<			;;IF A PDP11
IFE M'CPX'N'D78,<		;; BUT NOT A DAS78
DL'CPX'N'BS:
	BLOCK	DLXDBL		;;RESERVE SPACE FOR ONE DL10 BASE TABLE

IFLE N-3,<			;;DL10 #0
	DLX=DLC			;;CONTROL REGISTER
	DLBX=DLB		;;BASE ADDRESS REGISTER
>
IFG N-3,<			;;DL10 #1
	DLX=DLC2		;;CONTROL REGISTER
	DLBX=DLB2		;;BASE ADDRESS REGISTER
>

;; MACRO TO LOAD UP TABLE LOCATIONS
DEFINE	X	(OFS,DAT),<
	LOC	DL'CPX'N'BS+OFS
	DAT
>

;; DATA COMMON TO ALL DL10 BASE TABLES
X	DLXWIN,<.DL'CPX'N'B>	;;WINDOW ADDRESS
X	DLXINI,<JFCL>		;;DO THIS ON INTERRUPT
X	DLXPRG,<JFCL>		;;DO THIS WHEN THE -11 GOES DOWN
X	DLXMSK,<777777700007!<70_<<N&3>*3>>>
				;;"AND" OUT OTHER PDP11 BITS
X	DLXKAX,<DATAO	DLX,[XWD 400001,0]>
				;;NON-KA10 STYLE INTERRUPTS
X	DLXSWA,<CONO	DLBX,.DL'CPX'N'B+<M7'N'BAM>_2+<N&3>>
				;;WINDOW ADDRESS
X	DLXENB,<CONO	DLX,1B19+1B20+<1B31_<<N&3>*3>>+SCNCHN>
				;;ENABLE WINDOW AND INTERRUPTS.
X	DLXCLR,<CONO	DLX,1B19+<70_<<N&3>*3>>+SCNCHN>
				;;CLEAR PORT ENABLE
X	DLXCNI,<CONI	DLX,T1>	;;READ DL10 CONDITIONS
X	DLXI11,<CONO	DLX,1B19+1B20+<1B30_<<N&3>*3>>+SCNCHN>
				;;INTERRUPT THE PDP11

IFN M'CPX'N'D85,<		;;ANF10 DC75/DN87 FRONT ENDS
X	DLXSTA,<SETOM DLXTA(P1)>;;MARK -10 AS BEING ALIVE
X	DLXTYP,.C1D75		;;TYPE OF PDP11
X	DLXPRE,<PUSHJ P,D85PRE##>;;
X	DLXCEV,0		;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,<D8'N'FEK>	;;ADDRESS OF ASSOCIATED FEK
>

IFN    M'CPX'N'D60,<		;;DN60 FRONT ENDS
X	DLXSTA,<SETOM DLXTA(P1)>;;MARK -10 AS BEING ALIVE
X	DLXTYP,.C1D60		;;TYPE OF PDP11
X	DLXPRE,<JFCL>		;;
X	DLXCEV,<JRST D60CEV##(P1)> ;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,<D8'N'FEK>	;;ADDRESS OF ASSOCIATED FEK
>

	LOC	DL'CPX'N'BS+DLXDBL
> ;END IFE M'CPX'N'D78
> ;END IFN TP.DL'N
> ;END BASE11 MACRO
SUBTTL	BASE TABLE GENERATION -- DTE


DEFINE	BASDTE	(CPX,DTX),<
DS'CPX'DTX'BS::
	BLOCK	DLXSBL		;;RESERVE SPACE FOR ONE DTE BASE TABLE

; MACRO TO LOAD UP TABLE LOCATIONS
DEFINE	X	(OFS,DAT),<
	LOC	DS'CPX'DTX'BS+OFS
	DAT
>

;; DATA COMMON TO ALL DTE BASE TABLES
X	DLXWIN,<XWD CPX,DTX>	;;CPU#,,DTE#
X	DLXSTA,<JFCL>		;;DTE KNOWS WHEN THE -10'S ALIVE
X	DLXINI,<JFCL>		;;DO THIS ON INTERRUPT
X	DLXPRG,<JFCL>		;;DO THIS WHEN THE -11 GOES DOWN
X	DLXPRE,<JFCL>		;;


X	DLXNMT,<SIXBIT /NOBODY/>;;NAME
X	DLXTYP,.C1CFE		;;FRONT END TYPE
X	DLXFEK,<S'CPX'DTX'FEK>	;;ADDRESS OF ASSOCIATED FEK
X	DLXETD,<CONC(ETD'CPX,\<DTX+1>,B##)> ;;ADDRESS OF ASSOCIATED ETD

	LOC	DS'CPX'DTX'BS+DLXSBL
> ;END BASDTE MACRO
SUBTTL	BASE TABLE GENERATION -- KMC/DUP


DEFINE BASKDP	(KMX,KLX),<	;;KMX = KMC #, KLX = DUP # (KMX == 0)
DK'KMX'KLX'BS:
	BLOCK	DLXKBL		;;RESERVE SPACE FOR ONE KMC/DUP BASE TABLE

; MACRO TO LOAD UP TABLE LOCATIONS
DEFINE	X	(OFS,DAT),<
	LOC	DK'KMX'KLX'BS+OFS
	DAT
>
;; DATA COMMON TO ALL KMC/DUP BASE TABLES
X	DLXWIN,<KDL'KLX'PG>	;;KDL BASE TABLE
X	DLXSTA,<JFCL>		;;KDP KNOWS WHEN THE -10 IS ALIVE
X	DLXINI,<JFCL>		;;DO THIS ON INTERRUPT
X	DLXPRG,<JFCL>		;;DO THIS WHEN THE -11 GOES DOWN
X	DLXPRE,<JFCL>		;;


IFE <M.'KLX'KDP-KD.ANF>,<	;;ANF10 FRONT ENDS
X	DLXNMT,<SIXBIT /ANF10/>	;;NAME
X	DLXTYP,.C1D22		;;TYPE OF PDP11
X	DLXCEV,0		;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,DK'KLX'FEK	;;ADDRESS OF ASSOCIATED FEK
>

IFE <M.'KLX'KDP-KD.DNT>,<	;;DECNET FRONT ENDS
X	DLXNMT,<SIXBIT /DECNET/>;;NAME
X	DLXTYP,.C1D22		;;TYPE OF PDP11
X	DLXCEV,0		;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,0		;;ADDRESS OF ASSOCIATED FEK
>

IFE <M.'KLX'KDP-KD.USR>,<	;;USER FRONT ENDS
X	DLXNMT,<SIXBIT /USER/>	;;NAME
X	DLXTYP,.C1D22		;;TYPE OF PDP11
X	DLXCEV,0		;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,0		;;ADDRESS OF ASSOCIATED FEK
>

IFE <M.'KLX'KDP-KD.IBM>,<	;;DN60 FRONT ENDS
X	DLXNMT,<SIXBIT /DN60/>	;;NAME
X	DLXTYP,.C1D60		;;TYPE
X	DLXCEV,<JRST D6KCEV##(P1)> ;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,0		;;ADDRESS OF ASSOCIATED FEK
>

	LOC	DK'KMX'KLX'BS+DLXKBL
> ;END BASKDP MACRO
SUBTTL	BASE TABLE GENERATION -- DMR


DEFINE BASDMR	(DRX),<	;;DRX = DMR #
DMR'DRX'BS:
	BLOCK	DLXKBL		;;RESERVE SPACE FOR ONE DMR BASE TABLE

; MACRO TO LOAD UP TABLE LOCATIONS
DEFINE	X	(OFS,DAT),<
	LOC	DMR'DRX'BS+OFS
	DAT
>
;; DATA COMMON TO ALL DMR BASE TABLES
X	DLXWIN,<DMR'DRX>	;;DMR BASE TABLE
X	DLXSTA,<JFCL>		;;DMR KNOWS WHEN THE -10 IS ALIVE
X	DLXINI,<JFCL>		;;DO THIS ON INTERRUPT
X	DLXPRG,<JFCL>		;;DO THIS WHEN THE -11 GOES DOWN
X	DLXPRE,<JFCL>		;;


IFE <M.'DRX'DMR-RD.ANF>,<	;;ANF10 FRONT ENDS
X	DLXNMT,<SIXBIT /ANF10/>	;;NAME
X	DLXTYP,.C1D22		;;TYPE OF PDP11
X	DLXCEV,0		;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,DR'DRX'FEK	;;ADDRESS OF ASSOCIATED FEK
>

IFE <M.'DRX'DMR-RD.DNT>,<	;;DECNET FRONT ENDS
X	DLXNMT,<SIXBIT /DECNET/>;;NAME
X	DLXTYP,.C1D22		;;TYPE OF PDP11
X	DLXCEV,0		;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,0		;;ADDRESS OF ASSOCIATED FEK
>

IFE <M.'DRX'DMR-RD.USR>,<	;;USER FRONT ENDS
X	DLXNMT,<SIXBIT /USER/>	;;NAME
X	DLXTYP,.C1D22		;;TYPE OF PDP11
X	DLXCEV,0		;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,0		;;ADDRESS OF ASSOCIATED FEK
>

IFE <M.'DRX'DMR-RD.IBM>,<	;;DN60 FRONT ENDS
X	DLXNMT,<SIXBIT /DN60/>	;;NAME
X	DLXTYP,.C1D60		;;TYPE
X	DLXCEV,<JRST D6RCEV##(P1)> ;;CAL11. UUO ENTRY VECTOR
X	DLXFEK,0		;;ADDRESS OF ASSOCIATED FEK
>

	LOC	DMR'DRX'BS+DLXKBL
> ;END BASDMR MACRO
IFN PDP11N,<	;IF DL10 BASED PDP11S

	$HIGH
IFN M.DAS78,<XXIINT:>		;DAS78 XXI INTERRUPTS HERE
DLXINT:	JRST	DLXSCC		;START OF KA STYLE INTERRUPT CHAIN
	JRST	.-1		;MAKE SYSINI HAPPY

IFN M.DAS78,<
DEFINE	B78BT	(CPU,PORT),<
	IFNDEF	M8'CPU'PORT'BT,<EXP	Z>
	IFDEF	M8'CPU'PORT'BT,<EXP	M8'CPU'PORT'BT>>
	$HIGH
M78BT::
ZZZ=0
	REPEAT	10,<
	B78BT	(0,\ZZZ)
	ZZZ=ZZZ+1>
>;END IFN M.DAS78
	$ABS


ZZZ==0				;GENEATE INTERRUPT ROUTINE FOR EACH
	REPEAT	10,<		; DL10 BASED DAS78
	EACH78	(\ZZZ)
	ZZZ==ZZZ+1
>
ZZZ=0				;GENERATE INTERRUPT ROUTINE FOR EACH
	REPEAT	10,<		; DL10 BASED ANF10 PDP11
	EACH76(\ZZZ)
	ZZZ==ZZZ+1
>
	$HIGH
	JRST	DLXINT+1	;CONSO CHAIN FALLS OUT HERE

	$ABS
;
; GENERATE THE BASE TABLES.  ONE FOR EACH DL10 PDP11 AND ONE
;  FOR EACH PDP11 ON A DTE20 (EXCEPT FOR THE CONSOLE AND
;  DN87S'S)

;FIRST THE DL-10 BASED FRONT ENDS
ZZZ==0				;START WITH #0
    REPEAT 8,<
	BASE11(0,\ZZZ)		;BUILD THE NEXT BASE TABLE
	ZZZ==ZZZ+1>		;STEP TO THE NEXT DL-10 PORT
> ;END OF IFN PDP11N

;NOW THE DTE-20 BASED FRONT ENDS
IFN FTKL10,<
ZZ==0				;CPU #
    REPEAT M.CPU,<		;FOR ALL CPU'S
	ZZZ==0			;DTE NUMBER
	REPEAT 4,<		;FOR ALL DTE'S ON THIS CPU
	    BASDTE(\ZZ,\ZZZ)	;BUILD A BASE TABLE
	ZZZ==ZZZ+1>		;STEP TO THE NEXT DTE
    ZZ==ZZ+1>			;STEP TO THE NEXT CPU
> ;END FTKL10
	$ABS

;BASE TABLES FOR KDP'S (IF USING IBM COMM)
IFN FTKS10,<
    ZZ==0			;START OUT ON LINE ZERO
    REPEAT M.KDUP,<		;FOR ALL LINES
	BASKDP(0,\ZZ)		;BUILD A BASE TABLE
	ZZ==ZZ+1>		; AND STEP TO THE NEXT
    ZZ==0			;START OUT ON LINE ZERO
    REPEAT M.DMRN,<		;FOR THE DMRS TOO
	BASDMR(\ZZ)		;BUILD A BASE TABLE
	ZZ=ZZ+1>		;AND STEP TO THE NEXT
>; END FTKS10
IFN PDP11N,<
	$HIGH
; BUILD THE BASE TABLES FOR ANF10 AND DAS78 FRONT ENDS

DEFINE	B78BAT	(CPU,PORT),<
IFE	TP.DL'PORT,<EXP	0>
IFN	TP.DL'PORT,<
	IFE	M'CPU'PORT'D78,<EXP	0>
	IFN	M'CPU'PORT'D78,<XWD	M8'PORT'DDB,.DL'CPU'PORT'B>
> ;;END IFN TP.DL'PORT
> ;END B78BAT

DEFINE	BLXBAT	(CPU,PORT),<
IFE	TP.DL'PORT,<EXP	0>
IFN	TP.DL'PORT,<
	IFE	M'CPU'PORT'D78,<EXP	DL'CPU'PORT'BS>
	IFN	M'CPU'PORT'D78,<EXP	0>
> ;;END IFN TP.DL'PORT
> ;END BLXBAT

DLXBAT::			;START OF THE ANF10 MAPPING TABLE
ZZZ==0				;PORT COUNTER
    REPEAT 8,<			;FOR ALL POSSIBLE PORTS
	BLXBAT	(0,\ZZZ)	;EXPAND THE MACRO
	ZZZ==ZZZ+1>		;AND STEP TO THE NEXT PORT


IFN M.DAS78,<
M78BAT::			;START OF THE DAS78 MAPPING TABLE
ZZZ==0				;PORT COUNTER
	REPEAT 8,<		;FOR ALL POSSIBLE PORTS
	B78BAT	(0,\ZZZ)	;EXPAND THE MACRO
	ZZZ==ZZZ+1>		;AND STEP TO THE NEXT PORT


	$ABS
; MACRO TO BUILD A TABLE CONTAINING DDB ADDRESSES FOR EACH DAS78
DEFINE	B78DDB	(CPU,PORT),<
IFDEF	M8'PORT'KII,<M8'PORT'DDB::BLOCK	M'CPU'PORT'D78>
> ;END B78DDB
M78DDB::
ZZZ==0
	REPEAT	8,<		;FOR ALL POSSIBLE PORTS
	B78DDB	(0,\ZZZ)	;EXPAND THE MACRO
	ZZZ==ZZZ+1>		;AND STEP TO THE NEXT PORT

	$HIGH
; MACRO TO BUILD A TABLE WHICH CONTAINS THE LAST USED LOCATION IN
; THE DAS78 WINDOW FOR EACH PORT.
DEFINE	B78END	(CPU,PORT),<
	IFNDEF	M'CPU'PORT'END,<EXP	0>
	IFDEF	M'CPU'PORT'END,<EXP	M'CPU'PORT'END>
> ;END B78END

M78END::
ZZZ==0
	REPEAT	8,<
	B78END	(0,\ZZZ)
	ZZZ==ZZZ+1>

; MACRO TO BUILD A TABLE WHICH CONTAINS THE NUMBER OF LINES
; ON EACH DAS78
DEFINE	B78LIN	(CPU,PORT),<EXP	M'CPU'PORT'D78>

M78LIN::
ZZZ==0
	REPEAT	8,<		;FOR ALL POSSIBLE PORTS
	B78LIN	(0,\ZZZ)	;EXPAND THE MACRO
	ZZZ==ZZZ+1>		;AND STEP TO THE NEXT PORT

	$ABS
D78NAM::BLOCK	10		;TABLE OF NAMES FILLED IN BY THE PDP11
				; THROUGH A POINTER IN THE DAS78 WINDOW
> ;END IFN M.DAS78
> ;END OF IFN PDP11N

	$HIGH


;HELPER MACRO FOR SETTING UP THE DTE -- BASE TABLE CORRESPONDENCE MAP
DEFINE	BLXBAT	(CPX,DTX),<EXP DS'CPX'DTX'BS>

DTEBAS::			;START OF THE DTE TO BASE TABLE MAPPING
IFN FTKL10,<
ZZ==0				;CPU COUNTER
    REPEAT M.CPU,<		;FOR ALL CPU'S
	ZZZ==0			;ZERO THE DTE COUNTER
	REPEAT 4,<		;FOR ALL DTE-20S
	    BLXBAT(\ZZ,\ZZZ)	;MAKE THE MAP ENTRY
	    ZZZ==ZZZ+1>		; STEP TO THE NEXT DTE
	ZZ==ZZ+1>		; STEP TO THE NEXT CPU
>


DEFINE BLXBAT(KMX,KLX),<EXP DK'KMX'KLX'BS>	;BASE TABLE ADDRESS

KDPBAS::			;START OF THE KDP BASE TABLES
IFN M.DN60&M.DN6K,<		;IF WE HAVE IBM
    ZZ==0			;START AT THE FIRST LINE
    REPEAT M.KDUP,<		;FOR ALL LINES
	BLXBAT(0,\ZZ)		;EXPAND A POINTER TO THEM
	ZZ==ZZ+1>		;STEP TO THE NEXT
>; END IFN M.DN60&M.DN6K

DEFINE BLXBAT(DRX),<EXP DMR'DRX'BS>	;BASE TABLE ADDRESS

DMRBAS::			;START OF THE DMR BASE TABLES
IFN M.DN60&M.DN6R,<		;IF WE HAVE IBM
    ZZ==0			;START AT THE FIRST LINE
    REPEAT M.DMR,<		;FOR ALL LINES
	BLXBAT(\ZZ)		;EXPAND A POINTER TO THEM
	ZZ==ZZ+1>		;STEP TO THE NEXT
>; END M.DN60&M.DN6R


	$ABS
IFNDEF DLXFST,<DLXFST==:.>		;START OF DL10 UNCACHED SPACE
DLXLST::	;END OF UN-CACHED AREA

	LIT		;FORCE ANY INITIALIZATION LITERALS INTO LOW SEGMENT
SUBTTL	BACKGROUND PERFORMANCE ANALYSIS SELECTION TABLE

IFN	M.KL10&FTRSP,<

	$HIGH		;THE TABLE IS "PURE"

;BPATAB  --  TABLE OF BACKGROUND PERFORMANCE ANALYSIS CONDITIONS
;
;THIS TABLE CONTAINS THE ORDERED LIST OF "ASPECTS" OF THE SYSTEM
;TO WATCH VIA THE PERFORMANCE ANALYSIS METER OF THE KL-10 CPU.
;
;EACH ITEM IN THE BPATAB TABLE HAS A CORRESPONDING 4-WORD BLOCK IN
;THE CDB VARIABLES AREA (SUBTABLE .CPBPV). THE FIRST TWO WORDS ARE
;THE RDTIME TOTAL FOR WHICH THE CONDITION(S) WAS(WERE) WATCHED, AND
;THE SECOND TWO WORDS ARE THE PERFORMANCE METER COUNT FOR THE ENABLED
;CONDITION(S) - EITHER AN INTEGER COUNT IF IN EVENT MODE OR ELAPSED
;TIME IF IN DURATION MODE. THE ORDER OF THE TABLE IS IMPORTANT SINCE
;THE NUMBERS ARE GETTAB'ED OUT OF THE .CPBPV SUBTABLE.
;
;ALTHOUGH THIS TABLE REALLY BELONGS IN APRSER IT MUST APPEAR IN COMMON
;BEFORE THE CDB DEFINITIONS AS THE LENGTH OF THE TABLE IS NEEDED TO
;DEFINE THE CDB VARIABLES SUBTABLE.

BPATAB::PE.CP0!PE.UCI!PE.PRI!PE.CCI!PE.PPI!PE.PCI!PE.CLR	;CH 0
	PE.CP1!PE.UCI!PE.PRI!PE.CCI!PE.PPI!PE.PCI!PE.CLR	;CH 1
	PE.CP2!PE.UCI!PE.PRI!PE.CCI!PE.PPI!PE.PCI!PE.CLR	;CH 2
	PE.CP3!PE.UCI!PE.PRI!PE.CCI!PE.PPI!PE.PCI!PE.CLR	;CH 3
	PE.CP4!PE.UCI!PE.PRI!PE.CCI!PE.PPI!PE.PCI!PE.CLR	;CH 4
	PE.CP5!PE.UCI!PE.PRI!PE.CCI!PE.PPI!PE.PCI!PE.CLR	;CH 5
	PE.CP6!PE.UCI!PE.PRI!PE.CCI!PE.PPI!PE.PCI!PE.CLR	;CH 6
	PE.CP7!PE.UCI!PE.PRI!PE.CCI!PE.PPI!PE.PCI!PE.CLR	;CH 7
	PE.CPI!PE.UCI!PE.PRI!PE.CCI!PE.PP0!PE.PCI!PE.CLR	;PI 0
	PE.CPI!PE.UCI!PE.PRI!PE.CCI!PE.PP1!PE.PCI!PE.CLR	;PI 1
	PE.CPI!PE.UCI!PE.PRI!PE.CCI!PE.PP2!PE.PCI!PE.CLR	;PI 2
	PE.CPI!PE.UCI!PE.PRI!PE.CCI!PE.PP3!PE.PCI!PE.CLR	;PI 3
	PE.CPI!PE.UCI!PE.PRI!PE.CCI!PE.PP4!PE.PCI!PE.CLR	;PI 4
	PE.CPI!PE.UCI!PE.PRI!PE.CCI!PE.PP5!PE.PCI!PE.CLR	;PI 5
	PE.CPI!PE.UCI!PE.PRI!PE.CCI!PE.PP6!PE.PCI!PE.CLR	;PI 6
	PE.CPI!PE.UCI!PE.PRI!PE.CCI!PE.PP7!PE.PCI!PE.CLR	;PI 7

	BPATLN==:.-BPATAB

	$ABS		;BACK TO "IMPURE"
> ;END OF IFN M.KL10&FTRSP
SUBTTL CPU DATA BLOCK(S):

REPEAT 0,<

EACH CPU HAS ITS OWN DATA BLOCK, KNOWN AS A CDB.  ALL .CP??? SYMBOLS ARE
DEFINED RELATIVE TO THE (MAPPED) CDB, .CN??? SYMBOLS ARE ABSOLUTE LOCATIONS.

A FEW LOCATIONS ARE REALLY SYSTEM PARAMETERS (EG. CORTAL), RATHER THAN CPU
PARAMETERS. HOWEVER, THEY WERE IN THE MIDDLE OF A GETTAB (NSWTBL) AND SO
COULD NOT BE SEPARATED OUT WITHOUT INVALIDATING SOME PROGRAMS.


WHEN ADDING CONSTANTS OR VARIABLES TO COMMON, GREAT CARE MUST BE EXERCISED
IN DECIDING WHETHER TO PUT IT IN THE CDB OR IN A SYSTEM DEPENDENT TABLE
(.SYTBL).  IF THE CONTENTS COULD EVER BECOME CPU DEPENDENT IN THE FUTURE,
BE SURE TO PUT IT IN THE CDB INSTEAD OF .SYTBL.  IF A MISTAKE IS MADE, THE
LOCATION WILL HAVE TO APPEAR IN THE CDBS AS WELL AS .SYTBL IN ORDER TO INSURE
COMPATIBLITY.

> ;END REPEAT 0
DEFINE	CDB	(N),<

;;MACRO TO GENERATE CPU DATA BLOCK LOCATIONS
;;ARGUMENTS:
;;	NAM	THREE LETTER SUFFIX FOR SYMBOL
;;	VAL	OPTIONAL VALUE TO STORE IN LOCATION (DEFAULT = ZERO)
;;	LEN	OPTIONAL LENGTH OF STORAGE AREA (DEFAULT = ONE WORD)
;;	LBL	OPTIONAL ALTERNATE LABEL FOR OLD-STYLE CPU0 REFERENCES

DEFINE	CWRD	(NAM,VAL,LEN,LBL,%X<N>),<

IFE %X,<IFNB <VAL>,<IFNB <LEN>,<PRINTX ? CDB location .CP'NAM defined with both a value and a length>>>

IFNB <NAM>,<
.C'%X'NAM::			;;CREATE CPU-SPECIFIC SYMBOL
.CP'NAM=:.-.C'%X'CDB+.EVCDB	;;CREATE GENERIC CDB SYMBOL
> ;;END IFNB <NAM>
IFE %X,<IFNB <LBL>,<LBL=:.>>	;;GENERATE ALTERNATE LABEL
IFB  <LEN>,<VAL>		;;STORE POSSIBLE VALUE
IFNB <LEN>,<REPEAT LEN,<EXP 0>>	;;CREATE STORAGE BLOCK
IFB  <VAL>,<IFB <LEN>,<EXP 0>>	;;IF VALUE AND LENGTH BLANK, STORE A ZERO
> ;;END DEFINE CWRD


;;MACRO TO DEFINE A CONSTANT IF THIS IS THE CPU0 CDB
DEFINE	CCON	(A,B),<IFE N,<A==:B>>


;;MACRO TO DEFINE JSR ENTRY POINT
DEFINE	CJSR	(NAM,ADR),<
	CWRD	(NAM)
	EXP	<ADR>
> ;;END DEFINE CJSR


;;MACRO TO DEFINE AN XPCW ENTRY POINT
DEFINE	CXPC	(NAM,FLG,ADR),<
	CWRD	(NAM,,2)
	EXP	FLG,ADR
> ;;END DEFINE CXPC


;;MACRO TO DETDEFINE A PARAMETER BASED ON THE CPU TYPE
DEFINE	KILS,<
	IFN	M.KL10,<KL>
	IFN	M.KS10,<KS>
> ;;END DEFINE KILS
CPU'N::
;CONSTANTS IN GETTAB UUO.(NOT CLEARED AT STARTUP OR 143 RESTART)

	IFE <M.CPU-N-1>,<.XX==0>
	IFG <M.CPU-N-1>,<.XX==<.C'N'CDB+.CPLEN,,0>>
CWRD (CDB,.XX)			;;(000) LH = ADR OF NEXT CDB
				;;      RH = 0
CWRD (ASN,M.C'N'SN)		;;(001) APR SERIAL NUMBER
CWRD (OK,1)			;;(002) THIS CPU RUNNING OK.
				;;      IF GREATER THAN 0, THIS CPU HAS STOPPED
				;;      RUNNING CORRECTLY.  CONTENTS ARE NO. OF
				;;      JIFFIES CPU HAS BEEN STOPPED.
CWRD (EPT,.E'N'EPT)		;;(003) CONTAINS EPT ADDRESS
CWRD (LOG,<SIXBIT/CPU'N/>)	;;(004) LOGICAL CPU NAME (CPUN)
	DEFINE	KL,<SIXBIT /CPL'N/>
	DEFINE	KS,<SIXBIT /CPS'N/>
CWRD (PHY,<KILS>)		;;(005) PHYSICAL CPU NAME (CPXN)
	DEFINE	KL,<CT.KL>
	DEFINE	KS,<CT.KS>
CWRD (TYP,<KILS>)		;;(006) TYPE OF PROCESSOR
				;;      LH = CUSTOMER DEFINED
				;;      RH = DEC DEFINED
CWRD (MPT,<<M.CBAT-1>B8+.C'N'BAT-.C'N'VBG>) ;;(007) BAD ADDRESS SUBTABLE
CWRD (RTC,0)			;;(010) REAL TIME CLOCK (DK10) DDB
CWRD (RTD,0)			;;(011) DK10 DDB IF HI PREC TIME ACCOUNTING
CWRD (PAR,<<.CPPRL-1>B8+.C'N'LPA-.C'N'VBG>) ;;(012) PARITY SUBTABLE

IFE FTRSP,<.CPAOR==:.CPVBG>	;;NO SUBTABLE IF NO RESPONSE STUFF
IFE FTRSP,<.CPRSL==:1>		;;MAX IS 0
CWRD (RSP,<<.CPRSL-1>B8+.C'N'AOR-.C'N'VBG>) ;;(013) RESPONSE SUBTABLE
CWRD (DKX,0)			;;(014) NUMBER OF DK10S ON THIS CPU

	DEFINE	KL,<M.EBPS>
	DEFINE	KS,<0>
CWRD (EBS,<KILS>)		;;(015) EBOX TICKS PER SECOND

	DEFINE	KL,<M.MBPS>
	DEFINE	KS,<0>
CWRD (MBS,<KILS>)		;;(016) MBOX TICKS PER SECOND
CWRD (NMT,<<.CPNML-1>B8+.C'N'LNA-.C'N'VBG>) ;;(017) NXM SUBTABLE
CWRD (CSB,<<.CPCSL-1>B8+.C'N'APD-.C'N'VBG>) ;;(020) CPU STATUS SUBTABLE
CWRD (DSB,<<.CPDVL-1>B8+.C'N'DVS-.C'N'VBG>) ;;(021) DEVICE STATUS SUBTABLE
	DEFINE	KL,<<.CPSDL-1>B8+.C'N'SBD-.C'N'VBG>
	DEFINE	KS,<0>
CWRD (SDP,<KILS>)		;;(022) SBDIAG SUBTABLE
	IFE	M.KL10&FTRSP,<.XX==0>
	IFN	M.KL10&FTRSP,<.XX==<BPATLN*4>B8+.C'N'BPV-.C'N'VBG>
CWRD (BPA,<.XX>)		;;(023) PERORMANCE SUBTABLE
CWRD (PCB,0)			;;(024) ADDRESS OF CI PORT CONTROL BLOCK
CWRD (NPB,0)			;;(025) ADDRESS OF NI PORT CONTROL BLOCK
	DEFINE	KL,<0>
	DEFINE	KS,<<.CPSML-1>B8+.C'N'SME-.C'N'VBG>
CWRD (MSS,<KILS>)		;(026) SOFT MEMORY ERROR SUBTABLE

;;ADD CONSTANTS TO BE PUBLISHED ABOVE HERE:

CCON (.CPPCL,<<.-.C0CDB>B26>)	;;PUBLISHED CPU DEPENDANT CONSTANTS LENGTH
;UNPUBLISHED CONSTANTS:

CWRD (MAP,.E'N'MAP)		;;ADDRESS OF THIS CPU'S EXEC MAP
CWRD (SPT,<SPTTAB+N>)		;;SPECIAL PAGES TABLE

IFN FTMP,<
CWRD (CHX,0)			;;CACHE SWEEP FLAG FOR MAGTAPES AND DISKS
> ;END IFN FTMP
CWRD (CPN,<EXP N>)		;;CPU NUMBER
	DEFINE CPUDEF(M)<
	IFE N,<
		IFE M,<CAIA>
		IFN M,<CAI>>
	IFN N,<
		IFN M,<CAIA>
		IFE M,<CAI>>
	> ;;END DEFINE CPUDEF
CWRD (SK0,<CPUDEF(0)>)		;;GENERATE SKIP FOR "SKPCPU(0)"
CWRD (SK1,<CPUDEF(1)>)		;;AND FOR "SKPCPU(1)" **MAINTAIN ORDER**
CWRD (OK1,.C0OK)		;;CONTAINS ADR OF OTHER CPU
CWRD (SLF,.C'N'CDB)		;;POINTER TO START OF CDB

	DEFINE	SCNLOC,<
	IFE	N,<SSCAN>
	IFN	N,<SSCAN1>
	>
CWRD (SCN,<SCNLOC>)		;;ADDRESS OF SCHEDULER RUN QUEUE SCAN LIST

	IFN FTNSCHED,<
	DEFINE	SCN,<
	IFE	N,<SSSCAN>
	IFN	N,<SSSCN1>
	>
CWRD (SST,<SCN>);
> ;END IFN M.CPU-1

CWRD (NPD,<MNULPD,,NU'N'PDL>)	;;NULL PDL POINTER
CWRD (EPD,<ERRPLL,,ER'N'PDL>)	;;ERROR PDL POINTER
CWRD (NJD,NU'N'DAT)		;;ADDRESS OF NULL JOB DATA AREA OFFSET BY 20
				;; USED TO SAVE ACS IN 20-37.
CWRD (STO,SC'N'TIC##)		;;SCANNER ONCE A TICK ROUTINE FOR THIS CPU
CWRD (ISR,SC'N'SEC##)		;;SCANNER ONCE A SECOND
IFN FTMP,<
CWRD (DLK,-1)			;;DISK INTERLOCK NESTING FLAG
CWRD (SCD,-1)			;;PER CPU SCHEDULER INTERLOCK FLAG
CWRD (DIE,-1)			;;PER CPU DIE INTERLOCK FLAG
CWRD (RES,<HALT APRPFR##>)	;;RESTORE AFTER POWER FAIL
CWRD (NBI,0)			;;NUMBER OF INTERLOCKS THAT WERE OWNED
				;; BY THIS CPU AND BROKEN BY BRKLOK
> ;END IFN FTMP
	PWFLEN==:3		;;NUMBER OF POWER FAIL DATA WORDS
CWRD (PFD,,PWFLEN)		;;POWER FAIL/RESTART DATA
CWRD (KAF,AP'N'KAF)		;;KEEP-ALIVE FAILURE TRAP ADDRESS
CWRD (SVP,0)			;;SAVED AC P ON KAF
CWRD (KFP,0)			;;KAF PDL
CWRD (EPL,EP'N'PDL)		;;PDL FOR PROCESSING PDL OVF

;;APR DEPENDENT CONSO AND CONO BITS
CWRD (CHL,<AP'N'CHL>)		;;ADDRESS OF INTERRUPT PC FOR APR
CWRD (CKL,<CK'N'CHL>)		;;ADDRESS OF INTERRUPT PC FOR CLOCK
CWRD (APP,<-PDL+1,,AP'N'PD1>)	;;PDP FOR APR CHANNEL
CWRD (CON,AP.CSO)		;;APR CONSO MASK
CWRD (EEB,AP.EEB)		;;EXEC ENABLED BITS
CWRD (IEF,AP.CAE)		;;MASK TO CLEAR APR ERROR BITS
CWRD (MPS,<CP.PXX+CP.PS'N'>)	;;LH=BITS TO REQUEST SCAN
;;DOORBELL WORDS
;CWRD (BIT,<1_M.CPU-1>)		;;CPU'S BIT

	DEFINE	EVENTM(LIST),<
	NARGS==0
	IRP LIST,<NARGS==NARGS+1>
	IFG NARGS*M.CPU-^D36,<PRINTX ?DOORBELL BIT OVERFLOW>
	ZZ==0
	XX2==0
	IRP LIST,<
	XX1==1_<<ZZ*M.CPU>+N>
	XX2==XX2+XX1
CWRD (LIST'S,<<<<1_M.CPU>-1>_<ZZ*M.CPU>>-XX1>)
CWRD (LIST'C,<XX1>)
	ZZ==ZZ+1
	>
CWRD (DBM,XX2)
.C'N'BIT==:.C'N'SCC
.CPBIT=:.C0BIT-.C0CDB+.EVCDB
>
	EVENTM (<SC,QP>)

	DEFINE	KL,<LG.TEN+LG.KLP+.E'N'EPT/PAGSIZ>
	DEFINE	KS,<SG.TEN+SG.KLP+.E'N'EPT/PAGSIZ>
CWRD (EBR,<KILS>)		;;EXEC BASE REGISTER ON THIS CPU
IFN M.KS10,<
CWRD (FEF,0)			;;FLAG SET NON-ZERO WHEN FE INTERRUPTS
> ;END IFN M.KS10
CWRD (CTN,CT'N'LIN##)		;;RH = CTY NUMBER FOR THIS CPU
				;;LH = DLS LINE NUMBER ON DTE
IFN M.KL10,<
CWRD (TTD,M'N'TTDN)		;TTYS ON THIS CFE
CWRD (ETD,<IFIW ETDTB'N'##(F)>)	;;ETD TABLE FOR THIS CPU
CWRD (SPF,0)			;;CFE SECONDARY PROTOCOL FLAGS (^-FEATURES)
CWRD (SCA,-1)			;;SCA INTERLOCK NESTING
IFN M.SCA,<
CWRD (SCP,0)			;;SCA CHANNEL ENABLE STATES
>; END IFN M.SCA
>; END IFN M.KL10
CWRD (SIN,-1)			;;SCNSER INTERLOCK NESTING
IFN M.TAPE,<
CWRD (TPN,-1)			;;MAGTAPE INTERLOCK NESTING
CWRD (TPP,0)			;;MAGTAPE CHANNEL ENABLE STATES
> ;END IFN M.TAPE
IFN FTENET,<
CWRD (ETH,-1)			;;ETHERNET INTERLOCK NESTING
>; END IFN FTENET
CWRD (CA0,,20,CRSHAC)		;AC BLOCK 0 ON A CRASH
	.C'N'CAC==.C'N'CA0	;;YET ANOTHER NAME
	.CPCAC==:.C'N'CA0-.C'N'CDB+.EVCDB ;;...
CWRD (STT,0)			;;TEMP USED BY APRSER FOR TRAP PROCESSING

;;THE FOLLOWING TWO ENTRIES MUST BE CONTIGUOUS
CWRD (ST1,0)			;;PLACE TO SAVE T1 ON PAGE TRAPS
CWRD (ST2,0)			;;PLACE TO SAVE T2 ON PAGE TRAPS

;;THE FOLLOWING TWO ENTRIES MUST BE CONTIGUOUS
CWRD (TPC,0)			;;TEMP USED BY APRSER FOR IME PROCESSING
CWRD (TP1,0)			;;TEMP USED BY APRSER FOR IME PROCESSING
CWRD (TPF,0)			;;TEMP USED BY APRSER FOR IME PROCESSING
CWRD (EJT,0)			;;TEMP USED BY APRSER FOR IME PROCESSING
IFN FTRTTRP,<
IF1,<
CWRD (RCT,,6)			;;REAL TIME PI CHANNEL TABLE
CWRD (RDT,,6)			;;REAL TIME DISMISS TABLE
>
IF2,<
	ZZ==10*N+1

	DEFINE	BLDTB1(ZZ)
	<IFNDEF UNIQ'ZZ,<BLDTB2(ZZ)>
	IFDEF	UNIQ'ZZ,<IFE UNIQ'ZZ,<BLDTB2(ZZ)>
				IFN UNIQ'ZZ,<EXP 0>>>

	DEFINE	BLDTB2(ZZ)
	<IFN CUSD'ZZ,<EXP CH'ZZ>
	IFE	CUSD'ZZ,<XWD 400001,CH'ZZ>>

	DEFINE	BLDTB3(ZZ)
	<IFDEF CHND'ZZ,<XWD RTSV'ZZ,CHND'ZZ>
	IFNDEF	CHND'ZZ,<EXP 0>>

CWRD (RCT,,0)
REPEAT 6,<
	BLDTB1(\ZZ)
	ZZ==ZZ+1>

	ZZ==10*N+1


CWRD (RDT,,0)
REPEAT 6,<
	BLDTB3(\ZZ)
	ZZ==ZZ+1>
> ;;END IF2
> ;;END IFN FTRTTRP
CWRD (CPI,0)			;;PI STATUS

;;THE FOLLOWING TWO ENTRIES MUST BE CONTIGUOUS
CJSR (SVA,<JRST SVSETS>)	;;JSR HERE TO SAVE ALL AC SETS
CWRD (TRP,0)			;;MUUO DURING CRASH
CWRD (RTS,0)			;;TEMP USED DURING RTTRP ERROR PROCESSING
CWRD (RTT,0)			;;RTTRP IN PROGRESS FLAG (DEFINED
				;; HERE BECAUSE IT MUST BE 0 DURING ONCE-ONLY)
CWRD (TML,0)			;;VALUE OF "TIME" AT LAST CLOCK TIC
				;; USED FOR MAINTAINING CLOCK QUEUE AND
				;; SMITHSONIAN DATE
CWRD (OCB,0)			;;0 IF THIS CDB ISN'T OWNED BY ANY CPU
CWRD (DWD,-1)			;;RECURSION INTERLOCK FOR DIE

;;PI SAVE ROUTINES
.C'N'SAV==:.
.CPSAV=:.-.C'N'CDB+.EVCDB
	IFE N,<
		SAV1,,SAV1
		SAV2,,SAV2
		SAV3,,SAV3
		SAV4,,SAV4
		SAV5,,SAV5
		SAV6,,SAV6
	> ;;END IFE N
	IFN N,<
		SAVB'N'1,,SAV'N'1
		SAVB'N'2,,SAV'N'2
		SAVB'N'3,,SAV'N'3
		SAVB'N'4,,SAV'N'4
		SAVB'N'5,,SAV'N'5
		SAVB'N'6,,SAV'N'6
	> ;;END IFN N

;;START OF AUTOCONFIGURE DATA
CWRD (ATR,<-1>)			;;DATA BASE INTERLOCK REQUEST COUNT
CWRD (ATO,<-1>)			;;DATA BASE INTERLOCK OWNER ID
CWRD (ATP,0)			;;SAVED PI SYSTEMS STATE
CWRD (ASC,<-1>)			;;NUMBER OF AUTO-CONFIGURED SOFTWARE CHANNELS
CWRD (DVC,0)			;;DEVICE CODE
CWRD (DRV,0)			;;DRIVER DISPATCH
CWRD (CHA,0)			;;CHANNEL DATA BLOCK ADDRESS
CWRD (TSN,,2)			;;TEMPORARY DRIVE SERIAL NUMBER STORAGE
IFN M.KL10,<
CWRD (CNI,<CONI  000,T1>)	;;CONI
CWRD (CNO,<CONO  000,(T1)>) 	;;CONO
CWRD (DTI,<DATAI 000,T2>)	;;DATAI
CWRD (DTO,<DATAO 000,T2>)	;;DATAO
CWRD (BKI,<BLKI  000,T2>)	;;BLKI
CWRD (BKO,<BLKO  000,T2>)	;;BLKO
>; END IFN M.KL10
IFN M.KS10,<
CWRD (UMR,,MAXUBA)		;;HIGHEST MAPPING REGISTER ASSIGNED ON UBA
>; END IFN M.KS10
;;END OF AUTOCONFIGURE DATA

CWRD (CML,0)			;;LDB ADDRESS OF LINE ON WHICH COMMAND IS BEING
				;; PROCESSED ON THIS CPU
;;KL10 ERROR REPORTING/RECOVERY
IFN M.KL10,<
CWRD (SB0,<100000,,0>)		;;DO SBDIAG 0 HERE ON ERRORS
CWRD (S0A,<0>)			;;ANSWER RETURNED HERE
CWRD (SB1,<100000,,1>)		;;SBDIAG FN 1 DONE HERE
CWRD (S1A,<0>)			;;ANSWER RETURNED HERE
>;END IFN M.KL10

CWRD (TOA,CCTYO##)		;;TYPE OUT ADDRESS FOR THIS CPU (OLD COMTOA)
CWRD (TIV,0)			;;ADDRESS OF VECTOR OF INPUT ROUTINES
CWRD (LFC,0)			;;LAST FORCED COMMAND INDEX FOR JOB IN COMCON
;EXEC DDT WORDS
CWRD (DDT,<BPTNOP>)		;;NOOP OR INSTRUCTION TO ENTER EDDT
				;; THIS WORD MAY BE EXECUTED ANYTIME ANY
				;; ROUTINE WANTS TO ENTER EDDT VIA THE
				;; THE UNSOLICITED BREAKPOINT FACILITY.
				;; SETUP BY CPUDDT.

;;EXEC DATA VECTOR FOR EDDT SYMBOL TABLE HIDING
CWRD (EDV,<XWD 'EDV',.EDLEN>)	;;CODE,,LENGTH OF EXEC DATA VECTOR
DEFINE	HSBDEF<
IFE FTXMON,<.C'N'SYB>
IFN FTXMON,<0>
>
CWRD (ED1,<HSBDEF>)		;;ADDRESS OF THE ADDRESS SWAPPING BLOCK
CWRD (ED2,0)			;;RELOCATED CONTENTS OF .JBSYM
CWRD (ED3,0)			;;RELOCATED CONTENTS OF .JBUSY
CWRD (ED4,<.C'N'HSF>)		;;ADDRESS OF A WORD FOR DDT TO PLAY WITH
	DEFINE	KL,<CT.KL!ED.KLP!ED.XKL>
	DEFINE	KS,<CT.KS!ED.KLP>
CWRD (ED5,<KILS>)		;;CPU/PAGING/HARDWARE DATA
CWRD (ED6,<.E'N'EPT>)		;;PHYSICAL ADDRESS OF THE EPT
CWRD (ED7,<SPTTAB>)		;;PHYSICAL ADDRESS OF THE SPT
CWRD (ED8,0)			;;PHYSICAL ADDRESS OF THE CST
CWRD (ED9,<CPNDDT>)		;;PHYSICAL ADDRESS OF CPNDDT
CWRD (EDA,<-M.CPU,,ASNTAB>) 	;;AOBJN TO CPU SERIAL NUMBERS
CWRD (EDB,.C'N'ACA)		;;PHYSICAL ADDR. OF VIRTUAL ADDR. OF CRASH ACS
	IFE <M.CPU-N-1>,<.XX==.C0EDV>
	IFG <M.CPU-N-1>,<.XX==.C'N'CDB+.CPLEN+<.C'N'EDV-.C'N'CDB>>
CWRD (EDC,.XX)		 	;;VIRTUAL ADDR OF NEXT EDV IN RING
CWRD (HSF,0)			;;DDT SCRATCH PAD
IFE FTXMON,<
CWRD (SYB,<1+4>)		;;# WORDS (INC THIS) IN HIDDEN SYMBOL BLOCK
				;;FIRST SUB-BLOCK
CWRD (SY1,<SYMSIZ>)		;;(0) NUMBER OF WORDS TO SWAP
CWRD (SY2,<.E'N'MAP+<MONORG/PAGSIZ>>) ;;(1) FIRST WORD TO SWAP
CWRD (SY3,SYMBK1)		;;(2) PLACE WHERE NEW MAP MAY BE FOUND
CWRD (SY4,SYMBK2)		;;(3) PLACE TO SAVE OLD CONTENTS
				;;END OF FIRST SUB BLOCK
>;; END IFE FTXMON

CXPC (SPC,<IC.UOU>,PERISH##)	;;XPCW ENTRY TO DIE
				;;STOPCODE OLD FLAGS & PC, NEW FLAGS & PC

IFN M.KL10,<
CWRD (TMI,TM'N'INT)		;;ADDRESS OF TIMER INTERRUPT ROUTINE
>;; END IFN M.KL10

.CPCLN==.-.C0CDB		;;LENGTH OF CONSTANTS AREA
;;VARIABLES AREA FOR CPU0  (ALSO DEFINED SYMBOLS FOR CPU 1)

;;OLD NSWTBL GETTAB HAS SOME VARIABLES WHICH ARE SYSTEM RATHER THAN CPU
;;DEPENDENT.  HOWEVER FOR COMPATIBILITY, THEY ARE KEPT TOGETHER.  .SYTBL
;;HAS NEW SYSTEM VARIABLES DEFINED AFTER 5.03 RELEASE
IFE	N,<
NSWTBL==:.-10			;;GETTAB TABLE NO 12. VARIABLES PERTAINING
				;; TO SWAPPING AND NON-SWAPPING SYSTEMS.
				;; FIRST 10 LOCATION NO LONGER USED.
				;;THE NUMBERS IN () ARE FOR NEW CPU DEPENDENT
				;; GETTAB TABLE .GTC0V.
> ;;END IFE N

LOC==.				;;START LOC AT ABS. BEG OF VARIABLE AREA
				;; LOC USED IN V MACRO AS A LOCATION COUNTER
CWRD (VBG,,0)			;;BEGINING OF VARIABLE AREA

;;START OF SYSTEM VARIABLES
CWRD (,,1,CORMAX)		;;(000) MAXIMUM CORE REQUEST+1 (IE LARGEST
				;;      RELATIVE ADDRESS + 1)
				;;      CAN BE RESTRICTED TO LESS THAN ALL
				;;      OF USER CORE BY BUILD AND/OR ONCE
CWRD (,,1,CORLST)		;;(001) 1 BIT BYTE POINTER TO LAST FREE
				;;      BLOCK POSSIBLE
CWRD (,,1,CORTAL)		;;(002) TOTAL NUMBER OF FREE+DORMANT+IDLE
				;;      CORE BLKS LEFT
CWRD (,,1,SHFWAT)		;;(003) JOB NUMBER SHUFFLER HAS TEMPORARILY
				;;      STOPPED FOR ITS I/O DEVICES TO BECOME
				;;      INACTIVE BEFORE SHUFFLING
CWRD (,0)			;;(004) OBSOLETE
CWRD (UPT)			;;(005) UPTIME FOR THIS CPU
CWRD (,,1,SHFWRD)		;;(006) TOTAL NUMBER OF WORDS SHUFFLED
CWRD (,,1,STUSER)		;;(007) JOB CURRENTLY USING THE SYSTEM TAPE
				;;      NEEDED SO CONTROL C WILL NOT TIE UP
				;;      SYSTEM TAPE
CWRD (,,1,HIGHJB)		;;(010) HIGHEST JOB NUMBER CURRENTLY ASSIGNED
CWRD (,,1,CLRWRD)		;;(011) TOTAL NUMBER OF WORDS CLEARED BY
				;;      'CLRCOR' ROUTINE
CWRD (LST,,1,LSTWRD)		;;(012) LOST TIME ON THIS CPU.  TOTAL NUMBER
				;;      OF CLOCK TICKS WHEN NULL JOB RAN BUT
				;;      OTHER JOBS WANTED TO RUN AND COULD NOT
				;;      DO SO BECAUSE: --
				;;      1. SWAPPED OUT OR ON WAY IN OR OUT
				;;      2. MONITOR WAITING FOR I/O TO STOP SO
				;;         IT CAN SHUFFLE OR SWAP
				;;      3. JOB BEING SWAPPED OUT BECAUSE IT IS
				;;         EXPANDING CORE
CWRD (,,1,MEMSIZ)		;;(013) SIZE OF PHYSICAL MEMORY IN WORDS
CWRD (TPE)			;;(014) TOTAL PARITY ERROR WORDS IN MEMORY
				;;      DETECTED ON DURING ALL CPU SWEEP WHILE
				;;      PROCESSOR WAS IN EXEC OR USER MODE.
CWRD (SPE)			;;(015) TOTAL NON-REPRODUCING PARITY ERRORS
				;;      IN MEMORY.  IE ONES WHICH DID NOT
				;;      REOCCUR WHEN SAME CPU SWEPT THRU CORE.
CWRD (MPC)			;;(016) MEMORY PARITY CONTINUES
				;;      COUNT OF NUMBER OF TIMES OPERATOR
				;;      PUSHED CONTINUE AFTER SERIOUS MEMORY
				;;      PARITY HALT.  LH = -1 IF SERIOUS ERROR
				;;      ON THIS BAD PARITY (MUST HALT)
CWRD (MPA)			;;(017) FIRST BAD PHYSICAL MEMORY ADDRESS
				;;      FOUND WHEN MONITOR SWEPT THRU CORE
				;;      AFTER PROCESSOR DETECTED BAD PARITY
CWRD (MPW)			;;(020) MEMORY PARITY WORD.  CONTENTS OF FIRST
				;;      BAD WORD FOUND BY MONITOR WHEN MONITOR
				;;      SWEPT THRU CORE AFTER FIRST PARITY
CWRD (MPP)			;;(021) PC OF LAST MEMORY PARITY NOT COUNTING
				;;      SWEEP THRU CORE
CWRD (,,1,EPOCNT)		;;(022) NUMBER OF PDL OVERFLOWS AT UUO LEVEL
				;;      IN EXEC MODE NOT RECOVERED
CWRD (,,1,EPOREC)		;;(023) NUMBER OF PDL OVERFLOWS AT UUO LEVEL
				;;      IN EXEC MODE RECOVERED
CWRD (,,1,MAXMAX)		;;(024) HIGHEST LEGAL VALUE OF CORMAX
CWRD (,,1,SYSKTM)		;;(025) KSYS COUNT-DOWN TIMER
CWRD (,,1,CORMIN)		;;(026) LOWER BOUND ON CORMAX.  LOKCON WILL
				;;      NEVER ALLOW CORMAX TO BECOME SMALLER
				;;      THAN THE CONTENTS OF THIS LOCATION
CWRD (ABC)			;;(027) ADDRESS BREAK COUNT
CWRD (ABA)			;;(030) ADDRESS BREAK ADDRESS
CWRD (LJR)			;;(031) LAST JOB RUN ON THIS CPU.  .CPJOB IS
				;;      COPIED TO .CPLJR WHENEVER JOB IS
				;;      CHANGED (INCLUDING TO NULL JOB)
CWRD (ODA,,3)			;;(032) OBSOLETE
CCON (NSWMXL,<<.-NSWTBL-1>B26>)	;;MAXIMUM NSWTBL ENTRY
;;NOTE: NO NEW ENTRIES MAY BE ADDED TO NSWTBL

CWRD (STS)			;;(035) STOP TIME SHARING ON THIS CPU.
				;;      CONTAINS JOB NO. WHICH DID TRPSET UUO.
CWRD (RUN)			;;(036) CPU SCHEDULING BITS (SEE .STRUN)
CWRD (NUL)			;;(037) NULL TIME IN JIFFIES
CWRD (EDI)			;;(040) NUMBER OF EXEC DON'T CARE INTERRUPTS.
				;;      IE USER ENABLED APR INTERRUPTS WHICH
				;;      MONITORS CAUSES (AOV,N,FOV).
				;;      LH = EXEC PC SO WE CAN FIX INEFFICIENT
				;;      CODE
CWRD (JOB)			;;(041) CURRENT JOB ON THIS CPU. REFERENCED
CWRD (OHT)			;;(042) OVERHEAD TIME IN JIFFIES
CWRD (EVM)			;;(043) MAXIMUM AMOUNT OF EXEC VIRTUAL
				;;      ADDRESS SPACE ALLOWED TO BE USED FOR
				;;      MAPPING USER SEGMENTS IN EXEC MODE BY
				;;      THE LOCK UUO.
CWRD (EVU)			;;(044) TOTAL AMOUNT OF EXEC VIRTUAL ADDRESS
				;;      SPACE CURRENTLY BEING USED TO MAP
				;;      USER SEGMENTS.
CWRD (LLC)			;;(045) LOCK LOOP COUNT. NUMBER OF TIMES THE
				;;      CPU HAS LOOPED WAITING FOR OTHER CPUS
CWRD (TUC)			;;(046) NUMBER. OF UUOS FROM EXEC AND USER
				;;      MODE SINCE SYSTEM WAS STARTED
CWRD (TJC)			;;(047) NUMBER OF JOB CONTEXT-SWITCHES
				;;      COUNT FOR THIS CPU INCLUDING NULL JOB
				;;      NULL JOB SINCE SYSTEM WAS STARTED
CWRD (TNE)			;;(050) TOTAL NXM'S THIS CPU
CWRD (SNE)			;;(051) TOTAL NON-REPRODUCIBLE NXM'S THIS CPU
CWRD (NJA)			;;(052) TOTAL JOBS CRASHED THIS NXM
CWRD (MNA)			;;(053) FIRST ADDRESS FOUND WITH NXM
CWRD (EBJ)			;;(054) EBOX TICKS/JIFFY (ONCE COMPUTED)
CWRD (MBJ)			;;(055) MBOX TICK/JIFFY
CWRD (PBA)			;;(056) PHYSICAL ADDR WITH BAD PARITY ON LAST
				;;      AR/ARX PARITY TRAP
CWRD (TBD)			;;(057) CONTENTS OF BAD WORD ON LAST AR/ARX
				;;      PARITY TRAP
CWRD (TGD)			;;(060) GOOD CONTENTS OF WORD AFTER RECOVERED
				;;      AR/ARX PARITY TRAP
CWRD (NPT)			;;(061) TOTAL NUMBER OF AR/ARX PARITY TRAPS
CWRD (AER)			;;(062) RDERA ON PARITY/NXM INTERRUPT
CWRD (PEF)			;;(063) CONI APR, ON PARITY/NXM INTERRUPT
CWRD (PSB,,4)			;;(064-067) OBSOLETE
CWRD (PPC)			;;(070) PC ON LAST AR/ARX PARITY TRAP
CWRD (PFW)			;;(071) PAGE FAIL WD ON LAST AR/ARX PARITY TRAP
CWRD (HPT)			;;(072) NUMBER OF HARD AR/ARX PARITY TRAPS
CWRD (SAR)			;;(073) NUMBER OF SOFT AR/ARX TRAPS
CWRD (PTP)			;;(074) NUMBER OF PAGE TABLE PARITY TRAPS
CWRD (CSN)			;;(075) NUMBER OF CACHE SWEEPS STARTED (CACHE
				;;      SWEEP SERIAL NUMBER)
CWRD (CLN)			;;(076) NUMBER OF TIMES SCHEDULER SKIPPED OVER
				;;      A JOB BECAUSE CACHE SWEEP HAD TO BE
				;;      DONE FIRST
CWRD (CLT)			;;(077) AMOUNT OF TIME IN JIFFIES THAT CPU RAN
				;;      NULL JOB BECAUSE OF STATE OF CACHE
CWRD (CSD)			;;(100) CACHE - SWAPPER DELAY COUNT-INCREMENT
				;;      ON 1088 SYSTEMS IF SWAPPER HAS TO WAIT
				;;      FOR ANOTHER CPU TO SWEEP ITS CACHE
				;;      BEFORE IT CAN START I/O
CWRD (CRN)			;;(101) CACHE SWEEP REQUEST SWEEP COUNT (SIC)
				;;      COMMANDING THIS VALUE TO .CPCSD+.CPCLN
				;;      (NUMBER OF SWEEP REQUESTS MADE) WILL
				;;      INDICATE TO WHAT EXTENT THE REQUEST
				;;      SCHEME IS A BOTTLENECK
CWRD (CEC)			;;(102) COUNT OF NON-RECOVERABLE AR/ARX
				;;      PARITY ERRORS WHICH INVOLVED CACHE.
				;;      AFTER 3 SUCH FAILURES CACHE IS TURNED
				;;      OFF IN TRAP ROUTINE WITH APPROPRIATE
				;;      MESSAGE TO OPERATOR.
CWRD (PTR)			;;(103) RETRY WORD FOR AR/ARX PARITY TRAP
				;;      ROUTINE.  INCLUDES STATUS FLAGS IN LH
				;;      AND RETRY COUNT IN RH.
CWRD (TSD)			;;(104) AR/ARX TRAP ROUTINE HAS ALREADY
				;;      SAVED APR/ERA/SB DIAGS ETC FOR ERROR
				;;      REPORTING.  WON'T BE DONE AGAIN AT
				;;      APR INTERRUPT.
CWRD (REP)			;;(105) USED BY PARITY/NXM RECOVERY ROUTINES
				;;      TO DETERMINE WHICH TYPE ERRORS SHOULD
				;;      BE LISTED.
CWRD (NDB)			;;(106) NUMBER OF TIMES CPU'S DOORBELL WAS RUNG
CWRD (SBR)			;;(107) CPU/DEVICE STATUS BLOCKS READ
				;;      LH = UNUSED
				;;      RH = BITS TELLING WHICH STATUS BLOCKS
				;;           HAVE BEENREAD ON THIS CPU.
CWRD (BPF)			;;(110) BACKGROUND PERFORMANCE ANALYSIS FLAG
				;;      .LT. 0 IF METER ENABLED (SINCE COUNTED
				;;      UP AT CLOCK LEVEL ON EACH CPU.
				;;      PROGRAMS SHOULD CHECK FOR .LE. 0)
CWRD (FBI)			;;(111) FILE BLOCKS INPUT (READ)
CWRD (FBO)			;;(112) FILE BLOCKS OUTPUT (WRITTEN)
CWRD (SBI)			;;(113) SWAPPING BLOCKS INPUT (READ)
CWRD (SBO)			;;(114) SWAPPING BLOCKS OUTPUT (WRITTEN)
CWRD (SNC)			;;(115) NUMBER OF CPU STOPCDS
CWRD (SND)			;;(116) NUMBER OF DEBUG STOPCDS
CWRD (SNJ)			;;(117) NUMBER OF JOB STOPCDS
CWRD (SJN)			;;(120) JOB NUMBER OF LAST STOPCD
CWRD (SNM)			;;(121) NAME OF LAST STOPCD
CWRD (SPN)			;;(122) PROGRAM RUNNING AT LAST STOPCD
CWRD (SPP)			;;(123) PPN RUNNING AT LAST STOPCD
CWRD (STN)			;;(124) TTY NAME AT LAST STOPCD
CWRD (SUP)			;;(125) USER PC AT TIME OF LAST STOPCD
CWRD (SUU)			;;(126) UUO AT TIME OF LAST STOPCD
CWRD (EJN)			;;(127) JOB NUMBER AT LAST PARITY/NXM ERROR
CWRD (EPN)			;;(130) PROGRAM NAME AT LAST PARITY/NXM ERROR
CWRD (PPI)			;;(131) CONI PI, ON PARITY/NXM INTERRUPT
CWRD (TPI)			;;(132) CONI PI, ON PARITY/NXM TRAP
CWRD (RSI)			;;(133) NUMBER OF TIMES SCHEDULER INTERLOCK WAS
				;;      REQUESTED WHEN NOT OWNED
CWRD (TFI)			;;(134) NUMBER OF TAPE FRAMES READ
CWRD (TFO)			;;(135) NUMBER OF TAPE FRAMES WRITTEN
CWRD (SNI)			;;(136) NUMBER OF NODUMP STOPCDS
CWRD (STY)			;;(137) TYPE OF LAST STOPCODE
CWRD (SDT)			;;(140) UDT OF LAST STOPCODE ON THIS CPU
CWRD (ITP)			;;INTERVAL TIMER PATCH INSTRUCTION
CWRD (ITJ)			;;JOB WHICH PATCHED INTERVAL TIMER

;;**********************************************************************
;;PUT NEW PUBLISHED VARIABLES ABOVE HERE
;;**********************************************************************
;;PUT NEW PUBLISHED SUBTABLES BELOW HERE (SO LAST BUT STILL
;;**********************************************************************
;; INSIDE LEGAL RANGE OF VARIABLE GETTAB FOR THIS CDB
;;**********************************************************************

;;RESPONSE SUBTABLE, POINTED TO BY .CPRSP
IFN FTRSP,<
;;INDICIES INTO 3 WORD BLOCKS:
	RSPAXR==:0		;;ACCUMULATE SUM OF RESPONSE
	RSPNXR==:1		;;NO. OF RESPONSES
	RSPHXR==:2		;;SUM OF SQUARES OF RESPONSE(HIGH ORDER HALF)
	RSPLXR==:3		;;SUM OF SQUARES OF RESPONSE(LOW ORDER HALF)

CWRD (AOR)			;;(R00) ACCUMULATED TTY OUTPUT UUO RESPONSE.
				;;      NUMBER. OF JIFFIES USERS HAVE SPENT
				;;      FOR THEIR JOBS TO DO A TTY OUTPUT UUO
				;;      AFTER TYPING INPUT (COMMAND OR USER
				;;      TTY)
CWRD (NOR)			;;(R01) NUMBER OF TTY OUTPUT UUO RESPONSES
CWRD (HOR)			;;(R02) SUM OF SQUARES OF TTY OUTPUT UUO
				;;      RESPONSES -  HIGH ORDER WORD
CWRD (LOR)			;;(R03) SUM OF SQUARES OF TTY OUTPUT UUO
				;;      RESPONSES -  LOW ORDER WORD
CWRD (AIR)			;;(R04) ACCUMULATED TTY INPUT UUO RESPONSES.
				;;      NUMBER OF JIFFIES USERS SPENT WAITING
				;;      FOR THEIR JOBS TO DO A TTY INPUT UUO
				;;      AFTER TYPING INPUT (COMMAND OR USER
				;;      TTY)
CWRD (NIR)			;;(R05) NUMBER OF TTY INPUT UUO RESPONSES
CWRD (HIR)			;;(R06) SUM OF SQUARES OF TTY INPUT UUO
				;;      RESPONSES - HIGH ORDER WORD
CWRD (LIR)			;;(R07) SUM OF SQUARES OF TTY INPUT UUO
				;;      RESPONSES - LOW ORDER WORD
CWRD (ARR)			;;(R10) ACCUMULATED CPU QUANTUM REQUE RESPONSES
				;;      NUMBER OF JIFFIES USERS SPENT WAITING
				;;      FOR THEIR JOBS TO EXCEED CPU QUANTUM
				;;      AFTER TYPING INPUT (COMMAND OR USER
				;;      TTY)
CWRD (NRR)			;;(R11) NUMBER OF CPU QUANTUM REQUEUE RESPONSES
CWRD (HRR)			;;(R12) SUM OF SQUARES OF CPU QUANT. REQUEUE
				;;      RESPONSES - HIGH ORDER WORD
CWRD (LRR)			;;(R13) SUM OF SQUARES OF CPU QUANT. REQUEUE
				;       RESPONSES - LOW ORDER WORD
CWRD (AXR)			;;(R14) ACCUMULATED RESPONSE TERMINATED BY
				;;      FIRST OF ABOVE 3 EVENTS (TTY OUTPUT
				;;      UUO,N, TTY INPUT UUO, OR CPU QUANTUM
				;;      REQUE)
CWRD (NXR)			;;(R15) NUMBER OF SUCH RESPONSES
CWRD (HXR)			;;(R16) SUM OF SQUARES OF ANY OF ABOVE - HIGH
				;;      ORDER WORD
CWRD (LXR)			;;(R17) SUM OF SQUARES OF ANY OF ABOVE - LOW
				;;      ORDER WORD
CWRD (ACR)			;;(R20) ACCUMULATED CPU RESPONSE. NUMBER OF
				;;      JIFFIES USERS HAVE SPENT WAITING FOR
				;;      THIS CPU
CWRD (NCR)			;;(R21) NUMBER OF CPU RESPONSES ON THIS CPU
CWRD (SCR)			;;(R22) HIGH ORDER WORD OF SQUARE OF CPU
				;;      RESPONSES
CWRD (SCL)			;;(R23) LOW ORDER WORD
CWRD (FADL)			;;(R24) NUMBER OF FADL INSTRUCTIONS SIMULATED
CWRD (FSBL)			;;(R25) NUMBER OF FSBL INSTRUCTIONS SIMULATED
CWRD (FMPL)			;;(R26) NUMBER OF FMPL INSTRUCTIONS SIMULATED
CWRD (FDVL)			;;(R27) NUMBER OF FDVL INSTRUCTIONS SIMULATED
CWRD (UFA)			;;(R30) NUMBER OF UFA INSTRUCTIONS SIMULATED
CWRD (DFN)			;;(R31) NUMBER OF DFN INSTRUCTIONS SIMULATED
CWRD (NRI)			;;(R32) NUMBER OF CHARS (EXCLUDING MIC)RECEIVED
CWRD (NXI)			;;(R33) NUMBER OF CHARS(INCLUDING FILL)XMITTED
CWRD (NEI)			;;(R34) NUMBER OF CHARS ECHOED
CCON (.CPRSL,<.-.C0AOR>)	;;SUBTABLE LENGTH
> ;;END FTRSP

;;MORE MEMORY PARITY ANALYSIS SUBTABLE, POINTED TO BY .CPPAR
CWRD (LPA)			;;(R00) LAST (HIGHEST) BAD MEM PARITY ADDRESS
				;;      ON LAST SWEEP OF MEMORY.  USED TO TELL
				;;      OPERATOR RANGE OF BAD MEMORY
CWRD (MPR)			;;(R01) RELATVE. ADDRESS (NOT VIRTUAL) IN HIGH
				;;      OR LOW SEG OF LAST MEMORY PARITY ERROR
CWRD (PTS)			;;(R02) NUMBER OF PARITY ERROR THIS (LAST)
				;;      SWEEP OF CORE SET TO ZERO AT BEGNING
				;;      OF SWEEP
CWRD (PSC)			;;(R03) NUMBER OF PARITY SWEEPS BY MONITOR
CWRD (UEP)			;;(R04) NUMBER OF USER ENABLED PARITY ERRORS
CWRD (PAA)			;;(R05) AND OF BAD ADDRESSES THIS (LAST)
				;;      MEMORY PARITY SWEEP
CWRD (PAC)			;;(R06) AND OF BAD CONTENTS THIS (LAST)
				;;      MEMORY PARITY SWEEP
CWRD (POA)			;;(R07) OR OF BAD ADDRESSES THIS (LAST)
				;;      MEMORY PARITY SWEEP
CWRD (POC)			;;(R10) OR OF BAD CONTENTS THIS (LAST)
				;;      MEMORY PARITY SWEEP
CWRD (PCS)			;;(R11) NUMBER OF SPURIOUS PARITY ERRORS (APR
				;;      SWEEP FOUND NO BAD PARITY BUT CHANNEL
				;;      HAD REQUESTED SWEEP RATHER THAN
				;;      PROCESSOR.  THIS INDICATES A CHANNEL
				;;      MEMORY PORT PROBLEM.
CWRD (MET)			;;(R12) MOS ERROR TIMER
CWRD (MEC)			;;(R13) MOS ERROR COUNTER
CWRD (TME)			;;(R14) TOTAL MOS ERRORS
CCON (.CPPRL,<.-.C0LPA>)	;;SUBTABLE LENGTH

;;BAD ADDRESS SUBTABLE, POINTED TO BY .CPPAR
CWRD (BAT,,M.CBAT)		;;(R00) TABLE OF BAD ADDRESSES ON LAST
				;;      MEMORY PARITY SWEEP.  NOT CLEARED SO
				;;      NUMBER OF VALID ENTRIES KEPT IN .CPPTS

;;MEMORY NXM SUBTABLE, POINTED TO BY .CPNMT
CWRD (LNA)			;;(R00) LAST NXM ADDRESS
CWRD (MNR)			;;(R01) LAST NXM RELATIVE ADDRESS
CWRD (NTS)			;;(R02) NUMBER OF NXM'S FOUND THIS SWEEP
CWRD (NSC)			;;(R03) NUMBER OF NXM SWEEPS DONE
CWRD (UEN)			;;(R04) NUMBER OF USER ENABLED NXM'S
CWRD (NAA)			;;(R05) LOGICAL AND OF BAD ADDRESSES
CWRD (NOA)			;;(R06) INCLOSIVE OR OF BAD ADDRESSES
CWRD (NCS)			;;(R07) NUMBER OF SPURIOUS CHANNEL NXM'S
CCON (.CPNML,<.-.C0LNA>)	;;SUBTABLE LENGTH

;KS10 SOFT MEMORY ERROR TABLE POINTED TO BY .CPMSS
IFN M.KS10,<
CWRD (SME)			;;(R00) NUMBER OF SOFT MEMORY ERRORS
CWRD (SMS)			;;(R01) MEM STATUS REGISTER AT LAST SOFT ERROR
CWRD (HME)			;;(R02) NUMBER OF HARD MEMORY ERRORS
CWRD (HMS)			;;(R03) MEM STATUS REGISTER AT LAST HARD ERROR
CWRD (SMC)			;;(R04) NUMBER OF SOFT ERRORS IN LAST MINUTE
CWRD (MFL)			;;(R05) LAST MEMORY ERROR FLAG (0=SOFT, 1=HARD)
CCON (.CPSML,<.-.C0SME>)	;;SUBTABLE LENGTH
>;; END IFN M.KS10
;APR STATUS SUBTABLE
CWRD (APD,,1,VERSTS)		;;(R000) APRID
CWRD (ACN,,1,APRSTS)		;;(R001) CONI APR,
CWRD (PIC,,1,PISTS)		;;(R002) CONI PI,
CWRD (PGD,,1,UPTSTS)		;;(R003) DATAI PAG,
CCON (LENSTS,<UPTSTS-VERSTS>)	;;SUBTABLE LENGTH

CWRD (PGC,,1,EPTSTS)		;;(R004) CONI PAG,
CWRD (UP0,,4)			;;(R005-R010) UPT LOCS 424-427
CWRD (ERA,,1,ERASTS)		;;(R011) RDERA
CWRD (RHC,,8)			;;(R012-R021) CONI RH20, FOR ALL RH20'S
CWRD (DTC,,4)			;;(R022-R025) CONI DTEN,
CWRD (EP0,,40)			;;(R026-R065) EPT LOCATIONS 0-37
CWRD (EP1,,40)			;;(R066-R125) EPT LOCATIONS 140-177
CWRD (UP1,,4)			;;(R126-R131) UPT LOCS 500-503
CWRD (6,,5)			;;(R132-R136) AC BLOCK 6 REGS 0-3 AND 12
CWRD (7,,3)			;;(R137-R141) AC BLOCK 7 REGS 0 THROUGH 2

IFN M.KL10,<
;;IN ADDITION TO BEING A PART OF THE CPU STATUS BLOCK SUBTABLE, THE
;;SBDIAG BLOCK IS A CDB SUBTABLE IN ITS OWN RIGHT.  POINTER IS .CPSDP.
CWRD (SBD,,50)			;;(R142-R211) SBDIAG DATA
CCON (.CPSDL,<.-.C0SBD>)	;;SUBTABLE LENGTH
> ;END IFN M.KL10
CCON (.CPCSL,<.-.C0APD>)	;;SUBTABLE LENGTH
;;DEVICE STATUS BLOCK ENTRY FOR DEVICES ON THIS CPU.  THE ORDER OF THESE
;;ENTRIES MUST EXACTLY MATCH THE ORDER OF THE INSTRUCTIONS IN DVSXCT THAT
;;FILL THE ENTRIES.

CWRD (DVS,,0)			;;START OF DEVICE STATUS SUBTABLE
IFN M.KL10,<
CWRD (TMR)
CWRD (MTR)
CWRD (TTY)
CWRD (PRA)
CWRD (PPA)
CWRD (DLS)
CWRD (DAC)
CWRD (DAS)
CWRD (CRA)
CWRD (LPT)
CWRD (PLA)
CWRD (TMS)
CWRD (TMC)
CWRD (DX1)
CWRD (DSK)
CWRD (FH2)
CWRD (FSD)
CWRD (FS2)
CWRD (FS3)
CWRD (DPC)
CWRD (DP2)
CWRD (DP3)
CWRD (DP4)
CWRD (2DS)
CWRD (2DC)
CWRD (DLC)
CWRD (DLB)
CWRD (DC2)
CWRD (DB2)
CWRD (CDP)
CWRD (CRB)
CWRD (LPB)
CWRD (LPC)
CWRD (PLB)
CWRD (DAK)
CWRD (DDK)
CWRD (DH2)
CWRD (DFS)
CWRD (DS2)
CWRD (DS3)
CWRD (DDP)
CWRD (DD2)
CWRD (DD3)
CWRD (DD4)
CWRD (DDC)
CWRD (DDB)
CWRD (D2C)
CWRD (D2B)
CWRD (IVI,,10)
> ;;END IFN M.KL10

IFN M.KS10,<
CWRD (TMR)
CWRD (TMB,,2)
CWRD (UB1)
CWRD (UB3)
CWRD (RH1,,2)
CWRD (RH3,,2)
CWRD (LPT,,2)
CWRD (CDR)
CWRD (PRA)
CWRD (PPA)
CWRD (RXA)
> ;;END IFN M.KS10

CCON (.CPDVL,<.-.C0DVS>)	;;SUBTABLE LENGTH

IFN	M.KL10&FTRSP,<
CWRD (BPV,,<<BPATLN*4>>)		;;KL10 BACKGROUND PERFORMANCE NUMBERS
				;; EACH ENTRY IS 4 WORDS LONG
				;;  0'1 := RDTIME TOTAL ELAPSED TIME
				;;  2'3 := TOTAL PERF METER COUNT
> ;;END IFN M.KL10&FTRSP


;;***********************************************************************
;;INSERT NEW SUB TABLES JUST ABOVE HERE - SO AT END OF VARIABLE TABLE
;;INSERT NEW VARIABLES A FEW PAGES BACK - SO NEXT TO OTHER VARIABLES
;;***********************************************************************
CCON (.CPPVL,<<.-.C0VBG>B26>)	;;PUBLISHED CPU DEPENDANT VARIABLE LENGTH
;;UNPUBLISHED CPU DEPENDENT VARIABLES:
CWRD (ADR,,1,JOBADR)		;;XWD PROTECTION, RELOCATION FOR CURRENT
				;; JOB SAME AS JBTADR(JOB) AND AC R
CWRD (REL)			;;LH==0, RH CONTAINS CONTENTS OF PROTECTION
				;; REGISTER LOW ORDER BITS==1777 (HIGHEST
				;; RELATIVE LOC IN CURRENT USER AREA)
CWRD (PC,,2)			;;JOB PC WHEN SCHEDULER IS CALLED
XP USRPRT,JOBPRO
XP USRPR1,,USRPRT+1
XP USRHCU,USRPRT
XP USRPC,USRHCU+1
IFN FTMP,<IFE USRHCU&777774-USRPC&777774,<PRINTX ?USRHCU AND USRPC FALL IN THE SAME CACHE LINE (SEE PDLLEN IN S)>>
XP USRDDT,USRPC+2	;THIS DEPENDS ON JOBDDT-JOBPC=1
XP USRJDA,USRDDT+1
XP USRLO,USRJDA		;FIRST LOC CLEARED BY SETUSR ROUTINE
			; ON A CALL RESET. - ALSO CLEARS USRHCU
XP USRLO1,USRLO+1	;FIRST LOC+1
XP USRHI,USRJDA+17	;LAST LOC CLEARED BY SETUSR ROUTINE
CWRD (XTM)			;;TIME OF LAST SWITCH FROM MONITOR CYCLE TO
				;; OR VICE VERSA IN (SECONDS*RTCSEC)
CWRD (QNT)			;;CURRENT QUANTUM RUN TIME.  FORCE CPUTIM TO
				;; WHEN NEGATIVE TO RECOMPUTE ACTUAL QUANTUM
				;; RUN TIME LEFT
CWRD (LS2)			;;ADDITIONAL LOST TIME, IN JIFFIES*RTCSEC
				;; BEYOND LAST JIFFY
CWRD (NL2)			;;ADDITIONAL NULL TIME, IN JIFFIES*RTCSEC
				;; BEYOND LAST JIFFY
CWRD (OH2)			;;ADDITIONAL OVERHEAD TIME, IN JIFFIES*RTCSEC
				;; BEYOND LAST JIFFY
CWRD (TNT)			;;TIME INTERVAL (TICKS)SINCE LAST @ CLOCK LEVEL
CWRD (HTM)			;;HUNG DEVICE TIME CHECK FOR HUNG IO
CWRD (SEC)			;;NUMBER OF SECONDS LEFT BEFORE DOING ONCE A
				;; MINUTE CODE
IFN FTRTTRP,<
CWRD (RCU,,6)			;;COUNT OF REAL TIME CONSO'S ON SKIP CHAIN
CWRD (RIT,,6)			;;REAL TIME INITIALIZATION TABLE
CWRD (DMI)			;;REAL TIME DISMISS INSTRUCTION FOR CURRENT
				;; INTERRUPT
> ;;END IFN FTRTTRP
;SCHEDULER FLAGS:
CWRD (CKF,,1,CLKFLG)		;;;NON-ZERO WHEN CLK INTERRUPT (PI7) REQUESTED
				;; FOR ANY REASON
CWRD (TMF,,1,TIMEF)		;;NON-ZERO WHEN APR CLOCK TICKED ON THIS CPU.
				;; SET SO CLOCK INTERRUPT ROUTINES WILL KNOW
				;; ANOTHER JIFFY HAS PASTED.  SET BY APRINT,
				;; TESTED AND CLEARED BY CLKINT MODULE.
CWRD (SCF)			;;NON-ZERO AS A FLAG TO CLK ROUTINE TO FORCE
				;; RESCHEDULING, ON THIS CPU, EVEN THOUGH
				;; ITS CURRENT JOB IS IN EXEC MODE.  CAN HAPPEN
				;; ON MONITOR DETECTED ERRORS.

CWRD (CHT)			;;CLOCK HAS TICKED, START QUEUED I/O.

CWRD (RTF,,1,SCDRTF)		;;NON-ZERO ON REAL TIME RESCHEDULE REQUIRED
				;; REALLY A SYSTEM VARIABLE
CWRD (ISF)			;;NON-ZERO IF IN THE SCHEDULAR OR WHEN IN
				;; COMCON CONTAINS THE STACK POINTER JUST
				;; BEFORE COMMAND DISPATCH

CWRD (SUD)			;;SCAN USED FOR THIS SCHEDULING SCAN
IFN FTHPQ!FTNSCHED,<
CWRD (HQU)			;;NON-ZERO IF CURRENT JOB ON THIS CPU DID A
				;; HPQ UUO TO FORCE RESCHEDULING TO THE NEW HPQ
> ;;END IFN FTHPQ!FTNSCHED

CWRD (PLT)			;;POTENTIALLY LOST (WASTED) CLOCK TICK ON
				;; THIS CPU IF NON-ZERO.  NON-ZERO WHEN
				;; SCHEDULER SEES THAT THERE ARE JOBS WHICH ARE
				;; POTENTIALLY RUNABLE ON THIS CPU BUT HAS TO
				;; RUN NULL JOB.  ZERO WHEN IT FINDS A REAL
				;; JOB TO RUN OR NULL JOB IS ONLY JOB WHICH
				;; WANTS TO RUN ON THIS CPU.
IFN FTKL10,<
IFN FTMP,<
CWRD (CLF)			;;POTENTIAL CACHE LOST TIME FLAG (SEE .CPCLN)
CWRD (CL2)			;;LOW ORDER CACHE LOST TIME IN RTUPS UNITS
CWRD (SDA)			;;NUMBER OF TIMES CACHE WAS SWEPT BECAUSE OF
				;; CORE DEALLOCATION
> ;;END IFN FTMP
CWRD (CSR)			;;CACHE SWEEP REQUEST FLAG IF .GE. CURRENT
				;; SWEEP SERIAL NUMBER, MUST SWEEP AT CH7
				;; LEVEL FOR ANOTHER CPU
CWRD (CSW)			;;SWEEP SERIAL NUMBER TO WAIT FOR
> ;;END IFN FTKL10
CWRD (AEF)			;;APR ERROR FLAG ON THIS CPU.  CONTAINS APR
				;; CONI IF NULL JOB WAS CURRENT JOB ON THIS
				;; CPU WHEN APR ERROR OCCURRED SO COULD NOT
				;; STORE IN JOB DATA AREA.
				;; LEFT HALF USED FOR MEMORY PARITY CONTROL
				;; TO REQUEST PARITY SWEEPS AND PRINTING.
CWRD (SAC)			;;SAVED COPY OF .CPAEF
CWRD (APC,,2)			;;APR ERROR PC ON THIS CPU WHEN ERROR WHILE
				;; NULL JOB WAS CURRENT JOB ON THIS CPU.
CWRD (MDP,,2)			;;MEMORY PARITY ERROR DOUBLE WORD PC
CWRD (PPD,,2)			;;AR/ARX TRAP DOUBLE WORD PC
CWRD (NJE)			;;ERROR IN NULL JOB HAS OCCURRED IF NON-ZERO
CWRD (SFC)			;;SCHEDULER FAIRNESS COUNT. COUNT OF THE NUMBER
				;; OF SCANS OF THE PRIMARY SCAN TABLE WITHOUT
				;; GETTING TO THE LOWER QUEUES IN THE TABLE.
CWRD (SQF)			;;NON-ZERO IF CURRENT JOB WAS TAKEN FROM
				;; SUBQUEUES
CWRD (APR)			;;CONI APR INTO THIS LOCATION TO READ THE
				;; STATE OF MI PROG DIS SWITCH

IFN M.KL10,<
CWRD (IPI)			;;INTERVAL TIMER PI ASSIGNMENT
CWRD (DTT)			;;MINUTES TILL NEXT SEND DATE/TIME TO -20F
CWRD (EPW,,4)			;;SAVED DTE EXAMINE/PROTECTION WORD

;;EXEC MODE ADDRESS BREAK SCRATCH PATCH STORAGE
CWRD (ABF)			;;FLAGS (STOPCODE TYPE + CPU MASK)
CWRD (ABI)			;;INSTRUCTION TO XCT
CWRD (ABW)			;;ADDRESS BREAK WORD (CONDITIONS + ADDRESS)
CWRD (ABS,,S$MAXL)	 	;;STOPCODE
> ;;END IFN M.KL10
;PROCESSOR DEPENDENT VARIABLES FOR APR INTERRUPTS

CWRD (CN1)			;;CONTAINS CONSO MASK FOR APR INTERRUPTS,
CWRD (HRP)			;;LAST DATAO OUT TO SET HARDWARE RELOCATION
				;; AND PROTECTION FOR THIS CPU.
CWRD (SP,,2)			;;PLACE TO SAVE P ON APR INTERRUPT
CWRD (S17,,2)			;;PLACE TO SAVE AC 17 ON CLK INTERRUPT

;MEMORY PARITY ANALYSIS VARIABLES
CWRD (A00,,17)			;;FIRST WORD TO STORE AC0 ON PARITY SWEEP ON
				;; APR PI
CWRD (A17)			;;LAST WORD TO STORE AC17 ON PARITY SWEEP AT
				;; APR PI
CWRD (LPP)			;;LAST MEM PARITY PC USED TO DETECT PI DISMISS
				;; LOOPS
CWRD (LSB)			;;LAST SEG (HI OR LOW) WHICH IS (WAS) BLTED
				;; USED TO DETECT BAD PARITY DURING BLT
CWRD (LCI)			;;TIME OF LAST PAR/NXM INTERRUPT CAUSED BY A
				;; CHANNEL REFERENCE
CWRD (PIP)			;;POINTER TO REAL INTERRUPT PC
CWRD (PSP)			;;PARITY/NXM SWEEP IN PROGRESS
CWRD (CHE)			;;CHANNEL ERROR REPORTING IN PROGRESS
CWRD (TCX)			;;DATAI PAG, ON ERROR TRAP
CWRD (PFT)			;;PRE-EMPTIVE PAGE FAULT HANDLER (SEE SEILM)

IFN M.KL10,<
CWRD (TCT)			;;TRIAD COUNTER FOR 60HZ LEAP JIFFIES
CWRD (PJB)			;;JOB WHO OWNS PERFORMANCE METER (ZERO IF FREE)
CWRD (MJB)			;;MEASURED JOB (JOB ENABLE OF PERF. UUO)
				;; -2 = NULL JOB, 0 = DON'T CARE
CWRD (MJ1)			;;JOB ENABLE CONDITION SET ONLY WHEN METER
				;; IS RUNNING. (SEE APRSER)
CWRD (PMR)			;;NONZERO MEANS PERFORMANCE METER IS RUNNING
CWRD (PAE)			;;USED TO STORE PERFORMANCE ANALYSIS ENABLES
CWRD (PRQ)			;;SEMAPHORE USED TO TEST/GIVE METER AWAY
CWRD (APS)			;;NON ZERO MEANS ACCOUNTING AND PERFORMANCE
				;; METERS SHOULD BE KEPT IN SYNC
CWRD (MM0)			;;"VIRTUAL PERFORMANCE METER" HIGH ORDER
				;; MEMORY REFERENCE COUNT
CWRD (MM1)			;;"VIRTUAL PERFORMACE METER" LOW ORDER
				;; MEMORY REFERENCE COUNT
CWRD (BPC)			;;BACKGROUND PERF ANAL SAMPLE INTERVAL (TICKS)
CWRD (BPI)			;;B.P.A. SAVED PACTAB INDEX
CWRD (BPT,,2)			;;B.P.A. SAVED RDTIME AT START OF SAMPLE
CWRD (TIM)			;;CLOCK INTERRUPT FLAG
CWRD (KPB,,<<KPSLEN+3>/4>)	;;KLINIK PARAMETER BUFFER
CWRD (20F)			;;LH = FLAGS ABOUT RSX-20F FRONT END
				;;RH = COUNT OF CHARACTERS CURRENTLY BEING
				;;     OUTPUT
CWRD (20S,,2)			;;SPACE FOR INCOMING LINE SPEEDS
CWRD (20B,,<<TTDMOS+3>/4>)	;;BUFFER FOR 16BIT DATA TO 20F
CWRD (20D)			;;CHAIN OF DEVICE STATUS MESSAGES

;;LOCATIONS USED BY CPU HARDWARE ERROR RECOVERY
CWRD (PTH)			;;AR/ARX TRAP HAPPENED DURING PARITY SWEEP
CWRD (STE)			;;ERA CONTENTS ON SWEEP TRAP
CWRD (PTF)			;;COUNT OF PAGE TABLE PARITY TRAPS BETWEEN
				;; CLOCK TICKS USED TO CRASH SYSTEM IF TOO HIGH
CWRD (IOP)			;;API FUNCTION WORD ON I/O PAGE FAIL INTERRUPT
CWRD (IPG)			;;DATAI PAG, ON I/O PAGE FAIL INTERRUPT
CWRD (73)			;;CONTENTS OF AC BLOCK 7, AC 3 (IOP FNC WORD)
CWRD (CA1,,20)			;;POWER FAIL AC BLOCK SAVE AREA, ALSO AC BLOCK
				;; 1 ON A CRASH
CWRD (CA2,,20)			;;AC BLOCK 2
CWRD (CA3,,20)			;;AC BLOCK 3
CWRD (CA4,,20)			;;AC BLOCK 4
> ;;END IFN M.KL10
CWRD (RTM,,2)			;;RDTIME VALUE AT LAST TIMER INTERRUPT
IFN M.KS10,<
CWRD (TCT)			;;TRIAD COUNTER FOR 60HZ LEAP JIFFIES
CWRD (TIM)			;;CLOCK INTERRUPT FLAG FOR KS10S
CWRD (PTH)			;;HARD PARITY TRAP HAPPENED DURING PARITY SWEEP
CWRD (PTF)			;;COUNT OF PAGE TABLE PARITY TRAPS BETWEEN
				;; CLOCK TICKS USED TO CRASH SYSTEM IF TOO HIGH
CWRD (LMC)			;;LEAP MILLISECOND COUNT FOR 4.1 MHZ CLOCK RATE
CWRD (CA1,,20)			;;POWER FAIL AC BLOCK SAVE AREA, ALSO AC BLOCK
				; 1 ON A CRASH
CWRD (CA2,,20)			;;AC BLOCK 2
CWRD (CA3,,20)			;;AC BLOCK 3
CWRD (CA4,,20)			;;AC BLOCK 4
> ;;END IFN M.KS10

CWRD (CTQ,,2)			;;SCNSER OUTPUT QUEUE HEADER FOR CTY AND
				;; RSX-20F LINES
CWRD (SWP)			;;NON-0 IF SWAP REQUEST TO BE CHECKED FOR AT
				;; CLOCK LEVEL
IFN FTMP,<
CWRD (QUE)			;;QUEUE FOR IO REGS ON OTHER CPUS EMPTIED INTO
				;; CPUDSQ ONCE A TICK
CWRD (QND)			;;END OF QUEUE ABOVE
CWRD (SWD)			;;FLAG FOR FILIO CACHE SWEEPS
CWRD (DRQ)			;;DISKS ON CPU NEED RECUING
CWRD (TAP)			;;0 IF NO TAPE IO WAITING FOR SWEEP
				;;-1 IF TAPE IO WAITING, NEEDS SWEEP
				;;0,,-1 IF TAPE WAITING, DSKTIC DID SWEEP
> ;;END IFN FTMP

IFN M.KL10,<
CWRD (PIB)			;;SAVE PI STATE FOR NBFOFF
> ;;END IFN M.KL10

CWRD (PIS)			;;SAVE PI STATE FOR SYSPIN
CWRD (DPI)			;;SAVE PI STATE FOR DEVPIN
CWRD (BTI)			;;SAVE PI STATE FOR BTSOFF
CWRD (SCI)			;;SAVE PI STATE FOR SCNOFF
CWRD (NTI)			;;SAVE PI STATE FOR NETOFF
CWRD (DBI)			;;SAVE PI STATE FOR DDBSRL
CWRD (IUT)			;;UPTIME A SECOND AGO
IFN FTNET,<
CWRD (NTF)			;;DEFINE THE ONE SOFTWARE INTERRUPT FLAG
> ;;END IFN FTNET

IFN M.EQDQ,<
	QDBLEN==:23		;;LENGTH OF QUESER DATABASE
CWRD (QTS,,QDBLEN) 		;;QUESER VARIABLES
> ;;END IFN M.EQDQ

CWRD (CPG)			;;DATAI PAG, DONE BY SVSETS WITH BITS
				;;SET SO THAT DATAO WILL RESTORE CURRENT AC
CWRD (ACA)			;; SET ADDRESS OF 20 WORD BLOCK IN WHICH
				;; SVSETS SAVED THE CURRENT AC SET
CWRD (KPM)			;;CONTAINS PM.KPM IF CPU HAS AN MCA25 INSTALLED
CWRD (PMV)			;;NON-ZERO IF MICROCODE SUPPORTS PHYSICAL
				;; MOVE/MOVEM INSTRUCTIONS
CWRD (JCH)			;;JOB/CONTEXT HANDLE FOR JOB ON THIS CPU
CWRD (CXJ)			;;JOB OWNING CX ON THIS CPU

IFN M.KL10,<
CWRD (DSN,,<<^D<8*2>+4>/4>)	;;;CONSOLE FRONT-END DISK DRIVE SERIAL NUMBERS
> ;;END IFN M.KL10
CWRD (EMU,,2)			;;+0 = PDL FOR CALLING DIE
				;;+1 = SAVED P BEFORE CALLING DIE

IFN FTPATT,<
CWRD (PAT,,10)			;;PATCH SPACE
> ;;END IFN FTPATT

;;**********************************************************************
;;PUT NEW UNPUBLISHED VARIABLES ABOVE HERE
;;**********************************************************************
.C'N'END==:.

;;BEGINNING OF SPECIAL PER-CPU MAPPINGS. THESE VIRTUAL ADDRESSES APPEAR IN
;; SECTION 37 AND MUST BE LOCATED CORRESPONDING TO THEIR VIRTUAL ADDRESSES.
;; ADD NEW MAPPINGS ABOVE THIS ADJUSTING THE LOC STATEMENTS APPROPRIATELY.
IFN FTXMON,<
IFG <<.&PG.BDY> - MMAPS/PAGSIZ>,<LOC <.+PG.BDY>&777000>
	LOC	.&777000 + MMAPS/PAGSIZ
CWRD (MMA,,<MXSECN+1>)		;;MAP SLOTS FOR ALL MONITOR SECTION MAPS
> ;;END IFN FTXMON

IFG <<.&PG.BDY> - UMAPS/PAGSIZ>,<LOC <.+PG.BDY>&777000>
	LOC	.&777000 + UMAPS/PAGSIZ
CWRD (UMA,,<MXSECN+1>)		;;MAP SLOTS FOR ALL USER SECTION MAPS

> ;END OF CDB MACRO

IFN XPANDN,<LALL>
	ZZZ==0
	LOC	<.+PG.BDY>&777000
REPEAT M.CPU,<
	CDB(\ZZZ)
	LOC	<.+PG.BDY>&777000
IFE ZZZ,<.CPLEN==:.-.C0CDB>	;LENGTH OF CDB
	ZZZ==ZZZ+1
>; END REPEAT M.CPU

	.C0EVA==:.C0CDB+.CPLEN	;END OF CPU 0 VARIABLE AREA

	CDBPGS==:.CPLEN/PAGSIZ	;LENGTH OF CDB IN PAGES
	.EVCDB==:<FYSORG-<EVAPGS*PAGSIZ>>-.CPLEN ;EXEC VIRTUAL ADDRESS OF CDB
	HLCSAD==:.EVCDB		;HIGHEST LEGAL CODE SECTION ADDRESS +1

	$LIT			;ANY LITERALS IN CDB CAN GET CACHED IN HIGH SEG
	$ABS			;BACK TO ABS CODE
	LOC	<.+PG.BDY>&777000
;NOW GENERATE REFERENCES FOR GETTAB TABLES 55 THRU 70
;WILL GENERATE A ZERO WORD FOR INDIRECT REFERENCES TO NON EXISTANT CDB'S
DEFINE CPUGTB(A,B)<
IFG <M.CPU-A>,<ITMC'B'C==:.CPPCL
	ITMC'B'V==:.CPPVL>
IFLE <M.CPU-A>,<ITMC'B'C==:0	;MAKE LENGTH 0 SO ERROR RETURN
	ITMC'B'V==:0		;MAKE LENGTH 0 SO ERROR RETURN
	.C'B'CDB==:NULGTB##	;DEFINE ADR TO BE A WORD CONTAINING 0.
	.C'B'VBG==:NULGTB##
>>
ZZ==0
REPEAT 6,<
	CPUGTB(ZZ,\ZZ)
ZZ==ZZ+1
>
IFN FTNSCHED,<
;TABLES INDEXED BY CLASS NUMBER

CLSSTS::BLOCK	M.CLSN		;BITS IN LH, QUOTA (NUMBER FROM 0 TO 100) IN RH

CLSQTA::BLOCK	M.CLSN		;COMPUTED QUOTA IN JIFFIES, FIGURED OUT
				;FROM CLSSTS, RECOMPUTED AT THE
				;BEGINNING OF EVERY SCHEDULING INTERVAL.
				;DECREMENTED WHENEVER A CLASS USES A JIFFY
				;OF RUNTIME.


CLSRTM::BLOCK	M.CLSN		;RUNTIME FOR CLASSES SINCE ANY CHANGE IN CLSSTS
				;MINUS ANY TIME LEFT OVER AFTER ALL QUOTAS
				;WERE SATISFIED WITHIN AN INTERVAL

CLSMXL==:<M.CLSN-1>B26		;MAXIMUM LENGTH OF PER CLASS TABLES FOR GETTAB
>;END IFN FTNSCHED
SUBTTL MONITOR TABLES WITH ONE ENTRY PER JOB

	JOBMAX==:JOBN-1		;MAXIMUM LEGAL JOB NUMBER
	JOBMXL==:<JOBMAX>B26	;HIGHEST JOB NUMBERSHIFTED LEFT 9 (FOR GETTAB UUO)
	MJOBN==:-JOBN		;NEGATIVE NUMBERS OF JOBS (COUNTING NULL JOB)
	JBTMAX==:JOBN+SEGN-1	;HIGHEST INDEX IN JBT TABLES
	MJBTMX==:-JBTMAX		;MINUS JBTMAX FOR AOBJN POINTER
	JBTMXL==:<JBTMAX>B26	;HIGHEST JBT ENTRY SHIFTED LEFT 9 (FOR GETTAB UUO)
JBTSTS::BLOCK	JOBN+SEGN	;JOB AND HIGH SEG STATUS WORD
				;THIS IS DOCEMENTED AS GETTAB TABLE NUMBER 0
				;LH==STATUS BITS (SEE S.MAC FOR DESCRIPTION)
				;BITS 18-23=EXTENDED JOB STATUS BITS
	JBSSPR==^D9			;SIZE OF ACCES PRIV FOR HIGH SEG
	JBNSPR==^D17			;BYTE PTR. POS.
				;RH=IN CORE COUNT FOR HIGH SEGS

JBTVAD::			;VIRTUAL ADDRESS FOR HIGH SEG TABLE
JBTST2::BLOCK	JOBN+SEGN	;SECOND WORD OF JOB STATUS. USED BY SCHEDULER
				;  AND EVENT WAIT INFO

IFN M.KL10*<M.CPU-1>,<;IF KL10 SYSTEM WITH MORE THAN ONE CPU
JBTST3::BLOCK	JOBN		;18-35 = CPU DATA BLOCK ADDR OF LAST
				; CPU JOB RAN ON.  CLEARED WHEN
				; JOB GIVES UP ALL PHYSICAL CORE, OR
				; DOES RUN, GET, ETC.

JBTCSN::BLOCK	JOBN		;36 BIT SWEEP SERIAL NUMBER, TAKEN FROM
				; CPU WHOSE CDB ADDRESS IS IN JBTST3
>;END IFN M.KL10*<M.CPU-1>

IFN FTNSCHED,<
JBTSCD::BLOCK	JOBN		;SCHEDULER WORD CONTAINING EACH JOB'S
				;CLASS AND TYPE.
>;END IFN FTNSCHED

JBTSPS::IFG	<M.CPU-1>,<	;MULTI-PROCESSING SYSTEM?
	BLOCK	JOBN		;SECOND PROCESSOR STATUS BITS BOTH HALVES (PREFIX=.SP)
				;RH=GETTAB BITS FOR 6 CPU'S.
				;LH=UNPUBLISHED BITS
				;SEE S.MAC FOR DEFINITIONS.
	XP	ITMSPS,JOBMXL	;LH SYMBOL FOR GETTAB UUO
>
	IFLE	<M.CPU-1>,<	;SINGLE-PROCESSOR SYSTEM?
	0			;DUMMY ENTRY
	XP	ITMSPS,0	;DON'T ALLOW ANY REFERENCE IF NOT 2 CPU SYSTEM
>

JBTADR::BLOCK	JOBN+SEGN	;JOB AND HIGH SEG CORE ASSIGNMENT
				; LH==PROTECTION (LENGTH-1)
				; RH==RELOCATION (ABSOLUTE LOCATION IN CORE)
				; DURING BLT OF LOW OR HIGH SEG, THIS WORD
				; CONTAINS THE SOURCE RELOCATION
				;THIS IS DOCUMENTED AS GETTAB TABLE NUMBER 1
JBTCCC::BLOCK	JOBN		;NON-CONTROL-C COUNT (NEGATIVECOUNT OF USERS
				;WHO DON'T WANT USER TO GET OUT) (LH)
JBTSWI::
JBTSGN::IFG	SEGN, <
	BLOCK	JOBN+SEGN	;RH=SEGMENT NUMBER OF HIGH SEGMENT THIS JOB
				; IS USING IN CORE OR ON DISK
				; 0 MEANS JOB DOES NOT HAVE HIGH SEG
				;LH=USER DEPENDENT HIGH SEG STATUS BITS (SEE S.MAC)
				;THIS IS DOCUMENTED AS GETTAB TABLE NUMBER 14
				;INDEXED BY HIGH SEGMENT NUMBER THE TABLE (JBTSWI)
				; CONTAINS THE LOW SEGMENT NUMBER OF THE SEGMENT
				; WHICH THIS HIGH SEGMENT IS BEING SWAPPED IN FOR
>
	IFE	SEGN, <
	0			;SINGLE-ENTRY NULL JBTSGN TABLE....
	XP	ITMSGN,JOBMXL	;LH SYMBOL FOR GETTAB UUO SO THAT JBTSGN IS
				; UNDEFINED, I.E., MAKE INDEXING BY J BE 0, BUT
				; ALLOW REFERENCES UP TO JOBMXL.
>

JBTPPN::			;HIGH SEGMENT DIRECTORY NAME IF , 0 IF DTA,MTA
JBTPPN::BLOCK	JOBN+SEGN	;XWD PROJECT NUMBER, PROGRAMMER NUMBER
				;THIS IS DOCUMENTED AT GETTAB TABLE NUMBER 2

	IFG	SEGN, <		;REENTRANT MONITOR CAPABILITY?
JBTDEV==:.-JOBN		;JUST HIGH HALF (NO ENTRIES FOR LOW SEGS)
	BLOCK	SEGN		;HIGH SEGMENT PHYSICAL DEVICE NAME
			; OR FILE STRUCTURE NUMBER(DSKA,DSKB,DTAN,MTAN)
>
IFE	SEGN,<
JBTDEV==:JBTSGN-JOBN		;USE THE DUMMY ENTRY IN JBTSGN
	XP	ITMDEV,JBTMXL	;LH SYMBOL FOR GETTAB UUO SO THAT JBTDEV IS
				;UNDEFINED, IE. MAKE INDEXING BYITEM BE 0
>

IFN SEGN,<			;
JBTIDT==:.-JOBN			;MAKE FIRST HIGHSEG NUMBER POINT TO TABLE
	BLOCK	SEGN		;STORAGE FOR TIME SEGMENT LAST WENT DORMANT/IDLE
>				;
JBTVIR::BLOCK	JOBN		;JOB'S VIRTUAL SIZE (SEE LOVSIZ/HIVSIZ)
SWPLST::BLOCK	JOBN+SEGN
SW2LST::BLOCK	JOBN+SEGN	;PARALLEL SWPLST TABLE FOR USE BY FILSER
SW3LST::BLOCK	JOBN+SEGN	;PARALLEL SWPLST TABLE FOR ADDITIONAL INFO
				; LH=C(SWPOUT) FOR SCHED1, RH=JOB NUMBER
JBTSWP::BLOCK	JOBN+SEGN	; DISK ADDRESS WHILE SWAPPED OUT
				;BIT 0=1 IF SEGMENT IS FRAGMENTED
				;BITS 1-35 DISK ADDRESS IF NOT FRAGMENTED
				;FOR LEVEL D,
				;  BITS 2-4=INDEX OF UNIT IN SWPTAB (JBYSUN)
				;  BITS 5-17=1ST LOGICAL K ON UNIT (JBYLKN)
				;  BITS 18-35 CORE ADR OF FRAGMENT TABLE IF FRAGMENTED
JBTIMI::BLOCK	JOBN+SEGN	;IMAGE-IN SIZE (SEE IMGIN; SEE ALSO NZS?CN)
JBTIMO::BLOCK	JOBN+SEGN	;IMAGE-OUT SIZE (SEE IMGOUT)
JBTCHK::BLOCK	JOBN+SEGN	;CHECK SUM FOR SWAPPED OUT JOB DATA AREA OR
				; SAME AREA FOR HIGH SEG

JBTNAM::			;NAME OF HIGH SEGMENT (FILE IT WAS INITIALIZED FROM)
JBTPRG::BLOCK	JOBN+SEGN	;NAME OF FILE USED IN LAST R,RUN,GET, ETC
				; USED BY SYSTAT PROGRAM, AND AS DEFAULT FOR
				;  THESE COMMANDS

JBTWCH::BLOCK	JOBN		;BITS 1-5 = ENABLE BITS - SEE S.MAC
				;BITS 13-35 = TIME OF DAY IN JIFFIES USER
				;STARTED TO WAIT FOR RESPONSE FROM SYSTEM
				;REST UNUSED

IFN FTRSP,<			;USER TTY INPUT RESPONSE TIMES
JBTRSP::BLOCK	JOBN		;UP TIME AT WHICH USER BEGAN TO WAIT
				; FOR SYSTEM RESPONSE.
				; SET WHEN USER JOB COMES OUT OF TTY INPUT WAIT
				; OR TYPES A COMMAND WHICH RUNS A JOB.
				;HIGH ORDER BITS SET TO 0 WHEN USER STARTS TO WAIT
				; SET TO ONE AS EACH OF SEVERAL TYPES OF RESPONSE
				; TERMINATION CONDITIONS OCCUR.
				; SEE S.MAC FOR BITS OF FORM JR.R??
				; SEE CPU DATA BLOCK (ACR, ADR, AIR, ARR, AXR)
				; FOR DESCRIPTION OF TYPES OF RESPONSES GATHERED
JBTRQT::BLOCK	JOBN		;'RUN QUEUE TIME' ACCUM. TIME (JIFFIES) THAT JOB
				; HAS SPENT IN ONE OF THE RUN QUEUES (INCLUDING SWAPPED)
>
JBTSPL::BLOCK	JOBN		;LH=INPUT FILE NAME COUNTER
				;BITS 27-35 - WHAT DEVICES BEING SPOOLED
				; (SEE S.MAC FOR DEF'NS)
				;BITS 24-26 = DSK PRIORITY FOR JOB
				; (SEE JBXPRI IN COMMOD)

JBTLIM::BLOCK	JOBN		;TIME LIMIT, ETC. FOR JOB
				; (SEE S.MAC FOR LAYOUT)


JBTPDB::BLOCK	JOBN		;ADDRESS OF PDB

JBTPC::	BLOCK	JOBN		;USER MODE PC
JBTCLM::			;LH=CORE LIMIT (FORMERLY IN JBTLIM)
JBTDDB::BLOCK	JOBN		;RH=DDB JOB IS IN I/O WAIT FOR
JBTDAU::BLOCK	JOBN		;LH=UDB FOR WHICH JOB OWNS DA
				;RH=PPB FOR WHICH JOB OWNS AU

IFG SEGN,<			;REENTRANT MONITOR CAPABILITY?
JBTSHR==:.-JOBN			;JUST HIGH HALF (NO ENTRIES FOR LOW SEGS)
	BLOCK	SEGN		;HIGH SEGMENT TOTAL SHARER COUNT
>
IFE SEGN,<
JBTSHR==:JBTSGN-JOBN		;USE THE DUMMY ENTRY IN JBTSGN
	XP	ITMSHR,JBTMXL	;LH SYMBOL FOR GETTAB UUO SO THAT JBTSHR IS
				;UNDEFINED, IE. MAKE INDEXING BYITEM BE 0
>

JBTIPC::			;RH=JCH WHOM WE WANT IPCF INTERLOCK  FOR
JBTDTC::BLOCK	JOBN		;LH=MASTER DECTAPE DDB JOB WANTS
IFN M.CTX,<
JBTCX::BLOCK	JOBN		;LH=JOB # WHOSE CX RESOURCE OWNED BY INDEX
				;RH=JOB # WHO OWNS CX RESOURCE OF INDEX
> ;END IFN M.CTX
JBTLOC::BLOCK	JOBN		;JOB LOCATION TABLE
				;JBTLOC+0 IS CENTRAL SITE STATION NUMBER

IFN M.PSI,<
JBTPIA::BLOCK	JOBN		;LH HOLDS FLAGS (BITS 13-17 =0)
				;RH IS POINTER TO PROGRAM INTERRUPT
				;   TABLE.
>
IFE M.PSI,<
XP JBTPIA,777000		;CAUSE NXM IF REFERENCED
>
JBTJLT::BLOCK	JOBN		;JOB "LOGIN" TIME IN INTERNAL FORMAT

JBTHSA::			;FOR HIGH SEGS, PTR TO FIRST PAGE
JBTAD2::BLOCK	JOBN+SEGN	;BIT 0 FREE
				;BITS 1-21 DISK ADDR OF S0 MAP FOR JOB
				;BITS 22-35 PHYSICAL PAGE ZERO OF JOBS LOW SEG
JBTJRQ::BLOCK	JOBN		;LINKED LIST OF JOBS WAITING FOR REQUEUE
JBTPRV::BLOCK	JOBN		;PRIVILEGE BITS FOR JOB SET BY LOGIN

;THE FOLLOWING ARE USED TO CREATE MXQUE
;THE MAXIMUM QUEUE SIZE, USED BY SWAPPING SCHEDULER (SCHED)
	XP	MXQUE,0

	DEFINE	X	<MXQUE==MXQUE+1;>
	QUEUES
	RWAITS
DEFINE	X	(A)

		<A'Z==MXQUE
		MXQUE==MXQUE+1;>
	CODES
		MXQUE==MXQUE+3	;LEAVE SPACE FOR PQ1,PQ2, AND CMMQ


	IFG	M.HPQ,<MXQUE=MXQUE+M.HPQ>
			;LEAVE SPACE FOR HIGH PRIORITY QUEUES

XP MXQUE2,<2*MXQUE>
	BLOCK	MXQUE2		;NUMBER OF QUEUES FOR SWAPPING SCHEDULER
QQQMXL==:<MXQUE-1>B26		;NUMBER QUEUES FOR GETTAB
JBTCQ::	BLOCK	JOBN		;ONE ENTRY PER JOB,
				; LH=PREVIOUS JOB, RH=NEXT JOB IN QUEUE
				; NEGATIVE MEANS THIS IS FIRST (LH) OR LAST (RH)
				; JOB IN QUEUE
JBCQM1==:JBTCQ-1		;
JBCQP1==:JBTCQ+1
NCNULQ==:NULZ+MXQUE		;NUMBER OF NULQ IN NO-CORE HEADER
JBCQMN==:JBTCQ-NCNULQ		;NUL QUEUE HEADER
JBCQOH==:JBTCQ-MXQUE		;WHAT TO INDEX TO GET SWAPPED OUT QUEUE HEADER
IFN FTNSCHED,<
	BLOCK	2*M.CLSN	;HEADER FOR PQ2 SUBQUEUES
JBTCSQ::BLOCK	JOBN		;SAME AS JBTCQ FOR SUBQUEUES
	JBCSOH==:JBTCSQ-M.CLSN	;SWAPPED OUT SUB-QUE HEADER
>;END OF IFN FTNSCHED
JBTHSQ::BLOCK	1		;HEADER FOR JOBS WAITING FOR A HIGH SEG
JBTBBQ::BLOCK	1		;HEADER FOR BB JUST INPUT QUEUE
JBTJIQ::BLOCK	1		;HEADER FOR PQ2 JUST INPUT QUEUE
JBTJIL::BLOCK	JOBN		;LIST OF PQ2 JOBS JUST INPUT
	HSQ==:JBTJIL-JBTHSQ
	BBQ==:JBTJIL-JBTBBQ	;OFFSET FOR JBTBBQ
	MBBQ==:-BBQ		;NEGATIVE OFFSET
	JIQ==:JBTJIL-JBTJIQ	;OFFSET FOR JBTJIQ

JBTDIH::BLOCK	1		;HEADER FOR QUEUE OF DORMANT/IDLE HISEGS
JBTOBQ::BLOCK	1		;HEADER FOR BB OUTPUT SCAN LIST
JBTOLQ::BLOCK	1		;HEADER FOR PQ2 OUTPUT SCAN LIST
JBTOLS::BLOCK	JOBN		;LIST OF PQ2 IN ORDER TO BE SCANNED FOR OUTPUT
	BLOCK	SEGN		;ALSO, PUT QUEUE OF IDLE/DORMANT SEGMENTS HERE
JBTDIQ==:JBTOLS		;GIVE IT A DIFFERENT NAME
	DISQ==:JBTDIQ-JBTDIH	;DORMANT/IDLE QUEUE HEAD
	OBQ==:JBTOLS-JBTOBQ	;OFFSET FOR JBTOBQ
	MOBQ==:-OBQ
	OLQ==:JBTOLS-JBTOLQ	;OFFSET FOR JBTOLQ
;DATA STRUCTURE CLEARED ON SYSTEM STARTUP AND ON 143 RESTART


;TTYTAB IS A TABLE OF CONTROLLING (ATTACHED) TTY'S FOR EACH JOB,
;INDEXED BY JOB NUMBER. IF C(TTYTAB)=0 THEN THERE IS NO SUCH JOB.
;OTHERWISE, RH(TTYTAB(N)) IS CONTROLLING DDB FOR JOB N.

;THERE IS ALWAYS A TTY DDB FOR EVERY JOB, EVEN THOUGH NO TTY
; NEED BE ATTACHED.  THUS UUOS LOOK THROUGH TTYTAB(N) FOR A DDB,
; SINCE UUO'S COME FROM JOBS.  COMMANDS LOOK THROUGH LINTAB(LINENUMBER)
; TO THE LDB, SINCE COMMANDS COME FROM TTY'S (LINES).
; IF THE JOB IS DETACHED, THE LINKS FROM LDB TO DDB AND VICE VERSA
; ARE ZEROED (RH OF DDBLDB AND LDBDDB).
TTYTAB::BLOCK	JOBN
TTYDDL::BLOCK	1		;DIALLER INTERLOCK
TTYDDA::BLOCK	1		;TTY DIALLER DATA ADDRESS, 4 WORD BLOCK
DSDUNI::BLOCK	1		;TTY NUMBER USING DIALLER CODE


XPNMSZ==<JOBN/^D32>+1		;SIZE OF BIT MAP
XPNMAP::BLOCK	XPNMSZ		;BIT MAP OF EXPANDING JOBS
XP XPNMPT,-XPNMSZ		;FOR MAKING AOBJN POINTER
SPTTAB::			;SPECIAL PAGES TABLE

;SPT ENTRIES FOR CURRENT CONTEXT MUST IMMEDIATELY PRECEDE JBTUPM
;(FUNNY SPACE MAPPED IN THROUGH THESE SPT ENTRIES)

REPEAT M.CPU,<
	EXP	NUPMPP
>; END REPEAT M.CPU

JBTUPM::BLOCK	JOBN+SEGN	;ADDRESS OF THE UPMP

;SPT SLOTS FOR SPYING ON SECTION 0/1
;(INDIRECT POINTERS TO SECTION 0/1 LOW SEGMENT PAGES AND COMMON
;SUBROUTINE PAGES MAPPED IN THROUGH THESE SPT ENTRIES)

SPTLOW::

DEFINE	SPTENT(N),<
	EXP	.E'N'MAP/PAGSIZ
>; END DEFINE SPTENT
	ZZ==0
REPEAT M.CPU,<
	SPTENT	(\ZZ)		;GENERATE THEM
	ZZ==ZZ+1
>; END REPEAT M.CPU

;SPT SLOTS FOR SPYING ON SECTION 2

SPTHGH::

DEFINE	SPTENT(N),<
IFE FTXMON,<0>
IFN FTXMON,<
	EXP	.E'N'MP1/PAGSIZ
>; END IFN FTXMON
>; END DEFINE SPTENT
	ZZ==0
REPEAT M.CPU,<
	SPTENT	(\ZZ)		;GENERATE THEM
	ZZ==ZZ+1
>; END REPEAT M.CPU

;SPT SLOTS FOR SPYING ON COMMON DATA SECTIONS

IFN FTXMON,<

SPTCOM::

REPEAT <HLGSNO-<(MS.FMD)>>,<
	XWD	1,0		;GENERATE THEM (INVALID UNTIL SYSINI FILLS IN)
>; END REPEAT
>; END OF IFN FTXMON
SUBTTL	SYSTEM WIDE VARIABLES

;SYSTEM WIDE VARIABLES:
; CLEARED AT SYSTEM STARTUP

;GETTAB FOR SYSTEM WIDE VARIABLES (AS OPPOSED TO PER CPU DATA)
; GETTAB TABLE NO(RH) IS .GTSYS=51


SYSTBL::		;GETTAB TABLE NO. 51.  ( .GTSYS = 51
SYSERR::0		;(0) TOTAL NUMBER OF HARDWARE AND SOFTWARE ERRORS
			; DETECTED BY THE MONITOR AND ENTERED IN DAEMON
			; ERROR LOG FILE INCLUDING DAEMON ERRORS.
			; INCLUDES HARD AND SOFT ERRORS
			; HARD ERROR WITH 80 RETRIES ONLY COUNTS AS 1 ERROR IN SYSERR.
CMNOTF::0		;(1) NUMBER OF TIMES SCNSER WAS CALLED TO
			; FIND A COMMAND BECAUSE COMCNT WAS
			; NON-ZERO AND NO COMMAND WAS FOUND
DELCNT::0		; (2) DISABLED ERROR LOGGING COUNT
			; INCREMENT INSTEAD OF SYSERR IF USER HAS DISABLED
			; ERROR LOGGING IN OPEN UUO
%SYSPC::0		;(3) FULLWORD PC OF LAST STOPCODE
%SYNDS::0		;(4) NUMBER OF DEBUG STOPCD'S.
%SYNJS::0		;(5) NUMBER OF STOPCD'S WHICH CAUSED A JOB TO BE
			;    STOPED.
COMTOT::0		;(6) NUMBER OF COMMANDS PROCESSED
			; (DELAYED COMMANDS ARE COUNTED ONCE WHEN PROCESSED)

%SYSJN::0		;(7)JOB# OF JOB ON LAST STOPCD
%SYSTN::0		;(10)TTY NAME FOR LAST STOPCD
%SYSPN::0		;(11)PROGRAM NAME FOR LAST STOPCD
%SYSUU::0		;(12)UUO ON LAST STOPCD
%SYSUP::0		;(13)USER'S PC ON LAST STOPCD
%SYSPP::0		;(14)USER'S PPN ON LAST STOPCD
%SYSCD::0		;(15)NAME OF LAST STOPCODE
%SYNCS::0		;(16)TOTAL NUMBER OF CPU STOPCODES
%SYNIS::0		;(17)NUMBER OF NODUMP STOPCDS (BUGINFS)
%SYSTY::0		;(20)TYPE OF LAST STOPCODE
%SYSDT::0		;(21)UDT OF LAST STOPCODE
%SYSCP::-1		;(22)CPU NUMBER OF LAST STOPCD
XP SYSMXL,<<.-SYSTBL-1>B26>	;MAX. ENTRY
;UNPUBLISHED SYSTEM VARIABLES:

;OTHER SYSTEM DATA STORAGE


COMCNT::0			;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED
				;SET BY SCNSER, DECREMENTED BY COMCON
IFN FTMP,<
COMJOB::0			;JOB NUMBER OF JOB CURRENTLY EXECUTING
				; A COMMAND USED TO AVOID JOBSTS UUO RACE
>
NFCNT::	0			;COUNT OF TIMES COMCNT NON-ZERO,
				;BUT NO WAITING COMMANDS
HNGMIN::0			;DO ONCE PER MINUTE FUNCTIONS WHEN THIS
				;FLAG COUNTS NEGATIVE
				; SCHEDULER SCANS ALL JOBS EVERY
				; MINUTE TO SEE IF QJOB HAS BEEN COUNTED
				; DOWN TOO FAR.  MORE LIKELY IN DUAL CPU SYS.

CHKCNT::0			;NO. OF CALLS TO CHKTAL TO CHECK CORE
				; BEFORE ACTUALLY DOING THE OVERHEAD.
				; RESET TO M.CMCT WHEN COUNTS TO 0.


DATREM::0			;LAST REMAINDER IN UPDATING "DATE" (SMITHSONIAN DATE)

SCDTIM::0			;DECREMENTED EVERY JIFFY, END OF MEDIUM
				;TERM SCHED INTERVAL WHEN THIS REACHES ZERO.
;STORAGE FOR VARIOUS CORE ALLOCATION FUNCTIONS AND OTHER NON-SWAPPING DATA


	XP	CRSIZ,9
	XP	CRPOS,8
XP PP256K,^D512/<<PAGSIZ>_-^D9>



;MAXIMUM NUMBER OF PAGES OF PHYSICAL MEMORY POSSIBLE

IFN M.KL10,<
	XP CORBLK,<1_<^D22-^D9>> ;22 BIT PHYSICAL ADDRESSES (4 MEGAWORD)
>
IFN M.KS10,<
	XP CORBLK,<1_<^D20-^D9>> ;20 BIT PHYSICAL ADDRESSES (1 MEGAWORD)
>

IFN FTLOCK,<
LOCK::	0			;JOB#,,HIGH SEGMENT# OR
				;0,,JOB# IF NO HIGH SEGMENT
				;OF JOB CURRENTLY BEING LOCKED IN CORE

LOKREL::0			;DESIRED PROTECTION,,RELOCATION
				;FOR JOB CURRENTLY BEING LOCKED
	PAGLOK==:1B18		;FLAG THAT WE'RE LOCKING SPECIFIC PAGES
LASLOK::0			;JOB # OF LAST JOB LOCKED
>;END IFN FTLOCK

MOFLPG::0			;FLAG FOR SETTING MEMORY ON OR OFF LINE
LMPAG::0			;LAST PAGE IN MONITOR'S PAGTAB CHAIN

DOORBL::0			;SYSTEM DOORBELL
IFN FTKL10&FTMP,<
SAVCTL::0			;VALUE OF CORTAL WHEN MM RESOURCE WAS OBTAINED
>

;GFWN?? ALLOCATION CONTROL STUFF

NZSFCA:	BLOCK	1+MXSECN	;HEAD OF SECTION FREE CORE LISTS

	$HIGH
DEFINE	NZSMAC	(SECT),<400000,,NZSFCA+SECT>
	ZZ==0
NZSFCH::			;POINTERS TO SECTION FREE CORE HEADERS
REPEAT	1+MXSECN,<
	NZSMAC	(\ZZ)
	ZZ==ZZ+1
>
NZSFCL==:.-NZSFCH		;LENGTH OF TABLE
	$ABS
NZSFCE::			;TAIL POINTERS FOR NZS FREE CORE
	BLOCK	NZSFCL		;ACTUALLY FILLED IN BY SYSINI
;DATA LOCATIONS PRESENT ONLY IN SWAPPING SYSTEMS

SWPTBL::!			;FIRST LOCATION OF MONITOR DATA STORAGE
				; RETURNED BY GETTAB UUO (THESE LOCATIONS
				; PRESENT ONLY IN SWAP SYSTEMS)
				; OCTAL NUMBERS IN () CORRESPOND TO GETTAB ARG
				;THIS IS DOCUMENTED AS GETTAB TABLE NUMBER 13
BIGHOL::0			;(0) CURRENT BIGGEST HOLE IN CORE (1K BLOCKS)
FINISH::0			;(1) IF +, THEN JOB NUMBER OF JOB BEING SWAPPED IN,
				;IF -, THEN JOB NUMBER OF JOB BEING SWAPPED OUT
FORCE::	0			;(2) JOB NUMBER BEING FORCED TO SWAP OUT
FIT::	0			;(3) JOB NUMBER WAITING TO BE FITTED INTO CORE
VIRTAL::0			;(4) NUMBER OF FREE 1K BLOCKS OF SWAPPING SPACE LEFT
				; (COUNTING DORMANT SEGMENTS AS IF FREE).
				; PRINTED WITH CORE COMMAND (NO ARG) OR ERROR
				; USUALLY THE SAME AS THE AMOUNT OF VIRTUAL CORE
				; LEFT IN SYSTEM, EXCEPT WHILE R,RUN,KJOB,GET
				; COMMAND ARE WAITING TO BE SWAPPED IN, BECAUSE
				; THE OLD DISK SPACE HAS NOT BEEN RETURNED YET,
				; BUT VIRTUAL CORE IS ONLY 140 WORDS FOR SWAPIN
SWPERC::0			;(5) LH= NUMBER OF SWAPPER READ OR WRITE FAILURES
				; RH= ERROR BITS (BITS 18-23) + NUMBER OF K OF
				; IOCHNX=IO CHANNEL SWAP NON-EX MEM - BIT 23
				; IOCHMP=IO CHANNEL SWAP OUT MEMORY PARITY - BIT 22
				; BITS 18-22 = IOIMPM (SOFTWARE CHECKSUM),
				; IODERR, IODTER, IOBKTL
				; DISCARDED SWAPPING SPACE
SWAPIN::0			;(6) IF THE SYSTEM HAS FTPDBS TURNED ON,
				;     THIS WORD IS -1 WHEN A SWAPIN IS
				;     IN PROGRESS AND ZERO WHEN A SWAP OUT
				;     IS IN PROGRESS. IF FINISH IS ZERO
				;     THEN NO SWAP IS IN PROGRESS. IF FTPDBS
				;     IS OFF THIS WORD IS ALWAYS ZERO.



				;INSERT NEW LOCATIONS HERE WHICH ARE OF INTEREST
				; TO USER PROGS IN SWAPPING SYSTEMS
SWPEUJ::0			;(7)LH=J FOR JOB OR SEGMENT WHICH GOT A SWAP
				; READ/WRITE ERROR, RH=UNIT THAT THE
				; SWAPPING I/O WHICH RESULTED IN THE ERROR
				; WAS DONE TO
SWPMXL==:<.-SWPTBL-1>B26	;MAXIMUM ENTRY FOR GETTAB SHIFTED LEFT 9
;MORE SWAPPING SYSTEM LOCATIONS (NOT RETURNED BY GETTAB)

MAXJBN::0			;NUMBER OF JOB TO SWAP OUT
SUMCOR::0			;TEMPORARY STORAGE CELL USED BY SWAPPER FOR SUM OF
				; CORE NEEDED FOR SWAP IN
FITLOW::0			;NUMBER OF JOB BEING FIT (NEVER HI-SEG)
SWPIN::	0			;JOB NUMBER BEING SWAPPED IN IF IT HAS A HIGH SEG
SWPOUT::0			;JOB NUMBER BEING SWAPPED OUT IF IT HAS A HIGH SEG
				; (USED TO REMEMBER THE JOB NUMBER DURING HIGH SEG SWAP)



IFN FTRSP,<
SWPNU2::0			;JIFFY REMAINDER FOR SWAP NULL TIME
SWPLS2::0			;JIFFY REMAINDER FOR SWAP LOST TIME
SWPPLT::0			;POTENTIAL LOST TIME FLAG FOR SWAPPER
				;TO TELL CLOCK1 TO COUNT SOME LOST TIME
				;(HAVE JOB TO SWAP IN BUT SWAPPER IDLE)
SWPNUF::0			;NULL CYCLE FOR SWAPPER (AGAIN, SO CLOCK1
				;CAN COUNT NULL TIME FOR SWAPPER)
>;END IFN FTRSP

IFN FTNSCHED,<
SCDSTS::0			;TIME OF LAST SETTING OF PRIMARY PERCENTAGES
CNTSTS::0			;COUNT OF CPU CLASSES WITH NON-ZERO QUOTA
TOTSTS::0			;TOTAL OF ALL SUBCLASS PERCENTAGES
				; (MUST BE 100 OR ZERO)
MAXQTA::0			;NUMBER OF HIGHEST CLASS WITH SECONDARY QUOTA
CNTQTA::0			;COUNT OF CLASSES WITH NON-ZERO SECONDARY QUOTA
TOTQTA::0			;TOTAL OF ALL SECONDARY SUBCLASS PERCENTAGES
				; NORMALLY 100%, BUT CAN BE ANY NON-NEGATIVE

>;END OF IFN FTNSCHED
	$ABS

IFN M.FPS,<
	EXTERN	KASER		;CAUSE KA10 FP SIMULATION MODULE TO BE LOADED
>
IFE M.FPS,<
XP KALFPS,CPOPJ
XP SETFPS,CPOPJ
XP SETFPC,COMERA##
>
SUBTTL MACROS TO DEFINE PI CHANNELS


;MACROS TO DEFINE PI CHANNEL NUMBER AND GENERATE INTERRUPT CHAINING
; INFORMATION FOR AUTCON SO IT CAN LINK THE DEVICE INTERRUPT SERVICE
; ROUTINES AND THE DEVICE DATA BLOCKS

;TABLE INTTAB IS GENERATED WITH PAIRS OF ENTRIES FOR EACH DEVICE

;BYTE POINTERS TO INTTAB LOCATIONS USED BY AUTCON

PINTNO::POINT	11,INTTAB+0(P1),11	;NUMBER OF DDBS TO CREATE
PINTCP::POINT	 3,INTTAB+0(P1),14	;CPU NUMBER
PINTCH::POINT	 3,INTTAB+0(P1),17	;PI CHANNEL
PINTIN::POINT	18,INTTAB+0(P1),35	;INTERUPT ROUTINE ADDRESS
PINTSZ::POINT	 9,INTTAB+1(P1),17	;SIZE OF DDB TO CREATE
PINTDB::POINT	18,INTTAB+1(P1),35	;ADDRESS OF PROTOTYPE