Octal Debugging Technique
Encyclopedia
On-line Debugging Tool, or ODT, was the name of several debugger
programs originally developed for DEC
hardware. Various operating system
s including OS/8
, RT-11
, RSX-11
, and RSTS/E
implemented ODT as did the firmware
console of all of the LSI-11-family processors including the 11/03, 11/23/24, 11/53, 11/73
, and 11/83/84.
The debugger allowed access to memory using octal
addresses and data. Within the software system
s, the debugger accessed the process's virtual memory
. The firmware console implementation accessed physical memory.
ODT is a non-symbolic debugger and implements similar functionality to adb on Unix
systems.
Access to console ODT is obtained either from power up (with appropriate power up mode selected), by the execution of a HALT instruction in kernel mode, or by use of the front panel halt switch or button.
{| class="wikitable"
|-
! Command
! Effect
|-
| / or a/
| Opens the current memory location or a if specified
|-
|
| Close currently open location or register
|-
|
| Close currently open location or register and open next
|-
| P
| Proceed, execute next instruction with no imlied reset If the halt switch is down this is allows for single steppinng
|-
|G
| Load PC with, reset and commence execution at address
|-
| Rn/ or $n/
| Open register n
|-
| RS/ or $S/
| Open PSW
|}
If console ODT encounters a bus timeout it displays ?
001002 xxxxxx 101
001004 xxxxxx 177566
001006 xxxxxx 137
001010 xxxxxx 1000
>R7/xxxxxx 1000
>RS/340
This deposits the program
MOVB 'A', @#177566 ; Move 'A' into console transmit register
JMP @#1000 ; Jump back to start
The deposit to the PC, sets the PC to the start of the program and the deposit to the PSW locks out interrupts.
The effect of this will be to write a stream of "A" to the console. As there is no check for transmitter ready, it is highly probable that a large number of garbage characters will be displayed.
ODT is implemented as code that is linked with a task using the Task Builder /DA switch.
TKB HELLO/DA,HELLO/CR=HELLO
Once any task built with ODT is run ODT is invoked on entry.
RUN HELLO
ODT:TT0
_
The underscore is the standard ODT prompt.
It should be remembered that addresses in the ODT debugger are 16 bit virtual addresses in the mode in which ODT is currently operating, not the physical addresses used with console ODT.
Debugger
A debugger or debugging tool is a computer program that is used to test and debug other programs . The code to be examined might alternatively be running on an instruction set simulator , a technique that allows great power in its ability to halt when specific conditions are encountered but which...
programs originally developed for DEC
Digital Equipment Corporation
Digital Equipment Corporation was a major American company in the computer industry and a leading vendor of computer systems, software and peripherals from the 1960s to the 1990s...
hardware. Various operating system
Operating system
An operating system is a set of programs that manage computer hardware resources and provide common services for application software. The operating system is the most important type of system software in a computer system...
s including OS/8
OS/8
OS/8 was the primary operating system used on the PDP-8 minicomputer developed by Digital Equipment Corporation of Maynard, Massachusetts. OS/8 was originally called MS/8 and, for a brief time, PS/8 before Digital settled on the name OS/8 in 1971.A virtually identical version of OS/8, called...
, RT-11
RT-11
RT-11 was a small, single-user real-time operating system for the Digital Equipment Corporation PDP-11 family of 16-bit computers...
, RSX-11
RSX-11
RSX-11 is a family of real-time operating systems mainly for PDP-11 computers created by Digital Equipment Corporation , common in the late 1970s and early 1980s. RSX-11D first appeared on the PDP-11/40 in 1972...
, and RSTS/E
RSTS/E
RSTS is a multi-user time-sharing operating system, developed by Digital Equipment Corporation , for the PDP-11 series of 16-bit minicomputers. The first version of RSTS was implemented in 1970 by DEC software engineers that developed the TSS-8 time-sharing operating system for the PDP-8...
implemented ODT as did the firmware
Firmware
In electronic systems and computing, firmware is a term often used to denote the fixed, usually rather small, programs and/or data structures that internally control various electronic devices...
console of all of the LSI-11-family processors including the 11/03, 11/23/24, 11/53, 11/73
PDP-11/73
The PDP-11/73 was the third generation of the PDP-11 series of 16-bit minicomputers produced by Digital Equipment Corporation to use LSI processors...
, and 11/83/84.
The debugger allowed access to memory using octal
Octal
The octal numeral system, or oct for short, is the base-8 number system, and uses the digits 0 to 7. Numerals can be made from binary numerals by grouping consecutive binary digits into groups of three...
addresses and data. Within the software system
Software system
A software system is a system based on software forming part of a computer system . The term "software system" is often used as a synonym of computer program or software; is related to the application of systems theory approaches in software engineering context and are used to study large and...
s, the debugger accessed the process's virtual memory
Virtual memory
In computing, virtual memory is a memory management technique developed for multitasking kernels. This technique virtualizes a computer architecture's various forms of computer data storage , allowing a program to be designed as though there is only one kind of memory, "virtual" memory, which...
. The firmware console implementation accessed physical memory.
ODT is a non-symbolic debugger and implements similar functionality to adb on Unix
Unix
Unix is a multitasking, multi-user computer operating system originally developed in 1969 by a group of AT&T employees at Bell Labs, including Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy, and Joe Ossanna...
systems.
Console ODT
Console ODT replaced the lights and switches console of many of the earlier processors.Access to console ODT is obtained either from power up (with appropriate power up mode selected), by the execution of a HALT instruction in kernel mode, or by use of the front panel halt switch or button.
Commands
Console ODT commands are as follows:{| class="wikitable"
|-
! Command
! Effect
|-
| / or a/
| Opens the current memory location or a if specified
|-
|
| Close currently open location or register
|-
|
| Close currently open location or register and open next
|-
| P
| Proceed, execute next instruction with no imlied reset If the halt switch is down this is allows for single steppinng
|-
|
| Load PC with
|-
| Rn/ or $n/
| Open register n
|-
| RS/ or $S/
| Open PSW
|}
If console ODT encounters a bus timeout it displays ?
Example
@1000/ xxxxxx 112737001002 xxxxxx 101
001004 xxxxxx 177566
001006 xxxxxx 137
001010 xxxxxx 1000
>R7/xxxxxx 1000
>RS/340
This deposits the program
MOVB 'A', @#177566 ; Move 'A' into console transmit register
JMP @#1000 ; Jump back to start
The deposit to the PC, sets the PC to the start of the program and the deposit to the PSW locks out interrupts.
The effect of this will be to write a stream of "A" to the console. As there is no check for transmitter ready, it is highly probable that a large number of garbage characters will be displayed.
RSX-11M-Plus ODT
The RSX-11M-Plus ODT is essentially a superset of all other ODT implementations.ODT is implemented as code that is linked with a task using the Task Builder /DA switch.
TKB HELLO/DA,HELLO/CR=HELLO
Once any task built with ODT is run ODT is invoked on entry.
RUN HELLO
ODT:TT0
_
The underscore is the standard ODT prompt.
It should be remembered that addresses in the ODT debugger are 16 bit virtual addresses in the mode in which ODT is currently operating, not the physical addresses used with console ODT.
Commands
Command | Effect | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
. | Current location indicator i.e. address of last location opened | ||||||||||||||||||||||||||||||||||
|
Closes current location/register. If k is specified stores the value k in the currently open location before closing it. | ||||||||||||||||||||||||||||||||||
|
Closes current location/register and opens next If k is specified stores the value k in the currently open location before closing it. | ||||||||||||||||||||||||||||||||||
^ or k^ | Closes currently open location and opens immediately preceding. If k is specified stores the value k in the currently open location before closing it. | ||||||||||||||||||||||||||||||||||
_ or k_ | Opens the location calculated by using the contents of the present location as a PC relative offset if k is specified deposits the value k in the present location before opening the new location | ||||||||||||||||||||||||||||||||||
@ or k@ | As _ except using the contents of the current location as an absolute address | ||||||||||||||||||||||||||||||||||
> or k> | Treats the low order byte of the currently open location as a branch offset, calculates the destination address of the branch and opens that location. If k specified stores the value k in the currently open location before opening the new location | ||||||||||||||||||||||||||||||||||
< or k< | If the currently opened location was opened using the commands _ or > or @ closes the currently open location and reopens the location most recently opened using |
||||||||||||||||||||||||||||||||||
$n | One of the eight general purpose processor registers | ||||||||||||||||||||||||||||||||||
$x or $nx | Represents the address of one of ODT's internal registers
|
||||||||||||||||||||||||||||||||||
" or a" | Word mode ASCII ASCII The American Standard Code for Information Interchange is a character-encoding scheme based on the ordering of the English alphabet. ASCII codes represent text in computers, communications equipment, and other devices that use text... Displays contents of the location a or the currently open location as ASCII ASCII The American Standard Code for Information Interchange is a character-encoding scheme based on the ordering of the English alphabet. ASCII codes represent text in computers, communications equipment, and other devices that use text... and stores the contents of this location to $Q register. |
||||||||||||||||||||||||||||||||||
' or a' | Byte mode ASCII ASCII The American Standard Code for Information Interchange is a character-encoding scheme based on the ordering of the English alphabet. ASCII codes represent text in computers, communications equipment, and other devices that use text... |
||||||||||||||||||||||||||||||||||
% or a% | Radix50 operator. Displays the contents of the location a or the currently open location as RADIX 50 and stores the contents of this location to $Q register. | ||||||||||||||||||||||||||||||||||
/ or a/ | Word mode octal operator. operator. Displays the contents of the location a or the currently open location as octal Octal The octal numeral system, or oct for short, is the base-8 number system, and uses the digits 0 to 7. Numerals can be made from binary numerals by grouping consecutive binary digits into groups of three... and stores the contents of this location to $Q register. |
\ or a\ | Byte mode octal operator. operator. Displays the contents of the location a or the currently open location as octal Octal The octal numeral system, or oct for short, is the base-8 number system, and uses the digits 0 to 7. Numerals can be made from binary numerals by grouping consecutive binary digits into groups of three... and stores the contents of this location to $Q register. |
||||||||||||||||||||||||||||||||
k= | Evaluates the expression k, displays its value in octal and stores the result to $Q | ||||||||||||||||||||||||||||||||||
B | Removes all breakpoints from current task | ||||||||||||||||||||||||||||||||||
nB | Removes breakpoint n from current task | ||||||||||||||||||||||||||||||||||
a;nB | Sets breakpoint n at address a in user task | ||||||||||||||||||||||||||||||||||
C | Represents the contents of the $C register | ||||||||||||||||||||||||||||||||||
D | I/D systems only access D space | ||||||||||||||||||||||||||||||||||
E or kE or m;E or m;kE | Searches memory from $L (low memory limit register) to $H high memory limit register for references to the effective address specified by $A (search argument register) as masked by the value specified by $M (search mask register). If k is specified k replaces the contents of $A. If m is specified m replaces the contents of $M. References will match if they are an absolute match, a pc relative match or a branch displacement to $A. | ||||||||||||||||||||||||||||||||||
F or kF | Fills memory from $L to $H with the contents of $A. If k is specified k replaces the contents of $A before the command is executed. | ||||||||||||||||||||||||||||||||||
G or aG | Substitutes all breakpoints with BPT instructions. Restores user registers. If a is specified the PC is loaded with a, and begins executing user task. | ||||||||||||||||||||||||||||||||||
I | I and D systems only - access I space | ||||||||||||||||||||||||||||||||||
P or kP | Proceeds with program execution and stops when the end of the program or the next breakpoint is reached. If k is specified the program stops only after it has executed the next breakpoint k times. | ||||||||||||||||||||||||||||||||||
S or nS | Ececutes one instruction or n instructions if n specified. | ||||||||||||||||||||||||||||||||||
U | RSX-11M-Plus only accesses user mode memory | ||||||||||||||||||||||||||||||||||
V | Enables ODT handling of all SST vectors | ||||||||||||||||||||||||||||||||||
X | Exits user program and ODT and returns to the executive. | ||||||||||||||||||||||||||||||||||
Z | RSX-11M-Plus only accesses supervisor memory |