mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-01 09:21:15 +00:00
2161 lines
71 KiB
Plaintext
2161 lines
71 KiB
Plaintext
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STCMAC Users Manual
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A Product Of
|
|
|
|
Storage Technology Corporation
|
|
Information Services Division
|
|
as of STCMAC version 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHAPTER 1
|
|
|
|
DESCRIPTION
|
|
|
|
|
|
|
|
STCMAC is a macro source program which is used to build STCMAC.UNV,
|
|
STCUNV.UNV, and TYPER.REL. These contain definitions for commonly used
|
|
macros which are intended to make life easier for the MACRO-10 hacker.
|
|
These universal files (and .REL file) differ only in content. STCMAC
|
|
contains all macro definitions, STCUNV contains a subset of the macros
|
|
contained in STCMAC which does not include the "$TYPER" macro.
|
|
TYPER.REL contains a stand-alone expansion of the $TYPER macro.
|
|
|
|
|
|
|
|
|
|
|
|
Any comments/suggestions/complaints concerning this document should
|
|
be directed to:
|
|
|
|
D. Robert Banks
|
|
or Rex Shadrick
|
|
c/o Storage Technology Corp.
|
|
2270 S. 88th St.
|
|
Louisville, Colorado 80027
|
|
|
|
|
|
|
|
Any comments concerning STCMAC should be directed to Rex Shadrick
|
|
at the above address.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHAPTER 2
|
|
|
|
STC SPECIFIC SYMBOL DEFINITIONS
|
|
|
|
|
|
|
|
STCMAC contains some symbol definitions that are of importance only
|
|
to programs written for STC. These symbols are definitions for STC
|
|
privilege bits (used in the JBTPRV monitor table), local FACT.SYS entry
|
|
definitions, and two local CALLI UUOs (USRNM. and USRLG.). These
|
|
definitions are of little or no importance to anyone outside of STC and
|
|
can be ignored.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHAPTER 3
|
|
|
|
VERSION/TITLE MACROS
|
|
|
|
|
|
|
|
There are two macros which manipulate version numbers. They are:
|
|
"$VRSN" and "$TITLE". Note that these macros define symbols which are
|
|
required by other STCMAC macros and routines.
|
|
|
|
|
|
|
|
3.1 THE $VRSN MACRO
|
|
|
|
This macro is used to define the program's version number in
|
|
TOPS-10 compatible format. It requires two arguments: a three letter
|
|
abbreviation of the program name (preferably the program's CCL name),
|
|
and the version number in the format that is typed by DIRECT. Example:
|
|
|
|
$VRSN STC,1(60)-2
|
|
|
|
|
|
This defines six symbols of importance to the programmer. These
|
|
are: xxxVER, xxxMIN, xxxEDT, xxxWHO, xxx.VN, and TP.PFX, where "xxx" is
|
|
the CCL name given as the first argument. xxxVER is the major version
|
|
number, xxxMIN is the minor version number, xxxEDT is the edit level,
|
|
xxxWHO is the programmer (0-7), xxx.VN is a 36 bit version number which
|
|
is the combined form of the previous four numbers (note that this symbol
|
|
is generated using the "VRSN." macro from MACTEN.UNV) and TP.PFX is an
|
|
18 bit quantity which is the SIXBIT CCL name.
|
|
|
|
|
|
|
|
3.2 THE $TITLE MACRO
|
|
|
|
This macro is used in conjunction with the $VRSN macro to generate
|
|
a "TITLE" pseudo-op, with the program's version number appended to the
|
|
text of the title statement. This macro takes five arguments: a text
|
|
string which is the main body of the title statement, the program's CCL
|
|
name (the same as the one given to the $VRSN macro), an optional
|
|
pseudo-op to be used instead of "TITLE" (e.g. "UNIVERSAL" to generate a
|
|
universal file), a number to specify which pass to execute the macro
|
|
(more of this later), and another text string which will be appended to
|
|
the line following the version number that is generated.
|
|
VERSION/TITLE MACROS Page 3-2
|
|
THE $TITLE MACRO
|
|
|
|
|
|
This macro can be used to construct virtually any type of statement
|
|
the programmer would want that contains the program's version number in
|
|
text format, but is normally used to generate a TITLE/UNIVERSAL
|
|
pseudo-op. Some examples of the use of $TITLE are:
|
|
|
|
$TITLE STCUNV - STC Common Macro Definitions,STC,UNIVERSAL
|
|
|
|
Would generate:
|
|
|
|
UNIVERSAL STCUNV - STC Common Macro Definitions %1(60)-2
|
|
|
|
$TITLE <\EBUTIL >,EBU,SIXBIT,3,<\>
|
|
|
|
Would generate:
|
|
|
|
SIXBIT \EBUTIL %1(1)-4\
|
|
|
|
$TITLE <[Assembling STCUNV Version>,STC,PRINTX,1,<, pass 1]>
|
|
|
|
$TITLE <[Assembling STCUNV Version>,STC,PRINTX,2,<, pass 2]>
|
|
|
|
Would generate:
|
|
|
|
IF1,< PRINTX [Assembling STCUNV Version %1(60)-2, pass 1]
|
|
>
|
|
|
|
IF2,< PRINTX [Assembling STCUNV Version %1(60)-2, pass 2]
|
|
>
|
|
|
|
|
|
The pass number argument to $TITLE is a two bit number which
|
|
instructs $TITLE which passes to assemble this macro on. This value is
|
|
assumed to be 3 if zero, blank or omitted. An argument of 1 will direct
|
|
it to assemble only during pass 1, 2 for pass 2 or 3 for both passes.
|
|
|
|
|
|
|
|
3.2.1 The $PASS Macro
|
|
|
|
The last two examples are contained in a single special-case macro
|
|
called "$PASS". This is a single macro whose main function is to type
|
|
on the user's console what it is that (s)he is assembling. The two
|
|
arguments passed to this macro are the program's name and the CCL prefix
|
|
(as given in the $TITLE macro).
|
|
|
|
An example of its use:
|
|
|
|
$PASS STCUNV,STC
|
|
|
|
|
|
Would generate the last two $TITLE macros given above.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHAPTER 4
|
|
|
|
RELOCATION MACROS
|
|
|
|
|
|
|
|
There are several macros defined which are used to control program
|
|
relocation, phase, and literal/variable pool. These macros are:
|
|
$RELOC, $ABS, $END, $HIGH, $LIT, $LOW, $PRGEND and $VAR.
|
|
|
|
|
|
|
|
4.1 THE $RELOC MACRO
|
|
|
|
This macro is invoked a maximum of once per program and should be
|
|
used before any other relocation macros are called. There are three
|
|
optional arguments: the first specifies whether one or two segment code
|
|
is to be generated, the second determines whether literals are to be
|
|
dumped when the segment changes and the third is the high segment base
|
|
relocation address. The first argument is either "ONE" for single
|
|
segment (low segment only) code or "TWO" for two segment code (high and
|
|
low segments). The second argument is either "LIT" to dump literals
|
|
when the segment changes (via $HIGH or $LOW) or "NOLIT" to suppress
|
|
dumping of literals. When "LIT" is set, the literal pool will be dumped
|
|
in the current segment before the segment is changed. The defaults for
|
|
the arguments are "TWO,NOLIT,400000". An example of its use:
|
|
|
|
$RELOC TWO,LIT
|
|
|
|
|
|
|
|
|
|
4.2 THE $ABS MACRO
|
|
|
|
This macro is used to generate absolute assembly code (i.e. "LOC"
|
|
pseudo-op). Its single argument is the address to begin assembly.
|
|
Example:
|
|
|
|
$ABS 137
|
|
|
|
RELOCATION MACROS Page 4-2
|
|
THE $END MACRO
|
|
|
|
|
|
4.3 THE $END MACRO
|
|
|
|
This macro will dump the literal pool (in the high segment) and
|
|
variable pool (in the low segment) and generate an "END" statement. The
|
|
single optional argument is the start address of the program as in the
|
|
"END" pseudo-op. Example:
|
|
|
|
$END START
|
|
|
|
|
|
|
|
|
|
4.4 THE $HIGH MACRO
|
|
|
|
This macro will reset the relocation to high segment code. This
|
|
macro should only be used if two segments were specified to the $RELOC
|
|
macro. If the "LIT" option was specified to $RELOC, then the literal
|
|
pool will be dumped before changing segments. Example:
|
|
|
|
$HIGH
|
|
|
|
|
|
|
|
|
|
4.5 THE $LIT MACRO
|
|
|
|
This macro will set the relocation to the high segment, then dump
|
|
the literal pool. Example:
|
|
|
|
$LIT
|
|
|
|
|
|
|
|
|
|
4.6 THE $LOW MACRO
|
|
|
|
This will set the program relocation to the low segment. If "LIT"
|
|
was given in the $RELOC call, the literals will be dumped in the current
|
|
segment before changing to the low segment. Example:
|
|
|
|
$LOW
|
|
|
|
|
|
|
|
|
|
4.7 THE $PRGEND MACRO
|
|
|
|
This macro will dump the literal and variable pools (as in the $END
|
|
macro), then generate a PRGEND pseudo-op, optionally with the program
|
|
start address. Example:
|
|
|
|
$PRGEND
|
|
|
|
RELOCATION MACROS Page 4-3
|
|
THE $VAR MACRO
|
|
|
|
|
|
4.8 THE $VAR MACRO
|
|
|
|
This sets the program relocation to the low segment and dumps the
|
|
variable pool. Example:
|
|
|
|
$VAR
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHAPTER 5
|
|
|
|
STACK MACROS
|
|
|
|
|
|
|
|
STCMAC contains macros which allocate frames or local variables on
|
|
the software stack. These routines require that the stack pointer is in
|
|
register 17, defined as "P", and will also save register 16 and use it
|
|
for a frame pointer during the context of the variables/frame.
|
|
|
|
|
|
|
|
5.1 THE $VARIABLE MACRO
|
|
|
|
This macro is used to stack registers 1 through 16 and allocate
|
|
local variables on the stack. This macro generates a call to the
|
|
routine with the entry point ".FRAME", which will use register 16 for a
|
|
frame pointer.
|
|
|
|
The format of the call is:
|
|
|
|
$VARIABLE (call variable,register variable,<variable list>)
|
|
|
|
|
|
The "call variable" is a stack variable which will point to the
|
|
address of the return address on the stack, the "register variable" is a
|
|
stack variable which points to the address on the stack where registers
|
|
1 thru 16 are saved and "variable list" is a list of variable names to
|
|
be generated. These variables are macro definitions which implicitly
|
|
index register 16, so instructions using these symbols cannot use
|
|
indexing. On the next "POPJ P,", these variables are deallocated and
|
|
all saved registers are restored. The format of the variable list is a
|
|
list of symbol names for unit length variables. For multiple word
|
|
variables, the format of the variable name is of the form: "<VAR,4>"
|
|
which would generate four words of storage for the symbol "VAR". On
|
|
return from the macro, register "T1" will point to the argument block.
|
|
Note that the generated storage is NOT pre-zeroed.
|
|
STACK MACROS Page 5-2
|
|
THE $FRAME MACRO
|
|
|
|
|
|
5.2 THE $FRAME MACRO
|
|
|
|
This macro generates the subroutine which is called by the
|
|
$VARIABLE macro. This macro is expanded in the expansion of the $TYPER
|
|
macro. The generated code is a subroutine which has a global entry
|
|
called ".FRAME" and will call the routines generated by the "$LOCAT" and
|
|
"$PARAM" macros. There is a single optional argument to this macro
|
|
which is the CPU type (PDP6, KA10, KI10 or KL10), which if omitted will
|
|
default to the CPU type that it is being expanded on. This will produce
|
|
adjust stack pointer (ADJSP) instructions if running on a KL10 or later
|
|
CPU.
|
|
|
|
|
|
|
|
5.3 THE $LOCAT MACRO
|
|
|
|
This macro expands to a routine which calculates an effective
|
|
address. The reason there is a subroutine to do this rather than
|
|
relying on the hardware is the case where the address is a register that
|
|
has been saved on the stack, this routine will properly point to the
|
|
location on the stack where the register has been saved. This assumes
|
|
that register 16 points to a frame on the stack which contains the
|
|
registers, as setup by the $VARIABLE macro and .FRAME subroutine.
|
|
|
|
The routine generated has a global entry point of ".LOCAT", expects
|
|
the address to be calculated in T1, will return the effective address in
|
|
T1 and destorys T2. This macro is expanded by the "$TYPER" macro.
|
|
|
|
|
|
|
|
5.4 THE $PARAM MACRO
|
|
|
|
The $PARAM macro generates a routine to find the address of the
|
|
instruction which called the current routine. This routine is used by
|
|
.FRAME, and assumes the calling instruction to be an XCT or PUSHJ P,@.
|
|
This routine properly detects DDT breakpoints. The entry point to this
|
|
routine is ".PARAM", and is contained in TYPER.REL along with .FRAME and
|
|
.LOCAT.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHAPTER 6
|
|
|
|
TYPER MACROS
|
|
|
|
|
|
|
|
The TYPER macros are a set of macro definitions and subroutines
|
|
which are designed to make ASCII output easier for the programmer, thus
|
|
leaving him more time for more esoteric programming. They are primarily
|
|
used for TTY output, however they may also be used to do output to any
|
|
device or file. These macros depend on symbols that are generated by
|
|
the $VRSN and $RELOC macros.
|
|
|
|
|
|
NOTE
|
|
|
|
|
|
The code generated by the $TYPE and
|
|
$TYPES macros is one location of inline
|
|
code which is a PUSHJ P, indirect or XCT.
|
|
All $TYPE and $TYPES calls can therefore
|
|
be SKIPped around.
|
|
|
|
|
|
|
|
|
|
|
|
6.1 THE $NUMBER MACRO
|
|
|
|
The $NUMBER macro is used to generate a descriptor word for the
|
|
$NUM output type call (used by the $TYPE macro). This macro creates a
|
|
single word which describes the location for the number to be output,
|
|
and the format in which it is to be typed. The call is:
|
|
|
|
$NUMBER ($ADR,$TYP,$WID,$DEC,$NOT)
|
|
|
|
|
|
Where "$ADR" is the address of the data to be output, "$TYP" is the
|
|
output type; one of "DOUBLE", "SINGLE" or "UNSIGNED" (default), which
|
|
selects double/single precision or unsigned output. "$WID" is the width
|
|
of the integer portion of the number (0 is default), "$DEC" is the
|
|
number of digits to be typed to the right of the decimal point for
|
|
single/double precision or the output radix for unsigned (5 is the
|
|
default for single/double, 8 for unsigned). "$NOT" is the notation for
|
|
output; for single/double: "REGULAR" for regular floating point output
|
|
or "SCIENTIFIC" for scientific type output, for unsigned output:
|
|
TYPER MACROS Page 6-2
|
|
THE $NUMBER MACRO
|
|
|
|
|
|
"BLANK" for blank fill on leading zeroes or "ZERO" for zero fill on
|
|
leading zeroes. "REGULAR" or "ZERO" is the default for this field if
|
|
not specified.
|
|
|
|
|
|
|
|
6.2 THE $TYPE MACRO
|
|
|
|
The $TYPE macro is the macro which is used to output an ASCII
|
|
string with output conversions for outputting numbers, ASCII or SIXBIT
|
|
substrings, etc. The arguments to the macro call describe the type of
|
|
message (error, warning, information, or operator intervention
|
|
required), the message prefix, and the type of output conversion to be
|
|
used for the supplied arguments at runtime. The format of the call is:
|
|
|
|
$TYPE ($HDR,$SFX,$SUB,$TXT,$TRL,$RET,$ORN)
|
|
|
|
|
|
Where "$HDR" is the message type,"$SFX" is the last three
|
|
characters of the message prefix, "$SUB" is the substitution type,
|
|
"$TXT" is the ASCII text, "$TRL" is the trailer code (i.e. <CR><LF> or
|
|
no <CR><LF>), "$RET" is the address to return to and "$ORN" is the
|
|
output routine to be used. These are described in detail below:
|
|
|
|
|
|
|
|
6.2.1 $HDR
|
|
|
|
This argument specifies the header type to be used. The header
|
|
types available are:
|
|
|
|
Option Leading Description
|
|
Type Char
|
|
F ? For a fatal error.
|
|
I [ For an information message.
|
|
M " For an operator information message.
|
|
N For no header or prefix.
|
|
O $ For operator intervention required.
|
|
T <TAB> For a leading tab with no prefix.
|
|
W % For a warning message.
|
|
|
|
|
|
A six character message prefix consisting of the program's CCL name
|
|
(as defined for the $VRSN macro) and a three character abbreviation
|
|
(supplied as the "$SFX" argument) will be output for header types F, I,
|
|
M, O and W, followed by a <TAB> character (Control-I) will be output at
|
|
the beginning of the message. If the header type is I, a "]" will be
|
|
output at the end of the line, unless the "N" option is given as the
|
|
argument "$TRL", in which case the "]" will be deferred until then next
|
|
$TYPE call which ends the line without specifying that the trailer be
|
|
omitted.
|
|
TYPER MACROS Page 6-3
|
|
THE $TYPE MACRO
|
|
|
|
|
|
6.2.2 "$SFX"
|
|
|
|
This argument is a three character suffix which is appended to the
|
|
program's CCL name to be output as part of the message prefix. An error
|
|
message will be issued if this argument is non-blank when used with
|
|
header type "T". If the suffix is non-blank when used with the header
|
|
type "N", the code generated will be an XCT instruction of the $TYPE
|
|
call which uses the same suffix with a header type of F, I, M, O or W.
|
|
The $TYPE macro will generate a label of the form "$$$sfx" (where "sfx"
|
|
is this argument), which implies that there can be only one call which
|
|
uses this suffix with any header type other than "N".
|
|
|
|
|
|
|
|
6.2.3 "$SUB"
|
|
|
|
This argument specifies the substitution type to be performed on
|
|
the argument passed in accumulator "T1". This substitution is performed
|
|
on the first occurrence of a "|" (vertical bar) character which is
|
|
encountered in the supplied ASCII string. These substitutions are:
|
|
|
|
|
|
|
|
|
|
6.2.3.1 $NON -
|
|
|
|
No substitution is to be performed.
|
|
|
|
|
|
|
|
6.2.3.2 $ASC -
|
|
|
|
The ASCIZ string pointed to by T1 is output.
|
|
|
|
|
|
|
|
6.2.3.3 $BIT -
|
|
|
|
T1 contains the address of the following argument block. This
|
|
will type an ASCIZ string which corresponds to the non-zero bit in
|
|
the bit mask given. Examples of this substitution type are given
|
|
later.
|
|
|
|
c(T1)+0/ Flags and the address of the message table.
|
|
c(T1)+1/ The bits to be tested.
|
|
c(T1)+2/ The bit mask to be ANDed.
|
|
c(T1)+3/ Pointers to user message separators.
|
|
TYPER MACROS Page 6-4
|
|
THE $TYPE MACRO
|
|
|
|
|
|
The flags in the first word are:
|
|
|
|
TF.AND Output "and" before the final message string.
|
|
TF.OR Output "or" before the final message string.
|
|
TF.FLD Output field values.
|
|
TF.LIN Separate the message strings with <CR><LF>.
|
|
TF.USR Separate the messages with the strings supplied in the
|
|
fourth word.
|
|
TF.SIX The message strings are in SIXBIT.
|
|
TF.BIT The second word is an indirect pointer.
|
|
TF.MSK The third word is an indirect pointer.
|
|
|
|
|
|
This will take the bit word (the second argument word or the
|
|
word pointed to by the second argument word if TF.BIT is set), AND
|
|
it against the bit mask (third argument word or the word pointed to
|
|
by the third argument word if TF.MSK is set), then scan the bits
|
|
from the most significant bit to the least significant bit. If one
|
|
of these bits is found to be on (a "1"), then the corresponding
|
|
message from the message table (pointed to by the right half of the
|
|
first argument word) will be output. The string to be used to
|
|
separate the message strings if more than one bit is set is a comma
|
|
(",") unless a user separator string is given if TF.USR is set.
|
|
Then it is the string pointed to by the left half of the fourth
|
|
argument word. Otherwise the separator is <CR><LF> if TF.LIN is
|
|
set. The final two message strings are separated by "and" if
|
|
TF.AND is set, "or" if TF.OR is set or the string pointed to by the
|
|
right half of the third argument word if TF.USR is set. If TF.FLD
|
|
is set, then the bit mask is used to extract a value to be used as
|
|
an index into the message table to output a single message.
|
|
|
|
This substitution type is useful for outputting error messages
|
|
in which the program is given a bit mask of what errors occured (as
|
|
in the case of the device status bits on an I/O error). For the
|
|
case of having an error number (like a LOOKUP/ENTER error), the
|
|
TF.FLD option can be used.
|
|
|
|
|
|
|
|
6.2.3.4 $BLK -
|
|
|
|
This format will type the number in T1 in decimal unless it is
|
|
an integral multiple of 128, in which case it will type the number
|
|
divided by 128, followed by a "B" (for "blocks"). This
|
|
substitution type is used to output file sizes.
|
|
|
|
|
|
|
|
6.2.3.5 $CHR -
|
|
|
|
This will type the contents of T1 as a single right justified
|
|
ASCII character.
|
|
TYPER MACROS Page 6-5
|
|
THE $TYPE MACRO
|
|
|
|
|
|
6.2.3.6 $COR -
|
|
|
|
This is used to type a core size passed in T1. If the number
|
|
is an integral multiple of 512 (1024 if running on a KA-10 or
|
|
PDP-6), the number will be divided by 512 (or 1024) and typed with
|
|
a "P" ("K" for KA-10 or PDP-6) appended. Otherwise, the number is
|
|
typed in decimal.
|
|
|
|
|
|
|
|
6.2.3.7 $DAT -
|
|
|
|
This will type the contents of T1 as dd-mmm-yy, where "dd" is
|
|
the day of the month, "mmm" is the three letter abbreviation of the
|
|
month, and "yy" is the year.
|
|
|
|
If the argument in T1 is minus 1, then the current date is
|
|
typed, else it is assumed to be in DEC 15 bit date format
|
|
(((year-1964)*12+month-1)*31+day-1).
|
|
|
|
|
|
|
|
6.2.3.8 $DAY -
|
|
|
|
This will print a day of the week. If the contents of T1 is
|
|
minus one, then the current day will be printed, otherwise the
|
|
argument is assumed to be in universal date/time format.
|
|
|
|
|
|
|
|
6.2.3.9 $DEC -
|
|
|
|
This will type the contents of T1 in decimal.
|
|
|
|
|
|
|
|
6.2.3.10 $DTL -
|
|
|
|
This will type a date in "long" format (e.g. September 30,
|
|
1978). If the argument in T1 is negative, then the current date is
|
|
printed, if the left half of T1 is positive and non-zero, then it
|
|
is assumed to be a universal date/time, if the left half is zero,
|
|
then it will processed as a 15 bit date.
|
|
|
|
|
|
|
|
6.2.3.11 $ENT -
|
|
|
|
This will type the OPEN and LOOKUP/ENTER blocks as pointed to
|
|
by T1. The left half of T1 contains the address of the open block,
|
|
the right half contains the address of the LOOKUP/ENTER block.
|
|
This will type the file name in the format:
|
|
"dev:file.ext[P,Pn,sfd1, ...]".
|
|
TYPER MACROS Page 6-6
|
|
THE $TYPE MACRO
|
|
|
|
|
|
6.2.3.12 $FUL -
|
|
|
|
This assumes that the contents of T1 is six SIXBIT characters,
|
|
and will type them converted to ASCII including trailing spaces.
|
|
|
|
|
|
|
|
6.2.3.13 $FUN -
|
|
|
|
If T1 is negative and bits 1 thru 12 are zero, this will type
|
|
the ASCIZ string pointed to by T1, otherwise it will type T1 as a
|
|
right justified ASCII character, In both cases, control characters
|
|
are typed as "^X", and lower case characters are typed as "'X".
|
|
|
|
|
|
|
|
6.2.3.14 $HEX -
|
|
|
|
The contents of T1 are typed out as a hexadecimal integer.
|
|
|
|
|
|
|
|
6.2.3.15 $LFT -
|
|
|
|
The contents of the left half of T1 are typed (assumed to be
|
|
three or less SIXBIT characters). Trailing spaces are deleted.
|
|
|
|
|
|
|
|
6.2.3.16 $LIN -
|
|
|
|
This will type a carriage-return/line-feed sequence. No
|
|
argument is required.
|
|
|
|
|
|
|
|
6.2.3.17 $LKP -
|
|
|
|
This substitution type is identical to the "$ENT"
|
|
substitution.
|
|
|
|
|
|
|
|
6.2.3.18 $NAM -
|
|
|
|
This substitution type is used to output a user name up to
|
|
twelve characters in length. On entry, T1 contains the address of
|
|
the first of the two SIXBIT words. Trailing spaces are deleted.
|
|
TYPER MACROS Page 6-7
|
|
THE $TYPE MACRO
|
|
|
|
|
|
6.2.3.19 $NUM -
|
|
|
|
This types a number in a according to a format defined by the
|
|
user. The contents of T1 contain the word generated by the $NUMBER
|
|
macro, which describes the format for the number to be typed.
|
|
|
|
|
|
|
|
6.2.3.20 $OCT -
|
|
|
|
Will output the contents of T1 in octal.
|
|
|
|
|
|
|
|
6.2.3.21 $PFX -
|
|
|
|
Will type the program's CCL name followed by the contents of
|
|
T1. If T1 is positive it is typed as an ASCII character right
|
|
justified, if negative, as a SIXBIT string.
|
|
|
|
|
|
|
|
6.2.3.22 $PPN -
|
|
|
|
Types the contents of T1 in "PPn" format, i.e. [P,Pn].
|
|
|
|
|
|
|
|
6.2.3.23 $PRO -
|
|
|
|
Types the contents of T1 as a three digit octal number with
|
|
leading zeros, enclosed in angle brackets (<nnn>), as a file
|
|
protection code.
|
|
|
|
|
|
|
|
6.2.3.24 $PTH -
|
|
|
|
Types the path block pointed to by T1 as [P,Pn,sfd1, ...].
|
|
|
|
|
|
|
|
6.2.3.25 $R50 -
|
|
|
|
Types the contents of T1 as six RADIX-50 characters, trailing
|
|
spaces deleted.
|
|
TYPER MACROS Page 6-8
|
|
THE $TYPE MACRO
|
|
|
|
|
|
6.2.3.26 $RUN -
|
|
|
|
Types the contents of T1 as program runtime, if bit 0 is zero
|
|
then T1 is assumed to be in milliseconds, otherwise in jiffies.
|
|
The format in which it is typed out depends upon the width of the
|
|
field given in the $TYPES JST call. If the width is negative, then
|
|
the null fields of the output (i.e. hours and minutes) are space
|
|
filled), if zero they are suppressed, if positive, all fields are
|
|
output.
|
|
|
|
|
|
|
|
6.2.3.27 $SCN -
|
|
|
|
Will type a SCAN compatible file specification block which is
|
|
pointed to by T1. The file name is printed as
|
|
"dev:file.exe[P,Pn,sfd1, ...]" with any wildcards output in the
|
|
appropriate places (e.g. "DSKA:A?????.*[?,?]").
|
|
|
|
|
|
|
|
6.2.3.28 $SIX -
|
|
|
|
Will type the contents of T1 as up to six SIXBIT characters
|
|
with trailing spaces deleted.
|
|
|
|
|
|
|
|
6.2.3.29 $SPC -
|
|
|
|
Types a string of spaces. T1 contains the number of spaces to
|
|
be output.
|
|
|
|
|
|
|
|
6.2.3.30 $SUB -
|
|
|
|
Types the string pointed to by T1 as an ASCII string, but with
|
|
substitutions, similar to the "$TXT" argument to the $TYPE call.
|
|
|
|
|
|
|
|
6.2.3.31 $TIM -
|
|
|
|
Types the contents of T1 as a time of day in the form
|
|
"hh:mm:ss", where T1 contains the number of milliseconds since
|
|
midnight or minus one for the current time.
|
|
TYPER MACROS Page 6-9
|
|
THE $TYPE MACRO
|
|
|
|
|
|
6.2.3.32 $TML -
|
|
|
|
This types a time of day in the format hh:mm {a.m.|p.m.},
|
|
where the argument is either milliseconds since midnight, or minus
|
|
one for the current time.
|
|
|
|
|
|
|
|
6.2.3.33 $UNV -
|
|
|
|
Types a date/time in the format: dd-mmm-yy:hh:mm:ss. The
|
|
contents of T1 are assumed to contain a date/time in universal
|
|
date/time format.
|
|
|
|
|
|
|
|
6.2.3.34 $VER -
|
|
|
|
Types the contents of T1 in version number format (i.e.
|
|
12D(123)-4).
|
|
|
|
|
|
|
|
6.2.3.35 $XWD -
|
|
|
|
Similar to $PPN except that the square brackets ("[]") are not
|
|
typed.
|
|
|
|
|
|
|
|
6.2.3.36 $UR1 Thru $UR7 -
|
|
|
|
Uses a user supplied output conversion routine as given in the
|
|
"$TYPES RTN" call.
|
|
|
|
|
|
|
|
6.2.3.37 $IND -
|
|
|
|
This performs no immediate substitution or conversion, but is
|
|
used to give multiple substitution types in a single $TYPE call.
|
|
This specifies to .TYPER that the contents of T1 contains in the
|
|
left half the negative number of arguments supplied, in the right
|
|
half the address of the table of words each containing the
|
|
substitution type and address of the argument (the address may
|
|
contain indirect bits and indexing). Each word is used
|
|
successively to control a substitution as a "|" character is
|
|
encountered in the text string.
|
|
|
|
|
|
|
|
If no argument is given as the substitution type, $NON is assumed
|
|
to be the default.
|
|
TYPER MACROS Page 6-10
|
|
THE $TYPE MACRO
|
|
|
|
|
|
6.2.4 "$TXT"
|
|
|
|
This argument is the ASCII string to be output. Any "|" characters
|
|
found in the string will flag a substitution to be performed and call
|
|
the indicated conversion routine.
|
|
|
|
|
|
|
|
6.2.5 "$TRL"
|
|
|
|
This specifies the trailing string to be appended to the text. It
|
|
may be one of: "N" for no trailer, or "C" for a
|
|
carriage-return/line-feed sequence. In the case of "C", if the message
|
|
type was information ("I"), then the "]" will be inserted before the
|
|
<CR><LF> sequence. If this argument is left blank, "C" is assumed.
|
|
|
|
|
|
|
|
6.2.6 "$RET"
|
|
|
|
This specifies the address to return to on completion of the $TYPE
|
|
call. If left blank, "N" is assumed, which will return to the next
|
|
instruction following the call. The returns are:
|
|
|
|
Return Description
|
|
C Return to the monitor and allow a CONTINUE.
|
|
E Return to the monitor and reset all I/O.
|
|
M Return without resetting I/O, but don't allow
|
|
a CONTINUE.
|
|
N Return to the next instruction.
|
|
N1 Return to the next instruction plus 1.
|
|
P Perform a return in behalf of the caller
|
|
(similar to calling with "PJRST").
|
|
P1 Similar to "P", but skip returns.
|
|
S Calls .FMSGE in SCAN following the message,
|
|
for fatal error processing.
|
|
|
|
|
|
If there is a return code given, but does not match any of the
|
|
above, then it is assumed to be an address, and will be transfered to
|
|
upon completion.
|
|
|
|
|
|
|
|
6.2.7 "$ORN"
|
|
|
|
This is the output routine to be used by .TYPER. If left blank,
|
|
then the default output routine as set by the last $TYPES OUT call is
|
|
used. If the output routine is set to zero, then .TYPER's default
|
|
output routine is used.
|
|
TYPER MACROS Page 6-11
|
|
THE $TYPE MACRO
|
|
|
|
|
|
Some examples of the $TYPE call are:
|
|
|
|
$TYPE (N,,$NON,<This is a message.>)
|
|
$TYPE (I,MSG,$NON,<This is an information message>)
|
|
|
|
Would type:
|
|
|
|
This is a message.
|
|
[PFXMSG This is an information message]
|
|
|
|
Some substitutions:
|
|
|
|
MOVEI T1,[SIXBIT \USER NAME\]
|
|
$TYPE (I,USR,$NAM,<The user name is |>)
|
|
|
|
Produces:
|
|
|
|
[PFXUSR The user name is USER NAME]
|
|
|
|
MOVE T1,.MYPPN##
|
|
$TYPE (W,PPN,$PPN,<The PPn is |>)
|
|
|
|
Produces:
|
|
|
|
%PFXPPN The PPn is [1,2]
|
|
|
|
DATE T2,
|
|
MOVE T1,[-3,,[$DAY [-1]
|
|
$TML [-1]
|
|
$DTL T2]]
|
|
$TYPE (M,DAY,$IND,<Today is |, | |>)
|
|
|
|
Produces something like:
|
|
|
|
"PFXDAY Today is Monday, September 25, 1978 08:30 a.m.
|
|
|
|
An example of the $BIT substitution:
|
|
|
|
OUT DSK,
|
|
POPJ P,
|
|
GETSTS DSK,T2
|
|
MOVEI T1,[TF.AND!TF.BIT+MSGTAB
|
|
T2
|
|
IO.ERR]
|
|
$TYPE (F,ODE,$BIT,<Output DSK error, status = |>,,P)
|
|
|
|
MSGTAB: [ASCIZ \Improper mode\]
|
|
[ASCIZ \Hard device error\]
|
|
[ASCIZ \Hard data error\]
|
|
[ASCIZ \Block too large\]
|
|
|
|
Would print something like:
|
|
|
|
?PFXODE Output DSK error, status = Improper mode and Hard data error
|
|
TYPER MACROS Page 6-12
|
|
THE $TYPER MACRO
|
|
|
|
|
|
6.3 THE $TYPER MACRO
|
|
|
|
The $TYPER macro when called, will generate the code needed to
|
|
process $TYPE and $TYPES macro calls. This macro exists in STCMAC.UNV
|
|
but not in STCUNV.UNV. TYPER.REL is a standalone expansion of this
|
|
macro. For programs which use SCAN, STCUNV.UNV should be searched since
|
|
it will use much less core at assembly time, and the program should be
|
|
loaded with TYPER.REL. The expansion of this macro also includes the
|
|
expansion of the $FRAME, $PARAM and $LOCAT macros. The format of the
|
|
$TYPER macro call is:
|
|
|
|
$TYPER ($LST,$SCN,$SEG,$CPU)
|
|
|
|
|
|
Where "$LST" is either "LIST" or "NOLIST" depending on whether or
|
|
not the programmer wants the expanded code in the program listing,
|
|
"$SCN" is either "SCAN" or "NOSCAN" to specify whether or not SCAN will
|
|
be loaded with this program, "$SEG" is "ONE" or "TWO" to specify the
|
|
number of segments of code to be generated and "$CPU" is the CPU type to
|
|
generate code for. The defaults are:
|
|
|
|
$TYPER (LIST,SCAN,TWO)
|
|
|
|
|
|
Where the cpu type defaults to the type on which the assembly is
|
|
taking place.
|
|
|
|
|
|
|
|
6.4 THE $TYPES MACRO
|
|
|
|
The $TYPES macro is used in conjunction with the $TYPE macro to
|
|
control output destination, time stamping, etc. There is a single
|
|
argument to this macro, the format of the call is:
|
|
|
|
$TYPES fnc
|
|
|
|
|
|
Where "fnc" is one of the following:
|
|
|
|
|
|
|
|
|
|
|
|
6.4.1 BUG
|
|
|
|
This option implies that a fatal program error has been
|
|
detected. This will cause an error message to be typed, then the
|
|
program will exit.
|
|
TYPER MACROS Page 6-13
|
|
THE $TYPES MACRO
|
|
|
|
|
|
6.4.2 COL
|
|
|
|
Will return in AC T1 the current horizontal position in the
|
|
output line. This column counter is valid only when time stamping
|
|
and/or justification are being used.
|
|
|
|
|
|
|
|
6.4.3 DMP
|
|
|
|
Will force the text buffer to be dumped if the standard output
|
|
routine is being used. This routine normally buffers in core the
|
|
entire line to be output, then outputs it all at once when end of
|
|
line is encountered. This call will force the partial line to be
|
|
output.
|
|
|
|
|
|
|
|
6.4.4 ERR
|
|
|
|
This will cause all fatal error messages (i.e., all with the
|
|
header type "F") to increment .JBERR. This is used as a flag to
|
|
other programs that a system program error has occured.
|
|
|
|
|
|
|
|
6.4.5 INI
|
|
|
|
This call should be performed before any other $TYPE or $TYPES
|
|
calls. This will initialize TYPER, and setup the program's CCL
|
|
name and initial output routine. On entry, .TYPES assumes that the
|
|
CCL name is in SIXBIT in the left half of T1, the initial output
|
|
routine in the right half of T1. If the output routine is left
|
|
zero, the standard output routine will be used. A sample call is:
|
|
|
|
MOVSI T1,TP.PFX
|
|
$TYPES INI
|
|
|
|
|
|
|
|
|
|
6.4.6 JST
|
|
|
|
This is used to setup software tab stops in the output line.
|
|
On entry, T1 contains in the left half the negative number of tab
|
|
stops, in the right half the address of the table of tab stops
|
|
formatted "XWD width,column". The tab stop table must be in
|
|
ascending order. For a tab stop with a non-zero width, if a $BLK,
|
|
$COR, $DEC, $HEX, $NUM, $OCT, $RUN or $XWD substitution is used,
|
|
the number will be output right justified in the field, with
|
|
leading space fill.
|
|
TYPER MACROS Page 6-14
|
|
THE $TYPES MACRO
|
|
|
|
|
|
6.4.7 LOC
|
|
|
|
This routine is used to obtain the contents of a memory
|
|
location. It is assumed that the calling routine has issued a
|
|
"$VARIA" macro call prior to calling this function. On entry, T1
|
|
contains an address (indexing and indirect may be used), on return
|
|
T1 will contain the contents of that location.
|
|
|
|
|
|
|
|
6.4.8 OUT
|
|
|
|
Takes the address of an output routine in T1. This will
|
|
change the default output routine to be used. On return, T1
|
|
contains the address of the previous output routine. The output
|
|
routine specified will be given the character to be output in the
|
|
right half of T1. The left half of T1 will contain a -1 if the
|
|
character is part of a time stamp, -2 if it is part of a time stamp
|
|
label or zero if none of the above. The output routine may not
|
|
destroy any AC.
|
|
|
|
|
|
|
|
6.4.9 PRM
|
|
|
|
This call will clear a possible Control-O, then output a
|
|
prompt on the user console. On entry, T1 should contain (right
|
|
justified) ">" for a standard prompt, "!" for a running prompt, "/"
|
|
for a paused prompt or "#" for a continuation line on any of the
|
|
above. The prompt output is of the form "ccl> ", where "ccl" is
|
|
the program's CCL name as given in the $TYPES INI call, and the
|
|
character following is the character passed in T1 on entry. This
|
|
routine does an implied $TYPES DMP to insure that the prompt gets
|
|
output.
|
|
|
|
|
|
|
|
6.4.10 RTN
|
|
|
|
This call is used to identify user defined output routines to
|
|
be used with the "$UR1" thru "$UR7" substitution types for the
|
|
$TYPE call. T1 should contain in the left half the number of
|
|
routines given, and the address of the table of the routines in the
|
|
right half. The first routine in the table is assigned to $UR1,
|
|
the second to $UR2, etc. These output routines will be given the
|
|
argument it T1 on entry and may destroy T1, T2, T3 and T4. Note
|
|
that while in the context of these routines, the user AC's 1 thru
|
|
16 have been pushed on the stack, and AC 16 contains a frame
|
|
pointer.
|
|
TYPER MACROS Page 6-15
|
|
THE $TYPES MACRO
|
|
|
|
|
|
6.4.11 RST
|
|
|
|
This call will restore the status of TYPER as saved by $TYPES
|
|
SAV.
|
|
|
|
|
|
|
|
6.4.12 SAV
|
|
|
|
This call will save the status of the type routines so that a
|
|
$TYPE or $TYPES call will work if executed during a software
|
|
interrupt which occurs while executing inside TYPER. This can be
|
|
called to save the status only one level deep.
|
|
|
|
|
|
|
|
6.4.13 SYS
|
|
|
|
This call will change the system prefix (the program's CCL
|
|
name). On entry T1 should contain the new prefix in the left half
|
|
(in SIXBIT).
|
|
|
|
|
|
|
|
6.4.14 TIM
|
|
|
|
This will instruct TYPER to precede all output produced by
|
|
$TYPE calls with a time stamp. The time stamp is of the form
|
|
"hh:mm:ss msg<TAB>", which is the time of the day, and "msg" is an
|
|
optional SIXBIT label which is some kind of message abbreviation
|
|
(like the "USER" and "MONTR" labels in a batch log file). On entry
|
|
T1 contains a -1 if normal time stamps, zero to turn off time
|
|
stamps or -1 in the left half and the address of a location (in the
|
|
right half) which contains a SIXBIT label to be output following
|
|
the stamp. In all cases, on return T1 contains the previous time
|
|
stamp argument.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHAPTER 7
|
|
|
|
THE ERROR MESSAGE MACRO
|
|
|
|
|
|
|
|
$PRINT is a macro to produce assembly time error messages via
|
|
PRINTX pseudo-ops. The format and use of the macro is similar to that
|
|
of $TYPE except that there is no substitution performed, or alternate
|
|
return addresses or output routines (for nearly obvious reasons). The
|
|
format of the call is:
|
|
|
|
$PRINT ($HDR,$PFX,$TXT)
|
|
|
|
|
|
Where $HDR is one of F, I, O, W (which do roughly the same things
|
|
as in the $TYPE call), $PFX is a three character string to be appended
|
|
to the CCL name (TP.PFX) for a message prefix, and $TXT is the text to
|
|
be output. This macro generates no code, and is only of value at
|
|
assembly time.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHAPTER 8
|
|
|
|
PUTTING IT ALL TOGETHER
|
|
|
|
|
|
|
|
This chapter deals with how to use all of what has been explained
|
|
in the previous sections. Using these macros is very simple after the
|
|
programmer has gotten some experience with them, however they may look a
|
|
bit complicated at first. This will attempt to make some of the
|
|
interactions between the macros a little bit more clear.
|
|
|
|
The most probable reason anybody would want to use any of these
|
|
macros is to take an advantage of the $TYPE macro to type his/her
|
|
error/warning messages. A good rule of thumb to keep in mind is that
|
|
since this macro references symbols produced by most of the other
|
|
macros, it is generally a good idea to use all of them ($VRSN, $TITLE,
|
|
$RELOC, etc.). If the program uses SCAN, it is advisable to use the
|
|
TYPER.REL module, which contains the processors for the $TYPE, $TYPES
|
|
and $VARIA macros. In doing this, the program being created can search
|
|
STCUNV.UNV instead of STCMAC.UNV, which will save about 20 pages of core
|
|
at assembly time. If the program does not use scan and/or has
|
|
non-standard AC definitions, the $TYPER macro must be expanded within
|
|
the program, which implies searching STCMAC.UNV.
|
|
|
|
The following sections deal with the specifics of how to properly
|
|
setup and use everything.
|
|
|
|
|
|
NOTE
|
|
|
|
|
|
The STCMAC macros use a special macro
|
|
definition format defined in STC's local
|
|
version of MACRO-10. This is the macro
|
|
expansion format (SALL, LALL and XALL)
|
|
enclosed in square brackets preceding the
|
|
argument list. If this version of MACRO
|
|
is not being used to assemble the
|
|
programs, then a "/P" switch should be
|
|
given to macro during assembly to avoid
|
|
overflowing the assembler's push-down
|
|
stack.
|
|
|
|
|
|
PUTTING IT ALL TOGETHER Page 8-2
|
|
INITIALIZING EVERYTHING
|
|
|
|
|
|
8.1 INITIALIZING EVERYTHING
|
|
|
|
Before any of the heavy macros can be used, things should be
|
|
properly initialized. This consists of defining a version number,
|
|
generating the title using the $TITLE macro if we want pretty titles and
|
|
initializing the relocation macros. It is strongly recommended that the
|
|
program also search MACTEN and UUOSYM.
|
|
|
|
The first page of a program could look something like:
|
|
|
|
|
|
; Required Symbols
|
|
|
|
SEARCH STCUNV,MACTEN,UUOSYM,SCNMAC
|
|
|
|
; Assembly Directives:
|
|
|
|
SALL ;For neat listings
|
|
|
|
; Required Modules:
|
|
|
|
.REQUIRE REL:TYPER ;For $TYPE calls
|
|
.REQUEST REL:SCN7C ;For scanner
|
|
.REQUIRE REL:HELPER ;For /HELP
|
|
|
|
; Version number stuff
|
|
|
|
$VRSN EXE,1(7)-4 ;Version number of EXEUTL
|
|
|
|
$RELOC TWO ;Initialize the STCMAC routines
|
|
|
|
$ABS 136 ;Set to customer version word
|
|
EXE.VN ;Put in our version
|
|
EXE.VN ;Both places just for fun
|
|
|
|
$TITLE EXEUTL -- Utility for Tweaking EXE Files,EXE
|
|
$PASS EXEUTL,EXE
|
|
|
|
|
|
|
|
|
|
8.2 AC DEFINITIONS
|
|
|
|
Some of the macros (like $TYPER) require specific definitions for
|
|
some AC names. Generally, using SCAN compatible definitions (AC's 1
|
|
thru 4 named T1 thru T4, AC's 5 thru 10 named P1 thru P4 and P = 17)
|
|
will work. The main requirement is that the stack pointer is in
|
|
register 17 with the name "P" and that there are AC definitions for T1
|
|
thru T4 and P1 thru P4. Other combinations are possible, but mostly
|
|
untested. If the $TYPER macro encounters some kind of inconsistency in
|
|
the definitions while being expanded, it will issue an error message
|
|
(using the $PRINT macro) to warn the programmer.
|
|
PUTTING IT ALL TOGETHER Page 8-3
|
|
RUNTIME INITIALIZATION OF THE TYPER ROUTINES
|
|
|
|
|
|
8.3 RUNTIME INITIALIZATION OF THE TYPER ROUTINES
|
|
|
|
Before any $TYPE or $TYPES calls can be executed by the user
|
|
program, the $TYPES INI call should be issued. This will properly
|
|
initialize the TYPER routines so that everything will function normally.
|
|
If using SCAN, the best place to put this call is fairly soon after the
|
|
.ISCAN call.
|
|
|
|
An example of the initialization is:
|
|
|
|
MOVE T1,ISCNPT ;Get the ISCAN pointer
|
|
PUSHJ P,.ISCAN## ;Go initialize SCAN
|
|
MOVSI T1,TP.PFX ;Get system prefix
|
|
$TYPES INI ;Initialize TYPER
|
|
|
|
|
|
Note that the symbol "TP.PFX" is defined by the $VRSN macro.
|
|
|
|
After this initialization, the programmer is free to use any of the
|
|
$TYPE and $TYPES calls.
|
|
|
|
|
|
|
|
8.4 SOME HINTS ON USING STCMAC
|
|
|
|
There are some useful things associated with these macros, which
|
|
may not justify using STCMAC to begin with, but nice to have anyway.
|
|
|
|
|
|
|
|
8.4.1 $TYPES BUG
|
|
|
|
This macro is used where the programmer has detected a fatal
|
|
program bug, i.e. some section of code that (s)he thinks is impossible
|
|
or improbable to get to, or anything that (s)he does not know how to
|
|
handle. This macro can be used in the place of a HALT instruction or
|
|
something equally gross. This macro generates one line of inline code
|
|
(as does $TYPE), and will produce an error message which informs the
|
|
user that a program logic error has occurred and will give the absolute
|
|
and relative (to the module) PC of the error.
|
|
|
|
|
|
|
|
8.4.2 $VARIA, .LOCAT And .PARAM
|
|
|
|
These are useful for subroutine entry and parameter fetching. The
|
|
$VARIA macro is used on entry to the subroutine to stack AC's 1 thru 16,
|
|
and allocate any required local storage. On return, T1 will contain a
|
|
pointer to the argument list (assuming that the subroutine was called
|
|
with a PUSHJ P,@[addr ....). Any addresses passed as arguments
|
|
(including saved AC's) can be located using the .LOCAT routine. An
|
|
example of how this can be done is shown in appendix A.
|
|
PUTTING IT ALL TOGETHER Page 8-4
|
|
SOME HINTS ON USING STCMAC
|
|
|
|
|
|
8.4.3 The $PRINT Macro
|
|
|
|
This macro is useful for outputting assembly time error messages or
|
|
information.
|
|
|
|
|
|
|
|
8.4.4 $TYPES OUT
|
|
|
|
By changing the default output routine via this call, the
|
|
programmer can direct his output to virtually anything (s)he wants. It
|
|
can be used to output to a file, build a string in core, etc. Having
|
|
done so, the programmer then has full access to the $TYPE macro and all
|
|
associated routines to do formatted output to a file (or any other
|
|
destination (s)he has in mind). The $TYPE macro has a fairly high per
|
|
character overhead, but for limited applications, it can make life a lot
|
|
easier. Care should be taken that the program always keeps track of
|
|
where the output is going so that error messages don't end up in a user
|
|
file when they should have been printed on the console. Note that the
|
|
last argument to the $TYPE macro performs a similar function, but only
|
|
for the context of the call.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
APPENDIX A
|
|
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
The following is an example of a program which uses most of the
|
|
macros and their options. In no way should this be considered the only
|
|
way to use these things, just an example. This is not the entire
|
|
program, just selected portions.
|
|
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL D. Robert Banks, 5-Aug-78
|
|
|
|
; Required Symbols
|
|
|
|
SEARCH STCUNV,MACTEN,UUOSYM,SCNMAC,IBMPRM,QSRMAC
|
|
|
|
; Assembly Directives:
|
|
|
|
SALL ;For neat listings
|
|
|
|
.DIRECTIVE FLBLST ;Default listing
|
|
|
|
INTERN DOTPOP ;For IBMLBL
|
|
|
|
; Required Modules:
|
|
|
|
.REQUIRE DSK:IBMLBL ;For tape label calls
|
|
.REQUIRE REL:TYPER ;For $TYPE calls
|
|
.REQUEST REL:SCN7C ;For the scanner
|
|
.REQUIRE REL:HELPER ;For help messages
|
|
.REQUIRE REL:WLD7A ;For finding input specs
|
|
|
|
; Version Number Stuff:
|
|
|
|
$VRSN EBU,1(1)-4 ;Our version number
|
|
|
|
%EBUTIL==:EBU.VN
|
|
|
|
$RELOC TWO ;Initialize the STCMAC routines
|
|
|
|
$ABS 136 ;Set to customer version word
|
|
%EBUTIL ;Put in our version
|
|
%EBUTIL ;Both places just for fun
|
|
|
|
$TITLE EBUTIL -- General EBCDIC Tape Utility,EBU
|
|
$PASS EBUTIL,EBU
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Definitions -- AC's
|
|
|
|
;AC definitions:
|
|
|
|
;AC definitions are SCAN compatible
|
|
F==0 ;Flag AC
|
|
T1==1 ;Temp AC's
|
|
T2==2 ; ...
|
|
T3==3 ; ...
|
|
T4==4 ; ...
|
|
P1==5 ;Preserved AC's
|
|
P2==6 ; ...
|
|
P3==7 ; ...
|
|
P4==10 ; ...
|
|
N==7 ;Alternate definition
|
|
C==10 ; ...
|
|
M1==11 ;Marginal AC's (may or may not be saved)
|
|
M2==12 ; ...
|
|
M3==13 ; ...
|
|
M4==14 ; ...
|
|
LVL==15 ;Typeout level
|
|
FRM==16 ;Used by $VARIA and $FRAME
|
|
P==17 ;guess
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Definitions -- Macros
|
|
|
|
; Macro to perform a TAPOP. function
|
|
DEFINE $TAPOP ($FUN,$VAL),<
|
|
PUSHJ P,@[BYTE (12) $FUN (6) 0 (18) %TAPOP
|
|
$VAL]
|
|
> ;End $TAPOP
|
|
|
|
; Macro to save locs
|
|
|
|
DEFINE $SAV [SALL] ($LST),<
|
|
PUSHJ P,[
|
|
IRP $LST,< PUSH P,$LST ;;Save the loc
|
|
$SWPN -1(P),(P)> ;;Swap it with the return
|
|
POPJ P,]> ;;Return
|
|
|
|
; Macro to restore locs saved by $SAV
|
|
|
|
DEFINE $RST [SALL] ($LST),<
|
|
PUSHJ P,[
|
|
IRP $LST,< $SWPN -1(P),(P) ;;Swap with return
|
|
POP P,$LST> ;;Restore the loc
|
|
POPJ P,]>
|
|
|
|
; Macro to swap the contents of two memory locations
|
|
; * Note * this instruction cannot be SKIP'ed around
|
|
|
|
DEFINE $SWPN [SALL] ($ADR1,$ADR2),<
|
|
EXCH T1,$ADR1
|
|
EXCH T1,$ADR2
|
|
EXCH T1,$ADR1>
|
|
|
|
; Macro to swap the contents of n pairs of memory locations.
|
|
; * Note * This macro can be "SKIP'ed", but is very slow.
|
|
DEFINE $SWP [SALL] ($LST),<
|
|
PUSHJ P,@[%SWP ;;Call the swap routine
|
|
|
|
IRP $LST,<
|
|
$SWP1 $LST> ;;Insert the two locs
|
|
|
|
0]> ;;End of "DEFINE SWP"
|
|
|
|
DEFINE $SWP1 [SALL] ($LST),<$SWP2 ($LST)>
|
|
|
|
DEFINE $SWP2 [SALL] ($VAR1,$VAR2),<
|
|
<EXP 1B0+$VAR1> ;;First loc
|
|
<EXP $VAR2> ;;Second loc
|
|
> ;End of "DEFINE SWP1"
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
; Macro to perform a GETTAB function
|
|
|
|
DEFINE $GETAB [SALL] ($FNC,$LOC),<
|
|
PUSHJ P,@[%GETAB
|
|
$FNC
|
|
$LOC]
|
|
> ;End Define $GETAB
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Storage -- LOWsegment
|
|
|
|
$LOW ;Relocate to low segment
|
|
|
|
PDL: BLOCK PDLSIZ ;Push down stack
|
|
OFFSET: BLOCK 1 ;Starting offset
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Top Level -- Initialization
|
|
|
|
$HIGH ;Set to high segment
|
|
|
|
EBUTIL::TDZA T1,T1 ;No starting offset
|
|
MOVEI T1,1 ;CCL entry
|
|
MOVEM T1,OFFSET ;Save starting offset
|
|
RESET ;All I/O
|
|
STORE 17,0,17,0 ;Zero the AC's
|
|
MOVE P,[IOWD PDLSIZ,PDL] ;Setup the PDP
|
|
STORE T1,BZ$INI,EZ$INI,0 ;Zero the low segment
|
|
|
|
; Here with the basic info setup, now initialize the
|
|
; scanner and the typeout routines.
|
|
|
|
MOVE T1,ISCNPT ;Get the ISCAN pointer
|
|
PUSHJ P,.ISCAN## ;Go initialize SCAN
|
|
|
|
MOVE T1,[TP.PFX,,PRTCHR] ;Get the system prefix
|
|
$TYPES INI ;Initialize TYPER
|
|
MOVEI T1,AD.LOG ;Get default loglevel
|
|
MOVEM T1,LOGLVL ;Store
|
|
MOVEI T1,AD.MSG ;Get default msglvl
|
|
MOVEM T1,MSGLVL ;Store
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Top Level -- Main Loop
|
|
|
|
MAIN: PUSH P,.JBFF## ;Save free core pointer
|
|
PUSHJ P,CLRANS ;Go reset low segment
|
|
TXZ F,F$CLR ;Clear per command bits
|
|
|
|
MOVE T1,TSCNPT ;Get .TSCAN pointer
|
|
PUSHJ P,.TSCAN## ;Go call the scanner
|
|
MOVE T1,OSCNPT ;Get the .OSCAN pointer
|
|
PUSHJ P,.OSCAN## ; and read SWITCH.INI
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Tape to Disk Routines -- EBCOPY
|
|
|
|
; Here to read a tape.
|
|
|
|
EBCOPY: TXNE F,F.WRT ;Reading tape?
|
|
$TYPES BUG ;No, should never get here
|
|
MOVEI LVL,MSGNON ;Set global typeout
|
|
PUSHJ P,PSI%ON ;Go turn on the PSI system
|
|
SKIPA ;Can't, skip prompt
|
|
PUSHJ P,DOPRMT ;Give a prompt
|
|
|
|
; Fall into loop
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
; Open the disk channel
|
|
|
|
MOVEI T1,.IODMP ;Get dump mode I/O
|
|
IORM T1,OPNDSK+.OPMOD ;Store
|
|
SETZM OPNDSK+.OPBUF ;No buffers
|
|
MOVE T1,OPNDSK+.OPDEV ;Get the device name
|
|
OPEN DSK,OPNDSK ;Get the disk
|
|
$TYPE (F,EOO,$SIX,<Error Opening Output device |>,,ABORTF)
|
|
|
|
; Go create the file on disk
|
|
|
|
MOVEI T1,.RBTIM ;Get size of ENTER
|
|
MOVEM T1,DSKBLK+.RBCNT ;Store it
|
|
ENTER DSK,DSKBLK ;Go create the file
|
|
JRST [HRRZ T2,DSKBLK+.RBEXT ; Error, get code
|
|
MOVE T1,[-2,,[$OCT T2; and pointers
|
|
$ENT [OPNDSK,,DSKBLK]]]
|
|
$TYPE (F,ECF,$IND,<Enter Error | Creating
|
|
|>,,ABORTF)]
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Tape to Disk Routines -- EBCDON
|
|
|
|
; Here at the end of command
|
|
|
|
EBCDON: PUSHJ P,PSI%OF ;Turn off PSI
|
|
MOVEI LVL,MSGNON ;Reset the message level
|
|
$TYPE (N) ;Give a blank line
|
|
JRST .POPJ1## ;Give skip return
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Switch Processors -- TABLST
|
|
|
|
; Here from Scan on a /TABLE switch to list the translation
|
|
; table parameters.
|
|
|
|
; Calling sequence:
|
|
; PUSHJ P,TABLST
|
|
; never return here
|
|
; return here always
|
|
|
|
; uses AC's T1-T4 M1-M3
|
|
|
|
TABLST: MOVEI LVL,MSGNON ;Since (s)he asked ...
|
|
SKIPN TABNAM ;Is there one?
|
|
JRST TABL04 ;No, not yet
|
|
|
|
MOVE T1,[-4,,[$SIX TABNAM ; Table name
|
|
$PPN TABPPN ; PPn of modifier
|
|
$NAM [TABNM1] ; Name of modifier
|
|
$UNV TABDAT]] ; Date of creation
|
|
$TYPE (I,TBL,$IND,<Using table | from | (|), created |>)
|
|
|
|
SKIPE TABTXT ;Any text?
|
|
PUSHJ P,[MOVEI T1,TABTXT ; Yes, get pointer
|
|
$TYPE (I,TBD,$ASC,<Description:
|
|
|>,,P)]
|
|
|
|
SKIPN TABCHG ;Any changes?
|
|
JRST TABL03 ;No -- press on
|
|
|
|
$TYPE (N,,$NON,<Alterations to standard table:
|
|
EBCDIC was is (Was and is are Octal of ASCII)>)
|
|
MOVE T4,[-100,,TABCHG] ;Get AOBJN pointer
|
|
|
|
TABL01: SKIPN T2,(T4) ;Get an entry
|
|
JRST TABL02 ;Zero, all done
|
|
LDB M1,[POINT 8,T2,7] ;Get Hex number
|
|
LDB M2,[POINT 9,T2,16] ;Get was
|
|
LDB M3,[POINT 9,T2,25] ;Get is
|
|
MOVE T1,[-3,,[$HEX M1 ; EBCDIC
|
|
$OCT M2 ; was
|
|
$OCT M3]] ; is
|
|
$TYPE (N,,$IND,<| | |>)
|
|
AOBJN T4,TABL01 ;Loop for all
|
|
|
|
TABL02: $TYPE (N,,$NON,,,P1) ;Give blank line at end
|
|
|
|
TABL03: $TYPE (I,NCT,$NON,<No Changes to standard Table>,,P1)
|
|
|
|
TABL04: $TYPE (I,NTL,$NON,<No Table Loaded>,,P1)
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Runtime Command Processor -- Turn on PSI
|
|
|
|
; Here from top level to enable the Programmed Software
|
|
; Interrupt system to give interrupts when a line of input is
|
|
; typed by the user.
|
|
|
|
; Calling sequence:
|
|
; PUSHJ P,PSI%ON
|
|
; return here always
|
|
|
|
; Uses AC's T1-T4
|
|
|
|
PSI%ON: MOVEI LVL,MSGNON ;Set global typeout
|
|
TXZ F,F.PSI ;Don't assume anything
|
|
MOVEI T1,TTYSER ;Trap address
|
|
MOVEM T1,PSIVCT+.PSVNP ;Put it in the block
|
|
MOVX T1,PS.VTO ;Disable with DEBRK. UUO
|
|
MOVEM T1,PSIVCT+.PSVFL ;Store in flags
|
|
MOVEI T1,PSIVCT ;Get the addr
|
|
PIINI. T1, ;Initialize PSI
|
|
$TYPE (W,PUF,$NON,<Cannot enable interrupts for TTY>,,p)
|
|
MOVX T1,PS.FON!PS.FAC ;Turn on+add condition
|
|
HRRI T1,T2 ;Get address of args
|
|
MOVSI T2,'TTY' ;Get device name
|
|
MOVX T3,PS.RID ;Interrupt on input done
|
|
SETZ T4, ;No priority
|
|
PISYS. T1, ;Turn it on
|
|
$TYPE (N,PUF) ;Error
|
|
SETZ T1, ;Insure proper prompt
|
|
TXO F,F.PSI ;Success!!
|
|
JRST .POPJ1## ;Return
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Runtime Command Processor -- Turn PSI Off
|
|
|
|
; Here from the top level to disable PSI interrupts.
|
|
|
|
; Calling sequence:
|
|
; PUSHJ P,PSI%OF
|
|
; return here always
|
|
|
|
; Uses AC T1
|
|
|
|
PSI%OF: MOVEI LVL,MSGNON ;Set global typeout
|
|
TXZN F,F.PSI ;PSI on?
|
|
POPJ P, ;No, just return here
|
|
PUSH P,T1 ;Yes, save T1
|
|
MOVX T1,PS.FOF ;Get "turn off" bit
|
|
PISYS. T1, ;Do it
|
|
$TYPE (W,CRT,$NON,<Cannot remove TTY from interrupt system>)
|
|
POP P,T1 ;Restore T1
|
|
POPJ P, ;Return
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Runtime Command Processor -- TTY Interrupt
|
|
|
|
; Here on a "PSI" interrupt. Stacks all AC's and calls the
|
|
; runtime command processor.
|
|
|
|
; Called by a line of input ready on the user's console,
|
|
; returns with "DEBRK." UUO.
|
|
|
|
; Preserves all AC's except P
|
|
|
|
TTYSER: $SAV <T1,T2,T3,T4,P1,P2,P3,P4,M1,M2,M3,M4,LVL>
|
|
$TYPES SAV ;Save the state of TYPER
|
|
MOVEI T1,PRTCHR ;Get the name of routine
|
|
$TYPES OUT ;Set the output routine
|
|
PUSH P,T1 ;Save the old routine
|
|
SETO T1, ;Get some ones in T1
|
|
TXNE F,F.LOG ;Are we logging?
|
|
$TYPES TIM ;Yes, turn timestamps on
|
|
TXNE F,F.LOG ; ...
|
|
$TYPE (N,,$NON,,,,LOGOUT) ;Force a free <CR><LF>
|
|
PUSHJ P,RUNCOM ;Go do some commands
|
|
TXNE F,F.LOG ;Logging?
|
|
JRST [SETZ T1, ; Yes, turn
|
|
$TYPES TIM ; timestamps off
|
|
$TYPE (N,,$NON,,,,LOGOUT)
|
|
JRST .+1] ; And continue
|
|
POP P,T1 ;Restore the old routine
|
|
$TYPES OUT ;Reset the routine
|
|
$TYPES RST ;Restore TYPER
|
|
$RST <LVL,M4,M3,M2,M1,P4,P3,P2,P1,T4,T3,T2,T1>
|
|
DEBRK. ;Return from interrupt
|
|
JFCL ;Shouldn't get here
|
|
$TYPES BUG ;*** Error
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Subroutines -- Prompt Routine
|
|
|
|
; Routine to type a prompt on the user console. Called by
|
|
; Scan or runtime command processor. Prompts are of the form
|
|
; "EBUc ", where "c" is one of: ">" if top level prompt, "!" if
|
|
; running, "/" if stopped during a command, or "#" if
|
|
; continuation in any above case.
|
|
|
|
; Calling sequence:
|
|
; PUSHJ P,DOPRMT
|
|
; return here always
|
|
|
|
; Uses AC T1, all AC's preserved by $TYPES PRM
|
|
|
|
DOPRMT: MOVEI LVL,MSGNON ;Set global typeout
|
|
TXNE F,F.RUN ;Doing a command now?
|
|
JRST DOPR02 ;Yes -- other chars
|
|
TLZE T1,-1 ;Continuation?
|
|
|
|
DOPR01: SKIPA T1,["#"] ;Yes--inform the user
|
|
MOVEI T1,">" ;No--output a carrot
|
|
$TYPES PRM ;Go type an ASCII string
|
|
POPJ P, ;Return
|
|
|
|
DOPR02: TLZE T1,-1 ;Continuation?
|
|
JRST DOPR01 ;Yes -- go do it
|
|
TXNE F,F.STOP ;Stopped?
|
|
SKIPA T1,["/"] ;Yes -- say so
|
|
MOVEI T1,"!" ;No -- say running
|
|
$TYPES PRM ;Give the prompt
|
|
POPJ P, ; and return
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Subroutines -- PRTCHR - Put a Character
|
|
|
|
; Here from TYPER with char in T1, <LH> non-zero if time stamp
|
|
; character. Compare LVL to MSGLVL and LOGLVL to see if we
|
|
; really want to print this.
|
|
|
|
; Calling sequence:
|
|
; MOVE T1,character, <LH> non-zero if time-stamp
|
|
; PUSHJ P,PRTCHR
|
|
; return here always
|
|
|
|
; Destroys no AC's
|
|
|
|
PRTCHR: TLNN T1,-1 ;Time stamp chr?
|
|
CAMGE LVL,MSGLVL ;No -- MSGLVL low enough
|
|
SKIPA ;No -- skip OUTCHR
|
|
OUTCHR T1 ;Output the char
|
|
TXNE F,F.LOG ;Log file open?
|
|
CAMGE LVL,LOGLVL ;Yes -- check LOGLVL
|
|
POPJ P, ;No, just return
|
|
; PJRST LOGOUT ;Yes -- output
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Subroutines -- DOTPOP - Perform a TAPOP.
|
|
|
|
; Here to perform an internal $TAPOP macro call.
|
|
|
|
; Calling sequence:
|
|
; PUSHJ P,@[BYTE (12) function, (6) 0, (18) %TAPOP
|
|
; value]
|
|
; return here with returned value in T1, abort job if
|
|
; fatal error occurs in TAPOP.
|
|
|
|
; Uses AC T1, preserves AC T2,
|
|
; AC's T1-T4 are preserved by ERTPOP
|
|
|
|
%TAPOP: $VARIA (TAPCAL,TAPREG) ;Set some stuff up
|
|
LDB T2,[POINT 12,0(T1),11] ;Get the function code
|
|
MOVEM T2,TOPBLK+0 ;Store in the block
|
|
MOVE T1,1(T1) ;Get the value
|
|
TLNE T1,37 ;Skip if immediate
|
|
PUSHJ P,.LOCAT## ;Get effective addr
|
|
MOVEM T1,TOPBLK+2 ;Store in the block
|
|
PUSHJ P,DOTP01 ;Enter the routine
|
|
PJRST ERTPOP ;Error, issue message
|
|
MOVEM T1,T1-1+TAPREG ;Store result in T1
|
|
POPJ P, ;And return
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL Subroutines -- Handle $SWP Macro
|
|
|
|
; Routine to swap the contents of n pairs of memory
|
|
; locations without destroying anything
|
|
|
|
; Calling sequence:
|
|
|
|
; PUSHJ P,@[%SWP
|
|
; addr1 ;Swap with:
|
|
; addr2
|
|
; addr1
|
|
; addr2
|
|
; etc. ;Indefinite number
|
|
; 0] ;To terminate the list
|
|
; return here, nothing destroyed
|
|
|
|
; Preserves all AC's except LVL and P
|
|
|
|
%SWP: $VARIA (SWPCAL,SWPREG) ;Save the regs
|
|
MOVEI T3,1(T1) ;Point to the first addr
|
|
|
|
%SWP01: SKIPN T1,(T3) ;Get the first addr
|
|
POPJ p, ;Zero, done
|
|
PUSHJ P,.LOCAT## ;Get the effective addr
|
|
MOVE T4,T1 ;Put it in T4
|
|
MOVE T1,1(T3) ;Get the second addr
|
|
PUSHJ P,.LOCAT## ;Get the effective addr
|
|
EXCH T2,(T1) ;Get contents of second
|
|
EXCH T2,(T4) ;EXCH with first loc
|
|
EXCH T2,(T1) ;Finish off
|
|
ADDI T3,2 ;Point to next pair
|
|
JRST %SWP01 ;Loop for all pairs
|
|
A SAMPLE PROGRAM
|
|
|
|
|
|
|
|
SUBTTL End
|
|
|
|
|
|
$END EBUTIL
|
|
|
|
|
|
|
|
|
|
INDEX
|
|
|
|
|
|
|
|
|
|
$ABS . . . . . . . . . . . . . . . . 4-1
|
|
$ASC . . . . . . . . . . . . . . . . 6-3
|
|
$BIT . . . . . . . . . . . . . . . . 6-3, 6-11
|
|
$BLK . . . . . . . . . . . . . . . . 6-4, 6-13
|
|
$CHR . . . . . . . . . . . . . . . . 6-4
|
|
$COR . . . . . . . . . . . . . . . . 6-5, 6-13
|
|
$DAT . . . . . . . . . . . . . . . . 6-5
|
|
$DAY . . . . . . . . . . . . . . . . 6-5
|
|
$DEC . . . . . . . . . . . . . . . . 6-5, 6-13
|
|
$DTL . . . . . . . . . . . . . . . . 6-5
|
|
$END . . . . . . . . . . . . . . . . 4-1 to 4-2
|
|
$ENT . . . . . . . . . . . . . . . . 6-5 to 6-6
|
|
$FRAME . . . . . . . . . . . . . . . 5-2, 6-12
|
|
$FUL . . . . . . . . . . . . . . . . 6-6
|
|
$FUN . . . . . . . . . . . . . . . . 6-6
|
|
$HDR . . . . . . . . . . . . . . . . 6-2
|
|
$HEX . . . . . . . . . . . . . . . . 6-6, 6-13
|
|
$HIGH . . . . . . . . . . . . . . . 4-1 to 4-2
|
|
$IND . . . . . . . . . . . . . . . . 6-9
|
|
$LFT . . . . . . . . . . . . . . . . 6-6
|
|
$LIN . . . . . . . . . . . . . . . . 6-6
|
|
$LIT . . . . . . . . . . . . . . . . 4-1 to 4-2
|
|
$LKP . . . . . . . . . . . . . . . . 6-6
|
|
$LOCAT . . . . . . . . . . . . . . . 5-2, 6-12
|
|
$LOW . . . . . . . . . . . . . . . . 4-1 to 4-2
|
|
$NAM . . . . . . . . . . . . . . . . 6-6
|
|
$NON . . . . . . . . . . . . . . . . 6-3, 6-9
|
|
$NUM . . . . . . . . . . . . . . . . 6-1, 6-7, 6-13
|
|
$NUMBER . . . . . . . . . . . . . . 6-1, 6-7
|
|
$OCT . . . . . . . . . . . . . . . . 6-7, 6-13
|
|
$ORN . . . . . . . . . . . . . . . . 6-10
|
|
$PARAM . . . . . . . . . . . . . . . 5-2, 6-12
|
|
$PASS . . . . . . . . . . . . . . . 3-2
|
|
$PFX . . . . . . . . . . . . . . . . 6-7
|
|
$PPN . . . . . . . . . . . . . . . . 6-7, 6-9
|
|
$PRGEND . . . . . . . . . . . . . . 4-1 to 4-2
|
|
$PRINT . . . . . . . . . . . . . . . 7-1, 8-2, 8-4
|
|
$PRO . . . . . . . . . . . . . . . . 6-7
|
|
$PTH . . . . . . . . . . . . . . . . 6-7
|
|
$R50 . . . . . . . . . . . . . . . . 6-7
|
|
$RELOC . . . . . . . . . . . . . . . 4-1 to 4-2, 6-1, 8-1
|
|
$RET . . . . . . . . . . . . . . . . 6-10
|
|
$RUN . . . . . . . . . . . . . . . . 6-8, 6-13
|
|
$SCN . . . . . . . . . . . . . . . . 6-8
|
|
$SFX . . . . . . . . . . . . . . . . 6-2 to 6-3
|
|
$SIX . . . . . . . . . . . . . . . . 6-8
|
|
$SPC . . . . . . . . . . . . . . . . 6-8
|
|
$SUB . . . . . . . . . . . . . . . . 6-2 to 6-3, 6-8
|
|
$TIM . . . . . . . . . . . . . . . . 6-8
|
|
$TITLE . . . . . . . . . . . . . . . 3-1 to 3-2, 8-1 to 8-2
|
|
$TML . . . . . . . . . . . . . . . . 6-9
|
|
$TRL . . . . . . . . . . . . . . . . 6-2, 6-10
|
|
$TXT . . . . . . . . . . . . . . . . 6-2, 6-8, 6-10
|
|
$TYPE . . . . . . . . . . . . . . . 6-1 to 6-2, 6-9, 6-12 to 6-15,
|
|
7-1, 8-1, 8-3 to 8-4
|
|
$TYPER . . . . . . . . . . . . . . . 1-1, 5-2, 6-12, 8-1 to 8-2
|
|
$TYPES . . . . . . . . . . . . . . . 6-1, 6-8 to 6-10, 6-12 to 6-15,
|
|
8-1, 8-3 to 8-4
|
|
$TYPES BUG . . . . . . . . . . . . . 6-12, 8-3
|
|
$TYPES COL . . . . . . . . . . . . . 6-13
|
|
$TYPES DMP . . . . . . . . . . . . . 6-13 to 6-14
|
|
$TYPES ERR . . . . . . . . . . . . . 6-13
|
|
$TYPES INI . . . . . . . . . . . . . 6-13 to 6-14, 8-3
|
|
$TYPES JST . . . . . . . . . . . . . 6-8, 6-13
|
|
$TYPES LOC . . . . . . . . . . . . . 6-14
|
|
$TYPES OUT . . . . . . . . . . . . . 6-10, 6-14, 8-4
|
|
$TYPES PRM . . . . . . . . . . . . . 6-14
|
|
$TYPES RST . . . . . . . . . . . . . 6-15
|
|
$TYPES RTN . . . . . . . . . . . . . 6-9, 6-14
|
|
$TYPES SAV . . . . . . . . . . . . . 6-15
|
|
$TYPES SYS . . . . . . . . . . . . . 6-15
|
|
$TYPES TIM . . . . . . . . . . . . . 6-15
|
|
$UNV . . . . . . . . . . . . . . . . 6-9
|
|
$UR1 . . . . . . . . . . . . . . . . 6-9, 6-14
|
|
$UR2 . . . . . . . . . . . . . . . . 6-14
|
|
$UR7 . . . . . . . . . . . . . . . . 6-9, 6-14
|
|
$VAR . . . . . . . . . . . . . . . . 4-1, 4-3
|
|
$VARIA . . . . . . . . . . . . . . . 6-14, 8-1, 8-3
|
|
$VARIABLE . . . . . . . . . . . . . 5-1 to 5-2
|
|
$VER . . . . . . . . . . . . . . . . 6-9
|
|
$VRSN . . . . . . . . . . . . . . . 3-1, 6-1 to 6-2, 8-1, 8-3
|
|
$XWD . . . . . . . . . . . . . . . . 6-9, 6-13
|
|
|
|
.FMSGE . . . . . . . . . . . . . . . 6-10
|
|
.FRAME . . . . . . . . . . . . . . . 5-1 to 5-2
|
|
.ISCAN . . . . . . . . . . . . . . . 8-3
|
|
.JBERR . . . . . . . . . . . . . . . 6-13
|
|
.LOCAT . . . . . . . . . . . . . . . 5-2, 8-3
|
|
.PARAM . . . . . . . . . . . . . . . 5-2, 8-3
|
|
.TYPER . . . . . . . . . . . . . . . 6-9 to 6-10
|
|
.TYPES . . . . . . . . . . . . . . . 6-13
|
|
|
|
ADJSP . . . . . . . . . . . . . . . 5-2
|
|
|
|
Breakpoint . . . . . . . . . . . . . 5-2
|
|
BUG . . . . . . . . . . . . . . . . 6-12, 8-3
|
|
|
|
COL . . . . . . . . . . . . . . . . 6-13
|
|
|
|
DDT . . . . . . . . . . . . . . . . 5-2
|
|
DDT breakpoint . . . . . . . . . . . 5-2
|
|
Description . . . . . . . . . . . . 1-1
|
|
DMP . . . . . . . . . . . . . . . . 6-13 to 6-14
|
|
|
|
ERR . . . . . . . . . . . . . . . . 6-13
|
|
|
|
Frame . . . . . . . . . . . . . . . 5-1
|
|
Frame Pointer . . . . . . . . . . . 5-1
|
|
|
|
HALT . . . . . . . . . . . . . . . . 8-3
|
|
Hexadecimal . . . . . . . . . . . . 6-6
|
|
|
|
INI . . . . . . . . . . . . . . . . 6-13 to 6-14
|
|
|
|
JST . . . . . . . . . . . . . . . . 6-8, 6-13
|
|
|
|
LIST . . . . . . . . . . . . . . . . 6-12
|
|
LOC . . . . . . . . . . . . . . . . 6-14
|
|
Local Variables . . . . . . . . . . 5-1
|
|
|
|
MACTEN . . . . . . . . . . . . . . . 3-1, 8-2
|
|
|
|
NOLIST . . . . . . . . . . . . . . . 6-12
|
|
NOSCAN . . . . . . . . . . . . . . . 6-12
|
|
|
|
Octal. . . . . . . . . . . . . . . . 6-7
|
|
OPEN/LOOKUP/ENTER/RENAME Blocks . . 6-5
|
|
OUT . . . . . . . . . . . . . . . . 6-10, 6-14, 8-4
|
|
|
|
PRINTX . . . . . . . . . . . . . . . 7-1
|
|
PRM . . . . . . . . . . . . . . . . 6-14
|
|
|
|
RST . . . . . . . . . . . . . . . . 6-15
|
|
RTN . . . . . . . . . . . . . . . . 6-9, 6-14
|
|
|
|
SAV . . . . . . . . . . . . . . . . 6-15
|
|
SCAN . . . . . . . . . . . . . . . . 6-8, 6-10, 6-12, 8-1 to 8-3
|
|
STCMAC.UNV . . . . . . . . . . . . . 1-1, 6-12, 8-1
|
|
STCUNV.UNV . . . . . . . . . . . . . 1-1, 6-12, 8-1
|
|
SYS . . . . . . . . . . . . . . . . 6-15
|
|
|
|
TF.AND . . . . . . . . . . . . . . . 6-4
|
|
TF.BIT . . . . . . . . . . . . . . . 6-4, 6-11
|
|
TF.FLD . . . . . . . . . . . . . . . 6-4
|
|
TF.LIN . . . . . . . . . . . . . . . 6-4
|
|
TF.MSK . . . . . . . . . . . . . . . 6-4
|
|
TF.OR . . . . . . . . . . . . . . . 6-4
|
|
TF.SIX . . . . . . . . . . . . . . . 6-4
|
|
TF.USR . . . . . . . . . . . . . . . 6-4
|
|
TIM . . . . . . . . . . . . . . . . 6-15
|
|
TITLE . . . . . . . . . . . . . . . 3-1
|
|
TP.PFX . . . . . . . . . . . . . . . 3-1, 6-13, 7-1, 8-3
|
|
TYPER . . . . . . . . . . . . . . . 6-1, 6-13
|
|
TYPER.REL . . . . . . . . . . . . . 1-1, 5-2, 6-12, 8-1
|
|
|
|
UNIVERSAL . . . . . . . . . . . . . 3-1
|
|
Universal date/time . . . . . . . . 6-5, 6-9
|
|
USRLG. . . . . . . . . . . . . . . . 2-1
|
|
USRNM. . . . . . . . . . . . . . . . 2-1
|
|
UUOSYM. . . . . . . . . . . . . . . 8-2
|
|
|
|
Vertical bar . . . . . . . . . . . . 6-3
|
|
VRSN." . . . . . . . . . . . . . . . 3-1
|
|
|
|
Xxx.VN . . . . . . . . . . . . . . . 3-1
|
|
XxxEDT . . . . . . . . . . . . . . . 3-1
|
|
XxxMIN . . . . . . . . . . . . . . . 3-1
|
|
XxxVER . . . . . . . . . . . . . . . 3-1
|
|
XxxWHO . . . . . . . . . . . . . . . 3-1
|
|
|