1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-20 09:55:52 +00:00
PDP-10.its/doc/hur/ddtmem.188
Lars Brinkhoff 36c526191e DDT Reference Manual, AI memo 147A.
Courtesy of Eric Osman.
2020-12-03 15:35:31 +01:00

2114 lines
92 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.paperw 100
.psize 57
.line 72
.paper 57
.adjust
.double
.he DDT Reference Manual page
.ce
I. Introduction
.sp
.sp
A. DDT, standing for Dynamic Debugging Technique, was originally developed for the PDP
computers made by Digital Equipment Corporation. In ITS, DDT has been expanded to assume
the role of a monitor, interpreting commands for logging in and out, loading programs, sending messages
to other users, and many other monitor-type operations.
The top-level DDT loaded automatically is known as a "HACTRN".
This is easy to remember because
HACK means job, and "TRN" suggests "transfer"; HACTRN transfers between hacks.
Although this mnemonic exists for the word "HACTRN", it
is not the origin of it. The correct pronunciation is "hack-tran".
.sp
B. Main uses of DDT
1.) Creating, transferring between, and killing jobs
2.) Loading and running programs
3.) Controlling programs
.single
(a.) Memory location examination and modification
(b.) Controlled execution and error condition reports
.sp
.double
C. Two types of commands
1.) "Monitor" format commands
.single
(a.) always begin with a colon
(b.) end with space, altmode, or carriage return
(c.) usually have a synonomous "DDT" Format command
(d.) are allowed to consist of only a file name
.sp
.double
2.) "DDT" format commands
.single
(a.) a single character preceded by 0, 1, or 2 altmodes
(b.) may have a prefix set of arguments (before command)
(c.) may have an infix argument (between altmode and command)
(d.) may have suffix arguments (after itself)
.double
.pa
.ce
II. When DDT is loaded
.sp
.sp
A. user types control-Z on a free console
B. ITS loads a copy of DDT for the user, known as the user's HACTRN
C. DDT begins by executing some initial operations
1.) types ITS and DDT version numbers currently in use
2.) types how many users are on the system and other useful information (e.g. parity
error reports)
3.) types out the message of the day which is the contents of a file named SYSTEM MAIL
on the SYS device
4.) The information typed by DDT when it is loaded may be obtained again
at any time by use of the :SSTATU and :VERSIO commands.
D. DDT will be automatically reloaded if a fatal error is
encountered in its execution.
.pa
.ce
III. System Monitor commands
.sp
.sp
Some monitor commands never
take arguments. Commands of this type will be executed by DDT as soon
as you type the command followed by a space or a carriage return. Another
type of monitor command always takes an argument. This type must
be separated from its argument by a space or carriage return. After the argument or arguments have been typed, you signal to DDT that you are through typing
by typing a terminating carriage return, except that a space will
suffice for termination if the argument list for the particular command
is always exactly one word. The third type of monitor command
is one which may optionally take an argument or arguments. This type has the same input format as the last type when issued with arguments. However
when giving this type with no arguments to DDT you must end it with a
carriage return. If the command takes file
name information as arguments and you want to issue the command
with no arguments, you must type two carriage returns, one to separate the
command from its arguments and another to tell DDT
that no arguments will follow.
If DDT is given an unrecognizable command, it
tries to find a system program with the name given
as the command. If found, DDT loads and starts
it running. Actually if you type :COMMND and
:COMMND is not a recognized command, DDT
acts as though you typed COMMND^K. Therefore if
you want to load and start the system program
called TECO, you can do it by typing :TECO.
.PA
A. :? and :??
1.) :? causes DDT to type a list giving a brief
description of most ':' type commands.
2.) :?? causes DDT to list every monitor command, the
internal address within DDT that is the beginning of that command's internal code,
and usually a description of the command.
B. :LOGIN
1.) synonomous to the $U command
2.) takes one argument consisting of 1 to 6 sixbit characters
3.) DDT sets its UNAME to the given argument
4.) system attempts to log user in with given argument, and if successful:
.single
(a.) sets UNAME (user name) to the argument
(b.) sets SNAME (system name) to the argument
(c.) The UNAME may not be changed by the user except by logging out and logging in
again
(d.) The SNAME may be changed with various commands during the console session
(e.) types 'INIT.' if a file .DDT. (INIT) exists on the disk in "uname"'s
file directory
(f.) types contents of the file "uname" MAIL from the COM device if it exists
(g.) deletes file "uname" OMAIL from the COM device if it exists
(h.) renames "uname" MAIL to "uname" OMAIL on the COM device
(i.) executes contents of .DDT. (INIT) as DDT commands if it exists
.sp
.double
5.) will fail for any of the following reasons:
.single
(a.) someone else is already logged in with specified argument
(b.) :LOGIN command given at a console that is already logged in
(c.) illegal character in argument
.sp
.double
6.) examples of logging in: :LOGIN FOO or FOO$U, the first requiring a carriage-return or
space terminating it to have effect
7.) the :LOGIN command may be used on an already logged in console to
examine the core image of another user's job
.single
(a.) suppose you are logged in as anything except FOO
(b.) suppose someone else is logged in as FOO and owns a job named JOB1
(c.) you type FOO$U
(d.) although you are not logged in as FOO, by now typing JOB1$J, you will
be able to examine the core image of JOB1, because 'FOO$U' caused
DDT to set its internal UNAME to FOO.
.sp
.double
C. :LOGOUT
1.) synonomous to the $$U command
2.) causes system to attempt to log out the user
3.) takes no arguments
4.) the file "uname" OMAIL on the COM device is deleted if it exists
5.) entire procedure tree is expunged from system, thus logging out the user
6.) The console is now "free", and a message to that effect is typed thereon by the system
7.) examples of logging out: :LOGOUT followed by a space, or $$U
8.) The :LOGOUT command may also be given at a console which has a HACTRN associated with it, but is
not logged in
9.) It will fail if the running DDT is not top level, in which case the inferior DDT
responds with 'NOT TOP LEVEL, CAN'T LOG OUT ?'
.sp
D. :JOB
1.) synonomous to the $J command
2.) This command is the basic DDT job control command.
DDT will allow up to 8 jobs to be in existence simultaneously. Only one is
the current job at any one time. The :JOB command controls
which job is the current job, and creates new jobs. The current job may belong
to another user, in which case you may only examine it.
3.) When typed with no argument
.single
(a.) if no jobs have been created, no action is taken by DDT
(b.) if only one job exists, DDT types the name of that job followed by
$J, and it remains the current job
(c.) if more than one job exists, DDT causes a job other
than the current job to become the current job
(d.) in either of the last two condition, if the new present job is not really
a job, but only a read-only core image of one, DDT types '#'
(e.) created jobs are remembered by DDT such that
repetitive $J commands with no argument will cause
every job to become the current one once before repeating
.sp
.double
4.) with one argument of 1-6 SQUOZE characters
.single
(a.) if a job exists with the given argument, that job becomes the current job
(b.) if no job exists with the given argument, DDT tries to create
one with the given argument as its name. If DDT's "uname" has been changed
with the $U command and a job with the given argument is the name of a job
owned by the user logged in as that "uname", DDT types '#' after the '!' and the created job allows
location examination of that other user's job. If the "uname" of DDT
had been changed, but the given argument is not the name of any job
under the "uname", DDT changes its "uname" back to that of what you logged in as. Then DDT types "uname"$U!
and tries again as though the "uname" in DDT was never changed. newly created jobs
have 2000(8) words of zeroed core.
(c.) if a job with given argument as its name was disowned, it is reowned
.sp
.double
5.) examples of job selections: :JOB FOO or FOO$J with a space after the first example
6.) if a new job is requested, but too many jobs already exist,
the command has no effect, and DDT types TMJ? signifiing
8 jobs already exist.
7.) the job name HACTRN is special and will allow examination of one's own HACTRN
but modification of locations therein is not permitted
8.) the special job name SYS allows examination of any absolute location in the
system.
9.) the job name PDP6 or PDP10 allows access to all of the core in the PDP-6
.sp
E. :LISTJ
1.) synonomous to the $$V command
2.) causes DDT to type a list of all the jobs it knows about
3.) every element of the list is typed on one line and has the following
information in the given order:
.single
(a.) the JNAME of the job
(b.) status code for the job
.sp
(1.) "minus sign" for a job just created
(2.) 'R' for a running job
(3.) 'P' for a job which may be proceeded from some
interrupt such as control-Z or execution of a .VALUE
(4.) n'B' for a job that has been interrupted at the nth breakpoint
.sp
(c.) the job index which is a unique number assigned to the job by the system
at creation time
.sp
.double
4.) an asterisk is printed before the current job entry in the job list
5.) If any one of the jobs is only a read-only core image of another job, the
"uname" to whom it belongs will appear in the list before the "jname"
6.) example: The command :LISTJ could yield:
.single
T P 25
* J 1B 27
.sp
.double
.sp
F. :LOAD
1.) synonomous to the $L command
2.) used to load a binary file into the current job with its symbols
.single
(a.) first core is zeroed
(b.) the old symbols are erased
(c.) any breakpoints will remain
.sp
.double
3.) uses three arguments to determine what to load from where, however any of
the arguments may be ommitted while typing the command
.single
(a.) filename
.sp
(1.) one or two words separated by a space designating file to be loaded
(2.) If the current device is DSK, one of the file names
may be the '<' or '>' signs in which case it is not
interpreted literally, but rather it stands for a numerical name that is
the greatest or least in a group. For example, if the files FOO 21, FOO 16,
and FOO 34 exist in a directory, typing :LOAD FOO > would cause FOO 34
to be loaded, and :LOAD FOO < would mean load FOO 16.
(3.) If the two word file name is ommitted from the command, the same file
as in the last :LOAD or :DUMP is used. If no command has been given
to load or dump a file this terminal session yet, the assumed name is @ BIN.
If only one of the two file names is supplied, DDT replaces
the first of the two assumed names with the given one.
(4.) If more than two file names are supplied, the third is interpreted
as a device and the fourth is interpreted as a system name.
.sp
(b.) device code
.sp
(1.) designates from what device the file is to be loaded (DSK, PTR, UTn, etc.)
(2.) If the device code is ommitted, the same device as was used in the last
:LOAD or :DUMP is used, or DSK is used if none has been previously specified.
(3.) The device code is typed followed by a colon, unless the $L format
is used, in which case the device may also be typed as a prefix argument. For instance,
DSK$L, $L DSK:, and :LOAD DSK: all say to load a file from the disk.
A number may also precede the command meaning the microtape drive with that number,
for instance '3$L' means to load a file from microtape drive
#3.
.sp
(c.) system name, known as "sname"
.sp
(1.) This argument is initially set to the name the user logged in as. It
can be changed by many commands including :LOAD. When used by the
system to load a file from a directory device such as the disk, the
"sname" designates from who's directory the file is to be sought.
(2.) This argument must be followed immediately by a semi-colon.
(3.) Specifiing the "sname" in a :LOAD or $L command universally changes
the "sname". That is, subsequent commands for directory listings, file deletions,
file dumps and loads, etc. may easily be affecting another user's files than
your own, so caution must be exercised.
.sp
.double
4.) examples of :LOAD commands:
.single
(a.) :LOAD DSK:HUR;TICTAC BIN
(b.) SYS$L TS TECO
(c.) :LOAD TS TECO DSK:SYS; (this is the same as the last example)
(d.) $L CHESS >
(e.) DSK$L SYS;` HACTRN
.sp
.double
5.) after typing :LOAD followed by a space or $L, DDT will type a space automatically
to separate the command from any arguments that might follow
6.) typing a load command from an unlogged-in console will have no effect and produce
the response from DDT, 'LOGIN?'
7.) If DDT fails to find the file it is looking for, it will type:
'FILE NOT FOUND
nnnn, dev?'
where nnnn is an address in DDT within the load routine, and "dev" is the
device that DDT tried to load the file from
8.) If the :LOAD command is issued with no current job, DDT types out 'JOB? '
and no action is taken
9.) If the current job is only looking at another job's core image, DDT will type
'JOB NOT INFERIOR?', if a :LOAD command is given.
.sp
G. :SYMLOD or :SL
1.) take arguments like :LOAD
2.) causes only the symbols for the specified file to be loaded into the current job after
any previously existing symbols are deleted.
.sp
H. :DUMP and :PDUMP
1.) :DUMP is synonomous to the $Y command
2.) used to save a core image of the current job
3.) same format as :LOAD command
4.) saves symbols
5.) if a core image is :PDUMPed instead of :DUMPed, any
read-only pages will be recorded such that the next time the image
is loaded, the same pages will be read-only. Also, if more than one copy of a :PDUMPed file
is loaded, all read-only pages will be shared.
.sp
I. :KILL
1.) synonomous to the $^X. command.
2.) Takes no arguments
3.) Causes the current job to be destroyed, and all system references to it erased
4.) If another job still exists after DDT kills the current one, DDT will
execute a :JOB command with no argument to minimize the time in which there is no current job
5.) example:
.single
(a.) suppose you have two jobs A and B, with A the current job
(b.) now you type :KILL followed by a space, and DDT will type
B$J and B is now the current job, with job A having been killed
(c.) you could have also typed $^X. and produced the same result
.sp
.double
6.) typing the command :KILL or $^X. when no jobs exist causes the response
'JOB? ' and no action is taken
7.) The dot "." is required after '$^X' to lessen the chances of you
unintentionally issuing the "job destroy" command.
.sp
J. :LISTF
1.) synonomous to the control-F command
2.) used to obtain a file directory listing from the system
3.) Takes an argument list like :LOAD, but only the device and "sname" are used
4.) the control-F form of the command may have no argument before it, a microtape drive number, or
a device name. Drive number 0 implies the disk.
5.) either form of the command given without an argument will produce a directory of the current
device and system name which was previously set by another command or are DSK and
"uname" respectively, if they have never been changed.
6.) If the system does not recognize the device or system name supplied, DDT responds
with '? '
7.) if the device is a non-directory device such as PTR or LPT, it's directory is the string
'NON-DIRECTORY DEVICE'
8.) examples of directory requests: :LISTF DSK:, UT4^F, :LISTF PG;, 3^F
.sp
K. :PRINT
1.) causes DDT to list the contents of the specified file on the console
2.) Takes arguments in the same format as :LOAD. DDT
remembers the file last :PRINTed and prints that one if no argument is
supplied to the :PRINT. Initially, the :PRINT device is COM
3.) If the system fails to find the desired file, it types the same error message as it
would for a :LOAD command.
4.) examples of listing commands: :PRINT COM:TTY MEMO, :PRINT,
:PRINT RWG;HACK >
.sp
L. :DELETE
1.) synonomous to the control-O command
2.) used to delete files
3.) takes arguments like :LOAD, and the control-O form may be preceded by a device just as
$L may.
4.) examples of file deletion commands
.single
(a.) :DELETE PRIMES < RG;
(b.) UT3^O TEST 46
(c.) ^O
.sp
.double
5.) Typing ^O or :DELETE with no arguments will cause DDT to attempt
to delete the last file :PRINTed or :DELETEd, if no other intervening file commands
have been issued.
.sp
M. :LINK
1.) synonomous to the $^F command
2.) takes two arguments, each a file specification as with :LOAD
3.) causes DDT to link the first fle specified to the second
4.) If a first file name is linked to a second name, any future reference to read
the first name is interpreted by the system as a reference to the second.
5.) example of a link: Suppose you normally are logged in as FOO and frequently
reference a program on the SYS device called TS MUSCOM.
By typing :LINK FOO;U BIN SYS:TS MUSCOM, any future references for reading a
file on your directory called U BIN will actually be interpreted as a reference to SYS:TS MUSCOM.
.sp
N. :FLAP
1.) synonomous to the $$^F command
2.) used to rewind and unload a microtape from the system
3.) takes an argument designating which drive should be unloaded
.single
(a.) $$^F takes a prefix number
(b.) :FLAP takes a suffix argument
.sp
.double
4.) examples:
.single
(a.) :FLAP 3
(b.) 3$$^F
.sp
.double
O. :PRGM
1.) used to get the name of the selected relocatable subprogram
2.) takes no arguments
3.) causes DDT to type out the selected program name or '"GLOBAL"' if the program is not relocatable
or if a particular subprogram has not yet been selected
.sp
P. :LISTP
1.) used to get a list of relocatable subprograms that have been loaded into the current job
2.) every element of the list contains two elements itself:
.single
(a.) the program name which is 1-6 SIXBIT characters
(b.) an octal full-word number whose right half is the starting address
of the program and whose left half is the highest address in that program
.sp
.double
Q. :MAIL
1.) used to prefix a user's mail file (user MAIL) with a message. This file is the one typed
out on a user's console upon logging in.
2.) takes one argument, the "uname" to whom you want to mail the message, followed
by the message which must be terminated by a control-C.
3.) What is actually added to the mail file is the following in the given order:
.single
(a.) the sender's "uname"
(b.) the date
(c.) the time on a 24 hour basis
(d.) the message
.sp
.double
4.) example:
.single
(a.) suppose you are logged in as HUR
(b.) imagine today is June 15, 1971 and is half-past nine in the morning
(c.) suppose you type :MAIL PG HI, PHIL! followed by a control-C
(d.) the file PG MAIL on the COM device will now be prefixed with:
.sp
.double
HUR 06/15/71 09:30:44 HI, PHIL!
.sp
R. :SEND
1.) used to send a message directly to a console
2.) if the above example were executed with :SEND instead of :MAIL, what would have been
prefixed to the mail file is sent directly to the console on which the person logged in
with the given argument is. If that person is not logged in anywhere, then immediately following
the ':SEND PG ', DDT types ' (MAIL)' and the message follows the
same course as :MAIL would have given it
3.) example of sending a message:
.single
(a.) suppose you type ':SEND R ARE YOU WINNING?^C'
(b.) assume you are logged in as HUR
(c.) if someone is logged in as R and depending on the date and time, the
following could appear on R's console:
'MESSAGE FROM HUR HACTRN
10:13:05 ARE YOU WINNING?'
.sp
.double
S. :GAG
1.) used to control receipt of messages sent with :SEND
2.) takes a numerical argument which is bit decoded as follows with the
low order bit #1.
.single
(a.) #1 refers to other user's inferiors
(b.) #2 refers to other user's HACTRNs
(c.) #3 refers to your own inferiors
(d.) #4 refers to your own HACTRN
.sp
.double
3.) If a bit is a one, messages are allowed to come through from the
sender that bit corresponds to, and if it is a zero, messages are
barred from being received
4.) The initial mode for :GAG is 17
5.) examples of gagging:
.single
(a.) :GAG 17 will allow messages to be received from anywhere
(b.) :GAG 14 will not allow reception from anyone except yourself
.sp
.double
T. :DISOWN
1.) synonomous to the $$^K command
2.) used to disown the current job, letting it sit in core unattached to any HACTRN
3.) a disowned job may be reowned by the :JOB command
4.) DDT simulates the $J command with no arguments following the execution of a :DISOWN
5.) this command never takes any arguments because the job being disowned is always the
current one
.sp
U. :XFILE
1.) takes an argument list like :LOAD and executes the specified file as
DDT commands
2.) DDT stops reading the file when it encounters a
control-C or control-@ (ASCII values 3 and 0 respectively)
3.) example: :XFILE DDT DOTHIS
.sp
V. :BUG
1.) used to report bugs in ITS or any other system program
2.) takes no argument, only a space followed by the message, followed
by a control-C.
3.) :BUG ". . . message . . ."^C is synonomous to :MAIL SYS ". . . message . . ."^C
4.) example of a gripe: ':BUG IN TECO, ONE OUGHT TO
BE ABLE TO TYPE A QUESTION MARK AFTER TECO FAILS TO FIND A FILE.
TECO SHOULD THEN SAY WHAT FILE IT WAS LOOKING FOR AND COULDN'T FIND.^C'
.sp
W. :SLEEP
1.) causes DDT to sleep for awhile
2.) takes a numerical argument designating the number of thirtieths
of a second DDT should sleep
3.) During the time DDT is asleep, no commands except
control-G will be recognized. Control-G will cause DDT to
wake up prematurely.
.sp
X. :SSTATU
1.). causes DDT to type out the following information about the system:
.single
(a.) 'ITS BEING DEBUGGED!', if this be
the case.
(b.) 'ITS GOING DOWN IN ' followed by hours, minutes,
and seconds until system death, if ITS is set to go down.
(c.) Also, if ITS is set to go down, DDT prints on
the TTY the contents of the file called DOWN MAIL from the
SYS device, if it exists.
(d.) '# USERS = ' followed by the decimal number of
users on the system.
(e.) 'MEM ERRS' n'/HOUR' if there are any.
.sp
.double
2.) takes no arguments
.sp
Y. :ERR
1.) takes no arguments
2.) This command causes DDT to use $Q as an I/O channel .STATUS
word and type out the contents of the ERR device.
3.) Example: Suppose the current job just interrupted because
of an I/O channel error on channel 3.
To find why the I/O error occured, type the following:
'.IOS+3/'. DDT will type the .STATUS of channel 3.
Now type :ERR (followed by a space), and DDT will
open the :ERR device and probably tell you why the error occured.
Z. :VERSIO
1.) causes DDT to type version numbers of ITS and DDT currently running
2.) takes no arguments
3.) This command is useful to help associate particular bugs
in ITS and DDT with particular versions.
.sp
AA. :WALLP
1.) causes DDT to begin outputting
to another device as well as the teletype.
2.) takes an argument list in the same format as :LOAD
3.) The initial current data for the
:WALLP command is such that if the :WALLP is issued without
an argument list, it is synonomous to :WALLP LPT:WALL PAPER
4.) typing control-E closes the file onto which DDT is writing
because of a :WALLP command
5.) Remember that until you type control-E following a :WALLP to the line printer,
no other user may use the line printer
.sp
BB. :$ colon-altmode
1.) This command is used to enter comments
2.) DDT will ignore everything typed between the ':$'
and the next altmode.
3.) Example of a comment:
':$THIS IS A COMMENT$'
.pa
.ce
IV. Monitor commands doing DDT type functions
.sp
.sp
A. :V
1.) synonomous to the control-V command
2.) turns DDT typeout back on, if it was turned off with control-W
3.) takes no arguments
.sp
B. :VK
1.) same as :V except it also causes DDT to type a carriage return and linefeed
to indicate it is alive.
2.) The K stands for "kerchink"
.sp
C. :START or :GO
1.) may take one argument
2.) causes DDT to start the current job at the specified location
3.) with no argument, causes DDT to start at the assembled or dumped starting
address.
.sp
D. :GZP This is the same as :GO or :START except that the teletype
is not given back to the job, allowing subsequent DDT commands during job
execution. This allows for running several jobs "simultaneously".
.sp
E. :CONTIN
1.) takes no arguments
2.) synonomous to the '$P' command (without an argument)
3.) causes DDT to resume execution of the current job after an interrupt
(such as you having typed control-Z)
.sp
F. :PROCED
1.) synonomous to the control-P command
2.) same as :CONTIN except the teletype is not given back to the running job
.sp
G. :VP is the same as :V followed by :CONTIN
.sp
H. :SLIST
1.) takes no arguments
2.) causes DDT to list the symbols of
the current job.
.pa
.ce
V. DDT Expressions are composed of:
.sp
.sp
A. Numbers
1.) Any continuous string of characters including:
.single
(a.) digits
(b.) an optional decimal point implying base ten
(c.) An 'E' for standard exponent format input
.sp
.double
2.) are interpreted as integers unless a decimal point is followed by
digits, in which case the number is taken to be floating decimal
3.) Examples of DDT numbers:
.single
(a.) 3
(b.) 0.4
(c.) -7.9
(d.) 5.6E7
.sp
.double
B. Symbols
1.) a string of characters including only letters, digits, period, percent sign
, dollar sign, or an altmode.
.single
(a.) If a period is in the symbol, some other constituents must exist,
and at least one of them must be a non-digit
(b.) A symbol may not be all digits
.sp
.double
2.) must be defined in order to be used in an expression, one of the following:
.single
(a.) opcode such as JRST or CIRC
(b.) user-defined symbol such as FOO or LUP
(c.) DDT special symbol such as $Q
(d.) '`', which causes DDT to inclusively "or" a 20 into the left half of the expression
being typed in.
.sp
.double
3.) Examples of symbols:
.single
(a.) B7
(b.) PRICON
(c.) AB%
.sp
.double
C. Defined operators which are:
1.) one or two characters usually taking a prefix and
suffix argument
2.) not a command
3.) examples of some operators:
.single
(a.) * (integer multiply)
(b.) # (exclusive OR)
(c.) $! (floating divide)
.sp
.double
D. One of three kinds of character strings:
1.) ASCII string, which is followed by an altmode and preceded
by '$n"' where '$' is altmode and 'n' is a number and '"' is a double
quote. To enter control letters within the string that normally cause special
DDT functions, type an uparrow '^' followed by the character to be
"controlled". To enter an altmode or uparrow in the ASCII string, precede it
with a control-Q. Example of an ASCII string that could be typed within
a DDT expression: '$69"FOOEY$'
2.) SIXBIT string, which is entered in the same format as
an ASCII string, except that ''' is used in place of '"'. Example of a SIXBIT
string: '$2'E4$'
3.) SQUOZE string, which consists of 6 or less SQUOZE characters preceded by '$n&' and terminated
with the first non-SQUOZE character following the '$n&'. This non-SQUOZE character
is not taken as part of the SQUOZE input format, but acts as itself. To illustrate all of this,
suppose we want DDT to tell us the numerical value of the SQUOZE string 'BARF'. We type to DDT: '$0&BARF=' and DDT types out
11301666000. Note that although the '=' ended the SQUOZE string, it also
served the normal function of the '=' command. The 'n' in '$n&' is left-shifted 32 bits to the left and ANDed with 740000, and
becomes the contents of the 4 code bits in the SQUOZE word.
.pa
.ce
VI. "comma" and "space", the field separaters ',' ' '
.sp
.sp
A. Let a field denote any DDT expression not containing any spaces or commas,
and let F stand for any field. In DDT, a string of fields separated by
spaces or/and commas are interpreted in a similar way that
MIDAS interprets them. More specifically, a few standard typein formats
exist in DDT:
1.) F,,
.single
(a.) causes F to be shifted 18 bits to the left and added to whatever
comes after the ',,'. Any fields occuring after the ',,' will be "anded" with 777777 and
added into the expression.
(b.) most often used for half-word typein, such as the
following: 3,,4 evaluates to 3000004
(c.) other examples of F,, format:
.sp
.double
(1.) 3,,6,,1 evaluates to 3000007
(2.) 3,,6,1 is synonomous to the last example
2.) F F,
.single
(a.) causes the second field to be leftshifted 27 bits, "anded" with 17, and
added to the first field. Any subsequent fields in the
expression will be "anded" with 777777 and added on.
(b.) most often used in standard format instruction typein.
PUSHJ 3,4 evaluates to 260140000004
(c.) other examples:
.sp
.double
(1.) 4 2,7 evaluates to 100000013
(2.) 1 2,3,,4 5 evaluates to 100000015
3.) F,
.single
(a.) causes the field to be "anded" with 17 and put in the AC "field" of the word,
except when other fields follow in the same
expression in which case it is not a standard form
(b.) mainly used to enter a number in the AC "field" of a word, for
instance 3, evaluates to 140000000
.sp
.double
B. Any other formats are dealt with in a common way. That is, a string of fields
separated by spaces, and commas are evaluated in the same way. The first
field is taken as a 36 bit quantity and each of the rest are added in after having been "anded" with 777777, with carrying suppressed after the half-word point.
The most common unstandard format is
F F such as JRST 3 which evaluates to 254000000003. Other examples:
1.) 3,4 which equals 7
2.) 4,5,,6 which equals 17
3.) AOS,JRST which equals AOS
4.) 2,3 5,,1 which equals 13
.pa
.ce
VII. DDT Operators
.sp
.sp
.double
A. plus sign '+'
1.) infix operator
2.) takes two arguments
.single
(a.) any legal DDT expressions
(b.) treats its arguments as signed 36-bit integers
.sp
.double
3.) adds the two arguments
4.) ommitting the first argument implies 0.
.sp
B. minus sign '-'
1.) infix operator taking arguments like the plus sign
2.) subtracts second argument from the first
3.) ommitting the first argument causes that argument to be
0, allowing for the unary minus function
.sp
C. asterisk '*'
1.) infix operator like plus and minus
2.) multiplys its arguments as integers
3.) omitting the first argument implies 1.
.sp
D. exclamation point '!'
1.) divides its first signed integer argument by the second, returning an integer
quotient, and the remainder is discarded.
2.) Omitting the first argument implies 1.
.sp
E. a single altmode followed by either:plus, minus, asterisk, exclamation $+ $- $* $!
1.) The alt-mode in front of either of the above four operators causes the
operator to treat its left and right operands as floating point
numbers. They all return a floating point result
2.) examples:
.single
(a.) 1.0$!3.0 evaluates to 0.33333333
(b.) 1234.5679$!.45 evaluates to 555.55555
(c.) 1.34$+7.9 evaluates to 9.2400000
.sp
.double
3.) Omitting the first operand for '$+' and '$-' implies 0.
4.) Omitting the first operand for '$*' and '$!' implies 1.0.
This allows for using '$!' with only a right operand to get the reciprocal.
Example: '$!3.0' is 0.333333 ...
F. sharp sign '#'
1.) infix operator
2.) exclusive ors its two operands as 36 bit quantities (add without carry)
3.) example: 3#5 evaluates to 6
4.) Omitting the first operand implies -1, thus
complimenting the second argument.
.sp
G. ampersand '&'
1.) infix operator
2.) logically ands its two 36 bit arguments
3.) example: 3&5 evaluates to 1
4.) Omitting the first argument implies -1, causing the unary
'&' function to be a no-op; that is it does nothing.
.sp
H. parenthesis '(' and ')'
1.) take an infix expression as an argument
2.) The expression within the parenthesis is swapped. Then, after
DDT receives the entire expression, the value gotten from swapping what
was in the parenthesis is added on, unless an arithmetic
operator immediately preceded the open parenthesis in which case
instead of adding at the end, the specified operation is performed.
3.) mainly used to enter quantities in the index field of an instruction
4.) examples:
.single
(a.) 3(4) evaluates to 4000003
(b.) ((4)) evaluates to 4
(c.) JRST(5) evaluates to 254005000000
(d.) 3*((5)) evaluates to 17
.sp
.double
I. altmode backarrow '$_'
1.) infix operator
2.) left shift operator
3.) returns the value of its left argument logically shifted the number of places
specified by its right argument
4.) examples:
.single
(a.) 1$_2 evaluates to 4
(b.) 16$_-2 evaluates to 3
.sp
.double
5.) Omitting the first argument implies -1.
J. altmode altmode backarrow '$$_'
1.) infix operator
2.) floating scale operator
3.) treats its left argument as a decimal floating number and multiplies it by
2^N where N is the integer argument on the right
4.) examples:
.single
(a.) 6.0$$_3 evaluates to 48.0
(b.) 3.4$$_7 evaluates to 435.2
(c.) 435.2$$_-7 evaluates to 3.4
.sp
.double
5.) Omitting the first argument implies -1.0.
.pa
.ce
VIII. Priority of Operators
.sp
.sp
A. There is a priority order for operations in DDT. For
'*' to have a higher priority than '+' for example, means that '*' has a higher binding
power than '+'. That is, whether you type 3*4+2 or 2+3*4, DDT still does the multiplication
first and gets the answer 16. The priority order from highest to lowest is as follows:
1.) '#' and '&', '$_' and '$$_'
2.) '*', '$*', '!', and '$!'
3.) '+', '$+', '-', and '$-'
.sp
B. Changing the priority
1.) In DDT, the mathematical grouping symbols are '<' and '>'
2.) When surrounding an expression they cause the included expression to be evaluated
before DDT even looks at what is outside the angle brackets
3.) example: 3+4*5 evaluates to 27 but <3+4>*5 evaluates to 43
.sp
C. A string of operators of the same priority level in DDT causes them to be evaluated
from left to right. Example: 3&4#5 is synonomous to <3&4>#5
.pa
.ce
IX. Arguments for "DDT" Format commands
.sp
.sp
A. Prefix arguments are used from left to right, so excesses on the right will be ignored.
B. Infix arguments will be ignored if unnecessarily supplied. For example,
typing $$3O causes the permanent radix for type-out to be octal, and the 3 is ignored. Infix arguments more complex than
single numbers must be enclosed in angle brackets. For instance, to type
the 4 in $4R
by expressing 4 as 1+1+1+1, you must type $<1+1+1+1>R. More specifically said, an
altmode followed by an expression in angle brackets is interpreted by DDT to be an
altmode followed by the numerical value of the expression. For
example $<JRST> typed to DDT is like typing $254000000000.
C. altmode comma and altmode space '$,' '$ '
1.) '$,' and '$ ' separate arguments in multiple argument type-in.
2.) example: Typing 3$_2$,2$_1 causes DDT to evaluate the two expressions '3$_2' and '2$_1' as
two prefix arguments.
D. Most commands take expressional arguments. The
exception to this rule is commands that take
an undefined symbol as an argument (probably one to be defined).
.pa
.ce
X. DDT expression type-out
.sp
.sp
A. Modes in DDT for type-out of expressions
1.) symbolic mode
.single
(a.) absolute: DDT types out symbolic opcodes only eg. TLNE 3,@5(16)
(b.) relative: DDT types out symbols when convenient
eg. TLNE C,@POINTR(INDEX)
.sp
.double
2.) constant mode: DDT types out a single integer in the current radix with a
decimal point if the current radix is ten.
3.) floating point mode: DDT types out floating decimal numbers preceded by
a '#' if they are not normalized. Examples: #1.0 3.14E+26
4.) half-word: DDT types out two 18 bit quantities separated by ',,'. Relative
and absolute apply in this mode, too. examples: 100,,236 or GO,,VARCOM+5
5.) byte mode: DDT types out the expression in bytes of any desired size
6.) ASCII mode: DDT types $1"string$ where "string" is the ASCII representation
of the expression
7.) SIXBIT mode: DDT types $1'string$ where "string" is the SIXBIT representation
of the expression
8.) SQUOZE mode: DDT types $n&string$ where "string" is the SQUOZE for the expression
and "n" is the number represented by the 4 most significant bits in the word
.sp
B. Expression typeout commands
0.) '_' causes the last expression typed by you or DDT to be retyped symbolically
1.) '=' causes last expression typed by you or DDT to be typed out in the current radix
2.) '$=' causes the last expression typed by you or DDT to be retyped in floating point mode
3.) '$$=' takes up to three expressions as arguments and causes them to be typed out
in the mode they were typed in. Example: 3$,4$,5$$= produces:
.single
<3>
<4>
<5>
.sp
.double
4.) ''' (single quote) causes the last expression to be typed out in SIXBIT preceded by '$1''
and followed by a dollar sign.
5.) '"' (double quote) causes the last expression to be typed out in ASCII preceded by '$1"'
and followed by a dollar sign
6.) ';' causes the last expression typed by you or DDT to be typed out in semi-colon mode which
is initially floating point
7.) altmode semi-colon '$;' causes the last expression typed by you or DDT to be typed out in semi-colon mode and also
causes the current mode to be changed to semi-colon mode
8.) '$$;' causes the same thing as '$;' but the permanent mode is also
changed to semi-colon mode
.sp
C. The commands for setting the type-out mode are all one character followed
preceded by 1 or two altmodes:
1.) one altmode set the current (temporary) and semi-colon mode
2.) two altmodes before the character does the same thing as with one
altmode but also set the permanent mode and causes DDT to type a tab
3.) The meaningful mode command characters are S A R C H T F " ' &
.single
(a.) $S and $$S change the mode to symbolic
(b.) $A and $$A change it to absolute addressing mode
(c.) $R and $$R change it to relative addressing mode
(d.) $nR and $$nR change the radix to n
(e.) $C and $$C change the mode to constant typeout
(f.) $H and $$H change the mode to half-word
(g.) $nT and $$nT set the mode in which expressions are typed out in bytes
of size n
(h.) $F and $$F set typeout to floating point mode
(i.) $" and $$" set typeout to ASCII mode
(j.) $' and $$' set typeout to SIXBIT mode
(k.) $& and $$& set typeout to SQUOZE mode
.sp
.double
4.) Besides these standard mode setting commands, the following radix setting
commands are available:
.single
(a.) $D and $$D sets the radix to ten
(b.) $O and $$O sets the radix to eight
.pa
.ce
XI. Examining and Modifiing Memory with DDT
.sp
.sp
.double
A. $$Z command
1.) mainly used to zero core
2.) takes up to three prefix arguments:
.single
(a.) first argument tells lowest location to be zeroed
(b.) second tells highest location to be zeroed
(c.) third argument, if supplied, means set core to that expression rather than zero
(d.) only one argument means zero core from that argument up
(e.) no arguments means zero all core, except that pure and absolute pages are ignored
.sp
.double
3.) Example: LIST$,LIST+69.$,-1$$Z means set all memory between LIST and LIST+69. to -1, inclusive
4.) DDT types carriage return and linefeed upon completion of executing $$Z
.sp
B. The usual way to cause DDT to modify the contents of a location
is to first give DDT one of many commands telling it to open a register. Only one location
may be open at a time, but DDT remembers
the locations opened in a point ring buffer, which may hold up to 8 register
names. Locations in the point ring buffer may be conveniently referred to and reopened
by several DDT commands, without having to retype the name of the location.
The currently open location is the only
one available for modification.
.sp
C. Special symbols that frequently change their value in DDT:
1.) Point '.' has the value of the most recently opened register that DDT rmembers.
So .-3 represents the number 75 if the last location open was 100.
2.) altmode-Q '$Q' has the value of the last expression typed by DDT.
So, for example, if DDT just typed out the contents of location 100, $Q is equal to
that contents.
3.) '$nQ' where 'n' has octal value -1<n<11 stands for the nth previous
value of $Q. $0Q is the same as $Q, $1Q is the second to last thing DDT
typed, $2Q is the third to last, etc. $$nQ may also be typed, in which case
the value of the corresponding $nQ replaces the value of $Q.
4.) altmode-greaterthan '$>' preceded by an argument has the value of $Q with the
non-zero fields given in the argument replacing the corresponding fields in $Q. For instance if
$Q is CAIE 4,5 , then 6,$> is evaluated to CAIE 6,5. This is mainly used to change
only part of an instruction without retyping the instruction.
The fields involved are any of the following:
.single
(a.) opcode field, masked by 777000,,
(b.) accumulator field, masked by 17,
(c.) indirect bit, masked by 20,,
(d.) index field, masked by (17)
(e.) effective address field, masked by 0,,-1
.sp
.double
5.) altmode-point '$.' has the value of the program counter of the current job.
.sp
D. To close the currently open location means to make it no longer
available for modification. There are many DDT commands
for closing the currently open location. Every one closes the location in exactly
the same way, with the differences between the
commands being in what they do after
closing the current location. The contents of the current location opened
may be changed only by you typing one of the register closing commands
immediately preceded by an expression. In other words just giving
a closing command not preceded by an expression does not affect the contents of
the location being closed.
DDT remembers, in a . ring buffer, the last eight locations opened by
all register opening commands except linefeed and uparrow
which have a different effect on the . ring buffer as explained
are several register opening commands that easily cause locations
in the . ring buffer to be reopened.
.sp
E. Commands for memory examination and modification
1.) slash '/'
.single
(a.) DDT opens the register named by the right 18 bits of the last expression typed by
DDT or the user
(b.) types out the contents of the location being opened
(c.) Turns register contents typeout back on
if it was turned off by '$$!'.
.sp
.double
2.) altmode-slash '$/' is the same as slash except that the
left 18 bits are addressed instead of the right 18 bits.
3.) open bracket '[' is the same as slash but types out the contents of the register
as a constant regardless of the current type-out mode.
4.) altmode open-bracket '$[' is like '[' except the left 18 bits are used instead of
the right 18 bits.
5.) close bracket ']' is the same as slash except it causes the contents
to be typed out symbolically regardless of the current type-out mode.
6.) altmode close-bracket '$]' is like ']' except it uses the left 18 bits of the last expression typed for its address.
7.) carriage return
.single
(a.) DDT closes the currently open location, if one exists.
(b.) sets current type-out mode to the permenant mode
(c.) Turns contents typeout back
on if it was turned off by '$$!'.
.sp
.double
8.) altmode-carriage return closes any open register and opens the last one in . ring buffer
9.) linefeed
.single
(a.) DDT closes any currently open register
(b.) opens .+1
(c.) types out its contents
(d.) DDT remembers the last location opened by any command except linefeed or uparrow.
Every issuance of the linefeed or uparrow command causes the location
name being opened to replace the remembered address in the . ring
buffer.
.sp
.double
10.) altmode-linefeed closes any open register and opens the one after altmode-return
would have opened
11.) uparrow '^'
.single
(a.) DDT closes any currently open location
(b.) opens .-1
(c.) types out its contents
(d.) See the explanation of linefeed above for the
special . ring buffer effect of uparrow and linefeed.
.sp
.double
12.) altmode-uparrow '$^' closes any open register and opens the one
before altmode-return would have opened
13.) tab (control-I)
.single
(a.) DDT closes any currently open register
(b.) goes to the next line and does the same thing as a slash would have caused
.sp
.double
14.) altmode-tab '$^I' same as tab but uses left 18 bits of the expression
instead of right 18 bits
15.) altmode-altmode tab '$$^I'
.single
(a.) This command is the same as tab, except that DDT actually
does an effective address calculation of the currently open
register and opens the effective address. DDT will only look down twelve levels of indirect addressing.
(b.) Example: Suppose location 3 contains 3 and location 6 contains 7.
You type '14/' and DDT types '3(3)'. Now if you type '$$^I', DDT will
go to the next line and type '6/ 7'.
.double
.sp
16.) backslash '\'
.single
(a.) like tab except DDT doesn't change .
(b.) example: You type '3/'. DDT types out '55' which is the contents of register 3.
Now you type '\' and DDT opens register 55. You type linefeed and DDT
closes 55 and opens register 4 because . was still 3.
.sp
.double
17.) altmode backslash '$\' is like '\' except it uses the left 18 bits
of the last expression typed instead of the right 18 bits.
18.) altmode altmode exclamation point '$$!' is the same as '/', except
that DDT suppresses the typeout of the contents of the location
being opened. After you type '$$!', DDT will continue supppressing
the typeout of location contents until you issue either the '/' or carriage
return command.
.sp
F. '$N' command
1.) used to examine all locations in an area of core whose contents are NOT a certain
value (usually zero) in bits masked by the contents of $M.
2.) The mask may be set by foo$M where "foo" is the mask. Initially, $M's contents
is -1 (all bits turned on)
3.) takes up to three prefix arguments:
.single
(a.) One argument causes DDT to type out the names and contents of all locations in the
current job's core image whose contents are not equal to the
argument in bits masked by the contents of $M. Thus 0$N causes DDT to type all non-zero core, if $M is -1.
(b.) For two arguments, only locations greater than or equal to the first argument are
typed out, if their contents is not equal to the second argument in the masked bits.
(c.) With three arguments, DDT types all locations between the first
and second arguments inclusive, whose contents are not equal to the third
argument in the masked bits.
.sp
.double
4.) works for noncontinuous core images
5.) Example: BOARD$,BOARD+77$,0$N will cause
DDT to type all non-zero location names and their contents between BOARD and BOARD+77, providing the mask is all ones.
.sp
G. '$W' command
1.) used to examine all locations whose contents are equal to an argument in bits masked
by the contents of '$M'
2.) takes up to three arguments with the arguments playing
the same role as in the '$N' command except that the last argument is the word
to be searched for. DDT types all locations and their contents if the contents matches
the last argument in the bits masked by the contents of $M.
3.) Example: Typing 777000,,$M followed by JRST$W will cause a type-out of all
locations containing a JRST instruction of any type.
.sp
H. '$E' command
1.) used to print out all locations whose effective address is the given argument.
If more than one argument is supplied, the nonlast arguments are used the same
way as in the $W and $N commands.
2.) Example: 0$,17$,LOC$E will cause the type-out of any accumulator and its contents
whose effective address is LOC.
3.) When the '$E' command is being used to examine the
system, DDT actually does an '$w' with $M containing 0,,-1. This is because
it is pointless to do an address calculation with the system accumulators
which are constantly changing.
.sp
I. All of the commands '$N', '$W', or '$E' leave the locations listed in the . ring
buffer, and . is set to the last location listed. Typing any character
except ^B, ^E, ^V, ^W will stop a listing prematurely.
.pa
.ce
XII. Symbol Management in DDT
.sp
.sp
A. DDT uses two words per symbol in its symbol table. One word holds the numerical
value for the symbol. The other word holds the SQUOZE for the name of the symbol. The code
bits in the SQUOZE are used to tell DDT what type of a symbol
it is. The different types are as follows:
1.) full symbol; may be typed in an expression and DDT will type it out during symbolic type-out
2.) half-killed symbol; will never be seen in type-out, but may be typed in
3.) killed symbol; no longer available for type-out or type-in
4.) program name
.sp
B. How to define a symbol in DDT with a colon ':'
1.) Typing sym: defines the full symbol "sym" equal to .
2.) expr$,sym: defines the full symbol "sym" equal to the expression "expr"
3.) sym$: sets the relocatable subprogram name to "sym"
.sp
C. Killing and half-killing symbols with '$$K' and '$K'
1.) sym$K half-kills "sym"
2.) sym$$K completely kills "sym"
3.) $$K kills the entire symbol table
.sp
D. altmode altmode control-C '$$^C'
1.) DDT half-kills the last symbol it typed
2.) If another full symbol exists with the same value,
DDT types that symbol.
.sp
E. control-Y '^Y'
1.) Takes one prefix argument
2.) DDT treats the argument as an AOBJN pointer to the current job's core
and augments the current job's symbol table with the core pointed to. The core being
used should itself be a symbol table in the format described above.
3.) Example: Suppose location 100 contains the SQUOZE value for the symbol
DOG, and location 101 contains the value 3. Typing -2,,100^Y causes the symbol
DOG with and the value 3 to be added to DDT's symbol table for the current job.
F. altmode control-Y '$^Y'
1.) takes prefix argument like control-Y
2.) This is like control-Y except the entire symbol table is replaced with the one specified
in user core rather than just being augmented with it.
G. altmode altmode control-Y '$$^Y'
1.) takes one prefix argument which is a location address in user core
2.) Specified location should contain an AOBJN pointer pointing to some sort
of symbol table already existing in the current job's core
3.) DDT augments this table with its own symbol table, and modifies the
specified pointer in the user's core.
4.) Example: Suppose DDT's symbol table for the current job contain's three
symbols, ONE, TWO, and THREE with values 1, 2, and 3 respectively. Assume location
6 contain's the pointer 0,,100. By typing 6$$^Y, you will cause DDT to
put the SQUOZE values for the symbols ONE, TWO, and THREE in locations
100, 102, and 104 respectively, and put the values 1, 2, and 3 in locations 101, 103 and
105 respectively. Finally, location 6 will be modified to contain the pointer -6,,100
designating that the old list of 0 elements starting at location 100 is now a 6 element
list starting at the same place.
.pa
.ce
XIII. Program control with DDT
.sp
.sp
A. Starting Execution with altmode-G '$G'
1.) '$G' causes DDT to start the current job at the address specified by the contents of a
location named '$9B' (altmode-9-B).
2.) loc$G causes the job to be started at "loc"
3.) loc$$G is the same as loc$G except that "loc" is put in $9B, making "loc" the
standard starting address.
.sp
B. Breakpoints
1.) DDT may be made to interrupt programs at arbitrary locations, at which
point the user may conveniently resume execution, after using any DDT commands for
debugging his program.
2.) '$$B' removes all breakpoints from the current job
3.) 'n$B' causes a breakpoint to be put at the location specified by the right half of"n". If
the left half of "n" is non-zero, then whenever the breakpoint specified by
the right half of "n" is hit, DDT
types out the contents of the register specified by the left half of "n". For instance,
typing 200(3)$B causes location 200 to be a breakpoint. When 200 is hit, DDT will break in the
normal way, and type out the contents of register 3.
4.) When DDT breaks at location "n", it types out '$mB>>n ' where "m" designates which breakpoint
has been hit, and "n" is the PC. Only eight breakpoints may be set. Typing n$mB causes the "mth"
breakpoint to be set at location "n". To remove the "mth" breakpoint, type 0$mB. Location
0 may not be a breakpoint.
5.) To continue execution after a breakpoint (or many other types of interrupts), type $P
(altmode-P). n$P will continue "n"-1 times through that breakpoint before breaking.
$$P will cause DDT to automatically procede every time after that particular breakpoint.
Typing any character will stop it.
6.) For every breakpoint, there are four locations within DDT that are available
to the user, that are useful. They are named $nB (altmode-n-B) through $nB+3, where "n" is the
breakpoint number.
.single
(a.) $nB holds in the right half, the location this breakpoint corresponds to. The left
holds the location that should be automatically examined upon breaking.
(b.) $nB+1 may hold an instruction typed in by the user. This allows for conditional
breakpoints. If this instruction is non-zero, then when the user types m$P, DDT
will execute the instruction every time it hits the breakpoint. If the instruction
causes a skip before "m"-1 times through, DDT will break; otherwise, it will break
after "m"-1 passes by the breakpoint.
(c.) $nB+2 holds the counter "m", initialized by the user typing m$P.
(d.) $nB+3 holds the instruction that is in the user's program at the breakpoint.
.sp
.double
C. The MAR interrupt (memory address register)
1.) The computer may be set to interrupt automatically upon reading, writing, or fetching an
instruction, from any particular location.
2.) Typing A$nI causes a MAR interrupt when the condition specified by "n" is imposed on
location "A". Useful values of "n" are:
.single
(a.) 0: never break
(b.) 1: break on an instruction fetch from location "A"
(c.) 2: break before writing into location "A"
(d.) 3: break on any reference to location "A"
.sp
.double
3.) If "n" is ommitted, 3 is assumed unless "A" is also ommitted in which case the MAR interrupt is
removed if it existed.
4.) When the MAR interrupt happens, DDT types 'MAR.loc>>inst ' where "loc" is the PC and
"inst" is the instruction that caused the interrupt.
5.) The interrupt may be dismissed by $P or ^P.
.sp
D. control-P '^P'
1.) This and $P both continue a program after an interrupt but ^P doesn't give the TTY back
to the program.
2.) This allows for starting more than one program at once.
3.) If DDT receives an error interrupt
from an inferior, it types a bell to signal you that a job needs
attention.
.sp
E. control-X '^X'
1.) This command interrupts the current job if
it was proceeded with '^P'.
2.) DDT types out the PC and its contents
.sp
F. single instruction execution, altmode-X '$X'
1.) Typing inst$X causes DDT to execute the expression "inst"
2.) DDT types two carriage-return linefeed pairs if the instruction causes a skip, and one
pair if it doesn't
3.) The last instruction $Xed is left in location 34 of the current job. The symbol
$X (dollarsign-X) has the value 34. DDT also uses locations 35 and 36 for special purposes, so
it is not a good idea to use any of these 3 locations
for program memory.
.sp
G. The one-proceed feature, control-N '^N' and altmode control-N '$^N'
1.) control-N causes the current job to procede but with the one-proceed
interrupt enabled causing only one instruction to be executed.
2.) When the program is interrupted, DDT types 'loc>>inst' where "inst" is the next instruction
to be executed and "loc" is the PC
3.) "p"^N causes DDT to let the program execute "p" instructions before stopping it and printing the PC and its contents.
4.) altmode control-N '$^N' is the same as '^N', but the teletype
is not given back to the job.
.sp
H. The .VALUE instruction
1.) If the current job executes a .VALUE instruction,
it stops and interrupts DDT.
2.) If the effective address of the .VALUE is 0, DDT
types 'nnn>>.VALUE 0 ' where 'nnn' is the
location of the .VALUE.
3.) If the effective address of the .VALUE is non-zero,
and the contents of '$9B+1' (altmode-9-B plus 1) is negative, DDT interprets
the contents of the effective address of the .VALUE as an ASCII
command string. DDT reads and executes characters in the effective address
and consecutive locations until a zero character '^@' or a control-C is read.
4.) Example:
Suppose you wanted a program to kill itself:
Put the instruction .VALUE 200 in location 100.
Put the ASCII string ':KILL' in location 200 and
the ASCII code for "space" left-justified in location 201.
IF DDT executes location 100, the .VALUE
will cause DDT to execute the command :KILL.
5.) The contents of '$9B+1' is initially -1.
.pa
.ce
XIV. Job commands that have no "monitor" command equivalent
.sp
.sp
A. altmode altmode J '$$J'
1.) may take one SIXBIT argument
2.) name$$J causes DDT to try to rename the current job as "name"
3.) $$J with no argument causes DDT to type information about the
current job:
.single
(a.) name
(b.) index
(c.) status (running, interrupted, just loaded etc.)
.sp
.double
4.) Information printed by '$$J' with no argument i
the entry for the current job in the list that '$$V' would print.
.sp
B. altmode altmode L '$$L'
1.) similar to '$L'
2.) core is not zeroed prior to loading
3.) I/O channels are not closed either
4.) new symbols are appended to the already existing
symbol table.
5.) allows for loading one binary file "on top of" another
.sp
C. altmode Y '$Y'
1.) takes arguments like '$L' except the device name may not precede the '$Y', but
two expressions may be typed as prefix arguments
2.) causes the current job's core image to be saved on the specified file with symbols.
3.) With arguments preceding it:
.single
(a.) one argument causes only core from that location up to be saved
(b.) With two arguments core between ARG1 and ARG2 is saved inclusive
.sp
.double
4.) examples of $Y:
.single
(a.) MAIN$,MAIN+30$Y DUMP BIN UT1: will cause 31 locations to be
saved on microtape
(b.) $Y DSK: SAVE THIS will save the entire core image on the disk
.sp
.double
5.) If a file with the specified name
exists prior to the time the command is given, it is deleted before
the dumping is done. Thus, if FOO 1 and FOO 3 both exist,
typing :DUMP FOO > will cause a dump on FOO 2, and FOO 3
will be gone.
.sp
D. altmode-altmode-y '$$Y' is the same as '$Y' except
that the file being dumped on is not deleted prior to dumping. Hence
if the above example were executed with '$$Y', the image would be saved
on FOO 4, and nothing would be deleted.
.sp
E. control-S with a prefix argument
1.) '^S' preceded by a name sets the current job's "sname" to that name
2.) altmode control-S '$^S' preceded by a name does the same thing as '^S' but also
sets DDT's "sname" to that name.
By typing FOO$^S followed by DSK^F, you will causes DDT to type FOO's disk directory.
3.) altmode altmode control-S '$$^S' does the same thing as '$^S' but also
sets the master SNAME to the given argument. This makes
so you can constantly be referencing another user's directory as though it were your own. Every time a new job is created, DDT sets the SNAME of
that job to the master SNAME.
.sp
F. altmode altmode control-X point '$$^X.'
1.) causes all inferiors to the running DDT to be killed
2.) equivalent to repetitive issuances of $^X. (which kills the current job and does
an '$J' to get another job as the current one)
3.) The dot "." is required to lessen the likelihood
of you accidently issuing this command.
.sp
G. control-T and altmode control-T '^T' and '$^T'
1.) used to make an entry in the translation table
2.) $^T makes a universal entry whereas ^T just makes an entry in the
current job.
3.) takes two :LOAD type argument lists as suffix arguments
.single
(a.) first specified file is entered as a translation to second
(b.) An asterisk '*' as part of the first argument list matches any file or device
name.
(c.) An asterisk as part of the second argument list
stands for the same corresponding name in the first list.
(d.) Only device and file names should be given. System names are
never translated.
.sp
.double
4.) May be preceded by:
.single
(a.) 'A' meaning atomic entry, no more levels of translation will be done.
(b.) 'I' meaning input only, only input files will be translated
(c.) 'O' meaning output only, only output files will be translated
.sp
.double
5.) Ommitting the prefix letters implies 'IO'
6.) Example of an entry in the translation table: $^T SYS ATSIGN
DSK DDT BIN.
.sp
K. control-U and altmode control-U
1.) take arguments like control-T
2.) used to remove entries from the translation table
.sp
I. control-K '^K'
1.) NAME^K is equivalent to :NAME, assuming NAME is not a "monitor" command
2.) NAME^K causes the system program NAME to be loaded into a job called NAME,
and execution to be started
3.) More accurately, NAME^K is equivalent to typing the following:
.single
(a.) NAME$J name a new job (DDT types '!')
(b.) SYS$L TS NAME load the program
(c.) $$K kill the symbols
(d.) $G begin execution
.sp
.double
4.) DDT types '!' to signify creation of a new job. If '!' is not typed by DDT,
it means that a job named NAME already existed, and DDT reloads the
program into that job and makes it the current job.
5.) Examples:
.single
(a.) :TECO followed by a space
(b.) MIDAS^K
.sp
.double
6.) SYS^K, HACTRN^K, and PDP6^K are
synonomous to these names followd by '$J' (eg. SYS$J)
.sp
J. altmode control-K '$^K'
1.) If preceded by a name, does the same thing as '^K' except that symbols are
loaded also
2.) If the argument is ommitted, it causes symbols to be loaded into the current job
from the last file that was ^Ked.
.sp
K. altmode U point '$U.'
1.) takes no arguments
2.) causes all procedures to be flushed and a new top-level DDT to be loaded and
started
3.) you are still logged in.
4.) The period "." terminating the command
is required to lessen the possibility of you issuing this command accidently.
.sp
L. control-G
1.) causes DDT to quit whatever it is doing and go back to listening for commands
2.) Only should be used in an emergency (such as an infinite loop) because crucial variables
may be left uninitialized
3.) Not to be used to stop type-out. control-S should be used for that purpose.
4.) If typeout was turned off, it is turned on again.
.pa
.ce
XV. DDT output control commands
.sp
.sp
A. control-B '^B'
1.) turns on DDT lineprinter output
2.) synonomous to :WALLP LPT:
.sp
B. control-C '^C' causes DDT to type a carriage return and linefeed
.sp
C. control-E '^E' closes any file that :WALLP or ^B opened
.sp
D. control-L '^L' clears terminal screen
.sp
E. control-S '^S' with no argument
1.) empties the DDT typeout buffer
2.) This is the key to hit when DDT is longwinded
.sp
F. control-V '^V'
1.) turns typeout on if it was off
2.) This is the initial state
.sp
G. control-W '^W'
1.) turns off DDT typeout, but not :WALLP output
2.) error messages will still be typed, however
.sp
I. space ' '
If DDT knows it is outputting to
a display terminal, it will pause if there is more to type at one time than will fit on the screen,
and type '--MORE--'. At this point You may type a space and DDT will clear
the screen and continue the output. If you type any character
other than a space after '--MORE--', DDT will type 'FLUSHED' and no more output will be given.
.pa
.ce
XVI. Typing Error Correcting
.sp
.sp
A. control-D '^D'
1.) Optionally preceded by altmodes, control-D causes everything you typed since
to the last time DDT did to be deleted
2.) DDT types 'XXX?' to signify deletion.
.sp
B. rubout
1.) If a rubout is typed in the middle of a syllable, the last character typed is echoed and
deleted.
2.) If characters are rubbed out beyond the beginning of the current syllable,
whole syllables are echoed and deleted.
3.) "rubbing out" beyond the first character typed since DDT
last did causes DDT to type '?? ' and no action is taken.
.pa
.ce
XVII. Errors reported by DDT
.sp
.sp
A. '?U? '
1.) You have typed an undefined symbol
2.) The undefined symbol and the operator immediately after it
is ignored, the rest of the input string is remembered, and
you may type a defined symbol to take the place of the undefined one.
3.) example: You type 'A+B*C-' and DDT types '?U?' because 'C' is undefined.
If you now type 'D-E=', and D and E are defined, DDT sees 'A+B*D-E='
and acts accordingly.
.sp
B. 'OP? '
1.) You have typed in an undefined operator
2.) DDT ignores the undefined operator and waits
3.) example: You type '3.0$$-' and DDT types 'OP? ' because '$$-' is not
a legal operator. Then you type '$-1.4$=' and DDT sees '3.0$-1.4$=' and responds with '1.6'.
.sp
C. 'NOS? '
1.) You have typed in two expressions not separated by an operator
2.) Within an entire string, every time DDT sees this situation (looking from
left to right), it types 'NOS? ' and replaces the second value
with a plus sign
3.) example: You type '<1><2><3><4>=' and DDT responds with 'NOS? NOS? 4'.
DDT actually evaluated the string '1+3+='. The '<2>' and '<4>' were
replaced with '+' signs.
.sp
D. '?' or '??'
1.) something is wrong
2.) DDT ignores what it didn't like
.sp
E. 'PUR? '
1.) You tried to modify a location within a pure page of memory
2.) DDT ignores the attempt.
.sp
F. 'DSN? ' DDT failed at disowning the current job
.sp
G. 'CFT? ' DDT couldn't flush the teletype (give it back to the current job)
.sp
H. 'BIN? '
1.) DDT or ITS did not like the format of the file
you requested to be loaded.
2.) The most common cause is you telling DDT to load a source file
instead of its binary code.
.sp
I. 'CKS? ' checksum error during loading
.sp
J. 'IOC? '
1.) I/O channel error interrupted DDT
2.) This message is preceded by the error code obtained by .STATUS, the channel
number, and the PC
.sp
K. 'INT? '
1.) DDT received some random interrupt
2.) message is preceded by interrupt word and the PC
.sp
L. 'COR? '
1.) not enough core (probably during a load)
2.) very rare message to get now that swapping exists
.sp
M. 'NML? ' "not my loser"; DDT received an unrecognized interrupt from an
inferior
.sp
N. 'UNF? ' DDT couldn't flap a microtape
.sp
O. '??? ' DDT couldn't do a .GETSYS for SYS$J
.sp
P. 'TMJ? ' You tried FOO$J after 8 jobs already existed
.sp
Q. 'LOGIN? ' You are not logged in and you should be
.sp
R. 'JOB? ' There is no current job
.sp
S. 'BRF? ' "barf" .GETSYS for initial symbols failed
.sp
T. 'NO CORE FOR SYMBOLS'
1.) program has been successfully loaded, but there wasn't enough free core for
the symbols
2.) This is a rare message now that we have swapping
.sp
U. 'JOB ALREADY EXISTS' You typed FOO$$J and a job already exists with the name FOO.
.sp
V. 'ARG? ' You gave ridiculous arguments to a command.
.sp
W. 'JOB NOT INFERIOR? ' You tried to do something to the current
job that is impossible because the current job is not really an inferior
procedure to DDT.
.pa
XVIII. Error messages typed because DDT received an interrupt from inferior
.sp
.sp
A. Each of these error messages is followed by 'PC>>inst'
.sp
B. 'ILOPR.' illegal instruction
.sp
C. 'MPV.' memory protection violation
.sp
D. 'IOC.' I/O channel error. Probably an .IOT was given before the channel was .OPENed.
.sp
E. 'DPY.' Display list memory protection violation
.sp
F. 'BADPI.' bad location 42
.sp
G. 'MAR.' MAR interrupt
.sp
H. 'ILUAD.' memory protection violation on reference to an inferior
.pa
.ce
XIX. Some more-advanced DDT features
.sp
.sp
A. DDT Patch feature
1.) Often while debugging some PDP-10 Assembly code, you want to insert some
instructions "between" two others. Generally, the way this is
done is the following:
.single
(a.) The instruction after which the insert is desired is replaced
with a transfer instruction to the beginning of a patch area.
(b.) The replaced instruction is put at the beginning of the patch area.
(c.) Then the insert is put following that first instruction.
(d.) And finally a transfer back to the instruction after where the insert
should be.
.sp
.double
2.) control-backslash '^\', :PATCH, and :PAT cause DDT to start a patch.
A location must be open when one of these commands is issued or else DDT types '?? ' and
the command is ignored. Assume a location named HERE is open and you type ^\. DDT does the following:
If a location named PAT or PATCH exists, DDT opens it, types out its contents (probably 0)
and simulates you typing into it the contents of HERE. DDT waits at the end of this
instruction as though you had just typed it but hadn't closed the register yet. If
no symbol PAT or PATCH exists in the symbol for the current job, DDT uses location
50 in the current job's core image, and names it PATCH.
3.) Assuming you have started a patch as described, you now repeatedly type linefeed followed by
an instruction until you have completed the desired insert.
4.) Now, by typing control-closed bracket '^}' or :ENDPAT, DDT will end the patch in the
following way:
.single
(a.) First, the location after the last one in which you put one of the inserted instructions
is opened and the instruction 'JUMPA 1,HERE+1' is deposited.
(b.) 'JUMPA 1,HERE+2' is put in the location after the JUMPA 1,HERE+1'. This
allows for "skip" returns.
(c.) The contents of HERE is changed to JUMPA 3,PATCH (or PAT)
.sp
.double
5.) Example of making a patch:
.single
(a.) You type 'HOP+2/' and DDT types 'PUSHJ P,GETNIT '
(b.) You type '^\' and DDT types 'PAT/ 0 PUSHJ P,GETNIT'
(c.) Now you type in the patch
(d.) Let's say you entered the last instruction at 'PAT+2' and have just typed a
linefeed. DDT types 'PAT+3/ 0 '
(e.) Now you type '^}', and DDT types the following:
.sp
'PAT+3/ 0 JUMPA 1,HOP+3
PAT+4/ 0 JUMPA 1,HOP+4
HOP+2/ PUSHJ P,GETNIT JUMPA 3,PAT
'
.sp
and the patch is done.
(f.) DDT remembers the last location used as a patch and defines or redefines
the symbol PATCH to the location
after this one. So sometime after this example, if
you again typed :PATCH, DDT would start the new patch at 'PAT+5'.
.sp
.double
6.) altmode control-close bracket '$^]' finishes a
patch like '^]' except that immediately preceding the two JUMPAs,
DDT puts the contents of the location you patched from.
7.) control-uparrow '^^' or :UNPAT are used to remove a patch.
Specifically what happens is DDT replaces the contents of the currently open
location with the contents of the location addressed by the right half of
the currently open location. For insatnce, suppose location BUG contains
JRST PAT, and PAT contains BLT 1,3644. If location BUG is open
and you type '^^', DDT types BLT 1,3644, and that becomes the new contents
of BUG.
.sp
B. Multiple-word ASCII and SIXBIT input
1.) '$$n"' and '$$n'' (two altmodes followed by a number, followed by a double
or single quote) cause DDT to enter ASCII and SIXBIT input respectively.
2.) ASCII input ends with an altmode, SIXBIT with any non-SIXBIT character.
3.) These two modes are the same as the related commands with
only a single altmode except that when you type more characters than can fit in a word
(5 or 6 depending on the mode) before termination, DDT does the following:
.single
(a.) types a '$'
(b.) closes the currently opened register, depositing the ASCII or SIXBIT for
the characters typed so far
(c.) opens the next register, and types '$$1' followed by the appropriate quote followed by the last character you typed on the line before,
which is really being deposited as the first character of this new line.
(d.) waits for more characters or/and terminator character
.sp
.double
4.) In ASCII mode, to enter control characters that might normally cause
undesireable action by DDT, type an uparrow '^' followed by the character
to be "controlled".
5.) To enter an altmode or uparrow in ASCII input mode, precede it
with a control-Q (NOT uparrow followed by a Q)
6.) example of SIXBIT input:
Suppose you have opened location 200 and you type '$$1'THIS IS AN EXAMPLE$'.
What you would see on your console would be the following:
.single
$$1'THIS IS$
201/ 0 $$1'S AN EX$
202/ 0 $$1'XAMPLE.$
203/ 0 $$1'.$
.double
.pa
.ce
XX. Special DDT locations
.sp
.sp
Many of the system variables associated
with the current job may be examined and modified with DDT. To examine
or modify a variable, all you have to do is open a special location with DDT
and look at, and maybe modify,
its contents. The following is a list of special locations and a description of the significance of their
contents. Each location name begins with a period '.' , and the period will be
assumed prefixing each symbol in the list.
.sp
A. UPC contains the program counter (PC) for the current job.
B. VAL holds the effective adddress of the last .VALUE instruction
executed by the current job.
C. TTY holds the .STATUS bits for the console TTY attached to you.
D. FLS holds the "flush instruction" for the current job.
If this instruction is 0 or causes a skip when executed and the USTP for the job is 0, the procedure
is runnable.
E. UNAME holds the name you logged in as stored in SIXBIT.
F. JNAME holds the name of the current job in SIXBIT.
G. MASK holds the first of two interrupt words for the current job.
H. USTP contains the current job's stop word. A zero in this
location implies the job is running or hung on its flush instruction.
I. PIRQC holds the first interrupt request word for the current job.
J. INTB holds the bits used to interrupt this procedure's
immediate superior, probably HACTRN.
K. MEMT holds the lowest address that is "out of bounds"
for this job.
L. SV40 holds the last system UUO executed.
M. IPIRQ holds the same as PIRQC, but on deposit the information is
IORed into it.
N. APIRQ is the same as IPIRQ but with the bits ANCAMed in.
O. SNAM holds the current system name.
P. PICLR holds -1 if interrupts are enabled.
Q. MARA holds the control bits for the MAR interrupt.
R. MARPC contains the PC at the last MAR interrupt.
S. UUOH holds the address one after the one where
the last UUO trapping to the system was executed.
T. UIND holds the index assigned to this job by the system.
U. RUNT holds the runtime for this job in 4.069 microsecond units.
V. MSK2 holds the second interrupt word.
W. IFPIR contains the second interrupt request word.
X. APRC holds the disowned job and processor CONO status.
Y. SV60 contains the saved absolute location 60.
Z. IIFPI and AIFPI are the second interrupt request
word and on deposit are IORed and ANDCAMed into, repectively.
AA. IMASK and AMASK are the interrupt first mask
word and on deposit are IORed and ANDCAMed into, respectively.
BB. IMSK2 and AMSK2 are the second interrupt mask and on deposit are IORed and ANDCAMed into, respectively.
CC. JPC holds the PC at the last jump
type of instruction.
DD. OPC contains the old PC stored after certain interrupts.
EE. RTMR holds the runtime interrupt, or
-1 if the interrupt is not enabled.
FF. 60H holds the last instruction executed in the current job
that trapped to location 60.
GG. IOC+n holds the I/O channel word and on deposit for channel 'n'.
HH. IOS+n holds the .STATUS bits for I/O channel 'n'.
II. IOP+n holds the contents of the IOPDL which has four pairs of
alternating channel and status words.
.pa
.ce
XXI. Cross Reference Index of DDT Format Commands
.sp
.sp
A. This index lists every DDT format command, a brief description of
its purpose, and where in this manual a detailed explanation of the command may
be found. An uparrow preceding a command character means that letter is
a control letter, ie '^A' means the character whose ASCII value
is 001. When no description or cross reference follows a character, the
character is not a DDT recognized command.
.sp
B. Ccommand characters taking no preceding altmodes:
^@
^A
^B :WALLP to lineprinter. XV.A.
^C causes DDT to type a carriagereturn and linefeed. XV.B.
^D causes type-in deletion. XVI.A.
^E closes :WALLP output. XV.C.
^F gives file directory listings. III.J.
^G emergency full-quit, only in matters of life or death. XIV.L.
^H
^I closes the currently open location and opens address location. XI.E.13.
^J or linefeed closes the current location and opens the next one. XI.E.9
^K NAME^K loads the system program NAME and starts it. XIV.I.
^L clears screens. XV.D.
^M or carriagereturn closes the currently open location. XI.E.7
^N one instruction proceed. XIII.G.
^O deletes files. III.L.
^P continue execution, but leave TTY with DDT. XIII.D.
^Q same as '^' (uparrow)
^R
^S stops typeout. XV.E., FOO^S sets the SNAME of the current job to FOO XIV.E.
^T enters information in the current job's translation table. XIV.G.
^U removes information from the current job's translation table. XIV.K.
^V turns on DDT typeout. XV.F.
^W turns off DDT typeout. XV.G.
^X interrupts the current job, if it was ^Ped. XIII.E.
^Y. used to augment DDT's symbol table with one from the
current job's core image. XII.E.
^Z Has no affect on DDT, but interrupts an inferior that has the teletype,
and returns the teletype to DDT.
$ (altmode) used for many DDT command format commands.
^\ starts a patch. XIX.A.2.
^] ends a patch. XIX.A.4.
^^ unpatches. XIX.A.7.
^_
<space> field separater. VI., continues output after DDT types '--MORE--'. XV.I.
! integer divide. VII.D.
" causes ASCII typeout. X.B.5.
# exclusive Or. VII.F.
$ (dollar sign) symbol constituent. V.B.
% symbol constituent. V.B.
& logical AND. VII.G.
' causes SIXBIT typeout. X.B.4.
( and ) swaps left and right half of infix argument. VII.H.
* integer multiply. VII.C.
+ integer add. VII.A.
, field separater. VI.
- integer subtraction. VII.B.
. used in numbers. V.A.1.B., symbol constituent. V.B.,
current location value. XI.C.1.
/ causes DDT to open location address specified by right 18 bits
of last word typed. XI.E.1.
<digits> used to form numbers. V.A.
: used to define symbols. XII.B.
; causes "semi-colon" mode typeout, initially floating point. X.B.6.
< and > mathematical grouping symbols. VIII>><<.B.
= causes numerical type-out. X.B.1.
?
` indirect bit, IORed into expression. V.B.2.d.
<letters> symbol constituent. V.B.
{ like '/', but types out numerically. XI.E.3.
| like ^I, but doesn't change current location. XI.E.16.
} like '/', but types out symbolically. XI.E.5.
^ causes current location to be closed and previous one to be opened. XI.E.11.
_ causes symbolic typout. X.B.0.
<rubout> for character or syllable typein deletion. XVI.B.
.sp
C. Command characters taking one preceding altmode.
$^`
$^a
$^b
$^C
$^D typein deletion. XVI.A.
$^E
$^F for file links. III.M.
$^G
$^H
$^I opens address pointed to by left 18 bits of last expression
DDT typed. XI.E.14.
$^J or altmode linefeed closes open register and opens the one after $^M would
have opened. XI.E.10.
$^K load system program and/or its symbols. XIV.J.
$^L
$^M or altmode carriagereturn closes currently open register and
opens the last one in the . ring buffer. XI.E.8.
$^N one proceed, but teletype is not given to job. XIII.G.4.
$^O
$^P
$^Q
$^R
$^S sets DDT's "sname". XIV.E.2.
$^T enter information in DDT's translation table. XIV.G.2.
$^U remove information from DDT's translation table. XIV.K.
$^V
$^W
$^X kill the current job, requires a dot ".". III.I.
$^Y replaces DDT's symbol table with one from the current
job's core. XII.F.
$^Z The ^Z will not be seen by DDT.
$$ (altmode altmode) part of many commands.
$^\
$^] end a patch. XIX.A.6.
$^^
$^_
$<space> argument separater. ))).D.
$! floating divide. VII.E.
$" changes current typeout mode to ASCII.X.C.3.i., with an infix argument
allows ASCII string input. V.D.1.
$#
$$ (altmode dollar-sign)
$%
$& changes current typeout mode to SQUOZE. X.C.3.k., with an
infix argument, allows SQUOZE input. V.D.3.
$' changes current typeout mode to SIXBIT. X.C.3.j., with infix argument, allows
SIXBIT string input. V.D.3.
$( and $)
$* floating multiply. VII.E.
$+ floating add. VII.E.
$, argument separater. ))).D.
$- floating subtract. VII.E.
$. PC of current job. XI.C.5.
$/ like '/' but uses left 18 bits for address to be opened. XI.E.2.
$<digits> The digits will be part of a DDT format command infix argument.
$: for naming relocatable prorams. XII.B.3.
$; like ;, but changes typeout mode to "semi-colon" mode. X.B.7.
$< for special infix grouping. ))).B.
$= causes floating typeout. X.B.2.
n$> has value of $Q with non-zero fields of n replacing fiels in $Q. XI.C.4.
$?
$@
$A changes current typeout mode to absolute addressing. X.C.3.b.
$B breakpoint type commands. XIII.B.
$C changes current typeout mode to constants. X.C.3.e.
$D sets current radix to ten. X.C.4.a.
$E effective address search. XI.H.
$F changes current typeout mode to floating point. X.C.3.l.
$G start job execution. XIII.A.
$H change current typeout mode to halfword. X.C.3.f.
$I MAR interrupt controlling. XIII.C.2.
$J job selection. III.D.
$K half kills symbols. XII.C.1.
$L loading binary files. III.F.
$M holds the search mask for $W. XI.G.2.
$N not-word search. XI.F.
$O changes current radix to octal. X.C.4.b.
$P continues job execution. III.E.
$Q has value of last thing DDT typed. XI.C.2., with
infix argument, has value of nth last thing typed. XI.C.3.
$R changes current typeout mode to relative addressing. X.C.3.c., with infix
argument changes current radix to 'n'. X.C.3.d.
$S changes current typeout mode to symblic. X.C.3.a.
$nT changes current typeout mode to bytes of size 'n'. X.C.3.g.
$U for logging in. III.B., or for reloading DDT, requires dot ".". XIV.k.
$V
$W word search. XI.G.
$X single instruction execution. XIII.F.
$Y dump core. XIV.C.
$Z
$[ like '[', but uses left 18 bits for address. XI.E.4.
$\ like $^I, but DDT does not change "point". XI.E.17.
$] like ']' but uses left 18 bits for adress. XI.E.6.
$^ closes open register and opens one before $^M would open. XI.E.12.
$_ left shift. VII.I.
$<rubout> The rubout will delete the altmode.
.sp
D. Commands taking two altmodes
$$^@
$$^A
$$^B
$$^C
$$^D typein deletion. XVI.A.
$$^E
$$^F flaps microtape. III.N.
$$^G
$$^H
$$^I
$$^J
$$^K disowns jobs. III.T.
$$^L
$$^M
$$^N
$$^O
$$^P
$$^Q
$$^R
$$^S sets master "sname". XIV.E.3.
$$^T
$$^U
$$^V
$$^W
$$^X kills all jobs, requires a ".". XIV.F.
$$^Y augments a symbol table in the current job's core image with
DDT's. XII.G.
$$^Z The ^Z will not be seen by DDT.
$$$ (altmode altmode altmode) The same as two altmodes.
$$^\
$$^]
$$^^
$$^_
$$<space>
$$! opens register, but suppresses typeout of contents. XI.E.18.
$$" sets permenant typeout mode to ASCII. X.C.3.i., with
an infix argument sets permanent ASCII typein. XIX.B.
$$#
$$$
$$%
$$& sets permanent typeout to SQUOZE. X.C.3.k.
$$' sets permanent typeout to SIXBIT. X.C.3.j., with
an infix argument sets permanent SIXBIT typein. XIX.B.
$$( and $$)
$$*
$$+
$$,
$$-
$$.
$$/
$$<digits> The digits will be part of an infix argument.
$$:
$$; same as $;, but permanent mode is changed to "semi-colon" mode. X.B.8.
$$< special infix grouping. ))).B.
$$= types out up to three given arguments in the mode
they were typed in. X.B.3.
$$>
$$?
$$@
$$A changes permanent typeout mode to absolute addressing. X.C.3.b.
$$B removes all breakpoints. XIII.B.2.
$$C changes permanent typeout mode to constants. X.C.3.e.
$$D sets permanent radix to ten. X.C.4.a.
$$E
$$F sets permanent typeout mode to floating point. X.C.3.h.
$$G starts execution and sets default starting address. XIII.A.3.
$$H sets permanent typeout mode to half-words. X.C.3.f.
$$I
$$J renames jobs and tells job status. XIV.A.
$$K kills symbols. XII.C.
$$L loads file on top of existing core. XIV.B.
$$M
$$N
$$O sets permanent radix to octal. X.C.4.b.
$$P indefinite continue after breakpoint. XIII.B.5.
$$Q takes infix argument and replaces $Q with $nQ. XI.C.3.
$$R changes permanent typeout mode to relative addressing. X.C.3.c., with infix
argument sets permanent radix to argument. X.C.3.d.
$$S changes permanent typeout mode to symbolic. X.C.3.a.
$$T takes infix argument and sets permanent typeout mode to bytes of
size 'n'. X.C.3.g.
$$U logs you out. III.C.
$$V list jobs. III.E.
$$W
$$X
$$Y dumps core onto specified file, but doesn't delete existing file first. XIV.D.
$$Z zeros core. XI.A.
$$[
$$\
$$]
$$^
$$_ floating scale. VII.J.
$$<rubout> The rubout will delete the second altmode.
.pa
.ce
XXII. Index of Monitor Commands
.sp
.sp
This index lists most monitor command, a short description of the command,
and a cross reference to the detailed description within
the manual.
.sp
:BUG document bug. III.V.
:CONTIN continue giving job tty. IV.E.
:DELETE delete file. III.L.
:DISOWN disown current job. III.T.
:DUMP dump from job. III.H.
:ENDPAT end patch. XIX.A.4.
:ERR ioc error status. III.Y.
:FLAP flap dectape. III.N.
:GAG control receipt of messages. III.S.
:GO start inferior. IV.C.
:GZP alt g, ctl z, ctl p. IV.D.
:JOB create or select job. III.D.
:KILL kill current job. III.I.
:LINK create link. III.M.
:LISTF list files. III.J.
:LISTJ list jobs. III.E.
:LISTP list relocatable programs. III.P.
:LOAD load from following file. III.F.
:LOGIN login as following name. III.B.
:LOGOUT auto-expunge. III.C.
:MAIL add to user's mail file. III.Q.
:PAT the same as :PATCH. XIX.A.2.
:PATCH patch. XIX.A.2.
:PDUMP pure dump. III.H.
:PRGM print current program name. III.O.
:PRINT print file. III.K.
:PROCED procede job, leave tty with ddt. IV.F.
:SEND send message. III.R.
:SL the same as :SYMLOD. III.G.
:SLEEP sleep n 30'ths of a second. III.W.
:SLIST list symbols. IV.H.
:SSTATU type system status. III.X.
:START start inferior. IV.C.
:SYMLOD load, symbols only. III.G.
:UNPAT unpatch. XIX.A.7.
:V turn typeout on. IV.A.
:VERSIO type version #'s. III.Z.
:VK do a :V and type a carriage return and linefeed. IV.B.
:VP do a :V and then a :CONTIN. IV.G.
:WALLP  to specified file. III.AA.
:XFILE execute file as ddt commands. III.V.
:? list most : commands. III.A.
:?? list all : commands. III.A.
:$ (colon-altmode) used to enter comments. III.BB.