18.08.2013 Views

OS 2200 Collector Programming Reference Manual - Public Support ...

OS 2200 Collector Programming Reference Manual - Public Support ...

OS 2200 Collector Programming Reference Manual - Public Support ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ClearPath <strong>OS</strong> <strong>2200</strong><br />

<strong>Collector</strong> <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

February 2011 7830 9887–001<br />

unisys<br />

imagine it. done.


NO WARRANTIES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT. Any product or related information<br />

described herein is only furnished pursuant and subject to the terms and conditions of a duly executed agreement to<br />

purchase or lease equipment or to license software. The only warranties made by Unisys, if any, with respect to the<br />

products described in this document are set forth in such agreement. Unisys cannot accept any financial or other<br />

responsibility that may be the result of your use of the information in this document or software material, including<br />

direct, special, or consequential damages.<br />

You should be very careful to ensure that the use of this information and/or software material complies with the laws,<br />

rules, and regulations of the jurisdictions with respect to which it is used.<br />

The information contained herein is subject to change without notice. Revisions may be issued to advise of such<br />

changes and/or additions.<br />

Notice to U.S. Government End Users: This is commercial computer software or hardware documentation developed at<br />

private expense. Use, reproduction, or disclosure by the Government is subject to the terms of Unisys standard<br />

commercial license for the products, and where applicable, the restricted/limited rights provisions of the contract data<br />

rights clauses.<br />

Unisys and ClearPath are registered trademarks of Unisys Corporation in the United States and other countries.<br />

All other brands and products referenced in this document are acknowledged to be the trademarks or registered<br />

trademarks of their respective holders.


Contents<br />

Section 1. Introduction<br />

Section 2. Using the <strong>Collector</strong><br />

2.1. <strong>Collector</strong> Input .......................................................................... 2–1<br />

2.1.1. <strong>Collector</strong> Language Conventions .................................... 2–3<br />

2.1.2. Files ................................................................................. 2–4<br />

2.2. <strong>Collector</strong> Output ....................................................................... 2–4<br />

2.2.1. <strong>Collector</strong>-Produced Relocatable Elements ...................... 2–4<br />

2.2.2. <strong>Collector</strong>-Produced Absolute Output .............................. 2–5<br />

2.2.3. Listing .............................................................................. 2–5<br />

2.3. @MAP-<strong>Collector</strong> Initiation and Termination ............................. 2–7<br />

Section 3. Inclusion and Exclusion of Elements<br />

Section 4. Banking<br />

3.1. Explicit Inclusion and Exclusion ............................................... 3–1<br />

3.1.1. IN - Element Inclusion ..................................................... 3–1<br />

3.1.2. FRSTIN - First Element Included ..................................... 3–3<br />

3.1.3. FORM - Source Language Structure Duplication ............ 3–3<br />

3.1.4. NOT - Element Exclusion ................................................ 3–4<br />

3.1.5. CLASS - Element Selection Determination<br />

through Version Names .............................................. 3–6<br />

3.2. Implicit Inclusion-File Searching ............................................... 3–8<br />

3.2.1. LIB-File Searching............................................................ 3–8<br />

3.2.2. RLIB - File Searching ..................................................... 3–10<br />

3.2.3. DLIB - Directed LIB for the Default Libraries ................ 3–10<br />

3.2.4. Sequence of File Searching ........................................... 3–10<br />

3.2.4.1. System Library Searching ..................................... 3–11<br />

3.2.4.2. Altering the Search Sequence - INFO Group<br />

12 Keywords .................................................... 3–12<br />

3.2.4.3. Determining the Search Sequence Used ............. 3–14<br />

3.2.4.4. Searching User-Specified Search Files ................. 3–16<br />

3.2.5. @PREP of Library Files .................................................. 3–17<br />

4.1. Introduction .............................................................................. 4–1<br />

4.2. Banking Directives ................................................................... 4–1<br />

4.2.1. IBANK, DBANK — Bank Structuring ............................... 4–1<br />

4.2.2. BANKINFO — Specifying Bank Attributes ...................... 4–6<br />

4.2.3. $Ics — Location Counter Set Specification ................... 4–10<br />

4.2.4. INFO Group 3 ................................................................ 4–12<br />

7830 9887–001 iii


Contents<br />

4.3. Bank-Implied Collections ........................................................ 4–12<br />

4.4. Bank-Named Collections ........................................................ 4–13<br />

4.4.1. Bank Address Assignments ........................................... 4–13<br />

4.4.2. Initially Based Banks ...................................................... 4–14<br />

4.4.3. The Control Bank ........................................................... 4–14<br />

4.4.4. Element Inclusion .......................................................... 4–15<br />

4.4.4.1. Global Elements .................................................... 4–16<br />

4.4.4.2. Local Elements ...................................................... 4–16<br />

4.4.4.3. Local-Global Conflicts ............................................ 4–18<br />

4.4.5. Element Placement ........................................................ 4–18<br />

4.5. Bank Switching for Basic Mode ............................................. 4–20<br />

4.5.1. IBJ$/DBJ$ ...................................................................... 4–20<br />

4.5.2. BBJ$ ............................................................................... 4–21<br />

4.5.3. Use of MAPBDR$ .......................................................... 4–21<br />

4.5.4. Use of the BDI with IBJ$/DBJ$/BBJ$ ........................... 4–22<br />

4.5.5. TYPE IBJLNK and BDICALL$/IBJ$ ................................ 4–23<br />

4.5.5.1. Using BDICALL$ and IBJ$ .................................... 4–23<br />

4.5.5.2. System-Provided Procedures ................................ 4–23<br />

4.5.5.3. Using TYPE IBJLNK............................................... 4–24<br />

4.5.5.4. Resolution of BDICALL$, IBJ$, and TYPE<br />

IBJLNK .............................................................. 4–24<br />

4.5.6. BDICALL$/IBJ$ Return .................................................. 4–25<br />

4.6. Bank Switching for Extended Mode ....................................... 4–26<br />

4.6.1. Use of the BDI ............................................................... 4–26<br />

4.6.2. Example Using LOCL and CALL .................................... 4–27<br />

4.7. BDI and Entry-Point Definitions .............................................. 4–28<br />

4.8. Use of BANKINFO AFCB ........................................................ 4–30<br />

4.9. MAPCALL$, MAPGOTO$, and the VECTOR Attribute .......... 4–35<br />

4.9.1. MAPCALL$ .................................................................... 4–35<br />

4.9.2. MAPGOTO$ ................................................................... 4–36<br />

4.9.3. MAP$CALLGOTO .......................................................... 4–36<br />

4.10. Link Vector Processing ........................................................... 4–38<br />

Section 5. Program Parameter Specification<br />

5.1. TYPE Directive .......................................................................... 5–1<br />

5.2. Absolute Element Arithmetic Fault Mode<br />

Determination ....................................................................... 5–5<br />

5.3. Exec Action Produced by Absolute Element ............................ 5–6<br />

5.4. Third- and Quarter-Word Sensitivity ......................................... 5–6<br />

Section 6. Other Directives<br />

6.1. COR — Corrections .................................................................. 6–1<br />

6.2. DEF — External Definition Retention ....................................... 6–3<br />

6.3. END — End of Input ................................................................. 6–4<br />

6.4. ENT — Starting Address Redefinition ...................................... 6–4<br />

6.5. EQU — External <strong>Reference</strong> Definition ..................................... 6–5<br />

6.6. LEVEL — Specifying the Bank Descriptor Table (BDT)<br />

Level ..................................................................................... 6–5<br />

6.7. MINGAP, MINSIZ — Absolute Element Optimization.............. 6–7<br />

iv 7830 9887–001


Contents<br />

6.8. REF — External <strong>Reference</strong> Retention ................................... 6–10<br />

6.9. SNAP — Snapshot Dumps .................................................... 6–11<br />

6.10. WINDOW — Creation of 4K Windows .................................. 6–14<br />

Section 7. <strong>Collector</strong>-Defined Symbols<br />

Section 8. Efficient Use of the <strong>Collector</strong><br />

8.1. Introduction .............................................................................. 8–1<br />

8.2. Use of the IN Directive ............................................................ 8–1<br />

8.3. @PREP of TPF$ ........................................................................ 8–1<br />

8.4. Relocatable Element Structure ................................................ 8–1<br />

8.5. Use of the Location Counter .................................................... 8–5<br />

8.6. Use of the C Option ................................................................. 8–5<br />

Appendix A. TYPE EXEC Collections<br />

A.1. TYPE EXEC .............................................................................. A–1<br />

A.2. XSEG — Executive Function Arrangement .............................. A–1<br />

A.3. FIRSTBDI.................................................................................. A–3<br />

A.4. BDICALL$, BDIREF$, LBDI$, LBDICALL$, and<br />

LBDIREF$ ............................................................................ A–4<br />

Appendix B. Collection Examples<br />

B.1. Bank-Implied and Bank-Named Collections ............................. B–1<br />

B.1.1. Bank-Implied Collection ................................................... B–1<br />

B.1.2. Bank-Named Collection ................................................... B–2<br />

B.2. Bank-Implied Segmentation ..................................................... B–3<br />

B.3. Bank-Named Segmentation ..................................................... B–7<br />

Appendix C. Processing Element Preambles<br />

Appendix D. Restrictions<br />

C.1. Introduction .............................................................................. C–1<br />

C.2. INFO Groups ............................................................................ C–1<br />

D.1. 262K Banks .............................................................................. D–1<br />

D.2. 65K Location Counters ............................................................. D–1<br />

D.3. Relocation Order ...................................................................... D–1<br />

D.4. Relocatable Element Format Errors ......................................... D–1<br />

D.5. EQU .......................................................................................... D–2<br />

D.6. Implicit Call for Non-TPF$ File .................................................. D–2<br />

D.7. Truncation of Negative Fields .................................................. D–2<br />

D.8. LIB/NOT of Same File .............................................................. D–2<br />

D.9. Static Diagnostic Text .............................................................. D–3<br />

D.10. Location Counters Restricted to 2047 ..................................... D–3<br />

7830 9887–001 v


Contents<br />

Appendix E. <strong>Collector</strong> Diagnostic Messages<br />

E.1. Introduction .............................................................................. E–1<br />

E.2. FATAL ERROR Messages ....................................................... E–1<br />

E.3. ERROR Messages ................................................................... E–8<br />

E.4. WARNING Messages ............................................................ E–30<br />

E.5. Information Messages ........................................................... E–35<br />

Appendix F. Program Segmentation<br />

F.1. Introduction ............................................................................... F–1<br />

F.2. Segmentation Directives .......................................................... F–1<br />

F.2.1. SEG — Program Segmentation ....................................... F–2<br />

F.2.2. DSEG — Dynamic Segments .......................................... F–6<br />

F.2.3. RSEG — Relocatable Segments ...................................... F–6<br />

F.3. Loading Program Segments ..................................................... F–7<br />

F.3.1. L$OAD,LOAD$ — Direct Method ................................... F–8<br />

F.3.2. Reloading the Main Segment ........................................ F–10<br />

F.3.3. D$LOAD,DLOAD$ — Loading Dynamic<br />

Segments .................................................................. F–10<br />

F.3.4. Indirect Loading ............................................................. F–11<br />

F.3.5. D$REL,DREL$ — Releasing a Segment’s<br />

Program Area ............................................................. F–12<br />

F.3.6. Segment Load Table ...................................................... F–13<br />

F.4. Segmentation within Bank-Named Collections ...................... F–13<br />

F.5. Common Blocks ..................................................................... F–14<br />

Appendix G. ROR$E-Relocatable Output Routine<br />

G.1. Introduction .............................................................................. G–1<br />

G.2. SROR$EB—Start Relocatable Output Routine with<br />

External Buffer .................................................................... G–1<br />

G.3. ROR$EB—Generation of Relocatable Output with<br />

External Buffer .................................................................... G–2<br />

G.3.1. ROR$EB Item Format ..................................................... G–2<br />

G.3.2. Special Relocation Items ................................................. G–3<br />

G.4. EROR$EB—End Relocatable Output Routinewith<br />

External Buffer .................................................................... G–5<br />

G.5. TBLWR$EB—Table Write Subroutine with External<br />

Buffer .................................................................................. G–6<br />

G.6. Optimization Information ......................................................... G–7<br />

Index ............................................................................................. 1<br />

vi 7830 9887–001


Figures<br />

1–1. Creating an Absolute Element ........................................................................... 1–1<br />

2–1. <strong>Collector</strong> Input and Output ................................................................................. 2–2<br />

4–1. Bank of Global <strong>Reference</strong>s .............................................................................. 4–17<br />

B–1. I Bank Main Storage Map for the Segmented MAPABS ................................... B–5<br />

B–2. D Bank Main Storage Map for the Segmented MAPABS ................................. B–6<br />

B–3. Bank Structure of the Program ABS ................................................................ B–10<br />

B–4. Segment Structure of Bank1 in Program ABS ................................................. B–11<br />

B–5. Segment Structure of Bank2 in Program ABS’ ................................................ B–11<br />

B–6. Segment Structure of Bank3 and Bank4 in Program ABS ............................... B–12<br />

B–7. Segment Structure of Bank5 and Bank6 in Program ABS ............................... B–13<br />

7830 9887–001 vii


Figures<br />

viii 7830 9887–001


Tables<br />

2–1. @MAP Statement Options ................................................................................. 2–8<br />

2–2. SIR$: Symbolic Input/Output Routine Options .................................................. 2–9<br />

4–1. IBANK and DBANK Directive Attributes ............................................................ 4–4<br />

4–2. BANKINFO Directive Attributes ......................................................................... 4–6<br />

4–3. BDICALL$ and IBJ$ (DBJ$) Resolution ........................................................... 4–25<br />

4–4. MAPCALL$ and MAPGOTO$ Resolutions ...................................................... 4–38<br />

5–1. Parameters Specified with the TYPE Directive .................................................. 5–1<br />

B–1. Elements in FILEA.............................................................................................. B–1<br />

F–1. Placement of Common Blocks Defined in One Element................................. F–15<br />

F–2. Placement of Common Blocks Defined in More Than One Element .............. F–15<br />

7830 9887–001 ix


Tables<br />

x 7830 9887–001


Section 1<br />

Introduction<br />

The <strong>OS</strong> 1100 <strong>Collector</strong> combines or collects relocatable elements generated by language<br />

processors with relocatable library elements to form an executable (absolute) element.<br />

Figure 1–1. Creating an Absolute Element<br />

The <strong>Collector</strong> produces an absolute element structured so that the Exec program loader<br />

can place it in execution. Once the <strong>Collector</strong> creates the absolute program (that is,<br />

collects it), it can be saved and re-executed many times. You re-collect the program only<br />

if the program changes.<br />

A program execution control statement (@XQT) or processor call within the runstream<br />

places an absolute element (program) in execution. When the Exec encounters an @XQT<br />

or processor call statement, it retrieves the program from its mass storage file, loads it<br />

into main storage, and executes it. If you use a processor call (@processor), the Exec<br />

presents (in table form) the parameter fields from the call when the processor performs<br />

its first symbiont input (READ$ or SYMB$) request. If you use @XQT, the first symbiont<br />

input obtains the first data image following the @XQT.<br />

During execution, an absolute element can control which of its parts are in main storage<br />

by requesting that the Exec load previously defined program overlay segments or by<br />

accessing program banks. In addition, the executing program can attach to other<br />

previously defined banks provided by other absolutes. This program structure supports<br />

the dynamic sharing of both code (usually reentrant) banks and data banks between<br />

multiple users. Such shared banks are called common banks.<br />

7830 9887–001 1–1


Introduction<br />

1–2 7830 9887–001


Section 2<br />

Using the <strong>Collector</strong><br />

2.1. <strong>Collector</strong> Input<br />

The @MAP statement calls the <strong>Collector</strong>. It provides a direct means of collecting or<br />

combining relocatable elements to produce an executable program called an absolute<br />

element. Optionally, you can use the <strong>Collector</strong> to create a single relocatable element<br />

from a collection of several relocatable elements.<br />

Input to the <strong>Collector</strong> (see Figure 2-1) comes from these three sources:<br />

• Parameters supplied on the @MAP statement<br />

• Information supplied by the <strong>Collector</strong> directives<br />

• Relocatable elements taken from various program files:<br />

− Temporary program file (TPF$)<br />

− User-created program files<br />

− Implied library file (MAP$PF)<br />

− System library files (SYS$*DATA$.LIB$NAMES)<br />

− System relocatable library (SYS$*RLIB$)<br />

The <strong>Collector</strong> produces the following output:<br />

• An absolute or relocatable element<br />

• A symbolic element (optional)<br />

• A program listing (optional)<br />

7830 9887–001 2–1


Using the <strong>Collector</strong><br />

Figure 2–1. <strong>Collector</strong> Input and Output<br />

The primary output of the <strong>Collector</strong> is the absolute or relocatable element that results<br />

from collecting the various relocatable elements. This element is given a name and<br />

placed within a program file for subsequent use. You can specify both the element name<br />

and the file in which the element is placed.<br />

Usually, the <strong>Collector</strong> includes a set of tables within an absolute element for diagnostic<br />

systems to use. You can suppress this output by specifying the Z option (see Table 2-2)<br />

on the @MAP statement. You can produce extended diagnostic tables for the absolute<br />

element by specifying the TYPE directive with the EXTDIAG parameter. See Table 5-1.<br />

A program is partitioned into logical entities called banks. This is done by explicitly<br />

naming the bank, using the <strong>Collector</strong> IBANK or DBANK directive, and then by directing<br />

the <strong>Collector</strong> as to what partitions of the program to put into the separate banks. This is<br />

called a bank-named collection. If no IBANK or DBANK directives are specified, the<br />

<strong>Collector</strong> creates an absolute element with two banks. This is called a bank-implied<br />

collection. When more than two banks are created, the program is commonly called a<br />

multibanked program.<br />

By convention, but not necessity, the instructions of a program are placed under odd<br />

location counters, while the data is placed under even location counters. This separates<br />

instructions and data, with instructions allocated to I banks and data to D banks.<br />

2.1.1. <strong>Collector</strong> Language Conventions<br />

The <strong>Collector</strong> directives enable the programmer to control the collection of the program.<br />

These directives have the following characteristics:<br />

2–2 7830 9887–001


2.1.2. Files<br />

• Free-form and can begin in any column of the source language image.<br />

• Limited in length to 80 characters.<br />

• Can contain comments preceded by the blank-period-blank construction.<br />

Using the <strong>Collector</strong><br />

• Can be continued by using the continuation character, the semicolon ( ; ), anywhere<br />

a space is allowed. A comment can contain any character except the semicolon ( ; ).<br />

Using the continuation character within a comment causes the <strong>Collector</strong> to treat the<br />

line following the current line as a comment.<br />

• Follow the standard dropout rules pertaining to file names and element names. See<br />

the Executive Control Language (ECL) and FURPUR <strong>Reference</strong> <strong>Manual</strong> for standard<br />

file name and element name notation.<br />

• Can have leading blanks following a parameter field separator ( , ).<br />

<strong>Collector</strong> directives can follow the @MAP statement or can be contained in a symbolic<br />

element in a program file that is specified as input on the @MAP statement. You have<br />

the same access and updating facilities for this symbolic element as for any other type of<br />

symbolic element.<br />

Certain <strong>Collector</strong> directives can be used only in bank-named collections. These directives<br />

are IBANK, DBANK, BANKINFO, FORM, WINDOW, $lcs (location counter set), and<br />

certain formats of the IN and LIB directives.<br />

On all <strong>Collector</strong> directives, in all fields and subfields, a parameter consisting of a set of<br />

characters contained within apostrophes (for example, ’XYZ-ABC’) is treated as an<br />

alphanumeric name. Any normal termination characters are considered to be characters<br />

within the name. This method can also be used to process ASCII characters such as the<br />

underscore. Though the underscore (Fieldata 077) is not printed by Fieldata processors<br />

because it is the timesharing ER TREAD$ stop code, the <strong>Collector</strong> processes it normally<br />

if the name containing the underscore is included in apostrophes.<br />

Numbers on <strong>Collector</strong> directives are assumed to be decimal numbers; a leading zero can<br />

be used to specify an octal number. A unary minus ( - ) can be used to indicate a<br />

negative number.<br />

In <strong>Collector</strong> directive formats, parameters in italic type indicate information that is<br />

supplied by the programmer; parameters in regular type must be coded as shown.<br />

The <strong>Collector</strong> dynamically assigns all files that are necessary for the collection if they are<br />

not already assigned to the run. If the file is accessed with a write function, the file must<br />

be assigned exclusively to the run; if necessary, the <strong>Collector</strong> dynamically assigns the file<br />

exclusively. If a file referenced in the collection needs a unique internal name, the<br />

<strong>Collector</strong> attaches an internal name to the file. For the default installation mode of the<br />

<strong>Collector</strong>, the <strong>Collector</strong> restores all files referenced in the collection to their original<br />

assign state at the end of the collection. The <strong>Collector</strong> frees the files it assigned and<br />

removes all internal names attached by the <strong>Collector</strong>. The <strong>Collector</strong> provides an alternate<br />

installation mode that leaves the files assigned if so desired for performance reasons.<br />

7830 9887–001 2–3


Using the <strong>Collector</strong><br />

2.2. <strong>Collector</strong> Output<br />

The <strong>Collector</strong> produces relocatable and absolute elements.<br />

2.2.1. <strong>Collector</strong>-Produced Relocatable Elements<br />

Although the <strong>Collector</strong> is generally used to produce an absolute element, a relocatable<br />

element can be produced by specifying the R option on the @MAP statement. All<br />

indicated relocatable elements are merged into a single relocatable element. The<br />

external definitions specified with the DEF directive and the external references<br />

specified with the REF directive are retained. All other external definitions are<br />

submerged in the new relocatable element.<br />

Relocatable elements in SYS$*RLIB$, files specified in SYS$*DATA$.LIB$NAMES, and<br />

files specified by INFO group 12, are not implicitly included in an R option collection. For<br />

more information about INFO groups, see the Meta-Assembler (MASM) <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong>. Location counter specification is preserved; that is, information<br />

contained in location counter n for all input relocatable elements is placed under location<br />

counter n of the output relocatable element with the exception of common blocks that<br />

are combined according to common block name and reassigned a location counter<br />

number.<br />

Only the following directives can be specified with an R option collection. All others<br />

produce a diagnostic message and the collection continues:<br />

CLASS EQU NOT<br />

DEF FRSTIN REF<br />

END IN TYPE<br />

ENT LIB<br />

You can use the R option to include two relocatable elements with duplicate entry points<br />

in the same collection. To accomplish this, perform an R option collection, using the EQU<br />

directive to redefine the entry point. Do not specify the duplicated entry point on a DEF<br />

directive, but do specify the redefined entry point. This causes the duplicated entry point<br />

to be submerged in the newly created relocatable element. The resulting element can<br />

then be collected with the other element that contains the duplicate entry point to form a<br />

single absolute element.<br />

You can also use the R option to combine a group of library routines into a single<br />

relocatable element to reduce the number of IN directives needed to include them in the<br />

collection. Similarly, you can use an R option collection to create an element to be used<br />

with the FRSTIN directive. This element can include a group of elements to be placed at<br />

the beginning of a bank or segment. The R option collection is necessary in this case<br />

since the FRSTIN directive can be used only to specify placement of a single element<br />

within a bank or segment.<br />

2–4 7830 9887–001


2.2.2. <strong>Collector</strong>-Produced Absolute Output<br />

Using the <strong>Collector</strong><br />

The primary output of the <strong>Collector</strong> is the absolute element. The absolute element<br />

contains four basic parts:<br />

• The header table<br />

• Tables used by the Exec<br />

• Absolute text (and access control words (ACW))<br />

• Tables accessible to the user<br />

The absolute element produced by the <strong>Collector</strong> is structured so that the Exec program<br />

loader can place it in execution. Once the absolute program has been created (collected),<br />

it can be saved and re-executed many times. If changes are made to the program, recollect<br />

it to create a new absolute.<br />

The absolute element format is documented in the Data Structures <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong>.<br />

2.2.3. Listing<br />

The <strong>Collector</strong> produces four different listings depending on the options specified on the<br />

@MAP statement:<br />

• N option listing<br />

The N option listing lists all fatal error messages.<br />

• No option listing<br />

The no option listing contains all information produced by the N option listing plus<br />

the following items:<br />

− Starting address<br />

− Program size<br />

− Nonfatal error messages, warnings<br />

In batch mode, the listing also includes the bank, segment, and element address<br />

assignments<br />

• S option listing<br />

The S option listing includes all information produced when no option is specified<br />

plus the following items:<br />

− The source input with CTS line numbers, if present<br />

− The main storage allocated to each element and segment<br />

− The common bank table containing the bank descriptor index (BDI) and name for<br />

all common banks referenced in the collection<br />

− The bank and segment index values<br />

− A scale drawing of program segmentation and bank structure<br />

7830 9887–001 2–5


Using the <strong>Collector</strong><br />

• L option listing<br />

The L option listing contains all information produced by the S option listing plus the<br />

following items:<br />

− The external references of each element.<br />

− The program address of all external definitions.<br />

− A list of the files available for element inclusion; the list contains the internal file<br />

name specified and the full external file name. This list also indicates if the file<br />

was available for library searching, if it was searched for elements appearing on<br />

IN directives with no file name attached, if it was searched to resolve external<br />

references, if it is an RLIB type file, and if the keyword for the file was specified<br />

in an INFO group 12 item. The files marked for searching in the table are listed in<br />

the order in which they were searched to satisfy external references. (See 3.2.3<br />

for additional information.)<br />

The <strong>Collector</strong> sign-on and sign-off lines are always produced. The sign-on line format for<br />

<strong>Collector</strong> is as follows:<br />

<strong>Collector</strong> level (yymmdd hhmm:ss) yyyy Mmm dd Ddd hhmm:ss<br />

where:<br />

level<br />

is the level of the <strong>Collector</strong>.<br />

yymmdd hhmm:ss<br />

is the date and time that the <strong>Collector</strong> was created. For example, 901124 0923:47.<br />

yyyy Mmm dd Ddd hhmm:ss<br />

is the current date and time. For example, 1990 Nov 24 Sat 2143:51.<br />

The sign-off line format is<br />

where:<br />

END MAP. ERRORS: n TIME: s.mmm STORAGE: a/b/c/d/e<br />

n is the number of errors detected by the <strong>Collector</strong>.<br />

s.mmm are the number of seconds and milliseconds of SUPS for the collection.<br />

a is the amount of temporary memory space used.<br />

b is the amount of temporary memory space freed.<br />

c is the amount of permanent memory space used.<br />

d is the number of MCORE$ requests.<br />

2–6 7830 9887–001


e is the highest address allocated by <strong>Collector</strong> for its own use.<br />

Using the <strong>Collector</strong><br />

2.3. @MAP-<strong>Collector</strong> Initiation and Termination<br />

Purpose<br />

The @MAP statement specifies that the <strong>Collector</strong> is to combine a set of relocatable<br />

elements into one absolute or relocatable element. All @MAP statement parameters are<br />

optional. The <strong>Collector</strong> can also be called implicitly by the @XQT control statement.<br />

Format<br />

@label:MAP,options si,ro,so<br />

where:<br />

options<br />

si<br />

ro<br />

so<br />

(See Table 2-1.)<br />

specifies the input symbolic element that contains the <strong>Collector</strong> source language.<br />

specifies the absolute output element. When the R option is specified, ro names the<br />

relocatable output element.<br />

specifies the output <strong>Collector</strong> source language element.<br />

See the Executive Control Language (ECL) and FURPUR <strong>Reference</strong> <strong>Manual</strong> for processor<br />

call statement conventions. See Table 2-2 for a description of the symbolic input/output<br />

routine (SIR$) options.<br />

At the end of the collection, a termination line is printed. This line includes the number of<br />

errors encountered, the standard unit of processing (SUP) time used by the collection,<br />

and <strong>Collector</strong> internal storage information. See 2.2.3 for more information<br />

Table 2–1. @MAP Statement Options<br />

Option Description<br />

A Under no circumstances is the error exit (ER<br />

ERR$) to be taken during the collection. The<br />

absolute is not marked in error.<br />

7830 9887–001 2–7


Using the <strong>Collector</strong><br />

Table 2–1. @MAP Statement Options<br />

Option Description<br />

B Mark the absolute element so that the<br />

program area is not cleared to zero before<br />

loading the program and any indirectly loaded<br />

segments (see F.3.4).<br />

C Expand the storage area of the <strong>Collector</strong> using<br />

larger allocation amounts. This can reduce the<br />

number of times the <strong>Collector</strong> references<br />

MCORE$. Use larger buffers to reduce I/O<br />

requests. Attempt to retain information in<br />

memory instead of writing to scratch files.<br />

D Print a diagnostic message for all possible<br />

addresses over 65K (0177777). Check for<br />

possible instruction format violations of text<br />

words that are relocated.<br />

E Allow program addresses to exceed 65K. If<br />

this option is omitted and the program’s D<br />

bank exceeds 65K, the D bank starting<br />

address is moved downward so that all (or as<br />

many as possible) of the addresses over 65K<br />

are forced below 65K. In bank-named<br />

collections, all possible D bank starting<br />

addresses are moved downward.<br />

F Mark the output absolute or relocatable<br />

element as quarter-word sensitive. This is<br />

equivalent to the TYPE QUARTER directive.<br />

(See T option.)<br />

L Produce the most comprehensive listing (see<br />

2.2.3).<br />

N Produce the most abbreviated print listing<br />

available, consisting of the sign-on and<br />

termination lines and any fatal errors (see<br />

2.2.3).<br />

R Generate a relocatable element instead of an<br />

absolute element (see 2.2.1).<br />

S Produce a summary listing (see 2.2.3).<br />

T Do not mark the output element as quarterword<br />

sensitive. This is equivalent to the TYPE<br />

THIRD directive. See 5.4.<br />

2–8 7830 9887–001


Table 2–1. @MAP Statement Options<br />

Option Description<br />

Using the <strong>Collector</strong><br />

X If an error is detected, terminate the collection<br />

without producing an output element and exit<br />

using ER ERR$. When the X option is omitted,<br />

the results of the collection are accepted, even<br />

though there can be minor errors, as long as<br />

an absolute element can be produced. The X<br />

option is assumed when the <strong>Collector</strong> is<br />

automatically called by @XQT.<br />

Z Suppress generation of diagnostic tables in the<br />

absolute element that are used by diagnostic<br />

systems. This does not suppress INFO 8<br />

(static diagnostic) text.<br />

Table 2–2. SIR$: Symbolic Input/Output Routine Options<br />

Option Description<br />

G Input is compressed symbolic in columns 1-80 of the symbolic images. Applies only<br />

with the I option.<br />

H Input contains sequence numbers in columns 73-80 of the symbolic images. Applies<br />

only with the I option.<br />

I Read images from the runstream and insert them into a new symbolic. If the I option<br />

is present without any si specification, SIR$ reads images from the runstream and<br />

passes them to the caller.<br />

J Input contains compressed symbolic images in columns 1-72 of the images and<br />

sequence numbers in columns3-8 70. These sequence numbers are not checked by<br />

the K option. Applies only with the I option.<br />

K Check sequence numbers in columns 73-80 of the symbolic images (valid only with<br />

H and I options).<br />

P Indicates that the symbolic element produced by the <strong>Collector</strong> should be in Fieldata<br />

format.<br />

Q Indicates that the symbolic element produced by the <strong>Collector</strong> should be in ASCII<br />

format.<br />

P and Q Indicates that the symbolic element produced by the <strong>Collector</strong> can be a combination<br />

of Fieldata format and ASCII format.<br />

Neither<br />

P nor Q<br />

Indicates that the symbolic element produced by the <strong>Collector</strong> can be a combination<br />

of Fieldata format and ASCII format When the I option is included the format is<br />

determined by the format of the runstream images. When the I option is not<br />

included the format is determined by the format of the symbolic input element<br />

images.<br />

U Read change images from the runstream, apply them to the symbolic input element,<br />

and produce a new cycle of the symbolic element.<br />

7830 9887–001 2–9


Using the <strong>Collector</strong><br />

Table 2–2. SIR$: Symbolic Input/Output Routine Options<br />

Option Description<br />

W List change images.<br />

Examples:<br />

@MAP<br />

The name for the absolute element is automatically assigned by the <strong>Collector</strong>. The<br />

printed output and internal table entries would appear as if the @MAP statement had<br />

been<br />

@MAP,I ,TPF$.NAME$<br />

If no directives follow, the directive IN TPF$. is assumed.<br />

@MAP OLDFILE.OLDELEMENT,A,NEWFILE.NEW/ELEMENT<br />

Element OLDELEMENT from file OLDFILE is updated by any source language<br />

statements following the @MAP statement. The output source language goes into file<br />

NEWFILE, element NEW/ELEMENT. The absolute element A goes into TPF$.<br />

@MAP SYMIN/C,BACKUP.ABSOUT<br />

Version C of element SYMIN from TPF$ is the input symbolic element. The absolute<br />

output element ABSOUT is written in file BACKUP. No source language output is<br />

produced; any successive change lines are applied but not saved.<br />

@MAP,I BACKUP.SYMOUT, .ABSOUT<br />

The source language statements (<strong>Collector</strong> directives) following the @MAP statement<br />

are inserted as the symbolic output element SYMOUT in file BACKUP. The absolute<br />

element ABSOUT is also put into file BACKUP.<br />

@MAP,U SYMIN(3),ABSOUT/REVISED<br />

Cycle 3 of element SYMIN located in TPF$ is updated to produce cycle 4 of element<br />

SYMIN. Any change lines are saved. Version REVISED of absolute output element<br />

ABSOUT is also put in TPF$.<br />

@MAP,IRXLD ARB,ARB<br />

The source language statements following the @MAP statement become the symbolic<br />

element ARB in the file TPF$. The output element goes into TPF$ as relocatable element<br />

ARB. If errors are encountered during the collection, the run is terminated. A full listing is<br />

produced. Diagnostics are printed for addresses over 65K.<br />

2–10 7830 9887–001


Using the <strong>Collector</strong><br />

7830 9887–001 2–11


Using the <strong>Collector</strong><br />

2–12 7830 9887–001


Section 3<br />

Inclusion and Exclusion of Elements<br />

3.1. Explicit Inclusion and Exclusion<br />

The following directives enable you to explicitly include or exclude elements in the<br />

collection process.<br />

3.1.1. IN - Element Inclusion<br />

Purpose<br />

The IN directive allows you to specifically include an element or all relocatable elements<br />

of a file in the collection of a program. An element can be preceded by a file name. The<br />

elements indicated on an IN directive are placed in the segment named by the preceding<br />

SEG directive (see F.2.1) and in the bank named by the preceding IBANK or DBANK<br />

directive (see 4.2.1).<br />

SYS$RLIB$ID is considered a non-supported SYSLIB routine. See the System Service<br />

Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for more information about<br />

SYS$RLIB$ID.<br />

All IN directive parameters are optional. If all parameters are omitted, the following is<br />

assumed:<br />

IN TPF$.<br />

Formats<br />

IN name-1,name-2,name-3,...,name-n<br />

IN(bank-list) name-1($lcs),name-2($lcs),...,name-n($lcs)<br />

where:<br />

name<br />

specifies the element or entire file to be included in the collection.<br />

bank-list<br />

$lcs<br />

is a list of bank-names to be used with local element inclusion.<br />

7830 9887–001 3–1


Inclusion and Exclusion of Elements<br />

specifies which location counters of name-i are to be included in this part of the<br />

program<br />

Description<br />

The bank-list and $lcs parameters are used only with bank-named collections (see<br />

4.4.4.2).<br />

By stating a file name without a following element name, you can specify the inclusion<br />

of all relocatable elements in a program file. In bank-implied collections, if some<br />

elements of a file have been explicitly named, these are included as specified and the IN<br />

file name serves to bring in only the remaining elements in the file. When specifying an<br />

entire file for inclusion, a period must follow the file name.<br />

When name consists of an element name only, with no version specified, any<br />

relocatable element with that name, irrespective of version, is eligible for inclusion. If<br />

relocatable elements with the same element name but different version names exist in<br />

the same file, ambiguities arise. The CLASS directive (see 3.1.5) can be used to<br />

overcome the ambiguity. Alternatively, the ambiguity is not present if the version name<br />

is explicitly stated as part of name on the IN directive:<br />

IN name /^^^^^^^^^^^^<br />

This format of the name parameter must be used to specifically select a relocatable<br />

element with a version name consisting of 12 space characters, (denoted by ^) when<br />

other relocatable elements with version names exist in the file. Each relocatable element<br />

included in the collection must have a unique element name. It is not possible to include<br />

two relocatable elements with the same element name having different version names<br />

or file names in the same collection.<br />

Common blocks can be named on IN directives, but must not have an associated implicit<br />

or explicit file name because they are embedded within other elements. For inclusion of<br />

a common block in the collection, see F.5.<br />

For the order of elements explicitly and implicitly included in the collection, see 4.4.1 and<br />

4.4.5.<br />

For efficiency considerations, see 8.2.<br />

Examples<br />

IN FILEA.,FILEB.<br />

All relocatable elements in FILEA and FILEB are included in the collection.<br />

IBANK BDAY2 .<br />

IN COLLECTOR*F8(1).INIT/REV<br />

The relocatable element INIT version REV in file COLLECTOR*F8 (1) is included in the<br />

collection of the IBANK BDAY2. (See 4.2 for the use of the banking directives.)<br />

DBANK ADAY1 .<br />

3–2 7830 9887–001


IN FILEB.BB, .CC,DD<br />

Inclusion and Exclusion of Elements<br />

Elements BB and CC from file FILEB and element DD (whose file name is not indicated)<br />

are included in the collection of the DBANK ADAY1. TPF$, all specified library (LIB) files,<br />

MAP$PF, files specified by INFO group 12 keywords, files specified in<br />

SYS$*DATA$.LIB$NAMES and SYS$*RLIB$ are searched in that order for element DD<br />

until it is found in one of them. If element DD is not found, a diagnostic is printed.<br />

3.1.2. FRSTIN - First Element Included<br />

For either format of the IN directive, you can use FRSTIN instead of IN. If FRSTIN is<br />

used, it must be the first element inclusion statement in a bank-implied collection or<br />

must immediately follow an IBANK, DBANK, or SEG directive. FRSTIN specifies that the<br />

first named element is to be positioned at the beginning of the bank or segment in which<br />

it is collected. Only one FRSTIN directive can be specified for each IBANK, DBANK, or<br />

SEG directive. Only the first element name is used on the FRSTIN directive. Other<br />

elements named will be positioned as if they were named on an IN directive.<br />

3.1.3. FORM - Source Language Structure Duplication<br />

Purpose<br />

Allows the duplication of a portion of a program structure previously defined within a<br />

collection without requiring repetition of the source language used to define that<br />

structure.<br />

Formats<br />

FORM bank-name<br />

FORM bank-name*segment-name<br />

where:<br />

bank-name<br />

specifies the bank whose structure is to be duplicated<br />

segment-name<br />

specifies the segment within the bank whose element inclusion structure is to be<br />

duplicated.<br />

Description<br />

When placed following an IBANK or DBANK directive, a “FORM bank-name” directive<br />

causes the full segment tree of the named bank to be regenerated for the bank being<br />

defined, except that the location counter set presently in control must differ from the<br />

one that was in control for the bank named on the FORM directive. If an explicit location<br />

counter set is specified, it must precede the FORM directive. Since FORM bank-name<br />

creates an exact duplication of a previous bank structure, no additional SEG, DSEG,<br />

RSEG, or IN directives can be specified for the bank being generated.<br />

7830 9887–001 3–3


Inclusion and Exclusion of Elements<br />

A “FORM bank-name*segment-name” directive causes the IN directives within the<br />

specified segment to be regenerated.<br />

Only SEG, DSEG, and IN directives within a structure are duplicated when a FORM on<br />

that structure is specified.<br />

Examples<br />

1a. IBANK I1 1b. IBANK I1<br />

SEG MAIN SEG MAIN<br />

IN A,B IN A,B<br />

SEG SG SEG SG<br />

IN FILE.ELT,.ELT1 IN FILE.ELT,.ELT1<br />

DBANK D1 DBANK D1<br />

SEG MAIN FORM I1<br />

IN A,B<br />

SEG SG<br />

IN FILE.ELT,.ELT1<br />

The “FORM bank-name” directive is used in example 1b to produce the same results as<br />

in example 1a.<br />

2. IBANK I1<br />

SEG MAIN<br />

IN A,B<br />

SEG SG<br />

IN FILE.ELT,.ELT1<br />

DBANK D1<br />

SEG MAIN<br />

FORM I1*MAIN<br />

SEG SG<br />

FORM I1*SG<br />

The “FORM bank-name*segment-name” directive is used in example 2 to produce the<br />

same results as in example 1.<br />

3.1.4. NOT - Element Exclusion<br />

Purpose<br />

The NOT directive names the elements or files that are to be excluded from the entire<br />

collection.<br />

All NOT directive parameters are optional. If all parameters are omitted, the following is<br />

assumed:<br />

NOT TPF$.<br />

Formats<br />

NOT name-1,name-2,...,name-n<br />

3–4 7830 9887–001


NOT DEFAULT$LIBS.<br />

name-n<br />

Inclusion and Exclusion of Elements<br />

specifies the element, with or without a file name, or the file to be excluded from<br />

the collection. If the version name or file name is omitted, all elements of the<br />

specified name are excluded.<br />

DEFAULT$LIBS.<br />

refers to all the default system files specified in SYS$*DATA$.LIB$NAMES.<br />

Note: The period is required for NOT DEFAULT$LIBS. If the period is omitted, the<br />

<strong>Collector</strong> treats DEFAULT$LIBS as an element rather than as the default system<br />

files.<br />

Description<br />

When all elements of a file are to be excluded, the entire file can be designated for<br />

exclusion with a NOT directive. The effect of excluding a whole file is to make the file<br />

inaccessible for searching as a library file. A period must follow the file name to ensure<br />

that it is not interpreted as an element name. The file name specified on the NOT<br />

directive should be the same as it appears elsewhere in the collection on IN or LIB<br />

directives. The NOT directive affects the entire collection.<br />

If a file name with no following element names appears on a NOT directive, elements<br />

within the named file can still be explicitly included during the collection. This is useful<br />

only with TPF$, MAP$PF, files specified in SYS$*DATA$.LIB$NAMES, and SYS$*RLIB$,<br />

since these are the only files that are normally searched automatically. They must be<br />

specified as TPF$, MAP$PF, DEFAULT$LIBS, and SYS$*RLIB$ on the NOT directive to<br />

override the automatic search. If you do not include elements from TPF$, specify the<br />

NOT TPF$ directive. See 8.3 for more information about efficient use of <strong>Collector</strong>.<br />

Examples<br />

NOT CWW,LRR<br />

All elements named CWW and LRR in any file are excluded from the collection; if no IN<br />

directives are present, all other relocatable elements in TPF$ are included.<br />

IN FILEA.<br />

NOT FILEA.CL,.AB<br />

All elements named CL and AB from FILEA are excluded from the collection; all other<br />

relocatable elements in FILEA are included.<br />

IN FIL1.<br />

NOT SYS$*RLIB$.<br />

NOT TPF$.<br />

Relocatable elements from SYS$*RLIB$ and TPF$ are excluded from the collection. All<br />

elements from FIL1 are included.<br />

7830 9887–001 3–5


Inclusion and Exclusion of Elements<br />

NOT DEFAULT$LIBS.<br />

Relocatable elements for all of the files specified in SYS$*DATA$.LIB$NAMES are<br />

excluded from the collection. These files will not be searched for elements without file<br />

names or for unresolved references. All relocatable elements in TPF$ are included.<br />

3.1.5. CLASS - Element Selection Determination through<br />

Version Names<br />

Purpose<br />

The CLASS directive uniquely specifies one element version in a program file when more<br />

than one element has the same element name but different version names. In the<br />

collection this occurs when<br />

• The version of the element was not specified on an IN directive and more than one<br />

relocatable element has that name.<br />

• More than one relocatable element with the same name contains an entry point that<br />

defines an external reference.<br />

• A file name was not specified with the element on an IN directive and the element<br />

with different version names is present in more than one file.<br />

Format<br />

CLASS string<br />

where string consists of 12 alphanumeric characters, asterisks, a dollar sign ( $ ), a minus<br />

sign ( - ), and blanks representing the versions of the elements. The string begins with<br />

the first nonblank character following CLASS, and is terminated after 12 characters, or by<br />

the blank-period-blank comment delimiter. If fewer than 12 characters have been<br />

processed upon termination of the string, significant blanks are filled in on the right to<br />

make a 12-character string.<br />

Description<br />

The CLASS directives in a collection have a cumulative effect; therefore, different<br />

orderings of CLASS directives can give different results.<br />

Asterisks in a string (wild card characters) represent character positions to be ignored in<br />

the version name. Blanks in a string are valid to <strong>Collector</strong>.<br />

When several elements qualify to be included in the collection, the <strong>Collector</strong> compares<br />

the value of the string parameter on the CLASS directive with the version names of the<br />

available elements. If the element version name is not identical to the string parameter,<br />

it is not included in the collection.<br />

If, after the first comparison, more than one element qualifies, the string on the next<br />

CLASS directive is used in eliminating the remaining versions.<br />

3–6 7830 9887–001


7830 9887–001<br />

If all the CLASS directives have been used and more than one element qualifying<br />

element still remains none of the remaining elements is used in the collection and the<br />

<strong>Collector</strong> prints a diagnostic message.<br />

Examples:<br />

@MAP,I SAMP,ALPHA<br />

IN SIZE<br />

CLASS D***********<br />

CLASS ***B********<br />

CLASS *****4******.<br />

The IN directive does not specify which version of the SIZE element is to be used in the<br />

collection. The three CLASS directi directives ves specify that the DCOB14 version be used in the<br />

collection. Graphically, this can be shown as follows:<br />

@MAP,I SA<br />

IN ELT1<br />

CLASS D*LA********<br />

Inclusion and Exclusion of Elements<br />

The CLASS D*LA******** directive specifies that the D2LARGE version of the ELT1<br />

element be used in the collection. Graphically, this can be shown as follows:<br />

3–7


Inclusion and Exclusion of Elements<br />

3.2. Implicit Inclusion-File Searching<br />

The following directives enable you to implicitly include files in the library search.<br />

3.2.1. LIB-File Searching<br />

Purpose<br />

The LIB directive specifies which files (libraries) are to be searched to include the<br />

following:<br />

• An element named on an IN directive for which no file specification was made; for<br />

example, IN ELT<br />

• An element that satisfies external references that are not defined by elements<br />

already included in the collection<br />

If, after searching all of the library files, an element is not found that fulfills either of the<br />

above purposes, the <strong>Collector</strong> prints a diagnostic message.<br />

All LIB directive parameters are optional, except file-name-1.<br />

Format<br />

LIB file-name-1,file-name-2,...file-name-n<br />

LIB file-name-1(bank-name/$lcs,bank-name/$lcs,...),file-name-2...<br />

LIB (bank-name/$lcs,bank-name/$lcs...)<br />

LIB file-name-1( ),file-name-2( ),...file-name-n( )<br />

where:<br />

file-name-n<br />

specifies a file to be searched.<br />

bank-name<br />

$lcs<br />

( )<br />

specifies a bank in which implicitly included elements are to be placed. An implicitly<br />

included element is an element that has not been named on an IN directive but<br />

which satisfies an external reference.<br />

specifies which location counters of the implicit elements go to the corresponding<br />

banks.<br />

indicates that the parameters specified on the last preceding LIB (bank-name/$lcs,...)<br />

directive are to be applied for the file name specified.<br />

Description<br />

3–8 7830 9887–001


Inclusion and Exclusion of Elements<br />

You can use the second, third, and fourth formats only in bank-named collections (see<br />

4.4.5).<br />

The third format, which is called a “directed LIB” directive, is used to specify the<br />

appropriate bank and location counter set for all elements included from files named in<br />

format 4.<br />

To use a directed LIB directive with TPF$, you must include a NOT TPF$ directive in the<br />

MAP symbolic.<br />

The <strong>Collector</strong> does not guarantee the order of implicitly included elements within a bank.<br />

The LIB directive affects the entire collection.<br />

Examples<br />

LIB A<br />

IN E1<br />

.<br />

.<br />

.<br />

LIB B<br />

IN E2<br />

LIB directives have a cumulative effect. Files A and B are used for the search sequences<br />

for elements E1 and E2.<br />

The following example has the same effect:<br />

LIB A,B<br />

IN E1<br />

.<br />

.<br />

.<br />

IN E2<br />

LIB (IB1/$1,3,DB1/$2,4)<br />

The directed LIB directive dictates that location counters 1 and 3 from implicitly included<br />

elements go to the bank IB1. Similarly, location counters 2 and 4 from implicitly included<br />

elements go to the bank DB1. This line is meaningless unless format 4 LIB directives are<br />

also encountered.<br />

LIB F1( ),F2( )<br />

Implicit elements from files F1 and F2 are placed in banks IB1 and DB1 according to the<br />

directed LIB directive, which also must be provided.<br />

LIB F3(IB2/$1,3)<br />

Location counters 1 and 3 from implicitly included elements in file F3 are placed in I-bank<br />

IB2.<br />

7830 9887–001 3–9


Inclusion and Exclusion of Elements<br />

3.2.2. RLIB - File Searching<br />

RLIB can be used instead of LIB in all formats. Any element from a file on such a<br />

statement is treated as being from SYS$*RLIB$ or from the files specified in<br />

SYS$*DATA$.LIB$NAMES. The result is that these elements are not dumped by @PMD<br />

unless the L option is used with the PostMortem Dump processor (PMD) request, nor<br />

will they be traced by the Program Trace Routine (SNOOPY).<br />

3.2.3. DLIB - Directed LIB for the Default Libraries<br />

Purpose<br />

The DLIB directive is used to specify which location counters are to be placed in a<br />

particular bank when implicitly included elements are brought in from the files specified<br />

in SYS$*DATA$.LIB$NAMES. The DLIB directive is used as a directed LIB for the default<br />

libraries (the files specified in SYS$*DATA$.LIB$NAMES). The DLIB directive will not<br />

change the default library search order as the LIB directive does. The DLIB directive is<br />

not allowed in an R option collection since the default libraries are not searched for an R<br />

option collection.<br />

Format<br />

DLIB DEFAULT$LIBS.(bank-name/$lcs,...,bank-name/$lcs)<br />

where:<br />

bank-name<br />

$lcs<br />

specifies a bank in which implicitly included elements are to be placed.<br />

specifies which location counters of the implicit elements go to the corresponding<br />

banks.<br />

Description<br />

The DLIB directive is a “directed LIB” of all the files specified in<br />

SYS$*DATA$.LIB$NAMES.<br />

The collection must be a bank-named collection.<br />

Note: The period after DEFAULT$LIBS is optional.<br />

3.2.4. Sequence of File Searching<br />

The library sequence for file searching is as follows:<br />

1. TPF$<br />

2. Files specified on LIB and RLIB directives-in the order in which they are specified<br />

3. MAP$PF-the implied library file (if it exists)<br />

3–10 7830 9887–001


Inclusion and Exclusion of Elements<br />

4. Files specified by INFO group 12 keywords within the relocatables. These files are<br />

searched in the order in which the elements containing the INFO group 12 keywords<br />

are included in the collection<br />

5. Files specified in SYS$*DATA$.LIB$NAMES<br />

6. SYS$*RLIB$<br />

Any of these implicit or explicit files can be excluded from the search using the NOT<br />

directive.<br />

NOT DEFAULT$LIBS. is used to exclude (NOT) all of the files specified in<br />

SYS$*DATA$.LIB$NAMES. See 3.1.4 for an example.<br />

SYS$*RLIB$, files specified in SYS$*DATA$.LIB$NAMES, and files specified by INFO<br />

group 12 are not searched in an R option collection unless they are specified on a LIB<br />

directive. The INFO group 12 information is carried forward to the R option output<br />

element.<br />

There are two types of library searching in a collection:<br />

1. During the first search, all libraries are searched once in the previously described<br />

search sequence for elements specified on IN directives. This is called an element<br />

search.<br />

Note: If you do not use @PREP with TPF$, elements in TPF$ are treated in a special<br />

manner by the <strong>Collector</strong> (see 3.2.5).<br />

2. During the second search, all libraries are searched once again in the predescribed<br />

sequence for elements satisfying external references. This is called a reference<br />

search.<br />

The first element found in either of the two types of library searches is included in the<br />

collection. If an element with the same name exists or if two different elements satisfy<br />

the same external reference, the first element encountered is included in the collection.<br />

If these situations occur with elements existing in the same file, a message concerning<br />

element or entry-point ambiguity is also printed. If the elements are in different files, no<br />

message is printed.<br />

Note: The <strong>Collector</strong> terminates its library searching if all elements specified on IN<br />

directives are found, or if all external references are satisfied before all the library<br />

files have been searched.<br />

3.2.4.1. System Library Searching<br />

Searching of SYS$*DATA$.LIB$NAMES is as follows:<br />

The <strong>Collector</strong> searches sequentially through LIB$NAMES. The library preference order<br />

(also known as the file sequence number or the group-sequence) and the order of<br />

installation are used to determine the order of the product installation files within<br />

LIB$NAMES. There are 10 preference order specifications available. The lowernumbered<br />

library preference order files are processed first. Within each library<br />

preference level, the files appear in LIB$NAMES in the reverse order that they were<br />

7830 9887–001 3–11


Inclusion and Exclusion of Elements<br />

installed. For example, consider these files installed in the following order with the<br />

preference level in parentheses:<br />

SYS$LIB$*SORT (7)<br />

SYS$LIB$*ACOB (4)<br />

SYS$LIB$*FTN (4)<br />

In LIB$NAMES, the files would appear and would be searched in the following order:<br />

SYS$LIB$*FTN<br />

Lowest preference order level and last file installed at that level.<br />

SYS$LIB$*ACOB<br />

Same lowest preference order but installed before FTN.<br />

SYS$LIB$*SORT<br />

Next preference order and last at that preference level. It occurs after the lower<br />

preference level files even though SORT was installed first.<br />

Each installation (INSTALL) can change the order of the files in LIB$NAMES. Continuing<br />

from the preceding example, if SYS$LIB$*ACOB were installed again, the search order<br />

would now be<br />

SYS$LIB$*ACOB<br />

SYS$LIB$*FTN<br />

SYS$LIB$*SORT<br />

Since FTN and ACOB had the same preference order specification, ACOB would now be<br />

before FTN because it was installed after FTN. Within a preference level, no search order<br />

can be assumed.<br />

The <strong>Collector</strong> searches through the files in a forward manner. Once a library file has been<br />

searched, it is not searched again, unless the file name appears on multiple LIB<br />

directives, or unless the file falls in more than one of the library search sequence steps.<br />

The <strong>Collector</strong> terminates the search order when all references are resolved.<br />

3.2.4.2. Altering the Search Sequence - INFO Group 12 Keywords<br />

INFO group 12 keywords are specified using the MASM $INFO group 12 directive.<br />

These keywords alter the <strong>Collector</strong> search sequence. When an INFO group 12 keyword<br />

is encountered in a relocatable element, the product installation file corresponding to the<br />

INFO group 12 keyword is included in the INFO 12 search chain to satisfy any external<br />

3–12 7830 9887–001


Inclusion and Exclusion of Elements<br />

references. This is true unless LIB$NAMES is already being searched. If this is the case,<br />

the system file corresponding to the INFO group 12 keyword is searched next.<br />

The element SYS$*DATA$.LIB$NAMES contains the INFO group 12 keywords defined<br />

on the system and their corresponding product installation files. The files are searched in<br />

the order that the relocatable elements containing the keywords are included in the<br />

collection. After all files named by keywords have been searched, and if any unsatisfied<br />

references remain, all entries in the element SYS$*DATA$.LIB$NAMES are processed<br />

sequentially until all files have been searched, or all external references have been<br />

satisfied.<br />

If no INFO group 12 keywords are specified in an element, the <strong>Collector</strong> searches the<br />

library files in the order they appear in the element SYS$*DATA$.LIB$NAMES.<br />

The <strong>Collector</strong> skips library search sequence steps 4 and 5 (see 3.2.4) in the library search<br />

sequence if the element SYS$*DATA$.LIB$NAMES does not exist or is empty. This is<br />

provided for upward compatibility.<br />

The order in which the files appearing in the element SYS$*DATA$.LIB$NAMES are<br />

searched can be altered at collection time. Files appearing in the element<br />

SYS$*DATA$.LIB$NAMES that are specified by INFO group 12 keywords in the<br />

relocatable elements included in the collection, either explicitly or implicitly, are searched<br />

before going sequentially through all the files appearing in SYS$*DATA$.LIB$NAMES.<br />

Files specified by INFO group 12 keywords are searched in the order that relocatable<br />

elements containing the keywords are included in the collection. You can also supply LIB<br />

directives for system library files to ensure that specific system library files are searched<br />

before the INFO group 12 keyword and SYS$*DATA$.LIB$NAMES search chains. Files<br />

specified on LIB directives are searched in the order they are specified.<br />

This altered search order causes the files specified by the INFO group 12 keyword and<br />

the LIB directive to be searched more than once during the same search pass, once in<br />

each altered position, and once during the sequential search of all the files listed in the<br />

element SYS$*DATA$.LIB$NAMES if all references have not been satisfied.<br />

Here are considerations when using INFO group 12 keywords:<br />

• If there is more than one INFO group 12 keyword in a relocatable element, the<br />

corresponding files are searched in the order the keywords appear in the element.<br />

• If the same INFO group 12 keyword is specified more than once in an element, the<br />

corresponding file is searched again if necessary.<br />

ELT1<br />

$INFO 12 ’FORTRAN’ . FORTRAN searched<br />

$INFO 12 ’SORT’ . SORT searched<br />

$INFO 12 ’FORTRAN’ . FORTRAN searched<br />

Note: The $INFO statements are taken from a MASM element.<br />

• If the <strong>Collector</strong> is searching sequentially through SYS$*DATA$.LIB$NAMES and<br />

includes an element that contains an INFO group 12 keyword, the corresponding<br />

system file is searched next.<br />

7830 9887–001 3–13


Inclusion and Exclusion of Elements<br />

• An INFO group 12 keyword is ignored if it is the same as the last INFO group 12<br />

keyword in the previous element.<br />

ELT1<br />

$INFO 12 ’FORTRAN’ . FORTRAN searched<br />

$INFO 12 ’FORTRAN’ . FORTRAN ignored<br />

$INFO 12 ’SORT’ . SORT searched<br />

ELT2<br />

$INFO 12 ’SORT’ . SORT ignored<br />

$INFO 12 ’FORTRAN’ . FORTRAN searched<br />

$INFO 12 ’SORT’ . SORT searched<br />

Note: The $INFO statements are taken from a MASM element.<br />

• If an element implicitly included contains an INFO group 12 keyword, the file<br />

corresponding to that keyword is attached to the INFO group 12 search chain.<br />

The search is terminated as soon as the external references are satisfied.<br />

3.2.4.3. Determining the Search Sequence Used<br />

The files searched are included in the long <strong>Collector</strong> output listing (@MAP,L). For<br />

example, assume that the <strong>Collector</strong> directives are as follows:<br />

LIB PLSLIB<br />

IN REL$.PROG-MAIN<br />

IN REL$.INFOR-SUB<br />

Also assume that the element PROG-MAIN contains this directive:<br />

$INFO 12 ’SYSLIB’<br />

The resulting <strong>Collector</strong> output listing can appear as in the following example. The file<br />

SYS$LIB$*SYSLIB appears twice in the output listing, with the occurrence caused by<br />

the INFO 12 keyword noted by an asterisk under the INFO 12 column. The file<br />

SYS$LIB$*SYSLIB is thus searched twice to satisfy external references.<br />

Example<br />

Files Available for Element Inclusion (in Search Order):<br />

-------------------------------------------------------<br />

Search Element <strong>Reference</strong><br />

Specified Name External Filename File Search Search RLIB INFO 12<br />

------------------------------------------------------------------------------<br />

TPF$ C<strong>OS</strong>*TPF$(0) * * *<br />

PLSLIB PLS*7R1(2) * * *<br />

REL$ COMUS4R2*RO(77)<br />

SYS$LIB$*SYSLIB(4) SYS$LIB$*SYSLIB(4) * * * *<br />

SYS$LIB$*DPS(4) SYS$*LIB$*DPS(4) * * *<br />

SYS$LIB$*ACOB(10) SYS$*LIB$*ACOB(10) * * *<br />

SYS$LIB$*FTN(5) SYS$*LIB$*FTN(5) * * *<br />

3–14 7830 9887–001


Inclusion and Exclusion of Elements<br />

UDS$$SRC*D$MR(2) UDS$$SRC*D$MR(2) * * *<br />

SYS$LIB$*PCI<strong>OS</strong>(3) SYS$LIB$*PCI<strong>OS</strong>(3) * * *<br />

SYS$LIB$*UCSRTS(4) SYS$LIB$*UCSRTS(4) * * *<br />

SYS$LIB$*SORT(4) SYS$LIB$*SORT(4) * * *<br />

SYS$LIB$*CML(3) SYS$LIB$*CML(3) * * *<br />

SYS$LIB$*SYSLIB(4) SYS$LIB$*SYSLIB(4) * * *<br />

SYS$LIB$*RLIB SYS$LIB$*RLIB(1) * * *<br />

where:<br />

Specified Name<br />

is the internal file name specified on a LIB directive, an IN directive, a NOT directive,<br />

or included implicitly by the <strong>Collector</strong>.<br />

Files are printed in the following order:<br />

− TPF$, unless TPF$ appears on a directive<br />

− Files specified on LIB, NOT, or IN directives, in the order specified in the map<br />

symbolic. Each file will be printed once except<br />

ο Files specified on more than one LIB directive<br />

ο File or file.element specified on an IN directive and the same file specified<br />

on any other directive<br />

− MAP$PF, if it exists<br />

− Files specified by INFO group 12 keywords-in the order in which the elements<br />

containing the INFO 12 keywords are included in the collection<br />

− Files used from the element SYS$*DATA$.LIB$NAMES<br />

− SYS$*RLIB$<br />

External Filename<br />

corresponds to the external file name. The external file name is not printed for a NOT<br />

directive of an entire file.<br />

Search File<br />

indicates the file was available for an element or reference search.<br />

Element Search<br />

indicates the files that were searched for elements, without file names, specified on<br />

IN directives. The files were searched in the same order as they appear in the output<br />

listing.<br />

<strong>Reference</strong> Search<br />

7830 9887–001 3–15


Inclusion and Exclusion of Elements<br />

RLIB<br />

indicates the files that were searched to satisfy external references in the elements<br />

specified on IN directives or in elements implicitly included. The files were searched<br />

in the same order as they appear in the output listing.<br />

indicates that the file appeared on an RLIB directive or is treated as a system library<br />

file (SYS$*RLIB$ and files in SYS$*DATA$.LIB$NAMES).<br />

INFO 12<br />

indicates that the file was referenced by an INFO group 12 keyword in an element.<br />

3.2.4.4. Searching User-Specified Search Files<br />

A user-specified file can be searched more than once if the file name appears more than<br />

once on a LIB directive. Assume that the following appears in the <strong>Collector</strong> symbolic:<br />

IN XXX.ELT<br />

Also assume that XXX.ELT contains the external reference XREFA.<br />

You also need the following:<br />

LIB Y,Z,Y<br />

This statement includes all elements to satisfy all external references if the following<br />

situation occurred:<br />

Notes:<br />

1. To satisfy external reference XREFA from element XXX.ELT, element Y.A is included<br />

in the collection. (SEARCH LIB FILE 1)<br />

2. Element Y.A contains a reference to XREFB. The <strong>Collector</strong> will not find entry point<br />

XREFB in the rest of the search of file Y, so it searches the next library in the library<br />

search chain, file Z. (SEARCH LIB FILE 2)<br />

3–16 7830 9887–001


Inclusion and Exclusion of Elements<br />

3. To satisfy the reference to XREFB from element Y.A, element Z.B is included in the<br />

collection.<br />

4. Element Z.B contains a reference to XREFC. The <strong>Collector</strong> will not find entry point<br />

XREFC in the rest of the search of file Z, so it searches the next library in the library<br />

search chain, file Y. (SEARCH LIB FILE 3)<br />

5. To satisfy the reference to XREFC from element Z.B, element Y.C is included in the<br />

collection.<br />

6. If only LIB Y,Z had been specified, file Y would have been searched only once and<br />

element Y.C would not have been included in the collection and thus entry point<br />

XREFC would have remained undefined<br />

LIB directives such as the preceding are necessary because the <strong>Collector</strong> searches<br />

through the libraries in a forward manner. Once a library file has been searched, it is not<br />

searched again unless specified. However, it is redundant to specify the same file twice<br />

consecutively (for example, LIB Y,Y) since a file is fully searched even if an element from<br />

that file is added to the collection.<br />

3.2.5. @PREP of Library Files<br />

The @PREP function (see the Executive Control Language (ECL) and FURPUR <strong>Reference</strong><br />

<strong>Manual</strong>) creates an entry-point table for a file. The <strong>Collector</strong> accesses this entry-point<br />

table to determine if any of the file’s entry points satisfy external references in the<br />

collection.<br />

You must prepare (@PREP) all library files specified on LIB or RLIB directives that are<br />

used to satisfy external references. If a file has not been prepared, it is included in the<br />

first search (for element inclusion) but not in the second search (for satisfying external<br />

references). If a file has not been prepared, the <strong>Collector</strong> prints a diagnostic message.<br />

If TPF$ is not prepared, it is treated in a special manner by the <strong>Collector</strong>. All of the<br />

elements in TPF$ are tentatively included in the collection unless specifically excluded by<br />

the NOT directive. If any of these elements are not necessary for satisfying external<br />

references (or if they have not been named on an IN directive), they are discarded later in<br />

the collection.<br />

When TPF$ is prepared, the same procedure is used as with all prepared files. When<br />

TPF$ is not prepared, the <strong>Collector</strong> must read in all of the TPF$ elements, process their<br />

preambles, and create its own entry-point table. This implicit @PREP of TPF$ by the<br />

<strong>Collector</strong> is less efficient than an explicit @PREP.<br />

Files specified in SYS$*DATA$.LIB$NAMES are prepared when they are installed.<br />

For efficiency considerations see 8.3.<br />

7830 9887–001 3–17


Inclusion and Exclusion of Elements<br />

3–18 7830 9887–001


Section 4<br />

Banking<br />

4.1. Introduction<br />

A bank is the basic container of information for <strong>OS</strong> 1100 systems. Banks in main storage<br />

are called physical banks. A physical bank is a region of main storage that has been<br />

allocated for a particular user. Each physical bank has an associated data structure called<br />

a bank descriptor, which lists characteristics of the physical bank. A bank is recognized<br />

as a unit of an absolute element. Through the use of the bank directives, you have more<br />

control over the execution and storage allocation of the program.<br />

A bank template is a copy of a bank that is not installed on the system. Bank templates<br />

reside in the absolute elements, but never in main storage or in the swapfile (meaning<br />

swapped out of main storage into SWAP$FILE).<br />

Bank attributes are determined from control information that accompanies the bank<br />

template in the absolute element or from attributes named in the bank’s system<br />

definition. See the Exec System Software Common Banks <strong>Programming</strong> Guide for more<br />

information on banking.<br />

The maximum number of banks per absolute that the <strong>Collector</strong> allows is 4089 (07771).<br />

This value is determined by the <strong>Collector</strong>'s maximum internal user-bank BDI value of<br />

4092 (07774).<br />

4.2. Banking Directives<br />

This subsection describes bank directives and bank directive attributes.<br />

4.2.1. IBANK, DBANK — Bank Structuring<br />

Purpose<br />

The IBANK and DBANK directives specify program banks within a bank-named<br />

collection.<br />

All parameters on the IBANK and DBANK directives are optional, except name-1.<br />

Format<br />

IBANK,attributes name-1,bank-list level-#,bdr-#<br />

DBANK,attributes name-1,bank-list level-#,bdr-#<br />

7830 9887–001 4–1


Banking<br />

where:<br />

attributes<br />

are described in Table 4-1. For alternate file common (shared) banks (AFCB),<br />

attributes in the bank’s system definition can override attributes in the absolute<br />

element when the bank is installed. For nonconfigured common banks (NCCB), the<br />

attributes are strictly from the absolute element. See the Exec System Software<br />

Common Banks <strong>Programming</strong> Guide.<br />

name-1<br />

specifies the name of the bank. For nonconfigured common banks (NCCB), this is<br />

the name of the absolute element containing the NCCB when the bank is the only<br />

bank in the absolute element. All characters are allowed in a bank name if they are<br />

enclosed in single quotes.<br />

bank-list<br />

specifies the address relationship between the bank named in name-1 and other<br />

program banks. Names present in a bank-list can be I bank or D bank names. The<br />

bank-list parameter has several formats that determine the starting address of the<br />

bank named in name-1:<br />

no entry<br />

When bank-list is void, the starting address of the name-1 bank is the next<br />

address that is a multiple of 01000 following the highest address of the most<br />

recently defined I bank (if name-1 is an I bank) or D bank (if name-1 is a D bank).<br />

name-2<br />

The starting address of the name-1 bank is the same as that of the name-2<br />

parameter. Name-2 can be either a bank name, a numeric value, or a bank name<br />

± offset, where offset is an integer value that is added to or subtracted from the<br />

starting address of the bank name.<br />

(name-2)<br />

The starting address of the name-1 bank is the next address that is a multiple of<br />

01000 following the name-2 bank. Name-2 can be bank name or a bank name ±<br />

offset, where offset is applied to the bank’s last address.<br />

(name-2,name-3,...,name-n)<br />

level-#<br />

The starting address of the name-1 bank is the next address that is a multiple of<br />

01000 following the highest address of the name-2,...,name-n banks. Each of the<br />

name-2,. ..,name-n parameters can be a bank name, a bank name ± offset<br />

(where offset is applied to the bank’s last address) or an integer value.<br />

4–2 7830 9887–001


dr-#<br />

Description<br />

Banking<br />

specifies the bank descriptor table (BDT) level for a particular bank. This level<br />

overrides the global level when referencing the bank specified on the bank<br />

directive. Level-# must be an integer from 0 to 3. The level-# for a bank is<br />

required by extended mode programs to reference a bank. The default level-# is<br />

2. For collections with the TYPE EXEC directive, the default level-# is 1 (see 6.6).<br />

The level for each level-# is<br />

0 System<br />

1 Application<br />

2 Program<br />

3 Activity<br />

specifies the bank descriptor registerf (BDR) associated with a bank. The bdr-#<br />

field must be an integer from 0 to 3. The default BDR is 0 unless the M or U<br />

option is specified on the bank directive. The M and U options will set the BDR<br />

as follows<br />

IBANK,M BDR is 0.<br />

IBANK,U BDR is 1.<br />

DBANK,M BDR is 2.<br />

DBANK,U BDR is 3.<br />

IBANK,MU BDR is 0. The M option overrides the U option.<br />

DBANK,MU BDR is 2.<br />

The bdr-# field satisfies references to that bank’s BDR. It is not placed in the<br />

bank load table. If the bdr-# field and options on the bank directive conflict, an<br />

error message is issued. The BDR as defined by the options will then be used.<br />

For information on how the <strong>Collector</strong> assigns BDIs to banks, see A.3.<br />

The starting address of a bank is the INFO group 3 directive specified minimum address<br />

for an element included in the bank if the minimum address for the element would not<br />

otherwise be met. However, the INFO 3 directive is ignored if the O option is specified<br />

on the IBANK or DBANK directive or an integer starting address is specified of the<br />

following forms:<br />

IBANK bank1, 03000<br />

DBANK bank1, 010000<br />

The following forms do not cause the INFO 3 directive to be ignored.<br />

IBANK bank1, (bank2, 05000)<br />

DBANK bank1, (bank2, 050000)<br />

For additional information on bank-named collections, see 4.4.<br />

7830 9887–001 4–3


Banking<br />

Table 4–1. IBANK and DBANK Directive Attributes<br />

Attributes Description<br />

A This attribute is used on common banks that can process contingencies for<br />

errors received in program banks. It indicates that the bank is available for<br />

processing program bank contingencies.<br />

B This attribute indicates that the bank template is not to be marked as requiring<br />

extended mode even if an INFO 10 location counter is included in the bank.<br />

C The bank template is to be the control bank. This attribute can be specified only<br />

once in a collection. If no C option appears in a collection, the control bank is<br />

selected from the initially based banks. The order of precedence is as follows:<br />

Main D bank<br />

Utility D bank<br />

Main I bank<br />

Utility I bank<br />

D The bank template has the dynamic attribute. If this attribute is not specified,<br />

the bank template has the static attribute. In most cases, dynamic banks are<br />

more efficient than static banks. See the Exec System Software Common Banks<br />

<strong>Programming</strong> Guide.<br />

G The bank template has the guaranteed entry attribute. When a bank basing an<br />

instruction is executed to a guaranteed entry bank, the jump must be made to<br />

the address specified as the guaranteed entry.<br />

H The bank template has the program contingency handling attribute. See the<br />

Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />

and the Exec System Software Common Banks <strong>Programming</strong> Guide for more<br />

details.<br />

L All references to BDICALL$ and IBJ$, where the associated reference is defined<br />

in an L option bank, are to be satisfied by 0 and LMJ, respectively. This option is<br />

assumed for the control bank. If the bank is not an initially based static bank, a<br />

warning message is printed.<br />

M This bank is to be initially based (BDR0 or BDR2 for the 1100/60, 1100/70, and<br />

1100/80, systems, or B12 or B14 on the extended mode architecture). This<br />

option can be used only once with an IBANK directive and once with a DBANK<br />

directive. If no M or U options are specified, the M option is assumed for the<br />

first IBANK and first DBANK directives. Once the M option is specified, no<br />

assumptions are made regarding the M or U option.<br />

N This bank requires extended mode.<br />

O The starting address specified by bank-list is to override any minimum address<br />

(INFO 3) specifications found in elements in this bank. This option is assumed if<br />

bank-list is a number without parentheses (see 4.2.4).<br />

Q The bank template has the test-and-set (TS) queuing attribute. When TS<br />

conflicts occur within a bank with this attribute, the system queues the activity<br />

to the TS cell. See the Exec System Software Common Banks <strong>Programming</strong><br />

Guide.<br />

4–4 7830 9887–001


Table 4–1. IBANK and DBANK Directive Attributes<br />

Attributes Description<br />

R The bank template has the read-only (write-protected) attribute.<br />

Banking<br />

S The bank is to be a nonconfigured common bank (NCCB). This option is usually<br />

used with multibanking techniques. See the Exec System Software Common<br />

Banks <strong>Programming</strong> Guide for more details.<br />

T This bank must start on an absolute 2,048 (04000) word boundary.<br />

U This bank is to be initially based (BDR1 or BDR3 for the 1100/60, 1100/70, and<br />

1100/80 systems, or B13 or B15 on the extended mode architecture). This<br />

option can be used only once with an IBANK directive and once with a DBANK<br />

directive. The U option is never assumed on an IBANK or DBANK directive.<br />

V The bank template is not placed in the absolute element.<br />

X The bank is represented by a configured bank descriptor index (BDI). These<br />

types of common banks include configured common banks (CCB) and alternate<br />

file common banks (AFCB). A CERU$ or CBEP$$ element included in the<br />

collection provides the bank’s BDI. This type of common bank cannot be the<br />

control bank.<br />

Z This is a void bank template. This bank is assigned the next consecutive BDI,<br />

starting with a value of 4, ahead of all other banks in the collection, including S<br />

option and D option banks. Only the D option can be specified with the Z option.<br />

No FORM, IN, or SEG directives are allowed following a Z option bank.<br />

Example<br />

The program is divided into four I banks and five D banks.<br />

1. IBANK I1<br />

2. IBANK I2<br />

3. DBANK D1<br />

4. IBANK I3,I2<br />

5. DBANK D2,036000<br />

6. DBANK D3,(I2,D1)<br />

7. DBANK D4,(I3)<br />

8. IBANK I4,I2+03000<br />

9. DBANK D5,(D3+02000,D4,D2,042000)<br />

The starting addresses of these banks are as follows:<br />

1. I1 starts at address 01000.<br />

2. I2 starts at the next 01000 following I1.<br />

3. D1 starts at 040000 or at the next 01000 following the longest I bank, whichever<br />

address is higher.<br />

7830 9887–001 4–5


Banking<br />

4. I3 starts at the same address as I2.<br />

5. D2 starts at address 036000.<br />

6. D3 starts at the next 01000 following the highest ending address of I2 and D1.<br />

7. D4 starts at the next 01000 following I3.<br />

8. I4 starts at the address obtained by adding 03000 to the start address of I2.<br />

9. D5 starts at the next 01000 following the highest ending address of D4, D2,<br />

D3+02000, and 042000.<br />

4.2.2. BANKINFO — Specifying Bank Attributes<br />

Purpose<br />

The BANKINFO directive specifies the attributes that are to be associated with the<br />

previous bank. The BANKINFO directive is used to improve the readability of a collection.<br />

It is also used to create AFCBs and a link vector bank.<br />

Format<br />

BANKINFO attribute-list<br />

where attribute-list specifies the attributes for the preceding bank directive. (See Table 4-<br />

2.) Each attribute is separated by a comma to create the attribute list. Most of these<br />

attributes correspond with the attributes (options) that can be specified on the BANK<br />

directive (see Table 4-1).<br />

Description<br />

The attributes can be abbreviated to six characters and can be no longer than twelve<br />

characters. The <strong>Collector</strong> uses only the first six characters to determine the desired<br />

attribute. Attributes followed by a value in parentheses indicate the existence of a<br />

subattribute. The subattributes are described with the attributes to which they apply.<br />

Table 4–2. BANKINFO Directive Attributes<br />

Attribute Option Description<br />

AFCB X The bank is represented by a configured BDI. These types<br />

of common banks include CCBs and AFCBs. The bank’s<br />

BDI will be obtained from a CERU$ or CBEP$$ element<br />

included in the collection. This type of common bank<br />

cannot be the control bank.<br />

4–6 7830 9887–001


Table 4–2. BANKINFO Directive Attributes<br />

Banking<br />

AFCB(bankname,bdi) * The bank is to be a common bank that is represented by a<br />

configured BDI. These types of common banks include<br />

CCBs and AFCBs. The bank name and BDI value are<br />

specified in parentheses. The bank name specified is the<br />

name used to install the common bank with COMUS. The<br />

BDI value should be in octal format (040nnnn). See the<br />

Exec System Software Common Banks <strong>Programming</strong><br />

Guide. The name specified on the bank directive will then<br />

be treated as if it were received from a CBEP$$ element<br />

(CB1 * EQU 040nnnn). (See 4.8).<br />

ALLOWCONTIN A This attribute is used on common banks that can process<br />

contingencies for errors received in program banks. It<br />

indicates that the bank is available for processing program<br />

bank contingencies.<br />

BDR(#) * This attribute specifies the BDR associated with a bank.<br />

The BDR value must be an integer from 0 to 3. The default<br />

BDR is 0 unless the bank is initially based. The BDR<br />

associated with an initially based bank is as follows:<br />

MAINI BDR is 0<br />

MAIND BDR is 2<br />

UTILI BDR is 1<br />

UTILD BDR is 3<br />

The BDR value satisfies references to that bank’s BDR,<br />

typically using MAPBDR$. It is not placed in the bank<br />

loadtable. If the BDR value and the basing options or<br />

attributes conflict, an error message is issued. A BDR value<br />

will then be determined by where the bank is based using<br />

the chart just shown.<br />

CODESTRIPPED V The bank template is not placed in the absolute element.<br />

CONTINGENCY H The bank template has the program contingency handling<br />

attribute. See the Exec System Software Executive<br />

Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for more details.<br />

CONTROL C The bank template is to be the control bank. This attribute<br />

can be specified only once in a collection. If no C option or<br />

CONTROL attribute appears in a collection, the control bank<br />

is selected from the initially based banks. The order of<br />

precedence is as follows:<br />

Main D bank<br />

Utility D bank<br />

Main I bank<br />

Utility I bank<br />

DYNAMIC D The bank template has the dynamic attribute. If this<br />

attribute is not specified, the bank template has the static<br />

attribute. See the <strong>OS</strong> 1100 Exec System Software<br />

Common Banks <strong>Programming</strong> Guide.<br />

EXTENDED N This bank requires extended mode.<br />

7830 9887–001 4–7


Banking<br />

Table 4–2. BANKINFO Directive Attributes<br />

GUARANTEED G The bank template has the guaranteed entry-point attribute.<br />

When a bank basing instruction is executed to a guaranteed<br />

entry-point bank, the jump must be made to the address<br />

specified as the guaranteed entry point.<br />

INITIAL(subattribute) M,U This bank is to be initially based. The subattributes are<br />

MAINI or BDR0 (based on BDR0)<br />

MAIND or BDR2 (based on BDR2)<br />

UTILI or BDR1 (based on BDR1)<br />

UTILD or BDR3 (based on BDR3)<br />

Each subattribute can be used for only one bank. If no<br />

subattributes (or M or U options) are specified, the MAINI<br />

(BDR0) is assumed for the first IBANK directive and the<br />

MAIND (BDR2) is assumed for the first DBANK directive.<br />

Once the MAINI (BDR0) and the MAIND (BDR2) or the M<br />

option is specified, no assumptions are made regarding the<br />

other subattributes (or the M or U options).<br />

Bank descriptor registers BDR0, BDR1, BDR2, and BDR3<br />

are used for the 1100/60, 1100/70, and 1100/80 systems.<br />

Base registers B12, B13, B14, and B15 are used on the<br />

extended mode architecture. For extended mode<br />

architecture, BDR0, BDR1, BDR2, and BDR3 are synonyms<br />

for B12, B13, B14, and B15 respectively.<br />

LEVEL(#) * This attribute specifies the BDT level for a particular bank.<br />

This level overrides the global level when referencing the<br />

bank specified on the bank directive (see 6.6). The number<br />

(#) specified on the LEVEL attribute must be an integer<br />

from 0 to 3.<br />

LMJ L All references to BDICALL$ and IBJ$, where the associated<br />

reference is defined in an L option or LMJ attribute bank,<br />

are to be satisfied by 0 and LMJ, respectively. This attribute<br />

is assumed for the control bank. If the bank is not an initially<br />

based static bank, a warning message is printed.<br />

NCCB S The bank is to be a nonconfigured common bank. This<br />

attribute is usually used with multibanking techniques. See<br />

the Exec System Software Common Banks <strong>Programming</strong><br />

Guide for more details.<br />

NOTEXTENDED B This attribute indicates the bank template is not to be<br />

marked as requiring extended mode even if an INFO 10<br />

location counter is included in the bank.<br />

OVERRIDEMIN O The starting address specified by bank-list is to override any<br />

minimum address (INFO 3) specifications found in<br />

elements in this bank. This attribute is assumed if bank-list<br />

is a number without parentheses (see 4.2.4).<br />

4–8 7830 9887–001


Table 4–2. BANKINFO Directive Attributes<br />

READONLY R The bank template has the read-only (write-protected)<br />

attribute.<br />

Banking<br />

TSQUEUING Q The bank template has the test-and-set (TS) queuing<br />

attribute. When TS conflicts occur within a bank with this<br />

attribute, the system queues the activity to the TS cell. See<br />

the Exec System Software Common Banks <strong>Programming</strong><br />

Guide.<br />

VECTOR<br />

(Bn[,Xn] [Bn[,Xn]] ...)<br />

Bn is a B register 2 to 15, or 2 to 31 for TYPE EXEC. Xn is<br />

an X register 1 to 15. This bank is to be the link vector bank.<br />

The <strong>Collector</strong> creates the contents of this bank as the<br />

<strong>Collector</strong> defined tags MAPCALL$ and MAPGOTO$ are<br />

encountered. Collections using this attribute cannot contain<br />

segmentation. For more information, see 4.9.<br />

VOID Z This is a void bank template. This bank is assigned the next<br />

consecutive BDI starting with a value of 4, ahead of all<br />

other banks in the collection, including NCCB attribute (S<br />

option) and DYNAMIC (D option) banks. Only the DYNAMIC<br />

attribute (D option) can be specified with the VOID (Z<br />

option) attribute. No FORM, IN, or SEG directives are<br />

allowed following a VOID bank.<br />

2048BOUNDARY T This bank must start on an absolute 2048 (04000) word<br />

boundary.<br />

* The asterisk indicates that this attribute is not available as an option on the BANK<br />

directive.<br />

Examples:<br />

1a. IBANK,MD IB1 1b. IBANK IB1<br />

BANKINFO INITIAL(MAINI),DYNAMIC<br />

The BANKINFO directive is used in example 1b to produce the same results as shown in<br />

example 1a.<br />

2a. DBANK,MDRC DB1 2b. DBANK DB1<br />

BANKINFO INITIAL(MAIND),DYNAMIC<br />

BANKINFO READONLY,;<br />

CONTROL<br />

More than one attribute can be specified on a BANKINFO directive by using a comma<br />

between the attributes. More than one BANKINFO directive can be used for each BANK<br />

directive. A semicolon can also be used to continue the BANKINFO directive.<br />

3a. IBANK,XM AFCBNAME 3b. IBANK AFCBNAME<br />

DBANK BANKNAME BANKINFO INITIAL(MAINI),AFCB<br />

IN FILE.ELT DBANK BANKNAME<br />

IN CBEP$$ELT IN FILE.ELT<br />

IN CBEP$$ELT<br />

7830 9887–001 4–9


Banking<br />

The BANKINFO directive is used in example 3b to produce the same results as shown in<br />

example 3a.<br />

4. IBANK AFCBNAME<br />

BANKINFO AFCB(INSTALLNAME,0400103),DYNAMIC<br />

IN FILE.ELT<br />

An integrated AFCB can be created in one collection. The bank name specified on the<br />

IBANK or DBANK directive, AFCBNAME, becomes an entry point that the <strong>Collector</strong> uses<br />

to resolve references to the bank. This is the name that is used when referencing the<br />

bank from elements within this collection. It has the BDI value specified on the<br />

BANKINFO directive.<br />

The bank name specified on the BANKINFO directive (INSTALLNAME) is the externally<br />

visible name for the common bank. This name is used for the COMUS INSTALL<br />

command and on the unsolicited console keyin RL. This name is listed on the <strong>Collector</strong><br />

listing as the bank name.<br />

The M or U option or the INITIAL attribute can also be specified. The common bank is<br />

based, not the bank name specified on the BANKINFO directive. The basing of this bank<br />

is not printed on the <strong>Collector</strong> output listing.<br />

4.2.3. $Ics — Location Counter Set Specification<br />

Purpose<br />

The $lcs directive specifies the set of location counters to be included in the current<br />

bank from elements explicitly included in the collection by IN directives.<br />

Format<br />

$lcs<br />

where $lcs specifies the set of location counters either by means of a keyword or<br />

explicit naming as follows:<br />

$ALL<br />

$NONE<br />

$ODD<br />

$EVEN<br />

Include all location counters.<br />

Include no location counters (used to create dummy or skeletal structures).<br />

Include only odd location counters (default for I banks).<br />

Include only even location counters (default for D banks).<br />

4–10 7830 9887–001


$n-1,n-2,...,n-m<br />

Include only those location counters specified.<br />

$ALLBUT,n-1 ,n-2,...,n-m<br />

Include all location counters except those specified.<br />

Description<br />

Banking<br />

The location counter set specification is used only in conjunction with a bank-named<br />

collection. The specified set remains in effect until the next $lcs or IBANK or<br />

DBANKdirective is encountered. A bank directive automatically sets the location counter<br />

set to $ODD for IBANK and $EVEN for DBANK.<br />

The location counter set specified for a bank can be overridden for individual elements or<br />

files by using the optional $lcs field on the IN directive (see 3.1.1).<br />

In formats 2 and 3 of the LIB directive, $lcs is also used to direct implicit elements to<br />

specific banks (see 3.2.1).<br />

Each location counter of each element can be globally included only once in a collection.<br />

However, a location counter can be locally included as many times as desired.<br />

Example<br />

LIB (I/$ALL,D/$NONE)<br />

LIB F1( )<br />

LIB F2(I/$1,3,7,010,D/$2,4,5,6)<br />

IBANK I<br />

$ALLBUT,2,4<br />

IN E1,E2,E3($2),E4<br />

.<br />

.<br />

.<br />

$1,3<br />

IN E5<br />

.<br />

.<br />

.<br />

DBANK D<br />

$2,4<br />

IN E1,E2,E3($ALLBUT,2),E4<br />

.<br />

.<br />

.<br />

$ALLBUT,1,3<br />

IN E5<br />

7830 9887–001 4–11


Banking<br />

Bank Included<br />

Element<br />

I E1,E2,E4<br />

E3<br />

E5<br />

D E1,E2,E4 E3<br />

E5<br />

Location<br />

Counter<br />

All but 2 and 4<br />

4–12 7830 9887–001<br />

2<br />

1 and 3<br />

2 and 4<br />

All but 2<br />

All but 1 and 3<br />

All implicit elements from file F1 will go to I bank I. Location counters 1, 3, 7, and 8 from<br />

the implicit elements from file F2 will go to I bank I, and location counters 2, 4, 5, and 6<br />

from the implicit elements from file F2 will go to D bank D.<br />

4.2.4. INFO Group 3<br />

The MASM INFO group 3 (INFO 3) directive allows you to specify the minimum I bank<br />

and D bank addresses of the element that contains the directive. The INFO 3 specified<br />

minimum I bank address applies to the I bank containing location counter one of the<br />

element that contains the INFO 3 specified minimum I bank address.<br />

The INFO 3 specified minimum D bank address applies to the D bank containing location<br />

counter zero of the element that contains the INFO 3 specified minimum D bank<br />

address.<br />

4.3. Bank-Implied Collections<br />

The <strong>Collector</strong> provides the capability of dividing an absolute element into logical<br />

structures called banks. If you do not wish to define this structure by means of the<br />

IBANK or DBANK directives, the <strong>Collector</strong> generates a two-bank absolute element. This<br />

is called a bank-implied collection. A bank-implied collection creates basic mode<br />

instruction banks.<br />

In a bank-implied collection, location counters from both explicitly and implicitly included<br />

elements are split with the odd location counters going to the I bank and the even ones<br />

going to the D bank.<br />

The starting address of the I bank (instruction area) is normally 01000; however, it can be<br />

altered by the MASM $INFO group 3 directive. The starting address of the D bank (data<br />

area) depends on the size of the I bank, the use of the MASM INFO group 3 directive,<br />

the total program size, and the options specified on the @MAP statement. The first<br />

address of the D bank, however, is always a multiple of 01000 and is often given the<br />

default value 040000.<br />

Your program can reference the first and last I bank and the first and last D bank<br />

addresses by the symbols FRSTI$, LASTI$, FRSTD$, and LASTD$, respectively. In<br />

addition, the symbols LASTIR$ and LASTDR$ return the values of LASTI$ and LASTD$<br />

rounded to the end of the main storage block. The <strong>Collector</strong> replaces these symbols with<br />

the actual assigned address values.


Banking<br />

An unnamed common block (that is, blank common), if required in the program, is placed<br />

in the D bank under the name BLANK$COMMON. If the program contains segments,<br />

the unnamed common block is attached to the main segment. It can be positioned in<br />

another segment or bank by an IN BLANK$COMMON directive.<br />

Named common blocks are always placed in the D bank. If the program contains<br />

segmentation, named common blocks (if not named on an IN directive) are attached to a<br />

global segment that contains all segments referencing the named common block. This is<br />

to ensure that the common block is loaded if any of the referencing segments is loaded.<br />

4.4. Bank-Named Collections<br />

One of the advantages of a multibanked program (that is, a program with more than one<br />

I bank and D bank) is that banks containing code not necessary for a certain portion of<br />

the program need not be in main storage until they are required. This subsection<br />

provides information regarding some guidelines and considerations that you need to<br />

keep in mind when creating bank-named collections.<br />

4.4.1. Bank Address Assignments<br />

The relative starting address of a bank can be explicitly given on the IBANK or DBANK<br />

directive as a numeric value or as an address to be determined in relation to the size of<br />

other banks. This bank starting address should be a multiple of 01000. This is a hardware<br />

restriction since the lower 9 bits of the address are not retained. When no such address<br />

specification exists, the following guidelines apply:<br />

1. The I bank specified by means of the first IBANK directive starts at the higher of the<br />

following:<br />

a. 01000<br />

b. A MASM $INFO group 3 specified address from an element included in this I<br />

bank unless the O option is specified<br />

2. The D bank specified by means of the first DBANK directive starts at the highest of<br />

the following:<br />

a. 040000<br />

b. The next address that is a multiple of 01000 following the highest assigned I<br />

bank address<br />

c. A MASM $INFO group 3 specified address from an element included in this D<br />

bank (if the element placement is such that the minimum specified address<br />

would not otherwise be met) unless the O option is specified<br />

3. I banks follow I banks and D banks follow D banks; that is, an I bank (D bank) that<br />

has no explicit address assignment is assigned a starting address that is the next<br />

multiple of 01000 following the last address assigned to the previous I bank (D bank)<br />

defined in the <strong>Collector</strong> source language.<br />

No bank address can be greater than 0777777 (262K). The total size of all I banks (D<br />

banks) can be greater than 0777777 if there is some overlap of program address<br />

assignments within banks, so that the total address space does not exceed 0777777<br />

(262K).<br />

7830 9887–001 4–13


Banking<br />

Note: For older unsupported Series 1100 systems, there is an I bank restriction that no I<br />

bank address can be greater than 0177777 (65K).<br />

Overlap of bank address assignments can be achieved by using the IBANK and DBANK<br />

directives. Overlay banks that have the same address space refer to separate physical<br />

storage and can be used to contain different data or instructions. Access to the specific<br />

data or instructions is controlled by the basing and unbasing of the respective banks.<br />

Although banks occupy different space in memory, the visibility of the banks based must<br />

not overlap within the <strong>Collector</strong> address space or parts of a bank will not be accessible.<br />

Bank overlaps can be necessary for large collections. The banks chosen to overlap<br />

should be logically separate so they are not based at the same time.<br />

In addition to the <strong>Collector</strong>-defined tags FRSTI$, LASTI$, LASTIR$, FRSTD$, LASTD$,<br />

and LASTDR$ (see Section 7), the tags FIRST$, LAST$, LASTR$, and BDI$ are defined<br />

for bank-named collections. These tags are defined to be the first assigned address, last<br />

assigned address, rounded last assigned address, and BDI value for the bank in which<br />

the reference is contained.<br />

4.4.2. Initially Based Banks<br />

An initially based bank is a bank that can be referenced at the start of execution of a<br />

program. This means that the bank is described in one of the basing registers (BDR0 to<br />

BDR3 on the 1100/60, 1100/70, and 1100/80 systems or B12 to B15 on the extended<br />

mode architecture). A bank can be specified for initial basing by means of the M or U<br />

option on the IBANK and DBANK directives (see 4.2.1), or by means of the BANKINFO<br />

directive (see 4.2.2). Each option can be used with a maximum of one IBANK and one<br />

DBANK directive. When there is no initial basing specified for any banks, the first I bank<br />

and the first D bank defined in the <strong>Collector</strong> source language are initially based on BDR0<br />

and BDR2 (1100/60, 1100/70, 1100/80 systems) or B12 and B14 (extended mode<br />

architecture) respectively. A bank is never assigned to be based on BDR1 or BDR3<br />

(1100/60, 1100/70, 1100/80 systems) or B13 or B15 (extended mode architecture) by<br />

default. Thus, if a bank is to be initially based on BDR1 or BDR3 (1100/60, 1100/70,<br />

1100/80 systems) or B13 or B15 (extended mode architecture), it must have the U<br />

option specified on the IBANK and DBANK directives. If a bank is not initially based, it<br />

can be based dynamically by means of the LBJ, LIJ, or LDJ instructions (see 4.5) for<br />

basic mode banks and the LBU, CALL, or GOTO instructions (see 4.6) for extended<br />

mode banks.<br />

4.4.3. The Control Bank<br />

The control bank is the normal place in which to collect such components of a program<br />

as permanent flags, central control routines for sets of dependent library subroutines,<br />

test-and-set cells, and locations designed to capture interrupts (such as guard mode<br />

contingency) that can result at varied or unpredictable locations throughout the program.<br />

Certain tables produced by the <strong>Collector</strong>, including the segment load table (SLT$), are<br />

located at the beginning of the control bank. A bank is specified as the control bank by<br />

using the BANKINFO directive with the CONTROL attribute or by specifying the C option<br />

on an IBANK or DBANK directive. The control bank normally is defined as an initially<br />

based D bank.<br />

4–14 7830 9887–001


Banking<br />

In a basic mode instruction environment, the <strong>Collector</strong> assumes that the control bank will<br />

not normally be unbased by means of an LIJ, LDJ, or LBJ for another bank. In the<br />

extended mode instruction mode environment, this assumption cannot be made.<br />

If a control bank is not specified, the <strong>Collector</strong> selects an initially-based bank to be the<br />

control bank in the order of<br />

1. Main D bank based on the BDR2 (1100/60, 1100/70, 1100/80 systems) or B14<br />

(extended mode architecture)<br />

2. Utility D bank based on the BDR3 (1100/60, 1100/70, 1100/80 systems) or B15<br />

(extended mode architecture)<br />

3. Main I bank based on the BDR0 (1100/60, 1100/70, 1100/80 systems) or B12<br />

(extended mode architecture)<br />

4. Utility I bank based on the BDR1 (1100/60, 1100/70, 1100/80 systems) or B13<br />

(extended mode architecture)<br />

4.4.4. Element Inclusion<br />

All of the rules of element inclusion and file searching for bank-implied collections are<br />

applicable to bank-named collections with a few important additions. When banks are<br />

not named in the <strong>Collector</strong> symbolic, any element to be included is split, with its odd<br />

location counters going to the I bank (instruction area) and its even counters to the D<br />

bank (data area). However, in a bank-named collection, in addition to naming an element<br />

for inclusion, you can also designate which location counters of the element are to be<br />

included within a bank. Normally, the selected location counters of an element are<br />

determined by the location counter set that is active at the time the element is named<br />

for inclusion (see 4.2.3). The selection can be overridden on an individual basis by using<br />

the $lcs field for the element named on the IN directive (see 3.1.1). Thus, the element<br />

name can appear on several IN directives, but different location counters must be<br />

included each time the element is named for global inclusion.<br />

All location counters of an element are included in a collection. Therefore, if an element<br />

has a location counter that was not specified for inclusion, that location counter is placed<br />

in the control bank.<br />

Example<br />

IBANK I1<br />

BANKINFO INITIAL(BDR0),DYNAMIC<br />

$1,5<br />

IN ELTA<br />

IBANK I2<br />

BANKINFO INITIAL(BDR1),DYNAMIC<br />

$7,9,3<br />

IN ELTB($ODD),ELTA<br />

$ALL<br />

IN ELTC,ELTD<br />

DBANK D1<br />

BANKINFO INITIAL(BDR2),CONTROL<br />

IN ELTA,ELTB<br />

7830 9887–001 4–15


Banking<br />

The following chart shows which location counters of each element are placed in the<br />

various banks:<br />

ELTA<br />

ELTB<br />

ELTC<br />

ELTD<br />

I1 I2 D1<br />

1,5 7,9,3<br />

4–16 7830 9887–001<br />

ODD<br />

ALL<br />

ALL<br />

EVEN,11<br />

EVEN<br />

Note that the even location counters of ELTA and ELTB are placed in D1 since $ODD is<br />

assumed for I banks and $EVEN is assumed for D banks. Also note that all of the odd<br />

location counters for ELTB go to I2, overriding the active location counter set of $7,9,3.<br />

Location counter 11 in ELTA was placed in the control bank because no direction was<br />

given for its placement.<br />

4.4.4.1. Global Elements<br />

An element is global in nature when its entry points are known to any nonlocal elements<br />

in the collection, and when its external references can be satisfied by any nonlocal<br />

element. Because of the global nature of elements, they can be included only once in a<br />

collection. All of the elements in the example in 4.4.4 are global in nature.<br />

4.4.4.2. Local Elements<br />

By specification, an element (or one or more of its location counters) can be made local<br />

to a set of banks and thereby be included in the collection more than once. The locality<br />

of these elements is determined by the specification of a local bank set list on the IN<br />

directive.<br />

Note: An entry-point name can be defined in only one place whether defined by a<br />

<strong>Collector</strong> directive or by a relocatable element.<br />

The locality of an element implies the following:<br />

1. All of the external references in the local element are satisfied only by elements<br />

defined in the set of banks that make up the local bank set list.<br />

2. The external labels (entry points) of the local element satisfy only references by<br />

elements defined in the set of banks that make up the local bank set list.<br />

The local bank set list consists of the banks named in the bank-list on the IN directive<br />

and the bank named on the preceding IBANK or DBANK directive.<br />

The entry points of a local element satisfy only references made by other elements<br />

within the banks to which it is local. No other banks have access to these entry points.<br />

Within a given bank, elements and location counters can be included only once.


Banking<br />

This feature allows duplication of heavily used routines in different banks without<br />

causing entry-point conflicts and without forcing unnecessary repetitive switching of<br />

bank bases to base very short pieces of heavily used code.<br />

Entry points can thus appear many times locally (satisfying references from within the<br />

local bank set), but can appear only once globally (satisfying references from all elements<br />

not named locally). Entry points named on the COR, SNAP, EQU, ENT, and DEF<br />

<strong>Collector</strong> directives apply to the global specification of that entry point.<br />

Any element desired for local inclusion must be named on the IN directive along with the<br />

local bank set list. No implicitly included element can be included locally.<br />

Elements included more than once using local element inclusion must be identical for<br />

each inclusion of the element. To include different elements with identical names or<br />

entry points, use relocatable elements produced by the <strong>Collector</strong> (see 2.2.1).<br />

Example<br />

IBANK I1<br />

IN(I2) ELTA<br />

IN() ELTB<br />

IBANK I2<br />

IN ELTB($1)<br />

IN(I1) ELTB($3)<br />

IBANK I3<br />

IN( ) ELTA,ELTB($3)<br />

DBANK D1<br />

BANKINFO CONTROL<br />

IN ELTA($1),ELTB,ELTC<br />

Figure 4-1 shows how external references from globally included elements for the<br />

various banks in the example are satisfied. For example, an element in bank I3<br />

referencing an entry point defined under location counter 1 of element ELTB would<br />

receive the definition of that entry point in bank I2 since location counter 1 of ELTB is not<br />

included in bank I3, but is included globally in bank I2. Location counters that are not<br />

shown for a bank are undefined for the element in that bank.<br />

Figure 4–1. Bank of Global <strong>Reference</strong>s<br />

7830 9887–001 4–17


Banking<br />

<strong>Reference</strong>s made by locally included elements follow the same rules, except that the<br />

defining bank must be in the locally included element’s bank list. For example, if an<br />

element in bank I1 references an entry point in element ELTC, the referencing element<br />

must either be made local to banks I1 and D1, or it must be made global.<br />

4.4.4.3. Local-Global Conflicts<br />

A situation can arise where a conflict occurs between the local nature of an element, its<br />

entry points and external references, and their global nature.<br />

A local-global conflict occurs when a reference has been made to a location counter of<br />

an element and that location counter appears in more than one place. The reference can<br />

either be a reference to an entry point or a reference made by means of the relocation<br />

information in the text. If there is no reference to a location counter included both locally<br />

and globally, there is no local-global conflict.<br />

The local-global conflict presents a problem to the <strong>Collector</strong>, because it cannot determine<br />

which value to place in the reference. When a local-global conflict occurs, a message is<br />

printed.<br />

Examples:<br />

IBANK I1<br />

IN E1<br />

IBANK I2<br />

$ALL<br />

IN(I1) E2<br />

IBANK I3<br />

$ALL<br />

IN E2<br />

In this example, element E2 and its entry points are local to I banks I1 and I2. It is also<br />

global because of its explicit inclusion in I bank I3 (that is, the entry points of element E2<br />

are also defined in I bank I3). If element E1 references one of the entry points of E2, the<br />

<strong>Collector</strong> does not know if it should return the local definition or the global definition for<br />

the reference.<br />

IBANK I1<br />

IN E1<br />

IBANK I2<br />

IN(I1) E2<br />

IBANK I3<br />

IN(I1) E2<br />

This example shows another conflict that the <strong>Collector</strong> cannot resolve. E2 is defined<br />

locally twice (to I banks I1 and I2 and to I banks I1 and I3). Therefore, if E1 references an<br />

entry point in E2, the <strong>Collector</strong> cannot determine which definition it should use.<br />

4.4.5. Element Placement<br />

An element is included in a collection because it is either<br />

4–18 7830 9887–001


1. Explicitly included (named on an IN directive)<br />

Banking<br />

2. Implicitly included (through the library search sequence it has been found to satisfy<br />

external references in elements already included in the collection)<br />

Explicitly included elements are placed in the bank that is named on the preceding<br />

IBANK or DBANK directive.<br />

Although elements can be split by location counters between banks, the entire element,<br />

that is, all its location counters, are included somewhere in the absolute element. If all of<br />

the location counters of an explicitly included element are not specified on IN directives<br />

or on $lcs directives, remaining location counters are placed in the control bank (see<br />

4.4.3).<br />

The placement of implicitly included elements is dependent upon the placement of the<br />

referencing elements. For bank-implied collections, the implicitly included elements are<br />

split with odd location counters to the I bank and even location counters to the D bank.<br />

For bank-named collections, the following conditions apply:<br />

1. One bank<br />

The location counters of the referencing elements can be anywhere, and implicitly<br />

included elements are entirely included in the bank.<br />

2. Two banks based only on BDR0 and BDR2, and the banks are not dynamic<br />

The location counters of the referencing elements can be anywhere, and implicitly<br />

included elements are split, with odd location counters to the I bank and even<br />

location counters to the D bank.<br />

3. Conditions of 2 not met<br />

The location counters of the referencing elements are all in one bank, and implicitly<br />

included elements are split, with odd location counters to the referencing bank and<br />

even location counters to the control bank.<br />

4. Conditions of 2 not met<br />

The location counters of the referencing elements are in more than one bank, and<br />

implicitly included elements are placed entirely in the control bank.<br />

The only way to override the <strong>Collector</strong>’s placement of implicitly included elements is to<br />

use formats 2 or 4 of the LIB directive (see 3.2.1).<br />

Condition 3 does not apply to references from implicitly included elements. Consider the<br />

following situation:<br />

7830 9887–001 4–19


Banking<br />

Element CALL is contained entirely in one bank and the requirements of condition 2 are<br />

not met. Because of this, the location counters of DEF1 are split, with the odd ones<br />

placed in the referencing bank and the even ones placed in the control bank.<br />

When the references of element DEF1 are processed and DEF2 is included in the<br />

collection, condition 4 applies because DEF1 (the referencing element) is not contained<br />

entirely in one bank. All of the location counters of DEF2 are placed in the control bank.<br />

4.5. Bank Switching for Basic Mode<br />

Your program can switch control between banks as needed. When the bank is already<br />

based, a jump to an entry point suffices. When the bank is not based, the bank must be<br />

based by means of the LBJ, LIJ, or LDJ instructions.<br />

For an expanded discussion on bank switching techniques, see the Exec System<br />

Software Common Banks <strong>Programming</strong> Guide.<br />

4.5.1. IBJ$/DBJ$<br />

IBJ$ and DBJ$ are <strong>Collector</strong>-defined symbols that are used in the bank switching<br />

operation. When the <strong>Collector</strong> encounters IBJ$ (DBJ$), it determines if an LMJ<br />

instruction or LIJ (LDJ) instruction should be generated. In general, an LMJ instruction is<br />

generated if the entry point to which the jump will be made is contained in the same<br />

bank in which the call occurs. An LIJ (LDJ) instruction is generated if the entry point is in<br />

a different bank from the calling bank. Further details concerning the situations governing<br />

the generation of these instructions are discussed in 4.5.5.<br />

IBJ$ (DBJ$) is not an assembler instruction, but an external reference you pass to the<br />

<strong>Collector</strong> in the text of the relocatable element. Bits 0 through 9 of the text word must<br />

be relocated by the external reference “IBJ$” (“DBJ$”).<br />

An assembler procedure that generates the correct external reference should include the<br />

following (DBJ$ (LDJ) will no longer be mentioned, since anything that applies to IBJ$<br />

(LIJ) applies to it):<br />

IBJ* PROC 1,1<br />

F FORM 10,4,4,18<br />

F IBJ$,IBJ(1,1),IBJ(1,3),IBJ(1,2)<br />

END<br />

4–20 7830 9887–001


where:<br />

4.5.2. BBJ$<br />

IBJ(1,1) is the a field (must be an X register).<br />

IBJ(1,2) is the u field.<br />

IBJ(1,3) is the x field.<br />

Banking<br />

BBJ$ is a <strong>Collector</strong>-defined symbol that is used in the bank switching operation. It is<br />

identical to IBJ$ except that an LBJ instruction is generated instead of an LIJ instruction.<br />

When the <strong>Collector</strong> encounters BBJ$, it determines if an LBJ instruction or an LMJ<br />

instruction should be generated. An LMJ instruction is generated if the entry point to<br />

which the jump will be made is contained in the same bank in which the call occurs. An<br />

LBJ instruction is generated if the entry point is in a different bank from the calling bank.<br />

An assembler procedure to generate the correct external reference should include the<br />

following:<br />

BBJ* PROC 1,1<br />

F FORM 10,4,4,18<br />

F BBJ$,BBJ(1,1),BBJ(1,3),BBJ(1,2)<br />

END<br />

Where:<br />

BBJ(1,1) is the a field (must be an X register).<br />

BBJ(1,2) is the u field.<br />

BBJ(1,3) is the x field.<br />

Here is an example of a typical call:<br />

LXI,U X11,BDICALL$+MAPBDR$+label<br />

BBJ X11,label<br />

BDICALL$ and MAPBDR$ are <strong>Collector</strong>-defined tags (see 4.5.3 and 4.5.4).<br />

4.5.3. Use of MAPBDR$<br />

MAPBDR$ must be used with BDICALL$ or BDIREF$. The tag MAPBDR$ tells the<br />

<strong>Collector</strong> to return the BDR for the bank in which the associated label is defined. This<br />

facilitates specification of the BDR for LBJ instructions. If MAPBDR$ is used without<br />

BDICALL$ or BDIREF$, it is ignored.<br />

MAPBDR$ should be used in the following format:<br />

LXI,U X11,BDICALL$+MAPBDR$+label<br />

7830 9887–001 4–21


Banking<br />

or<br />

LXI,U X11,BDIREF$+MAPBDR$+label<br />

The BDR returned is the value specified on the IBANK or DBANK directive for the bank<br />

containing the label. For more information on BDR specification, refer to 4.2.1.<br />

4.5.4. Use of the BDI with IBJ$/DBJ$/BBJ$<br />

When using the LIJ instruction, your program must place the BDI of the destination bank<br />

in H1 of the X register used in the instruction. The BDI is a unique (collection-dependent)<br />

number given by the <strong>Collector</strong> to all of the banks in a collection. In the case of common<br />

banks, it is a unique number registered in the system element SYS$*RLIB$.CERU$ or in<br />

the CBEP$$ element of the program’s product file. The use of the BDI by the Exec is a<br />

method for identifying a bank for loading.<br />

It is not advisable to hard-code the BDI in H1 of the X register used in the IBJ$<br />

instruction because the BDI could change if the collection was rearranged or if CERU$<br />

changed. For these reasons, it is possible to pass the <strong>Collector</strong> a set of specifications<br />

that direct it to find the proper BDI. Three <strong>Collector</strong>-defined symbols are used for this<br />

purpose. The <strong>Collector</strong> resolves them as follows:<br />

• BDI$<br />

BDI for the bank in which the reference is made.<br />

• BDIREF$<br />

BDT level and BDI for the bank in which the associated label is defined. If the value<br />

of the associated label is an absolute 36-bit number, the lower 18 bits are used (H2).<br />

• BDICALL$<br />

Same as BDIREF$, unless the collection is bank-implied or the reference is in the<br />

control bank or in the same bank in which the label is defined. In these cases, the<br />

value is zero. If the value of the associated label is an absolute 36-bit number, the<br />

upper 18 bits are used (H1).<br />

In conjunction with IBJ$, these symbols are used as follows (X11 is used only for these<br />

examples; any X register can be used):<br />

LXI,U X11,BDICALL$+label<br />

IBJ X11,label<br />

In the preceding example, IBJ refers to a call of the procedure in 4.5.1.<br />

BDICALL$ must precede the label in the relocatable; that is, label+BDICALL$ will not<br />

work correctly. If the label is a complex expression, the last relocatable value in the<br />

expression is used to determine the value of BDICALL$+label (See 4.5.5 for a discussion<br />

of BDICALL$.)<br />

BDI$ is not normally used for bank switching operations. It is used when the BDI of the<br />

currently executing bank is required.<br />

4–22 7830 9887–001


Banking<br />

BDIREF$ must precede the label in the relocatable; that is, label+BDIREF$ will not work<br />

correctly. BDIREF$ is used when you are certain that the bank to which control is to be<br />

transferred will not be based when the reference is made, and hence is used with an<br />

explicit LIJ, LDJ, or LBJ instruction. Also see 4.7.<br />

The format returned for BDIREF$ and BDICALL$ is affected by the TYPE EXEC directive.<br />

For more information regarding TYPE EXEC collections, see Appendix A.<br />

4.5.5. TYPE IBJLNK and BDICALL$/IBJ$<br />

4.5.5.1. Using BDICALL$ and IBJ$<br />

BDICALL$ and IBJ$, together with the TYPE IBJLNK parameters, provide a means of<br />

coding subroutines and their calls so that the correct linkages and BDICALL$/IBJ$<br />

parameters can be generated at collection time rather than at compile time. When<br />

coding calls to subroutines, especially for library routines used in high-level languages,<br />

the programmer does not need to know whether the subroutine is to be collected in the<br />

same bank as the call, whether it is to be collected in a different bank in the program, or<br />

whether it resides in a common bank.<br />

BDICALL$ and IBJ$ are used in the following format, where the instructions must be in<br />

the order shown but other instructions can be placed between the LXI and IBJ<br />

instructions. I$BJ is a SYSLIB procedure that generates a word in instruction format with<br />

bits 0 through 9 (the f and j fields) relocated by the external reference IBJ$. X11 is used<br />

for convenience in the examples; however, any index register could be used.<br />

Format<br />

LXI,U X11,BDICALL$+label<br />

IBJ X11,label<br />

In the preceding example, IBJ refers to a call of the procedure in 4.5.1.<br />

4.5.5.2. System-Provided Procedures<br />

The system-defined procedure calls I$BJ and D$BJ generate the IBJ$ (DBJ$) calling<br />

sequences used in bank switching.<br />

Format<br />

I$BJ Xn,ep-name[,Xx]<br />

D$BJ Xn,ep-name[,Xx]<br />

where:<br />

Xn<br />

is an X register.<br />

ep-name<br />

7830 9887–001 4–23


Banking<br />

Xx<br />

is an entry point defined as either a simple address or as an absolute value in the<br />

form<br />

ep-name* $EQU bdi*/18+ep-value<br />

(bdi and ep-value must not be external references)<br />

is an optional X register used in LMJ/LIJ.<br />

The I$BJ and D$BJ procedures generate the following code:<br />

LXI,U Xn,BDICALL$+ep-name .<br />

IBJ$ Xn,ep-name[,Xx] . (or DBJ$ Xn,ep-name[,Xx])<br />

4.5.5.3. Using TYPE IBJLNK<br />

Using TYPE IBJLNK, linkages can be set up to a common routine, where the<br />

BDICALL$/IBJ$ parameters are specified at collection time. The element name on the<br />

IBJLNK directive can contain the absolute values of different tags.<br />

If you use the following MASM instruction and <strong>Collector</strong> directive, and label is defined in<br />

element-name, H1 of the 36-bit absolute value label is placed in H1 of the X register.<br />

MASM Instruction<br />

LXI,U X11,BDICALL$+label<br />

<strong>Collector</strong> Directive<br />

TYPE IBJLNK element-name,address<br />

The IBJ$ reference is then satisfied as LMJ X11,address, where address is the value<br />

found on the TYPE IBJLNK directive (see F.2.1).<br />

The main advantage of TYPE IBJLNK is that you can supply a jump-to address for the<br />

IBJ$ symbol to the <strong>Collector</strong> at collection time. Another advantage is that a dummy<br />

element can be included and used as the TYPE IBJLNK parameter. The values defined<br />

for the entry points in this dummy element override any absolute value definitions of the<br />

entry point found in library elements.<br />

4.5.5.4. Resolution of BDICALL$, IBJ$, and TYPE IBJLNK<br />

Table 4-3 shows how the BDICALL$ and IBJ$ (DBJ$) collector defined symbols are<br />

resolved for different cases.<br />

4–24 7830 9887–001


label Defined<br />

Case 1:<br />

In the same bank<br />

as the reference,<br />

or<br />

In the control<br />

bank, or<br />

In a bank with<br />

the L option<br />

Case 2:<br />

In a bank other<br />

than the bank<br />

where the<br />

reference was<br />

made<br />

Case 3:<br />

As a 36-bit<br />

absolute value:<br />

label* $EQU;<br />

bdi*/1 8+;<br />

ep-value<br />

Case 4:<br />

As a 36-bit<br />

absolute value:<br />

label*$EQU;<br />

bdi*/1 8+;<br />

ep-value<br />

Table 4–3. BDICALL$ and IBJ$ (DBJ$) Resolution<br />

Other<br />

Conditions<br />

OR Collection is<br />

bank-implied<br />

AND Collection is<br />

bank-named<br />

AND Element defining<br />

label is not<br />

specified on<br />

TYPE IBJLNK<br />

AND Element defining<br />

label is specified<br />

on TYPE IBJLNK<br />

4.5.6. BDICALL$/IBJ$ Return<br />

BDICALL$+<br />

label<br />

Satisfied<br />

as:<br />

IBJ$<br />

(DBJ$<br />

)<br />

Satisfi<br />

ed as:<br />

Banking<br />

Calling Sequence<br />

Generated by<br />

<strong>Collector</strong><br />

0 LMJ LXI,U X11,0<br />

BDI of the<br />

bank<br />

defining<br />

label<br />

Value from<br />

H1 of label<br />

Value from<br />

H1 of label<br />

taken from<br />

element<br />

specified on<br />

TYPE<br />

IBJLNK<br />

LIJ<br />

(LDJ)<br />

LIJ<br />

(LDJ)<br />

LMJ X11,label<br />

LXI,U X11,bdi<br />

LIJ X11,label<br />

LXI,U X11,H1 of label<br />

LIJ X11,H2 of label<br />

LMJ LXI,U X11,H1 of label<br />

LMJ X11,address<br />

(from TYPE IBJLNK)<br />

When BDICALL$ and IBJ$ are satisfied in one of the first three ways described in Table<br />

4-3, that is, without the use of a TYPE IBJLNK specification, the called subroutinecan<br />

appropriately determine the type of call and type of return. The type of return is<br />

determined by examining the value passed in the increment portion (H1) of X11, as<br />

follows:<br />

TAG .<br />

S X11,RETURN . Save return address<br />

.<br />

. . Process subroutine<br />

.<br />

7830 9887–001 4–25


Banking<br />

L X11,RETURN . Restore return address<br />

TZ,H1 RETURN . Call by LIJ or LMJ?<br />

LIJ X11,0,X11 . LIJ, return with LIJ<br />

J 0,X11 . LMJ, return with JUMP<br />

4.6. Bank Switching for Extended Mode<br />

Your program can switch control between banks as needed. Register B0 always points<br />

to the current bank (instruction stream). To pass control to a location within the current<br />

bank, use the LOCL instruction. To pass control to a location in a bank other than the<br />

current bank, use the CALL or GOTO instructions.<br />

Registers B2 through B11 are available for user data banks. Registers B12 through B15<br />

can point to either code or data in basic mode but only to data in extended mode. The<br />

LBU instruction is used to load a user B register.<br />

4.6.1. Use of the BDI<br />

When you use the CALL instruction, the operand is the address of a virtual address. H1<br />

of the virtual address contains the LBDI of the target bank and H2 contains the offset<br />

into the bank. Three <strong>Collector</strong>-defined symbols are used for this purpose. The <strong>Collector</strong><br />

resolves them as follows:<br />

• LBDI$<br />

BDT level and BDI for the bank in which the reference is made.<br />

• LBDIREF$<br />

BDT level and BDI for the bank in which the associated label is defined. If the value<br />

of the associated label is an absolute 36-bit number, then the lower 18 bits are used<br />

(H2).<br />

• LBDICALL$<br />

Same as LBDIREF$, unless the collection is bank-implied or the reference is in the<br />

same bank in which the label is defined. In these cases, the value is zero. If the value<br />

of the associated label is an absolute 36-bit number, the upper 18 bits are used (H1).<br />

The BDT level is always formatted in the returned value in the extended mode virtual<br />

address (see 4.2.1 and 6.6).<br />

LBDIREF$ and LBDICALL$ must precede the label in the relocatable; that is,<br />

label+LBDIREF$ or label+LBDICALL$ will not work correctly.<br />

The format returned for LBDI$, LBDIREF$, and LBDICALL$ is affected by the TYPE<br />

EXEC directive (see Appendix A).<br />

If the reference and the label are in different banks, use the CALL instruction with<br />

LBDICALL$. If the reference and the label are in the same bank, use LOCL.<br />

4–26 7830 9887–001


4.6.2. Example Using LOCL and CALL<br />

Banking<br />

Following is an example of the LOCL and CALL instructions. When the program is<br />

executed, it begins in element RB$.BM6. An LBJ instruction is used to jump to the label<br />

EMSTART in element RB$.EM4. Register B2 is used to point to the literal pool.<br />

An LOCL instruction is then used, since the label EM4TAG is within the same bank.<br />

Register A4 is loaded to show that the control was transferred to the label EM4TAG. The<br />

RTN instruction returns to the line after the LOCL instruction. Register A5 is loaded to<br />

show that the control was returned.<br />

A CALL instruction is then executed using LBDICALL$ since the label EM5TAG is in a<br />

different bank. Control is transferred to the element RB$.EM5 at the label EM5TAG.<br />

Register A6 is loaded to show that the CALL worked correctly. The RTN instructions are<br />

followed back and the L$SNAP is performed. After the program execution, A4 contains<br />

4, A5 contains 5, and A6 contains 6.<br />

@ . Assemble extended mode relocatable EM4<br />

@MASM,L ,RB$.EM4<br />

$INCLUDE ’MAXR$’ . Register mnemonics<br />

$EXTEND . Generate extended mode<br />

. instructions<br />

$(3) $LIT B2 .<br />

LITPOOL .<br />

$(1) .<br />

EMSTART* . Entry point<br />

LA,U A2,LITPOOL . Load address of literal<br />

. pool in A2<br />

LXI,U A2,LBDIREF$+LITPOOL . Load bdi of this bank<br />

LBU B2,A2 . Base literal pool on<br />

. register b2<br />

LOCL EM4TAG . Local call<br />

LA,U A5,5 .<br />

CALL (LBDICALL$+EM5TAG,EM5TAG) . Call another bank<br />

RTN . Return to caller<br />

EM4TAG . A local entry point<br />

LA,U A4,4 .<br />

RTN . Return to caller<br />

END .<br />

@EOF<br />

@ . Assemble extended mode relocatable EM5.<br />

@MASM,L ,RB$.EM5<br />

$INCLUDE ’MAXR$’ . Register mnemonics<br />

$EXTEND . Generate extended mode<br />

. instructions<br />

$(1) .<br />

EM5TAG* . Tag<br />

LA,U A6,6 .<br />

RTN .<br />

END .<br />

@EOF<br />

7830 9887–001 4–27


Banking<br />

@ . Assemble basic mode relocatable BM6.<br />

@MASM,L ,RB$.BM6<br />

$INCLUDE ’MAXR$’ . Register mnemonics<br />

$BASIC .<br />

$(3) $LIT .<br />

START* . Begin execution in<br />

. basic mode<br />

LX,U X11,EMSTART . Starting address in<br />

. em routine<br />

LXI,U X11,BDICALL$+EMSTART . BDI of em routine<br />

LBJ X11,0,X11 . Jump to em routine<br />

L$SNAP ’A4-A6’,2,0,0 .<br />

ER EXIT$ .<br />

END START .<br />

@EOF<br />

@PREP RB$.<br />

@MAP,S ,RB$.ABS<br />

NOT TPF$. .<br />

TYPE BLOCKSIZE64 . Required for extended<br />

. mode programs<br />

LIB RB$. .<br />

IBANK EM4BANK . Extended mode bank<br />

BANKINFO EXTENDED<br />

IN EM4 .<br />

IBANK EM5BANK . Extended mode control Bank<br />

BANKINFO EXTENDED<br />

IN EM5 .<br />

IBANK BM6BANK . Basic mode bank<br />

BANKINFO INITIAL(MAINI)<br />

IN BM6 .<br />

@EOF<br />

@XQT RB$.ABS<br />

4.7. BDI and Entry-Point Definitions<br />

Internally, the <strong>Collector</strong> recognizes two types of definitions for BDIs and entry points as<br />

follows:<br />

• Absolute values<br />

BDIs or entry points that have been equated to a value.<br />

• Values defined by <strong>Collector</strong><br />

For BDIs, these are the BDIs assigned by the <strong>Collector</strong> to the banks in the collection.<br />

For entry points, these are also known as relative values or values that are relative to<br />

a location counter.<br />

BDIs of all alternate file common banks are defined in CERU$ or in individual CBEP$$<br />

elements. In addition, entry-point absolute values for use with IBJ$ are defined in<br />

4–28 7830 9887–001


Banking<br />

relocatable elements in compiler libraries that have CBEP$$ as the first 6 characters of<br />

their name. This naming convention allows the use of common banks to be detected so<br />

their BDIs can be placed in a list in the absolute element. When the absolute element is<br />

loaded, the Exec can ensure that any common banks referenced are available. You can<br />

also define banks and entry points using absolute values; however, you should follow the<br />

above naming conventions.<br />

Absolute values must be defined as follows:<br />

bank-name* $EQU bdi<br />

ep-name* $EQU bdi*/18+ep-value<br />

The fields bdi and ep-value can be either a nonrelocatable number or an external<br />

reference (for example, a bank name). However, in each bdi*/18+ep-value, at least one<br />

of the fields must be a nonrelocatable number.<br />

The <strong>Collector</strong> expects the BDI to be in H2 of the absolute value when processing<br />

BDIREF$ and LBDIREF$ and to be in H1 when processing BDICALL$ and LBDICALL$<br />

for an entry point.<br />

Because of this difference, you must use the following command to obtain the BDI for a<br />

bank defined as an absolute value:<br />

LXI,U X11,BDIREF$+bank-name<br />

You must use the following command to obtain the BDI for a bank containing an entry<br />

point defined as an absolute value:<br />

LXI,U X11,BDICALL$+ep-name<br />

When defining the BDIs of common banks in a CBEP$$ element, the appropriate format<br />

must be used (see 6.6). Level 1 is used for alternate file common banks (AFCB). The<br />

formats are:<br />

• For basic mode:<br />

bank-name* $EQU 0400103 . AFCB BDI<br />

entrypt* $EQU 0400103001000 . entry point<br />

• For extended mode:<br />

embank-name* $EQU 0200103 . AFCB BDI<br />

ementrypt* $EQU 0200103001000 .entry point<br />

• For either mode:<br />

MAPBDT$+bankname<br />

BDT level and BDI for the bank named. The BDT level is determined by the <strong>Collector</strong><br />

using the appropriate format. If the referencing bank is an extended mode bank, the<br />

extended mode format (L) is used. If the referencing bank is a basic mode bank, the<br />

basic mode format (E,LS) is used. (See 6.6.) MAPBDT$+bankname is useful for<br />

basing program data banks to be used by a program.<br />

7830 9887–001 4–29


Banking<br />

4.8. Use of BANKINFO AFCB<br />

The BANKINFO directive simplifies the creation of integrated AFCB absolutes. Before<br />

the BANKINFO AFCB(bankname,bdi) attribute was available, you had to package<br />

programs running with or as AFCBs so that the AFCB banks were handled separately<br />

from local banks (such as D-banks). This meant that the AFCB banks were collected<br />

separately from the local banks, and the BDI relationships were defined by entry points<br />

in a CBEP$$ element.<br />

The BANKINFO directive allows you to specify the configured BDI to be used to<br />

reference an AFCB bank within a collection. A reference to an AFCB bank name then<br />

produces the correct BDI for referencing the bank, in the same manner as for local<br />

banks.<br />

User programs that reference an AFCB and do not create it still need a CBEP$$ element<br />

to define the BDIs. This is because AFCBs are not collected as banks within the user<br />

program’s absolute. The AFCB can be considered an external reference from the user<br />

program, not part of it, so the BDIs are needed only by the user programs.<br />

The <strong>Collector</strong> obtains the common bank BDI value for references to entry points in a<br />

common bank for the following <strong>Collector</strong>-defined symbols: BDI$, BDIREF$, BDICALL$,<br />

LBDI$, LBDICALL$, LBDIREF$, and MAPBDT$. The <strong>Collector</strong> assumes Level 1 for a<br />

bank created with a BANKINFO AFCB(bankname,bdi) directive. All common banks are<br />

maintained at Level 1 (see 6.6). For more information on common banks, refer to the <strong>OS</strong><br />

1100 Exec System Software Common Banks <strong>Programming</strong> Guide.<br />

If a bank list is necessary, the name specified on the BANKINFO directive should be<br />

used, not the name on the BANK directive.<br />

Example 1<br />

ep* Res 1<br />

.<br />

.<br />

.<br />

MYFILE.CALL<br />

LXI,U X11,BDICALL$+EP<br />

.<br />

.<br />

.<br />

LXI,U X11,BDIREF$+EP<br />

.<br />

.<br />

.<br />

LXI,U X11,LBDICALL$+EP<br />

.<br />

.<br />

.<br />

LXI,U X11,LBDIREF$+EP<br />

4–30 7830 9887–001


MYFILE.BDI<br />

.<br />

.<br />

.<br />

MYFILE.MAPBDT<br />

MYFILE.MAP<br />

LXI,U X11,BDI$<br />

.<br />

.<br />

.<br />

LXI,U X11,LBDI$<br />

.<br />

.<br />

.<br />

LXI,U X11,MAPBDT$+CBNAME3<br />

.<br />

.<br />

.<br />

IBANK I1<br />

BANKINFO AFCB(CBNAME,0400444)<br />

IN MYFILE.EP<br />

IBANK I2<br />

BANKINFO INITIAL(MAINI)<br />

IN MYFILE.CALL<br />

DBANK D1<br />

BANKINFO CONTROL,INITIAL(MAIND)<br />

END<br />

Resolutions of the BDI value:<br />

BDICALL$ = 0400444<br />

BDIREF$ = 0400444<br />

LBDICALL$ = 0200444<br />

LBDIREF$ = 0200444<br />

Banking<br />

CBNAME is the name of the common bank. Use this name to install the common bank<br />

with COMUS. I1 becomes an entry point with an absolute value of 0400444.<br />

Example 2<br />

IBANK I1<br />

BANKINFO AFCB(CBNAME2,0400555)<br />

IN MYFILE.BDI<br />

DBANK D2<br />

BANKINFO CONTROL,INITIAL(MAIND)<br />

END<br />

7830 9887–001 4–31


Banking<br />

Resolutions of the BDI value:<br />

BDI$ = 0400555<br />

LBDI$ = 0200555<br />

Example 3<br />

IBANK I1<br />

BANKINFO AFCB(CBNAME3,0400666)<br />

IBANK I2<br />

IN MYFILE.MAPBDT<br />

DBANK D1<br />

BANKINFO CONTROL,INITIAL(MAIND)<br />

END<br />

Resolution of the BDI value:<br />

MAPBDT$ = 0400666<br />

The basic mode format is used since I2, the referencing bank, is a basic mode bank.<br />

Example 4<br />

IBANK I1<br />

BANKINFO AFCB(CBNAME3,0400333)<br />

IBANK I2<br />

BANKINFO EXTENDED<br />

IN MYFILE.MAPBDT<br />

DBANK D1<br />

BANKINFO CONTROL,INITIAL(MAIND)<br />

END<br />

Resolution of the BDI value:<br />

MAPBDT$ = 0200333<br />

The extended mode format is used since I2, the referencing bank, is an extended mode<br />

bank.<br />

The following is an example that shows the distinctions between the CBEP$$<br />

mechanism and the BANKINFO mechanism.<br />

Elements<br />

CBEP$$ element<br />

CB1* EQU 0400444<br />

CB2* EQU 0400555<br />

EP0* EQU 0400444001000<br />

EP1* EQU 0400444001001<br />

EP2* EQU 0400555001000<br />

EP3* EQU 0400555001001<br />

4–32 7830 9887–001


MYFILE.CALL<br />

LXI,U X11,BDICALL$+EP0<br />

.<br />

.<br />

.<br />

LXI,U X11,BDICALL$+EP3<br />

.<br />

.<br />

.<br />

MYFILE.JUMPVECTOR<br />

JV1* J ABC<br />

JV2* J DEF<br />

.<br />

.<br />

.<br />

MYFILE.JUMPVECTOR2<br />

JV3* J GHI<br />

JV4* J JKL<br />

.<br />

.<br />

.<br />

Here is a collection to create common banks (before BANKINFO):<br />

TYPE COMMONBANK<br />

IBANK,DR I1,01000<br />

FRSTIN MYFILE.JUMPVECTOR<br />

IN -----<br />

IBANK,DR I2,03000<br />

FRSTIN MYFILE.JUMPVECTOR2<br />

IN -----<br />

IBANK,DV I3<br />

IN MYFILE.CALL<br />

DBANK,DCV D1<br />

IN CBEP$$xxx<br />

IN -----<br />

END<br />

Here is a collection to execute common banks (before BANKINFO):<br />

IBANK,XM CB1<br />

IBANK,XU CB2<br />

IBANK,DV I1,01000<br />

FRSTIN MYFILE.JUMPVECTOR<br />

IN -----<br />

IBANK,DV I2,03000<br />

FRSTIN MYFILE.JUMPVECTOR2<br />

IN -----<br />

Banking<br />

7830 9887–001 4–33


Banking<br />

IBANK,D I3<br />

IN MYFILE.CALL<br />

DBANK,DCM D1<br />

IN CBEP$$xxx<br />

IN -----<br />

END<br />

Description of CBEP$$ mechanism<br />

The COMUS INSTALL command associates the bank name with these BDI values:<br />

I1 – 0400444<br />

I2 - 0400555<br />

The names used to reference the bank, however, are given by the CBEP$$ definitions of<br />

CB1 and CB2.<br />

Here are the resolutions of the element CALL by the CBEP$$ element:<br />

LXI,U X11,BDICALL$+EP0 => 0400444001000<br />

LXI,U X11,BDICALL$+EP3 => 0400555001001<br />

Following is the collection to create and execute the common bank using BANKINFO:<br />

TYPE COMMONBANK<br />

IBANK I1,01000<br />

BANKINFO DYNAMIC,READONLY,AFCB(CB1,0400444),INITIAL(MAINI)<br />

FRSTIN MYFILE.JUMPVECTOR<br />

IN -----<br />

IBANK I2,01000<br />

BANKINFO DYNAMIC,READONLY,AFCB(CB2,0400555) ,INITIAL(UTILI)<br />

FRSTIN MYFILE.JUMPVECTOR2<br />

IN -----<br />

IBANK I3<br />

BANKINFO DYNAMIC<br />

IN MYFILE.CALL<br />

DBANK D1<br />

BANKINFO DYNAMIC,CONTROL,INITIAL(MAIND)<br />

IN -----<br />

END<br />

Description of BANKINFO mechanism:<br />

The COMUS INSTALL command associates the bank name with these BDI values:<br />

CB1 – 0400444<br />

CB2 - 0400555<br />

These AFCBs can now be referenced by the bank name (CB1 and CB2), so that the<br />

CBEP$$ definition is unnecessary.<br />

Here are the resolutions of the element CALL by the <strong>Collector</strong>:<br />

4–34 7830 9887–001


LXI,U X11,BDICALL$+EP0 => 0400444+001000<br />

LXI,U X11,BDICALL$+EP3 => 0400555+001001<br />

Banking<br />

No CBEP$$ element is necessary. The INITIAL attribute causes the common bank rather<br />

than the local bank, to be initially based at initial load time.<br />

4.9. MAPCALL$, MAPGOTO$, and the VECTOR<br />

Attribute<br />

The <strong>Collector</strong> provides an assembler procedure, MAP$CALLGOTO, which generates the<br />

<strong>Collector</strong>-defined tags MAPCALL$ and MAPGOTO$. The user-visible interface is as<br />

follows:<br />

MAPGOTO$ e<br />

MAPCALL$ e<br />

where e is an external entry point or tag relocated by a location counter + offset.<br />

4.9.1. MAPCALL$<br />

Basic Mode Output<br />

The MAPCALL$ procedure entry generates the respective output words for basic mode:<br />

MI$ FORM 10,4,4,2,16<br />

LXI,U X11,BDIVECT$<br />

MI$ MAPCALL$,0,0,0,e<br />

where:<br />

MAPCALL$<br />

is an XREF that can be specifically recognized by the <strong>Collector</strong>. The function is similar<br />

to IBJ$/DBJ$/BBJ$.<br />

BDIVECT$<br />

is a <strong>Collector</strong>-defined tag that is resolved by the <strong>Collector</strong> to the BDI value of the link<br />

vector bank.<br />

Extended Mode Output<br />

The MAPCALL$ procedure entry generates the respective output word for extended<br />

mode:<br />

MI$ FORM 10,4,4,2,16<br />

MI$ MAPCALL$,0,0,0,e<br />

where MAPCALL$ is an XREF that can be specifically recognized by the <strong>Collector</strong>. The<br />

function is similar to IBJ$/DBJ$/BBJ$.<br />

7830 9887–001 4–35


Banking<br />

4.9.2. MAPGOTO$<br />

Basic Mode Output<br />

The MAPGOTO$ procedure entry generates the respective output words for basic<br />

mode:<br />

MI$ FORM 10,4,4,2,16<br />

LXI,U X11,010000+BDIVECT$ . 010000 sets the<br />

MI$ MAPGOTO$,0,0,0,e . IS field to 1<br />

where:<br />

MAPGOTO$<br />

is an XREF that can be specifically recognized by the <strong>Collector</strong>. The function is similar<br />

to IBJ$/DBJ$/BBJ$.<br />

BDIVECT$<br />

is a <strong>Collector</strong>-defined tag that is resolved by the <strong>Collector</strong> to the BDI value of the link<br />

vector bank.<br />

Extended Mode Output<br />

The MAPGOTO$ procedure entry generates the respective output word for extended<br />

mode:<br />

MI$ FORM 10,4,4,2,16<br />

MI$ MAPGOTO$,0,0,0,e<br />

where MAPGOTO$ is an XREF that can be specifically recognized by the <strong>Collector</strong>. The<br />

function is similar to IBJ$/DBJ$/BBJ$.<br />

4.9.3. MAP$CALLGOTO<br />

The procedure provided by the <strong>Collector</strong>, MAP$CALLGOTO, performs some assemblytime<br />

error detection on parameter e. Errors (E flags) are generated at assembly time if<br />

the parameter e has<br />

• No relocation attached<br />

• A form attached<br />

• Multiple relocation attached<br />

Each user entry point or tag with relocation by location counter + offset that occurs in<br />

the same word as MAPCALL$ or MAPGOTO$ receives special handling.<br />

MAPCALL$<br />

If the target location is in a different bank than the MAPCALL$ word and the<br />

referencing bank is an extended mode bank, an operation code, op code (f-j-a), for<br />

4–36 7830 9887–001


Banking<br />

the CALL instruction is provided. The target location receives link vector processing.<br />

The offset into the link vector for the entry point and the B (and X) register from the<br />

BANKINFO directive are used to complete the instruction.<br />

See 4.10 for more information about link vector processing.<br />

If the target location is in a different bank than the MAPCALL$ word and the<br />

referencing bank is a basic mode bank, an op code for the LBJ instruction is<br />

provided. The target location receives link vector processing. The <strong>Collector</strong> fills in the<br />

u field with the offset into the GOTO list in the link vector bank. The GOTO list is<br />

described in later paragraphs.<br />

If the target location is in the same bank as the MAPCALL$ word and the<br />

referencing bank is an extended mode bank, an op code for the LOCL instruction is<br />

provided. The target location does not receive link vector processing. The actual<br />

address of the target location is used to complete the instruction.<br />

If the target location is in the same bank as the MAPCALL$ word and the<br />

referencing bank is a basic mode bank, then processing depends on whether the<br />

collection is TYPE EXEC. If the collection is not TYPE EXEC, an op code for the LMJ<br />

instruction is provided. The target location does not receive link vector processing.<br />

The actual address of the target location is used to complete the instruction. For<br />

TYPE EXEC collections, an op code for the LBJ instruction is provided. The target<br />

location receives link vector processing. The <strong>Collector</strong> fills in the u field with the<br />

offset into the GOTO list in the link vector bank.<br />

MAPGOTO$<br />

If the target location is in a different bank than the MAPGOTO$ word and the<br />

referencing bank is an extended mode bank, an op code for the GOTO list is<br />

provided. The target location receives link vector processing. The offset into the link<br />

vector for the entry point and the B (and X) register from the BANKINFO directive are<br />

used to complete the instruction.<br />

If the target location is in a different bank than the MAPGOTO$ word and the<br />

referencing bank is a basic mode bank, an op code for the LBJ instruction is<br />

provided. The target location receives link vector processing. The <strong>Collector</strong> fills in the<br />

u field with the offset into the GOTO list in the link vector bank.<br />

If the target location is in the same bank as the MAPGOTO$ word and the<br />

referencing bank is an extended mode bank or a basic mode bank, an op code for J<br />

is provided, but the target location does not receive link vector processing. The 16-bit<br />

basic mode address of the target location is used to complete the instruction.<br />

Table 4-4 summarizes reference resolutions with MAPCALL$ and MAPGOTO$.<br />

7830 9887–001 4–37


Banking<br />

Table 4–4. MAPCALL$ and MAPGOTO$ Resolutions<br />

Resolution<br />

MAPCALL$<br />

Different bank<br />

MAPCALL$<br />

Same bank<br />

MAPGOTO$<br />

Different bank<br />

MAPGOTO$<br />

Same bank<br />

CALL<br />

Referencing bank is<br />

extended mode<br />

lv processing offset into lv B<br />

and X register<br />

LOCL<br />

address of e<br />

GOTO<br />

lv processing offset into lv B<br />

and X register<br />

J (extended mode)<br />

address of e<br />

4.10. Link Vector Processing<br />

Referencing bank is<br />

basic mode<br />

4–38 7830 9887–001<br />

LBJ<br />

lv processing offset into<br />

goto list<br />

LMJ<br />

address of e<br />

LBJ - TYPE EXEC<br />

lv processing offset into<br />

goto list<br />

LBJ<br />

lv processing offset into<br />

goto list<br />

J (basic mode) address of<br />

e<br />

If link vector processing is needed, the <strong>Collector</strong> assigns a link vector offset and a B (and<br />

X) register to the entry point. These values are then used to complete the instruction<br />

being built and the link vector.<br />

The link vector contains the L,BDI, OFFSET virtual address of the target location. If there<br />

are any basic mode banks, the link vector is doubled in size. The second half is the<br />

GOTO list, and contains GOTO instructions, which point to the respective entries in the<br />

first half of the link vector by using the B (and X) register specified on the BANKINFO<br />

directive.<br />

The first B (and X) register specified on the BANKINFO directive is used for the first 4096<br />

link vector entries created, the second B (and X) register is used for the next 4096, and<br />

so forth. If the number of B registers needed is greater than the number of B registers<br />

supplied, an error occurs. The same B register specification is used for the second half of<br />

the link vector used for basic mode, which also starts on a 4096-word boundary.<br />

Only one BANKINFO directive specifying a link vector bank per collection is allowed. If<br />

more than one is specified, an error message is printed.<br />

The link vector is always allocated on 4K boundaries. Each 4K boundary associates with a<br />

B register specified on a BANKINFO directive with the VECTOR attribute specified.<br />

The upper limit of the link vector bank must be less than 65K if addressed by a basic<br />

mode bank.


Banking<br />

The link vector bank must be a noninitially based extended mode dynamic bank. The<br />

<strong>Collector</strong> internally sets the bank as extended mode and dynamic. The user can specify<br />

that the bank is dynamic, extended, read-only, or overridden minimum address by<br />

specifying the D, N, R, or O options respectively on the BANK directive or by specifying<br />

the DYNAMIC, EXTENDED, READONLY or OVERRIDEMIN attributes on the BANKINFO<br />

directive.<br />

7830 9887–001 4–39


Banking<br />

4–40 7830 9887–001


Section 5<br />

Program Parameter Specification<br />

5.1. TYPE Directive<br />

Purpose<br />

The TYPE directive is used to specify conditions in the created absolute element.<br />

Format<br />

TYPE parameter-1,parameter-2,...,parameter-n<br />

The parameters are described in Table 5-1. Please note that the parameters can appear<br />

in any order on the TYPE directive table 5-1.<br />

Table 5–1. Parameters Specified with the TYPE Directive<br />

Parameters Description Use of Parameters by TYPE Directive<br />

SETAFCM Set arithmetic fault<br />

compatibility mode for the<br />

absolute or relocatable<br />

element (set PSR D20 at<br />

initial load). See 5.3.<br />

CLRAFCM Set arithmetic fault<br />

noninterrupt mode for the<br />

absolute or relocatable<br />

element (clear PSR D20 at<br />

initial load). See 5.3.<br />

INSAFCM Set the absolute or<br />

relocatable element to ignore<br />

the setting of SETAFCM and<br />

CLRAFCM. See 5.3.<br />

Parameters SETAFCM, CLRAFCM, and<br />

INSAFCM override any related indicators<br />

present in the individual relocatable<br />

elements included in the collection.<br />

Parameters SETAFCM, CLRAFCM, and<br />

INSAFCM override any related indicators<br />

present in the individual relocatable<br />

elements included in the collection.<br />

Parameters SETAFCM, CLRAFCM, and<br />

INSAFCM override any related indicators<br />

present in the individual relocatable<br />

elements included in the collection.<br />

7830 9887–001 5–1


Program Parameter Specification<br />

Table 5–1. Parameters Specified with the TYPE Directive<br />

Parameters Description Use of Parameters by TYPE Directive<br />

BLOCKSIZE64<br />

Set bank sizes in the absolute<br />

element to 64-word<br />

multiples.<br />

COMMONBANK Suppress certain error<br />

messages regarding the start<br />

address during commonbanked<br />

collections.<br />

When BLOCKSIZE64 is specified on the<br />

TYPE directive, all banks of the program<br />

will have their sizes stored in the bank<br />

load table of the absolute element in 64word<br />

blocks. In the absence of the<br />

BLOCKSIZE64 specification, sizes will be<br />

stored in 512-word blocks. For all basic<br />

mode banks, either block size can be<br />

used; however, Exec main storage use<br />

will be improved if TYPE BLOCKSIZE64<br />

is used. For all extended mode<br />

architecture extended mode banks, TYPE<br />

BLOCKSIZE64 is required by the<br />

hardware if the activity local storage or<br />

the return control stack is used. The<br />

CALL instruction uses both. The values<br />

of the <strong>Collector</strong>-defined symbols,<br />

BLOCKSIZE$, LASTR$, LASTIR$, and<br />

LASTDR$, are also affected by this<br />

parameter.<br />

When COMMONBANK is specified on<br />

the TYPE directive, certain annoying error<br />

messages are suppressed. The error<br />

messages indicate a situation that<br />

intentionally exists when performing<br />

COMMONBANK collections. The<br />

suppression of these messages resolves<br />

some anxiety that often exists when<br />

using an absolute that supposedly<br />

contains errors. However, do not use this<br />

directive to suppress the error messages<br />

unless they should be suppressed.<br />

5–2 7830 9887–001


Program Parameter Specification<br />

Table 5–1. Parameters Specified with the TYPE Directive<br />

Parameters Description Use of Parameters by TYPE Directive<br />

COMSEG Include all text for a common<br />

block in the segment that the<br />

COMMON block is attached<br />

to.<br />

EXEC Allow use of special<br />

directives for the collection of<br />

the Exec.<br />

EXTDIAG Produce extended diagnostic<br />

tables for the absolute<br />

element.<br />

Location counters from many elements<br />

define text included in a common block.<br />

These location counters can be placed in<br />

different segments. The segment at the<br />

common point of the other location<br />

counters contains the actual area to be<br />

occupied by the common block. The<br />

loading of one of the segments<br />

containing text for the common block<br />

causes reinitialization of part of the<br />

common block.<br />

The presence of the COMSEG parameter<br />

causes all location counters defining text<br />

for a common block to be included in the<br />

same segment as the common block<br />

area, thus avoiding any reinitialization of<br />

the common block unless that segment<br />

is reloaded. This parameter is valid only<br />

for bank-named collections. See F.5.<br />

With the introduction of the extended<br />

mode architecture systems, additional<br />

bank descriptor table levels were<br />

defined. The Exec expects to find its<br />

banks at a higher level of the BDT. (See<br />

6.6). When EXEC is specified on the<br />

TYPE directive, the <strong>Collector</strong> sets up this<br />

default level for the collection and<br />

provides additional special processing.<br />

See Appendix A.<br />

Within the absolute element’s diagnostic<br />

tables, the normal entry-point name table<br />

contains only referenced entry points.<br />

The absolute value table contains only<br />

referenced absolute entry points and<br />

does not include any absolute entry<br />

points defined in the elements ERU$ or<br />

CERU$. The specification of EXTDIAG<br />

prevents any of these exclusions so that<br />

all entry points from all the elements are<br />

included in these diagnostic tables.<br />

7830 9887–001 5–3


Program Parameter Specification<br />

Table 5–1. Parameters Specified with the TYPE Directive<br />

Parameters Description Use of Parameters by TYPE Directive<br />

IBJLNK<br />

elementname,address<br />

Extend the use of the<br />

BDICALL$/IBJ$ feature to<br />

allow collection time<br />

definition. element-name is<br />

the name of an element<br />

included in the collection and<br />

address is a symbol or<br />

numeric value representing<br />

an address in the absolute<br />

element. If address is a<br />

symbol, it does not cause<br />

automatic inclusion of an<br />

element from a file named on<br />

a LIB directive.<br />

NPEDIAG Provide the capability to use<br />

the NPE DIAG$ format in<br />

dumps generated for mixed<br />

mode absolutes.<br />

QUARTER Mark the output absolute,<br />

relocatable, or symbolic<br />

element quarter-word<br />

sensitive (set PSR D10 (D32<br />

on the 1100/90 system) at<br />

initial load). See 5.4.<br />

The values specified for element-name<br />

(which must be included in the collection)<br />

and address are used in satisfying<br />

references to BDICALL$ and IBJ$. When<br />

a reference to BDICALL$+label is found<br />

and if label is defined in element-name,<br />

the value of label is used to satisfy the<br />

reference.<br />

Since BDICALL$ always takes the BDI<br />

from H1 of a 36-bit absolute value, label<br />

as defined in element-name must also be<br />

a 36-bit absolute number with the<br />

required value in the upper 18 bits. When<br />

a reference such as IBJ$ X11, label is<br />

used and label is defined in elementname,<br />

the instruction generated is LMJ<br />

X11,address. (See 4.5.5)<br />

The <strong>Collector</strong> provides an indicator in the<br />

Absolute Header Table of an absolute.<br />

This indicator will cause the operating<br />

system to create a dump as though it<br />

came from an "Object Module-Based<br />

Program." When any activity of such an<br />

absolute terminates abnormally<br />

(restricted to activity abnormal<br />

termination), only the activity local banks<br />

are written to the DIAG$ file. The last<br />

activity to terminate will write all program<br />

local banks to the DIAG$ file. (Refer to<br />

the Exec System Software Executive<br />

Requests <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong> section for additional information<br />

describing the operating system action<br />

concerning this absolute indicator.)<br />

This parameter is equivalent to the F<br />

option on the @MAP statement. If the F<br />

or T options are specified, they override<br />

any TYPE QUARTER directives found. If<br />

more than one TYPE QUARTER or TYPE<br />

THIRD directive is found, the first one<br />

found is used.<br />

5–4 7830 9887–001


Program Parameter Specification<br />

Table 5–1. Parameters Specified with the TYPE Directive<br />

Parameters Description Use of Parameters by TYPE Directive<br />

THIRD Mark the output absolute,<br />

relocatable, or symbolic<br />

element third-word sensitive<br />

(clear PSR D10 (D32 on the<br />

1100/90 system) at initial<br />

load). See 5.4.<br />

READONLY Mark the I bank of a bankimplied,<br />

unsegmented, readonly<br />

absolute.<br />

REALTIME All initial loads and reloads of<br />

absolute elements of type<br />

REALTIME are performed at<br />

real-time request priority with<br />

real-time positioning. This<br />

does not affect processor<br />

switching priority.<br />

This parameter is equivalent to the T<br />

option on the @MAP statement. If the F<br />

or T options are specified, they override<br />

any TYPE THIRD directive found.<br />

If more than one TYPE QUARTER or<br />

TYPE THIRD directive is found, the first<br />

one found is used.<br />

The I bank of this bank-implied,<br />

unsegmented collection is marked readonly.<br />

The R option on the IBANK directive<br />

should be used for bank-named<br />

collections.This directive is independent<br />

of any read-only specifications (INFO 9)<br />

contained in the input relocatables. See<br />

4.2.4 for more information about the<br />

INFO groups.<br />

The parameter REALTIME is used to<br />

designate an absolute element as realtime<br />

for storage request purposes. The<br />

switching level and real-time activity<br />

count of the program are not affected<br />

until the program does an ER RT$. The<br />

storage priority of in-storage banks of the<br />

program are always real-time, unless all<br />

of the program’s activities are nonrealtime<br />

and in a long-wait state, in which<br />

case the in-storage banks are marked<br />

long-wait and are able to be swapped.<br />

This parameter has no effect if the user<br />

executing the resulting program is not<br />

authorized to use the real-time capability.<br />

5.2. Absolute Element Arithmetic Fault Mode<br />

Determination<br />

The <strong>Collector</strong> marks the arithmetic fault mode of an absolute element or relocatable<br />

element produced by the <strong>Collector</strong> in the following order of precedence:<br />

1. If explicit sensitivity is given on the TYPE directive, the output element is marked<br />

accordingly, regardless of the sensitivities of the input relocatable elements.<br />

2. If all input relocatable elements have the same sensitivity, the output element is<br />

marked with the sensitivity.<br />

3. If both SETAFCM and CLRAFCM relocatable elements are present, the presence or<br />

absence of INSAFCM for relocatable elements where the sensitivity is not specified<br />

7830 9887–001 5–5


Program Parameter Specification<br />

is irrelevant. In this case (both the SETAFCM and CLRAFCM relocatable elements<br />

are present), the output element is marked with the sensitivity of the relocatable<br />

element containing the program start address; if that element is marked INSAFCM<br />

or if no starting address exists, the output element is marked UNKNOWN.<br />

4. If SETAFCM relocatable elements are present in addition to INSAFCM and for<br />

relocatable elements where the sensitivity is not specified, the output element is<br />

marked SETAFCM.<br />

5. If CLRAFCM relocatable elements are present in addition to INSAFCM and for<br />

relocatable elements where the sensitivity is not specified, the output element is<br />

marked CLRAFCM.<br />

6. If INSAFCM and for conditions where sensitivity is not specified on relocatable<br />

elements existing by themselves, the output element is marked UNKNOWN.<br />

For more information on arithmetic fault compatibility mode, see the processor and<br />

storage reference manual for your Series 1100 and <strong>2200</strong> systems.<br />

5.3. Exec Action Produced by Absolute Element<br />

The arithmetic fault mode sensitivity of the absolute element is used by the Executive in<br />

determining the initial setting of PSR bit D20 on 1100/60, 1100/70, and 1100/80 systems<br />

or bit DB29 on the extended mode architecture systems. For more information about<br />

these bit settings, see the systems processor and storage reference manual for the <strong>OS</strong><br />

1100 system in use at your site. The following actions are taken by the Executive:<br />

1. If the absolute element’s sensitivity is UNKNOWN, the system standard value set at<br />

system generation is used.<br />

2. If the absolute element’s sensitivity is SETAFCM, D20 (DB29) is initially set.<br />

3. If the absolute element’s sensitivity is CLRAFCM, D20 (DB29) is initially cleared.<br />

4. If the absolute element’s sensitivity is INSAFCM, D20 (DB29) is initially cleared.<br />

5.4. Third- and Quarter-Word Sensitivity<br />

If sensitivity is not specified by option or TYPE directive, program sensitivity is<br />

determined as follows:<br />

1. If only third-word sensitive elements and elements with neither T nor F sensitivity<br />

are present, T is used.<br />

2. If only quarter-word sensitive elements and elements with neither T nor F sensitivity<br />

are present, F is used.<br />

3. If both third-word and quarter-word sensitive elements are present, the sensitivity of<br />

the element containing the program starting address as specified by the ENT<br />

directive is used. If the ENT directive is not used, the absolute element is marked as<br />

being not sensitive.<br />

5–6 7830 9887–001


Section 6<br />

Other Directives<br />

6.1. COR — Corrections<br />

Purpose<br />

The COR directive specifies that a location in the absolute element is to be changed<br />

without altering the corresponding location in the original relocatable element. A COR<br />

directive can replace any text word with one of the following:<br />

• An instruction word<br />

• A data word<br />

• A data word containing up to two symbols or values representing the upper and<br />

lower halves of the word<br />

Format<br />

COR element-name<br />

Where element-name specifies the element to which the corrections are to be made.<br />

The correction data images that follow the COR directive can be in any one of the<br />

following formats:<br />

address,lc-1 f j a x h i u<br />

address,lc-1 data-word<br />

address,lc-1 data,lc-2 data,lc-3<br />

where:<br />

address,lc-1<br />

specifies the relative address and location counter of the relocatable element to<br />

which the corrections are being made.<br />

f j a x h i u<br />

specifies field values in instruction word format that are to be inserted. Blanks are<br />

used to separate each part of the instruction correction. The u field can be<br />

− A symbol<br />

− A symbol and offset<br />

7830 9887–001 6–1


Other Directives<br />

− An address in the form integer,lc-2,element-name-1<br />

data-word<br />

data<br />

specifies a numeric value.<br />

specifies a symbol, symbol and offset, or integer correction.<br />

lc-2, lc-3<br />

specifies that the u- or data fields that are relative to the value of the specified<br />

location counter. If omitted, the fields are assumed to contain absolute values.<br />

element-name-1<br />

specifies the element to which the location counter (lc-2) belongs; if omitted, the<br />

element being corrected is assumed.<br />

Description<br />

The corrections contained in a COR directive are ignored if the R option was specified on<br />

the @MAP statement. Any number of correction data images can follow the COR<br />

directive.<br />

COR directives cannot contain instructions that are jumps to any indirectly loaded<br />

segment.<br />

A symbol must be an externalized label.<br />

In bank-named collections, a COR directive and its parameters can apply only to global<br />

elements (see 4.4.4.1 and 4.4.4.2).<br />

Example<br />

1. COR ELT1<br />

2. 000001,01 051 00 00 00 0 0 000011,01,ELT2<br />

3. 000004,01 006 00 015 00 0 0 DUMMY+1<br />

4. 000007,01 0000000000114<br />

5. 000011,01 00000111 DUMMY+1<br />

6. 000006,02 0000112,01 0000013<br />

7. 000011,02 DUMMY+2<br />

8. 000014,02 02,02 DUMMY+2<br />

9. 000016,03 027 00 017 00 0 0 01176,02<br />

Description<br />

1. Corrections to the specified lines in element ELT1 are to be applied to the final<br />

absolute element.<br />

2. The word being collected under element ELT1 at relative address 01, location<br />

counter 1, is modified to set the function code to 051, and the j, a, x, h, and i fields to<br />

6–2 7830 9887–001


Other Directives<br />

zero. The u field is given the value of 011 relative to location counter 1 of element<br />

ELT2.<br />

3. The word appearing at relative address 04 under location counter 1 of ELT1 is<br />

modified to set the function code to 06, the a field to 015, and the u field to<br />

DUMMY+1. The j, x, h, and i fields are set to zero.<br />

4. The word appearing at relative address 07 under location counter 1 is changed to<br />

contain 0114.<br />

5. The word at relative address 011 under location counter 1 is changed to contain<br />

0111 in H1 and DUMMY+1 in H2.<br />

6. The data at relative address 06 under location counter 2 contains the following:<br />

a. H1: 0112, relative to location counter 1 of ELT1<br />

b. H2: 013<br />

7. The data at relative address 011 under location counter 2 receives the value of<br />

symbol and offset, DUMMY+2.<br />

8. The data at relative address 014 under location counter 2 receives the data 02<br />

relative to location counter 2 in H1, and the value of symbol DUMMY+2 in H2.<br />

9. The instruction word appearing at relative address 016 under location counter 3<br />

receives the function code 027, the a field 017, and the u field 01176, relative to<br />

location counter 2 of ELT1. The j, x, h, and i fields are set to zero.<br />

6.2. DEF — External Definition Retention<br />

Purpose<br />

In the collection of an absolute, each DEF directive label specified creates an entry in the<br />

table ENTRY$, which is generated by the <strong>Collector</strong>.<br />

In an R option collection, each label specified remains externalized in the resulting<br />

relocatable element.<br />

All DEF directive parameters are optional.<br />

Format<br />

DEF label-1,label-2,...,label-n<br />

where label-i specifies the external definitions to be retained.<br />

Description<br />

The DEF directive is normally used in R option collections. In an R option collection, the<br />

DEF directive causes the <strong>Collector</strong> to create an entry (for each specified label) in the<br />

entry-point table of the preamble of the resulting relocatable element.<br />

During an absolute collection, the DEF directive causes the <strong>Collector</strong> to build not only the<br />

ENTRY$ table but also the common block table, COMMN$. Both tables can be accessed<br />

7830 9887–001 6–3


Other Directives<br />

by the user program through the <strong>Collector</strong>-defined symbols ENTRY$ and COMMN$.<br />

COMMN$ is also built if the DEF directive is present with no parameters.<br />

If the label specified on the DEF directive is not contained in any explicitly included<br />

elements, a search of the library files is made to find an element in which the label is<br />

defined.<br />

6.3. END — End of Input<br />

Purpose<br />

The END directive specifies the end of the source language input for the <strong>Collector</strong>. The<br />

END directive is optional. If not given, the end of <strong>Collector</strong> source language is indicated<br />

by the next control statement.<br />

Format<br />

END<br />

6.4. ENT — Starting Address Redefinition<br />

Purpose<br />

The ENT directive provides you with the capability of overriding any start addresses<br />

provided by relocatable elements. Upon program initialization (@XQT or @processor call),<br />

control is transferred to the absolute address of the named label.<br />

Format<br />

ENT name<br />

where name must be an externally defined label.<br />

Description<br />

The absolute address of the label found with the ENT directive becomes the starting<br />

address for the resultant absolute. In the absence of an ENT directive, the last start<br />

address encountered in processing the relocatable elements becomes the program start<br />

address. If start addresses are found in both explicitly and implicitly included elements,<br />

the last explicitly included element is used. For compiled languages, a relocatable<br />

element containing a start address usually corresponds to a main program.<br />

The start address must be in the address range of an initially based bank. If there are<br />

initially based common banks, the <strong>Collector</strong> may not be able to ascertain if the start<br />

address is actually within the common banks. Thus, a warning message is printed even<br />

though a TYPE COMMONBANK statement was included in the collection.<br />

If the program contains segments, the start address must be contained in the main<br />

segment as this is the only segment initially loaded at execution time.<br />

6–4 7830 9887–001


6.5. EQU — External <strong>Reference</strong> Definition<br />

Purpose<br />

Other Directives<br />

The EQU directive provides the means to assign, during the collection, a value to an<br />

undefined symbol or to change the value of an external label.<br />

All EQU directive parameters are optional except name-1/value-1.<br />

Format<br />

EQU name-1/value-1,name-2/value-2,...,name-n/value-n<br />

where:<br />

name-i<br />

value-i<br />

specifies the label to be defined.<br />

is the value to be assigned to the preceding name-i parameter. Value-i can be<br />

specified as follows:<br />

− An integer<br />

− A symbol (for example, BOB)<br />

− A symbol with an offset (for example, BOB+4)<br />

Description<br />

Any symbol used in the value parameter must be a bank name, segment name, or<br />

externally defined in one of the elements specified for inclusion in the collection. If you<br />

use a bank name or segment name in the value parameter, the EQU directive must<br />

appear after the BANK or SEG directive. Therefore, no search is performed on files<br />

named on LIB directives. If an external label that duplicates an EQU name is found, the<br />

value of the external label is the value found on the EQU line and a message is printed.<br />

In bank-named collections, only global symbols can be used on the EQU directive (see<br />

4.4.4.1 and 4.4.4.2). A bank or segment name should not be used as name-i and should<br />

appear only once as value-i.<br />

Example<br />

EQU JOE/0200,ABE/SAM+10<br />

The external references JOE and ABE are defined as 0200 8 and SAM+10 10 respectively.<br />

6.6. LEVEL — Specifying the Bank Descriptor Table<br />

(BDT) Level<br />

Purpose<br />

7830 9887–001 6–5


Other Directives<br />

The LEVEL directive allows you to specify a BDT level for the collection. This value is<br />

returned with the <strong>Collector</strong>-defined tags LBDI$, LBDICALL$, LBDIREF$, BDICALL$, and<br />

BDIREF$.<br />

The LEVEL directive was implemented when the Bank Descriptor Table was defined<br />

with 4 levels of address space. Since then the definition of the Bank Descriptor Table<br />

(BDT) has been expanded to 8 levels of address space called levels (L) 0-7. The level L is<br />

intended to indicate scope, with L0 most global and L7 most local. In general, the<br />

<strong>Collector</strong> LEVELs 0-3 still provide this capability matching the first 2 bits, where L = 0, 2,<br />

4, and 6, of the possible 3 bits used to indicate the 8 levels L0-L7. The <strong>Collector</strong> LEVEL<br />

directive does not provide the capability to indicate the odd L levels where L = 1, 3, 5,<br />

and 7.<br />

The default LEVEL for normal collections is 2 and for TYPE EXEC is 1.<br />

Format<br />

LEVEL value<br />

where value must be an integer from 0 to 3.<br />

Description<br />

If multiple LEVEL directives are given in the collection, the last LEVEL directive overrides<br />

all previous LEVEL directives.<br />

The LEVEL directive is not allowed for R option collections.<br />

Different values are associated with each BDT level that is used with the <strong>Collector</strong>defined<br />

symbols LBDI$, LBDICALL$, LBDIREF$, BDICALL$, and BDIREF$. Two formats<br />

are used, one for basic mode (<strong>Collector</strong> symbols BDICALL$ and BDIREF$) and one for<br />

extended mode (<strong>Collector</strong> symbols LBDI$, LBDICALL$, and LBDIREF$).<br />

Extended mode format<br />

L BDI OFFSET<br />

0 2 3<br />

Basic mode format<br />

E BDR L<br />

S<br />

0 1 2 3 4 5 6<br />

17 18<br />

IS BDI OFFSET<br />

17 18 35<br />

Because of the extended mode and basic mode formats, different values for the BDT<br />

level are associated with the <strong>Collector</strong>-defined symbols LBDI$, LBDICALL$, LBDIREF$,<br />

6–6 7830 9887–001<br />

35


Other Directives<br />

BDICALL$, and BDIREF$. The following table shows the relationships between each<br />

level and each format.<br />

The L (Level) field of an extended mode virtual address was expanded from 2 bits to 3<br />

bits to allow for the 8 levels of address space. The basic mode virtual address still has<br />

only 2 bits (E and LS) to select the Bank Descriptor Table. Only the even L values<br />

translate directly to E,LS values as seen in the Level diagram above. The odd L values (L<br />

= 1, 3 ,5, and 7) are translated to E,LS = 1,1. Thus the <strong>Collector</strong> retains its original<br />

implementation where the <strong>Collector</strong> levels 0-3 indicate the first 2 bits of the L field which<br />

are the even L levels 0, 2, 4, and 6.<br />

<strong>Collector</strong> LEVEL value (L bits 0,<br />

1)<br />

Basic Mode (E,LS):<br />

bits 0,3<br />

0 — System 1,1 0,0,0 (0)<br />

1 — Application (TYPE EXEC) 1,0 0,1,0 (2)<br />

2 — Program (default) 0,0 1,0,0 (4)<br />

3 — Activity 0,1 1,1,0 (6)<br />

Extended Mode (L):<br />

bits 0,1,2<br />

The <strong>Collector</strong>-defined symbols can be used in a basic mode or in an extended mode<br />

program.<br />

In an absolute element, the level of a bank is not specified. For absolutes that are<br />

executed as programs, the Exec loads all banks produced by the <strong>Collector</strong> at level 2.<br />

Alternate file common banks (AFCB) are further processed during COMUS installation to<br />

have banks at level 1. Consequently, there is no provision for the creation of an activity<br />

local bank (level 3) by the <strong>Collector</strong> within an absolute. Activity local banks must be<br />

created dynamically and the <strong>Collector</strong>-defined tags can be used to appropriately<br />

manipulate their BDIs for basing.<br />

Programs that were constructed for systems without the extended mode architecture<br />

enhancements use the basic mode virtual address. These programs always have the LS<br />

field clear (zero). This means the virtual addresses with L=0 or L=3 are not available to<br />

these programs.<br />

You can override the LEVEL value for a specific bank by means of the IBANK/DBANK<br />

directive or the BANKINFO directive. For more information, refer to 4.2.1 and 4.2.2.<br />

6.7. MINGAP, MINSIZ — Absolute Element<br />

Optimization<br />

Purpose<br />

The MINGAP and MINSIZ directives enable the user to modify the resultant absolute<br />

element to minimize the I/O transfer time when the program is loaded for execution.<br />

7830 9887–001 6–7


Other Directives<br />

Format<br />

MINGAP value<br />

MINSIZ value<br />

where value specifies any positive integer.<br />

Description<br />

One of the tasks of the <strong>Collector</strong> is to insert information into the absolute element that<br />

describes how the absolute element is structured and how it is to be loaded into main<br />

storage by the Exec loader. This information is conveyed by means of access control<br />

words (ACW). ACWs have the following basic format:<br />

Z length program start address for load<br />

0 1 17 18 35<br />

where:<br />

length<br />

Z<br />

is the number of words to load.<br />

if set, indicates that the loader is to zero-fill the area. ACWs with Z set are called<br />

zero-fill ACWs. ACWs with Z not set are called text ACWs.<br />

Program areas created by assembler RES directives or compiler array declarations do not<br />

contain meaningful data or instructions at load time. Therefore, the <strong>Collector</strong> has two<br />

alternatives when creating the ACW to describe the RES area:<br />

1. The area could be zero-filled by the <strong>Collector</strong>.<br />

This increases the size of the absolute element (affecting the mass storage<br />

requirements of the element) and the number of words that must be transferred by<br />

the loader when bringing the block of text into mass storage for execution.<br />

2. The area could be left void by the <strong>Collector</strong> (bit 0 set in the ACW).<br />

This decreases the size of the absolute element but increases the number of ACWs<br />

used by the loader and, hence, the number of I/O operations needed to transfer the<br />

element to main storage for execution.<br />

The MINGAP and MINSIZ directives give the user control over the creation of the ACWs<br />

as follows:<br />

MINGAP<br />

6–8 7830 9887–001


Other Directives<br />

Any RES area greater than or equal to MINGAP words is left void. Any RES area less<br />

than MINGAP words is zero-filled.<br />

MINSIZ<br />

This directive controls the minimum number of words to be transferred per ACW<br />

(bits 1 through 17 of the ACW).<br />

Both MINGAP and MINSIZ are initially set to 10. The <strong>Collector</strong> uses a combination of<br />

MINGAP and MINSIZ to create the ACWs. In general, text ACWs always describe at<br />

least MINSIZ words and zero-fill ACWs describe at least MINGAP words. If the length of<br />

a text ACW is less than MINSIZ, enough words of the adjacent RES area are converted<br />

by the <strong>Collector</strong> into text words of zeros so that the length of the text ACW equals<br />

MINSIZ. If a RES area is less than MINGAP, it is merged with the two adjoining text<br />

areas and filled with zeros.<br />

Examples<br />

All examples in this section assume MINGAP and MINSIZ = 10. The length in the ACW<br />

is described in octal.<br />

In example 1, the size of the text areas is less than MINSIZ (10). Five words from the<br />

adjacent RES area are zero-filled and combined in the text ACW. Therefore, the zero-fill<br />

ACW describes five words less than the original RES area.<br />

7830 9887–001 6–9


Other Directives<br />

In example 2, the <strong>Collector</strong> initially attempted to create an ACW for area 1 with the<br />

following format:<br />

000012 program address<br />

This, however, left only five words in the RES area. Because 5 < MINGAP (10), the<br />

<strong>Collector</strong> combined area 1, area 2, and area 3 into one ACW and zero-filled the RES area.<br />

ACWs do not cross segment boundaries. If the text and RES areas of the main segment<br />

do not reach to the end of a main storage block, the <strong>Collector</strong> creates a zero-fill ACW to<br />

describe this area. If a RES area occurs at the end of the main segment, the <strong>Collector</strong><br />

does not combine the ACW describing the final RES area with the ACW describing the<br />

area between the end of the user’s segment and the main storage block.<br />

In this example, a main storage block is defined to be 512 or 64 words, depending on the<br />

use of the TYPE BLOCKSIZE64 directive.<br />

6.8. REF — External <strong>Reference</strong> Retention<br />

Purpose<br />

In the collection of an absolute, each REF directive label specified creates an entry in the<br />

XREF$ table, which is generated by <strong>Collector</strong>.<br />

6–10 7830 9887–001


In a R option collection, each label specified remains undefined in the resulting<br />

relocatable element.<br />

All REF directive parameters are optional.<br />

Format<br />

REF label-1,label-2,...,label-n<br />

where label-i specifies the external references to be retained.<br />

Description<br />

Other Directives<br />

During an absolute collection, the REF directive causes the common block table,<br />

COMMN$, to be built in addition to the XREF$ table. Both can be accessed by the user<br />

program by means of the <strong>Collector</strong>-defined symbols XREF$ and COMMN$. No attempt<br />

is made to satisfy any references to the names indicated on REF directives. In an<br />

absolute collection, all references are satisfied with the address of the third word of the<br />

entry created in XREF$ for the label.<br />

In an R option collection, the REF directive causes the <strong>Collector</strong> to create an entry (for<br />

each specified label) in the external reference list of the preamble of the resulting<br />

relocatable element. In an R option collection, all references to the names on the REF<br />

directive are given relocation information.<br />

If an external definition (entry point) that is identical to a REF name is encountered, a<br />

message is printed and the external definition is ignored.<br />

Example<br />

REF VALUE1,VALUE2,SUBROUTINE4<br />

In an absolute collection, the listed external references (VALUE 1, VALUE2, and<br />

SUBROUTINE4) are retained after the collection in the XREF$ table of the resultant<br />

element. Any references to these symbols are satisfied with the address of the third<br />

word of the appropriate entry in the XREF$ table.<br />

In an R option collection, the listed labels are placed in the external reference list of the<br />

preamble.<br />

6.9. SNAP — Snapshot Dumps<br />

Purpose<br />

The SNAP directive specifies the elements in which a snapshot dump is to be taken. The<br />

snap data images immediately following the SNAP directive specify the address within<br />

the element where the snapshot dump is to be taken, the length of the dump, and the<br />

frequency of the dump.<br />

All data image parameters are optional except address-1, lc-1, address-2, and length.<br />

7830 9887–001 6–11


Other Directives<br />

Format<br />

SNAP element-name<br />

where element-name specifies the element name where the dump is taken.<br />

The SNAP data image format is as follows:<br />

address-1,lc-1 address-2 length,registers times,frequency<br />

where:<br />

address-1,lc-1<br />

specifies the address and the location counter within the relocatable element of the<br />

instruction at which the snap request (SLJ SNAP$$) is placed. This field cannot<br />

contain a symbol.<br />

address-2<br />

length<br />

specifies the starting address of the program area to be dumped. This field can be in<br />

the form address, location-counter, element-name, or symbol + offset.<br />

specifies the length in words of the program area to be dumped.<br />

registers<br />

times<br />

specifies which registers are to be dumped. The following codes are used:<br />

00 No registers dumped<br />

01 Only R registers dumped<br />

02 Only A registers dumped<br />

03 Both A and R registers dumped<br />

04 Only X registers dumped<br />

05 Both X and R registers dumped<br />

06 Both X and A registers dumped<br />

07 X, A, and R registers dumped<br />

specifies the maximum number of times the snapshot dump is to be taken. If<br />

omitted, the value of decimal 100 is assumed.<br />

6–12 7830 9887–001


frequency<br />

Other Directives<br />

specifies at what frequency of reference the dump is to be taken. If omitted, the<br />

value 1 (which dumps every time the SNAP directive is encountered) is assumed.<br />

Description<br />

No more than 16 snapshot dumps can be requested in any one collection. If more than<br />

one snapshot of the same element is to be taken, multiple data images can follow the<br />

SNAP directive.<br />

When the dump request instruction SLJ SNAP$$ is inserted at the specified address, the<br />

instruction appearing there is placed in a table in element SNAP$. After the dump is<br />

taken, the saved instruction is executed from within the SNAP$ element as if it had not<br />

been moved. If the saved instruction is a jump instruction, control transfers immediately<br />

to the location specified in the jump instruction; otherwise, control is transferred to the<br />

location following the location from which the SNAP$ element was called. Because the<br />

replaced instruction is executed from within the SNAP$ element, the replaced<br />

instruction must not be<br />

• Altered during program execution<br />

• <strong>Reference</strong>d as data or by indirect addressing<br />

• An SLJ instruction that specifies indirect addressing or indexing<br />

• An LMJ instruction that specifies indirect addressing or indexing<br />

• An LIJ, LDJ, or LBJ instruction<br />

• An EX instruction that references an LMJ or SLJ instruction<br />

• A test and skip instruction<br />

• Used in reentrant code<br />

In a bank-named collection, the SNAP directive and its parameters can apply only to<br />

global elements and entry points. The SNAP$ element must be entirely included in the<br />

control bank.<br />

Example 1<br />

1. SNAP LARK<br />

2. 010,1 012,1 020,07 0200,010<br />

Description<br />

A snapshot dump is taken in element LARK. Line 2 gives the parameters for the dump.<br />

The instruction at address 010 under location counter 1 is the location where the<br />

snapshot request is placed. The address 012 under location counter 1 is the starting<br />

address of the dump. Sixteen locations in main storage are dumped along with the<br />

contents of the A, X, and R registers. The dump is to be taken a maximum of 128 times,<br />

but only once every eighth reference.<br />

Example 2<br />

7830 9887–001 6–13


Other Directives<br />

1. SNAP JACK<br />

2. 0132,02 HAH+2 256,4<br />

Description<br />

A snapshot is to be taken in element JACK. Line 2 specifies that the instruction at<br />

location 0132 under location counter 2 is the location where the snapshot request is<br />

placed. The address HAH+2 (where HAH must be externally defined) is the starting<br />

address of the dump. The contents of the X registers and 256 or 0400 main storage<br />

locations are to be dumped. Since the times and frequency parameters are not specified,<br />

the system assumes a value of 100 for times and 1 for frequency. The common block is<br />

initialized every time a segment containing the text defining the common block is loaded.<br />

If all the text defining the common block is in the same segment, the common block is<br />

initialized to only one set of the values.<br />

6.10. WINDOW — Creation of 4K Windows<br />

Purpose<br />

The WINDOW directive is used to create 4K windows into a bank and to specify which<br />

base/index register is associated with a particular 4K window.<br />

Format<br />

WINDOW [address] (Bn[,Xn] [Bn[,Xn]] ...) [[address] (Bn[,Xn] [Bn[,Xn]] ...)] ...<br />

where:<br />

address<br />

Bn<br />

Xn<br />

is an externally defined tag defined within the bank, an absolute value (for example,<br />

defined on <strong>Collector</strong> EQU directive), or a numerical value. The value must be<br />

preceded with a 0 for the value to be octal.<br />

indicates B register 2 to 15 or indicates B register 2 to 31 for TYPE EXEC.<br />

indicates X register 1 to 15.<br />

Description<br />

Each base/index register pair targets consecutive 4K windows in the bank associated<br />

with the WINDOW directive. The first pair points to the address specified. If no address<br />

is specified, the start address of the bank is used.<br />

An absolute value or a numerical value can be used to begin the bank at any address for<br />

a specified base register or set of base registers. This address may or may not fall within<br />

the bank limits. It is your responsibility to properly use this capability. Also, an address<br />

6–14 7830 9887–001


Other Directives<br />

specification of zero does not maintain the <strong>Collector</strong> generated addresses within the<br />

confines of the base registers provided. However, <strong>Collector</strong> does issue an error when an<br />

externally defined tag is not defined within the bank limits and used as the address on<br />

the WINDOW directive.<br />

The <strong>Collector</strong> intercepts low order, 12-bit relocation (d field) by XREF or LC+offset, and<br />

checks if the final relocated address is within a window. If the B register field is zero in<br />

the instruction, then the appropriate B register from the WINDOW directive is used. (The<br />

<strong>Collector</strong> cannot distinguish between B0 and no B register specified. Therefore, the<br />

WINDOW directive treats register B0 and no B register as no B register specified.) The<br />

window directive treats the X register field in the same way.<br />

The 12-bit field obtains the address of the referenced tag minus the start address of the<br />

corresponding 4K window. If no WINDOW directive is found, the <strong>Collector</strong> performs<br />

normal relocation and error checking.<br />

Absolute value entry points are not considered relocated; thus, no B or X register<br />

substitution occurs for references to absolute value entry points.<br />

A warning is issued if the WINDOW directive is used in a bank that is not marked as an<br />

extended mode bank and the collection is not TYPE EXEC.<br />

If any WINDOW directives are present, the SEG directive cannot be used.<br />

If a 12-bit field is relocated by multiple relocation, each part must be defined in the same<br />

bank for window processing to be performed.<br />

You are responsible for basing the B register at the address specified on the WINDOW<br />

directive.<br />

You are also responsible for overlapping problems if more than one window is specified<br />

for a bank. The <strong>Collector</strong> uses the first base/index pair specified on the WINDOW<br />

directive that contains the relocated value.<br />

Example 1<br />

IBANK NAME,01000<br />

WINDOW (B3 B4,X4) tag2(B5)<br />

IN -----<br />

For this example, the bank limits are 01000 to 040000. Tag2 has a value of 0<strong>2200</strong>0.<br />

The first window starts at the beginning of the bank because no address was specified.<br />

The second window starts 4K after the first. The third window starts at tag2.<br />

Window 1 01000 to 010777, B3<br />

Window 2 011000 to 020777, B4,X4<br />

Window 3 0<strong>2200</strong>0 to 031777, B5<br />

7830 9887–001 6–15


Other Directives<br />

If a 12-bit field is encountered and the tag it references has a value of 02000, the<br />

<strong>Collector</strong> uses window 1. B3 is used in the instruction, with an offset value of 01000<br />

(02000-01000) for the 12-bit field.<br />

If a 12-bit field is encountered and the tag it references has a value of 021500, the<br />

<strong>Collector</strong> cannot find a window with the value 021500 in its range. Normal relocation is<br />

performed, which causes a truncation error to occur.<br />

Example 2<br />

For this example the same map symbolic is used and the bank limits remain the same,<br />

but tag2 has a value of 020000.<br />

Window 1 and 2 remain the same. Window 3 now has a different range.<br />

Window 1 01000 to 010777, B3<br />

Window 2 011000 to 020777, B4,X4<br />

Window 3 020000 to 027777, B5<br />

If a 12-bit field is encountered and the tag it references has a value of 020500, the<br />

second window is chosen by the <strong>Collector</strong>. B4 and X4 are used in the instruction, and<br />

the 12-bit field receives a value of 07500 (020500-011000).<br />

The <strong>Collector</strong> searches the windows in the order they are specified on the WINDOW<br />

directive. It simply checks to see if the address being relocated is in the range of the<br />

window.<br />

Assume the following WINDOW directive:<br />

WINDOW tag2(B5) (B3 B4,X4)<br />

If tag2 had a value of 020000, the windows would be as follows:<br />

Window 1 020000 to 027777, B5<br />

Window 2 01000 to 010777, B3<br />

Window 3 011000 to 020777, B4,X4<br />

If a 12-bit field is encountered and the tag it references has a value of 020500, the first<br />

window is used. (Window 1 here is window 3 in the previous example.) B5 would be<br />

used in the instruction and the 12-bit field would receive a value of 0500 (020500-<br />

020000=0500). The third window is nearly useless. Only 07000 words can actually be<br />

seen by the <strong>Collector</strong>, 011000 to 017777 (020000 to 020777 is not visible).<br />

6–16 7830 9887–001


Other Directives<br />

7830 9887–001 6–17


Other Directives<br />

6–18 7830 9887–001


Section 7<br />

<strong>Collector</strong>-Defined Symbols<br />

<strong>Reference</strong>s to the following symbols are satisfied by the <strong>Collector</strong> during the collection:<br />

BBJ$<br />

BDI$<br />

Same as IBJ$ except that LBJ is generated in place of LIJ (see 4.5.2 and 4.5.4).<br />

Bank descriptor index (BDI) for the bank in which the reference is made (see 4.5.4).<br />

BDICALL$<br />

Same as BDIREF$, unless the collection is bank-implied or the reference is in the<br />

same bank in which the label is defined. In these cases, the value is zero. If the value<br />

of the associated label is an absolute 36-bit number, the upper 18 bits are used (see<br />

4.5.3 through 4.5.6). Thus, for an entry point, the BDI is expected to be in H1.<br />

BDIREF$<br />

BDI for the bank in which the associated label is defined (see 4.5.4).The BDI is<br />

expected to be in H2 of the absolute value.<br />

BDIVECT$<br />

BDI value of the link vector bank created by the BANKINFO directive with the<br />

VECTOR attribute specified.<br />

BLOCKSIZE$<br />

Number of words in a main storage block (normally 512; 64 if TYPE BLOCKSIZE64<br />

was used).<br />

COMMN$<br />

DBJ$<br />

D$ATE<br />

First address of the common block table (see 6.2 and 6.8).<br />

Same as IBJ$ except that LDJ is generated in place of LIJ (see 4.5.1 and 4.5.4).<br />

7830 9887–001 7–1


<strong>Collector</strong>-Defined Symbols<br />

The date, in TDATE$ format (upper 18 bits), that the absolute element was created.<br />

ENTRY$<br />

FIRST$<br />

First address of the entry-point table (see 6.2).<br />

Lowest address assigned to the bank in which the reference is made.<br />

FIRSTBDI$<br />

Symbol that returns the number specified on the FIRSTBDI directive. If no FIRSTBDI<br />

directive is given, the <strong>Collector</strong> uses the default value of 4.<br />

FRSTD$<br />

FRSTI$<br />

IBJ$<br />

LAST$<br />

Lowest D bank address assigned to the program.<br />

Lowest I bank address assigned to the program.<br />

Used in the f and j fields of an instruction. The LIJ operation code is put in the f and j<br />

fields if the tag in the u field of the instruction is an absolute value or is defined in a<br />

bank other than that in which the reference is made, except for bank-implied<br />

collections. The LMJ operation code is put in the f and j fields if the collection is<br />

bank-implied, or the tag in the u field is defined in the same bank as that in which the<br />

reference is made (see 4.5.1, 4.5.2, and 4.5.6).<br />

Highest address assigned to the bank in which the reference is made, including<br />

dynamic segments.<br />

LASTD$<br />

Highest D bank address assigned to the program, including dynamic segments.<br />

LASTDR$<br />

LASTI$<br />

Same as LASTD$, rounded to the end of the main storage block.<br />

Highest I bank address assigned to the program, including dynamic segments.<br />

LASTIR$<br />

Same as LASTI$, rounded to the end of the main storage block.<br />

7–2 7830 9887–001


LASTR$<br />

LBDI$<br />

Same as LAST$, rounded to the end of the main storage block.<br />

<strong>Collector</strong>-Defined Symbols<br />

BDI for the bank in which the reference is made, with the BDT level bits set (see<br />

4.6.1 and 6.6).<br />

LBDICALL$<br />

Same as LBDIREF$, unless the collection is bank-implied or the reference is in the<br />

same bank in which the label is defined. In these cases, the value is zero. If the value<br />

of the associated label is an absolute 36-bit number, the upper 18 bits are used. The<br />

BDT level bits are set (see 4.6.1 and 6.6).<br />

LBDIREF$<br />

BDI for the bank in which the associated label is defined. If the value of the<br />

associated label is an absolute 36-bit number, then the lower 18 bits are used (H2).<br />

The BDT level bits are set (see 4.6.1 and 6.6).<br />

MAPBDR$<br />

BDR for the bank in which the associated label is defined (see 4.5.3).<br />

MAPBDT$<br />

Bank descriptor table (BDT) level and BDI for the named bank. If the referencing<br />

bank is an extended mode bank, the extended mode format is used. If the<br />

referencing bank is a basic mode bank, the basic mode format is used (see 4.7 and<br />

6.6 ).<br />

MAPCALL$<br />

Symbol that flags the <strong>Collector</strong> for link vector processing and to create instructions.<br />

See 4.9.<br />

MAPGOTO$<br />

SLT$<br />

T$IME<br />

XREF$<br />

Flags the <strong>Collector</strong> for link vector processing and to create instructions. See 4.9.<br />

First address of the segment load table.<br />

The time, in TDATE$ format (lower 18 bits), that the absolute element was created<br />

Compare with D$ATE.<br />

7830 9887–001 7–3


<strong>Collector</strong>-Defined Symbols<br />

First address of the external reference table (see 6.8).<br />

D$ATE and T$IME provide 18-bit values for the date and time of the absolute element<br />

creation, which may be edited using the SYSLIB AEDIT$SFDT editing routine to provide<br />

a means of verifying the version of the program being executed.<br />

If you redefine a <strong>Collector</strong>-defined symbol, your supplied value is taken as the value of<br />

the symbol. You can only specify a value for the <strong>Collector</strong>-defined symbol, by using the<br />

<strong>Collector</strong> EQU directive or by defining a value for the <strong>Collector</strong>-defined symbol in an<br />

element that is explicitly included in the collection.<br />

7–4 7830 9887–001


Section 8<br />

Efficient Use of the <strong>Collector</strong><br />

8.1. Introduction<br />

There are ways you can make a collection more efficient. The suggestions in the<br />

following paragraphs either reduce the amount of main storage used by the <strong>Collector</strong> or<br />

the amount of <strong>Collector</strong> processing.<br />

8.2. Use of the IN Directive<br />

Using file-name.element-name on the IN directive instead of just element-name reduces<br />

<strong>Collector</strong> processing because the <strong>Collector</strong> does not need to search all of the libraries in<br />

the collection for the element. If library files are used only for element searching and not<br />

for satisfying external references, it is more efficient to use file-name. element-name for<br />

each element on the IN directive. However, the use of file-name. element-name makes<br />

the <strong>Collector</strong> symbolic less flexible.<br />

Elements included from a library file should not be named on IN directives if they do not<br />

need to be. Implicit element inclusion is slightly faster than explicit element inclusion.<br />

When IN file-name is used, processing is most efficient when the file contains only<br />

nondeleted, relocatable elements.<br />

8.3. @PREP of TPF$<br />

If TPF$ does not have an entry-point table (created by @PREP or @PACK,P), the <strong>Collector</strong><br />

brings all of the elements from TPF$ into the collection, processes their preambles, and<br />

creates an entry-point table. In effect, the <strong>Collector</strong> is doing an implicit @PREP of TPF$.<br />

After determining which elements are necessary for satisfying external references, the<br />

<strong>Collector</strong> discards the unnecessary TPF$ elements.<br />

Obviously, a prep of TPF$ is more efficient in both space and processing time. If no<br />

implicitly included elements from TPF$ are needed, the most efficient approach is to use<br />

a NOT TPF$ directive.<br />

8.4. Relocatable Element Structure<br />

You can reduce collection time and <strong>Collector</strong> storage requirements by carefully<br />

structuring the relocatable element.<br />

7830 9887–001 8–1


Efficient Use of the <strong>Collector</strong><br />

Internally, when preparing the text for output as an absolute element, the <strong>Collector</strong><br />

creates three-word packets to describe blocks of text within the relocatable element.<br />

These packets describe contiguous blocks of code and if a relocatable element has<br />

contiguous blocks of code, there are fewer packets. After processing all of the text for a<br />

segment, the packets are rearranged to describe a solid block of code within the<br />

absolute.<br />

Example 1<br />

.<br />

.<br />

.<br />

TAG1 + 1 .<br />

TAG2 + 2 .<br />

TAG3 + 3 . Packet required for 3 words<br />

RES 10 .<br />

TAG4 + 4 .<br />

TAG5 + 5 . Packet required for 2 words<br />

RES 5 .<br />

TAG6 + 6 . Packet required for 1 word<br />

.<br />

.<br />

.<br />

This sequence of code is less efficient and requires more internal<br />

<strong>Collector</strong> storage than the following sequence:<br />

.<br />

.<br />

.<br />

TAG1 + 1 .<br />

TAG2 + 2 .<br />

TAG3 + 3 .<br />

TAG4 + 4 .<br />

TAG5 + 5 .<br />

TAG6 + 6 . Packet required for 6 word2<br />

RES 15 .<br />

.<br />

.<br />

.<br />

In the second half of Example 1, the <strong>Collector</strong> uses two-thirds less<br />

storage than in the first half.<br />

Example 2<br />

INTEGER ARRAY (3,4)<br />

DATA ((ARRAY(I,J),J=1,4),I=1,3)/1,2,3,4,5,6,7,8,9,10,11,12/<br />

This FORTRAN example creates an array that is filled as follows:<br />

8–2 7830 9887–001


7830 9887–001<br />

This array appears as follows in a relocatable element:<br />

Address<br />

0<br />

3<br />

6<br />

9<br />

1<br />

4<br />

7<br />

10<br />

2<br />

5<br />

8<br />

11<br />

In order for the <strong>Collector</strong> to describe sequential addresses in the absolute text, a three-<br />

word packet must be constructed for each word of this array and then analyzed and<br />

unchained so that the text reads as follows:<br />

Address<br />

0<br />

1<br />

Contents<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

Contents<br />

1<br />

5<br />

Efficient Use of the <strong>Collector</strong><br />

8–3


Efficient Use of the <strong>Collector</strong><br />

2 9<br />

3 2<br />

4 6<br />

5 10<br />

6 3<br />

7 7<br />

8 11<br />

9 4<br />

10 8<br />

11 12<br />

To conserve both time and storage, a more efficient array is<br />

INTEGER ARRAY(3,4)<br />

DATA ((ARRAY(I,J),I=1,3),J=1,4)/1,2,3,4,5,6,7,8,9,10,11,12/<br />

This creates the following array:<br />

The relocatable element for this array is constructed as follows:<br />

Address Contents<br />

0 1<br />

1 2<br />

2 3<br />

8–4 7830 9887–001


3 4<br />

4 5<br />

5 6<br />

6 7<br />

7 8<br />

8 9<br />

9 10<br />

10 11<br />

11 12<br />

Only one <strong>Collector</strong> packet is necessary to describe this array.<br />

Efficient Use of the <strong>Collector</strong><br />

The <strong>Collector</strong> creates the three-word packets per segment. When all of the code has<br />

been described for a segment, it unchains the packets and releases the storage that they<br />

used. (If an element spans segments, a few packets describing that element are held<br />

until the other segments are processed.) If it is not possible for the programmer to<br />

employ the coding techniques previously shown, yet more efficient <strong>Collector</strong> storage<br />

utilization is necessary, a collection with more segments reduces the amount of storage<br />

the <strong>Collector</strong> needs to process the packets. More segmentation, however, increases the<br />

execution time of the resulting absolute.<br />

8.5. Use of the Location Counter<br />

The <strong>Collector</strong> and the relocatable element format favor the use of location counters 1<br />

and 2. I/O and mass storage use are reduced if only these location counters are used.<br />

Therefore, if two location counters are sufficient, location counters 1 and 2 should be<br />

used.<br />

8.6. Use of the C Option<br />

The C option is designed to improve the collection time performance of the <strong>Collector</strong> for<br />

large collections. Small collections will probably not show a noticeable improvement in<br />

collection time, and will be wasting internal memory if the C option is used. To<br />

determine the amount of internal space your collection uses, refer to 2.2.3 (which<br />

describes the values of the storage information given on the sign-off line, including the<br />

number of calls being made to MCORE$).<br />

7830 9887–001 8–5


Efficient Use of the <strong>Collector</strong><br />

8–6 7830 9887–001


Appendix A<br />

TYPE EXEC Collections<br />

A.1. TYPE EXEC<br />

Purpose<br />

The TYPE EXEC directive has the following effect on collections:<br />

• Allows the use of XSEG and FIRSTBDI directives<br />

• Suppresses the error message ’*ERROR: NO START ADDRESS’<br />

• Assumes LEVEL 1 unless overridden by the LEVEL directive in the map symbolic<br />

• Changes the format of the values returned for BDICALL$, BDIREF$, LBDI$,<br />

LBDICALL$, and LBDIREF$<br />

The TYPE EXEC directive is not allowed for R option collections.<br />

Format<br />

TYPE EXEC<br />

A.2. XSEG — Executive Function Arrangement<br />

Purpose<br />

The XSEG directive arranges the segments in the collection of the Executive to minimize<br />

the size of the function overlay area. This directive is intended for use only in collections<br />

of the <strong>OS</strong> <strong>2200</strong> Executive system. All XSEG directive parameters are optional, except<br />

name-1.<br />

Format<br />

XSEG name-1,segment-list<br />

where:<br />

name-1<br />

specifies the name of the segment. When name-1 is followed by an asterisk (*), the<br />

named segment is automatically loaded when referenced by a jump instruction.<br />

7830 9887–001 A–1


TYPE EXEC Collections<br />

Such a segment is called an indirect load segment. The asterisk is allowed on all SEG<br />

directives, but is ignored if the directive defines the main segment.<br />

segment-list<br />

specifies the address relationship between the segment named in name-1 and the<br />

other program segments. (See F.2.1 for segment-list formats.)<br />

Description<br />

An XSEG directive functions the same as a SEG directive, except that the initial relative<br />

starting address is reduced, if possible, by multiples of 01000. The resulting final starting<br />

address is equal to the starting address of the bank that the segment is in, plus the<br />

number of words by which the initial relative starting address exceeds a multiple of<br />

01000.<br />

Example<br />

@MAP, I TEST,TEST<br />

IBANK XS1,02000<br />

1. SEG MAIN<br />

IN EL1<br />

2. XSEG A<br />

IN EL2<br />

3. XSEG B<br />

IN EL3<br />

4. SEG C,B<br />

IN EL4<br />

5. XSEG D,(B,C)<br />

IN EL5<br />

Use the following octal lengths and address ranges for this example:<br />

Segment<br />

If the Octal Length<br />

Is:<br />

MAIN 01143 02000-03142<br />

A 02054 02143-04216<br />

B 02712 02217-05130<br />

C 04364 02217-06602<br />

D 0115 02603-02717<br />

Description<br />

The Assigned Address<br />

Range Is:<br />

1. Segment MAIN is assigned a start address of 02000 (see F.2.1 for bank start<br />

address assignment) and an end address of 03142.<br />

2. Segment A, an XSEG that follows segment MAIN, starts at address 02143 and ends<br />

at address 04216. Segment A is initially assigned a start address of 03143,<br />

A–2 7830 9887–001


TYPE EXEC Collections<br />

immediately following segment MAIN. However, since segment A is an XSEG, its<br />

start address of 02143 is formed by adding 0143 (the number of words that 03143 is<br />

over a multiple of 01000) to 02000 (the start address of bank XS1).<br />

3. Segment B, an XSEG that follows segment A, starts at address 02217 and ends at<br />

address 05130. Segment B is initially assigned a start address of 04217, immediately<br />

following segment A. Since segment B, like segment A, is an XSEG, its actual start<br />

address is 02217 (0217 + 02000).<br />

4. Segment C starts at the same address as segment B with a start address of 02217<br />

and an end address of 06602.<br />

5. Segment D is an XSEG that follows the highest address assigned to segment B and<br />

C. The initial start address is 06603 immediately following segment C. The actual<br />

start address for segment D is 02603 (0603 + 02000), since it is also an XSEG.<br />

A.3. FIRSTBDI<br />

Purpose<br />

The FIRSTBDI directive allows you to specify the starting bank descriptor index (BDI) for<br />

the banks in the collection. The following restrictions apply to this directive:<br />

• The default starting BDI is 4. BDIs 0 through 3 are reserved in the user’s bank<br />

description table (BDT).<br />

• A check is made to ensure that the BDI does not exceed the <strong>Collector</strong>'s maximum<br />

internal user-bank BDI value of 4092 (07774); an error message is issued if the<br />

number is too large.<br />

• Multiple FIRSTBDI directives result in the last FIRSTBDI directive overriding all<br />

previous FIRSTBDI directives.<br />

• The FIRSTBDI directive is not allowed in an R option collection.<br />

Format<br />

FIRSTBDI number<br />

where number specifies the starting BDI. The number must not exceed the <strong>Collector</strong>'s<br />

maximum internal user-bank BDI value of 4092 (07774).<br />

Note: The maximum number of banks is limited by the maximum BDI value, 4092<br />

(07774), not by the maximum number of user banks per absolute (4089-07771).<br />

Therefore, using FIRSTBDI to start at a higher BDI value will result in fewer available<br />

user banks.<br />

Description<br />

Banks are assigned ascending BDIs, starting with the FIRSTBDI value, as follows:<br />

• Z option banks<br />

• S option banks<br />

7830 9887–001 A–3


TYPE EXEC Collections<br />

• Dynamic banks that are not initially based<br />

• Dynamic banks that are initially based<br />

• Static banks<br />

• Control bank<br />

• INFO 11 banks<br />

• Link vector bank<br />

A.4. BDICALL$, BDIREF$, LBDI$, LBDICALL$, and<br />

LBDIREF$<br />

For TYPE EXEC collections, the BDT level is always returned with the BDI of the bank<br />

when the tags just shown are referenced.<br />

BDICALL$ and BDIREF$ return the BDT level and BDI in basic mode virtual address<br />

form.<br />

LBDI$, LBDICALL$, and LBDIREF$ return the BDT level and BDI in extended mode<br />

virtual address form.<br />

BDI$ is not affected.<br />

For more information regarding the use of these <strong>Collector</strong>-defined tags, refer to 4.5.4<br />

and 4.6.1.<br />

A–4 7830 9887–001


Appendix B<br />

Collection Examples<br />

B.1. Bank-Implied and Bank-Named Collections<br />

Table B-1 shows the elements in FILEA and their required outside references. These<br />

symbolics pertain to the partial runstreams for the bank-implied and bank-named<br />

collections.<br />

FILEA<br />

Table B–1. Elements in FILEA<br />

MAIN FILEA.SUB1,.SUB2<br />

SUB1 LIB1.SUB3<br />

SUB2 LIB1.SUB4<br />

B.1.1. Bank-Implied Collection<br />

Elements In Which FILEA<br />

<strong>Reference</strong>s Are Defined<br />

This partial runstream uses a bank-implied collection to produce an absolute element<br />

named ABS.<br />

1. @PREP LIB1.<br />

2. @MAP,IS MAPSYM,ABS<br />

3. IN FILEA.MAIN<br />

4. IN FILEA.SUB1,.SUB2<br />

5. LIB LIB1.<br />

6. END<br />

Description<br />

1. FURPUR is called to create the relocatable entry-point table for file LIB1.<br />

2. Call the <strong>Collector</strong>. The I option specifies that symbolic element MAPSYM is introduced<br />

from file TPF$. The S option produces a listing. The absolute element (ABS) is placed in<br />

the file TPF$.<br />

3. The element MAIN in file FILEA is included with the odd location counters placed in the I<br />

bank ($IBANK) and the even location counters placed in the D bank ($DBANK). The<br />

<strong>Collector</strong> generates the bank names, $IBANK and $DBANK, because IBANK and<br />

DBANK directives have not been included in the symbolic input.<br />

7830 9887–001 B–1


Collection Examples<br />

4. The elements SUB1 and SUB2 from FILEA are included with the odd location counters<br />

placed in the I bank ($IBANK) and the even location counters placed in the D bank<br />

($DBANK).<br />

5. The file LIB1 is searched for the entry points to satisfy the external references from<br />

elements SUB1 and SUB2. The elements LIB1.SUB3 and LIB1.SUB4, which are<br />

implicitly included to satisfy these external references, are split so that their odd<br />

location counters are included in the I bank ($IBANK) and their even location counters in<br />

the D bank ($DBANK).<br />

6. Signifies the end of input to the <strong>Collector</strong>.<br />

B.1.2. Bank-Named Collection<br />

This partial runstream uses a bank-named collection to produce the absolute element<br />

named ABS.<br />

1. @PREP LIB1.<br />

2. @MAP,IS MAPSYM,ABS<br />

3. IBANK $IBANK<br />

4. BANKINFO INITIAL(MAINI)<br />

5. IN FILEA.MAIN<br />

6. IN FILEA.SUB1,.SUB2<br />

7. DBANK $DBANK<br />

8. BANKINFO INITIAL(MAIND),CONTROL<br />

9. FORM $IBANK<br />

10. LIB LIB1.($IBANK/$ODD,$DBANK/$EVEN)<br />

Description<br />

1. FURPUR is called to create the relocatable entry-point table for file LIB1.<br />

2. Call the <strong>Collector</strong>. The I option specifies that symbolic element MAPSYM is introduced<br />

from the file TPF$. The S option produces a listing. The absolute element (ABS) is<br />

placed in the file TPF$.<br />

3. I bank $IBANK is a static bank.<br />

4. I bank $IBANK is based on BDR0.<br />

5. The odd location counters from element MAIN in file FILEA are included in bank $IBANK.<br />

6. The odd location counters from elements SUB1 and SUB2 from FILEA are included in<br />

bank $IBANK.<br />

7. D bank $DBANK is a static bank.<br />

8. D bank $DBANK is the control bank and is based on BDR2.<br />

9. The FORM directive causes the structure of $IBANK to be duplicated and included in<br />

bank $DBANK.<br />

10. The file LIB1 is searched for the entry points to satisfy the external references from<br />

elements SUB1 and SUB2. The elements LIB1.SUB3 and LIB1.SUB4, which are<br />

implicitly included to satisfy these external references, are split so that their odd<br />

location counters are included in bank $IBANK and their even location counters in bank<br />

$DBANK.<br />

B–2 7830 9887–001


B.2. Bank-Implied Segmentation<br />

Collection Examples<br />

The following is an example of a segmented program showing the elements in the file<br />

FILEA and their external references<br />

The following example demonstrates the use of <strong>Collector</strong> directives to produce a<br />

segmented program:<br />

1. @PREP LIB1.<br />

2. @PREP LIB2.<br />

3. @MAP,IL MAPSYM,MAPABS<br />

4. SEG MAIN<br />

5. IN FILEA.MAIN<br />

6. SEG ALPHA*, (MAIN)<br />

7. IN FILEA.ALPHA1/A,.ALPHA2/A,.ALPHA3/A<br />

8. SEG BETA*, (ALPHA)<br />

9. IN FILEA.BETA1/B,.BETA2/B,.BETA3/B<br />

10. SEG CHI*,BETA<br />

11. IN FILEA.CHI1/C,.CHI2/C<br />

7830 9887–001 B–3


Collection Examples<br />

12. SEG DELTA*, (BETA,CHI)<br />

13. IN FILEA.DELTA1/D,.DELTA2/D<br />

14. SEG EPSO*, DELTA<br />

15. IN FILEA.EPSO1/E,.EPSO2/E<br />

16. SEG GAMMA*, (MAIN)<br />

17. IN FILEA.GAMMA1/G,.GAMMA2/G<br />

18. SEG PHI*, (DELTA,GAMMA)<br />

19. IN FILEA.PHI1,.PHI2<br />

20. LIB LIB1,LIB2<br />

21. END<br />

Description<br />

1. File LIB1 is prepared (@PREP) to create the relocatable entry-point table.<br />

2. File LIB2 is prepared (@PREP) to create the relocatable entry-point table.<br />

3. Calls the <strong>Collector</strong>. The I option specifies that symbolic element MAPSYM is<br />

introduced from the runstream. The L option specifies that a complete listing is to be<br />

produced. The absolute output element is called MAPABS. Both MAPSYM and<br />

MAPABS are placed in TPF$.<br />

4. Segment MAIN is the program’s main segment.<br />

5. Element MAIN is found in file FILEA.<br />

6. Segment ALPHA is marked for indirect loading. The starting address of ALPHA<br />

follows the last address of segment MAIN.<br />

7. Elements ALPHA1/A, ALPHA2/A, and ALPHA3/A are found in file FILEA and are<br />

included in the collection of segment ALPHA.<br />

8. Segment BETA is marked for indirect loading. The starting address of BETA follows<br />

the last address of segment ALPHA.<br />

9. Elements BETA1/B, BETA2/B, and BETA3/B are found in file FILEA and are included<br />

in the collection of segment BETA.<br />

10. Segment CHI is marked for indirect loading. The starting address of segment CHI is<br />

the same as the starting address of segment BETA.<br />

11. Elements CHI1/C and CHI2/C are in FILEA and are included in the collection of<br />

segment CHI.<br />

12. Segment DELTA is marked for indirect loading. The starting address of segment<br />

DELTA follows the last address of either segment BETA or segment CHI, whichever<br />

is longer.<br />

13. Elements DELTA1/D and DELTA2/D are in file FILEA and are included in the<br />

collection of segment DELTA.<br />

14. Segment EPSO is marked for indirect loading. The starting address of segment<br />

EPSO is the same as the starting address of segment DELTA.<br />

15. Elements EPSO1/E and EPSO2/E are in file FILEA and are included in the collection<br />

for segment EPSO.<br />

16. Segment GAMMA is marked for indirect loading. The starting address of segment<br />

GAMMA follows the last address of segment MAIN.<br />

B–4 7830 9887–001


Collection Examples<br />

17. Elements GAMMA1/G and GAMMA2/G are in file FILEA and are included in the<br />

collection of segment GAMMA.<br />

18. Segment PHI is marked for indirect loading. The starting address of segment PHI<br />

follows the last address of either segment DELTA or segment GAMMA, whichever<br />

is longer.<br />

19. Elements PHI1 and PHI2 in file FILEA are included in the collection of segment PHI.<br />

20. Files LIB1 and LIB2 are searched before searching the system library for the<br />

collection elements.<br />

21. End of the <strong>Collector</strong> directives.<br />

Figure B-1 and Figure B-2 show the instruction and data areas of main storage for the<br />

preceding example.<br />

Figure B–1. I Bank Main Storage Map for the Segmented MAPABS<br />

7830 9887–001 B–5


Collection Examples<br />

Figure B–2. D Bank Main Storage Map for the Segmented MAPABS<br />

B–6 7830 9887–001


B.3. Bank-Named Segmentation<br />

Collection Examples<br />

The following is an example of a bank-named segmented program showing the<br />

elements in file FILEA and their required outside references:<br />

The following example demonstrates the use of <strong>Collector</strong> directives to produce a banknamed<br />

segmented program named ABS:<br />

1. @PREP LIB1.<br />

2. @PREP LIB2.<br />

3. @MAP,IL MAPSYM,MAPABS<br />

4. IBANK,MD BANK1<br />

5. SEG MAIN<br />

6. IN FILEA.MAIN<br />

7. SEG ALPHA<br />

8. IN FILEA.ALPHA1/A,.ALPHA2/A<br />

9. SEG BETA*<br />

10. IN FILEA.BETA1/B<br />

11. DBANK,MC BANK2<br />

7830 9887–001 B–7


Collection Examples<br />

12. SEG MAIN<br />

13. IN FILEA.MAIN<br />

14. SEG ALPHA<br />

15. IN FILEA.ALPHA1/A,.ALPHA2/A<br />

16. SEG BETA*<br />

17. IN FILEA.BETA1/B<br />

18. IN FILEA.BETA2/B($ALL)<br />

19. IBANK BANK5,(BANK1)<br />

20. $ALL<br />

21. SEG MAIN<br />

22. IN FILEA.CHI3/C<br />

23. SEG EPSO<br />

24. IN FILEA.EPSO1/E,.EPSO2/E<br />

25. SEG PHI<br />

26. IN FILEA.PHI1,.PHI2<br />

27. SEG MAIN<br />

28. IBANK,U BANK3,BANK5-02000<br />

29. IN FILEA.BETA3/B<br />

30. SEG CHI<br />

31. IN FILEA.CHI1/C,.CHI2/C<br />

32. SEG DELTA,CHI<br />

33. IN FILEA.DELTA1/D,.DELTA2/D<br />

34. DBANK,U BANK4<br />

35. FORM BANK3<br />

36. DBANK BANK6,BANK4<br />

37. $ALL<br />

38. SEG MAIN<br />

39. IN FILEA.GAMMA1/G<br />

40. SEG GAMMA<br />

41. IN FILEA.ALPHA3/A,.GAMMA2/G<br />

Description<br />

1. An entry-point table is prepared for file LIB1.<br />

2. An entry-point table is prepared for file LIB2.<br />

3. Calls the <strong>Collector</strong>. The I option specifies that symbolic element MAPSYM is<br />

introduced from the runstream. The L option specifies that a complete listing is to be<br />

produced. The absolute output element is called ABS. Both MAPSYM and ABS are<br />

placed in TPF$.<br />

4. I bank BANK1 is a dynamic bank that is based on BDR0.<br />

5. Segment MAIN is the main segment for BANK1.<br />

6. The odd location counters from element MAIN in file FILEA are to be included.<br />

7. Segment ALPHA follows segment MAIN.<br />

8. The odd location counters from elements ALPHA1/A and ALPHA2/A in FILEA are to<br />

be included.<br />

9. Segment BETA follows segment ALPHA and is indirectly loaded.<br />

10. The odd location counters from element BETA1/B in FILEA are to be included.<br />

B–8 7830 9887–001


11. D bank BANK2 is the control bank and is based on BDR2.<br />

12. Segment MAIN is the main segment in BANK2.<br />

Collection Examples<br />

13. The even location counters from element MAIN in FILEA are to be included.<br />

14. Segment ALPHA follows segment MAIN.<br />

15. The even location counters from elements ALPHA1/A and ALPHA2/A in FILEA are to<br />

be included.<br />

16. Segment BETA is indirectly loaded and follows segment ALPHA.<br />

17. The even location counters from element BETA1/B in FILEA are to be included.<br />

18. All location counters from element BETA2/B in FILEA are to be included.<br />

19. I bank BANK5 is a static bank and follows BANK1.<br />

20. The $lcs specification is for the inclusion of all location counters of an element.<br />

21. Segment MAIN is the main segment of BANK5.<br />

22. All location counters from element CHI3/C in FILEA are to be included.<br />

23. Segment EPSO follows segment MAIN.<br />

24. All location counters from elements EPSO1/E and EPSO2/E in FILEA are to be<br />

included.<br />

25. Segment PHI follows segment EPSO.<br />

26. All location counters from elements PHI1 and PHI2 in FILEA are to be included.<br />

27. I bank BANK3 is a static bank based on BDR1. Its starting address is equal to the<br />

starting address of BANK5 minus 02000.<br />

28. Segment MAIN is the main segment of BANK3.<br />

29. The odd location counters from element BETA3/B in FILEA are to be included.<br />

30. Segment CHI follows segment MAIN.<br />

31. The odd location counters from elements CHI1/C and CHI2/C in FILEA are to be<br />

included.<br />

32. Segment DELTA starts at the same address as segment CHI.<br />

33. The odd location counters from elements DELTA1/D and DELTA2/D in FILEA are to<br />

be included.<br />

34. D bank BANK4 is a static bank based on BDR3. It follows D bank BANK2.<br />

35. The same segmentation structure and element inclusions for BANK3 are to be<br />

placed in BANK4, except that the even location counters of the elements are to be<br />

included rather than the odd location counters as in BANK3.<br />

36. D bank BANK6 is a static bank that starts at the same address as BANK4.<br />

37. The $lcs specification is for the inclusion of all location counters for the following<br />

included elements.<br />

38. Segment MAIN is the main segment of BANK6.<br />

39. All location counters of element GAMMA1/G in FILEA are to be included.<br />

7830 9887–001 B–9


Collection Examples<br />

40. Segment GAMMA follows segment MAIN.<br />

41. All location counters from elements ALPHA3/A and GAMMA2/G in FILEA are to be<br />

included.<br />

Figure B-3 through Figure B-7 show the bank structure of the program, the segment<br />

structure within each bank, and the element inclusion within the segments and banks.<br />

Figure B–3. Bank Structure of the Program ABS<br />

Note: Address space increases from left to right in the following diagrams.<br />

B–10 7830 9887–001


Figure B–4. Segment Structure of Bank1 in Program ABS<br />

Figure B–5. Segment Structure of Bank2 in Program ABS’<br />

Collection Examples<br />

7830 9887–001 B–11


Collection Examples<br />

Figure B–6. Segment Structure of Bank3 and Bank4 in Program ABS<br />

B–12 7830 9887–001


Collection Examples<br />

Figure B–7. Segment Structure of Bank5 and Bank6 in Program ABS<br />

7830 9887–001 B–13


Collection Examples<br />

B–14 7830 9887–001


Appendix C<br />

Processing Element Preambles<br />

C.1. Introduction<br />

An element preamble is attached to every relocatable element created by the language<br />

processors and by the <strong>Collector</strong>. The element preamble provides the following<br />

information that is needed when relocatable elements are collected to form an absolute<br />

or relocatable element:<br />

• The definition and location of each externally-defined name (entry point) in the<br />

element<br />

• The length, in words, under each location counter in the element<br />

• The table of the undefined symbols appearing in the element<br />

• Common blocks in the element<br />

When the preamble is processed<br />

• The entry points in the element are added to the <strong>Collector</strong> entry-point table.<br />

• Undefined symbols appearing in the element that have no corresponding entry in the<br />

entry-point table are listed in the undefined symbol table.<br />

• Undefined symbols in the element that have a name corresponding to an entry point<br />

in another element are linked to the entry-point table.<br />

Symbols are removed from the undefined symbol table as corresponding entry point<br />

names are found. Newly encountered undefined symbol names are added at the end of<br />

the undefined symbol table.<br />

C.2. INFO Groups<br />

One of the tables in the preamble of the relocatable contains INFO items that are used<br />

for communication between the language processors and the <strong>Collector</strong>. INFO groups 2,<br />

4, 7, 8, 9, and 10 are associated with a location counter. INFO group 11 is a void bank<br />

created in an absolute element. INFO group 12 includes a library search for INFO group<br />

12 items (for example, keywords and directives). The following INFO groups are<br />

recognized by the <strong>Collector</strong>:<br />

Group 2:<br />

Labeled Common<br />

7830 9887–001 C–1


Processing Element Preambles<br />

Group 4:<br />

Blank Common<br />

Group 7:<br />

Even starting address. A location counter that is associated with this group always<br />

starts on an even address; if necessary, it leaves the word preceding it unused.<br />

Group 8:<br />

Static diagnostic information. The text for a location counter that belongs to INFO 8<br />

is not loaded into main storage, but is available in the absolute element for use by<br />

diagnostic processors, such as the ASCII FORTRAN walkback routine.<br />

Group 9:<br />

Read-only. A nonvoid bank is classified as read-only if it meets the following criteria<br />

− It contains only location counters that are marked as read-only.<br />

− It is not segmented.<br />

− It does not contain any tables generated by the <strong>Collector</strong> (for example, the<br />

segmented load table).<br />

Compare the INFO 9 directive with the action of the TYPE READONLY directive and the<br />

use of the R option on the IBANK and DBANK directives.<br />

Group 10:<br />

Extended mode location counter. The bank this location counter is included in is<br />

marked as requiring extended mode, unless the B option is specified on the bank<br />

directive. If an INFO 10 directive appears in an element in an unprepped TPF$ that is<br />

not included in the collection, the bank that it is tentatively included in will still be<br />

marked as requiring extended mode.<br />

Group 11:<br />

Void bank. A void bank is created in the absolute element. The bank descriptor index<br />

(BDI) assigned to the bank is one higher than the BDI of the last “normal” user bank.<br />

A bank name can appear on more than one INFO 11 directive and is ignored after the<br />

first appearance. If an INFO 11 name appears in any other form in the collection<br />

(entry point, segment name, or non INFO 11 bank name) an error message is<br />

printed. The D (dynamic bank) option, (bit 16 of word 2 of control information table<br />

(CIT) item) and S (shared bank) option (bit 17 of word 2 of CIT item) are allowed. Void<br />

banks are assumed to be D banks unless the I bank option bit (bit 15 of word 2 of<br />

CIT item) is set. If an INFO 11 directive appears in an R option collection, it is<br />

maintained in the resulting relocatable. If an INFO 11 directive appears in an element<br />

in an unprepped TPF$ that is not included in the collection, a void bank is created in<br />

the resulting absolute.<br />

Group 12:<br />

C–2 7830 9887–001


Processing Element Preambles<br />

Library search. The order in which files specified by INFO 12 keywords are searched<br />

is the same as the order of the INFO 12 directives and can vary between collections<br />

because elements containing INFO group 12 items can be included in the collection<br />

in a different order. Any number of INFO 12 directives can appear within a<br />

relocatable element. Duplicate INFO group 12 items are allowed. Keywords are<br />

related to a file by use of an integer index created by COMUS. For example, the<br />

FORTRAN compiler can produce an INFO 12 directive of the form INFO 12<br />

‘FORTRAN’. The <strong>Collector</strong> would then search the index for the keyword FORTRAN<br />

and retrieve the integer index for it. The integer index would then be used to find the<br />

file name corresponding to this keyword; for example, the file name can be<br />

FOR*RLIB. This file would then be searched if necessary to satisfy external<br />

references. The actual keyword in the INFO group 12 item is in Fieldata. Meta-<br />

Assembler (MASM) performs the translation from ASCII if necessary. (For further<br />

information on INFO group 12 keywords and the search order, see 3.2.4.)<br />

These INFO Groups can be created by the MASM processor (see the Meta-Assembler<br />

(MASM) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.)<br />

In addition, the MASM processor recognizes Groups 1, 3, 5, and 6 and converts them to<br />

other types of information in the relocatable.<br />

7830 9887–001 C–3


Processing Element Preambles<br />

C–4 7830 9887–001


Appendix D<br />

Restrictions<br />

D.1. 262K Banks<br />

Due to the internal design of the <strong>Collector</strong>, the number of words in a bank is limited to<br />

262,143 (addresses 0 through 0777776), which is one less than the hardware limit of<br />

262,144. There are also some areas of the Exec that impose this limitation.<br />

D.2. 65K Location Counters<br />

No text word can have an offset of more than 65,535 (65K) from the start of a location<br />

counter. This restriction is essential to the old format of the relocatable. With the advent<br />

of the enhanced relocatable output routine, described in Appendix G, this restriction has<br />

been lifted to an offset of 262,143 (262K) from the start of a location counter. The Meta-<br />

Assembler (MASM) has been modified to generate this enhanced relocatable format.<br />

D.3. Relocation Order<br />

The relocation information for the special external references IBJ$ and DBJ$ must<br />

precede any relocation information for the u field of the same text word.<br />

The relocation information for the special external references BDICALL$, BDIREF$,<br />

LBDICALL$, and LBDIREF$ must precede any other relocation information for the u field<br />

of the same text word. This means that the assembler language programmer must use<br />

these references as BDICALL$+value, not value+BDICALL$.<br />

D.4. Relocatable Element Format Errors<br />

Some format errors in relocatable elements are not detected, because of their infrequent<br />

occurrence and the relatively high overhead required to detect these errors. These errors<br />

are caused only if the program creating the relocatable element is in error or if the<br />

element has been corrupted. Errors known not to be detected include<br />

• Incorrect length in location counter table (LCT)<br />

If the location counter table in the relocatable preamble specifies a location counter<br />

length that is too small, this error is undetected and may cause initial load errors. It is<br />

not an error to specify a length that is “too large,” since this implies the existence of<br />

a RES area at the end of the location counter.<br />

• Incorrect word count<br />

7830 9887–001 D–1


Restrictions<br />

D.5. EQU<br />

It is possible for the word count field in the relocation information to specify an illegal<br />

length.<br />

EQU directives of the form EQU ep1/ep2 have the following restrictions:<br />

1. If ep1 specifies a bank or segment name, the EQU directive is ignored.<br />

2. If ep2 specifies a bank or segment name and a later EQU directive specifies the<br />

same bank or segment name, the first EQU directive is ignored.<br />

3. The element containing ep2 must be included in the collection; it is not searched for<br />

in a LIB file.<br />

D.6. Implicit Call for Non-TPF$ File<br />

If you use the following statement where the file (file-name) contains no absolute<br />

elements or the most recent absolute of the file has been deleted, <strong>Collector</strong> is called<br />

implicitly, just as it is for TPF$. Note that there is no element specified on the @XQT<br />

statement.<br />

@XQT file-name.<br />

There is no last absolute for a file if the file contains no absolutes or the most recent<br />

absolute of the file has been deleted. In either case, the following message is output<br />

from the processor interface routine PREPRO, and an ER ERR$ termination of the<br />

<strong>Collector</strong> takes place.<br />

SI: BADLY CODED FIELD<br />

D.7. Truncation of Negative Fields<br />

To avoid problems with common-bank entry points, truncation of a negative field is not<br />

detected.<br />

D.8. LIB/NOT of Same File<br />

Currently, the <strong>Collector</strong> does not always recognize cases where two different names<br />

refer to the same file. Consider the following <strong>Collector</strong> directives:<br />

LIB USENAME.<br />

NOT FILE.ELT<br />

If USENAME and FILE refer to the same file, the NOT directive does not have the<br />

desired effect. This also applies if a file is referenced as “QUAL*FILE” and “FILE” since<br />

it is not obvious that FILE is not an @USE name.<br />

In addition, the directive “NOT SYS$*RLIB$” must specify the qualifier and file name in<br />

order to have the desired effect.<br />

D–2 7830 9887–001


D.9. Static Diagnostic Text<br />

Restrictions<br />

If static diagnostic (INFO group 8) text is present in more than one bank of a bankimplied,<br />

segmented collection, it is not processed correctly. To minimize this problem, all<br />

INFO group 8 text should be under odd-numbered location counters. Compilers that<br />

generate INFO group 8 text meet this requirement.<br />

D.10. Location Counters Restricted to 2047<br />

The total number of location counters must not exceed 2,047, numbered 0 through<br />

2,046.<br />

7830 9887–001 D–3


Restrictions<br />

D–4 7830 9887–001


Appendix E<br />

<strong>Collector</strong> Diagnostic Messages<br />

E.1. Introduction<br />

The diagnostic messages in this appendix are categorized into four different types:<br />

FATAL ERROR, ERROR, WARNING, and Information. The error count in the <strong>Collector</strong>’s<br />

end line includes only messages that are of type FATAL ERROR or ERROR.<br />

• FATAL ERROR<br />

This type of error is always printed by the <strong>Collector</strong> and has the prefix “*FATAL<br />

ERROR:.” It causes the <strong>Collector</strong> to stop processing, and no absolute relocatable<br />

element is produced.<br />

• ERROR<br />

This type of message is not printed if the N option is specified on the @MAP<br />

statement. If the X option is specified on the @MAP statement, then no output is<br />

produced. If the X option is not specified, processing continues and the resulting<br />

output is marked in error. ERROR messages have the prefix “*ERROR:.”<br />

• WARNING<br />

This type of message is not counted in the end line as an error; however, incorrect<br />

results can occur. WARNING messages are not printed if the N option is specified on<br />

the @MAP statement. WARNING messages have the prefix “*WARNING:.”<br />

• Information<br />

This is not an error message, but a normal notification of an action taken. This type<br />

of message is printed only if the S or L option is specified on the @MAP statement.<br />

Information messages do not have any prefix.<br />

E.2. FATAL ERROR Messages<br />

*FATAL ERROR: Above BANK directive not processed due to format error<br />

The immediately preceding IBANK or DBANK directive is improperly formatted.<br />

*FATAL ERROR: Addresses exceed 0777776 (262K)<br />

In a bank-implied collection, the assigned D bank addresses exceed 262,143.<br />

*FATAL ERROR: Addresses exceed 0777776 (262K) for D-bank bank-name<br />

7830 9887–001 E–1


<strong>Collector</strong> Diagnostic Messages<br />

In a bank-named collection, the assigned addresses for the named D bank exceed<br />

262,143.<br />

*FATAL ERROR: Addresses exceed 0777776 (262K) for I-bank bank-name<br />

In a bank-named collection, the assigned addresses for the named I bank exceed<br />

262,143.<br />

*FATAL ERROR: Address too large<br />

An address or offset on an IBANK or DBANK directive exceeds 0777000.<br />

*FATAL ERROR: Assumed main segment name $MAIN$ duplicated by entry<br />

point or bank name<br />

If there are no SEG directives in a collection, a main segment named $MAIN$ is created.<br />

At the time this segment is created, $MAIN$ has already been used as a bank or entrypoint<br />

name.<br />

*FATAL ERROR: Attempting to read Element Table for file file-name -<br />

BSP$ (RPFET$) status: status<br />

An error occurred trying to read the specified file’s element table. See the System<br />

Service Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for a description of<br />

status bits.<br />

*FATAL ERROR: Attempting to read Entry Point Table for file file-name -<br />

BSP$ (RPFEPT$) status: status<br />

An error occurred trying to read the entry-point table for the specified file that was<br />

named on a LIB directive. See the System Service Routines Library (SYSLIB)<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for a description of status bits.<br />

*FATAL ERROR: Bank bank-name duplicately defined<br />

The specified bank name has already been encountered on an IBANK or DBANK<br />

directive.<br />

*FATAL ERROR: Bank indirectly defines itself<br />

A bank in the bank structure is related to another bank that is directly or indirectly related<br />

to the first bank. For example, bank A follows bank B and bank B follows bank A.<br />

*FATAL ERROR: Bank bank-name is not properly defined<br />

The named bank has not been specified in the name-1 subfield on an IBANK or DBANK<br />

directive, but was used as a bank name in a LIB, IN, IBANK, or DBANK directive.<br />

*FATAL ERROR: Bank list must contain at least one bank name<br />

The bank-list subfield contains only numbers in parentheses.<br />

E–2 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

*FATAL ERROR: BSP$ error return for file file-name at address address<br />

BSP$ status status<br />

Indicates an internal error or a corrupted file. See the System Service Routines Library<br />

(SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>, for a description of status bits.<br />

*FATAL ERROR: Collection invalid - None of the banks in this collection<br />

can be the control bank or initially based<br />

The link vector bank cannot be the control bank or initially based. Z option (VOID) banks<br />

cannot be the control bank or initially based.<br />

*FATAL ERROR: <strong>Collector</strong> storage exhausted; processing terminated.<br />

Restructure your collection to avoid excessive memory use.<br />

Restructure your collection to avoid excessive memory use.<br />

*FATAL ERROR: CSMS - Insufficient space in CDB internal storage for<br />

last transaction<br />

*FATAL ERROR: CSMS - Internal storage address is bad<br />

*FATAL ERROR: CSMS - Internal storage control information is bad<br />

*FATAL ERROR: CSMS - Internal storage free chain is bad<br />

*FATAL ERROR: CSMS - CDB BDI or allocation offset information is bad<br />

*FATAL ERROR: CSMS - CDB or area is too short for initialization<br />

*FATAL ERROR: CSMS - Illegal reference to CDB storage<br />

*FATAL ERROR: CSMS - Attempted store beyond allocated limits<br />

*FATAL ERROR: CSMS - Free of memory allocated by another run<br />

*FATAL ERROR: CSMS - Second attempt to free storage<br />

*FATAL ERROR: CSMS - Internal CDB error information in A0-A3<br />

Indicates an internal <strong>Collector</strong> error. Please submit a tape containing the necessary<br />

relocatables and libraries needed to re-create the problem.<br />

*FATAL ERROR: Element element for RSEG segment cannot load data into<br />

common block common-block located in segment segment<br />

*FATAL ERROR: Element element for segment segment cannot load data into<br />

common block common-block located in RSEG segment<br />

*FATAL ERROR: Element element has more than 2,047 location counters.<br />

Location counter numbers must be in the range 0 - 2,046<br />

7830 9887–001 E–3


<strong>Collector</strong> Diagnostic Messages<br />

The specified relocatable element has more than 2,047 location counters. This can be<br />

caused by an internal <strong>Collector</strong> error or a corrupted relocatable element.<br />

*FATAL ERROR: Fatal error occurred while interpreting map symbolic<br />

This message follows one or more messages describing the error. Segment LANG<br />

interprets the <strong>Collector</strong> directives.<br />

*FATAL ERROR: FIRSTBDI value is too large: Maximum BDI 4092 (007774)<br />

The <strong>Collector</strong>'s maximum internal user-bank descriptor index (BDI) value cannot exceed<br />

4092 (07774).<br />

*FATAL ERROR: FIRSTBDI value is too large for the number of banks<br />

There are 12 bits available for a BDI value; therefore, the maximum BDI value is 07777.<br />

Banks specified on a $INFO 11 directive are also given a BDI value.<br />

*FATAL ERROR: First segment for last bank is not main segment<br />

The first segment specified for the last bank in the collection does not have the same<br />

main segment name as the other banks.<br />

*FATAL ERROR: entry-point has already been used as bankname<br />

The entry point specified on the WINDOW directive has already been used on a BANK<br />

directive.<br />

*FATAL ERROR: bank-name has already been used as non-bank name<br />

A bank name must be different from all segment names and entry points in the<br />

collection.<br />

*FATAL ERROR: Highest location counter number allowed is 2047 - highest<br />

location counter needed is location-counter<br />

In an R option collection, all common blocks are assigned location counter numbers<br />

greater than the highest location counter number found in any of the included relocatable<br />

elements. This message occurs when there are not enough location counter numbers<br />

available for assignment to all common blocks.<br />

*FATAL ERROR: Internal <strong>Collector</strong> error – can not buy bank to create<br />

link vector bank<br />

Unable to perform the ER BANK$ to acquire a bank to be used as the link vector bank.<br />

*FATAL ERROR: Internal <strong>Collector</strong> error: unexpected return from ADDIN<br />

An error was returned from the ADDIN routine that builds the internal <strong>Collector</strong> tables for<br />

elements specified on IN directives.<br />

E–4 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

*FATAL ERROR: value is illegal length for location counter locationcounter<br />

in element element<br />

The relocatable element's preamble specifies a length of greater than 65,535 for the<br />

given location counter or the given location counter is nonexistent and a length of greater<br />

than zero is specified. In either case, this indicates that the relocatable was incorrectly<br />

generated or that the file containing the relocatable has been corrupted.<br />

*FATAL ERROR: file-name is not a program file<br />

*FATAL ERROR: The level of <strong>Collector</strong> Common Bank COLLECTOR$01 (0403030)<br />

does not match the level of the <strong>Collector</strong> D Bank DATACON being<br />

executed.<br />

The <strong>Collector</strong> absolute element containing only the <strong>Collector</strong> D banks and requiring the<br />

installed <strong>Collector</strong> common I banks has been copied from a tape or file and executed out<br />

of its normal installed environment. In order to successfully execute the absolute<br />

element, it must be installed correctly with its matching <strong>Collector</strong> absolute element<br />

containing the matching <strong>Collector</strong> common I banks. These <strong>Collector</strong> absolute elements<br />

are not intended to be executed out of alternative files.<br />

*FATAL ERROR: Main segment name must be same for all banks<br />

In a bank-named collection, the main segment of each bank must have the same name<br />

as the main segment of all other banks.<br />

*FATAL ERROR: No available bank for control bank<br />

In a bank-named collection, there is no bank that can be the control bank.<br />

*FATAL ERROR: No files available to <strong>Collector</strong><br />

Due to facility errors or NOT directives, no files are available.<br />

*FATAL ERROR: No relocatable element created - status from ER PFWL$:<br />

status<br />

An error occurred in an R option collection attempting to output the relocatable element.<br />

The error was received while attempting to retrieve the next write location address of<br />

the program file. See the Exec System Software Executive Requests <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong> for a complete description of the statuses.<br />

*FATAL ERROR: No relocatable element created - I/O error: status<br />

An I/O error occurred in an R option collection attempting to output the relocatable<br />

element. See the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong> for a complete description of the statuses.<br />

*FATAL ERROR: No relocatable element created - ROR$E internal error:<br />

An internal error occurred in an R option collection attempting to output the relocatable<br />

element. This can indicate a problem with the ROR$E routine.<br />

7830 9887–001 E–5


<strong>Collector</strong> Diagnostic Messages<br />

*FATAL ERROR: No relocatable element created - status from ER PFI$:<br />

status<br />

An I/O error occurred in an R option collection attempting to output the relocatable<br />

element. The error was received while attempting to update the element table of the<br />

program file. See the Exec System Software Executive Requests <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong> for a complete description of the statuses.<br />

*FATAL ERROR: No relocatable element created - invalid Base Table<br />

information: status<br />

An error occurred in an R option collection attempting to output the relocatable element.<br />

See G.5 a complete description of the error.<br />

*FATAL ERROR: Number of banks n exceeds maximum number of user banks<br />

007771<br />

n indicates the number of banks in the collection. While the <strong>Collector</strong> is interpreting the<br />

map symbolic, n indicates the number of banks it encounters. The <strong>Collector</strong> processes<br />

VOID ($INFO 11) banks later in the collection and does each one individually. Thus<br />

whenever a VOID bank exceeds the maximum number, this message is displayed and<br />

the collection terminated, because there is no way to know at that point whether there<br />

will be more void banks to process.<br />

*FATAL ERROR: Only common bank directives - collection invalid<br />

Only IBANK and DBANK directives with the X option appeared in the collection. No<br />

absolute element is produced.<br />

*FATAL ERROR: Only Z option bank directives - collection invalid<br />

Only IBANK and DBANK directives with the Z option appeared in the collection. No<br />

absolute element is produced.<br />

*FATAL ERROR: PFWL$ error status status for file file-name<br />

See the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />

a description of the program file package (PFP) status.<br />

*FATAL ERROR: Previous FORM on bank precludes defining another SEG for<br />

this bank<br />

Since a FORM on a bank-name creates an exact duplication of a previous bank structure,<br />

no additional SEG, DSEG, or RSEG directives can be specified for the bank being<br />

generated.<br />

*FATAL ERROR: Relocatable element element contains an invalid<br />

relocation bit stream<br />

An error occurred while processing the text of the relocatable element. This indicates<br />

that the format of the relocatable element is in error or unknown to this level of the<br />

<strong>Collector</strong>.<br />

E–6 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

*FATAL ERROR: Relocatable element element has an illegal format or is<br />

of a format value1 not handled by the relocatable binary format value1<br />

available with this <strong>Collector</strong>.<br />

The relocatable format version specified in the base table of the relocatable is an<br />

unknown format. This can indicate a relocatable format which is in error or unknown to<br />

this level of the collector.<br />

*FATAL ERROR: Return from BSP$ attempting to access file at filename at<br />

address address - I/O status status<br />

An I/O error occurred while the <strong>Collector</strong> was trying to read or write the specified file at<br />

the specified address in the file. See the Exec System Software Executive Requests<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for status description.<br />

*FATAL ERROR: Return from SIR$ (CL<strong>OS</strong>R$) - status from I/O (or PFI$ if<br />

04000xx): status<br />

An error occurred while the <strong>Collector</strong> was trying to close the source input element. See<br />

the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />

status description.<br />

*FATAL ERROR: Return from SIR$ (GETSR$) - status from I/O: status<br />

An error occurred while the <strong>Collector</strong> was requesting the next source image from the<br />

source input element. See the Exec System Software Executive Requests <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong> for status description.<br />

*FATAL ERROR: Return from SIR$ (OPNSR$) - status from I/O: status<br />

An error occurred while the <strong>Collector</strong> was trying to open the source input element for<br />

reading. See the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong> for status description.<br />

*FATAL ERROR: RSEG segment has size value greater than 65K - not<br />

included in collection<br />

The specified RSEG is larger than 65,535 by the specified size. It is not included in the<br />

collection since the maximum size of an RSEG is 65,535.<br />

*FATAL ERROR: Scratch files could not be assigned - GETPSF$ status:<br />

status<br />

The files PSF$ and PSF1$ used by the <strong>Collector</strong> could not be assigned. See the System<br />

Service Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for a description of<br />

the GETPSF$ status.<br />

*FATAL ERROR: Segment indirectly defines itself<br />

A segment in the segment structure is related to another segment that is directly or<br />

indirectly related to the first segment. For example, segment A follows segment B and<br />

segment B follows segment A.<br />

7830 9887–001 E–7


<strong>Collector</strong> Diagnostic Messages<br />

*FATAL ERROR: Segment name segment duplicated<br />

The specified name has been used to define more than one segment in the collection.<br />

*FATAL ERROR: Segment segment not properly defined<br />

The segment name has not been specified in the name-1 subfield on a SEG or DSEG<br />

directive.<br />

*FATAL ERROR: Source input is invalid SDF - SIR$ (OPNSR$) error<br />

The symbolic element specified in the source input field on the @MAP processor call<br />

statement does not contain general symbolic type SDF (TYPE S).<br />

*FATAL ERROR: Symbol name name duplication error<br />

The specified name, present on an RSEG, SEG, DSEG, IBANK, or DBANK directive, has<br />

already been found as a nonsegment or nonbank name. This produces a fatal error.<br />

E.3. ERROR Messages<br />

*ERROR: Above directive ignored - duplicate RSEG name<br />

RSEG names must be unique.<br />

*ERROR: Above directive ignored - not allowed in collections with the<br />

WINDOW directive<br />

Segments are not allowed in collections that contain WINDOW directives.<br />

*ERROR: Above directive not allowed after Z option or VOID attribute<br />

bank<br />

No FORM, IN, or SEG directives are allowed following a Z option or VOID attribute bank.<br />

*ERROR: Above directive not allowed following a common bank<br />

Following an IBANK or DBANK directive specifying a common bank, another IBANK or<br />

DBANK directive must precede any SEG, DSEG, RSEG, XSEG, or IN directive.<br />

*ERROR: Above directive not allowed following the link vector bank<br />

No IN, SEG, or FORM directives are allowed for the link vector bank.<br />

*ERROR: Above directive not processed due to format error<br />

The immediately preceding source directive is improperly formatted. The directive is<br />

ignored.<br />

*ERROR: Above directive not processed - if banks are desired a BANK<br />

directive must precede any SEG or IN directives<br />

E–8 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

The first IBANK or DBANK directive was encountered after a SEG, RSEG, DSEG, XSEG,<br />

or IN directive has been processed.<br />

*ERROR: Above F-cycle subfield not properly formatted<br />

The F-cycle subfield in the immediately preceding source directive is improperly<br />

formatted.<br />

*ERROR: Above read-key subfield not properly formatted<br />

The read key subfield in the immediately preceding source directive is improperly<br />

formatted.<br />

*ERROR: A common bank can have no relationships<br />

An IBANK or DBANK directive with an X option has a bank-list subfield specified.<br />

*ERROR: AFCB attribute ignored - no bank name specified<br />

No bank name was specified with parentheses. If the parentheses are used, a bank<br />

name must also be specified.<br />

*ERROR: AFCB attribute ignored - no BDI value specified<br />

No BDI value was specified within the parentheses. If the parentheses are used, a BDI<br />

value must also be specified.<br />

*ERROR: AFCB attribute ignored - previous IN, SEG or FORM directive<br />

encountered<br />

No FORM, IN, or SEG directives are allowed with the alternate file common bank (AFCB)<br />

attribute unless the BDI value is also specified.<br />

*ERROR: name already defined<br />

The symbol has appeared in the first subfield of two or more EQU directives, or it is a<br />

bank or segment name.<br />

*ERROR: value at address address bits bits - bits element element is<br />

possible over-65K address field<br />

The D option was specified and an address field contains a value greater than 65,535.<br />

*ERROR: B and N option conflict - both ignored<br />

Both the B and N options were specified on the same BANK directive.<br />

*ERROR: Bad placement of character char<br />

The character is in an illegal position. This can indicate use of a bank-list field on an IN<br />

directive with no preceding IBANK or DBANK directive.<br />

7830 9887–001 E–9


<strong>Collector</strong> Diagnostic Messages<br />

*ERROR: Bank already based on BDR 0 - MAINI or BDR0 subattribute<br />

ignored<br />

The M option, the BANKINFO INITIAL(MAINI), or the BANKINFO INITIAL(BDR0) has<br />

been specified for more than one BANK directive.<br />

*ERROR: Bank already based on BDR 0 - M option ignored<br />

The M option, the BANKINFO INITIAL(MAINI), or the BANKINFO INITIAL(BDR0) has<br />

been specified for more than one BANK directive.<br />

*ERROR: Bank already based on BDR 1 - UTILI or BDR1 subattribute<br />

ignored<br />

The U option, the BANKINFO INITIAL(UTILI), or the BANKINFO INITIAL(BDR1) has been<br />

specified for more than one BANK directive.<br />

*ERROR: Bank already based on BDR 1 - U option ignored<br />

The U option, the BANKINFO INITIAL(UTILI), or the BANKINFO INITIAL(BDR1) has been<br />

specified for more than one BANK directive.<br />

*ERROR: Bank already based on BDR 2 - MAIND or BDR2 subattribute<br />

ignored<br />

The M option, the BANKINFO INITIAL(MAIND), or the BANKINFO INITIAL(BDR2) has<br />

been specified for more than one BANK directive.<br />

*ERROR: Bank already based on BDR 2 - M option ignored<br />

The M option, the BANKINFO INITIAL(MAIND), or the BANKINFO INITIAL(BDR2) has<br />

been specified for more than one BANK directive.<br />

*ERROR: Bank already based on BDR 3 - UTILD or BDR3 subattribute<br />

ignored<br />

The M option, the BANKINFO INITIAL(UTILD), or the BANKINFO INITIAL(BDR3) has<br />

been specified for more than one BANK directive.<br />

*ERROR: Bank already based on BDR 3 - U option ignored<br />

The M option, the BANKINFO INITIAL(UTILD), or the BANKINFO INITIAL(BDR3) has<br />

been specified for more than one BANK directive.<br />

*ERROR: Bank directive must precede BANKINFO directive - BANKINFO<br />

directive ignored<br />

The BANKINFO directive defines the previous bank. Therefore, a BANK directive must<br />

precede the BANKINFO directive.<br />

*ERROR: BANK directive must precede WINDOW directive - WINDOW directive<br />

ignored<br />

E–10 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

Windows are defined for particular banksA BANK directive must precede a WINDOW<br />

directive.<br />

*ERROR: BANK directives not allowed in R option collection<br />

An IBANK or DBANK directive appeared in an R option collection.<br />

*ERROR: BANKINFO attribute AFCB(bankname,bdi) conflicts with a previous<br />

AFCB BANKINFO attribute or an X attribute specification on the BANK<br />

directive - attribute is ignored.<br />

The previous BANK directive contains an X attribute specification or the BANKINFO<br />

attribute AFCB without subattributes has already been specified for a bank. The<br />

BANKINFO attribute AFCB (bankname,bdi) cannot also be specified for the same bank<br />

since these attributes produce conflicting results.<br />

*ERROR: BANKINFO attribute AFCB conflicts with a previous BANKINFO AFCB<br />

attribute which contains subattributes - attribute is ignored.<br />

The BANKINFO attribute AFCB (bankname,bdi) has already been specified for a bank.<br />

The BANKINFO attribute AFCB without subattributes cannot also be specified for the<br />

same bank since these attributes produce conflicting results.<br />

*ERROR: BANKINFO directive ignored - no attributes specified<br />

The BANKINFO directive was ignored because no attributes were specified.<br />

*ERROR: Bank, segment, or segment within bank not previously defined<br />

A FORM directive has been performed on an undefined segment or bank, or on a<br />

segment that is not contained in the specified bank.<br />

*ERROR: BDI of entry point entry-point not available to element due to<br />

local inclusion<br />

The entry point has been referenced by BDICALL$ or BDIREF$, but because of local<br />

element inclusion, it is not defined for the referencing bank.<br />

*ERROR: BDI value on BANKINFO directive is in error - AFCB attribute<br />

ignored<br />

The bank descriptor index (BDI) value cannot contain alphabetic characters. Only numeric<br />

characters are allowed.<br />

*ERROR: BDR attribute ignored - no BDR value specified<br />

The bank descriptor register (BDR) attribute was specified on a BANKINFO directive<br />

without a BDR value. The BDR value must be an integer from 0 to 3.<br />

*ERROR: BDR value conflicts with BANKINFO attributes or bank options -<br />

BDR value will be ignored<br />

7830 9887–001 E–11


<strong>Collector</strong> Diagnostic Messages<br />

The BDR value must be an integer from 0 to 3. The BDR value must not conflict with the<br />

M and U options on the bank directive or with the subattributes specified with the<br />

INITIAL attribute on the BANKINFO directive. The order of precedence is as follows:<br />

IBANK,M or MAINI = BDR is 0<br />

IBANK,U or UTILI = BDR is 1<br />

DBANK,M or MAIND = BDR is 2<br />

DBANK,U or UTILD = BDR is 3<br />

*ERROR: BDR value conflicts with bank options - BDR value will be<br />

ignored<br />

The BDR value must be an integer from 0 to 3. The BDR value must not conflict with the<br />

M and U options on the bank directive.<br />

IBANK,M = BDR 0<br />

IBANK,U = BDR 1<br />

DBANK,M = BDR 2<br />

DBANK,U = BDR 3<br />

*ERROR: BDR value on bank card is in error - default values will be<br />

used<br />

The BDR value must be an integer from 0 to 3. Default values for initially loaded banks<br />

are as follows:<br />

IBANK,M = BDR 0<br />

IBANK,U = BDR 1<br />

DBANK,M = BDR 2<br />

DBANK,U = BDR 3<br />

The default value of 0 is used for banks that are not initially loaded.<br />

*ERROR: BDR value on BANKINFO card is in error - default values will be<br />

used<br />

The BDR value must be an integer from 0 to 3. Default values for initially based banks<br />

are as follows:<br />

IBANK,M or MAINI = BDR is 0<br />

IBANK,U or UTILI = BDR is 1<br />

E–12 7830 9887–001


DBANK,M or MAIND = BDR is 2<br />

DBANK,U or UTILD = BDR is 3<br />

<strong>Collector</strong> Diagnostic Messages<br />

The default value of 0 is used for banks that are not initially based. The format is as<br />

follows:<br />

BANKINFO BDR(#)<br />

*ERROR: Bit limits defining field invalid in element element<br />

The relocatable element is formatted incorrectly. It was either created incorrectly or has<br />

been corrupted.<br />

*ERROR: Both T and F options given - both ignored<br />

The @MAP processor call statement contained both the T and F options.<br />

*ERROR: CLRAFCM sensitivity of absolute element conflicts with SETAFCM<br />

sensitivity of start address element<br />

When the program is loaded for execution, the arithmetic fault compatibility mode is set<br />

so that no interrupt is taken when a floating-point overflow, floating-point underflow, or<br />

divide fault occurs. However, when execution is initialized, the program’s code expects<br />

interrupts to be taken. This is a logical conflict.<br />

*ERROR: <strong>Collector</strong> tag MAPCALL$ or MAPGOTO$ used without a link vector<br />

bank<br />

The <strong>Collector</strong> defined tags MAPCALL$ and MAPGOTO$ are used with a link vector bank.<br />

A link vector bank is defined with the VECTOR attribute specified on the BANKINFO<br />

directive.<br />

*ERROR: Combined location counter location-counter length exceeds 262K<br />

This message occurs with an R option collection when the combined lengths of all<br />

location counters of the specified number in the included relocatable elements exceed<br />

262K.<br />

*ERROR: Common bank cannot be control bank - CONTROL attribute ignored<br />

The X option or the BANKINFO AFCB(#) has been specified with the BANKINFO<br />

CONTROL. The BANKINFO CONTROL is ignored.<br />

*ERROR: Common bank cannot be control bank - C option ignored<br />

Both C and X options have been specified on the same IBANK or DBANK source<br />

directive. The C option (control bank) is ignored.<br />

*ERROR: Common bank cannot be control bank - C option or CONTROL<br />

attribute ignored<br />

7830 9887–001 E–13


<strong>Collector</strong> Diagnostic Messages<br />

The X option or the BANKINFO AFCB(#) has been specified with the BANKINFO<br />

CONTROL or with the C option on the bank directive. The C option or the CONTROL<br />

attribute is ignored.<br />

*ERROR: Common block common-block included more than once either<br />

directly or by FORM - only first IN of common block processed<br />

The specified common block was either named on two or more IN directives or was<br />

included more than once by use of the FORM directive.<br />

*ERROR: Common block location counter used as INFO-8 location counter<br />

in element element<br />

The same location counter cannot be used both as INFO 8 and as a common block.<br />

*ERROR: Control bank ambiguity - CONTROL attribute ignored<br />

The C option or the BANKINFO CONTROL can be specified only once in a collection for<br />

either an IBANK or DBANK source directive. The C option or the CONTROL attribute has<br />

already been specified once.<br />

*ERROR: Control bank ambiguity - C option ignored<br />

The C option can be specified only once in a collection on either an IBANK or DBANK<br />

source directive. The C option has already been specified once.<br />

*ERROR: Control bank has S option - segmentation not allowed<br />

A program whose control bank has the S option specified contains segments.<br />

*ERROR: COR calls on undefined location counter location-counter in<br />

element element<br />

The specified location counter number is not present in the named relocatable element.<br />

*ERROR: COR ignored - No global location counter location-counter in<br />

element element<br />

A COR source directive specified a location counter that was not included globally in a<br />

bank-named collection.<br />

*ERROR: COR not used with R option<br />

A COR source directive appeared in an R option collection. The source directive is<br />

ignored.<br />

*ERROR: COR of nonexistent element element<br />

A COR source directive specified an element that was not included in the collection.<br />

*ERROR: CSF$ status status from image<br />

E–14 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

The image was rejected by ER CSF$. The file named is excluded from the collection. See<br />

the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />

status description.<br />

*ERROR: DBJ$ is not used in an op code field - referenced in element<br />

The symbol DBJ$ must appear as an external reference in bits 0 through 9. See 4.5.1 for<br />

correct use of DBJ$.<br />

*ERROR: DEF and REF not allowed with V option<br />

A DEF or REF directive has been specified with a V option collection. The directives are<br />

ignored because the tables generated by these directives are placed in the program’s D<br />

bank, which will be nonexistent in the absolute element.<br />

*ERROR: Directed LIB for file file-name illegal - LIB file-name assumed<br />

A directed LIB directive has been found in a bank-implied collection. The directive is<br />

processed as LIB file-name.<br />

*ERROR: DLIB directive is valid only for bank named collections -<br />

directive ignored<br />

A directed LIB (DLIB) directive has been found in a bank-implied collection. The directive<br />

is ignored.<br />

*ERROR: DLIB directive is valid only with DEFAULT$LIBS - directive<br />

ignored<br />

The keyword DEFAULT$LIBS must be used on the DLIB directive. The format is - DLIB<br />

DEFAULT$LIBS.(bank-name/$lcs,…)<br />

*ERROR: DLIB directive ignored - first occurrence of DLIB directive<br />

will be used<br />

The DLIB directive can be used only once. The first occurrence of the DLIB directive will<br />

be used. All other occurrences are ignored.<br />

*ERROR: DLIB directive not allowed in R option collections<br />

Default libraries are not searched during R option collections. The DLIB directive is not<br />

allowed in R option collections.<br />

*ERROR: bank-name does not exist as a common bank<br />

The name of the common bank specified for initial basing is not defined in the collection.<br />

*ERROR: Element element ambiguity in file file-name Element list:<br />

The specified element name is found for more than one relocatable element in the file.<br />

The list following the message contains the element name and version name for each<br />

7830 9887–001 E–15


<strong>Collector</strong> Diagnostic Messages<br />

such element in the file. None of the listed elements is included in the collection. CLASS<br />

directives can resolve the ambiguity.<br />

*ERROR: Element element exists in file file-name with different<br />

versions<br />

The specified element exists in the named file with more than one version name.<br />

*ERROR: Element element/version in file file-name bypassed - duplicates<br />

element name already specified<br />

In processing a whole file IN (IN file-name.), an element in file-name is found that<br />

duplicates the name of an element from an IN directive from another file.<br />

*ERROR: Element element in file file-name bypassed - duplicates already<br />

encountered common block<br />

A relocatable element with the same name as a common block that has already been<br />

included in the collection is encountered. The relocatable element is ignored.<br />

*ERROR: Element inclusion is not allowed after FORM directive on a bank<br />

A directive of the form FORM bank-name was followed by an IN directive. The IN<br />

directive is ignored since the FORM directive implies that the bank structure is to be the<br />

same as the specified bank.<br />

*ERROR: Element element not found in file file-name<br />

The element specified on an IN directive could not be found in the named file.<br />

*ERROR: Element element not included - has zero length location counter<br />

location-counter - no value given<br />

The specified element contains a zero length location counter and is excluded from the<br />

collection.<br />

*ERROR: Element element specified on TYPE IBJLNK not included in<br />

collection<br />

A TYPE IBJLNK source directive was specified with the named element that was not<br />

included in the collection.<br />

*ERROR: Element element start address not used - not initially loaded<br />

The specified element is not in an initially based bank.<br />

*ERROR: Element element start address address not used - outside main<br />

segment limits<br />

The specified element’s start address is not included in the main segment of a bank.<br />

E–16 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

*ERROR: Element element used BDICALL$/BDIREF$ with label which is<br />

defined under zero length location counter - cannot be satisfied<br />

The label used with BDICALL$/BDIREF$ in the named element is defined under a zero<br />

length location counter.<br />

*ERROR: Element element used BDICALL$/BDIREF$ with label which is local<br />

to another bank - cannot be satisfied<br />

The specified element used BDICALL$/BDIREF$ with a label that is defined in an<br />

element that was locally included in another bank.<br />

*ERROR: Element element was not found for COR<br />

An element named on a COR parameter was not found.<br />

*ERROR: Element element was not found for SNAP<br />

An element named on a SNAP parameter was not found.<br />

*ERROR: ENT directive cannot have a numeric field<br />

The parameter field of the ENT directive must contain an externalized entry-point name.<br />

*ERROR: ENT entry point entry-point not global - not used<br />

The named entry point that was specified on an ENT directive is included only locally.<br />

*ERROR: Entry point entry-point ambiguity in file file-name Element<br />

list:<br />

The specified entry point was found in more than one element in the file. A list of the<br />

elements in which it was found follows. CLASS or NOT directives can help correct the<br />

problem. This message is not printed for FORTRAN library entry points B2L$ and B2O$,<br />

which are handled as special cases.<br />

*ERROR: Entry point entry-point in indirect segment referenced<br />

illegally with offset from element<br />

An entry point in the I bank of an indirectly loaded segment cannot be referenced with a<br />

plus or minus offset unless the reference is made from within the segment containing<br />

the entry point. If the reference is from outside the segment containing the entry point,<br />

the offset is ignored.<br />

*ERROR: Entry point entry-point not defined in bank bank-name - no<br />

window created<br />

The entry point/tag specified on the WINDOW directive must be defined in the bank<br />

where the window is defined.<br />

*ERROR: Entry point entry-point not global - zero used in COR<br />

7830 9887–001 E–17


<strong>Collector</strong> Diagnostic Messages<br />

A value of zero has been used for an entry point specified in a COR source directive as<br />

no global value was found for the entry point.<br />

*ERROR: Entry point entry-point not global - zero used in SNAP<br />

A value of zero has been used for an entry point specified in a SNAP source directive as<br />

no global value was found for the entry point.<br />

*ERROR: Entry point entry-point not valid in both REF and DEF<br />

The same entry-point name has been specified on both a DEF and REF source directive.<br />

The first source directive with the name is the only one processed. All others are<br />

ignored.<br />

*ERROR: Entry point entry-point referenced from element element is<br />

undefined name<br />

A reference to an entry point that is not defined in any of the elements included in the<br />

collection has occurred. This message is not printed if the reference is made from a<br />

code-stripped bank.<br />

*ERROR: Entry point entry-point referenced from element element is<br />

undefined name for bank bank-name<br />

Because of local element inclusion, the specified entry point cannot be referenced from<br />

the named bank.<br />

*ERROR: Entry point entry-point referenced from entry point entry-point<br />

is undefined name<br />

A reference to an entry point from another entry point has occurred. The first entry point<br />

is not defined in any of the elements included in the collection.<br />

*ERROR: Entry point entry-point specified on TYPE IBJLNK not defined in<br />

collection<br />

A TYPE IBJLNK source directive was specified with an entry point that was not defined<br />

in any element included in the collection.<br />

*ERROR: Entry point entry-point used to define entry point entry-point<br />

is not an absolute value<br />

A reference to an entry point from another entry point has occurred. The first entry point<br />

is not an absolute value.<br />

*ERROR: ENT specified entry point entry-point is not in an initially<br />

based bank<br />

The program start address must be in an initially based bank.<br />

*ERROR: ENT specified entry point entry-point is not in any included<br />

element - not used<br />

E–18 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

The entry point specified on an ENT source directive could not be found in any element<br />

included in the collection.<br />

*ERROR: ENT specified entry point entry-point is not in the main<br />

segment<br />

The program start address must be in the main segment.<br />

*ERROR: EXTENDED and NOTEXTENDED attribute conflict - both ignored<br />

Both the B option or EXTENDED attribute and the N option or NOTEXTENDED attribute<br />

were specified for the same BANK directive.<br />

*ERROR: File file-name does not contain an entry point table<br />

The named file specified on a LIB directive has either not been prepared (@PREP) or<br />

contains no entry points. The file is not searched for entry points but it can be searched<br />

for elements named on IN directives with no file name.<br />

*ERROR: File file-name is empty<br />

The specified file that was named on a source directive in the collection contains no<br />

elements.<br />

*ERROR: File file-name not properly released - error return from<br />

P<strong>OS</strong>TPR$ - CSF$ status: status<br />

An error occurred while the <strong>Collector</strong> was trying to perform an @FREE command on the<br />

named file. See the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong> for status description.<br />

*ERROR: FIRSTBDI specification is allowed only for TYPE EXEC<br />

collections<br />

The collection must be TYPE EXEC to use the FIRSTBDI directive.<br />

*ERROR: FIRSTBDI value is in error - directive ignored<br />

An integer must be specified in the value field. The default value of 4 will be used.<br />

*ERROR: First segment is main segment - may not be DSEG<br />

The first segment named in a bank-implied collection and the first segment named<br />

following a bank statement in a bank-named collection cannot be a dynamic segment.<br />

*ERROR: First segment is main segment - may not be RSEG<br />

The first segment named in a bank-implied collection and the first segment named<br />

following a bank statement in a bank-named collection cannot be a relocatable segment.<br />

*ERROR: FORM cannot specify current bank and segment<br />

7830 9887–001 E–19


<strong>Collector</strong> Diagnostic Messages<br />

The FORM source directive was specified with the same bank-name and segment name<br />

as those that are currently being defined.<br />

*ERROR: FORM ignored - SEG directive needed immediately preceding FORM<br />

In a segmented collection, a FORM bank-name*segment-name directive immediately<br />

follows an IBANK or DBANK directive. The main segment must be named on a SEG<br />

directive preceding the FORM directive.<br />

*ERROR: FORM on bank-name not allowed after SEG or IN directive<br />

A SEG or IN directive appeared before a FORM directive that specified only the bank<br />

name; that is, FORM bank-name.<br />

*ERROR: FRSTIN ignored - not allowed with filename only<br />

A FRSTIN source directive was specified with a file name only. An element name must<br />

also be given on the FRSTIN directive.<br />

*ERROR: FRSTIN ignored - only allowed for first element in segment<br />

A previous FRSTIN source directive had appeared for this segment. This directive is<br />

treated as an IN directive for the element.<br />

*ERROR: Generated address address in element element is out of range<br />

The D option was specified and an address field has been detected that is outside the<br />

address limits for the program.<br />

*ERROR: file-name has wrong project for private file<br />

The wrong project was specified for a private file.<br />

*ERROR: IBJ$ is not used in an op code field - referenced in element<br />

element<br />

The symbol IBJ$ must appear as an external reference in bits 0 through 9. See 4.5.1 for<br />

correct use of IBJ$.<br />

*ERROR: name ignored - format or terminator error<br />

The TYPE directive has an illegal terminator following the specified parameter, or the<br />

parameter is illegal.<br />

*ERROR: name ignored - TYPE parameter conflict<br />

The named parameter directly contradicts a parameter already processed on a TYPE<br />

directive or an option on the processor call statement.<br />

*ERROR: Illegal attribute name ignored<br />

E–20 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

The named illegal attribute was specified on a BANKINFO source directive. The attribute<br />

is ignored and the collection is continued.<br />

*ERROR: Illegal group number value in INFO directive in element element<br />

is ignored<br />

The specified group number named on an INFO directive in the named relocatable<br />

element is not a legal value.<br />

*ERROR: Illegal option char disregarded<br />

The named illegal option was specified on an IBANK or DBANK source directive. The<br />

option is ignored and the collection is continued.<br />

*ERROR: Illegal subattribute name ignored<br />

The named illegal subattribute was specified on a BANKINFO source directive. The<br />

subattribute is from the INITIAL attribute. Legal subattributes are: MAINI, MAIND, UTILI,<br />

UTILD, BDR0, BDR1, BDR2, and BDR3. The subattribute is ignored and the collection<br />

continues.<br />

*ERROR: Indirect load subroutines not available - IDL entries filled<br />

with ER ERR$ instructions<br />

The indirect load routines are required if a segment must be indirectly loaded. They have<br />

been excluded from this collection, possibly because of a NOT SYS$*RLIB$ directive.<br />

*ERROR: INFO 11 entry for bank-name ignored in element element -<br />

duplicates existing name<br />

The name specified on a Meta-Assembler (MASM) INFO group 11 directive can appear<br />

only on another INFO group 11 directive.<br />

*ERROR: INITIAL attribute ignored - no subattributes specified<br />

The INITIAL attribute must have one or more of the following subattributes specified:<br />

MAINI, MAIND, UTILI, UTILD, BDR0, BDR1, BDR2, or BDR3. The INITIAL attribute is<br />

ignored because there were no subattributes specified.<br />

*ERROR: file-name is not a sector-formatted mass storage file<br />

*ERROR: file-name is not cataloged or assigned<br />

The specified file that was named on a source directive in the collection is not a<br />

cataloged file or is not assigned to this run.<br />

*ERROR: entry-point is not defined - no window created for bank bankname<br />

The entry point/tag specified on the window directive is not defined.<br />

*ERROR: LEVEL attribute ignored - no LEVEL value specified<br />

7830 9887–001 E–21


<strong>Collector</strong> Diagnostic Messages<br />

The LEVEL attribute was specified on a BANKINFO directive without a LEVEL value. The<br />

LEVEL value must be an integer from 0 to 3. Default value of 2 is used.<br />

ERROR: LEVEL specification not allowed with R-option collections<br />

The LEVEL directive has no meaning for collections producing relocatable element<br />

output.<br />

ERROR: LEVEL value is in error - directive ignored<br />

The LEVEL value field must be an integer from 0 to 3. The default value of 2 is used.<br />

ERROR: LEVEL value on bank card is in error - default values will be<br />

used<br />

The LEVEL field must be an integer from 0 to 3. The default LEVEL for the collection is<br />

assigned to the bank.<br />

*ERROR: LEVEL value on BANKINFO directive is in error - default values<br />

will be used<br />

The LEVEL value must be an integer from 0 to 3. The default value of 2 is used.<br />

ERROR: LEVEL 1 is assumed for Common Banks - specified level is ignored<br />

The BANKINFO AFCB(name,bdi) attribute was specified. Level 1 is assumed for<br />

common banks (see 6.6). Either the level was specified on the bank directive or on the<br />

LEVEL directive. The specified level is ignored and level 1 is used for the common bank.<br />

*ERROR: Limit is 16 SNAPs per collection<br />

The immediately preceding SNAP directive is ignored because 16 snaps have already<br />

been made.<br />

*ERROR: Local-global conflict - entry point entry-point referenced by<br />

location counter location-counter element element bank bank-name<br />

Due to local inclusion of the location counter under which the entry point is named, more<br />

than one value for that entry point can be referenced from the named bank. A value of<br />

zero is used to satisfy the reference to the entry point.<br />

*ERROR: Local-global conflict - location counter location-counter<br />

referenced by location counter location-counter element element<br />

*ERROR: Local-global conflict - location counter location-counter<br />

referenced by location counter location-counter element element bank<br />

bank-name<br />

The first location counter has been locally included so that the named bank can access<br />

the location counter in more than one bank. A value of zero is used for the location<br />

counter’s assigned value because it is impossible to determine which of the available<br />

values should be used.<br />

E–22 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

*ERROR: Location counter location-counter unknown to location counter<br />

location-counter in element element<br />

In a bank-implied collection, this message usually indicates an erroneously formatted<br />

relocatable that contains a reference to a nonexistent location counter.<br />

*ERROR: Location counter location-counter unknown to location counter<br />

location-counter in element element bank bank-name<br />

Because of local inclusion of the element, the reference made to the first location<br />

counter number cannot be satisfied as it is not in any bank set specified for the second<br />

location counter number. In rare cases, this can indicate an erroneously formatted<br />

relocatable that contains a reference to a nonexistent location counter.<br />

*ERROR: MAPCALL$ is not used in an op code field - referenced in<br />

element element<br />

The symbol MAPCALL$ must appear as an external reference in bits 0 through 9.<br />

*ERROR: MAPGOTO$ is not used in an op code field - referenced in<br />

element element<br />

The symbol MAPGOTO$ must appear as an external reference in bits 0 through 9.<br />

*ERROR: Minimum gap size in error - system value of 10 is used<br />

A format error was detected on the MINGAP source directive. The directive is ignored<br />

and the system value is assumed.<br />

*ERROR: Minimum load size in error - system value of 10 is used<br />

A format error was detected on the MINSIZ source directive. The directive is ignored and<br />

the system value is assumed.<br />

*ERROR: file-name needs a read-key or is write-only<br />

*ERROR: No absolute element produced by <strong>Collector</strong><br />

A fatal error in the collection or the presence of the X option has prevented the output of<br />

an absolute element. The preceding diagnostic messages specify the error or errors.<br />

*ERROR: No continuation statement found<br />

No further statement was found following the continuation character (;).<br />

*ERROR: No element with DEF entry point entry-point<br />

No element was found that contained the specified DEF entry point.<br />

*ERROR: No relocatable element produced by <strong>Collector</strong><br />

7830 9887–001 E–23


<strong>Collector</strong> Diagnostic Messages<br />

Due to a fatal error or the X option, no relocatable element was produced in an R option<br />

collection. The preceding messages specify the error or errors.<br />

*ERROR: No start address<br />

No ENT directive was used in the collection and none of the preambles of the included<br />

relocatable elements indicated a start address.<br />

*ERROR: Not enough B(X) registers specified on the VECTOR attribute<br />

Another B register is needed on the BANKINFO directive with the VECTOR attribute<br />

specified. Each B register corresponds to 4,096 link vector entries.<br />

*ERROR: Number in COR address field is over 0177777 (65K)<br />

A COR source directive was specified with an address field greater than 0177777 (65K).<br />

*ERROR: Offset not numeric on EQU directive<br />

An EQU source directive was specified with a non-numeric offset field. The offset field<br />

on the right-hand side of an EQU directive must be numeric.<br />

*ERROR: Only D (Dynamic), R (Readonly), N (Extended), and O<br />

(Overridemin) options (attributes) allowed with VECTOR attribute - all<br />

others ignored<br />

Only the D, R, N, and O options are allowed with the link vector bank. Only the Dynamic,<br />

Readonly, Extended and Overridemin attributes are allowed with the link vector bank. All<br />

other options or attributes are ignored.<br />

*ERROR: PFI$ error status status for file file-name<br />

An ER PFI$ was performed and received an error status. The possible values are defined<br />

in the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

*ERROR: Previous ENT directive overrides this one<br />

An ENT directive appeared previously in the collection. This directive is ignored.<br />

*ERROR: Previous IN overrides this one for file file-name<br />

In a bank-implied collection, an IN directive of a whole file can occur only once. Only the<br />

first IN file-name is processed.<br />

*ERROR: Previous IN overrides this one for the element name element<br />

In a bank-implied collection, an element can be included only once in a collection. Only<br />

the first inclusion is processed.<br />

*ERROR: $ prefixed to common block name to avoid duplicating element<br />

name element<br />

E–24 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

A common block was included that had the same name as the named element that was<br />

previously included.<br />

*ERROR: Relocatable element element is in error<br />

The specified element was marked in error by the processor that generated it.<br />

*ERROR: Relocatable element element not found<br />

The element specified on an IN directive with no file name could not be found in any of<br />

the files named on LIB directives.<br />

*ERROR: Relocatable element element/version not found<br />

The specified element was named on an IN directive with no file name and could not be<br />

found in any of the files named on LIB directives.<br />

*ERROR: Required subfield missing on above directive<br />

A required subfield was omitted.<br />

*ERROR: RSEG cannot be used to define a SEG<br />

A relocatable segment cannot be present in the relationship field of a SEG directive. The<br />

RSEG is ignored in the relationship list.<br />

*ERROR: RSEG directive uses no fields or characters other than name<br />

An RSEG source directive was specified other than as RSEG segment-name.<br />

*ERROR: S-option banks do not allow segmentation - treated as dynamic<br />

A SEG directive has appeared for a bank that was specified with an S option.<br />

*ERROR: S-option bank invalidates Z option on processor call<br />

The S option on a bank directive overrides the Z option on the processor call because the<br />

Exec requires the diagnostic tables to process nonconfigured common banks (NCCB).<br />

*ERROR: Same location counter used for different common blocks in<br />

element element<br />

The same location counter was specified in the named relocatable to define more than<br />

one common block.<br />

*ERROR: SEG cannot overlay main segment - has been changed to follow<br />

main segment<br />

A SEG source directive of the form SEG A,B was specified where B is the main segment<br />

name.<br />

*ERROR: SEG not used with R option<br />

7830 9887–001 E–25


<strong>Collector</strong> Diagnostic Messages<br />

A SEG source directive appeared in an R option collection.<br />

*ERROR: SETAFCM sensitivity of absolute element conflicts with CLRAFCM<br />

sensitivity of start address element<br />

When the program is loaded for execution, the arithmetic fault compatibility mode will be<br />

set so that an interrupt is taken when a floating-point overflow, floating-point underflow,<br />

or divide fault occurs. However, when execution begins, the program’s code does not<br />

expect an interrupt to occur. This is a logical conflict.<br />

*ERROR: SIR$ detected an error for the symbolic input image or the<br />

symbolic output image<br />

A SIR$ error message is printed immediately before this message. The System Service<br />

Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>, Appendix B contains a complete<br />

description of SIR$ error messages. All messages indicate an error for <strong>Collector</strong> source<br />

language input from the runstream or from the SI element or for <strong>Collector</strong> source output<br />

to the SO element.<br />

*ERROR: SNAP calls on undefined location counter location-counter in<br />

element element<br />

The location counter number on a SNAP directive does not exist for the element.<br />

*ERROR: SNAP$ element not found - no snapshots taken<br />

The SNAP$ element that produces the requested snapshot dumps has not been found.<br />

*ERROR: SNAP ignored - no global location counter location-counter in<br />

element element<br />

A SNAP source directive specified a location counter that was not included globally in a<br />

bank-named collection.<br />

*ERROR: SNAP not used with R option<br />

A SNAP source directive appeared in an R option collection.<br />

*ERROR: SNAP of nonexistent element element<br />

*ERROR: Storage Preference specification is no longer allowed. E, P,<br />

$E, or $P option ignored<br />

The E, P, $E, and $P options refer to storage preference on older hardware no longer<br />

supported by the Executive. Please remove them from the map symbolic since they can<br />

be reused in a future release of the <strong>Collector</strong>.<br />

*ERROR: Text generated under location counter location-counter outside<br />

range for element element<br />

More text was generated under a location counter than was specified in the preamble of<br />

the named relocatable element. This usually means an erroneous relocatable.<br />

E–26 7830 9887–001


*ERROR: This segment is used to define itself<br />

<strong>Collector</strong> Diagnostic Messages<br />

The segment being defined in the immediately preceding SEG or DSEG directive has its<br />

own name present in the relationship list. The name in the relationship list is ignored.<br />

*ERROR: Too many characters in a subfield<br />

A subfield in the immediately preceding source directive has too many characters. The<br />

source directive is bypassed.<br />

*ERROR: Too many register pairs - only 14 allowed, others ignored<br />

A register pair is a B register or a B register followed by an X register, specified on the<br />

VECTOR attribute, BANKINFO VECTOR(B2 B3,X3). The first register pair is B2. The<br />

second register pair is B3,X3. Only 14 pairs are allowed with the VECTOR attribute.<br />

*ERROR: Truncation of field value at address address bits bits - bits<br />

in element element<br />

The value to be placed in the specified field size is too large and was truncated. The left<br />

portion of the value is truncated. This occurs, for instance, when an address over 65,535<br />

is supposed to be placed in the U portion of an instruction that is only 16 bits long.<br />

*ERROR: TYPE COMSEG ignored for bank-implied collection<br />

A TYPE COMSEG directive appeared in a bank-implied collection. This directive is<br />

ignored.<br />

*ERROR: TYPE EXEC not allowed with R-option collection<br />

TYPE EXEC has no meaning for collections producing relocatable element output.<br />

*ERROR: TYPE NPEDIAG directive not allowed with R-option collection<br />

TYPE NPEDIAG has no meaning for collections producing relocatable element output.<br />

*ERROR: TYPE READONLY ignored for banked or segmented collection<br />

The TYPE READONLY directive can be used only with bank-implied collections. In a<br />

bank-named collection, use the R option on IBANK and DBANK directives instead. A<br />

read-only bank cannot be segmented.<br />

*ERROR: Use of bank-name or segment-name segment not allowed with<br />

BDICALL$/BDIREF$ - entry point must be used<br />

The specified bank name or segment name was used with either BDICALL$ or<br />

BDIREF$. An entry point must be used with BDICALL$ or BDIREF$.<br />

*ERROR: VECTOR attribute ignored - B register is out of range<br />

B register can be a value from B2 to B15, or B2 to B31 for TYPE EXEC collections.<br />

7830 9887–001 E–27


<strong>Collector</strong> Diagnostic Messages<br />

*ERROR: VECTOR attribute ignored - Common Bank cannot be the Link<br />

Vector bank<br />

The X option of AFCB attribute was specified for the link vector bank. The link vector<br />

bank cannot be a common bank.<br />

*ERROR: VECTOR attribute ignored - Link vector bank already defined<br />

There can be only one link vector bank per collection.<br />

*ERROR: VECTOR attribute ignored - No B register specified<br />

The BANKINFO directive with the VECTOR attribute was specified without a B register.<br />

BANKINFO VECTOR(B3).<br />

*ERROR: VECTOR attribute ignored - No X register specified.<br />

The VECTOR attribute was specified on the BANKINFO directive with a comma after the<br />

B register but no X register. There must be a comma between the B and X register.<br />

There must be a space between each pair of B and X registers: BANKINFO VECTOR<br />

(B3,X3 B4,X4)<br />

*ERROR: VECTOR attribute ignored - SEG, IN or FORM specified<br />

The <strong>Collector</strong> builds the link vector bank; therefore, no SEG, IN, or FORM directives can<br />

be specified for the link vector bank.<br />

*ERROR: VECTOR attribute ignored - SEGs used in collection<br />

No SEG directives are allowed in a collection that contains a link vector bank.<br />

*ERROR: VECTOR attribute ignored - X register is out of range<br />

X register can be a value from X1 to X15.<br />

*ERROR: VOID attribute ignored - only allowed with D option or DYNAMIC<br />

attribute<br />

Only the D option or the Dynamic attribute from the BANKINFO directive is allowed with<br />

the VOID attribute or the Z option for the IBANK and DBANK directives.<br />

*ERROR: VOID attribute ignored - previous IN, SEG or FORM directive<br />

encountered<br />

The bank will not be VOID; no IN, SEG, or FORM directives are allowed for a VOID bank.<br />

*ERROR: entry-point was a DEF entry point but was never defined<br />

A DEF source directive specified an entry point that was never defined by any element<br />

included in the collection.<br />

E–28 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

*ERROR: WINDOW address defined by entry point entry point is a negative<br />

value<br />

This error indicates that the entry point used in the address field of the WINDOW<br />

directive has a negative value.<br />

*ERROR: WINDOW directive ignored - address specified is a negative<br />

value<br />

This error indicates that the constant value specified in the address field of the WINDOW<br />

directive is negative.<br />

*ERROR: WINDOW directive ignored - B register out of range<br />

B register specified on the WINDOW directive is out of range. The range is B2 to B15 for<br />

normal collections, and B2 to B31 for TYPE EXEC collections.<br />

*ERROR: WINDOW directive ignored - No B register specified<br />

No B register was specified on the WINDOW directive. See 6.10 for the proper syntax of<br />

the WINDOW directive.<br />

*ERROR: WINDOW directive ignored - No X register specified<br />

No X register was specified on the WINDOW directive. See 6.10 for the proper syntax of<br />

the WINDOW directive.<br />

*ERROR: WINDOW directive ignored - SEGs used in collection<br />

The WINDOW directive cannot be used in collections with segmentation.<br />

*ERROR: WINDOW directive ignored - syntax error - a space must separate<br />

the WINDOW directive from its parameters<br />

There must be a space after the WINDOW directive and a space before either the<br />

address specified or the parentheses.<br />

*ERROR: WINDOW directive ignored - syntax error while processing the<br />

window address<br />

This indicates that an error was encountered while processing the address field of the<br />

WINDOW directive. You may have used an invalid character in the address field.<br />

*ERROR: WINDOW directive ignored - X register out of range<br />

X register specified on the WINDOW directive is out of range. The range is X1 to B15.<br />

*ERROR: XSEG directives allowed only for TYPE EXEC collections - XSEG<br />

directive ignored<br />

XSEG directives cannot be used unless a TYPE EXEC directive was given previously<br />

within the collection.<br />

7830 9887–001 E–29


<strong>Collector</strong> Diagnostic Messages<br />

*ERROR: Z option ignored - not allowed with options other than D<br />

Only the D option is allowed with the Z option on the IBANK and DBANK directives.<br />

E.4. WARNING Messages<br />

*WARNING: Bank bank-name is not an extended mode bank and a WINDOW<br />

directive was specified<br />

The bank containing the WINDOW directive is not an extended mode bank.<br />

*WARNING: BDR attribute overrides previous BDR value specified<br />

A BDR value has already been specified either on the bank directive or on a previous<br />

BDR attribute specified on a BANKINFO directive. The new BDR value is used.<br />

*WARNING: Blank specification - TPF$ assumed<br />

There is a void subfield on an IN or NOT directive. This is not necessarily an error, but it<br />

can indicate a typographical error in a <strong>Collector</strong> directive.<br />

*WARNING: Common block common-block not in D-bank - minimum address<br />

ignored<br />

The INFO 3 value is for a common block not included in the D bank; thus it is ignored.<br />

*WARNING: Control bank changed to bank-name - S and C option conflict<br />

on bank bank-name<br />

A nonconfigured common bank (NCCB) cannot be a control bank.<br />

*WARNING: Control bank bank-name not initially based<br />

The control bank is assumed to be always based, so tables generated by the <strong>Collector</strong><br />

and some implicitly included routines are placed there. Attempts to reference these<br />

tables and routines cannot be successful.<br />

*WARNING: Control bank will be code stripped<br />

The V and C options have been used together on a bank directive, thus causing the<br />

control bank to be code-stripped.<br />

*WARNING: Element element entry point entry-point already defined<br />

The specified entry point found in the named element has already been defined in<br />

another element. The entry point in the named element is not used.<br />

WARNING: Element element entry point entry-point already defined by<br />

BANK directive<br />

E–30 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

The specified entry point found in the named element has already been defined by an<br />

IBANK or DBANK directive. The entry point in the named element is not used.<br />

*WARNING: Element element entry point entry-point already defined by<br />

EQU directive<br />

The specified entry point found in the named element has already been defined by an<br />

EQU directive. The entry point in the named element is not used.<br />

*WARNING: Element element entry point entry-point already defined by<br />

REF directive<br />

The specified entry point found in the named element has already been defined by a REF<br />

directive. The entry point in the named element is not used.<br />

*WARNING: Element element entry point entry-point already defined by<br />

SEG directive<br />

The specified entry point found in the named element has already been defined by a<br />

SEG, DSEG, RSEG, or XSEG directive. The entry point in the named element is not used.<br />

*WARNING: Element element has no location counters - not included<br />

The named element contains no code, possibly because of ON and OFF directives. It is<br />

not included in the collection.<br />

*WARNING: Element element minimum address ignored - bank has user<br />

specified starting address or O option<br />

Location counter 0 in the element is contained in a bank that has a numeric start address<br />

specified by the user. The INFO 3 value for the element is ignored.<br />

*WARNING: Element element minimum address ignored - location counter 0<br />

not in D-bank<br />

The INFO 3 value for the element applies to location counter 0. Location counter 0 must<br />

be contained in a D bank; if it is not, the INFO 3 value is ignored.<br />

*WARNING: Element element minimum address ignored - location counter 1<br />

not in I-bank<br />

The INFO 3 value for the element applies to location counter 1. Location counter 1 must<br />

be contained in an I bank; if it is not, the INFO 3 value is ignored.<br />

*WARNING: Element element referencing external reference value at<br />

address address greater than largest defined in this relocatable<br />

*WARNING: Element element referencing location counter location-counter<br />

at address address greater than largest defined in this relocatable<br />

*WARNING: Element element referencing location counter location-counter<br />

undefined for this relocatable<br />

7830 9887–001 E–31


<strong>Collector</strong> Diagnostic Messages<br />

The preceding three messages indicate probable format errors in a relocatable element.<br />

*WARNING: Element element start address not used - alternative found<br />

A previous element included in the collection has already specified the start address for<br />

the absolute. The specified element’s start address is ignored.<br />

*WARNING: Element element start address used - bank containing start<br />

address is not initially based<br />

This warning is issued for TYPE COMMONBANK collections. The program will not load<br />

and execute unless the bank containing the start address is the template for an AFCB<br />

bank that is initially based.<br />

*WARNING: ENT specified entry point entry-point may not be in an<br />

initially based bank<br />

An ENT directive was used to specify an entry point in a common bank.<br />

*WARNING: Entry point entry-point is undefined - EQU invalid<br />

When using the EQU directive in the form ’EQU name/symbol’, the symbol must be<br />

defined. If it is not defined, the EQU is invalid. The name remains undefined in the<br />

relocatable being produced.<br />

*WARNING: Entry point entry-point not found for COR<br />

The specified entry point named on a COR source directive could not be found in any<br />

element included in the collection.<br />

*WARNING: Entry point entry-point not found for SNAP<br />

The specified entry point named on a SNAP source directive could not be found in any<br />

element included in the collection.<br />

*WARNING: Entry point entry-point under void location counter locationcounter<br />

assigned value value<br />

An entry point that is assigned under a location counter with no length has been given<br />

the specified value.<br />

*WARNING: Error occurred trying to access SYS$*DATA$.LIB$NAMES<br />

*WARNING: Extended mode requirement from element overridden by B option<br />

on bank bank-name<br />

An element containing an INFO 10 location counter was included in a bank that was<br />

marked as not requiring extended mode.<br />

*WARNING: FIRSTBDI overrides previous FIRSTBDI directives<br />

E–32 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

Only one FIRSTBDI value can be specified. The value used is taken from the last<br />

FIRSTBDI directive.<br />

*WARNING: I-bank bank-name address exceeds 0177777 (65K)<br />

This is a restriction on older unsupported Series 1100 systems. The restriction does not<br />

apply to supported systems. This warning is printed for a bank-named collection.<br />

*WARNING: I-bank address exceeds 0177777 (65K)<br />

This is a restriction on older unsupported Series 1100 systems. The restriction does not<br />

apply to supported systems. This warning is printed for a bank-implied collection.<br />

*WARNING: Keyword name not found in SYS$*DATA$.LIB$NAMES<br />

A keyword entry in an INFO group 12 item could not be located in the element<br />

LIB$NAMES.<br />

*WARNING: L option used on bank bank-name that is not a based static<br />

bank<br />

The L option was specified on an IBANK or DBANK directive that either did not have the<br />

M or U option specified, or had the D (dynamic) option specified.<br />

*WARNING: LEVEL attribute overrides previous LEVEL value specified<br />

A LEVEL value has already been specified on the bank directive, on the LEVEL directive,<br />

or on a previous LEVEL attribute specified on a BANKINFO directive. The new level value<br />

is used.<br />

*WARNING: LEVEL overrides previous LEVEL directives<br />

Only one LEVEL value can be specified. The value is taken from the last LEVEL directive.<br />

*WARNING: LIB file name ignored - no previous LIB direction given<br />

The named file is not searched because no format 3 LIB (bank-name/$lcs...) was given.<br />

*WARNING: Location counter list specified without leading $ - assumed<br />

*WARNING: More than one global inclusion of location counter locationcounter<br />

element element<br />

In a bank-named collection, the element or part of the element has been included more<br />

than once without a local bank-set list. An element or part of an element can be included<br />

locally many times but can be included globally only once.<br />

*WARNING: More than one global inclusion of location counter locationcounter<br />

for element element (Location counter is void)<br />

In a bank-named collection, the element or part of the element has been included more<br />

than once without a local bank-set list. An element or part of an element can be included<br />

7830 9887–001 E–33


<strong>Collector</strong> Diagnostic Messages<br />

locally many times but can be included globally only once. The specified location counter<br />

is void.<br />

*WARNING: * not needed - main segment stays loaded<br />

The indirect load indicator (*) was used in specifying the main segment. The asterisk is<br />

ignored.<br />

*WARNING: N option bank requires TYPE BLOCKSIZE64 if activity local<br />

stack or return control stack is used<br />

The activity local stack and the return control stack are used with the CALL instruction.<br />

This is required by the hardware. The warning can be avoided by using TYPE<br />

BLOCKSIZE64 in the map symbolic.<br />

*WARNING: Number of words of INFO-8 text in the collection exceed<br />

0777777 (262K) - no INFO-8 text output<br />

The number of INFO 8 text words exceeded 262,143 in the collection. No words are<br />

output because the length of this table is stored in a half-word in the absolute element<br />

header table.<br />

*WARNING: value possible bad instruction at address in element element<br />

The D option was specified and an instruction appears to be illegal. Possible causes<br />

include illegal address in u field, illegal j-designator on register transfer, or illegal jdesignator<br />

for sign-extended reference.<br />

*WARNING: Start of D-bank set as far as necessary or possible below<br />

current standard 040000 to minimize using addresses over 0177777 -<br />

program may not work correctly with standard common banks - alternative<br />

is to use the E option<br />

The start of the D bank was lowered to minimize using addresses over 65,535.<br />

*WARNING: The V and Y options have been removed from the <strong>Collector</strong><br />

processor call statement. To void either Ibanks or Dbanks, use the Voption<br />

on the bank directive.<br />

*WARNING: Truncation and over-65K messages suppressed - max of value<br />

reached<br />

Only the first value truncation and address over 65,535 messages are printed. The value<br />

is configuration dependent and is set at 50 in the released version.<br />

*WARNING: segment used as main segment name unspecified in bank<br />

In a bank-named, segmented collection, a bank did not have a main segment specified<br />

by a SEG directive. Since all banks must have the same main segment name, a main<br />

segment is created.<br />

E–34 7830 9887–001


E.5. Information Messages<br />

<strong>Collector</strong> Diagnostic Messages<br />

An implicit @PREP of TPF$ occurred during this collection.<br />

The <strong>Collector</strong> is designed to do special processing of file TPF$ if an @PREP is not<br />

performed on the file at collection time. In order to do this, all elements in TPF$ are<br />

temporarily brought into the collection whether referenced or not. This may cause some<br />

unexpected side effects that can be resolved when the user knows that an implicit<br />

@PREP of TPF$ occurred.<br />

AFCM status of output element is CLRAFCM<br />

The arithmetic fault compatibility mode for the output element is marked as clear. At<br />

initial load time, the arithmetic fault compatibility mode setting is such that no interrupt<br />

occurs for floating-point overflow, floating-point underflow, or divide fault.<br />

AFCM status of output element is INSAFCM<br />

The arithmetic fault compatibility mode for the output element is marked as insensitive.<br />

At initial load time, the arithmetic fault compatibility mode setting is such that no<br />

interrupt occurs for floating-point overflow, floating-point underflow, or divide fault.<br />

AFCM status of output element is SETAFCM<br />

The arithmetic fault compatibility mode for the output element is marked as set. At initial<br />

load time, the arithmetic fault compatibility mode is such that an interrupt occurs for<br />

floating-point overflow, floating-point underflow, and divide fault.<br />

AFCM status of output element is UNKNOWN<br />

The arithmetic fault compatibility mode for the output element is marked as unknown. At<br />

initial load time, the arithmetic fault compatibility mode is determined by a system<br />

generation parameter.<br />

Value at address address in element element - will activate SNAP dump<br />

prior to execution<br />

A snapshot dump is taken at the specified address and then the specified instruction is<br />

executed.<br />

COR: value replaced value at address address in element element<br />

The correction requested by a COR directive has been applied.<br />

D-bank bank-name assigned such that INFO-3 or minimum specification<br />

value address for element element is satisfied<br />

The start address of the named bank has been adjusted so that the specified INFO group<br />

3 value has been satisfied. The start addresses of all other banks related to this bank are<br />

determined by the adjusted start address.<br />

7830 9887–001 E–35


<strong>Collector</strong> Diagnostic Messages<br />

ER ERRPR$ error value printing above message<br />

An ER ERRPR$ has returned an error status.<br />

(File Name: name * name)<br />

This is printed for I/O errors following the description of the error.<br />

I-bank bank-name assigned such that INFO-3 or minimum specification<br />

value address for element element is satisfied<br />

The start address of the named bank has been adjusted so that the specified INFO group<br />

3 value has been satisfied. The start addresses of all other banks related to this bank are<br />

determined by the adjusted start address.<br />

Minimum address requirement address for element element reduced to<br />

address to avoid addresses greater than 262K<br />

In a bank-implied collection, the specified value of INFO group 3 was reduced to avoid<br />

addresses greater than 262,143.<br />

Minimum address requirement address for element element reduced to<br />

address to avoid addresses greater than 262K for D-bank bank-name<br />

The specified value of the INFO group 3 was reduced so that addresses did not exceed<br />

262,143 for the named D bank.<br />

Minimum address requirement address for element element reduced to<br />

address to avoid addresses greater than 262K for I-bank bank-name<br />

The specified value of the INFO group 3 was reduced so that addresses did not exceed<br />

262,143 for the named I bank.<br />

No elements in segment segment<br />

This message is produced in bank-implied collections when a segment is found to have<br />

no elements included in it.<br />

No elements in segment segment, bank bank-name<br />

This message is produced in bank-named collections when a segment is found to have<br />

no elements included in it.<br />

Quarter/Third-word insensitive<br />

The absolute element is insensitive to the setting of PSR bit DB32; that is, it contains no<br />

quarter-word or third-word references. It is executed in third-word mode.<br />

Quarter-word sensitive<br />

The absolute element requires PSR bit DB32 to be set initially; that is, it uses quarterword<br />

references.<br />

E–36 7830 9887–001


<strong>Collector</strong> Diagnostic Messages<br />

Start of D-bank set above current standard 040000 in order to meet<br />

minimum address requirement address of common block common-block<br />

Start of D-bank set above current standard 040000 in order to meet<br />

minimum address requirement address of element element<br />

The start of the D bank was increased to satisfy the INFO 3 value specified by the<br />

named element or common block.<br />

Start of I-bank set above current standard 01000 in order to meet<br />

minimum address requirement address of element element<br />

The start of the I bank was increased to satisfy the INFO 3 value specified by the named<br />

element.<br />

Third-word sensitive<br />

The absolute element requires PSR bit DB32 to be cleared initially; that is, it uses thirdword<br />

references.<br />

TPF$ treated as element<br />

An IN TPF$ was encountered. Because no period followed the name, the name is<br />

assumed to be that of an element. On the IN directive, all files must have a period<br />

immediately following the file name. This is not necessarily an error, but it can indicate a<br />

typographical error in a <strong>Collector</strong> directive.<br />

7830 9887–001 E–37


<strong>Collector</strong> Diagnostic Messages<br />

E–38 7830 9887–001


Appendix F<br />

Program Segmentation<br />

F.1. Introduction<br />

The <strong>OS</strong> <strong>2200</strong> <strong>Collector</strong> still supports segmentation for compatibility with old programs.<br />

However, segments are now considered obsolete because the <strong>OS</strong> <strong>2200</strong> hardware<br />

supports banking rather than segmentation. A change from one bank to another often<br />

requires only a single instruction (for example, LBJ) and is performed entirely by the<br />

hardware, once the bank is initially loaded from the absolute element. Segments must<br />

be loaded from the absolute element and require Exec involvement by an Executive<br />

request interrupt. Therefore, banking is more efficient and is the preferred way of<br />

dividing a program. Programs that currently use segmentation should be converted to<br />

banking if possible, and new programs should use banking and avoid segmentation.<br />

When an absolute program is being executed, it must reside in main storage. However,<br />

there may not be enough available address space to contain the complete program.<br />

Therefore, the program must be subdivided so that the various parts can be made<br />

accessible as they are needed by the program being executed.<br />

A segmented program consists of<br />

• One main segment that resides in main storage throughout the execution of the<br />

program.<br />

• Subordinate segments that are loaded into main storage as they are needed.<br />

As each subordinate segment is loaded into main storage, it may overlay and thus<br />

destroy all or part of a previously loaded segment. The area overlayed is equal in size to<br />

the size of the new segment. The main segment is never allowed to be overlayed except<br />

by a relocatable segment (RSEG).<br />

The absolute element resulting from the collection of various relocatable elements may<br />

or may not be segmented. However, a nonsegmented program could be considered to<br />

be a segmented program with only a main segment named $MAIN$. Likewise, a<br />

program containing only segments can be considered to be a banked program with<br />

precisely two banks, IBANK and DBANK. However, almost all segment control<br />

information (specifically the segment load table) is omitted if segments are not used in<br />

the program.<br />

F.2. Segmentation Directives<br />

The directives used to specify program segmentation are as follows:<br />

7830 9887–001 F–1


Program Segmentation<br />

SEG<br />

RSEG<br />

DSEG<br />

IN<br />

Informs the <strong>Collector</strong> of the beginning of a segment (see F.2. 1).<br />

Informs the <strong>Collector</strong> of the beginning of a relocatable segment (see F.2.3).<br />

Informs the <strong>Collector</strong> of the beginning of a dynamic segment (see F.2.2).<br />

Specifies the elements to be included in the segment (see 3.1.1).<br />

Segments may be loaded and executed independently. However, elements used by<br />

other segments must be loaded in memory when the referencing segments are<br />

executed.<br />

Since each segment has a path leading back to the main segment (defined by the<br />

relationships specified on the segmentation directives), elements that are implicitly<br />

included and that are referenced by two or more segments are attached to the segment<br />

that is located at the common point in the paths to the main segment of all referencing<br />

segments. Elements specified on IN directives are never moved from the segment in<br />

which they were specifically placed.<br />

A segment cannot be loaded into a read-only bank.<br />

F.2.1. SEG — Program Segmentation<br />

Purpose<br />

The SEG directive informs the <strong>Collector</strong> of the beginning of a program segment. All SEG<br />

directive parameters are optional, except name-1.<br />

Format<br />

SEG name-1,segment-list<br />

where:<br />

name-1<br />

specifies the name of the segment. When name-1 is followed by an asterisk (*), the<br />

named segment is automatically loaded when referenced by a jump instruction.<br />

Such a segment is called an indirect load segment. The asterisk is allowed on all<br />

SEG directives, but is ignored if the directive defines the main segment.<br />

segment-list<br />

F–2 7830 9887–001


Program Segmentation<br />

specifies the address relationship between the segment named in name-1 and the<br />

other program segments named in segment-list. The segment-list parameter has<br />

several formats that determine the addresses of the segment named in name-1:<br />

No Entry<br />

When segment-list is void, the starting address of the name-1 segment immediately<br />

follows the last address of the segment named on the preceding SEG directive.<br />

name-2<br />

Specifies that the starting address of the name-1 segment is the same as the<br />

starting address of the name-2 segment. These two segments can never exist in<br />

main storage at the same time.<br />

(name-2)<br />

Specifies that the starting address of the name-1 segment immediately follows the<br />

last address of the name-2 segment.<br />

(name-2,...,name-n)<br />

Specifies that the starting address of the name-1 segment immediately follows the<br />

highest address of the segments specified in name-2, name-3, name-4, and so forth,<br />

in each of the banks in which segment name-1 resides. Note that because segments<br />

may span banks, the highest address of the last I bank may be a different value than<br />

the value of the highest address of the last D bank.<br />

( )<br />

Specifies that the starting address of the name-1 segment immediately follows the<br />

highest address of all segments previously named.<br />

Description<br />

The IN directive specifies the files and elements to be included in a segment. If no SEG<br />

directive is encountered before the first IN directive following the @MAP control<br />

statement, an implied SEG directive is assumed by the <strong>Collector</strong>. This segment is given<br />

the name $MAIN$ by the <strong>Collector</strong> and is the segment that is processed until a SEG,<br />

RSEG, or DSEG directive is encountered.<br />

The segment name can contain 1 to 12 alphanumeric characters (with $ and - allowed).<br />

The segment name must contain at least one alphabetic character and must not be the<br />

same as any entry-point name in the collection. If the segment name is the same as an<br />

entry-point name, the value of the segment is used to satisfy external references and a<br />

message is printed.<br />

The <strong>Collector</strong> assigns a number to each segment beginning with zero for the main<br />

segment and continuing with 1 for the first segment name after the main segment, 2 for<br />

the second segment, and so forth. This number is used as the value of the segment<br />

name and is found in the Bank and Segment Index table in L and S option listings.<br />

7830 9887–001 F–3


Program Segmentation<br />

Within a segment, the <strong>Collector</strong> places any elements included to satisfy undefined<br />

symbols at the beginning of the segment in the inverse order of their inclusion; that is,<br />

the last included element is the first element in the segment. Following these implicitly<br />

included elements are those named on IN directives in the exact order they were<br />

named. When all elements within a file are included in a segment by specifying only the<br />

file name on the IN directive, the ordering of the file’s elements within the segment is<br />

undefined.<br />

Example 1<br />

1. SEG A<br />

2. SEG B<br />

3. SEG C,(A)<br />

The program is to be divided into three segments.<br />

1. Specifies segment A as the main segment.<br />

2. Specifies that the starting address of segment B is immediately after the last<br />

address of main segment A.<br />

3. Specifies that the starting address of segment C is immediately after the last<br />

address of main segment A. Segments B and C can never exist in main storage at<br />

the same time.<br />

Example 2<br />

1. SEG A . MAIN SEGMENT<br />

2. SEG B . Starting address of B immediately follows<br />

. last address of A<br />

3. SEG C . Starting address of C immediately follows<br />

. last address of B<br />

4. SEG D,(C) . Starting address of D immediately follows<br />

. last address of C<br />

F–4 7830 9887–001


Program Segmentation<br />

5. SEG E,C . Starting address of E is the same as starting<br />

. address of C<br />

6. SEG F,(E) . Starting address of F immediately follows<br />

. last address of E<br />

7. SEG G,F . Starting address of G is the same as starting<br />

. address of F<br />

8. SEG M,B . Starting address of M is the same as starting<br />

. address of B<br />

9. SEG H,(M) . Starting address of H immediately follows<br />

. last address of M<br />

10. SEG I,H . Starting address of I is the same as starting<br />

. address of H<br />

11. SEG J,H . Starting address of J is the same as starting<br />

. address of H<br />

12. SEG K,(H,I,J). Starting address of K immediately follows the<br />

. last address of H, I, or J, whichever is longest<br />

13. SEG L*,() . Starting address of L immediately follows the<br />

. highest last address of all the segments.<br />

. Segment L is automatically loaded whenever an<br />

. entry point included in the segment is referenced<br />

. by a jump instruction.<br />

Here is a diagram of this structure:<br />

For a more extensive example, see Appendix B.<br />

7830 9887–001 F–5


Program Segmentation<br />

F.2.2. DSEG — Dynamic Segments<br />

Purpose<br />

The DSEG directive specifies the beginning of a dynamic segment. When indicated, the<br />

program area occupied by a segment is not included in the initial program requirement<br />

for main storage.<br />

Format<br />

DSEG name-1,segment-list<br />

where:<br />

name-1<br />

specifies the name of the segment. When name-1 is followed by an asterisk (*), the<br />

named segment is automatically loaded when referenced by a jump instruction.<br />

Such a segment is called an indirect load segment. The asterisk is allowed on all SEG<br />

directives, but is ignored if the directive defines the main segment.<br />

segment-list<br />

specifies the address relationship between the segment named in name-1 and the<br />

other program segments (see F.2.1).<br />

Description<br />

Dynamic segments are identical to normal overlay segments (defined by the SEG<br />

directive - see F.2.1) in all aspects except one: The program area assigned exclusively to<br />

dynamic segments is not included when determining initial program size. It is the<br />

programmer’s responsibility to guarantee that the program area is available by using the<br />

MCORE$ request before requesting segment loading or to request segment loading by<br />

means of the SYSLIB routine DLOAD$, which obtains the necessary program area<br />

before initiating the segment load (see F.3.3).<br />

Dynamic segments can be defined as indirect load and can be placed anywhere within<br />

the segment structure of a program.<br />

The program addresses assigned to DSEGs are not considered when determining the<br />

initial I and D bank limits for a program. However, in assigning the values in LASTD$,<br />

LASTDR$, LASTI$, LASTIR$, FIRST$, LAST$, and LASTR$, (see Section 7), DSEG<br />

addresses are used.<br />

F.2.3. RSEG — Relocatable Segments<br />

Purpose<br />

The RSEG directive specifies the named segment as a relocatable segment. A<br />

relocatable segment (RSEG) is one whose location within the program is determined<br />

dynamically by the program during execution rather than at collection time. RSEG text is<br />

F–6 7830 9887–001


Program Segmentation<br />

relocated by the Exec loader at load time. An RSEG can reference entry points within the<br />

program, but the relocatable segment itself cannot contain definitions for references<br />

located elsewhere in the program (unless the reference is of the form J TAG,x, where x,<br />

an index register, contains the address at which the RSEG was loaded), since only<br />

internal RSEG addressing is relocated during segment loading.<br />

Format<br />

RSEG name<br />

where name specifies the relocatable segment.<br />

Description<br />

Elements included in relocatable segments must be explicitly named on IN directives<br />

(see 3.1.1). When an element that is referenced by more than one segment is implicitly<br />

included, it is placed in a segment other than the RSEG. Generally, it is advisable that if<br />

an element is referenced by more than one segment (one of which is an RSEG), the<br />

element should be explicitly included in the main segment.<br />

Relocatable segments cannot be indirectly loaded. See F.3. 1 for the direct method of<br />

loading segments.<br />

The starting address of a relocatable segment has no relationship to other segments in<br />

the collection. An RSEG may be loaded at whatever starting address is given in register<br />

A2 during the LOAD$ calling sequence (see F.3.1). The LOAD$ request adds the value in<br />

register A2 to all relative address references internal to the named relocatable segment.<br />

This adds additional overhead to loading an RSEG. You must modify any references to<br />

RSEG labels from outside the relocatable segment by the value in register A2.<br />

All instructions and data in a relocatable segment are collected together with all odd<br />

location counters followed by all even location counters.<br />

A relocatable segment can be loaded into either an I bank or D bank of the program.<br />

An element within an RSEG can define a common block that is located outside that<br />

RSEG only if the common block of the RSEG element contains no text. Take note of this<br />

if you use higher level languages such as FORTRAN.<br />

F.3. Loading Program Segments<br />

When a segmented program is called for execution (see 2.2.1), only the main segment is<br />

initially loaded, but main storage is allocated for all segments except DSEGs and RSEGs.<br />

Your program must load all other segments by either<br />

• The direct method<br />

• The indirect method<br />

Whenever a segment is loaded, an initial copy of the segment is loaded. Once loaded, a<br />

segment remains marked as loaded until all or part of its main storage space is overlayed<br />

by another segment or released by means of ER LCORE$.<br />

7830 9887–001 F–7


Program Segmentation<br />

When a segmented program produced by a bank-named collection is called by an @XQT<br />

control statement, only the main segment of each static bank or initially based dynamic<br />

bank is loaded. The main segment of any other dynamic bank is automatically loaded<br />

upon execution of an LIJ, LDJ, or LBJ instruction to that bank.<br />

F.3.1. L$OAD,LOAD$ — Direct Method<br />

When using the direct method of loading, you must use the L$OAD procedure or the<br />

Executive request ER LOAD$. The L$OAD procedure is an assembler procedure located<br />

in SYS$*RLIB$ or SYS$LIB$*SYSLIB. See the Exec System Software Executive<br />

Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for information on the use of ER LOAD$.<br />

Format<br />

L$OAD name,jump,clear,rseg-addr,bank-name<br />

where:<br />

name<br />

jump<br />

clear<br />

specifies the name of the segment to be loaded.<br />

specifies the location where control is to be transferred after the segment is loaded;<br />

if omitted, control passes to the location following the ER LOAD$.<br />

determines whether or not the program area containing the segment is zero-filled. If<br />

greater than zero, the area is not zero-filled before segment load. If zero or negative,<br />

the area is zero-filled before segment load.<br />

rseg-addr<br />

specifies the starting address for the relocatable segment, if the segment was<br />

defined by an RSEG directive. If omitted when loading a relocatable segment, the<br />

address must be in register A2 before the call is made:<br />

L,U A2,rseg-address<br />

The address can be defined as an octal value or a tag not contained in an RSEG.<br />

bank-name<br />

is used only for loading an RSEG within a bank-named collection. It specifies the<br />

bank into which the RSEG is to be loaded. If omitted, the bank-name must be in<br />

register A2 along with the RSEG starting address:<br />

LXI,U A2,bank-name<br />

F–8 7830 9887–001


Description<br />

Program Segmentation<br />

The L$OAD procedure produces a sequence of code that loads register A0 with the<br />

segment name, register A1 with jump address, register A2 with bank name and address<br />

for RSEG, and generates the ER LOAD$. The L$OAD request takes the following form:<br />

L,U A0,segment-name or L A0,(0400000,segment-name)<br />

L,U A1,jump<br />

L,U A2,rseg-addr or L A2,(bank-name,rseg-addr)<br />

ER LOAD$<br />

The segment-name is the same as the contents of the name-1 parameter on the SEG<br />

directive (see F.2.1).<br />

When bit 0 of register A0 is set, the segment loader does not clear the main storage<br />

area to be occupied by the segment. This decreases the time required to load the<br />

segment; however, as a result, any areas within the segment that are not initialized with<br />

data and instructions cannot be assumed to be zero.<br />

Segments within bank-named collections are directly loaded in the same manner as<br />

segments within a bank-implied collection. However, a consideration in bank-named<br />

collections is that each portion of that segment will be loaded into its respective bank.<br />

Thus, all banks that contain portions of that segment must be either static or currently<br />

based on the BDR0-3 at the time the segment is directly or indirectly loaded.<br />

Examples<br />

1. L$OAD NEW,ORG1<br />

2. L$OAD CAP,YELL,0,01350<br />

Description<br />

1. After segment NEW is loaded, transfer control to location ORG1. The area occupied<br />

by segment NEW is zero-filled before loading. The L$OAD procedure produces the<br />

same effect as the following code:<br />

L,U A1,ORG1<br />

L,U A0,NEW<br />

ER LOAD$<br />

2. The area to be occupied by relocatable segment CAP is zero-filled before loading.<br />

The starting address for segment CAP is 01350. After the segment is loaded, control<br />

is passed to YELL. The L$OAD procedure produces the same effect as the following<br />

code:<br />

L,U A2,01350<br />

L,U A1,YELL<br />

L,U A0,CAP<br />

ER LOAD$<br />

7830 9887–001 F–9


Program Segmentation<br />

F.3.2. Reloading the Main Segment<br />

It may be desirable to reestablish the main segment of a program for either error<br />

recovery or reinitialization. This is done by the LOAD$ request. The LOAD$ request<br />

reloads the entire main segment including all initially produced <strong>Collector</strong> tables. The main<br />

storage requirements remain unchanged.The calling sequence is<br />

L A0,(clear,0400000)<br />

L,U A1,reentry-addr<br />

ER LOAD$<br />

Register A0 is loaded with the segment-id of 0400000. The parameter clear functions as<br />

follows:<br />

• If clear is less than 0, the main segment area is not cleared before loading.<br />

• If clear is greater than or equal to 0, the main segment area is cleared before loading<br />

Register A1 is loaded with the reentry-addr according to the following:<br />

• If the reentry-addr is equal to 0, control is returned to the instruction following the<br />

LOAD$ request.<br />

• If the reentry-addr is not zero, control is passed to that address.<br />

In both bank-implied and bank-named programs, the same calling sequence is used to<br />

reload the main segment.<br />

The following considerations also apply to the main segment reload in bank-named<br />

programs:<br />

• Main segment is reloaded for all static banks and any dynamic banks that were<br />

initially based.<br />

• Any initially based dynamic bank must be based at the time of the main segment<br />

reload. If not, the program will terminate in error.<br />

• Any currently based dynamic banks that were not initially based will not have their<br />

main segments reloaded.<br />

• At the time of the reload, the current main storage requirements for all banks in<br />

which the main segment is reloaded cannot be less than the banks’ initial main<br />

storage requirements.<br />

• All banks that are based at the time of a main segment reload are still based after the<br />

reload has been performed.<br />

F.3.3. D$LOAD,DLOAD$ — Loading Dynamic Segments<br />

Dynamic segments can be loaded by referencing the dynamic load routine, which is a<br />

relocatable element contained in SYSLIB. You can reference this routine explicitly, or<br />

implicitly by the indirect load routine when a DSEG is marked for indirect load. The<br />

dynamic load routine can be called for loading either DSEGs or normal segments.<br />

The dynamic load routine determines whether the segment to be loaded is in fact a<br />

dynamic segment. If it is not, an ER LOAD$ is executed for the segment. If the segment<br />

F–10 7830 9887–001


Program Segmentation<br />

is a dynamic segment, the routine acquires the necessary DSEG areas by means of ER<br />

MCORE$ and then executes an ER LOAD$ to load the DSEG.<br />

You can reference the dynamic load routine by using the D$LOAD procedure or by a<br />

jump to DLOAD$.<br />

Format<br />

D$LOAD segment-name,jump,clear<br />

where:<br />

segment-name<br />

jump<br />

clear<br />

specifies the name of the segment to be loaded.<br />

specifies the location where control is to be transferred after the segment is loaded.<br />

If control is to be passed to the location following the jump to DLOAD$, a *0 must<br />

be placed in the jump parameter field or a tag must be placed on the line following<br />

the D$LOAD procedure call and must be specified in the jump parameter field.<br />

determines whether or not the program area containing the segment to be loaded is<br />

zero-filled. If greater than zero, the area is not zero-filled before segment load. If zero<br />

or negative, the area is zero-filled before segment load.<br />

Description<br />

The D$LOAD procedure generates the following sequence of code:<br />

L,U A0,segment-name or L A0,(0400000,segment-name)<br />

L,U A1,jump<br />

J DLOAD$<br />

When bit 0 of register A0 is set, the segment loader does not clear the main storage<br />

area to be occupied by the segment.<br />

F.3.4. Indirect Loading<br />

Whenever a segment that is marked for indirect loading is referenced by any jump<br />

instruction that passes control to an entry point in the segment’s I bank area, the<br />

segment is automatically loaded if it is not already in main storage. Segments to be<br />

loaded by the indirect method must be marked accordingly on the SEG directive.<br />

The mechanics for such loading are set up by the <strong>Collector</strong> and carried out by the Exec<br />

loader. The <strong>Collector</strong> replaces the address portion of the jump command with the<br />

address of an indirect load table entry. The indirect load table performs an SLJ instruction<br />

to the indirect load routine, which in turn performs an ER to the segment loader (if the<br />

7830 9887–001 F–11


Program Segmentation<br />

segment is not already loaded) and jumps to the location of the externally defined<br />

symbol. All registers are preserved by the process. The <strong>Collector</strong> places the indirect load<br />

table in the beginning of the main segment of the control bank.<br />

If indirect loading is used, the reference cannot be made to an external symbol with an<br />

offset.<br />

If the B option was specified on the @MAP control statement, the indirect load routine<br />

indicates that the segment’s main storage area need not be zero-filled.<br />

Segments marked for indirect loading can also be loaded by the direct method.<br />

There is no instruction interpretation performed to ensure that a referencing instruction<br />

is in fact a jump instruction. An EX instruction cannot be done to an indirectly loaded<br />

segment.<br />

The indirect load routine is nonreentrant.<br />

The reference to an entry point that causes the indirect load of a segment cannot be<br />

from the same element that contains that entry point, even if that portion of the element<br />

making the reference is in another segment of the program.<br />

Example<br />

SEG NINE*,(FR,SX)<br />

Segment NINE is automatically loaded when any externalized I bank entry point is<br />

referenced.<br />

F.3.5. D$REL,DREL$ — Releasing a Segment’s Program Area<br />

When the main storage area occupied by a segment is no longer required by the<br />

program,the space can be released by referencing the dynamic release routine, which is<br />

a relocatable element contained in SYSLIB. This routine can be referenced by either the<br />

D$REL procedure or by a jump to DREL$.<br />

Format<br />

D$REL segment-name,jump<br />

where:<br />

segment-name<br />

jump<br />

specifies the name of the segment area to be released.<br />

specifies the location where control is to be transferred after the segment’s area is<br />

released; if omitted, control passes to the location following the J DREL$ call.<br />

F–12 7830 9887–001


Description<br />

The D$REL procedure generates the following sequence of code:<br />

LXI,U A1,segment-name LXI,U A1,segment-name<br />

LXM,U A1,jump or LMJ A1,DREL$<br />

J DREL$<br />

Program Segmentation<br />

The dynamic release routine determines the program I bank start address of the named<br />

segment. This segment can be either a DSEG or an overlay segment. This address<br />

minus one is placed in A0 and an ER LCORE$ is executed. The D bank start address<br />

minus one is then used for an ER LCORE$. Following the release of the program area,<br />

the segment is marked as a dynamic segment. Its area can then be reacquired by<br />

referencing DLOAD$.<br />

If the released program areas are occupied by more segments than that specified on the<br />

D$REL call, the other segments will not be marked as unloaded. This includes all<br />

segments that follow the specified segment, in addition to those that overlap the<br />

specified segment. Therefore, it is your responsibility to call DREL$ for each segment<br />

actually released and to assure the necessary program areas are reacquired before a<br />

subsequent reload of any such segment.<br />

F.3.6. Segment Load Table<br />

The segment load table (SLT) is generated by <strong>Collector</strong> and is created for all collections<br />

containing segments other than the main segment. The SLT contains entries that<br />

describe every segment of the program.<br />

The SLT is placed in the control bank at the beginning of the main segment. In a bankimplied<br />

segmented collection where there is no program data in the collection (for<br />

example, there are no even location counters in the collection), the D bank contains only<br />

the SLT.<br />

F.4. Segmentation within Bank-Named Collections<br />

A segmentation structure can be specified within each user-defined bank, although it<br />

would be more efficient to make another bank. If a bank has no segments, the bank is<br />

considered to be composed of one main segment. When segmentation does exist<br />

within banks, the same name must be used for the main segment of each bank. The<br />

segmentation structure within a bank can be entirely different from, or entirely the same<br />

as, the segmentation structure of another bank. A segment can be contained within one<br />

bank, or it can span (be named and contained in) several banks. When a spanning<br />

segment is to be loaded, each portion of the segment is loaded into its respective bank.<br />

A bank-implied program, which has segments defined, can be thought of as a two-bank<br />

program (one I bank and one D bank) with each bank having the same segment structure<br />

and each segment spanning the two banks.<br />

Relocatable segments cannot span banks and must be included in their entirety in one<br />

bank.<br />

7830 9887–001 F–13


Program Segmentation<br />

When using segmentation within a bank-named collection, any location counters from<br />

any element that were not specified for inclusion are placed in the main segment of the<br />

control bank. If particular location counters are needed in a particular segment of a bank,<br />

place them there by an appropriate IN statement after the appropriate SEG statement.<br />

F.5. Common Blocks<br />

The <strong>Collector</strong> produces, in the absolute element, load control specifications for the<br />

LOAD$ routine. These specifications indicate which text words (data and instructions)<br />

are to be put at which locations in main storage when the segment is loaded.<br />

If a common block is given initial values (filled with text, rather than simply set aside as a<br />

reserved area), the <strong>Collector</strong> produces specifications to put in these values when the<br />

segment containing the element that defines the initial values is loaded.<br />

For example, if five different elements define five different initial values for the same<br />

common block and each of these five elements is located in a different segment, the<br />

same common block located in a segment common to all referencing segments would<br />

be reinitialized each time one of the five different segments was loaded. This occurs<br />

regardless of where the referenced common block is located within the user’s program<br />

area.<br />

The TYPE COMSEG directive causes the <strong>Collector</strong> to place all location counters defining<br />

common blocks and the common block area itself in one segment. The use of this<br />

directive avoids reinitialization of the common block unless, of course, the segment<br />

containing it and the defining location counters is reloaded.<br />

Any areas of the common blocks in which text is not loaded upon reinitialization are not<br />

changed as long as the reinitialization is caused by the loading of a segment other than<br />

the one in which the common block resides.<br />

If TPF$ does not have an entry-point table (created by @PREP or @PACK,P), the final size<br />

of the common block (in the absolute or relocatable element) is determined by the<br />

largest declaration of the common block in TPF$ and any other element. Otherwise, the<br />

largest common block declared in any element is used as the size of the common block.<br />

Bank-named collections cannot contain locally included common blocks (see 4.4.4.2).<br />

The location counters defining a common block are placed in the same bank as the<br />

common block. If the location counters are already in the same bank as the common<br />

block, they are not moved. If they are in a different bank, the segment where the<br />

location counters are placed is determined by whether the original segment (containing<br />

the location counters) spans the two banks. If the original segment spans the two banks,<br />

the location counters remain in that segment in the new bank; otherwise, they are<br />

placed in the main segment. To determine the segment in which the text defining the<br />

common block is placed, examine the listing that the <strong>Collector</strong> produces for the following<br />

format:<br />

element-name $lcs common-block<br />

F–14 7830 9887–001


Program Segmentation<br />

The text defining the common block is placed in the common referencing segment. If<br />

more than one bank references the common block, the text defining the common block<br />

is placed in the main segment of the control bank.<br />

Table F–1. Placement of Common Blocks Defined in One Element<br />

Number of times the element is<br />

specified on an IN directive<br />

Bank where common block is placed<br />

1 Same bank where the element is included (IN)<br />

> 1 Control bank<br />

Table F–2. Placement of Common Blocks Defined in More Than One<br />

Element<br />

Number of times each element is<br />

specified on an IN directive<br />

Where elements are<br />

included (IN)<br />

Bank where common<br />

block is placed<br />

Once per element In the same bank Same banks where the<br />

elements are included (IN)<br />

Once per element In different banks Control bank<br />

More than once for any element Control bank<br />

Example<br />

Element X contains the definition of the common block:<br />

IBANK I1<br />

IN X<br />

DBANK,C CONTROL<br />

The common block is placed in the I bank I1:<br />

IBANK I1<br />

IN X<br />

DBANK,C CONTROL<br />

IN X<br />

The common block is placed in the control bank.<br />

Element Y also contains the definition of the same common block:<br />

IBANK I1<br />

IN X<br />

IN Y<br />

DBANK,C CONTROL<br />

7830 9887–001 F–15


Program Segmentation<br />

The common block is placed in the I bank I1:<br />

IBANK I1<br />

IN X<br />

IN Y<br />

DBANK D1<br />

IN X<br />

IN Y<br />

DBANK,C CONTROL<br />

The common block is placed in the control bank.<br />

You can explicitly specify the placement of the text defining the common block by<br />

means of an IN directive. On IN directives (see 3.1.1), common blocks are always<br />

specified without a file name. A common block name must not be identical to an<br />

element name. An unnamed common block (that is, blank common) may be included in<br />

the program and positioned by using IN BLANK$COMMON.<br />

The common block is initialized each time a segment containing the text defining the<br />

common block is loaded. If all the text defining the common block is in the same<br />

segment, the common block is initialized to only one set of the values.<br />

F–16 7830 9887–001


Appendix G<br />

ROR$E-Relocatable Output Routine<br />

G.1. Introduction<br />

The relocatable output routine produces a relocatable element that is used for input to<br />

the <strong>Collector</strong>. The relocatable element is produced from relocatable items generated by<br />

the language processors.<br />

The relocatable output routine contains user interfaces SROR$EB, ROR$EB, EROR$EB,<br />

and TBLWR$EB. The following subsections describe these interfaces. Do not call the<br />

relocatable output routine from a minor register set activity. Registers X8 through X11;<br />

A0 through A5; R1, R2, and R3 define the minor register set.<br />

The <strong>Collector</strong> library element, ROR$E, comes installed in the standard product file<br />

SYS$LIB$*MAP. Since the <strong>Collector</strong>’s product file is not registered with the <strong>Collector</strong> to<br />

be processed during library searching, this relocatable element must be explicitly<br />

included in any collection that needs it.<br />

G.2. SROR$EB—Start Relocatable Output Routine<br />

with External Buffer<br />

SROR$EB initializes ROR$E before writing any relocatable text words.<br />

Calling sequence<br />

L,U A0,k-bit-count<br />

LXI A1,external-buffer-length<br />

LXM A1,address-of-external-buffer<br />

LMJ X11,SROR$EB<br />

error return<br />

normal return<br />

where:<br />

k-bit-count<br />

is the number of bits required to contain either the largest control counter or the<br />

number of undefined symbols for the relocation, whichever is larger.<br />

external-buffer-length<br />

is the length in words of the external buffer provided to ROR$E.<br />

7830 9887–001 G–1


ROR$E-Relocatable Output Routine<br />

address-of-external-buffer<br />

is the address of the external buffer provided to ROR$E.<br />

SROR$EB saves the K-bit count for the relocatable element and establishes the<br />

programfile write location for the element by means of ER PFWL$. (See the Exec<br />

System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.) SROR$EB<br />

adjusts the output buffer to minimize read-before-write operations, if possible.<br />

The error return occurs when a nonzero status code is encountered in register A2.<br />

Register A2 contains the status code from ER PFWL$. (See the Exec System Software<br />

Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.)<br />

G.3. ROR$EB—Generation of Relocatable Output<br />

with External Buffer<br />

ROR$EB formats relocatable items and outputs text to the relocatable element. This<br />

routine uses the external buffer that was passed to SROR$EB.<br />

Calling sequence<br />

L,U A0,address-of-item<br />

LMJ X11,ROR$EB<br />

error return<br />

normal return<br />

ROR$E is called for every text word that will be inserted in the relocatable element.<br />

(Examples of text words are an instruction or data word.) For each call, the calling<br />

program must supply the text word and its relocation information in an item.<br />

The minimum length of the item is three words; however, it may be larger. Any<br />

relocation of a text word, other than a simple relocation of the right address under the<br />

same location counter that applies to the text word, must be handled through special<br />

relocation items. Any number of special relocation items can be appended to the item.<br />

G.3.1. ROR$EB Item Format<br />

The following shows the ROR$EB item format.<br />

00 n not used l r<br />

01 text word<br />

02 f zero lc address<br />

03 special relocation items<br />

.. …<br />

n-1 special relocation items<br />

G–2 7830 9887–001


Word 0<br />

n<br />

l<br />

r<br />

Item length, including any special relocation items.<br />

12 sign bits for a left address or left half-word field.<br />

12 sign bits for a right address or right half-word field.<br />

Word 1<br />

text word<br />

Word 2<br />

f<br />

lc<br />

Bit 3 = 1, right address (bits 20-35) relocatable.<br />

Bit 2 = 1, left address (bits 2-17) relocatable.<br />

ROR$E-Relocatable Output Routine<br />

Contains the location counter the text word is under. Can be overridden by a special<br />

relocation item type 013.<br />

address<br />

Address of the text word. This address can be an 18-bit value.<br />

Words 3, 4, and so forth, can contain special relocation items.<br />

G.3.2. Special Relocation Items<br />

Location Counter<br />

The location counter relocation item, type 011, format is as follows:<br />

01 011 l r lc<br />

This item is used for relocation by a location counter other than the one specified in S3<br />

of word 2.<br />

7830 9887–001 G–3


ROR$E-Relocatable Output Routine<br />

l<br />

r<br />

lc<br />

The left margin of the field of relocation (a bit number in the range 0 through 35).<br />

The right margin of the field of relocation (a bit number in the range 0 through 35,<br />

with r less than or equal to l).<br />

Location counter number; a signed 12-bit integer. The starting address of the<br />

location counter is added if lc is positive or subtracted if lc is negative.<br />

External <strong>Reference</strong><br />

The external reference item (two words), type 012, format is as follows:<br />

02 012 l r signs<br />

sequence number of the external reference in the preamble<br />

This item is used for relocation by the value of an externally defined symbol.<br />

l<br />

r<br />

signs<br />

The left margin of the field of relocation.<br />

The right margin of the field of relocation.<br />

12 bits of all zeros or ones, depending on whether the external reference is to be<br />

added or subtracted respectively.<br />

Large Location Counter<br />

The large location counter item, type 013, format is as follows:<br />

01 013 not used lc<br />

If this special item is used, it must be the first special item appended to the item.<br />

This item overrides the lc in Word 2 of the item. This allows location counters greater<br />

than 63.<br />

G–4 7830 9887–001


lc<br />

Location counter number the text will be under.<br />

ROR$E-Relocatable Output Routine<br />

ROR$E formats the text words and the relocation information into blocks and writes the<br />

blocks to the relocatable element.<br />

The error return is taken when<br />

• An I/O error occurs; A1 contains the status.<br />

• An internal inconsistency occurred in ROR$EB; A1 is zero.<br />

G.4. EROR$EB—End Relocatable Output<br />

Routinewith External Buffer<br />

EROR$EB terminates ROR$E after the last text word has been processed. This routine<br />

uses the external buffer that was passed to SROR$EB.<br />

Calling sequence<br />

L A0, (transfer-addr,transfer-addr-lc)<br />

LMJ X11,EROR$EB<br />

error return<br />

normal return<br />

Note: If a transfer location is not specified (for example, if the element is a subroutine),<br />

A0 must contain negative zero: 0777777777777.<br />

where:<br />

transfer-addr<br />

is the location of the first instruction to be executed in the main program. This can be<br />

an 18-bit value.<br />

transfer-addr-lc<br />

is the location counter to which the address applies.<br />

EROR$EB outputs the last block built by ROR$EB and generates a transfer image. The<br />

transfer image is a special word group. The format is described in the Data Structures<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

The error return is taken when an I/O error occurs. The status is returned in A1.<br />

7830 9887–001 G–5


ROR$E-Relocatable Output Routine<br />

G.5. TBLWR$EB—Table Write Subroutine with<br />

External Buffer<br />

TBLWR$EB writes the preamble constructed by the calling program to the program file<br />

that contains the relocatable text. ROR$EB must have already written the element text<br />

to the program file, and EROR$EB must have been called.<br />

The preamble consists of one to five tables and is described in the Data Structures<br />

<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />

Calling sequence<br />

L,U A0,preamble-addr<br />

L,U A1,preamble-length<br />

LMJ X11,TBLWR$EB<br />

error return<br />

normal return<br />

TBLWR$EB writes the preamble supplied by the calling program to the program file. The<br />

entries in PARTBL+29 through 38 are updated to reflect the preamble length, preamble<br />

location, and the element type (5 = relocatable). For more information on the contents of<br />

PARTBL, see the System Service Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong><br />

<strong>Manual</strong>. The format of the preamble is described in the Data Structures <strong>Programming</strong><br />

<strong>Reference</strong> <strong>Manual</strong>.<br />

An ER PFI$ is done to update the file’s table of contents.<br />

The error return is taken when<br />

• An I/O error occurs. A1 contains the status.<br />

• An error occurs on the ER PFI$. A1 equals 0 and A2 is the status.<br />

• A TBLWR$EB error occurs. A1 and A2 equal 0 and A3 contains the TBLWR$EB<br />

status.<br />

In the case of a TBLWR$EB error, the base table that was to be written contains invalid<br />

information.<br />

• If A3 contains a 1, the base table indexes point into the base table.<br />

• If A3 contains a 2, the table indexes point beyond the end of the preamble.<br />

• If A3 contains a 3, the relocatable version specified in the base table is not valid.<br />

An externalized tag, ROR$VERSION, is provided by ROR$E which contains the current<br />

valid relocatable version. This value should be used when setting the relocatable version<br />

in the base table.<br />

It is highly recommended to use TBLWR$EB to write the base table of the preamble.The<br />

added checking of the base table helps to ensure that a valid relocatable is generated.<br />

G–6 7830 9887–001


G.6. Optimization Information<br />

ROR$E-Relocatable Output Routine<br />

ROR$E and the <strong>Collector</strong> are more efficient if the instructions and data are coded under<br />

control of location counters one and two respectively. ROR$E has less processing to do<br />

and produces a more compact relocatable element. The <strong>Collector</strong> has a smaller bit<br />

stream to analyze.<br />

7830 9887–001 G–7


ROR$E-Relocatable Output Routine<br />

G–8 7830 9887–001


Index<br />

Symbols<br />

$Ics, 4-10<br />

$n, 4-11<br />

$NONE, $lcs, 4-10<br />

$ODD, $lcs, 4-10<br />

@MAP, 2-7<br />

A option, 2-7<br />

@PREP<br />

of TPF$, 8-1<br />

TPF$, 3-17<br />

Numbers<br />

262K bank restriction, D-1<br />

65K location counter, D-1<br />

A<br />

A attribute, IBANK/DBANK directive<br />

(Table), 4-4<br />

A option, @MAP, 2-7<br />

absolute elements<br />

Arithmetic Fault Mode Determination, 5-5<br />

EXEC action produced by arithmetic fault<br />

mode sensitivity, 5-6<br />

optimization, 6-7<br />

producing extended diagnostic tables, 5-3<br />

quarter-word sensitive, 5-4<br />

setting bank size to 64, 5-2<br />

third-word sensitive, 5-5<br />

absolute output, 2-5<br />

absolute values, entry point, 4-28<br />

access control words, 6-8<br />

allocating<br />

data, 2-2<br />

instructions, 2-2<br />

ALLOWCONTIN, 4-7<br />

Altering the Search Sequence, 3-12<br />

alternate file common banks, 4-5, 4-28, 4-29<br />

arithmetic fault compatibility, setting, 5-1<br />

arithmetic fault noninterrupt, setting, 5-1<br />

array, efficient use of, 8-2, 8-4<br />

array, efficient use of, setting, 8-3<br />

assignment, exclusive, 2-3<br />

attribute-list, BANKINFO, 4-6<br />

attributes, BANKINFO directive, 4-6<br />

7830 9887–001 Index–1<br />

B<br />

B attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

B optionm @MAP, 2-8<br />

bank<br />

address assignments, 4-13<br />

attributes, 4-1<br />

control bank, 4-14<br />

initially based, 4-14<br />

nonconfigured common bank, 4-5<br />

physical, 4-1<br />

structuring, 4-1<br />

switching banks, 4-20<br />

bank descriptor, 4-1<br />

bank descriptor register, 4-3<br />

bank descriptor table, 4-3<br />

bank structuring<br />

DBANK, 4-1<br />

IBANK, 4-1<br />

bank switching<br />

basic mode, 4-20<br />

extended mode, 4-29<br />

bank template<br />

DYNAMIC, 4-7<br />

general information, 4-1<br />

read-only, 4-5<br />

void, 4-5


Index<br />

VOID, 4-9<br />

bank-implied collections<br />

common blocks, 4-13<br />

FRSTIN directive, 3-3<br />

BANKINFO AFCB, using, 4-30<br />

BANKINFO directive<br />

2048BOUNDARY, 4-9<br />

AFCB, 4-2<br />

ALLOWCONTIN, 4-7<br />

attribute-list, 4-6<br />

attributes, 4-6<br />

BDR, 4-7<br />

CODESTRIPPED, 4-7<br />

CONTINGENCY, 4-7<br />

CONTROL, 4-7, 4-14<br />

DYNAMIC, 4-9<br />

EXTENDED, 4-7<br />

GUARANTEED, 4-8<br />

INITIAL, 4-8<br />

LEVEL(#), 4-8<br />

LMJ, 4-8<br />

NCCB, 4-8<br />

NOTEXTENDED, 4-8<br />

OVERRIDEMIN, 4-8<br />

READONLY, 4-9<br />

TSQUEING, 4-9<br />

VECTOR, 4-9<br />

bank-named<br />

example, B-2<br />

general information, 2-3<br />

bank-named collection<br />

segmentation within, F-14<br />

bank-named collections<br />

segmentation consideration, F-10<br />

basic mode<br />

bank switching, 4-23<br />

BDT level, 4-22<br />

BBJ$<br />

general information, 4-21<br />

symbol, 7-1<br />

BDI<br />

DBJ$, 4-24<br />

BDI$<br />

general information, 4-22<br />

symbol, 7-1<br />

BDI, using with<br />

BBJ$, 4-22<br />

IBJ$, 4-22<br />

BDI+entry points<br />

absolute values, 4-28<br />

<strong>Collector</strong>-defined values, 4-28<br />

BDICALL$<br />

allowing collection time definition, 5-4<br />

general information, 4-22, A-4<br />

return, 4-25<br />

symbol, 7-1<br />

using with IBJ$, 4-24<br />

BDIREF$<br />

general information, 4-21, A-4<br />

symbol, 7-1<br />

BDIVECT$<br />

general information, 4-35<br />

symbol, 7-1<br />

BDR, 4-3<br />

BDT level<br />

definition, 4-29<br />

extended mode, 4-26<br />

BLANK$COMMON<br />

general information, 4-13<br />

positioning, 4-13<br />

BLOCKSIZE$ symbol, 7-1<br />

BLOCKSIZE64 parameter, TYPE directive, 5-2<br />

BTD level<br />

basic mode, 4-29<br />

Index–2 7830 9887–001<br />

C<br />

C attribute, IBANK-DBANK directive<br />

(table), 4-4<br />

C option<br />

@MAP, 2-8<br />

C Option<br />

efficient use of, 8-5<br />

CALL<br />

op code, 4-36<br />

using, 4-27<br />

CBEP$$, 4-5, 4-6, 4-7, 4-22, 4-28, 4-30, 4-32,<br />

4-34<br />

CERU$ element, 4-5, 4-6, 4-22, 4-28<br />

character length, 2-3<br />

CLASS directive<br />

element selection determination through<br />

version names, 3-6<br />

valid string characters, 3-6<br />

clear PSR D10 at initial load, 5-5<br />

clear PSR D20, 5-1<br />

clear PSR D32 at initial load, 5-4<br />

CLRAFCM parameter, TYPE directive, 5-1,<br />

5-6<br />

CODESTRIPPED, 4-7<br />

collection<br />

bank-implied, 3-2<br />

bank-named, 3-9


common-banked, suppress error<br />

messages, 5-2<br />

default LEVEL, 6-6<br />

collection, bank-imlpied<br />

general information, 2-2<br />

collection, bank-implied<br />

FRSTIN directive, 3-3<br />

collection, bank-named<br />

general information, 3-9<br />

segmentation within, F-13<br />

<strong>Collector</strong><br />

absolute output, 2-5<br />

control statement options, 2-7<br />

COR directive, 6-1<br />

DEF directive, 6-3<br />

directives, 2-10<br />

entry-point table, C-1<br />

file searching, 3-10<br />

FIRSTBDI directive, A-3<br />

initiation, 2-7<br />

initiation, @MAP, 2-7<br />

input, 2-1<br />

language conventions, 2-2<br />

output, 2-4<br />

relocatable elements, 2-4<br />

RES directive, 6-8<br />

RSEG directive, F-6<br />

sign-off line, 2-6<br />

sign-on line, 2-6<br />

SNAP directive, 6-11<br />

termination, 2-7<br />

TYPE COMSEG directive, F-14<br />

TYPE EXEC directive, definition, A-1<br />

using, 1-1<br />

XSEG directive, A-1<br />

<strong>Collector</strong> defined symbol<br />

BDICALL$, 7-1<br />

<strong>Collector</strong> defined symbols<br />

BBJ$, 7-1<br />

BDIREF$, 7-1<br />

BDIVECT$, 7-1<br />

BLOCKSIZE$, 7-1<br />

COMMN$, 7-1<br />

D$ATE, 7-1<br />

DBJ$, 7-1<br />

ENTRY$, 7-2<br />

FIRST$, 7-2<br />

FIRSTBDI$, 7-2<br />

FRSTD$, 7-2<br />

FRSTI$, 7-2<br />

IBJ$, 7-2<br />

LAST$, 7-2<br />

LASTD$, 7-2<br />

LASTDR$, 7-2<br />

LASTI$, 7-2<br />

LASTIR$, 7-2<br />

LASTR$, 7-3<br />

LBDI$, 7-3<br />

LBDICALL$, 7-3<br />

LBDIREF$, 7-3<br />

MAPBDR$, 7-3<br />

MAPBDT$, 7-3<br />

MAPCALL$, 7-3<br />

MAPGOTO$, 7-3<br />

SLT$, 7-3<br />

T$IME, 7-3<br />

XREF$, 7-3<br />

<strong>Collector</strong> definied symbols<br />

BDI$, 7-1<br />

<strong>Collector</strong> directives<br />

COR, 6-1<br />

DEF, 2-4<br />

DSEG, F-6<br />

END, 6-4<br />

ENT, 6-4<br />

EQU, 6-5<br />

FIRSTBDI, A-3<br />

FRSTIN, 2-4<br />

LEVEL, 6-6<br />

MINGAP, 6-7<br />

MINSIZ, 6-7<br />

REF, 6-11<br />

RLIB, file-searching, 3-10<br />

RSEG, F-6<br />

SEG, F-2<br />

SNAP, 6-11<br />

TYPE, 2-2<br />

XSEG, A-1<br />

<strong>Collector</strong> directives, BANKINFO<br />

AFCB, 4-10<br />

ALLOWCONTIN, 4-7<br />

BDR, 4-7<br />

CODESTRIPPED, 4-7<br />

CONTINGENCY, 4-7<br />

CONTROL, 4-7<br />

DYNAMIC, 4-7<br />

EXTENDED, 4-7<br />

GUARANTEED, 4-8<br />

INITIAL, 4-8<br />

LEVEL(#), 4-8<br />

LMJ, 4-8<br />

NCCB, 4-8<br />

NOTEXTENDED, 4-8<br />

OVERRIDEMIN, 4-8<br />

READONLY, 4-9<br />

TSQUEUING, 4-9<br />

Index<br />

7830 9887–001 Index–3


Index<br />

VOID, 4-9<br />

<strong>Collector</strong> directives, CLASS<br />

general information, 3-6<br />

<strong>Collector</strong> directives, DBANK<br />

attributes parameter, 4-2<br />

bank-list parameter, 4-2<br />

level-# parameter, 4-2<br />

name-1parameter, 4-2<br />

<strong>Collector</strong> directives, DLIB<br />

bank-name parameter, 3-10<br />

<strong>Collector</strong> directives, FORM<br />

bank-name parameter, 3-3<br />

segment-name parameter, 3-3<br />

<strong>Collector</strong> directives, IBANK<br />

attributes parameter, 4-2<br />

bank structuring, 4-1<br />

bank-list parameter, 4-2<br />

general information, 2-2<br />

<strong>Collector</strong> directives, IN<br />

$lcs parameter, 3-1<br />

bank-list parameter, 3-1<br />

efficient use of, 8-1<br />

general information, 3-1<br />

name parameter, 3-1<br />

<strong>Collector</strong> directives, LIB<br />

$lcs parameter, 3-8<br />

bank-name parameter, 3-8<br />

file-name parameter, 3-8<br />

general information, 3-8<br />

<strong>Collector</strong> directives, NOT<br />

DEFAULT$LIBS parameter, 3-5<br />

general information, 3-4<br />

name parameter, 3-5<br />

<strong>Collector</strong> diretives, IBANK<br />

bdr-# parameter, 4-3<br />

<strong>Collector</strong> TYpe directive<br />

CLRAFCM, 5-6<br />

<strong>Collector</strong> TYPE directive<br />

BLOCKSIZE64 parameter, 5-2<br />

COMMONBANK parameter, 5-2<br />

COMSEG parameter, 5-3<br />

EXEC parameter, 5-3<br />

EXTDIAG parameter, 5-3<br />

IBJLNK parameter, 5-4<br />

INSAFCM parameter, 5-6<br />

QUARTER parameter, 5-4<br />

READONLY parameter, 5-5<br />

REALTIME parameter, 5-5<br />

SETAFCM parameter, 5-5<br />

THIRD parameter, 5-4<br />

<strong>Collector</strong>, using<br />

C option efficiently, 8-5<br />

location counters efficiently, 8-5<br />

<strong>Collector</strong>-defined tags, 4-14<br />

<strong>Collector</strong>-produced absolute output, 2-5<br />

<strong>Collector</strong>-produced relocatable elements<br />

DEF directive, 6-3<br />

determining arithmetic fault mode, 5-5<br />

END, 6-4<br />

IN, 3-1<br />

LIB, 3-8<br />

NOT, 3-4<br />

REF directive, 6-10<br />

TYPE directive, 5-1<br />

COMMN$ symbol, 7-1<br />

common blocks<br />

bank-implied collection, 4-12<br />

include text segment, 5-3<br />

loading, F-7<br />

placement, F-15<br />

R option collection, 2-4<br />

TYPE COMSEG, F-14<br />

common-bank collection, suppress error<br />

messages, 5-2<br />

conflicts<br />

local-global, 4-18<br />

CONTINGENCY, 4-7<br />

continuation character, 2-3<br />

CONTROL, 4-7<br />

control bank<br />

common block, F-15<br />

error messages, E-3, E-5, E-13, E-30<br />

FIRSTBDI value, A-3<br />

general information, 4-14<br />

indirect load table, F-11<br />

segment load table, F-13<br />

SNAP$ element, 6-13<br />

using segmentation, F-13<br />

control statement<br />

@MAP, 2-7<br />

options, 2-7<br />

COR directive<br />

corrections, 6-1<br />

corrections, for a relocatable element, 6-3<br />

data images, 6-1<br />

indirectly loaded segment, 6-2<br />

Index–4 7830 9887–001<br />

D<br />

D attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

D bank general information, 4-14, 4-15<br />

D bank symbols<br />

FRSTD, 4-14


LASTD$, 4-14<br />

LASTDR$, 4-14<br />

D option, @MAP, 2-7, 2-8<br />

D$ATE symbol, 7-1<br />

D$BJ, 4-23<br />

D$LOAD/DLOAD$, loading dynamic<br />

segments, F-10<br />

D$REL/DREL$ ,releasing segment program<br />

area, F-12<br />

data allocation, 2-2<br />

data area, 4-15<br />

DBANK directive, 4-15<br />

$EVEN, general information, 4-11<br />

attributes, 4-9<br />

attributes parameter, 4-2<br />

bank-list parameter, 4-2<br />

bdr-# parameter, 4-3<br />

first directive, 4-13<br />

general information, 4-13<br />

level-# parameter, 4-2<br />

location counters, 4-12<br />

name-1parameter, 4-2<br />

options, 4-3<br />

structuring, 4-1<br />

DBANK directive bank-list parameter<br />

name-2 format, 4-2<br />

DBANK directive, bank-list parameter<br />

name-n format, 4-2<br />

no entry format, 4-2<br />

DBJ$ symbol, 7-1<br />

DEF directive<br />

absolute collection, 6-3<br />

COMMN$, 6-3<br />

ENTRY$, 6-4<br />

external defininition collection, 6-3<br />

R option collection, 6-3<br />

definitions<br />

BDI and entry point, 4-28<br />

external, 2-4<br />

destination bank, 4-22<br />

determining search sequence, 3-14<br />

diagnostic messages<br />

ERROR, E-8<br />

FATAL ERROR, E-23<br />

WARNING, E-30<br />

directed LIB directive, 3-8<br />

directive<br />

COR, 6-1<br />

directives<br />

BANKINFO, 4-30<br />

banking, 4-1<br />

<strong>Collector</strong>, 2-2<br />

DBANK, 4-14<br />

DEF, 6-3<br />

directed LIB, 3-9<br />

END, 6-4<br />

ENT, 6-4<br />

EQU, 6-5<br />

IBANK, 4-14<br />

IN, 4-15<br />

INFO Group 3, 4-12<br />

REF, 6-10<br />

RES, 6-8<br />

RSEG, F-6<br />

SEG considerations, F-3<br />

segmentation, F-1<br />

SNAP, 6-11<br />

directives, segmentation<br />

DSEG, F-2<br />

IN, F-2<br />

RSEG, F-2<br />

SEG, F-2<br />

DLIB directive<br />

$lcs parameter, 3-10<br />

bank-name parameter, 3-10<br />

DSEG<br />

considerations, F-6<br />

DSEG directive<br />

considerations, F-6<br />

dynamic segments, F-6<br />

MCORE$ request, F-6<br />

dumps, SNAP directive, 6-13<br />

DYNAMIC, 4-7<br />

dynamic segments<br />

general information, F-10<br />

loading, F-10<br />

Index<br />

7830 9887–001 Index–5<br />

E<br />

E option, @MAP, 2-8<br />

element<br />

exclusion, 3-5<br />

explicitly included, 4-10<br />

global, 4-11<br />

implicitly included, 4-12<br />

inclusion, 3-17<br />

local, 4-16<br />

placement, 4-19<br />

element name rules, 2-3<br />

element placement<br />

arithmetic fault mode determination, 5-5<br />

element search, 3-11<br />

elements, absolute


Index<br />

EXEC action produced by arithmetic fault<br />

mode, 5-6<br />

elements, relocatable<br />

<strong>Collector</strong> produced, 2-4<br />

corrections, 6-1<br />

example<br />

bank-implied collections, B-1<br />

F<br />

F option, @MAP, 2-8<br />

FATAL ERROR Messages, E-1<br />

file name rules, 2-3<br />

file searching<br />

implicit inclusion, 3-8<br />

sequence number, 3-11<br />

files, 2-3<br />

FIRST, 4-14<br />

FIRSTBDI directive, A-3<br />

FIRSTBDI$ symbol, 7-2<br />

FORM directive, 3-3<br />

format<br />

errors for a relocatable element, D-1<br />

SNAP data image, 6-12<br />

FRSTD, 4-14<br />

FRSTD$ symbol, 7-2<br />

FRSTI$, 4-14<br />

FRSTI$ symbol, 7-2<br />

FRSTIN directive<br />

first element included, 3-3<br />

general information, 2-4<br />

G<br />

G attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

G option, SIR$, 2-9<br />

global elements, 4-16<br />

global-local conflicts, 4-18<br />

GOTO, op code, 4-26<br />

group-sequence, 3-11<br />

GUARANTEED, 4-8<br />

H<br />

H attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

H option, SIR$, 2-9<br />

Index–6 7830 9887–001<br />

I<br />

I bank symbols, 4-12<br />

I option, SIR$, 2-9<br />

IBANK directive, 4-12<br />

IBANK directive, bank list parameter, 4-1<br />

IBANK/ DBANK, 4-1<br />

IBJ$, 4-20, 4-23<br />

IBJ$ symbol, 7-2<br />

IBJ$/DBJ$, use of BDI, 4-20<br />

IBJLNK parameter, TYPE directive, 5-4<br />

implicitly included elements, 4-12<br />

implied SEG directive, F-3<br />

IN Directive, 8-1<br />

indirect loading of segments, F-11<br />

INFO Groups, C-1<br />

information messages, E-35<br />

initially based banks, 4-14<br />

input to the <strong>Collector</strong>, 2-7<br />

instruction<br />

allocation, 2-2<br />

area, 4-14<br />

J<br />

J option, SIR$, 2-9<br />

J, op code, 4-37<br />

K<br />

K option, SIR$, 2-9<br />

keywords, INFO group 12, 3-11<br />

L<br />

L attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

L option, @MAP, 2-8<br />

L$OAD/LOAD$, F-8<br />

language conventions, 2-2<br />

LAST$, 4-14<br />

LAST$ symbol, 7-2<br />

LASTD$, 4-12<br />

LASTD$ symbol, 7-2<br />

LASTDR$, 4-12<br />

LASTDR$ symbol, 7-2<br />

LASTI$, 4-12<br />

LASTI$ symbol, 7-2


LASTIR$, 4-12<br />

LASTIR$ symbol, 7-2<br />

LASTR$ symbol, 7-3<br />

LBDI$, 4-26<br />

LBDI$ symbol, 7-3<br />

LBDICALL, 4-26<br />

LBDICALL$ symbol, 7-3<br />

LBDIREF$, 4-26<br />

LBDIREF$ symbol, 7-3<br />

leading blanks, 2-3<br />

length, character, 2-3<br />

LEVEL(#), 4-8<br />

LIB directive, 2-3<br />

library, 3-11<br />

link vector, 4-9<br />

LMJ, 4-8<br />

LOAD$ request, reloading the main<br />

segment, F-10<br />

loading, F-14<br />

local elements, 4-16<br />

Local-Global Conflicts, 4-18<br />

location counter, 4-11<br />

LOCL, 4-26<br />

M<br />

M attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

MAP$PF, 2-1<br />

MAPBDR$ symbol, 7-3<br />

MAPBDT$ symbol, 7-3<br />

MAPCALL$ symbol, 7-3<br />

MASM $INFO group 3 directive, 4-12<br />

MINGAP, 6-7<br />

multibanked program, 4-13<br />

N<br />

N attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

N option, @MAP, 2-8<br />

NCCB, 4-2<br />

negative fields, D-2<br />

Neither P nor Q option, SIR$, 2-9<br />

NITIAL, 4-8<br />

no option listing, @MAP, 2-5<br />

nonconfigured common bank, 4-2, 4-8<br />

notation, 2-3<br />

NOTEXTENDED, 4-8<br />

number on <strong>Collector</strong> directives, 2-3<br />

Index<br />

7830 9887–001 Index–7<br />

O<br />

O attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

odd location counters, 2-2<br />

operation code, 4-36<br />

options<br />

@MAP, 2-7<br />

SIR$, 2-9<br />

output, 2-2<br />

OVERRIDEMIN, 4-39<br />

P<br />

P and Q option, SIR$, 2-9<br />

P option, SIR$, 2-9<br />

physical bank, 4-1<br />

placement, element, 4-19<br />

print diagnostic message, 2-7<br />

procedures, system-provided, 4-23<br />

program segments<br />

direct method, F-8<br />

dynamic release, F-12<br />

indirect method, F-11<br />

segment load table, F-13<br />

PTF$<br />

size of common block, F-14<br />

Q<br />

Q attribute, IBANK/DBANK directive<br />

(table), 4-4<br />

Q option, SIR$, 2-9<br />

QUARTER, 5-4<br />

quarter-word sensitive, 5-4<br />

queuing, test-and-set, 4-4<br />

R<br />

R attribute, IBANK/DBANK directive<br />

(table), 4-5<br />

R option, @MAP, 2-8<br />

READONLY, 4-9, 5-5<br />

REALTIME, 5-5<br />

REF directive, 6-10<br />

reference search, 3-11<br />

references<br />

external, 2-4, 2-6


Index<br />

reloading main segment, F-10<br />

relocatable elements, 2-4<br />

relocatable segments, F-7<br />

relocation order restriction, D-1<br />

RES directive, 6-8<br />

restrictions, D-2<br />

return, 4-25<br />

RSEG, F-2<br />

rules, 2-3<br />

S<br />

S attribute, IBANK/DABNK directive<br />

(table), 4-5<br />

S option, @MAP, 2-8<br />

search, 3-11<br />

search sequence<br />

altering, 3-12<br />

determining, 3-14<br />

searching user-specified search files, 3-16<br />

SEG directive<br />

$MAIN$, F-3<br />

directive, F-2<br />

element inclusion, F-3<br />

example, B-3<br />

implied, F-3<br />

indirect load segment, F-6<br />

indirect loading, F-11<br />

value, F-3<br />

segment load table, 4-14<br />

segmentation, F-1<br />

sensitivity, quarter-word, 5-6<br />

sensitivity, third-word, 5-5<br />

SETAFCM parameter, TYPE directive, 5-1<br />

sign-off line, 2-6<br />

sign-on line, 2-6<br />

SIR$ options, 2-9<br />

SLT$ symbol, 7-3<br />

SNAP data image format, 6-12<br />

SNAP directive, 6-11<br />

snapshot dumps, 6-11<br />

statement options, @MAP, 2-7<br />

static diagnostic text, D-3<br />

storage area, expand, 2-8<br />

subattributes, 4-6<br />

subroutine calls, 4-25<br />

suppresses error messages during commonbanked<br />

collection, 5-2<br />

symbolic element, 5-4<br />

SYS$*DATA$.LIB$NAMES, 3-13<br />

SYS$*RLIB$, 2-4<br />

SYS$LIB$*ACOB, 3-12<br />

SYS$LIB$*FTN, 3-12<br />

SYS$LIB$*SORT, 3-12<br />

SYS$RLIB$ID, 3-1<br />

system library searching, 3-11<br />

system-provided procedures, 4-23<br />

Index–8 7830 9887–001<br />

T<br />

T attribute, IBANK/DBANK directive<br />

(table), 4-5<br />

T option, @MAP, 2-8<br />

T$IME symbol, 7-3<br />

target location, 4-36<br />

template bank, 4-1<br />

termination, 2-7<br />

test-and-set queuing, 4-9<br />

text ACW, 6-8<br />

THIRD parameter, TYPE directive, 5-5<br />

third-word sensitivity, 5-5<br />

TPF$<br />

@PREP of, 8-1<br />

file searching, 3-10<br />

truncation of negative fields, restriction, D-2<br />

TSQUEUING, 4-9<br />

TYPE COMSEG directive, F-14<br />

TYPE EXEC<br />

definition, A-1<br />

general information, 4-37<br />

TYPE EXEC collection, A-4<br />

TYPE IBJLNK<br />

general information, 4-23<br />

using, 4-24<br />

U<br />

U attribute, IBANK /DBANK directive<br />

(table), 4-5<br />

U option, SIR$, 2-9<br />

undefined symbols, C-1<br />

V<br />

V attribute, IBANK /DBANK directive<br />

(table), 4-5<br />

VECTOR attribute, 4-9<br />

VOID, 4-9<br />

void bank template, 4-5, 4-9


W<br />

W option, SIR$, 2-10<br />

WARNING messages, E-30<br />

word count, incorrect, D-1<br />

write function process, 2-3<br />

write-protected, 4-5<br />

X<br />

X attribute, IBANK /DBANK directive<br />

(table), 4-5<br />

X option, @MAP, 2-9<br />

X11,BDICALL$, 4-29<br />

X11,BDIREF$, 4-29<br />

XREF$ symbol, 7-3<br />

XSEG directive, Executive function<br />

arrangement, A-1<br />

Z<br />

Z attribute, IBANK/DBANK directive<br />

(table), 4-5<br />

Z option, @MAP, 2-9<br />

zero-fill<br />

ACW, 6-8<br />

segment, F-11<br />

Index<br />

7830 9887–001 Index–9


Index<br />

Index–10 7830 9887–001


*78309887-001*<br />

7830 9887–001

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!