1
0
mirror of https://github.com/PDP-10/stacken.git synced 2026-03-01 01:19:17 +00:00
Files
Lars Brinkhoff 6e18f5ebef Extract files from tape images.
Some tapes could not be extracted.
2021-01-29 10:47:33 +01:00

1889 lines
56 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
UNIVERSAL LNKPAR - PARAMETERS FOR LINK
SUBTTL D.M.NIXON/DMN/JLd/RKH/SRM/JBC/JNG/MCHC/PAH/DZN/PY/MFB/JBS/HD/RJF 5-Feb-88
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1973,1986,1988.
; 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 WHICH IS NOT SUPPLIED BY DIGITAL.
SEARCH MACTEN,UUOSYM,SCNMAC
IFN TOPS20,<SEARCH MONSYM> ;[2071]
SALL
CUSTVR==0 ;CUSTOMER VERSION
DECVER==6 ;DEC VERSION
DECMVR==0 ;DEC MINOR VERSION
DECEVR==2417 ;DEC EDIT VERSION
LOC 137 ;KEEPS MACRO HAPPY
.JBVER: <BYTE(3)CUSTVR(9)DECVER(6)DECMVR(18)DECEVR>
RELOC
SUBTTL CONDITIONAL ASSEMBLY SWITCHES
ND FTOVERLAY,1 ;1= OVERLAY MODULE REQUIRED
ND TOPS20,0 ;1=TOPS20 VERSION (WILL NOT RUN ON TOPS10)
ND DEBSW,0 ;1=DEBUGGING VERSION
ND .OSJOB,0 ;1= OLD STYLE JOBXXX SYMBOLS IN INITIAL TABLE
ND FTCN6,0 ;1= PUT .JBCN6 (& JOBCN6) IN INITIAL SYMBOL TABLE
ND .EXSYM,0 ;1 =EXTENDED SYMBOLS VERSION
ND .NWBLK,1 ;1 =NEW BLOCK TYPES (1000-1777)
ND .ASBLK,1 ;1 =ASCIZ TEXT BLOCK
ND FTKIONLY,1 ;[2366] 1= KI10 D.P. INST (DMOVE, DMOVEM)
ND FTVM,1 ;1=USES TOPS-10 VM IF AVAILABLE
ND FTSINGLE,0 ;1= SINGLE SEGMENT VERSION
ND FTFORK,0 ;1= RUN IN SEVERAL FORKS (NOT YET IMPLEMENTED)
ND FTOPTION,1 ;1= INCLUDE OSCAN CODE (VERY SLOW)
ND FTEXE,1 ;1= EXE FILE GENERATED
;DEPENDENT CONDITIONALS
IFN TOPS20,<
FTSINGLE==1
FTKIONLY==1
FTVM==0
>
;ASSEMBLY PARAMETERS
ND LN.PDL,^D60 ;LENGTH OF PUSH-DOWN LIST
ND LN.PPD,^D60 ;POLISH PUSHDOWN STACK
ND LN.EPD,^D20 ;EMERGENCY PUSH DOWN STACK LENGTH
ND LN.LPP,^D56 ;LINES PER PAGE OF DATA
ND LN.CPL,^D72 ;CHAR PER LINE ON TTY
ND LN.DRB,6 ;LENGTH OF SFD NESTING
ND .L,3 ;LENGTH OF BASIC SYMBOL BLOCK
ND PATSP.,100 ;LENGTH TO LEAVE IN SYMBOL TABLE FOR PATCHING
IFN FTVM!TOPS20,<
ND .IPS,^D512 ;[650] INTERNAL PAGE SIZE
ND LN.WD,10000 ;[650] SIZE OF CORE WINDOW (IF POSSIBLE)
ND LN.BF,<10*.IPS> ;[1401] SIZE OF REL FILE PMAP BUFFER
> ;END IFN FTVM!TOPS20
ND LN.WD,2000 ;SIZE OF CORE WINDOW (IF POSSIBLE)
ND .IPS,^D128 ;INTERNAL PAGE SIZE
ND .IPM,.IPS-1 ;MASK FOR ABOVE
ND .IPS2W,^D35-^L<.IPS> ;[650] LSH TO CONVERT INTERNAL PAGES TO WORDS
ND .IWS,2*.IPS ;[750] RESERVE WINDOW SIZE TO BE 2*INTERNAL PAGE.
ND .IWM,.IWS-1 ;[750] MASK FOR ABOVE
ND .DBS,^D128 ;DSK BLOCK SIZE (TO DISTINGUISH FROM ABOVE)
ND .DBM,.DBS-1 ;MASK
ND .DBS2W,^D35-^L<.DBS> ;[650] LSH TO CONVERT BLOCKS TO WORDS
ND .LMS,^D64 ;[2366] DISK BLOCKS PER ENTRY IN LC MAP
ND .LMM,.LMS-1 ;[2366] MASK
ND .LMS2D,^D35-^L<.LMS> ;[2366] LSH TO CONVERT MAP ENTRIES TO BLOCKS
ND .CORX,4*1000 ;MINIMUM SIZE TO USE FOR CORE UUO (UNLESS FAILS)
ND .VCRX,^D10*1000 ;[650] .CORX IF ON A VM SYSTEM
ND .HS%,^D90 ;% OF HASH TABLE TO FILL BEFORE REHASHING
ND .LVL,0 ;CUTOFF LEVEL FOR ASSEMBLING ERROR MESSAGES
ND .IBR,5 ;NUMBER OF BUFFERS IN INPUT RING (DEFAULT)
ND .EXC,^D9 ;SIZE OF BASIC LINKED BLOCKS FOR INCLUDE/EXCLUDE
ND I.PRM,^D251 ;INITIAL PRIME NUMBER FOR HASHING
ND E.PRM,^D227 ;PRIME NUMBER USED TO HASH LONG ERROR MESSAGES
ND LN.12,100 ;NUMBER OF LINKS IN BLOCK TYPE 12
IFN TOPS20,<
ND %HISEG,520000 ;[710][2415] HIGH SEGMENT ORIGIN
;[2415] MUST MATCH /SET:.HIGH.:address IN L2PLNK.CCL
ND LC.ORG,040000 ;START OF CODE AREA
ND LS.ORG,240000 ;[710] START OF LOCAL SYMBOLS
ND GS.ORG,440000 ;[710] START OF GLOBAL SYMBOLS
ND PATORG,700000 ;[1242] ORIGIN OF PA1050
ND KILPAT,12 ;[1263] PA1050 SUICIDE COMPT. FUNCTION NUMBER
ND .PGSIZ,777 ;KNOWN PAGE SIZE MASK
ND LN.FL,^D13 ;[2041] WORDS NEEDED FOR ASCIZ FILESPEC
ND FILSIZ,^D23 ;[2301] WORDS FOR JFNS% OF TOPS-10 COMPATIBLE FILESPEC
>
ND %HISEG,540000 ;[1750] HIGH SEGMENT ORIGIN
ND .SPA,4000 ;DEFAULT SIZE FOR BUFFER ON /SPACE SWITCH
ND .SPL,0 ;[635] DEFAULT SPACE IN LINKS OTHER THAN ROOT
ND .ARS,10 ;[635] DEFAULT VALUE FOR /ARSIZE SWITCH
ND LN.OVL,^D128*^D10*2 ;MAX. NO. OF OVERLAYS ALLOWED
ND LN.ABL,^D10 ;LENGTH OF ALGOL .SYM FILE DESCRIPTOR
ND LN.SWV,^D28 ;MAX SWITCH VALUE LENGTH SCAN WILL RETURN
ND LN.PLC,300 ;[600] LENGTH OF PHASED LOWSEG CODE IN LNKINI
ND LN.PAG,^D128 ;[650] LENGTH OF PAGE. UUO ARGUMENT BLOCK
ND LN.OTS,50000 ;[1225] AMOUNT TO LEAVE FREE BELOW OTS @/SYSLIB TIME
ND TP.MRB,2000 ;[2270] Blocks to return before garbage collect
ND MAXSEC,^D32 ;[2200] Max number of sections (must be .LT. 36)
ND PAGSEC,^D512 ;[2247] Number of pages in a section
ND MAXSYM,^D72 ;[2210] Max number of characters in a symbol
ND SYMSIZ,<<MAXSYM+5>/6> ;[2210] Number of words of storage for long symbols
ND ERRLEN,^D132 ;[2304] Length of ERSTR% buffer in words
SUBTTL REVISION HISTORY
;START OF VERSION 1A
;46 ADD KLUDGE FEATURE
;47 INTEGRATE WITH SCAN %4
;52 ADD ASCIZ TEXT BLOCK
;54 ADD KIONLY D.P. MACROS
;60 ADD /VERSION SWITCH
;65 TENEX SPEEDUP
;102 ADD FLAG FOR NO END BLOCK
;104 ADD FLAG FOR FAIL LOCAL BLOCKS
;105 ADD SYMBOL (LN.12) FOR LENGTH OF LINKS IN BLOCK TYPE 12
;107 REPLACE KLUDGE BY MIXFOR
;START OF VERSION 1B
;124 ADD FLAGS FOR /ONLY SWITCH
;START OF VERSION 2
;135 ADD OVERLAY FACILITY
;137 ADD SUPPORT FOR PLOT PACKAGE
;143 ADD BIT FOR INCLUDE MODE SEARCH
;145 IMPLEMENT /USERLIB & /NOUSERLIB
;147 TURN ON MIXFOR FEATURE
;161 ADD LANGUAGE SPECIFICATION TO /USERLIB
;167 CHANGE ARGUMENTS TO /OTSEG SWITCH
;170 INTEGRATE PLOT STUFF WITH BLISS CODE
;175 CHANGE /RESET TO /NODE
;206 ADD FLAGS FOR CHAINED FIXUP IF NOT ALL IN CORE
;221 GET PROTECTION OF XPN FILE RIGHT
;START OF VERSION 2B
;225 ADD SUPPORT FOR PSECT (MACRO VERSION 51)
;230 LINK ALL DDT SYMBOL TABLES IN OVERLAYS CORRECTLY
;243 ADD SIMULA TO KNOWN PROCESSORS
;274 Add flag bit which indicates TWOSEG forced while
; loading DATA.
;303 GET PAGE SIZE RIGHT IF TENEX!FTVM
;345 INCLUDE EDIT 303 IN MAINTENANCE SOURCES. LABEL EDIT 230.
;353 REMOVE EDIT 225
;363 UPDATE MINOR VERSION #
;364 Add new fixup type so NAME block doesn't have to be
; in core when HISEG block is seen.
;400 Change Prototype Data Block offsets so SFD's can be referenced.
;402 Make /TEST unique. (Conflicts with /TMPCOR in SCAN 7B)
;404 Insert edits 334 and 340, which vanished.
;411 Add /K switch to fix ASCII text problems.
;START OF VERSION 2C
;440 Change macro so /ONLY switch ca be global
;454 Fix LITYPE macro for LNKNEW (again).
;464 Implement /MISSING and LNKIMM message.
;471 Add code for ALGOL debugging system.
;502 Increase size of basic stack for SCAN error processing.
;503 Increase lines per LPT page to 56 (was 55).
;510 Define 3 new symbol fixups for relocatable symbols.
;517 Change ABLLEN to LN.ABL.
;530 Clean up triplet flag definitions for TXxx macros.
;534 Implement /CRLF switch.
;543 Clarify comments about PS.UD? flags.
;544 SOUP in LINK version 3 stuff for TOPS-20.
;545 Make LINK understand 100(8) .LINK chains.
;551 Change /SYMBOL to /SYFILE.
;552 Organize .REQUEST/.REQUIRE stuff.
;554 Define LN.SWV.
;557 Clean up listing for release.
;START OF VERSION 3
;446 CHANGES FOR TENEX VERSION (UNDER TOPS20 SWITCH)
;START OF VERSION 3A
;560 Release on both TOPS-10 and TOPS-20 as LINK version 3A(560)
;START OF VERSION 4
;577 Define new LS fixup type for local block name chain.
;600 Define LN.PLC, AD.???, PD.???, & MX.??? in this module.
;603 Delete PPDL.
;611 Support COBOL-74
;621 /SAVE and /SSAVE switches generate an EXE file.
;625 Add .EB to print a blank line after a message
;635 Change .SPL default to 0, add /ARSIZE switch.
;650 Use VM on TOPS-10 if available under FTVM.
;674 Define .GTRDI, .GTRDV, and .GTRS0 until they appear in UUOSYM.
;703 Add 4 more compiler types.
;715 Modify SYMSEG to take psect name.
;721 Make it /SYMSEG:PSECT:psectname
;722 Implement PSECT atrributes
;723 Add /UPTO.
;727 Add symbols .FRESP and .SYLIM for default symbol limit.
;731 Search MACTEN, UUOSYM instead of C.
;732 Add .LLOC for initial LOWLOC value.
;734 Add KL in CPUs.
;740 Remove /VERSION from switch table.
;745 Default symbol table limit(.SYLIM) is 777777.
;750 Add symbols .IWS and .IWM to reserved 2-page window size.
;756 Fix bug with PSECT attribute definition.
;761 Define a relocatable PSECT bit(AT.RP) as part of RC.AT.
;765 Release on both TOPS-10 and TOPS-20 as LINK version 4(765)
;Start of version 5I
;1000 Define more primary symbol bits for block 1070 support.
;1004 Define new symbol table header offsets
;1005 Add /EQUIVALENCE switch.
;START OF VERSION 4A
;1112 Insert the ADD. macro.
;1117 Add /NOINCLUDE switch.
;1120 Redefine CPU types to be bits rather than values.
;1122 Remove edit 740 and make /VERSION unique in any abbreviation.
;1132 Add AT.PS.
;1144 Juggle fields in .ERR. and .ETC. words to get more flags, add .EN.
;1172 Delete .FRESP, .SYLIM, .OVPSP, AND .LLOC.
;1174 Label and clean up all error messages.
;1177 Add a global entry point for /VERSION in SWTCHS macro.
;1201 Split out the /SEGMENT and /SYMSEG keywords; disallow /SEGMENT:PSECT.
;1202 Make assemble on TOPS-20 after edit 1174.
;1203 Add support for extended FORTRAN.
;1213 Define the FS.MDC bit.
;1217 Clean up the listings for release.
;1220 Release on both TOPS-10 and TOPS-20 as version 4A(1220).
;START OF VERSION 4B
;1222 Allow full symbol character set in /NOREQUEST:.
;1223 Make the argument to /SEVERITY: be decimal instead of octal.
;1225 Make runtime OTS origin compiler-specific.
;1230 Define the $SYM?? symbols for all of LINK, not just LNKWLD.
;1236 Teach LINK about KS10s.
;1240 Fix /CPU switch, make it work on TOPS-20.
;1242 Add definition of PATORG as start of PA1050 on TOPS-20
;1243 Define PS.GLD to make left half fixups to global symbols work.
;1244 Add definition of PATLEN as number of pages of PA1050
;1260 Default for /SYMSEG should be /SYMSEG:LOW
;1264 Add ZAPTP2 and U2 Macros.
;1267 Add ALGOL and ALGDDT to list of debuggers in DEB macro.
;1300 Add RC.NM and /LIMIT switch.
;1307 Add /SUPPRESS switch.
;1326 Add KILPAT definition.
;START OF VERSION 5
;1402 Add LN.BF for .REL file I/O on TOPS-20.
;1411 Add AT.NC and AT.NZ relocaton block flags.
;1422 Add Pascal to list of supported libraries
;1423 Add offsets,switches and definitions for the program data vector.
;1424 Implement /MAXNODE.
;1425 New fork writing code under FTFRK2 for extended addressing.
;1433 Distinguish COBOL and COBOL-68 in the PROCESSORS macro.
;1442 Add /EXTEND to the SWTCHS macro.
;1450 Add PRGFRK symbolic fork handle, remove /EXTEND.
;1462 Add JOVIAL to list of known processors.
;1465 Change FORTRAN entries in PROCESSOR macro.
; Start of Version 5A
;1472 Add symbols for typecheck offsets, masks and constants.
;1500-1677 Reserved for maintenance.
;1700 Change FOROTS origin to 500000
;1750 Move LINK-10 origin up to 540000
;1754 Add long symbol definitions and handly macros.
;1774 Turn .NWBLK on by default.
;2002 Implement /PLTTYP switch.
;2005 Change arg checking parameters, add comments.
;2010 Fix value of TPMCH
;2017 Add LN.FL, Max asciz size (words) of TOPS-10 style filespec.
;2020 Change some typechecking offsets to reflect added word.
;2026 Update copyright and clean up listing for release.
;2036 Fix JOVIAL compiler type, add ADA compiler type.
;2041 Increase LN.FL so 39 character directories names will work.
;2046 Add number of typecheck blocks to return before GC.
;2053 Add offsets and size for defered character fixup block.
;2071 Remove OPDEFs of JSYSes and .GTxxx bits, definitions of PDV words
;2103 Add mask, bytepointer and constants for argchecking structure field.
;Start of Version 6
;2200 Change fixups codes to high six bits, add 30 bit address names.
;2202 Remove AP and CRTFRK argument block definitions.
;2210 Define max characters (MAXSYM) and storage (SYMSIZ) for long symbols
;2211 Add /NOJOBDAT command to not load JOBDAT into hi or lo segs.
;2212 Update polish symbols for type 1072 block.
;2214 Add 30 bit fixups.
;2220 Add Long symbol support for type in and map file.
;2223 Add R.RED and the /REDIRECT switch.
;2227 Add /PSCOMMON and the data block offsets for it.
;2237 Add constants for PDV memory map.
;2245 Add constants for PDV symbol table vector.
;2250 Remove .MMXTD - PDV space allocater is smarter now.
;2254 Add some title segment bits, remove the fail block fixup.
;2257 Add generic JSYS handling macro, define ERSTR% buffer length.
;2262 Add fields for type 1060 rel block.
;2270 Add pagable TP area, remove 18 bit address from argchecking structures.
;2271 Fix default for /ERRORLEVEL, maximum for all error switches.
;2277 Add symbols for new /DEBUG code.
;2300 Remove F40 code and conditionals, and FTFORK conditional.
;2301 Add FILSIZ, max length of TOPS-10 style filespec on TOPS-20.
;2304 Rearrange the ERNAM macro.
;2306 Make /PVDATA use special switch handler, and EXPORT keyword.
;2314 Add a constant to define where UDDT begins.
;2336 Add S.FIL flag for title blocks (TOPS-20 style file spec).
;2344 Add compiler type for C.
;2353 Add SPLFK% symbols, remove unnecessary DDT symbols and bad AC names.
;2366 Add conditionals, LC map symbols, FLD and POS macros on TOPS-10.
;2403 New corporate copywrite statememt.
;2412 Add the word RC.NH to point to the next highest PSECT,
; and AT.OM (overlap message given) bit to RC.AT.
;2415 Lower %HISEG again since SCAN got bigger. TOPS-20 ONLY.
;2417 Udate copywrite statememt to 1988.
SUBTTL STANDARD MNEMONICS--REGISTERS, BITS, UUOS
;AC NAMES
;MUST NOT BE REDEFINED, ALL LOCAL ACCS MUST BE DEFINED IN TERMS OF THESE
FL=0 ;FLAGS (LH=PERMANENT, RH=TEMPORARY)
T1=1 ;VERY TEMPORARIES
T2=2
T3=3
T4=4
P1=5 ;PRESERVED TEMPORARIES
P2=6
P3=7
P4=10
W1=11 ;MORE PERMANENT
W2=12
W3=13
R1=14 ;EVEN MORE PERMANENT
R2=15
R3=16
R==R1 ;ALTERNATIVE NAME
P=17 ;PUSH-DOWN POINTER
IFE TOPS20,< ;[2366]
DEFINE FLD(VALUE,FIELD),<<<<VALUE>B<POS(<FIELD>)>>&<FIELD>>> ;;[2366]
DEFINE POS(FIELD),<<^L<<FIELD>&<-<FIELD>>>>> ;;[2366]
>;[2366] IFE TOPS20
IFN TOPS20,<
;[2353] Splice fork argument block (only parts defined are those
;[2353] used by LINK)
.SFLEN==0 ;[2353] Length of argument block
.SFCOD==1 ;[2353] Function code
.SFUIN==2 ;[2353] New inferior
.SFUFL==3 ;[2353] Flags
.SFUA1==4 ;[2353] PC Flags
.SFUA2==5 ;[2353] PC Address
SF%ADR==1B2 ;[2353] Flag to start at PC address
SF%EXT==1B0 ;[2353] SPLFK% extended function
.SFUNS==1 ;[2353] Unsplice and start function
;[2277] DDT addresses for mapping
DDTSA==770000 ;[2277] UDDT'S START ADDR.
DDTPAG==764 ;[2314] LOWER PAGE BOUND OF WHERE UDDT LIVES
> ;[2257] END IFN TOPS20
;I/O CHANNELS
;DEFINE I/O CHANNEL DATA
DEFINE IODATA <
;;REAL CHANNELS
XXX (ZC,0,.IODPR) ;GETSEG AND SCAN/WILD ONLY
XXX (DC,1,.IOBIN) ;READ DATA FILE
XXX (MC,2,.IOASC) ;MAP CHANNEL (OUTPUT)
XXX (RC,3,.IOASC) ;RECORD LOG FILE CHANNEL
XXX (OC,4,.IODPR) ;OVERLAY CHANNEL
XXX (LC,5,.IODPR) ;LOW SEG CODE OVERFLOW
XXX (HC,6,.IODPR) ;HIGH SEG CODE OVERFLOW
XXX (SC,7,.IODPR) ;LOCAL SYMBOL OVERFLOW
XXX (GC,10,.IODPR) ;GLOBAL SYMBOL OVERFLOW
XXX (FC,11,.IODPR) ;FIXUP OVERFLOW
XXX (TC,12,.IODPR) ;TEMP CHAN (USED TO REPROCESS FIXUPS ETC)
XXX (AC,13,.IODPR) ;ALGOL SYMBOL OVERFLOW
XXX (PC,14,.IODPR) ;[2270] ARGUMENT TYPECHECKING OVERFLOW
;;PSEUDO-CHANNELS, USED TO HOLD LOOKUP/ENTER INFO
XXXX (%RC,RC,.IOASC) ;LOG FILE
XXXX (%SC,MC,.IODPR) ;SYMBOL FILE
XXXX (%VC,DC,.IODPR) ;SAVE/SSAVE FILE
XXXX (%XC,LC,.IODPR) ;XPN FILE
XXXX (%OC,OC,.IODPR) ;OVERLAY FILE
XXXX (%PC,0,-1) ;PLOT CHANNEL (WILL BE 17 AT RUN TIME)
>
DEFINE XXX (A,B,C)<
A==:B
%%==:B+1
>
DEFINE XXXX (A,B,C)<
A==:%%
%%==%%+1
>
IODATA
PURGE XXX,XXXX,%%
OPDEF HALT [HALT] ;PUT IN CREF LISTING
OPDEF ERRUUO [1B8] ;ERROR UUO
;PERMANENT FLAGS (LH)
L.INC==1000 ;IN SPECIAL /INC MODE (ONLY LOAD IF INCLUDED)
L.HSO==400 ;LOAD HIGH SEGMENT ONLY
L.LSO==200 ;LOAD LOW SEGMENT ONLY
L.FNS==100 ;FORCED LOAD TO NORMAL SEGMENTS (DEFAULT)
L.FHS==40 ;FORCED LOAD TO HIGH SEGMENT
L.FLS==20 ;FORCED LOAD TO LOW SEGMENT
L.SPD==10 ;DO SOMETHING SPECIAL FOR DEBUGGER
L.ISA==4 ;IGNORE STARTING ADDRESS BLOCKS
L.SYM==2 ;LOAD LOCAL SYMBOLS
L.LIB==1 ;IN LIBRARY SEARCH MODE
;TEMPORARY FLAGS (RH)
R.TWSG==(1B0) ;TWOSEGMENT PROGRAM
R.LOD==(1B1) ;LOADING IN PROGRESS (BETWEEN TYPE 6 & TYPE 5)
R.RED==(1B2) ;[2223] LOADING WITH /REDIRECT (FORCED LOAD TO PSECTS)
R.CDT==(1B3) ;TWOSEG FLAG FORCED WHILE LOADING
; DATA INCASE COMMON AND DIFF SEG
R.LHR==(1B4) ;IN NEW BLOCK TYPE THAT CAN HAVE RELOC LH
R.CNV==(1B5) ;[1000] CONVERT NON-RADIX50 CHAR TO "%" IN OLD DDT TBL
R.TRU==(1B6) ;[1000] TRUNCATE LONG NAMES TO OLD DDT TBL
R.INC==L.INC ;IN SPECIAL /INC MODE (ONLY LOAD IF INCLUDED)
R.HSO==L.HSO ;LOAD HIGH SEGMENT ONLY
R.LSO==L.LSO ;LOAD LOW SEGMENT ONLY
R.FNS==L.FNS ;FORCED LOAD TO NORMAL SEGMENTS (DEFAULT)
R.FHS==L.FHS ;FORCED LOAD TO HIGH SEGMENT
R.FLS==L.FLS ;FORCED LOAD TO LOW SEGMENT
R.SPD==L.SPD ;DO SOMETHING SPECIAL FOR DEBUGGER
R.ISA==L.ISA ;IGNORE STARTING ADDRESS BLOCKS
R.SYM==L.SYM ;LOAD LOCAL SYMBOLS
R.LIB==L.LIB ;LIBRARY SEARCH MODE
;PRIMARY SYMBOL BITS
PT.SGN==:1B0 ;SIGN BIT (MUST BE SET)
PT.EXT==:1B1 ;EXTENDED TRIPLET REQUIRED
PT.SYM==:1B2 ;SYMBOL TYPE
PT.TTL==:1B3 ;SPECIAL TITLE BLOCK (DDT)
PT.RLC==:1B4 ;RELOCATION COUNTER TYPE
PT.OTH==:1B5 ;OTHER TYPE (RANDOM BLOCKS)
;FLAG BITS IN PRIMARY SYMBOL TRIPLET
PS.GLB==:1B6 ;GLOBAL SYMBOL
PS.ENT==:1B7 ;ENTRY POINT
PS.COM==:1B8 ;COMMON
PS.REQ==:1B9 ;GLOBAL REQUEST
PS.UDL==:1B10 ;PARTIAL VALUE SEEN FOR LH, BUT DEPENDENT
;GLOBAL NOT YET SEEN (I.E. A:=B##,,4)
PS.UDR==:1B11 ;PARTIAL VALUE SEEN FOR RH
PS.UDF==:PS.UDL!PS.UDR ;BOTH HALVES "DEFINED" IN TERMS OF
;OTHER SYMBOLS. NOTE THAT IF EITHER BIT
;IS ON ALONE, THEN THE OTHER HALF MUST BE
;FULLY DEFINED, SINCE IT WAS EITHER
;CONSTANT (A:=B##,,4) OR WAS IN TERMS OF
;ANOTHER GLOBAL THAT HAS SINCE BEEN
;DEFINED.
PS.LCL==:1B12 ;LOCAL SYMBOL
PS.DDT==:1B13 ;HALF-KILLED (TO DDT)
PS.MDF==:1B15 ;MULTIPLY DEFINED
PS.FXP==:1B16 ;REFERENCE IN FIXUP TABLE
PS.REL==:1B17 ;SYMBOL IS RELOCATABLE
;RIGHT HALF SIDE
PS.EXO==:1B18 ;EXTENDED TRIPLET REQUIRED (FUTURE)
PS.BGS==:1B19 ;COPIED FROM A BOUND GLOBAL TABLE
PS.RBG==:1B20 ;RELOCATABLE BOUND GLOBAL
PS.NOE==:1B21 ;NOT AN ENTRY FOR OVERLAYS
PS.NRQ==:1B22 ;NOT A REQUEST (IF UNDEF) FOR OVERLAY
PS.GLD==:1B23 ;[1243] POSSIBLE LEFT HALF DEFERRED FIXUP
PS.MPO==:1B24 ;[1000] MAP ONLY(/PURGE SKILLS IT FROM DDT TABLE)
PS.EXF==:1B25 ;[1000] EXTENDED (30-BIT) FIXUP
PS.FWF==:1B26 ;[1000] FULL WORD FIXUP
PS.TYP==:17 ;MASK FOR OUTPUT TYPE
PS.UND==:0 ;UNDEFINED
PS.LOG==:1 ;LOGICAL
PS.SPI==:2 ;S.P. INTEGER
PS.SPR==:4 ;S.P. REAL
PS.OCT==:6 ;OCTAL
PS.LBL==:7 ;LABEL
PS.DPR==:10 ;D.P. REAL
PS.DPI==:11 ;D.P. INTEGER
PS.DO==:12 ;D.P. OCTAL
PS.CMP==:14 ;COMPLEX
PS.AS==:17 ;ASCII STRING
;BITS IN "OTHER" BLOCKS
PO.IND==:1B6 ;BLOCK IS POINTER TO WHERE REAL BLOCK WENT
;FLAG BITS IN PRIMARY TITLE BLOCK
PT.MSF==:1B6 ;THIS BLOCK DESCRIBES ANOTHER SOURCE FILE
PT.FAK==:1B7 ;TITLE DEFINED BY LINK NOT USER
PT.BLK==:1B8 ;FAIL LOCAL BLOCK
PT.PSP==:1B9 ;POINTER TO PSECT RELOC BLOCK
PT.PSC==:1B10 ;PSECT RELOC BLOCKS
;SECONDARY TRIPLET BITS
S.SGN==:1B0 ;SIGN BIT (MUST BE OFF)
S.LST==:1B1 ;LAST SECONDARY TRIPLET
S.SYM==:1B2 ;SYMBOL TYPE
S.TTL==:1B3 ;TITLE BLOCK
S.RLC==:1B4 ;RELOCATION CTRS
S.OTH==:1B5 ;"OTHER" BLOCK FOR TYPECHECKING
;SECONDARY SYMBOL BITS
S.LNM==:1B6 ;LONG NAME
S.COM==:1B7 ;COMMON (SIZE OF IT)
S.FOR==:1B6 ;IF S.OTH SET, VAL IS PTR TO CALLEE DATA
S.ACT==:1B7 ;IF S.ACT SET, VAL IS PTR TO CALLER DATA
S.FXP==:1B8 ;POINTER TO FIXUP CHAIN
S.PVS==:1B9 ;PARTIAL VALUE ONLY (SYMBOL FIXUP NEEDED)
S.RBG==:1B10 ;BOUND GLOBAL DEFINED IN RELOCATABLE LINK
S.LLN==:1B11 ;LAST TRIPLET OF A LONG NAME
;SECONDARY TITLE BITS: LEFT HALF (PUBLISHED VALUES)
S.CMT==:1B6 ;ASCII COMMENT ABOUT PROGRAM
S.PRC==:1B7 ;PROCESSOR USED TO COMPILE PROGRAM
S.CRE==:1B8 ;CREATION DATE AND TIME
S.DEV==:1B9 ;DEVICE & UFD FOR SOURCE FILE
S.NAM==:1B10 ;FILE NAME & EXT
S.SFD==:1B11 ;SFD'S
S.VER==:1B12 ;VERSION
S.SEG==:1B13 ;RELOCATION CTRS FOR LOW/HIGH
S.SHI==:1B14 ;[2254] RELOCATION FOR HIGH SEG OR PSECTS
S.PSC==:1B13 ;PSECT RELOC BLOCKS
S.PSV==:1B14 ;[2220] PSECT VALUES
S.PSN==:1B15 ;[2220] PSECT NAME
S.FIL==:1B16 ;[2326] Title block flag for TOPS-20 file spec
SS.PS==:1B0 ;[2254] HIGH SEG BREAK IS REALLY PSECT POINTER
;RIGHT HALF (INTERNAL VALUES)
S.RLD==:1B18 ;REL FILE DEVICE & UFD
S.RLN==:1B19 ;REL FILE NAME AND EXTENSION
S.RLS==:1B20 ;REL FILE SFD'S
;THE FOLLOWING FLAGS ARE FOR INTERNAL USE ONLY, AND DO NOT APPEAR
;IN THE .REL FILE OR THE LS AREA.
S.MSF==:1B34 ;PROCESSING A MULT. SRC. FILE 3RPLET
S.MUL==:1B35 ;MORE THAN ONE OF THIS TRIPLET LEGAL
;CORRESPONDING BITS IN OLD RADIX-50 SYMBOLS
R5.DDT==:1B0 ;HALF-KILLED TO DDT
R5.REQ==:1B1 ;GLOBAL REQUEST
R5.LCL==:1B2 ;LOCAL SYMBOL
R5.GLB==:1B3 ;GLOBAL SYMBOL
;AND BITS IN ADDITIVE GLOBAL REQUESTS
R5.FXA==:1B0 ;ADDITIVE GLOBAL FIXUP
R5.FXL==:1B1 ;LEFT HALF FIXUP
R5.FXS==:1B2 ;SYMBOL TABLE FIXUP
R5.FXC==:1B3 ;RIGHT HALF CHAINED FIXUP
;FLAGS IN FIXUP BLOCK FIRST WORD (LEFT HALF)
FP.SGN==:1B0 ;SIGN BIT (MUST BE ON FOR PRIMARY)
FP.SYM==:1B1 ;SYMBOL BLOCK FIXUP (ADDITIVE GLOBAL)
FP.PTR==:1B2 ;RIGHT HALF IS POINTER TO CHAIN OF FIXUPS
FP.POL==:1B3 ;POLISH FIXUP BLOCK
FP.LBT==:1B4 ;LOADER BLOCK TYPE (USUALLY 1)
FP.F4==:1B5 ;OLD FORTRAN TABLES
FP.PRU==:1B6 ;PAGE FAULT RIGHT-HALF FIXUP UNDEFINED
FP.TTL==:1B7 ;STUFF FOR TITLE BLOCKS (SEG POINTERS)
;[2212] OTHER FIXUP FLAGS FOR POLISH TRIPLETS ONLY
FF.NEW==:1B10 ;[2212] NEW STYLE (TYPE 1072) POLISH BLOCK
;OTHER FIXUP FLAGS FOR SYMBOL TRIPLETS ONLY
FS.FXR==:1B10 ;RIGHT HALF FIXUP (R5.FXR)
FS.FXL==:1B11 ;LEFT HALF FIXUP (R5.FXL)
FS.FXF==:1B12 ;FULL WORD FIXUP
FS.FXS==:1B13 ;SYMBOL TABLE FIXUP (R5.FXS)
FS.FXC==:1B14 ;RIGHT HALF CHAINED FIXUP (R5.FXC)
FS.MDC==:1B15 ;[1213] MULTIPLE PARTIAL DEFINITION FIXUP
;[1213] FOR COMPARE WITH TRUE VALUE ONLY
;[1213] DON'T USE OR DELETE S.PVS TRIPLET
FS.FXE==:1B16 ;[1000] EXTENDED (30-BIT) FIXUP
FS.REL==:PS.REL ;DEFINING SYMBOL WAS RELOCATABLE
;TYPE CHECKING OFFSETS, MASKS AND CONSTANTS
;BITS IN FLAG HALFWORD
TPCNT==:1B0 ;[2005] 1 IF DIFFERENT NUMBER OF ARGS IS AN ERROR
TPWHO==:1B1 ;[2005] 1 IF CALLER, 0 IF CALLEE
TPLOD==:1B2 ;[2005] 1 IF LOAD DESCRIPTOR BLOCK INTO USER IMAGE
TPVAL==:1B3 ;[2005] 1 IF LAST DESCRIPTOR IS FOR RETURNED VALUE
TPSOF==:1B4 ;[2005] 1 IF COMPLAIN ABOUT SUBROUTINE/FUNCTION ERROR
;[2005] PRIMARY ARGUMENT DESCRIPTOR BITS
TPCNV==:1B0 ;[2005] RESERVED
TPNUP==:1B1 ;[2005] PARAMETER WILL/MUST NOT BE MODIFIED
TPPAS==:POINT 3,0,4 ;[2005] PASSING MECHANISM BYTE POINTER
TPADD==:0 ;[2005] PASS BY ADDRESS
TPDSC==:1 ;[2005] PASS BY DESCRIPTOR
TPIMM==:2 ;[2005] PASS IMMEDIATE VALUE
;[2005] (OTHERS RESERVED)
TPPASM==:7B4 ;[2005] PASSING MECHANISM BITS
TPCTC==:1B5 ;[2005] 1 IF COMPILE TIME CONSTANT
TPTYP==:POINT 6,0,11 ;[2005] ARGUMENT TYPE CODE BYTE POINTER
TPTNUL==:0 ;[2005] DON'T CARE
TPTLOG==:1 ;[2005] FORTRAN LOGICAL
TPTINT==:2 ;[2005] INTEGER
TPTREL==:3 ;[2005] (RESERVED)
TPTSRL==:4 ;[2005] SINGLE PRECISION REAL
TPT36B==:6 ;[2005] 36 BIT STRING
TPTALT==:7 ;[2005] ALTERNATE RETURN (LABEL)
TPTDRL==:10 ;[2005] DOUBLE PRECISION REAL
TPTDIN==:11 ;[2005] DOUBLE PRECISION INTEGER
TPT72B==:12 ;[2005] DOUBLE PRECISION OCTAL
TPTGFL==:13 ;[2005] G-FLOATING REAL
TPTCMP==:14 ;[2005] COMPLEX
TPTOBS==:15 ;[2005] COBOL BYTE STRING DESCRIPTOR
;[2005] OR FORTRAN CHARACTER
TPTSBS==:16 ;[2005] BASIC SHARED STRING DESCRIPTOR
TPTASZ==:17 ;[2005] ASCIZ STRING
TPTASC==:20 ;[2005] SEVEN BIT ASCII STRING
TPTYPM==:77B11 ;[2005] ARGUMENT TYPE CODE BITS
TPSTR==:POINT 6,0,17 ;[2103] ARGUMENT STRUCTURE FIELD BYTEPOINTER
TPSTRM==:77B17 ;[2103] ARGUMENT STRUCTURE CODE BITS
TPIAD==:1B18 ;[2005] IMPLICIT ARGUMENT DESCRIPTOR
TPRES==:377B26 ;[2005] RESERVED FOR DEC, MBZ
TPSND==:POINT 9,0,35 ;[2005] NUMBER OF SECONDARY DESCRIPTORS
TPSNDM==777B35 ;[2005] NUMBER OF SECONDARIES - MUST END IN LSB
;BITS IN SECONDARY DESCRIPTOR
TPMCH==:POINT 3,0,2 ;[2010] FORMAL/ACTUAL LENGTH RELATIONSHIP BYTE POINTER
TPMNUL==:0 ;[2005] ALL RELATIONSHIPS ARE ALLOWED
TPMEQL==:1 ;[2005] LENGTHS MUST BE EQUAL
TPMLSS==:2 ;[2005] ACTUAL .LT. FORMAL
TPMLEQ==:3 ;[2005] ACTUAL .LE. FORMAL
TPMGTR==:4 ;[2005] ACTUAL .GT. FORMAL
TPMGTE==:5 ;[2005] ACTUAL .GE. FORMAL
;[2005] (OTHERS RESERVED)
TPSIZ==:POINT 33,0,35 ;[2005] LENGTH OF ARGUMENT
;COERSION BLOCK CODES
FCNUP==:0 ;[2005] CHECK IF MODIFIED
FCPAS==:1 ;[2005] CHECK PASSING MECHANISM
FCTYP==:2 ;[2005] CHECK ARGUMENT TYPE CODE
FCCTC==:3 ;[2005] CHECK IF COMPILE TIME CONSTANT
FCWNA==:4 ;[2005] CHECK NUMBER OF ARGUMENTS
FCRTV==:5 ;[2005] CHECK FOR RETURN VALUE
FCLEN==:6 ;[2005] CHECK LENGTH OF ARGUMENT
FCSTR==:7 ;[2103] CHECK ARGUMENT STRUCTURE CODE
CBFUNC==:POINT 18,0,17 ;[2005] FORMAL ATTRIBUTE BYTE POINTER
CBCALL==:POINT 18,0,35 ;[2005] ACTUAL ATTRIBUTE BYTE POINTER
;[2053] Offsets for the deferred character fixup block
TPCLK==:0 ;[2053] Link to next block, must be word 0
TPCAD==:1 ;[2053] Overlay Index,,User Address
TPCBK==:2 ;[2053] Length of typechecking character fixup block
;OFFSETS FOR DESCRIPTOR BLOCK IN MEMORY - NOT THE SAME AS IN
;THE ACTUAL REL BLOCK
ABSIZ==:0
ABLNK==:ABSIZ+1 ;[2270] LINK TO NEXT TYPECHECKING BLOCK (MUST BE ZERO)
ABMOD==:ABLNK+1 ;[2270] MODULE NAME BLOCK WAS FOUND IN
ABOVH==:ABMOD+1 ;[2270] # OVERHEAD WORDS (WORDS NOT IN REL BLOCK)
ABABA==:ABMOD+1 ;[2270] ADDRESS OF ARG BLOCK IN USERS ADDRESS SPACE
ABCAL==:ABABA+1 ;[2270] ADDRESS OF CALL IN USERS ADDRESS SPACE
ABCNT==:ABCAL+2 ;[2270] LENGTH OF NAME IN BYTES
ABNAM==:ABCNT+1 ;[2270] FUNCTION NAME
;[2227] Symbols for /PSCOMMON data block
PC.LNK==0 ;[2227] Next common/psect block
PC.PSC==1 ;[2227] Psect name
PC.CMN==2 ;[2227] Common name
PC.SIZ==3 ;[2227] Size of block
;[2262] Bits for fields in type 1160 block
X60.R==1B0 ;[2262] Repetion count exists in type 1060
X60.F==1B1 ;[2262] Fill character wanted in type 1060
X60.B==1B2 ;[2262] Byte count exists in type 1060
X60.P==77B8 ;[2262] Position of first byte in type 1060
X60.SL==377B17 ;[2262] Symbol length in type 1060
X60.S==77B5 ;[2262] Byte size in type 1060
;FIXUP TYPES
;CORE FIXUPS
DEFINE CFIXUPS<
X CR;; Chained right halfword
X CL;; Chained left halfword
X CF;; Chained fullword
X CE;;[2214] Chained thirty bit
X AR;; Additive right halfword
X AL;; Additive right halfword
X AF;; Additive fullword
X AE;;[2214] Additive thirty bit
X RR;; Replace right halfword
X RL;; Replace left halfword
X RF;; Replace fullword
X RE;;[2214] Replace thirty bit
>
;SYMBOL TABLE FIXUPS
DEFINE SFIXUPS<
X AR;; ;[2214] Absolute right half
X AL;; ;[2214] Absolute left half
X AF;; ;[2214] Absolute fullword
X AE;; ;[2214] Absolute thirty bit
X RR;; ;SAME AS AR BUT RELOCATABLE **DON'T MOVE**
X RL;; ; " " AL " " " "
X RF;; ; " " AF " " " "
X RE;; ; " " AE " " " " [2214]
X TL
X SG
X SL; ;ADD NEW FIXUP IN SFIXUPS MACRO FOR SG, LEFT HALF
>
;DEFINE CORE FIXUP OFFSETS
DEFINE X (A)<
CPF.'A==<%%>B5 ;;[2200] Put the type in the high order bits
%%==%%+1
>
%%==0
CFIXUPS
;DEFINE SYMBOL TABLE FIXUPS
DEFINE X (A)<
SPF.'A==<%%>B5 ;;[2200] Put the type in the high order bits
%%==%%+1
>
%%==0
SFIXUPS
IFN FTEXE,<
;30 Bit addressing byte pointers
OPDEF ADDRES [POINT 30,0,35] ;[2200] 30 bit address byte pointer
OPDEF HIGH6 [POINT 6,0,5] ;[2200] 6 remaining bits
;EXE FILE
;FLAG BIT FOR RIGHT HALF OF SSEXT (LH OF SSEXT IS THE SAVE FILE EXTENSION)
SS.SHR==000001 ;SHARABLE--SET IF SSAVE SWITCH USED
;EXE FILE DIRECTORY TYPE
.SVEVC==1775 ;ENTRY VECTOR
.ELEV==3 ;[2366] ENTRY VECTOR LENGTH
>
;COMPILER TYPES
DEFINE PROCESSORS<
X UNKNOWN,UNK,<Unknown>, ;;[1225]
X F40,F40,<F40>,400000 ;;[1225]
X COBOL,C68,<COBOL-68>,400000 ;;[1433]
X ALGOL,ALG,<Algol>,400000 ;;[1225]
X NELIAC,NLI,<NELIAC>, ;;[1225]
X PLI,PLI,<PL/I>, ;;[1225]
X BLISS,BLI,<BLISS-10>, ;;[1225]
X SAIL,SAI,<SAIL>, ;;[1225]
X FORTRAN,FOR,<FORTRAN>,500000 ;;[1700]
X MACRO,MAC,<MACRO>, ;;[1225]
X FAIL,FAI,<FAIL>, ;;[1225]
X BCPL,BCP,<BCPL>, ;;[1225]
X MIDAS,MID,<MIDAS>, ;;[1225]
X SIMULA,SIM,<SIMULA>, ;;[1225]
X CBL74,C74,<COBOL-74>,400000 ;;[1225]
X COBOL,CBL,<COBOL>,400000 ;;[1433]
X BLS36,B36,<BLISS-36>, ;;[1225]
X BASIC,BAS,<BASIC>, ;;[1225]
X SITGO,STG,<SITGO>, ;;[1225]
X FORTRAN,XFR,<G-Floating FORTRAN>,500000 ;;[1700]
X PASCAL,PAS,<PASCAL>,540000 ;;[1422]
X JOVIAL,JOV,<JOVIAL>, ;;[1462]
X ADA,ADA,<ADA> ;;[2036]
X C,C,<C> ;;[2344]
>
;***NOTE*** ADD NEW ITEMS IN KEYWORDS MACRO ALSO
CT.LEN==0
CT.BIT==1B0
DEFINE X (A,B,C,D)< ;;[1225] ACCOUNT FOR NEW ARG
CT.'B==CT.LEN
CT.LEN==CT.LEN+1
B'BIT==CT.BIT
CT.BIT==CT.BIT_-1
>
PROCESSORS
IFE CT.BIT,<PRINTX TOO MANY PROCESSORS>
PURGE X,CT.BIT
CT.ANY=-CT.UNK
;CPU TYPES. FIRST ARGUMENT TO INTERNAL X MACRO IS THE NAME AS
;IT SHOULE BE PRINTED IN THE MAP. THE SECOND IS A TWO LETTER MNEMONIC,
;USED TO BUILD SYMBOLS. THESE ARE CURRENTLY THE SAME.
DEFINE CPUS<
X KA,KA
X KI,KI
X KL,KL
X KS,KS ;;[1236] ADD KS CPU
>
CP.MSK==0 ;[1120] TO BE MASK OF ALL VALID CPUS
CP.BIT==1B35 ;[1120] STARTING CPU BIT
DEFINE X(A,B)<
CP.'B==CP.BIT ;;[1120] ALLOCATE NEXT CPU BIT
CP.MSK==CP.MSK!CP.BIT ;;[1120] BUILD MASK OF ALL CPU BITS
CP.BIT==CP.BIT_1 ;;[1121] ADVANCE TO NEXT BIT
>
CPUS
PURGE X,CP.BIT
;RELOCATION TABLE POINTERS
RC.SG==0 ;SEGMENT NUMBER
RC.NM==1 ;NAME
RC.IV==2 ;INITIAL VALUE
RC.CV==3 ;CURRENT VALUE
RC.OF==4 ;OFFSET IN SEGMENT RELATIVE TO 0 OR 400000
RC.HL==5 ;HIGHEST LOC LOADED
RC.LB==6 ;POINTER TO TAB.LB(SEG)
RC.WD==7 ;POINTER TO LW.S0(SEG)
RC.PG==^D8 ;POINTER TO UW.S0(SEG)
RC.AT==^D9 ;[722] PSECT ATTRIBUTES
RC.LM==^D10 ;[1300] UPPER LIMIT
RC.NH==^D11 ;[2412] INDEX OF NEXT HIGHEST PSECT ABOVE US
RC.INC==^D12 ;[1300] SIZE OF EACH BLOCK
;[722] BIT DEFINITION FOR RC.AT
AT.RP==:1B0 ;[761] RELOCATABLE PSECT ( MUST BE BIT 0 )
AT.PS==:1B1 ;[1132] PSECT SEEN (IN THIS MODULE)
AT.LE==:1B2 ;[1300] PSECT LIMIT EXCEEDED FLAG
AT.OM==:1B3 ;[2412] PSECT OVERLAP MESSAGE GIVEN
AT.NC==:1B11 ;[1411] DON'T CROSS SECTION BOUNDARIES
AT.NZ==:1B12 ;[1411] LOAD IN NONZERO SECTION ONLY
AT.PA==:1B13 ;[722] PAGE ALIGNED
AT.CN==:1B14 ;[756][722] CONCATENATE
AT.OV==:1B15 ;[756][722] OVERLAY
AT.RO==:1B16 ;[756][722] READ ONLY
AT.RW==:1B17 ;[756][722] READ/WRITE
;STANDARD ENTRY POINTS FOR EXECUTE ONLY HIGH SEGS
IFE FTSINGLE,<
%%UUO==0 ;UUO ENTRY
%%RET==1 ;CPOPJ
%%ST==2 ;SEGMENT START
>
SUBTTL PROTOTYPE SCAN BLOCK
F.NXT==:0 ;POINTER TO NEXT FILE AREA
F.SWP==:F.NXT+1 ;POINTER TO SWITCH BLOCKS
F.ZER==:F.NXT+2 ;START OF AREA FOR SPEC STORAGE
F.DEV==:F.ZER+.FXDEV ;DEVICE
F.NAME==:F.ZER+.FXNAM ;NAME
F.NAMM==:F.ZER+.FXNMM ;NAME MASK
F.EXT==:F.ZER+.FXEXT ;EXT,,MASK
F.MOD==:F.ZER+.FXMOD ;MODIFIER WORD
F.PROT==:F.MOD ;OUTPUT PROTECTION
F.MODM==:F.ZER+.FXMOM ;MODIFIER MASK
F.DIR==:F.ZER+.FXDIR ;DIRECTORY
F.DIRM==:F.ZER+.FXDIM ;DIRECTORY MASK
F.SFD==:F.DIRM+1 ;FIRST SFD
F.SFDM==:F.SFD+1 ;FIRST SFD MASK
F.BFR==:F.ZER+.FXBFR ;/BEFORE
F.SNC==:F.ZER+.FXSNC ;/SINCE
F.ABF==:F.ZER+.FXABF ;/ABEFORE
F.ASN==:F.ZER+.FXASN ;/ASINCE
F.FLI==:F.ZER+.FXFLI ;FILE MIN SIZE (WORDS)
F.FLM==:F.ZER+.FXFLM ;FILE MAX SIZE (WORDS)
F.EST==:F.ZER+.FXEST ;/ESTIMATE
F.VER==:F.ZER+.FXVER ;/VERSION
F.LEN==:F.ZER+.FXLEN ;LENGTH REQUIRED FOR FILE SPECS
;[2220] Flags for switch block in scan block
SWT.S1==1B0 ;[2220] First argument is a symbol
SWT.S2==1B1 ;[2220] Second argument is a symbol
SUBTTL PROTOTYPE DATA BLOCK
I.ZER==:0 ;BASE
I.MOD==:I.ZER ;MODE OF OPEN
I.DEV==:I.MOD+1 ;DEVICE
I.BUF==:I.MOD+2 ;BUFFER HEADERS
I.DVZ==:I.MOD+3 ;DEVSIZ WORD
I.RNG==:I.MOD+4 ;POINTER TO RING BUFFERS
I.SCN==:I.MOD+5 ;POINTER TO SPECIAL SCAN MOD WORD
I.CHN==:I.MOD+6 ;CHAN NUMBER IN AC FIELD (TO FORM I/O INSTS)
I.SWT==:I.MOD+7 ;SWITCHES STILL TO DO
;AFTER OPEN (LH) ,, AFTER CLOSE (RH)
LN.OPN==I.SWT-I.MOD+1 ;LENGTH OF "OPEN" BLOCK
I.RIB==:I.ZER+LN.OPN ;START OF LOOKUP/ENTER BLOCK
I.PPN==:I.RIB+.RBPPN ;DIRECTORY NAME OR POINTER
I.NAM==:I.RIB+.RBNAM ;FILENAME
I.EXT==:I.RIB+.RBEXT ;EXTENSION
I.PRV==:I.RIB+.RBPRV ;PRIVS, MODE, TIME DATE
I.SIZ==:I.RIB+.RBSIZ ;SIZE (OLD STYLE LOOKUP PPN)
I.VER==:I.RIB+.RBVER ;VERSION
I.EST==:I.RIB+.RBEST ;ESTIMATED LENGTH
I.ALC==:I.RIB+.RBALC ;ALLOCATED LENGTH
I.LDV==:I.RIB+.RBDEV ;LOGICAL UNIT NAME
LN.RIB==:I.LDV-I.RIB+1 ;LENGTH OF ENTER BLOCK
;OFFSETS FOR FULL PATH STORAGE
I.PTH==:I.ZER+LN.OPN+LN.RIB
I.ARG==:I.PTH+.PTFCN
I.SSW==:I.PTH+.PTSWT
I.UFD==:I.PTH+.PTPPN
I.SFD==:I.UFD+1 ;FIRST SFD
I.END==:I.UFD+LN.DRB
LN.SFD==:I.END-I.PTH+1
LN.IO==:LN.OPN+LN.RIB+LN.SFD ;TOTAL LENGTH REQUIRED
SUBTTL DATA BLOCK FORMAT FOR REQUEST/REQUIRE BLOCKS
R.NXT==:0 ;POINTER TO THE NEXT BLOCK
R.ZER==:R.NXT+1 ;FIRST WORD CONTAINING DATA
R.DEV==:R.ZER+0 ;DEVICE
R.NAM==:R.ZER+1 ;FILE NAME
R.EXT==:R.ZER+2 ;EXTENSION
R.PPN==:R.ZER+3 ;PROJECT PROGRAMMER NUMBER
R.SFD==:R.ZER+4 ;FIRST SFD
R.END==:R.SFD+5 ;LAST WORD IN BLOCK
R.LEN==:R.END-R.NXT+1 ;LENGTH OF THE DATA BLOCK
SUBTTL MACROS
DEFINE VERSION<
LOC 137
.JBVER: <BYTE(3)CUSTVR(9)DECVER(6)DECMVR(18)DECEVR>
RELOC
EZCOR=:EZCOR
>
DEFINE SEGMENT<
TWOSEG %HISEG
>
DEFINE U (SYMBOL,LENGTH)<
SYMBOL=.ZZ
IFB <LENGTH>,<.ZZ==.ZZ+1>
IFNB <LENGTH>,<.ZZ==.ZZ+LENGTH>
IFG .ZZ-.TEMP-.TLEN,<PRINTX Too much TEMP space used>
>
DEFINE U2(SYMBOL,LENGTH)< ;;[1264]
SYMBOL=.ZZ ;;[1264]
IFB <LENGTH>,<.ZZ==.ZZ+1> ;;[1264]
IFNB <LENGTH>,<.ZZ==.ZZ+LENGTH> ;;[1264]
IFG .ZZ-.TEMP2-.TLEN,<PRINTX Too much TEMP2 space used> ;;[1264]
> ;;[1264]
;TO CLEAR TEMP SPACE IN EACH MODULE
DEFINE ZAPTMP <
MOVE T1,[.TEMP,,.TEMP+1]
SETZM .TEMP
BLT T1,.TEMP+.TLEN-1
>
DEFINE ZAPTP2 < ;;[1264]
MOVE T1,[.TEMP2,,.TEMP2+1] ;;[1264]
SETZM .TEMP2 ;;[1264]
BLT T1,.TEMP2+.TLEN-1 ;;[1264]
> ;;[1264]
;DEFINE AREAS FOR LOADING INTO
DEFINE AREAS <
XXX (DY) ;DYNAMIC DATA
XXX (LC) ;LOW SEG CODE
XXX (HC) ;HIGH SEG CODE
XXX (AS) ;ALGOL SYMBOLS
XXX (RT) ;RELOCATION TABLE
XXX (LS) ;LOCAL SYMBOLS
XXX (FX) ;FIXUPS
XXX (TP) ;[2270] TYPECHECKING
XXX (BG) ;BOUND GLOBALS
XXX (GS) ;GLOBAL SYMBOLS
>
;MACRO TO MULTIPLEX OUTPUT TO LOG AND TTY
DEFINE OUTVIA (SUBROUTINE)<
PUSHJ P,TTYCHK
PUSHJ P,SUBROUTINE
>
;MACRO TO CLEAR ^O
DEFINE CLEARO<
SKPINC
JFCL
>
;MACRO TO XLIST ERROR TEXT
DEFINE .ASCIZ (TEXT)<
XLIST
ASCIZ \TEXT\
LIST
>
DEFINE SPUSH (AC) <
IRP AC,<
PUSH P,AC
>>
DEFINE SPOP (AC) <
IRP AC,<
POP P,AC
>>
;MACRO TO ENTER DDT IF LOADED AND DEBUG CONDITION IS TRUE
DEFINE .JDDT (MODULE,LABEL,INST)<
IFE DEBSW,<>
IFN DEBSW,<
IRP INST,<
INST
>
PUSHJ P,ENTDDT
.JDDTX (MODULE,LABEL,\<.-LABEL>)
OPDEF CONTINUE [JRSTF @.JBOPC]
>>
DEFINE .JDDTX (MODULE,LABEL,INCREMENT)<
JFCL [ASCIZ \MODULE: LABEL + INCREMENT\]
>
IFN TOPS20,<
OPDEF ADD. [ADDI] ;[1112] IMMEDIATE MODE
OPDEF IOR. [IORI] ;IMMEDIATE MODE
OPDEF ANDCM. [ANDCMI] ;IMMEDIATE MODE
>
IFE TOPS20,<
OPDEF ADD. [ADD] ;[1112] FROM MEMORY
OPDEF IOR. [IOR] ;FROM MEMORY
OPDEF ANDCM. [ANDCM] ;FROM MEMORY
>
;MACRO TO STORE INTO USER CODE
IFE FTOVERLAY,<
OPDEF CSTORE [MOVEM W1,(P3)]
>
IFN FTOVERLAY,<
DEFINE CSTORE,<
XWD CS.LHS##,CS.RHS##
>>
;MACRO TO GENERATE USER LIBRARIES BY DEFAULT
;CALL IS
;MAKLIB LANGUAGE,DEVICE,FILE,EXT,PRJ,PRG,<SFD LIST>
;TO GENERATE THEM PUT ABOVE DEFINITIONS INTO USELIB MACRO
DEFINE USELIB <
>
;DOUBLE AND TRIPLE WORD MOVES
DEFINE TMOVE (AC,M)<
IFL <Z M>-<@>,<
MOVE AC,M
DMOVE AC+1,1+M
>
IFGE <Z M>-<@>,<
MOVEI AC+2,M
DMOVE AC,(AC+2)
MOVE AC+2,2(AC+2)
>>
DEFINE TMOVEM (AC,M)<
MOVEM AC,M
DMOVEM AC+1,1+M
>
IFE FTKIONLY,<
DEFINE DMOVE (AC,M)<
IFL <Z M>-<@>,<
MOVE AC,M
MOVE AC+1,1+M
>
IFGE <Z M>-<@>,<
MOVEI AC+1,M
MOVE AC,(AC+1)
MOVE AC+1,1(AC+1)
>>
DEFINE DMOVEM (AC,M)<
MOVEM AC,M
MOVEM AC+1,1+M
>
>;END IFE FTKIONLY
DEFINE SMOVE (AC,M)<
IFE M,<
TDZA AC,AC
>
IFN M,<
SKIPA AC,[M]
>>
;THESE MACROS TO MOVE WORD PHYSICALLY (BUT NOT LOGICALLY) ADJACENT
;USED INCASE DATA BASE CHANGES
DEFINE DGET (AC,M1,M2)<
IFE <M1>-<M2>+1,<
DMOVE AC,M1
>
IFN <M1>-<M2>+1,<
MOVE AC,M1
MOVE AC+1,M2
>>
DEFINE DSTORE (AC,M1,M2)<
IFE <M1>-<M2>+1,<
DMOVEM AC,M1
>
IFN <M1>-<M2>+1,<
MOVEM AC,M1
MOVEM AC+1,M2
>>
DEFINE TGET (AC,M1,M2,M3)<
IFE <M1>-<M2>+1,<
DMOVE AC,M1
MOVE AC+2,M3
>
IFN <M1>-<M2>+1,<
MOVE AC,M1
DGET AC+1,M2
>>
DEFINE TSTORE (AC,M1,M2,M3)<
IFE <M1>-<M2>+1,<
DMOVEM AC,M1
MOVEM AC+2,M3
>
IFN <M1>-<M2>+1,<
MOVEM AC,M1
DSTORE AC+1,M2
>>
;BLOCK TYPE DISPATCH MACRO
DEFINE LITYPE(F,L)<
IF1,<BLOCK <L-F+2>/2> ;ALLOCATE ENOUGH SPACE
IF2,<
ZZ.==F
ZZH.==<L-F+2>/2
ZZT.==ZZH.+ZZ.
REPEAT ZZH.,<
PTYPE (\ZZT.,\ZZ.)
ZZ.==ZZ.+1
ZZT.==ZZT.+1
>>
DEFINE PTYPE (X,Y)<
IFDEF T.'X,<
IFDEF T.'Y,<
T.'X,,T.'Y
>
IFNDEF T.'Y,<
T.'X,,E$$IRB ;;[1174]
>>
IFNDEF T.'X,<
IFDEF T.'Y,<
E$$IRB,,T.'Y ;;[1174]
>
IFNDEF T.'Y,<
E$$IRB,,E$$IRB ;;[1174]
>>>>
;MACRO TO INITIALIZE REL FILE INPUT IN LNKNEW
DEFINE RELOCATE(SIZE,WHICH),<
;;FIRST, CHECK FOR RELOCATE(NONE), AS IN NAME BLOCK INPUT ETC.
IFIDN <SIZE><NONE>,<
HRLI WC,400000 ;;SO T.REL? WON'T LOOK FOR REL WORDS
SETZ RB, ;;AND IF THEY DO THEY WON'T FIND ANY
>
;;NOT NONE, MUST BE RELOCATION BYTE SIZE. SETUP FOR THAT DATA.
IFDIF <SIZE><NONE>,<
MOVEI T1,SIZE ;;GRAB SPECIFIED SIZE
MOVEM T1,RELSIZ ;;AND STORE FOR T.REL?
PURGE SETUP ;;MAKE SURE UNDEFINED FOR TEST BELOW
IFB <WHICH>,<PRINTX ?ERRONEOUS RELOCATE MACRO>
IFNB <WHICH>,<
IFIDN <WHICH><RIGHT>,<OPDEF SETUP[TRZ FL,R.LHR]>;;LH ABSOLUTE
IFIDN <WHICH><BOTH>,< OPDEF SETUP[TRO FL,R.LHR]>;;LH RELOCATABLE
;;IF THAT WON, USE IT. IF NOT, WE HAVE AN ERROR
IFDEF <SETUP>,< SETUP >
IFNDEF <SETUP>,<PRINTX ?ERRONEOUS RELOCATE MACRO>
>>>
SUBTTL ERROR/LOG MACROS
;.ERR. MACRO GENERATES USUAL CALLS TO ERROR/LOG MODULE. GENERAL FORM IS:
;
; .ERR. (TYP,FLG,VER,LVL,SEV,CODE,TXT)
; .ETC. (TYP,FLG,,,,CODE,TXT)
; ...
;
;TYP TYPE OF ERROR, USED AS DISPATCH, ONE OF:
; MS PRINTS SELF-EXPLANATORY MESSAGE
; LRE LOOKUP/RENAME/ENTER ERROR, I/O CHANNEL ON STACK, PRINTS REASON
; AND FILE
; I INIT/OPEN ERROR, I/O CHANNEL ON STACK, PRINTS DEVICE
; ST I/O ERROR, CHANNEL ON STACK, PRINTS STATUS AND FILE
;FLG LOGICAL 'OR' OF SPECIAL CASE FLAGS, SUCH AS:
; .EP CODE IS POINTER TO ERROR WORD
; .EC ERROR OUTPUT IS CONTINUED (MORE .ETC.'S COMING)
; .EB PRINT BLANK LINE IN LOG AFTER THIS MESSAGE
; .EN .ERR. WITHOUT MESSAGE (JUST CODE)
;VER VERBOSITY LEVEL, ONE OF:
; V%S ONLY PREFIX AVAILABLE (LNKxxx)
; V%M PREFIX AND FIRST LINE AVAILABLE
; V%L PREFIX, FIRST LINE AND LONG EXPLANATION AVAILABLE
;LVL ASSIGNED TYPE-OUT LEVEL (WHETHER TO PRINT)
;SEV ASSIGNED SEVERITY LEVEL (WHETHER [, % OR ?)
;CODE MESSAGE NMEMONIC (THE xxx IN LNKxxx)
;TXT TEXT OF MESSAGE
;
;THE .ERR. CALL (OR THE PUSH P,[CHANNEL] THAT PRECEEDS IT) THAT DEFINES TXT (OR
;THAT USES THE .EN FLAG IN ITS PLACE) SHOULD HAVE THE LABEL E$$xxx::, WHERE xxx
;IS THE CODE ARGUMENT. ALL OTHER .ERR.'S THAT USE THE SAME CODE SHOULD HAVE
;LABELS OF Ennxxx, WHERE nn BEGINS WITH 01 AND INCREASES BY 1 FOR EACH USE.
;REALLY FATAL ERRORS THAT CANNOT USE .ERR. SHOULD USE .OERR. WITH THE SAME
;LABEL CONVENTIONS.
DEFINE .ERR.(TYP,FLG,VER,LVL,SEV,CODE,TXT)<
IFL L%MAX-LVL,<LVL=L%MAX>
%LVL==LVL-.LVL
IFGE %LVL,<
IFL V%MAX-VER,<VER=V%MAX>
IFL S%MAX-SEV,<SEV=S%MAX>
IFNB <TYP>,<
ERRUUO ER%'TYP
>
IFNB <CODE>,<
..PTR==1 ;;[1144] ASSUME POINTER TO MESSAGE
IFNB <TXT>,<..PTR==0> ;;[1144] TEXT SPECIFIED--NO POINTER
IFN <<FLG>&.EN>,<..PTR==0>;;[1144] TEXT EXPLICTLY MISSING--NO POINTER
IFE ..PTR,< ;;[1144] GENERATE TEXT HERE
EXP <FLG>+<VER>B<B%VER>+<SEV>B<B%SEV>+<LVL>B<B%LVL>+<
[
.ER'CODE::ASCIZ \CODE\ ;;[1174]
IFE <<FLG>&.EN>,<ASCIZ \TXT\>
IFN <<FLG>&.EN>,<0> ;;[1174] NULL TEXT
]
>
>
IFN ..PTR,< ;;[1144] GENERATE POINTER TO MESSAGE
IF2,<
IFNDEF .ER'CODE,<EXTERN .ER'CODE>
>
EXP <FLG>+<VER>B<B%VER>+<SEV>B<B%SEV>+<LVL>B<B%LVL>+<.ER'CODE>
>
PURGE ..PTR ;;[1144]
>
IFB <CODE>,<
EXP <FLG>+<VER>B<B%VER>+<SEV>B<B%SEV>+<LVL>B<B%LVL>+<[ ASCIZ \TXT\]>
>
>
>
IFE TOPS20,<
SYN OUTSTR,.OERR. ;[1174] USED FOR MESSAGES LNKLOG CAN'T HANDLE
OPDEF .XERR. [OUTSTR (T1)] ;[1301] USED AT END OF LNKXIT
> ;END IFE TOPS20
IFN TOPS20,<
DEFINE .OERR.(TEXT)<
HRROI 1,TEXT;; ;[1202] SAME AS OUTSTR DEF BELOW
PSOUT%
>
OPDEF .XERR. [PSOUT%] ;[1301] USED AT END OF LNKXIT
DEFINE ERNAM(JNAME),< ;[2304]
IF1,<IFB <JNAME>,<PRINTX %Missing JSYS name in ERNAM macro call>>
IF2,<IFNDEF E$$UMF,<EXTERNAL E$$UMF>> ;[2304]
ERCAL [MOVX P2,SIXBIT\JNAME\ ;[2304]
PJRST E$$UMF]> ;[2304]
> ;END IFN TOPS20
;CONTINUED ERROR WORDS HAVE SIMILAR FORM. DIFFERENCES ARE:
;TYP INTERNALLY STORED IN LVL FIELD, ONE OF:
; STR ASCII STRING, TXT IS MESSAGE, OR CODE IS ADDRESS OF IT
; SBX CODE IS ADDRESS OF SIXBIT WORD
; OCT CODE IS ADDRESS OF OCTAL WORD
; DEC CODE IS ADDRESS OF DECIMAL WORD
; FSP CODE IS I/O CHANNEL, PRINT THE FILE SPEC
; ASC CODE IS ADDRESS OF ASCII CHARACTER
; COR CODE IS ADDRESS OF CORE SIZE, PRINT nK OR nP
; JMP CODE IS ADDRESS OF NEW LIST OF .ETC.'S
; RTN RETURN FROM PREVIOUS JMP
; NLN PRINT A NEW LINE WITH CORRECT INDENTATION
; XCT CODE IS ADDRESS OF INSTRUCTION TO XCT, SKIP ALLOWED
; BKL PRINT A BLANK IN THE LOG FILE ONLY, AND ONLY IF REAL LOG FILE
; DAT PRINT TODAY'S DATE
; NOP NO OPERATION (GOOD FOR JMPING TO)
;VER BLANK
;LVL BLANK
;SEV BLANK
;CODE SET UP ACCORDING TO TYPE ABOVE
;TXT BLANK, OR ASCII TEXT IF .EP NOT SPECIFIED AND TYP = STR
DEFINE .ETC.(TYP,FLG,VER,LVL,SEV,CODE,TXT)< ;;[1174]
IFGE %LVL,<
IFNB <CODE>,<
EXP <FLG>+<ET%'TYP>B<B%LVL>+<CODE>
>
IFB <CODE>,<
IFIDN <TYP><STR>,< ;;[1174]
EXP <FLG>+<ET%'TYP>B<B%LVL>+<[ ASCIZ \TXT\]>
>
IFDIF <TYP><STR>,< ;;[1174]
EXP <FLG>+<ET%'TYP>B<B%LVL>
>>
>
>
;DEFINE ALL MAIN ERROR TYPES
DEFINE ERRTYPE <
XXX (MS);; ASCII MESSAGE
XXX (LRE);; LOOKUP/RENAME/ENTER ERROR
XXX (I);; INIT/OPEN ERROR
XXX (ST);; STATUS ERROR
>
DEFINE XXX (TYPE) <
ER%'TYPE==:ZZ
ZZ==ZZ+1
>
ZZ==0
ERRTYPE
;DEFINE ALL CONTINUATION ERROR TYPES
DEFINE ETCTYPE <
XXX (STR);; ASCIZ STRING
XXX (SBX);; SIXBIT WORD
XXX (OCT);; OCTAL WORD
XXX (DEC);; DECIMAL WORD
XXX (FSP);; FILE SPEC
XXX (ASC);; ASCII CHARACTER
XXX (COR);; CORE SIZE (K OR P)
XXX (JMP);; GOTO ADDRESS
XXX (RTN);;[1174] RETURN FROM LAST JMP
XXX (NLN);;[1174] NEW LINE
XXX (XCT);;[1174] XCT AN INSTRUCTION
XXX (BKL);;[1174] BLANK LINE IN LOG FILE (OLD .EB FLAG)
XXX (DAT);;[1174] PRINT TODAY'S DATE
XXX (NOP);;[1174] NO OPERATION
IFN .NWBLK,<
XXX (LSP);; LS AREA POINTER (TO A TRIPLET)
> ;END IFN .NWBLK
>
DEFINE XXX (TYPE)<
ET%'TYPE==:ZZ
ZZ==ZZ+1
>
ZZ==0
ETCTYPE
PURGE XXX,ZZ
;DEFINE SPECIAL VALUES USED IN .ERR. AND .ETC. MACROS
; 0 5 67 8 12 13 17 18 35
; !-------------------------------------------------------!
; ! Flags !VB!SEVERE!LOG LVL ! ADDRESS OF ARGUMENT !
; !-------------------------------------------------------!
;FLAGS
.EP==1B0 ;[1144] WORD IS A POINTER, **MUST** BE SIGN BIT
.EC==1B1 ;[1144] WORD IS CONTINUED
.EN==1B2 ;[1174] .ERR. WITHOUT MESSAGE (JUST CODE)
;BIT POSITIONS
B%VER==:^D7 ;[1144] VERBOSITY FIELD
B%SEV==:^D12 ;[1144] SEVERITY FIELD
B%LVL==:^D17 ;LEVEL FIELD
;MAXIMUM VALUES
V%MAX==:3 ;[1144] VERBOSITY FIELD
S%MAX==:37 ;[1144] SEVERITY FIELD
L%MAX==:37 ;[1144] LEVEL FIELD
;FIELD POSITIONS
F%VER==:<V%MAX>B<B%VER> ;[1144] VERBOSITY FIELD
F%SEV==:<S%MAX>B<B%SEV> ;[1144] SEVERITY FIELD
F%LVL==:<L%MAX>B<B%LVL> ;[1144] LEVEL FIELD
;VERBOSITY
V%S==:1 ;SHORT (CODE ONLY)
V%M==:2 ;MEDIUM (ONE LINE)
V%L==:3 ;LONG (MUCH MORE)
;MESSAGE TYPES [1301]
M%P==:JWW.PR ;[1301] PREFIX (CODE)
M%F==:JWW.FL ;[1301] FIRST LINE
M%C==:JWW.CN ;[1301] CONTINUATION
;SEVERITY
S%D==:0 ;[2005] DEFERRED (SEVERITY DEPENDS ON
;[2005] LOOKUP/ENTER CODE OR VALUE ON STACK)
S%I==:1 ;INFORMATION ONLY
S%W==:^D8 ;WARNING (NOT FATAL)
S%B==:^D16 ;FATAL IN BATCH MODE
S%E==:^D24 ;FATAL UNLESS EDITED
S%C==:^D28 ;[1174] FATAL (?) BUT CONTINUE ANYWAY
S%F==:37 ;ALWAYS FATAL
;LOG LEVEL CUTOFF
L%D==:0 ;[1174] DEFERRED (LEVEL DEPENDS ON LOOKUP/ENTER CODE)
L%I==:1 ;INFORMATION ONLY
L%W==:^D8 ;WARNING (NOT FATAL)
L%F==:37 ;ALWAYS VISIBLE
DEFINE LEVELS (ITEM,LEVEL)<
IRPC LEVEL,<
ITEM'%I'LEVEL==:ITEM'%I+LEVEL
>>
LEVELS S,<1234567>
LEVELS L,<1234567>
%ENT==1B0 ;ENTER ERROR
%LKP==1B1 ;LOOKUP ERROR
%REN==1B2 ;RENAME ERROR
SUBTTL SWITCH MACROS
;SWTCHS MACRO CONTAINS ALL KNOW SWITCHES
;IT IS EXPANDED IN VARIOUS PLACES (LNKSCN, LNKWLD)
;FORM IS SWMAC A,B,C,D,E,F,G,H,I
;WHERE
;SWMAC IS A MACRO REDINED ON EACH CALL TO SWTCHS
;A IS A MACRO KNOWN TO SCNMAC (SL, SP, OR SS)
;B IS THE SWITCH NAME IN SIXBIT
;C IS STORAGE (NULL UNLESS MULTIPLE WORD) GENERATES A TOKEN#
;D IS PROCESSOR REQUIRED (SP)
; OR KEY WORD LIST (SL)
; OR VALUE (SS)
;E IS ABBREVIATION FOR DEFAULT VALUES (SP)
; OR DEFAULT KEY VALUE (SL)
; OR NULL (SS)
;F IS SIZE OF BLOCK REQUIRED TO STORE SWITCH (SINGLE OCCURANCE)
;G IS "." IF SWITCH ACTION IS DIFFERENT IF SEEN BEFORE FILE NAME
; THAN IF SEEN AFTER FILE NAME, NULL IF NOT
;H IS "*" IF SWITCH WILL ALWAYS BE UNIQUE TO ONE CHARACTER
;I IS DISPATCH IF SWITCH HAS TWO VALUES
; I.E. /SWITCH:SYMBOL:VALUE
;THE SWITCHES NEED NOT BE IN ALPHABETICAL ORDER
;TO ADD A NEW ONE JUST PUT IN TABLE
;AND DEFINE ALL SYMBOLS REQUIRED BY SWTCHS EXPANSION
DEFINE SWTCHS<
SWMAC SP,ARSIZE,,.SWDEC,ARS,3;; ;[635] MAKE AR TABLE BIGGER
SWMAC SP,BACKSPACE,,.SWDEC,MTP,3,.
SWMAC SP,COMMON,,.SWSYM,SYM,4,.,,.DECNW
SWMAC SL,CONTENT,,CONK,1,3
SWMAC SS,COUNTER,,0,,3,.
SWMAC SL,CPU,,CPUK,1,3;; ;[1240] PUT SWITCH OUTSIDE TOPS-20 CONDITIONAL
SWMAC SS,CRLF,,0,,3,.;; ;REMEMBER EOL'S IN ASCII TEXT
SWMAC SL,DDEBUG,,DEBK,1,3
SWMAC SL,DEBUG,,DEBK,1,3,.,*
SWMAC SL,DEFAULT,,DEFK,1,3,.
SWMAC SP,DEFINE,,.SWSYM,SYM,4,,,.DECNW
SWMAC SS,ENTRY,,0,,3,.
SWMAC SP,ERRORLEVEL,,.SWDEC,ERR,3
SWMAC SP,EXCLUDE,,.SWSYM,SYM,3,.
SWMAC SS,EXECUTE,,0,,3,,*
SWMAC SP,FRECOR,,.SWDEC,FRC,3
SWMAC SS,GO,,0,,3,,*
SWMAC SP,HASHSIZE,,.SWDEC,HAS,3
SWMAC SP,INCLUDE,,.SWSYM,SYM,3,.
SWMAC SS,K,,0,,3,,*
SWMAC SP,LIMIT,,.SWSYM,SYM,4,.,,.SYOSW ;;[1300] ADD /LIMIT SWITCH
SWMAC SP,LINK,,.SWSIX,SYM,3
SWMAC SS,LOCALS,,0,,3,.,*
SWMAC SS,LOG,,0,,3
SWMAC SP,LOGLEVEL,,.SWDEC,LOG,3
SWMAC SL,MAP,,MAPK,1,3,,*
SWMAC SP,MAXNODE,,.SWDEC,MAX,3
SWMAC SS,MISSING,,0,,3,.;; ;FOR INCLUDES NOT SATISFIED
SWMAC SL,MPSORT,,MPSK,1,3
SWMAC SL,MTAPE,,MTPK,1,3,.
SWMAC SL,NEWPAGE,,HYLK,1,3,.
SWMAC SP,NODE,,.SWSXD,SYM,3
SWMAC SP,NOENTRY,,.SWSYM,SYM,3,.
SWMAC SS,NOINCLUDE,,0,,3,.;; ;[1117] TURN OFF STICKY /INCLUDE
SWMAC SS,NOINITIAL,,0,,3
IFN TOPS20,< ;[2366]
SWMAC SS,NOJOBDAT,,0,,3 ;[2211] DON'T LOAD JOBDAT INTO HI OR LOSEG
>;;[2366] IFN TOPS20
SWMAC SS,NOLOCAL,,0,,3,.,*
SWMAC SP,NOREQUESTS,,.SWSYM,SYM,3,. ;;[1222] ALLOW RADIX-50
SWMAC SS,NOSEARCH,,0,,3,.
SWMAC SS,NOSTART,,0,,3,.
SWMAC SS,NOSYMBOL,,0,,3
SWMAC SL,NOSYSLIBRARY,,LIBK,1,3
SWMAC SL,NOUSERLIBRARY,,LIBK,1,3
SWMAC SL,ONLY,,ONLK,1,3,.
SWMAC SL,OTSEGMENT,,OTSK,1,3
SWMAC SL,OVERLAY,,OVLK,1,3,.
SWMAC SP,PATCHSIZE,,.SWDEC,PAT,3
SWMAC SL,PLOT,,PLTK,1,4,,,.DECNW
SWMAC SL,PLTTYP,,PTPK,1,3 ;;[2002] SET PLOTTER TYPE
SWMAC SP,PSCOMMON,,.SWSYM,SYM,4,.,,.SWSYM ;[2227]
IFN TOPS20,<
SWMAC SL,PVBLOCK,,SSGK,5,4,,,.SWSYM ;[2220]
SWMAC SL,PVDATA,,PDVK,,4,,,.SWPDV ;[2306]
> ;[1423]
SWMAC SP,REDIRECT,,.SWSYM,SYM,4,.,,.SWSYM ;[2223]
SWMAC SS,REQUEST,,0,,3,.
SWMAC SP,REQUIRE,,.SWSYM,SYM,3
SWMAC SS,REWIND,,0,,3,.
SWMAC SP,RUNAME,,.SWSIX,SYM,3
SWMAC SS,SAVE,,0,,3
SWMAC SS,SEARCH,,0,,3,.,*
SWMAC SL,SEGMENT,,SEGK,1,3,.
SWMAC SP,SEVERITY,,.SWDEC,SEV,3 ;;[1223] MAKE ARGUMENT DECIMAL
SWMAC SP,SET,,.SWSYM,SYM,4,.,,.SYOSW
SWMAC SP,SKIP,,.SWDEC,MTP,3,.
SWMAC SP,SPACE,,.SWDEC,SPA,3
SWMAC SP,START,,.SWSYO,STA,3,.
SWMAC SP,SUPPRESS,,.SWSYM,SYM,3 ;;[1307] ADD SUPPRESS SWITCH
SWMAC SL,SYFILE,,SYMK,1,3
SWMAC SL,SYMSEG,,SSGK,1,4,.,,.SWSYM ;[1260]
SWMAC SL,SYSLIBRARY,,LIBK,1,3,.
SWMAC SL,SYSORT,,SYSK,1,3
SWMAC SL,TEST,,DEBK,1,3,.,*
SWMAC SS,UNDEFINED,,0,,3,.,*
SWMAC SS,UNLOAD,,0,,3
SWMAC SP,UPTO,,.SYOSW,UPT,3 ;[723]
SWMAC SL,USERLIBRARY,,LIBK,1,3
SWMAC SP,VALUE,,.SWSYM,SYM,3,.
SWMAC SL,VERBOSITY,,VERK,2,3
SWMAC SP,VERSION,,.SWVER,SYM,3,.,* ;;[1177]
IFE TOPS20,<
SWMAC SP,CORE,2,.SWDPK,COR,4
SWMAC SP,ESTIMATE,,.SWDEC,EST,3
SWMAC SP,MAXCOR,2,.SWDPK,COR,4
SWMAC SP,RESET,,.SWSXD,SYM,3
SWMAC SP,RUNCOR,2,.SWDPK,COR,4
SWMAC SS,SSAVE,,0,,3
SWMAC SS,XPN,,0,,3
SWMAC SS,ZERO,,0,,3
>
>
COMMENT \SWITCHES HANDLED DIRECTLY BY SCAN
ABEFORE
ASINCE
BEFORE
DENSITY
ERNONE
ERPROTECTION
ERSUPERSEDE
ESTIMATE
*HELP
LENGTH
MESSAGE
NOOPTION
NOPHYSICAL
NOSTRS
OKNONE
OKPROTECTION
OKSUPERSEDE
OPTION
PARITY
PHYSICAL
PROTECTION
RUN
RUNCORE
RUNOFFSET
SINCE
STRS
VERSION
\
SUBTTL DEFAULT VALUES
;.C==^D256*2000-1 ;ALL OF CORE
.C==^D128*2000-1 ;SCAN CANNOT HANDLE BIT 18 ON
.NULARG==,,-1 ;SCAN BARFS ON 0
;*** NOTE **** SCAN CANNOT HANDLE MAXIMUM SIZE GREATER THAN 377777
DM ARS,.C,.ARS,.ARS ;[635]
DM COR,.C,0,0
DM ERR,L%MAX,0,L%W ;[2271]
DM EST,<<.C+1>_-8>,0,0
DM HAS,^D13001,^D101,^D101
DM LOG,L%MAX,0,0 ;[2271]
DM MAX,.C,0,0 ;[1424]
DM MTP,.C,1,1
DM PAT,.C,PATSP.,PATSP.
DM SAV,.C,0,.NULARG
DM SEV,S%MAX,0,S%W ;[2271]
DM SPA,.C,.SPA,.SPA
DM STA,.C,0,.C
DM SYM,.C,0,0
DM VER,V%MAX,0,0
DM FRC,.C,4000,4000
DM SPC,.C,.SPA,.SPA
DM UPT,.C,0,.NULARG
SUBTTL KEY WORDS
;NOTE - CON ARGS ARE PAIRS AS <FLAG,NOFLAG>
; EXCEPT FOR <DEFAULT> , ORDER MUST BE <DEFAULT,ALL,NONE>
;NOTE - DEBUG ARGS ARE REALLY PAIRS AS <COMPILER,DEBUG AID>
DEFINE KEYWORDS<
KEYMAC CON,<DEFAULT,ALL,NONE,GLOBAL,NOGLOBAL,LOCALS,NOLOCAL,ENTRY,NOENTRY
,UNDEFINED,NOUNDEFINED,RELOCATABLE,NORELOCATABLE,ABSOLUTE,NOABSOLUTE,COMMON,NOCOMMON
,ZERO,NOZERO>
KEYMAC CPU,<KA10,KI10,KL10,KS10> ;[1236] ADD KS10
KEYMAC DEB,<,MACRO,DDT,*FORTRAN,FORDDT,*COBOL,COBDDT,SAIL,SDDT
,FAIL,SDDT,SIMULA,SIMDDT,ALGOL,ALGDDT,*PASCAL,PASDDT> ;[2036]
KEYMAC DEF,<INPUT,OUTPUT>
KEYMAC HYL,<LOW,HIGH>
KEYMAC LIB,<ANY,F40,COBOL,ALGOL,NELIAC,PL1,BLISS,SAIL,*FORTRAN,MACRO
,FAIL,BCPL,MIDAS,SIMULA,CBL74,CBL79,BLS36,BASIC,SITGO,FORTRAN,*PASCAL
,JOVIAL,ADA,C> ;;[2344]
KEYMAC MAP,<END,NOW,ERROR,INCREMENTAL>
KEYMAC MPS,<UNSORTED,ALPHABETICAL,NUMERICAL>
KEYMAC MTP,<MTWAT.,MTREW.,MTEOF.,MTSKR.,MTBSR.,MTEOT.
,MTUNL.,MTBLK.,MTSKF.,MTBSF.,MTDEC.,MTIND.>
KEYMAC ONL,<BOTH,LOW,HIGH>
KEYMAC OTS,<DEFAULT,NONSHARABLE,SHARABLE,LOW,HIGH>
KEYMAC OVL,<DEFAULT,ABSOLUTE,RELOCATABLE,TREE,NETWORK,PURE,WRITABLE
,PATH,NOPATH,SINGLE,MULTIPLE,LOGFILE,NOLOGFILE,WARNING,NOWARNING>
KEYMAC PLT,<INCHES,LEAVES,STEPS>
KEYMAC PTP,<DEFAULT,PLOTTER,PRINTER> ;[2002]
KEYMAC PDV,<NAME,VERSION,START,MEMORY,PROGRAM,CBLOCK,EXPORT> ;[2306]
KEYMAC SEG,<LOW,HIGH,DEFAULT,NONE> ;[1201]
KEYMAC SSG,<LOW,HIGH,NONE,PSECT,DEFAULT> ;[1201] LOW & HIGH MUST BE FIRST 2
KEYMAC SYM,<RADIX50,TRIPLET,ALGOL>; ;;ADD ALGOL KEYWORD
KEYMAC SYS,<UNSORTED,ALPHABETICAL,NUMERICAL>
KEYMAC VER,<SHORT,MEDIUM,LONG>
>
SUBTTL PRE-DEFINED KEYWORDS
DEFINE KEYMAC (A,B)<
IFIDN <A><CPU>,<
%%==1B35
IRP B,<
$'A'B==:%%
%%==%%_1
>>>
KEYWORDS
DEFINE KEYMAC (A,B)<
IFIDN <A><SSG>,<
%%==1
IRP B,<
$'A'B==:%%
%%==%%+1
>>>
KEYWORDS
DEFINE KEYMAC (A,B)<
IFIDN <A><PDV>,<
%%==1
IRP B,<
$'A'B==:%%
%%==%%+1
>>>
KEYWORDS
DEFINE KEYMAC(A,B)< ;;[1230] DEFINE $SYM?? SYMBOLS
IFIDN <A><SYM>,<
%%==1
IRP B,<
IFIDN <B><RADIX50>,<
$'A'B==:-1
>
IFDIF <B><RADIX50>,<
$'A'B==:%%
%%==%%+1
>
>
>
>
KEYWORDS ;[1230] DEFINE $SYM?? SYMBOLS
DEFINE KEYMAC (A,B)< ;;[2002] DEFINE $PTPDE,
IFIDN <A><PTP>,< ;;[2002] $PTPPL,
%%==1 ;;[2002] $PTPPR
IRP B,< ;;[2002]
$'A'B==:%% ;;[2002]
%%==%%+1 ;;[2002]
>>> ;;[2002]
KEYWORDS ;;[2002]
SUBTTL LIBRARY SETTING BITS
;THIS SETS MORE BITS THAN ACTUALLY EXIST BUT ONLY THE REQUIRED ONES
;ARE USED
DEFINE X (A,B,C,D)< ;;[1225] ACCOUNT FOR NEW ARG
IFIDN <B><UNK>,<
$LIBDEFAULT==UNKBIT
>
$LIB'B==B'BIT
>
PROCESSORS
SUBTTL MAP FORMAT AND CONTENTS
DEFINE KEYMAC (A,B)<
IFIDN <A><CON>,<
C%BIT==1B0
%%==0
IRP B,<
IFN %%&1,<
C%'B==:C%BIT
C%ALL==:C%ALL!C%BIT
C%BIT==C%BIT_-1
IFE C%BIT,<PRINTX TOO MANY MAP CONTENT KEY WORDS>
>
%%==%%+1
>>>
KEYWORDS
C%DEFAULT==:C%GLOBAL!C%ENTRY!C%RELOC!C%ABSOL!C%COMMON
PURGE KEYMAC,C%BIT,%%
DEFINE KEYMAC (A,B)<
IFIDN <A><MAP>,<
%%==0
IRP B,<
IFIDN <B><INCREMENTAL>,<
$'A'B==:-1
>
IFDIF <B><INCREMENTAL>,<
$'A'B==:<%%==%%+1>
>
>>>
KEYWORDS
PURGE KEYMAC,%%
SUBTTL OVERLAY TYPE KEY WORDS
DEFINE KEYMAC (A,B)<
IFIDN <A><OVL>,<
%%==1B35
IRP B,<
$OV'B==%%
IFN <%%==%%_1>&<-1,,0>,<PRINTX TOO MANY OVERLAY TYPES>
>>>
KEYWORDS
$OVDEFAULT==$OVABSOLUTE!$OVTREE!$OVPURE!$OVSINGLE
PURGE KEYMAC,%%
SUBTTL TOPS-20 PDV AND OTHER DEFINITIONS
IFN TOPS20,<
DEFINE OUTSTR (TEXT)<
HRROI 1,TEXT
PSOUT%
>
DEFINE OUTCHR (ACC)<
IFN ACC-1,<
HRRZ 1,ACC
>
PBOUT%
>
SUBTTL PDV SUPPORT
PV.LEN==16 ;[1423] ALLOCATED LENGTH OF PDV
PV.SPR==2 ;[1423] EXTRA STORAGE ASSOCIATED W/PDV
> ;[2366] IFN TOPS20
;[2246] REMOVE THE FOLLOWING DEFINITIONS ONCE THEY'RE IN MONSYM
SV.LEN==7 ;[2246] CURRENT SYMBOL TABLE VECTOR MAX LEN
SV.SLN==3 ;[2246] SYMBOL TABLE VECTOR SUBTABLE LENGTH
MM.SLN==3 ;[2246] MEMORY MAP SUB-TABLE LENGTH
;[2237] Memory map table indexes
.MMLEN==0 ;[2245] INDEX INTO MAP FOR TABLE LENGTH WORD
.MMDAT==0 ;[2245] INDEX INTO SUB-TABLE FOR BITS,,LENGTH
.MMLOW==1 ;[2245] LOWEST ADDR. OF BLOCK
.MMHGH==2 ;[2245] HIGHEST ADDR. OF BLOCK
ST%TYP==77B5 ;[2245] SYMBOL TABLE VECTOR TYPE FIELD
.R50D==1 ;[2245] DEFINED RADIX-50 SYMBOL TABLE TYPE
.R50U==2 ;[2245] UNDEFINED RADIX-50 SYMBOL TABLE TYPE
;[1754] THE DEFINITIONS FOLLOWING ARE ADDED FOR EXTENDED SYMBOL SUPPORT
;SYMBOL DEFINITIONS:
PL.IL==400000 ;PSECT INDEX LOW VALUE
PL.IH==777777 ;PSECT INDEX HIGH VALUE
PL.OL==100 ;POLISH OPERATOR LOW VALUE
PL.OH==121 ;POLISH OPERATOR HIGH VALUE
PL.SL==700 ;POLISH STORE OPERATOR LOW VALUE
PL.SH==777 ;POLISH STORE OPERATOR HIGH VALUE
PL.SRH==777 ;RELOCATABLE ADDR FIXUP
PL.SRL==770
PL.SAH==767 ;ABSOLUTE ADDR FIXUP
PL.SAL==760
PL.SSH==757 ;SYMBOL FIXUP
PL.SSL==750
PL.SNH==747 ;NOT DEFINED
PL.SNL==700
PL.ABH==0 ;[2212] Absolute halfword
PL.ABF==1000 ;[2212] Absolute fullword
PL.RLH==1 ;[2212] Relocatable halfword
PL.RLF==1001 ;[2212] Relocatable fullword
PL.SYM==10 ;[2212] Symbol
PL.NEW==500000 ;[2212] New-style operator
PL.NSO==510000 ;[2212] New-style store operator
PL.NMX==770000 ;[2212] New style operator bits
;[2212] New style store operator offsets
PL.NS=51 ;[2212] Lowest number assigned to store
PL.NSH==51-4 ;[2212] Halfword address store
PL.NSF==55-4 ;[2212] Fullword address store
PL.NSS==61-4 ;[2212] Symbol store
;BIT DEFINITIONS:
LENGTH==777000 ;[2212] Length field mask
S.ADR==20 ;[2212] Store operator contains address
S.REL==10 ;[2212] Store operator is relocatable
END