mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-06 11:03:21 +00:00
1370 lines
64 KiB
Plaintext
1370 lines
64 KiB
Plaintext
DDT42B - DDT %42B(412) User's Guide to New Features Page 1
|
||
|
||
|
||
|
||
|
||
;THIS SOFTWARE IS FURNISHED UNDER A LISENCE AND MAY BE USED
|
||
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
|
||
;
|
||
;COPYRIGHT (c)DIGITAL EQUIPMENT CORPORATION 1978,1979,1982,1986.
|
||
;ALL RIGHTS RESERVED.
|
||
;
|
||
|
||
DDT42B - DDT %42B(412) User's Guide to New Features Page 2
|
||
Introduction and Overview
|
||
|
||
|
||
1.0 Introduction and Overview
|
||
1.0 Introduction and Overview
|
||
1.0 Introduction and Overview
|
||
1.0 Introduction and Overview
|
||
1.0 Introduction and Overview
|
||
1.0 Introduction and Overview
|
||
|
||
This document is designed as a user's guide to DDT version 42/42B in
|
||
so far as it has changed from previous versions of DDT. It is not a
|
||
complete user's guide to all the wonders of DDT, just those new
|
||
features which have recently been implemented (although directed pri-
|
||
marily at new features only in DDT version 42/42B, some documentation
|
||
is included to describe other aspects of DDT which have been around
|
||
for a longer period of time, but were never fully understood or other-
|
||
wise documented).
|
||
|
||
Throughout this document it is assumed that the reader is already
|
||
familiar with DDT and the MACRO assembly language in general as well
|
||
as the appropriate operating system(s).
|
||
|
||
This (DDT42B) is the third revision of this document, incorporating
|
||
the additional changes to DDT version 42B as of edit 324, and com-
|
||
pletely supersedes all previous versions (DDT42).
|
||
|
||
|
||
2.0 Configurations
|
||
2.0 Configurations
|
||
2.0 Configurations
|
||
2.0 Configurations
|
||
2.0 Configurations
|
||
2.0 Configurations
|
||
|
||
DDT version 42B will run on KA-10's, KI-10's, KL-10's, and KS-10's,
|
||
using no paging, KI-paging, or KL-paging, with or without extended
|
||
addressing in user or executive mode (user and file DDT's run only in
|
||
user mode) with no special assembly needed. DDT version 42B must be
|
||
assembled to run under either the TOPS-10 or the TOPS-20 operating
|
||
system.
|
||
|
||
It traditionally has been a goal to maintain one single set of source
|
||
files from which all flavors of DDT are built. This goal has been
|
||
maintained.
|
||
|
||
Note
|
||
Note
|
||
Note
|
||
Note
|
||
Note
|
||
Note
|
||
|
||
TOPS-20 UDDT (and SDDT) now use memory locations 764000
|
||
through 777777 (previously 770000 through 777777), but the
|
||
starting address for DDT continues to be location 770000.
|
||
|
||
|
||
|
||
3.0 Memory and Address Control
|
||
3.0 Memory and Address Control
|
||
3.0 Memory and Address Control
|
||
3.0 Memory and Address Control
|
||
3.0 Memory and Address Control
|
||
3.0 Memory and Address Control
|
||
|
||
The single biggest change to DDT version 42 from earlier versions is
|
||
in the realm of memory control and how the user addresses memory loca-
|
||
tions.
|
||
|
||
3.1 Extended addressing
|
||
|
||
All flavors of DDT except FILDDT will run in any memory section. Full
|
||
extended addressing is supported, as are "large" addresses - DDT will
|
||
now accept a full 36-bit expression as an address although obviously
|
||
only FILDDT can actually handle an address over 30-bits wide. In all
|
||
cases the actual address must be positive (i.e., effectively a 35-bit
|
||
address).
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 3
|
||
Memory and Address Control
|
||
|
||
|
||
3.1.1 Symbol table restrictions
|
||
There are certain restrictions however which must be adhered to in
|
||
order for DDT to function correctly. The first restriction is that the
|
||
symbol table logic is essentially section-dependent, i.e., the symbol
|
||
table and its pointers (.JBSYM=116 and .JBUSY=117, also .JBHSM=6 rela-
|
||
tive to the start of the "high segment") must reside (i.e., be mapped)
|
||
in the same section as that in which DDT itself is running. Further,
|
||
the symbol table can be no longer than 128K words in length and must
|
||
be RADIX-50 format.
|
||
|
||
Much thought is being given towards the implementation of a totally
|
||
new symbol table scheme which would address all of these problems, the
|
||
single biggest one of which is simply how is extended addressing going
|
||
to be used - as a single fixed address space with one or more "global"
|
||
symbol tables (like the TOPS-20 monitor currently works), or as a
|
||
collection of independent sections each of which has section-local
|
||
symbols/symbol tables (whatever that means), or what?
|
||
|
||
3.1.2 Breakpoint restrictions
|
||
The second restriction of which the user must be aware concerns break-
|
||
points. Since the hardware has no facility to unconditionally transfer
|
||
control to DDT using only 36-bits, DDT must be mapped into each
|
||
section (at the same relative address obviously) which contains code
|
||
into which the user wishes to place breakpoints.
|
||
|
||
3.1.3 Location examining restrictions
|
||
Even if running on an extended addressing machine if DDT is running in
|
||
section 0, then only locations within section 0 (addresses 0 to
|
||
777777) may be manipulated. DDT will make no effort to outsmart the
|
||
combined efforts of the user and the operating system by sneaking into
|
||
a non-zero section even momentarily to do the memory reference.
|
||
|
||
Note
|
||
Note
|
||
Note
|
||
Note
|
||
Note
|
||
Note
|
||
|
||
DDT version 42B, if it has previously been running in a non-
|
||
zero section, and is currently entered in section 0, will
|
||
blindly jump back into the last non-zero section in which
|
||
DDT was running. This is to allow DDT to be able to access
|
||
non-zero section locations (such as breakpoints).
|
||
|
||
|
||
3.2 Effective address calculation
|
||
|
||
DDT can calculate effective address references using either "local" or
|
||
IFIW (Instruction Format Indirect Word) or "global" or EFIW (Extended
|
||
Format Indirect Word) formats. In a normal DDT address-opening command
|
||
("/", "\", <TAB>, etc.) a single <ESC> delimiting the address expres-
|
||
sion (e.g., "MOVE 3,@200(10)$/" or just "$[") instructs DDT to treat
|
||
the expression as an IFIW word and calculate the effective address
|
||
exactly like the hardware would, were the hardware to execute that 36-
|
||
bit word as an instruction at location "." (whether or not location
|
||
"." is currently open).
|
||
|
||
Two <ESC>'s delimiting the address expression instructs DDT to treat
|
||
the 36-bit expression as an EFIW word and calculate the effective
|
||
address exactly as the hardware would, were the hardware to indirectly
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 4
|
||
Memory and Address Control
|
||
|
||
|
||
address the 36-bit expression at location "." (whether or not location
|
||
"." is currently open). A strange case can come up about which the
|
||
user should be cautioned - there is an ambiguity as to where (i.e.,
|
||
what "section") to start the effective address calculation. DDT as-
|
||
sumes the left half of "." (i.e., the last location opened by the
|
||
user). If for example having opened location 0,,1234 which contains
|
||
7,,4321 the user issues the command "$$[" then DDT will calulate the
|
||
effective address as the contents of location 4321 in section 0 in-
|
||
dexed by the right half of register 7, and if bit 13 is on, treating
|
||
that word as an IFIW and continuing the address calculation. This,
|
||
although probably not what was expected, is in fact exactly what the
|
||
hardware would do since the indirect word came from section 0. Had the
|
||
user opened location 1,,1234 (containing 7,,4321) then DDT would take
|
||
the contents of location 7004321 and continue from there.
|
||
|
||
If no <ESC>'s delimit the address expression, then DDT simply uses the
|
||
full 36-bit expression as the address (e.g., "30,,30/" says open
|
||
location 30000030 and "-1/" says open location 777777777777). Again,
|
||
only FILDDT can actually reference an address greater than 30-bits
|
||
wide (not that anyone has that much disk space, but the hardware will
|
||
not permit an address space over 30-bits wide), and in any case the
|
||
address must be a non-negative 36-bit integer.
|
||
|
||
There is a special case in which DDT does something "kinky" - if a
|
||
space was typed in entering the address expression, or if no explicit
|
||
address was typed (i.e., the user is using the "last word typed" by
|
||
simply typing only (for example) <TAB>), DDT will form the 36-bit
|
||
actual address by using only the right half of the 36-bit address
|
||
expression plus the left half of "." as the section number. This not-
|
||
at-all-obvious behavior is so that the user can type in expressions
|
||
such as "JRST PAT<TAB>" and have DDT go to location PAT in the same
|
||
section as the JRST PAT instruction rather than going to address
|
||
254000000000+(PAT modulo 2**18). Another common usage of this "fea-
|
||
ture" would be in chaining down linked lists where the link pointer is
|
||
an 18-bit section-local address in the left half of a word. To do this
|
||
the user may type "sp$$Q/" (where "sp" means space). This is one of
|
||
those cases where usefullness outweighs cleanliness of implementation
|
||
and documentation.
|
||
|
||
3.3 Modifying memory
|
||
|
||
Two new commands have been added to facilitate DDT's manipulation of
|
||
the user address space.
|
||
|
||
3.3.1 Automatic write-enable
|
||
The $W or $0W command instructs DDT to, if the user attempts to depos-
|
||
it into a write-protected memory location, automatically attempt to
|
||
write-enable the memory location, do the memory deposit, then finally
|
||
re-write-protect the memory location (default for TOPS-10); the $$W or
|
||
$$0W command instructs DDT to simply give an error indication if the
|
||
user attempts to change a write-protected memory location (default for
|
||
TOPS-20). For FILDDT the use of this command is restricted to non-file
|
||
usage such as "DDT'ing" the running monitor/memory space.
|
||
|
||
3.3.2 Automatic page-creation
|
||
The $1W command instructs DDT to automatically try to create the page
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 5
|
||
Memory and Address Control
|
||
|
||
|
||
the user is trying to deposit into if it doesn't already exist (de-
|
||
fault for TOPS-20); the $$1W command instructs DDT to simply give an
|
||
error indication if the user attempts to write into a non-existant
|
||
page (default for TOPS-10). EDDT and FILDDT doing super I/O or
|
||
"DDT'ing" an .EXE file will NEVER attempt to create a non-existant
|
||
page. For FILDDT the user must specify patching the file when he
|
||
starts FILDDT in order to be able to create new pages (e.g., extend
|
||
the file or fill in a gap in the middle of the file (TOPS-20 only)).
|
||
|
||
3.4 Page mapping and physical addressing
|
||
|
||
All flavors of DDT (on TOPS-20, only FILDDT) support page mapping and
|
||
address relocation as well as register and physical address manipula-
|
||
tion. All of these functions use some variation of the $U/$$U DDT
|
||
command. In general these functions may be mixed together (for example
|
||
address relocation and page mapping).
|
||
|
||
*** Warning ***
|
||
*** Warning ***
|
||
*** Warning ***
|
||
*** Warning ***
|
||
*** Warning ***
|
||
*** Warning ***
|
||
|
||
The $U command syntax in DDT version 42/42B is totally dif-
|
||
ferent (and mainly incompatible) from previous versions of
|
||
DDT! The user is MOST strongly urged to carefully read this
|
||
section on memory mapping and addressing!
|
||
|
||
|
||
3.4.1 Physical addressing
|
||
DDT now has the concept of "physical" addressing in addition to its
|
||
normal "virtual" addressing. The $U command instructs DDT to use nor-
|
||
mal virtual addressing (what it used to do); the $$U command instructs
|
||
DDT to manually track down the honest physical address rather than the
|
||
virtual address space in which DDT finds itself running. Physical
|
||
addressing is really applicable only to EDDT or to FILDDT looking at
|
||
running monitor/memory (TOPS-10 only). User mode DDT (including EDDT
|
||
running in user mode, MDDT (TOPS-20 only), and VMDDT (TOPS-10 only))
|
||
and FILDDT looking at a disk all treat $U and $$U identically. In
|
||
physical addressing location 0 is not register 0 (i.e., DDT's internal
|
||
copy of user register 0) but rather physical memory location 0 page 0
|
||
bank 0 box 0 (that memory location on the hardware memory bus that
|
||
responds to all address bits = 0).
|
||
|
||
When the $$U DDT command is issued "physical" locations 0 to 17 become
|
||
"registers" 0 to 17. For user mode DDT this means locations 0 to 17
|
||
become DDT's registers rather than the user's registers (although the
|
||
user's registers will be properly restored on DDT-exit, $$U merely
|
||
directs DDT not to use the internal "fake" (i.e., user) registers).
|
||
For FILDDT this means file words 0 to 17 (as mapped by the .EXE direc-
|
||
tory if used) become locations 0 to 17 (normal for a data file).
|
||
|
||
Subsequent issuance of the $U DDT command will redirect locations 0 to
|
||
17 to being DDT's internal "fake" registers again, except for FILDDT
|
||
looking at an data file or doing super I/O to a disk.
|
||
|
||
Note that for executive mode EDDT to utilize physical addressing the
|
||
paging hardware must have been enabled PRIOR to DDT-entry. This re-
|
||
quirement exists because EDDT, in order to access all of physical
|
||
memory, needs to map the desired physical address into its own (execu-
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 6
|
||
Memory and Address Control
|
||
|
||
|
||
tive) virtual address space, which it does by fondling the already-
|
||
extant page maps. For EDDT to provide physical addressing capability
|
||
without this restriction would require 2 (3 if KL-paging) more memory
|
||
pages be dedicated to EDDT for building temporary page maps, plus
|
||
support code etc.
|
||
|
||
For FILDDT to examine/modify physical memory a 7.00 or later release
|
||
of the TOPS-10 monitor is required; no release of TOPS-20 supports
|
||
FILDDT'ing physical memory.
|
||
|
||
3.4.2 Page mapping
|
||
DDT now supports page mapping in both the KI- and the KL-tradition.
|
||
EDDT in executive mode will dynamically figure out which style of
|
||
paging is in effect and operate accordingly. All other flavors of DDT
|
||
(including EDDT running in user mode) will assume the mode of paging
|
||
used by the operating system for which DDT was assembled - KI-paging
|
||
for TOPS-10 and KL-paging for TOPS-20. To select KI-paging emulation
|
||
the flg$10U command is used; to select KL-paging the flg$11U command
|
||
is issued; in either case if flg is zero then the paging emulation is
|
||
disabled, if flg is 1 then the appropriate paging emulation is
|
||
enabled.
|
||
|
||
In executive mode EDDT or FILDDT looking at running monitor/memory
|
||
space DDT will internally utilize physical addressing in order to pro-
|
||
vide the user the true mapped virtual address space desired.
|
||
|
||
3.4.2.1 KI-paging - For KI-paging (TOPS-10 default) the page mapping
|
||
command for the executive virtual addressing space is [upt<]ept$[0]U
|
||
where upt is the optional physical memory page number of the user
|
||
process table (for setting the "per-process" addressing space - exec
|
||
virtual addresses 340000 through 377777) and ept is the physical memo-
|
||
ry page number of the executive process table. The user virtual ad-
|
||
dressing space is selected by the upt$1U command. The command $U
|
||
returns DDT to regular unmapped virtual addressing.
|
||
|
||
3.4.2.2 KL-paging - For KL-paging (TOPS-20 default) the page mapping
|
||
command for the executive virtual addressing space is ept$[0]U where
|
||
ept is the physical memory page number of the executive process table,
|
||
or epx$$[0]U where epx is the index into the SPT of the executive
|
||
process table pointer. To select the user virtual addressing space the
|
||
command is upt$1U where upt is the physical memory page number of the
|
||
user process table, or upx$$1U where upx is the index into the SPT of
|
||
the user process table pointer. The command $U returns DDT to regular
|
||
unmapped virtual addressing.
|
||
|
||
To map a single section (256K address space) under KL-paging the com-
|
||
mand is either sec$2U where sec is the physical memory page number of
|
||
a KL-paging section map, or sex$$2U where sex is the index into the
|
||
SPT of the section map.
|
||
|
||
Basically, under KL-paging, $0U selects the ept, $1U selects the upt,
|
||
and $2U selects a single section. A single $ indicates the physical
|
||
memory page number and two $'s indicate an SPT index.
|
||
|
||
3.4.3 Setting the SPT
|
||
FILDDT will automatically define the start of the SPT from a disk file
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 7
|
||
Memory and Address Control
|
||
|
||
|
||
(assumed monitor dump) from the symbol "SPT" if it exists (TOPS-20
|
||
only). The command spt$6U specifies to DDT that the SPT starts at
|
||
address spt.
|
||
|
||
3.4.4 Register addressing
|
||
The command acs$5U instructs DDT to use the 20 consecutive locations
|
||
starting at acs as the registers (DDT maintains an internal copy of
|
||
the registers so changing "register" 3 will not affect (for example)
|
||
acs+3). FILDDT, when reading an .EXE file, will automatically load its
|
||
internal "fake" registers as though the user had typed CRSHAC$5U if
|
||
TOPS-10 or BUGACS$5U if TOPS-20. Note that if physical addressing mode
|
||
has been entered (the user has issued the $$U command) then the inter-
|
||
nal "fake" registers are ignored; if the user subsequently reenters
|
||
virtual addressing (via some form of the $U command) then an acs$5U
|
||
command may also have to be re-issued to get the registers back (this
|
||
does not affect the saving and restoring of the hardware registers in
|
||
user or executive DDT, only what DDT will use for typing out locations
|
||
0 to 17).
|
||
|
||
The command flg$3U explicitly controls the usage of DDT's internal
|
||
"fake" registers - if flg is 0 then the "fake" registers are ignored
|
||
(i.e., 0 to 17 are taken from the true current addressing space), if
|
||
flg is non-zero then addresses 0 to 17 are taken from DDT's internal
|
||
copies of the registers.
|
||
|
||
The $U command, except for FILDDT'ing a data file or doing super I/O
|
||
to a disk, will return DDT to its internal "fake" registers. The se-
|
||
lection of registers is completely independent of any page mapping in
|
||
effect. Changing virtual address spaces does not change the
|
||
"registers".
|
||
|
||
In executive mode EDDT only the command n$4U will switch DDT to use
|
||
(and thus display) hardware AC block n (available only for KL-10's and
|
||
KS-10's). The user is warned that 7$4U on a KL-10 will bring rapid and
|
||
rabid death (the microcode uses AC block 7). On DDT exit DDT will
|
||
restore the ac block context to the state it was in at DDT entry.
|
||
|
||
3.4.5 Address relocation and protection
|
||
As an aid to looking at data structures which are formed using point-
|
||
ers as offsets rather than pointers as absolute values, DDT will allow
|
||
the user to set both a base relocation address to be added to all
|
||
addresses used in location examining commands and a protection address
|
||
beyond which the user "virtual" (note the use of "virtual" here as
|
||
meaning pre-relocated) address is illegal. This is (coincidently) ex-
|
||
actly analguous to the KA-10 hardware relocation and protection strat-
|
||
egy, and in fact could be used as such to "mimic" the $U KI/KL/KS-10
|
||
functionality on a KA-10 in executive mode. The form of this command
|
||
is bas$8U where bas is the base virtual address, and prt$9U where prt
|
||
is the maximum address the user will be allowed to type in. Note that
|
||
page mapping and address relocation and protection are independent
|
||
mechanisms, with address relocation and protection being performed
|
||
before any mapping is done. The protection address has no effect on
|
||
the final "physical" address generated by any mapping currently in
|
||
effect.
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 8
|
||
Memory and Address Control
|
||
|
||
|
||
3.4.6 $U command summary
|
||
All $U/$$U commands take the following form:
|
||
|
||
1. $U Unmapped virtual addressing
|
||
2. $$U Unmapped physical addressing
|
||
3. ept$[$][0]U Select executive virtual addressing
|
||
4. upt$[$]1U Select user virtual addressing
|
||
5. sec$[$]2U Select single section
|
||
6. flg$3U Select (deselect) internal fake registers
|
||
7. acb$4U Select hardware ac block
|
||
8. acs$5U Load internal fake registers
|
||
9. spt$6U Select base of SPT
|
||
10. bas$8U Set base relocation address
|
||
11. prt$9U Set protection address
|
||
12. flg$10U Select (deselect) KI-paging
|
||
13. flg$11U Select (deselect) KL-paging
|
||
|
||
where:
|
||
|
||
1. acb := integer ac block number
|
||
2. acs := address of 20-word register block
|
||
3. bas := base relocation address
|
||
4. ept := executive process table page number
|
||
5. flg := selection flag, zero to deselect, non-zero to select
|
||
6. prt := protection (maximum allowable) address
|
||
7. sec := section map page number
|
||
8. spt := address of SPT
|
||
9. upt := user process table page number
|
||
|
||
|
||
3.4.7 Address checking (Executive EDDT only)
|
||
EDDT, when running in executive mode, now is much more extensive in
|
||
validity-checking memory references. In particular, EDDT will not
|
||
cause a NXM (page fault) trap to the resident operating system if the
|
||
user types in an illegal (non-existent or unmapped) address, but rath-
|
||
er will simply type its ubiquitous ?<DINK><TAB> error message.
|
||
|
||
3.4.8 Address breaking
|
||
DDT will no longer cause an address break to occur when examining or
|
||
depositing a location at which an address break condition has been
|
||
set. This applies only to "user" examines and deposits, an address
|
||
break set in DDT will still cause an address break to occur.
|
||
|
||
|
||
4.0 Specifying the Start Address
|
||
4.0 Specifying the Start Address
|
||
4.0 Specifying the Start Address
|
||
4.0 Specifying the Start Address
|
||
4.0 Specifying the Start Address
|
||
4.0 Specifying the Start Address
|
||
|
||
The $G command now expects a 36-bit address (obviously with bits 0 to
|
||
5 off) at which to start the user program. This means that the users
|
||
of programs such as the TOPS-10 monitor which define symbols like
|
||
"DEBUG=:<JRST .>" can no longer go either DEBUG$G or DEBUG$X at the
|
||
user's whim but must decide on one form or the other (the default
|
||
obviously being to do nothing - i.e., to settle for the DEBUG$X form)
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 9
|
||
Symbolic expression typein and typeout
|
||
|
||
|
||
5.0 Symbolic expression typein and typeout
|
||
5.0 Symbolic expression typein and typeout
|
||
5.0 Symbolic expression typein and typeout
|
||
5.0 Symbolic expression typein and typeout
|
||
5.0 Symbolic expression typein and typeout
|
||
5.0 Symbolic expression typein and typeout
|
||
|
||
DDT has expanded the range of both symbolic typein and symbolic type-
|
||
out.
|
||
|
||
5.1 Symbolic typein
|
||
|
||
The JSYS opcode (opcode 104) has been added to TOPS-20 DDT, as have
|
||
all the TOPS-10 UUO's (but not the CALLI's etc.) for debugging pro-
|
||
grams which run under the compatibility package.
|
||
|
||
The "G" format floating point instructions GFMP, GFDV, GFAD, and GFSB
|
||
have been added to the opcode table for both typein and typeout.
|
||
|
||
5.2 Multiply-defined symbol typein
|
||
|
||
If the user types an ambiguous symbol (a symbol defined two or more
|
||
places outside of the current local symbol table and not in the
|
||
current local symbol table) DDT will issue an "M" error message.
|
||
|
||
5.3 Selecting no local symbol table
|
||
|
||
The $: command issued without an explicit module name to use as the
|
||
local (or "opened") symbol table will deselect any local symbol table.
|
||
This is the initial state in which DDT starts.
|
||
|
||
5.4 Symbol cache
|
||
|
||
DDT now has a symbol "cache" of symbols recently used to type out
|
||
values. This cache is used primarily for typeout; typein will check
|
||
the symbol cache for a matching symbol from the currently opened or
|
||
local symbol table, if no match is found the cache is ignored and the
|
||
regular symbol table is used. The symbol cache is "flushed" on the
|
||
issuance of any $: command.
|
||
|
||
5.5 Symbolic typeout
|
||
|
||
DDT now goes to great pains to find any possible user-defined symbol
|
||
(such as an OPDEF) to match the expression DDT is trying to type out.
|
||
The order in which DDT searches for a symbol match in symbolic typeout
|
||
mode for non-I/O instructions is:
|
||
|
||
1. Full 36-bit match; OP, AC, I, X, and Y fields (e.g., the TOPS-20
|
||
monitor calls such as GTJFN)
|
||
2. OP, I, X, and Y fields (e.g., the TOPS-10 monitor calls such as
|
||
FILOP.)
|
||
3. OP and AC fields (e.g., the TOPS-10 monitor calls such as INCHWL
|
||
or "instructions" such as HALT)
|
||
4. OP field only (e.g., user UUO's or "OPDEF XMOVEI [SETMI]")
|
||
5. DDT's internal hardware opcode table
|
||
|
||
The order in which DDT searches for a symbol match in symbolic typeout
|
||
mode for I/O instructions is:
|
||
|
||
1. I/O OP and DEV fields (bits 0 to 12 - e.g., KL-10 APRID or KS-10
|
||
RDCSB)
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 10
|
||
Symbolic expression typein and typeout
|
||
|
||
|
||
2. Regular (non-I/O) OP field (e.g., KS-10 UMOVE)
|
||
|
||
|
||
|
||
6.0 Command typeout
|
||
6.0 Command typeout
|
||
6.0 Command typeout
|
||
6.0 Command typeout
|
||
6.0 Command typeout
|
||
6.0 Command typeout
|
||
|
||
|
||
6.1 ASCII typeout
|
||
|
||
DDT adds the typeout mode commands $8T and $9T to typeout 8 bit ASCII
|
||
or 9 bit ASCII respectively (i.e., pick up 8 or 9 bit bytes and "type"
|
||
them straight as is - which with current TOPS-10 and TOPS-20 operating
|
||
systems means as 7-bit ASCII).
|
||
|
||
The adr$0T command has been added to type out a 7-bit "ASCIZ" format
|
||
text string (i.e., a string of 7-bit ASCII characters terminated by a
|
||
null byte) starting at address "adr" or "." if adr is not specified.
|
||
Upon issuance of the $0T command, DDT will type out consecutive 7-bit
|
||
bytes until either the terminating null is encountered or the user
|
||
types a character (similar to stopping a search).
|
||
|
||
6.2 Floating point typeout
|
||
|
||
The [$]$2F command (TOPS-20 FILDDT/SDDT/UDDT only) selects double-pre-
|
||
cision floating point typeout mode; in other respects it is identical
|
||
to the [$]$F command.
|
||
|
||
6.3 Mask and value typeout
|
||
|
||
In FILDDT the various masks and internal values (such as $U) may be
|
||
examined by issuing the appropriate command without an argument. For
|
||
example, typing "$M" to FILDDT will result in the typeout of the cur-
|
||
rent $M mask value.
|
||
|
||
|
||
7.0 Command files
|
||
7.0 Command files
|
||
7.0 Command files
|
||
7.0 Command files
|
||
7.0 Command files
|
||
7.0 Command files
|
||
|
||
The $Y command (TOPS-10 DDT only) has been changed somewhat, both in
|
||
input and output (logging) functions.
|
||
|
||
7.1 Command input
|
||
|
||
If the user does not type a 36-bit expression to be used as a file
|
||
name (such as $""FILNAM"$Y) but just types $Y by itself then DDT will
|
||
prompt with "File: ". After the prompt the user can enter a TOPS-10
|
||
file specification in the form dev:name.type[directory]/switches where
|
||
[directory] can of course contain SFD's.
|
||
|
||
The echoing of the $Y command input may now be supressed via the TTY
|
||
control "mask" - see section 14.2.
|
||
|
||
7.1.1 /A switch
|
||
The /A switch instructs DDT to abort the command file if a DDT-detect-
|
||
ed command error occurs (such as reference to an undefined symbol).
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 11
|
||
Command files
|
||
|
||
|
||
7.2 Command output (logging)
|
||
|
||
When reading a command file ($Y command) DDT will no longer "log" all
|
||
output onto device LPT: but rather just type out onto the user
|
||
terminal.
|
||
|
||
|
||
8.0 Automatic patch insertion
|
||
8.0 Automatic patch insertion
|
||
8.0 Automatic patch insertion
|
||
8.0 Automatic patch insertion
|
||
8.0 Automatic patch insertion
|
||
8.0 Automatic patch insertion
|
||
|
||
The automatic patch insertion facility ($< and $> commands) are basi-
|
||
cally the same as in version 40 of DDT with only minor differences.
|
||
|
||
8.1 Patch opening
|
||
|
||
The user may specify patching either by sym$< where sym is the name of
|
||
a symbol (which will be automatically updated at the termination of
|
||
the patch) or via exp$< where exp is any 36-bit expression represent-
|
||
ing the address of the resultant patch. If the later form of the patch
|
||
command is used no symbol will be updated to the end of the patch.
|
||
|
||
With DDT version 42B, the user can no longer open a patch if one is
|
||
already in progress - the currently open patch must be either closed
|
||
($n> command) or aborted ($$0> command) first.
|
||
|
||
8.2 Default patching symbol
|
||
|
||
The list and order of default patching symbols which DDT uses when the
|
||
user does not supply an explicit patching symbol is now:
|
||
|
||
1. PAT (TOPS-10 EDDT only)
|
||
2. FFF (TOPS-20 EDDT/KDDT/MDDT only)
|
||
3. PAT.. (all flavors)
|
||
4. PATCH (all flavors)
|
||
|
||
|
||
8.3 Default patching address
|
||
|
||
If the user does not supply an explicit patching symbol and DDT is
|
||
unable to find one of the default patching symbols then the address
|
||
specified by the right half of location .JBFF (even on TOPS-20) is
|
||
used. On patch close ($> command) if the patching address was default-
|
||
ed via .JBFF, then both the right half of location .JBFF and the left
|
||
half of location .JBSA are updated to point to the end (+1) of the
|
||
patch.
|
||
|
||
8.4 Patch closing
|
||
|
||
The patch close command has been expanded to a more general form of
|
||
$n>, where the "n" is used to control "skipness" of the patch close,
|
||
i.e., how many JUMPA instructions to insert at the end of the patch to
|
||
return to the patched code. If "n" is 0 then no JUMPAs are inserted
|
||
(usefull for patching a JRST instruction); if "n" is 1 then one JUMPA
|
||
instruction is inserted (as in patching a non-skip instruction); etc.;
|
||
the default remains 2.
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 12
|
||
Automatic patch insertion
|
||
|
||
|
||
8.5 Patch closing confusion and restriction
|
||
|
||
It no longer matters how (when) the user types the $> command, either
|
||
immediately after the final word expression, or after a <CR> or <LF>
|
||
to terminate the final word expression - DDT will never generate a 0
|
||
word for free.
|
||
|
||
There is a very obscure restriction however on the use of the #
|
||
command in conjunction with the $> command. If the user is referencing
|
||
an undefined symbol in the expression for the last word of the patch
|
||
then that expression must explicitly be terminated in such a fashion
|
||
as to close the location before terminating the patch. For example,
|
||
"MOVE T1,BLETCH#$>" is illegal but "MOVE T1,BLETCH#cr$> (where "cr"
|
||
indicates a carriage return) is ok.
|
||
|
||
8.6 Patch abortion
|
||
|
||
A patch may be aborted with the $$0> command.
|
||
|
||
|
||
9.0 Breakpoints
|
||
9.0 Breakpoints
|
||
9.0 Breakpoints
|
||
9.0 Breakpoints
|
||
9.0 Breakpoints
|
||
9.0 Breakpoints
|
||
|
||
The breakpoint logic in DDT version 42/42B has been extensively re-
|
||
vamped in order to support extended addressing. The default number of
|
||
breakpoints is now 12 (decimal); and can be set (by defining the sym-
|
||
bol NBP=number of breakpoints) arbitrarily high (within memory space
|
||
limitations) rather than being limited to 9 or 36 (decimal) depending
|
||
on which code restriction one choose to believe.
|
||
|
||
9.1 Setting breakpoints
|
||
|
||
DDT can now set a breakpoint in code running in any section with two
|
||
restrictions:
|
||
|
||
1. If DDT is currently running in section 0 then breakpoints can
|
||
only be set in section 0 (see section 3.1.3 above).
|
||
2. DDT must be mapped in the section containing the code in which
|
||
breakpoints are to be placed (the logic of this is that since
|
||
there is no way for DDT to cause unconditional transfer of con-
|
||
trol to DDT with only 36 bits some portion of the section address
|
||
space must be devoted to DDT; therefore, given this restriction,
|
||
one might just as well put all of DDT in that section since it
|
||
makes for a cleaner and simpler implementation). Note that this
|
||
does not mean DDT must be running in that section, but merely
|
||
that DDT must be mapped in that section!
|
||
|
||
It does not matter into how many different sections the same code is
|
||
mapped as long as DDT is mapped into the same sections since DDT is
|
||
"section-independent". For example (taking the TOPS-20 monitor which
|
||
maps section 0 and section 1 identically) if a breakpoint is set at
|
||
address 1004567 (or 1,,4567) but the PC was 4567 (or 0,,4567, i.e., in
|
||
section 0 rather than section 1) when the breakpoint was executed DDT
|
||
does not care (as long as DDT is mapped in that section, which in the
|
||
example of the TOPS-20 monitor it is).
|
||
|
||
The syntax for setting a breakpoint is now opn<cmd>bpt$nB where n is
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 13
|
||
Breakpoints
|
||
|
||
|
||
optional and, if specified, declares the breakpoint number to be
|
||
assigned to that address; bpt is the 36-bit address at which to place
|
||
a breakpoint; opn is an optional 36-bit address to open and display
|
||
upon execution of the breakpoint; and cmd is the address of a DDT
|
||
command string to execute upon breaking.
|
||
|
||
The "cmd" string address is the address of an ASCII (7-bit byte)
|
||
string of characters terminated by either a ^Z or a null character.
|
||
This string will be treated as DDT command input, just as if it came
|
||
from an $Y command file (and in fact the $Y command file facility must
|
||
be enabled - symbol FTYANK defined non-zero when assembling DDT - for
|
||
the cmd string to work).
|
||
|
||
DDT will no longer assign two different breakpoints to the same ad-
|
||
dress, either accidentally or under user control - if the user at-
|
||
tempts to set a breakpoint at a location at which a (different) break-
|
||
point is already set, the old breakpoint is cleared first.
|
||
|
||
9.2 Breakpoint typeout
|
||
|
||
Upon execution of a breakpoint DDT will now type the user instruction
|
||
(in instruction format regardless of the permanent typeout mode) at
|
||
that breakpoint and set "." to the breakpoint address. If, further,
|
||
opn was specified as in section 9.1 above, then DDT will also display
|
||
the contents of location opn in the permanently set typeout mode and
|
||
"." will be updated to opn (with the breakpoint address itself
|
||
becoming the previous PC sequence and so available via the $<CR> etc.
|
||
commands).
|
||
|
||
The breakpoint instruction typeout is under the control of a flag bit
|
||
set in the TTY control mask - see section 14.2 for details.
|
||
|
||
9.3 Examining breakpoint locations
|
||
|
||
The $nB command continues to be the "address" of breakpoint n's data-
|
||
base, but $nB is no longer equal to $n-1B+3. The breakpoint database
|
||
of interest to the user now has the following format:
|
||
|
||
1. $nB+0/ If nonzero the address for breakpoint n
|
||
2. $nB+1/ The conditional break instruction (break if skips)
|
||
3. $nB+2/ The proceed count (break on transition to 0)
|
||
4. $nB+3/ If greater than or equal to zero then the address to be
|
||
displayed
|
||
|
||
The rest of the breakpoint data base should not be of use to the user.
|
||
|
||
|
||
9.4 Unsolicited breakpoints
|
||
|
||
DDT has a new breakpoint facility - the ability to handle unsolicited
|
||
breakpoints (i.e., breakpoints that DDT did not itself set). If con-
|
||
trol passes to location $0BPT+1 ($0BPT is a global DDT symbol) then
|
||
DDT will act as if a breakpoint had been set at the address-1 con-
|
||
tained in location $0BPT. The address in $0BPT must be setup as if the
|
||
cpu executed a JSR $0BPT instruction - if in section 0 then flags,,PC
|
||
otherwise just global 30-bit PC. After "hitting" an unsolicited
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 14
|
||
Breakpoints
|
||
|
||
|
||
breakpoint the user can proceed with program execution with the $P
|
||
command (all arguments to the $P command such as proceed count or
|
||
auto-proceed ($$P) are ignored).
|
||
|
||
Although this facility gives programs the ability to cause breakpoints
|
||
at any time (thus getting into DDT with the program state carefully
|
||
preserved) it is intended to be of most use in conjunction with an as-
|
||
yet-unimplemented monitor command (such as control-D) to "force" a
|
||
breakpoint on a program without having to control-C/DDT the program.
|
||
Then the user could simply continue with the program by typing $P.
|
||
|
||
|
||
10.0 Single-stepping the program
|
||
10.0 Single-stepping the program
|
||
10.0 Single-stepping the program
|
||
10.0 Single-stepping the program
|
||
10.0 Single-stepping the program
|
||
10.0 Single-stepping the program
|
||
|
||
The $X DDT command has been significantly modernized (and sped up in
|
||
general) with version 42/42B of DDT.
|
||
|
||
10.1 New opcodes
|
||
|
||
The ADJSP, DADD, DSUB, DMUL, and DDIV instructions have been added to
|
||
DDT's $X table although double- and quad-word integers (for DADD etc.)
|
||
are still typed out as two or four single words rather than one big
|
||
multiple precision integer. All of the extended JRST-class instruc-
|
||
tions are correctly simulated/traced. A user-UUO being executed in a
|
||
non-zero section is simply XCT'ed and is not traced.
|
||
|
||
10.2 Byte-manipulation typeout
|
||
|
||
A rudimentary byte-manipulation-instruction typeout facility was added
|
||
(to DDT version 40 actually) to display the byte pointer and the con-
|
||
tents of the effective address of the byte pointer. The EXTEND-class
|
||
instructions are not handled.
|
||
|
||
10.3 Effective address calculation
|
||
|
||
DDT now always calculates the effective address of the instruction
|
||
being $X'ed rather than just blindly "doing it" in order to both pre-
|
||
vent DDT from getting an illegal memory reference as well as to make
|
||
DDT be independent of the section in which the user PC resides (i.e.,
|
||
DDT does not have to be mapped into the user PC section to handle
|
||
$X'es although if the user PC is in a non-zero section then DDT must
|
||
be in a non-zero section). Besides, it's usually faster too!
|
||
|
||
10.4 KS-10 I/O instruction trace
|
||
|
||
The KS-10 specific I/O instructions which reference the UNIBUS
|
||
(executive mode only) are not traced, only the contents of the regis-
|
||
ter specified in the AC field are displayed. Since the UNIBUS device
|
||
registers can be reference-volatile (i.e., merely referencing one can
|
||
cause it to change - such as the DL-11 data registers) DDT does not
|
||
typeout the contents of the referenced UNIBUS address. Further, since
|
||
the effective address of the instruction is not calculated in a stan-
|
||
dard format (at least as far as DDT is concerned) the effective ad-
|
||
dress itself is not even displayed.
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 15
|
||
Single-stepping the program
|
||
|
||
|
||
10.5 PC skipping
|
||
|
||
If the user instruction being $X'ed skips then DDT will now typeout
|
||
"<SKIP>" if the PC skips by one location, or "<SKIP n>" if the PC
|
||
skips by n locations, where n is less than or equal to the DDT
|
||
assembly parameter SKPMAX (by default 3). If the PC changes more
|
||
drastically than that (e.g., goes to a smaller address) DDT will type
|
||
"<JUMP> instead.
|
||
|
||
10.6 ERCAL/ERJMP
|
||
|
||
DDT (TOPS-20 only) will now handle instructions followed by either an
|
||
ERCAL or an ERJMP instruction (which is really just a 72-bit instruc-
|
||
tion with two effective addresses). If the instruction being executed
|
||
does not take the error jump then DDT will print "<ERSKP>" after the
|
||
normal instruction trace to indicate to the user that an ERCAL or
|
||
ERJMP was just skipped (i.e., the PC incremented by 2 rather than 1)
|
||
and will not display the ERCAL or ERJMP instruction. If the instruc-
|
||
tion does take the error jump then the ERCAL or ERJMP instruction will
|
||
be displayed, if an ERCAL instruction then register 17 will also be
|
||
displayed, and the PC will be changed to the error address.
|
||
|
||
DDT will print "<ERSKP>" rather than showing the ERCAL or ERJMP in-
|
||
struction since DDT has no way of telling whether or not the
|
||
instruction itself caused the skip (as in a SKIPA) or if the PC merely
|
||
"fell through" the ERCAL or ERJMP instruction (as in a successful
|
||
MOVE).
|
||
|
||
Users of EDDT and MDDT should be cautioned about $Xing instructions
|
||
followed by an ERCAL or ERJMP in non-zero sections - the monitor has a
|
||
tendency to transfer control to the error address in section 0, which
|
||
will cause a BUGHLT because DDT (running in executive mode) does non-
|
||
zero section things thinking it is still in a non-zero section.
|
||
|
||
10.7 $X'ing an INIT
|
||
|
||
DDT will now let the user $X an INIT (TOPS-10) monitor call. DDT will
|
||
print out <SKIP 2> if the INIT fails or <SKIP 3> if the INIT succeeds.
|
||
|
||
|
||
10.8 $X speed up
|
||
|
||
By building into DDT a table of instructions which can cause the state
|
||
of the known world to change, and assuming the state of the world does
|
||
not change if the instruction being $X'ed is not so marked, the time
|
||
required to $X an instruction is cut by roughly a factor of 10. This
|
||
results in a dramatic performance increase especially for EDDT on KL-
|
||
10's where waiting for the console front end to switch between secon-
|
||
dary and primary protocol is very time-consuming.
|
||
|
||
10.9 Repetitive $X'es
|
||
|
||
The $$X command now takes an optional address range. Normally $$X will
|
||
terminate when the user PC inclusively enters the range .+1 to .+
|
||
SKPMAX (default value of SKPMAX is 3). The user may specify
|
||
lwr<upr>$$X where lwr is the lower address boundary and upr is the
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 16
|
||
Single-stepping the program
|
||
|
||
|
||
upper address boundary which, if the user PC ever inclusively enters
|
||
the range so specified, terminates the $$X. If only lwr is specified
|
||
then upr defaults to lwr+SKPMAX. This command is very useful for re-
|
||
covering from having $X'ed a (for example) PUSHJ instead of having
|
||
$$X'ed the (for example) PUSHJ.
|
||
|
||
10.10 Fast $$X'es
|
||
|
||
The $$X command has been enhanced to allow the user to specify that
|
||
much of the $$X "paranoia" be bypassed. The high-speed $$X command is
|
||
$$1X, which causes DDT to not "restore the state of the world" prior
|
||
to each instruction $Xed. This is usually not a problem unless the
|
||
code being $$Xed modifies the PSI system, terminal characteristics, or
|
||
the like.
|
||
|
||
10.11 $X'ing from instr$X
|
||
|
||
If the user $X'es a return from a subroutine which was entered by
|
||
doing an instr$X (for example "PUSHJ P,SUBRTN$X where SUBRTN has a
|
||
breakpoint in it) then DDT simply "returns" from the original instr$X
|
||
rather than proceding to $X the internals of DDT itself. This is a
|
||
very obscure condition so don't worry too much about it.
|
||
|
||
10.12 $$X status
|
||
|
||
DDT will now respond to a ? character being typed during an $$X se-
|
||
quence by typing "Executing: " followed by the current user "pc" and
|
||
instruction being executed. Typing any other character terminates the
|
||
$$X immediately.
|
||
|
||
10.13 $X PC
|
||
|
||
The $. command now acts like the . command only $. returns the value
|
||
of the $X PC (i.e., the address of the next instruction to be $X'ed).
|
||
The $$. command returns the previous $. value (useful for $$.<$$X as
|
||
in section 10.9 above).
|
||
|
||
|
||
11.0 Searches
|
||
11.0 Searches
|
||
11.0 Searches
|
||
11.0 Searches
|
||
11.0 Searches
|
||
11.0 Searches
|
||
|
||
Most of the differences in how DDT handles searches are simply bug
|
||
fixes, not major changes in the logic of searching.
|
||
|
||
11.1 Non-existant pages
|
||
|
||
DDT now simply skips over pages which don't exist in the address space
|
||
being searched, rather than terminating the search as soon as a hole
|
||
has been found.
|
||
|
||
11.2 Effective address searches
|
||
|
||
Since almost all address calculations start with an IFIW basis (with
|
||
the exceptions being such things as interrupt vectors and the like on
|
||
KL-10's or KS-10's), DDT will assume that each word it examines is an
|
||
instruction and perform an IFIW effective address calculation. The
|
||
final result must match in all 30 bits (actually internally DDT will
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 17
|
||
Searches
|
||
|
||
|
||
do a full 36-bit compare so the address being searched for had better
|
||
not contain anything in bits 0 to 5).
|
||
|
||
11.3 Address limit defaults
|
||
|
||
With the advent of extended addressing and physical addressing the
|
||
address limits are defaulted somewhat differently than from previous
|
||
versions of DDT:
|
||
|
||
1. EDDT, MDDT (TOPS-20 only), UDDT, and VMDDT
|
||
|
||
1. Lower Limit: <current section>,,0
|
||
2. Upper Limit: <current section>,,777777
|
||
|
||
2. FILDDT looking at an .EXE file
|
||
|
||
1. Lower Limit: 0
|
||
2. Upper Limit: highest virtual address mapped
|
||
|
||
3. FILDDT looking at a data file
|
||
|
||
1. Lower Limit: 0
|
||
2. Upper Limit: highest word written in file
|
||
|
||
4. FILDDT looking at disk structure/unit
|
||
|
||
1. Lower Limit: 0
|
||
2. Upper Limit: highest word in disk structure/unit
|
||
|
||
5. FILDDT looking at runing monitor
|
||
|
||
1. Lower limit: 0
|
||
2. Upper limit: 777777
|
||
|
||
6. FILDDT looking at physical memory (TOPS-10 only)
|
||
|
||
1. Lower Limit: 0
|
||
2. Upper Limit: Highest extant memory address
|
||
|
||
As with any defaults not all cases will be properly "guessed" by DDT.
|
||
In particular if the user has mapping or address relocation in effect
|
||
the virtual address range so produced may have nothing whatsoever in
|
||
common with the address limit defaults chosen by DDT.
|
||
|
||
11.4 Search matches
|
||
|
||
DDT will leave each address matched by its search on the "pc stack"
|
||
available to $<CR> etc. commands. When the search is terminated DDT
|
||
will set "." to the last address searched.
|
||
|
||
11.5 Searching status
|
||
|
||
DDT will now respond to a ? character being typed during a search by
|
||
typing "Searching: " followed by the current location and value being
|
||
searched. Typing any other character terminates the search immediate-
|
||
ly.
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 18
|
||
Watching
|
||
|
||
|
||
12.0 Watching
|
||
12.0 Watching
|
||
12.0 Watching
|
||
12.0 Watching
|
||
12.0 Watching
|
||
12.0 Watching
|
||
|
||
DDT allows the user to "watch" a location, waiting for it to change.
|
||
Although primarily useful for FILDDT'ing the running monitor, it is
|
||
present in all flavors fo DDT for completeness. The syntax of the
|
||
watching command is exp$V, where exp is the address to be watched. If
|
||
no explicit address is specified the last location opened by the user
|
||
will be used.
|
||
|
||
Upon initial issuance of the $V command the location is displayed.
|
||
Thereafter the location is continuously monitored, and will be
|
||
displayed every time its contents change. In user mode DDTs (and this
|
||
includes TOPS-20 MDDT as well) the location is checked once a clock
|
||
tick (approximately 50 to 60 times a second), in exec mode EDDT the
|
||
location is continuously being monitored - no "pause" is attempted.
|
||
|
||
DDT will respond to a ? character being typed during an $V sequence by
|
||
typing "Watching: " followed by the current location and contents be-
|
||
ing watched. Typing any other character terminates the $V immediately.
|
||
|
||
|
||
|
||
13.0 Zeroing memory
|
||
13.0 Zeroing memory
|
||
13.0 Zeroing memory
|
||
13.0 Zeroing memory
|
||
13.0 Zeroing memory
|
||
13.0 Zeroing memory
|
||
|
||
The algorithm used by DDT previous to version 42/42B has only limited
|
||
usefulness in today's modern virtual world (especially on TOPS-20). A
|
||
new command has been implemented - lwr<upr>exp$z where lwr is the
|
||
lowest (starting) address, upr is the highest (ending) address, and
|
||
exp is the 36-bit quantity to deposit in each word inclusively bounded
|
||
by lwr and upr. Both lwr and upr must be specified. If exp is not
|
||
specified then 0 is used as the default. This command completely su-
|
||
persedes the older $$Z command, which has been removed from DDT ver-
|
||
sion 42B.
|
||
|
||
A special note: The creation of zeroed pages (which formerly were non-
|
||
existent) by the $Z command is under the control of the automatic page
|
||
create flag (i.e, the $1W and $$1W commands - see section 3.3.2).
|
||
|
||
DDT will now respond to a ? character being typed during an $Z
|
||
sequence by typing "Zeroing: " followed by the current location and
|
||
value being "zeroed". Typing any other character terminates the $Z
|
||
immediately.
|
||
|
||
|
||
14.0 Special masks
|
||
14.0 Special masks
|
||
14.0 Special masks
|
||
14.0 Special masks
|
||
14.0 Special masks
|
||
14.0 Special masks
|
||
|
||
DDT version 42/42B (it actually started with DDT version 40) has sev-
|
||
eral new "masks" (for lack of a better name and/or command) of inter-
|
||
est to the user.
|
||
|
||
14.1 $0M - Search mask
|
||
|
||
The operation of the search mask continues unchanged. The search mask
|
||
may now be referenced by either the $M (old style) or the $0M com-
|
||
mands. The default value remains 777777777777.
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 19
|
||
Special masks
|
||
|
||
|
||
14.2 $1M - TTY control mask
|
||
|
||
This mask controls special TTY behavior (primarily TOPS-10 and exec
|
||
mode EDDT).
|
||
|
||
14.2.1 $Y command echo
|
||
Bit 15 controls the echoing of command input from $Y command files. A
|
||
0 selects command file echoing (the default case); a 1 supresses
|
||
command file echoing.
|
||
|
||
14.2.2 Breakpoint printout
|
||
Bit 16 controls the automatic printing of the breakpoint instruction.
|
||
A 0 selects the printing of the breakpoint instruction on occurance of
|
||
a breakpoint (the default case); a 1 supresses the printing of the
|
||
breakpoint instruction.
|
||
|
||
14.2.3 Tab separator display
|
||
Bit 17 controls whether DDT will print its usual <TAB> or three spaces
|
||
for the <TAB> separator. A 0 (the default) selects three spaces, a 1
|
||
selects a <TAB>.
|
||
|
||
14.2.4 Tab simulation
|
||
Bit 34 controls tab simulation. A 0 selects literal <TAB> characters
|
||
(i.e., the terminal handles <TAB>'s directly, a 1 selects space-fill
|
||
instead. This condition is automatically set for user mode DDT's (in
|
||
user mode <TAB>s are always output literally) - it is only useful to
|
||
manually set tab simulation in exec mode EDDT.
|
||
|
||
14.2.5 Rubout control
|
||
Bit 35 controls rubout (and ^W) operation. A 0 selects "hardcopy"
|
||
operation (DDT will echo a "\" character and the character being
|
||
deleted), a 1 will cause rubouts to echo as a backspace, space, back-
|
||
space sequence. This condition is automatically set for user mode
|
||
DDT's (if TTY DISPLAY (TOPS-10 only) is set then rubouts echo as
|
||
<BS><SP><BS>) - it is only useful to manually set fancy rubouts in
|
||
exec mode EDDT.
|
||
|
||
14.3 $2M - Offset range
|
||
|
||
The 36-bit "mask" in this case is really a value, used as the maximum
|
||
offset allowable for typing addresses in the form symbol+offset. The
|
||
default offset is 1000 (octal).
|
||
|
||
14.4 $3M - Byte mask
|
||
|
||
This mask is used in conjunction with the $O command for typing bytes
|
||
in a word that are not necessarily evenly spaced. Whenever an $O com-
|
||
mand is issued without an explicit byte size the byte boundaries are
|
||
determined by one-bits in the byte mask - each one bit in the byte
|
||
mask marks the low order bit of a byte. Bit 35 is always considered
|
||
on. The default value is 0 (i.e., one 36-bit byte). For example the
|
||
DDT command 040100200401$3M sets the byte mask for typing right-justi-
|
||
fied 8-bit bytes (preceded by the leading 4-bit byte).
|
||
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 20
|
||
RADIX-50 symbol typein
|
||
|
||
|
||
15.0 RADIX-50 symbol typein
|
||
15.0 RADIX-50 symbol typein
|
||
15.0 RADIX-50 symbol typein
|
||
15.0 RADIX-50 symbol typein
|
||
15.0 RADIX-50 symbol typein
|
||
15.0 RADIX-50 symbol typein
|
||
|
||
Since prehistoric times DDT has supported RADIX-50 symbol typein, but
|
||
that fact was never documented. The syntax for using a RADIX-50 symbol
|
||
as an 36-bit item in an expression is sym$5" where sym is the desired
|
||
RADIX-50 symbol. For example, to search for all occurences of the
|
||
symbol PAT.. the DDT commands 37777,,-1$M (only look at low-order 32
|
||
bits) and PAT..$5"$W suffice.
|
||
|
||
|
||
16.0 New DDT runtime information
|
||
16.0 New DDT runtime information
|
||
16.0 New DDT runtime information
|
||
16.0 New DDT runtime information
|
||
16.0 New DDT runtime information
|
||
16.0 New DDT runtime information
|
||
|
||
|
||
16.1 Exec-mode machine state
|
||
|
||
Several new words have been added to DDT's runtime table describing
|
||
the state of the machine upon (executive mode only) DDT-entry. These
|
||
words are all accessible via the DDT command $I+offset (not available
|
||
in FILDDT):
|
||
|
||
1. $I-01/ APR CONI word
|
||
2. $I+00/ PI CONI word
|
||
3. $I+01/ Mask of PI channels turned off by EDDT
|
||
4. $I+02/ Executive virtual address of EPT
|
||
5. $I+03/ Executive virtual address of UPT
|
||
6. $I+04/ Executive virtual address of CST
|
||
7. $I+05/ Executive virtual address of SPT
|
||
8. $I+06/ Original AC-block word (DATAI PAG) if acb$4U
|
||
|
||
|
||
16.2 Error typeout
|
||
|
||
DDT will now sporadically issue a short textual error message for
|
||
certain error conditions (e.g., trying to write in a write-locked
|
||
page).
|
||
|
||
The $? command will type out the last DDT error; the $$? command
|
||
(TOPS-20 only) will type out (ERSTR JSYS) the last process (JSYS)
|
||
error.
|
||
|
||
|
||
17.0 Obsolete commands
|
||
17.0 Obsolete commands
|
||
17.0 Obsolete commands
|
||
17.0 Obsolete commands
|
||
17.0 Obsolete commands
|
||
17.0 Obsolete commands
|
||
|
||
The executive mode paper tape facilities (^R, $J, and $L DDT commands)
|
||
are no longer supported. The code has been removed from the source
|
||
file.
|
||
|
||
|
||
18.0 New exec-mode support
|
||
18.0 New exec-mode support
|
||
18.0 New exec-mode support
|
||
18.0 New exec-mode support
|
||
18.0 New exec-mode support
|
||
18.0 New exec-mode support
|
||
|
||
The exec-mode support for EDDT has been enhanced in several ways.
|
||
|
||
18.1 Typeahead
|
||
|
||
The exec-mode user can now typeahead while EDDT is typing out, EDDT
|
||
will periodically "poll" the command input terminal to see if anything
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 21
|
||
New exec-mode support
|
||
|
||
|
||
has been typed, and will "buffer" any such typeahead internally. Note
|
||
that this does not apply to such things as searchs where typeahead
|
||
will still cause the search to be aborted (unless "?" is typed).
|
||
|
||
18.2 XON/XOFF
|
||
|
||
EDDT now supports the XON/XOFF protocol. Typing XOFF (^S) will cause
|
||
EDDT to freeze terminal output; Typing XON (^Q) will cause EDDT to
|
||
resume terminal output.
|
||
|
||
18.3 Output suppression
|
||
|
||
EDDT now supports output suppression a la ^O. Typing ^O will toggle
|
||
the output suppression - the first ^O causes output to be discarded,
|
||
the second ^O causes output to resume, etc.
|
||
|
||
|
||
19.0 FILDDT startup and commands
|
||
19.0 FILDDT startup and commands
|
||
19.0 FILDDT startup and commands
|
||
19.0 FILDDT startup and commands
|
||
19.0 FILDDT startup and commands
|
||
19.0 FILDDT startup and commands
|
||
|
||
FILDDT is a special version of DDT with the facilities for "DDT'ing"
|
||
address spaces other than its own, such as disk files and in particu-
|
||
lar .EXE files. FILDDT has existed for years but has always been off
|
||
in the background as a specialized "tool" for the exclusive use of
|
||
monitor programmers looking at crash dumps. With DDT version 42 FILDDT
|
||
is now a general purpose utility for use by the "general public",
|
||
particularly people who have databases resident in disk files (.REL
|
||
files for example).
|
||
|
||
19.1 Symbols
|
||
|
||
Out of efficiency considerations FILDDT builds the symbol table(s) it
|
||
will actually use at runtime in its own address space. Virgin FILDDT
|
||
has no symbols (the symbol table (if any) for FILDDT in FILDDT.EXE is
|
||
completely independent of the address space being FILDDT'ed and does
|
||
not count). There are special commands to instruct FILDDT to extract
|
||
(and build internal-to-FILDDT copies of) symbol tables from .EXE files
|
||
(see below). Once FILDDT has setup its internal symbol table(s), it
|
||
may then be SAVEd with the internal symbol table(s) for later use by
|
||
exiting to monitor level (with the ^Z FILDDT command) and typing the
|
||
"SAVE" command.
|
||
|
||
19.2 TOPS-10
|
||
|
||
When FILDDT is started it will prompt "File: ". The user may at this
|
||
time optionally enter a standard TOPS-10 file specification in the
|
||
form dev:name.type[directory]/switch. At least one function switch is
|
||
mandatory. SFD's are of course legal in the directory specification.
|
||
|
||
19.2.1 /D command
|
||
The /D command or function switch instructs FILDDT that the file spec-
|
||
ified is a data file - i.e., do not map the file as an .EXE file and
|
||
use real file words 0 to 17 for locations 0 to 17.
|
||
|
||
19.2.2 /F command
|
||
The /F command or function switch instructs FILDDT to "DDT this file
|
||
anyway". It is useful only in conjunction with the /S command or func-
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 22
|
||
FILDDT startup and commands
|
||
|
||
|
||
tion switch which normally re-prompts for another file specification.
|
||
Used in conjunction with /S (which implies an .EXE file) FILDDT will
|
||
use the file from which symbols were extracted as the file to be
|
||
"DDT'ed".
|
||
|
||
19.2.3 /H command
|
||
The /H command or function switch instructs FILDDT to type out a brief
|
||
help text, abort the current command, and prompt the user for another
|
||
command.
|
||
|
||
19.2.4 /J command
|
||
The /J command or function switch is applied to a job number rather
|
||
than a file specification and instructs FILDDT to "DDT" the address
|
||
space of the job specified. Since FILDDT uses JOBPEK monitor calls to
|
||
access the specified job's address space the success or failure of any
|
||
given memory reference is dependent on the job being resident in main
|
||
memory - if the job is swapped out or if the memory reference is to a
|
||
page which is paged out the memory reference will fail. This is a
|
||
privileged command.
|
||
|
||
19.2.5 /M command
|
||
The /M command or function switch instructs FILDDT to "DDT" the
|
||
currently running monitor and physical memory address space (con-
|
||
trolled by use of the $U and $$U commands). This is a privileged
|
||
command.
|
||
|
||
19.2.6 /P command
|
||
The /P command or function switch instructs FILDDT to enable for writ-
|
||
ing as well as reading the specified address space. Note that DDT's
|
||
internal fake registers are always writable.
|
||
|
||
19.2.7 /S command
|
||
The /S command or function switch instructs FILDDT to only extract the
|
||
symbol table from the file specified, replacing any symbol table
|
||
FILDDT may already have. Unless overridden by the inclusion of a /F
|
||
command FILDDT will, after having read the symbol table, again prompt
|
||
the user for the next FILDDT command.
|
||
|
||
19.2.8 /U command
|
||
The /U command or function switch is applied to a file structure or
|
||
disk unit only rather than a complete file specification and indicates
|
||
to FILDDT that the user wants the entire physical address space repre-
|
||
sented by that file structure or disk unit name independent of any
|
||
"file structure mapping" normally imposed by the monitor. This is a
|
||
privileged command.
|
||
|
||
19.3 TOPS-20
|
||
|
||
FILDDT on TOPS-20 runs in native mode, and in particular, uses the
|
||
PMAP monitor call for all regular file access. FILDDT will also type a
|
||
brief message telling what address space is about to be "DDT'ed" be-
|
||
fore going into DDT mode.
|
||
|
||
19.3.1 DRIVE command
|
||
The format of the DRIVE command is:
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 23
|
||
FILDDT startup and commands
|
||
|
||
|
||
DRIVE (FOR PHYSICAL I/O IS ON CHANNEL) c (CONTROLLER) k (UNIT) u
|
||
|
||
The DRIVE command allows examination of the disk unit u on system
|
||
channel c on channel controller k without regard for whether it is
|
||
mounted as part of a file structure, or indeed whether it even has the
|
||
necessary information so that it could be so mounted (as if the HOME
|
||
blocks were wiped out). If, however, the drive is part of a mounted
|
||
file structure, FILDDT will type a message indicating the structure to
|
||
which it belongs. This is a privileged command.
|
||
|
||
19.3.2 ENABLE DATA-FILE command
|
||
The ENABLE DATA-FORMAT command instructs FILDDT to treat the file as
|
||
pure data, even if a valid .EXE directory is detected, and in particu-
|
||
lar to use real file words 0 to 17 as locations 0 to 17.
|
||
|
||
19.3.3 ENABLE PATCHING command
|
||
The ENABLE PATCHING command instructs FILDDT to enable any
|
||
subsequently specified address space for patching (writing). This com-
|
||
mand is ignored when looking at the running monitor since there is no
|
||
monitor call to "poke" the running monitor.
|
||
|
||
19.3.4 EXIT command
|
||
The EXIT command instructs FILDDT to return to command level. If
|
||
FILDDT has an internal symbol table (due to a previous LOAD or GET
|
||
FILDDT command) then a SAVE command will save FILDDT with the symbols
|
||
pre-loaded.
|
||
|
||
19.3.5 GET command
|
||
The format of the GET command is:
|
||
|
||
GET (FILE) filespec (optional switches)
|
||
|
||
The GET command instructs FILDDT to set up the disk file filespec as
|
||
the address space to be "DDT'ed", as modified by the optional switches
|
||
or previous ENABLE commands. The available switches are:
|
||
|
||
19.3.5.1 /DATA - The /DATA switch is equivilent to a previous ENABLE
|
||
DATA-FILE command.
|
||
|
||
19.3.5.2 /PATCH - The /PATCH switch is equivilent to a previous ENABLE
|
||
PATCHING command.
|
||
|
||
19.3.5.3 /SYMBOL - The /SYMBOL switch instructs FILDDT to extract sym-
|
||
bols from the specified .EXE file before "DDT'ing" the file, discard-
|
||
ing any symbols that FILDDT may already have. This switch is legal
|
||
only with .EXE files.
|
||
|
||
19.3.6 HELP command
|
||
The HELP command instructs FILDDT to type out a short summary of the
|
||
available FILDDT commands.
|
||
|
||
19.3.7 LOAD command
|
||
The format of the LOAD command is:
|
||
|
||
LOAD (SYMBOLS FROM) filespec
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 24
|
||
FILDDT startup and commands
|
||
|
||
|
||
The LOAD command instructs FILDDT to extract symbols from the disk
|
||
file filespec, which must be an .EXE file, then to return to FILDDT
|
||
command level. This command is legal only for .EXE files.
|
||
|
||
19.3.8 PEEK command
|
||
The PEEK command instructs FILDDT to use the currently running monitor
|
||
as the address space to be "DDT'ed". The address space so available is
|
||
currently limited to monitor executive virtual addresses 0 to 777777,
|
||
since the PEEK monitor call will only accept 18-bit address arguments
|
||
for executive virtual addresses. Physical memory addressing is not
|
||
available. This is a privileged command.
|
||
|
||
19.3.9 STRUCTURE command
|
||
The format of the STRUCTURE command is:
|
||
|
||
STRUCTURE (FOR PHYSICAL I/O IS) str:
|
||
|
||
The STRUCTURE command instructs FILDDT to use as the address space to
|
||
be "DDT'ed" the entire disk file structure str independent of any
|
||
"file structure mapping" normally imposed by the monitor. This is a
|
||
privileged command.
|
||
|
||
19.4 Defaults
|
||
|
||
Following is a list of the various defaults supplied by FILDDT:
|
||
|
||
1. DSK: is the default file device unless super I/O is specified
|
||
(which requires an explicit file structure or disk unit name).
|
||
2. .EXE is the default file type or extension unless either a data
|
||
file or super I/O is specified, in which case there is no default
|
||
file type or extension.
|
||
3. The default directory is the user's default directory.
|
||
4. The specified address space is read-only.
|
||
5. If "DDT'ing" an .EXE file and FILDDT does not already have a
|
||
symbol table, extract the symbol table (if any) from the .EXE
|
||
file first.
|
||
6. If "DDT'ing" an .EXE file and the symbol CRSHAC (if TOPS-10) or
|
||
BUGACS (if TOPS-20) exists, give a "free" CRSHAC$5U or BUGACS$5U
|
||
command. If the CRSHAC/BUGACS symbol does not exist then use file
|
||
words 0 to 17 (if any) as mapped by the .EXE directory for loca-
|
||
tions 0 to 17. For TOPS-20 only, if the symbol SPT exists then
|
||
also give a free SPT$6U command as well.
|
||
|
||
|
||
19.5 Other FILDDT-specific commands
|
||
|
||
Following are the commands which are unique (or different) to FILDDT.
|
||
|
||
19.5.1 ^E command
|
||
The ^E command instructs FILDDT to exit the current address space and
|
||
prompt the user for a new address space. The ^E command is equivilent
|
||
to a ^Z, START command sequence.
|
||
|
||
19.5.2 ^Z command
|
||
The ^Z command instructs FILDDT to exit to monitor level after having
|
||
written out any changes to the current file (if any). It is most
|
||
DDT42B - DDT %42B(324) User's Guide to New Features Page 25
|
||
FILDDT startup and commands
|
||
|
||
|
||
important that the user exit only via ^Z (or ^E which does an implicit
|
||
^Z) in order to guarantee the integrity of the file data (if any) - a
|
||
^C can leave a file in an indeterminate state (some changes written
|
||
out to the disk and some not).
|
||
|
||
19.5.3 I/O errors
|
||
Should FILDDT incur an I/O error reading or writing a disk file, a
|
||
warning message will be issued but FILDDT will otherwise ignore the
|
||
error. This is to allow the user the ability to manually fix a file
|
||
with bad data by rewriting the data correctly (hoping the rewriting
|
||
operation clears the error condition - if the physical disk surface
|
||
itself is at fault, then it is probably hopeless).
|
||
|
||
|
||
[End of DDT42B User's Guide]
|
||
|