mirror of
https://github.com/PDP-10/its.git
synced 2026-01-13 15:27:28 +00:00
203 lines
7.2 KiB
Plaintext
203 lines
7.2 KiB
Plaintext
.XGP
|
||
.double
|
||
.fill
|
||
|
||
Rug is a symbolic debugger which runs on the pdp11.
|
||
There are three basic output modes which affect how the
|
||
contents of a location get printed.
|
||
.nofill
|
||
$C causes the location contents to be printed as a number.
|
||
$S causes the location to be printed as a symbol.
|
||
$I causes the location to be printed as an instruction.
|
||
Also there are two minor mode changes:
|
||
$A inhibits the printing of symbols (like in an instruction).
|
||
$R reverses the action of $A.
|
||
.fill
|
||
|
||
By typing two alt modes, the mode gets more permanently changed,
|
||
but can be changed back, of course by switching to a different mode.
|
||
|
||
To open a location type / or \.
|
||
This opens it in word or byte mode respectively.
|
||
However if an odd location is opened, it will be in byte
|
||
mode even if / was typed.
|
||
|
||
After a location is opened, a number can be placed into it numerically,
|
||
symbolically, or as an instruction. For instance if FOO is defined,all of the following are legal:
|
||
.nofill
|
||
100/ 53 MOV @FOO+.(%2),(%3)+
|
||
100/ 53 FOO+352-10
|
||
100/ 53 6
|
||
.fill
|
||
To open a register, type %5/ and %5 will be opened as expected
|
||
(or if it is a defined symbol
|
||
just type its name)
|
||
|
||
When typing an instruction, type
|
||
the operation code followed by a space or tab.
|
||
Extra tabs and spaces are ignored here.
|
||
Then type the next field. Follow it by a comma if
|
||
there is another field. Then type the other field.
|
||
When inputting a symbol, the arithmetic operations
|
||
are +, -, *, and ! for add, subtract multiply
|
||
and divide respectively.
|
||
Important note: when typing in
|
||
condition codes, type SE CZ, for example. in other words, type
|
||
SE(space) or CL(space), depending on whether you
|
||
wish to clear or set the flags, then follow it with all the
|
||
flags you wish to modify by the instruction.
|
||
|
||
After a location is opened, carriage return will close it, placing
|
||
in it any value that might have been typed directly before the return,
|
||
unless some operations were performed, in which case it will not change
|
||
the contents.
|
||
Line feed will open the next word or byte, depending
|
||
on whether the previous location were opened in word or byte mode.
|
||
if the previous location were opened in instruction mode, line feed
|
||
will open the next instruction. (it will skip over to the end of
|
||
a multiple lenth instruction.
|
||
^ will go to either one word or one byte ahead of the opened location.
|
||
being in instuction mode does not change this.
|
||
/ opens the last memory location mentioned
|
||
(like JMP FOO,MOV BAR,FOO or TSTB @FOO all open FOO)
|
||
_ opens second last memory location mentioned
|
||
(MOV BAR,FOO opens BAR with an extra slash)
|
||
tab (contrl i) opens the location which is the
|
||
value of the number in the location opened.
|
||
|
||
< will return to the sequence interrupted by extra tabs
|
||
|
||
.center
|
||
breakpoints
|
||
To set a breakpoint, type FOO$B
|
||
This sets a breakpoint at location FOO.
|
||
To delete a breakpoint, type FOO$D.
|
||
To delete all breakpoints, type $D.
|
||
|
||
To see which locations have breakpoints in them,
|
||
type .B/. This will contain either a random location within rug,
|
||
indicating that that breakpoint is not set, or a location which
|
||
would be where that breakpoint is.
|
||
If line feed is typed, you can see where B1 is.
|
||
If another line feed is typed, you can see where B2 is, etc.
|
||
up to B7. Or type .B+6 to examine breakpoint 6.
|
||
To examine the count number of each
|
||
breakpoint, type .C+n/ to examine the count of breakpoint n.
|
||
(The count is how many times you are to proceed through that
|
||
breakpoint before stopping.)
|
||
|
||
|
||
|
||
.center
|
||
running the program
|
||
.nofill
|
||
FOO$G starts it at location FOO
|
||
$P lets it proceed from where it left off
|
||
n$P causes it to stop after looping through the last breakpoint
|
||
n times.
|
||
.fill
|
||
The breakpoint repeat counts can be inpected and modified
|
||
by opening .B and typing 9 line feeds.
|
||
The repeat count for breakpoint 0 will then be typed.
|
||
The repeat counts for breakpoints 1 through 7 follow in sequence.
|
||
.center
|
||
|
||
single step mode
|
||
by typing ^N, you can execute one more instruction.
|
||
Rug will type SS;adr, where adr is the address of the
|
||
next instruction to be executed.
|
||
To execute 5 instructions, type 5^N, etc.
|
||
Breakpoints are disabled in single instruction mode.
|
||
By typing 400^N, it is very likely you might skip a few
|
||
breakpoints.
|
||
|
||
|
||
.S is a defined symbol which is the user status.
|
||
.P is a defined symbol which is the user priority
|
||
|
||
.center
|
||
defining symbols
|
||
To define a symbol, type 100,FOO:
|
||
This defines FOO as location 100.
|
||
It is perfectly legal to redefine symbols.
|
||
All radix 50 chars are legal in a symbol.
|
||
Symbol names longer than 6 characters get automatically chopped.
|
||
Also, FOO: defines FOO as . (address of the open
|
||
location)
|
||
|
||
To half kill an already defined symbol type FOO^k.
|
||
To unhalf kill a symbol you accidentally half killed, just
|
||
redefine it (type FOO,FOO)
|
||
|
||
A string of numbers will be considered
|
||
as octal unless there is a decimal point somewhere in it
|
||
or it contains an 8 or 9.
|
||
.break
|
||
|
||
& causes radix 50 to be input (&abc is like typing the numeric
|
||
quantity which is abc in radix 50 packed with a on the left)
|
||
spaces are zero radix 50
|
||
|
||
.break
|
||
[ will type the two ascii bytes in the opened word
|
||
.break
|
||
|
||
.break
|
||
] performs a radix 50 mode unpack of the opened word.
|
||
.break
|
||
|
||
' causes the ascii value of the next character to be input
|
||
(mov ##'F,R2 is legal)
|
||
.break
|
||
" causes the next two char.'s ascii value to be packed into a word
|
||
|
||
.center
|
||
loading a file
|
||
To load a file from the paper tape reader,
|
||
type $LP:. If it is on multiple tapes, the debugger
|
||
halts at the end of each tape and hitting "continue"
|
||
causes the next tape to be read.
|
||
Use RADIA;PUNCH BIN on the PDP10 to punch out a
|
||
debugger-loadable tape, which is an absolute loader
|
||
binary of the program which gets loaded directly onto
|
||
disk, followed by an absolute loader tape of the
|
||
symbol table which gets loaded directly into core.
|
||
|
||
To load a file from the PDP10's disk, type $LT: <user;file name>,
|
||
where <user;file name> is the ITS file specification for the file to be
|
||
loaded.When it is done loading you'll be back
|
||
in the debugger.
|
||
To load a program without first zeroing
|
||
core, type $^L instead of $L.
|
||
Symbols are always loaded with the program.
|
||
|
||
To save the debugger on disk type $^D. To get it back type $^U.
|
||
To load a program of disk #<n>, type $L<n>:<file name>. To save it (dump it)
|
||
type $Y<n>:<file name>. If a file with the name <file name> exists already,
|
||
rug will type FILE EXISTS DELETE?. If you then type Y, rug will delete the old
|
||
file, and dump core into a new file with <file name>. If you type anything else,
|
||
the file is not dumped.
|
||
.center
|
||
zeroing core and initializing the symbol table.
|
||
To zero all of core and initialize the symbol table, type $$Z. To just
|
||
reinitialize the symbol table, type $Z.
|
||
.center
|
||
interacting with programs
|
||
Programs should leave locations 157000-160000 alone.
|
||
That is the resident portion of rug.
|
||
If a program is running and you wish to get to the debugger,
|
||
halt the program and start at location 157000.
|
||
Rug should swap the program out and itself in.
|
||
Proceed is disabled when the debugger is
|
||
started with the switches as opposed to trapping there.
|
||
(the program executes "3")
|
||
Aside from the the 300 locations already mentioned, the program
|
||
can use all 28k of core.
|
||
However, currently only up to 157500 (the
|
||
absolute loader) is swapped in and out.
|
||
Maximum symbol table size is about 2000 symbols
|
||
(logo is well under the limit.)
|
||
To find out how much symbol table room is used,
|
||
type "..B="
|
||
The mimumum allowed value of ..B is 10000.
|
||
|