Page Numbers: Yes X: 527 Y: 10.5" First Page: 20
Columns: 1 Edge Margin: .4" Between Columns: .4"
Margins: Top: 1.3" Bottom: 1"
Line Numbers: No Modulus: 5 Page-relative
Odd Heading:
Maxc OperationsNVIO and ODT
Even Heading:
NVIO and ODTMaxc Operations
8. NVIO AND ODT
Maxc1 only. NVIO is a Nova Input-Output package which does all the input-output for Maxc except for the disks. Specifically, it does input-output for the data line scanner, the IMP (ARPA Network), the MCA (Multiprocessor Communications Adaptor), the Ethernet, and the tape units. It also has an octal debugger called ODT (Octal Debugging Tool) which will allow the user to change memory locations in Maxc and the Nova, and perform other control functions.
8.1.Calling NVIO
NVIO can be called from Midas with the command:
6,NVIO;T
or:
!NVIO.SV/a/b ... <unitno><cr>
where /a/b etc. represents switches (of the usual Nova DOS type); and <unitno>, if it exists, is of the form ’Un’ for n=0 to 7. The NVIO startup procedure is determined by the setting of these switches, the function of each of which is now defined -- in the order in which they are tested to avoid any ambiguity caused by multiple switch settings. Most of the switches have an analogous ODT command with the same (letter) name.
/RReset the Maxc memory system. This is a fairly catastrophic operation and should be
performed only if the memory is hung up.
/BBoot Micro-Exec from Save Area 1 of disk unit n (from the ’Un’ argument), where
0=A, 1=B, ... 7=H. Unit A is used if no unit is specified.
/SStart Tenex, first booting Micro-Exec from disk as for /B and then executing an
automatic "Go" command.
/EBring in the Maxc Micro-Exec from tape unit number n (from Un) or from unit 0
if no unit is specified.
/PEnter Protect mode in ODT. This means that ODT will allow only those commands
that examine (but do not write into) memory and that do not change machine state.
/DEnter the Nova Debugger. ODT Control may be resumed by typing $P.
/HNormally NVIO now sends a "proceed" to Maxc which was probably halted before
NVIO was called. This auto-proceed can be suppressed by using the /H switch.
/WNVIO will Wait for an IORESET before proceeding.
Normally, NVIO is initially started up with the /B or /S switch set, in order to load Micro-Exec and possibly start Tenex. When it is desired to start NVIO without resuming Maxc (e.g. to examine Maxc main memory or start at an alternate address), the /H switch should be used.
8.2.ODT Commands
When NVIO is functioning, ODT (Octal Debugging Tool) is its highest priority process (only interrupts take precedence). It has two heralds, a number sign (#) which indicates that only commands that examine memory are legal, and a colon (:) which indicates all commands are legal.
If Tenex is running and no ODT commands have been typed for ten seconds, NVIO will continuously display and update the addresses and contents of five Maxc main memory variables. If you start typing on the Infoton, NVIO will stop doing this and will print the appropriate herald followed by your typein on the next line.
ODT commands consist of a single letter or other special character, optionally preceded by a numeric argument. The argument is an octal number of 16 or 40 bits (depending on the command) or an expression made up of such numbers and the operators "+" and "-". "." stands for the current (most recently displayed) memory address.
Many NVIO commands request confirmation with "...OK". The confirming character is a period. The NVIO commands marked with a superscript "1" are valid and have the same meaning in AltIO.
n] Change the current machine to the Nova; change the current memory location to n;
and print out the contents of that location.
n[ Change the current machine to Maxc; change the current memory location to n; and
print out the contents of that location in the format:
aa bbbbbb cccccc
where:
aa (0 to 17) is the last 4 bits (i.e., the "tag" bits) of the 40-bit Maxc memory word, it is not printed out if zero;
and
bbbbbb and cccccc are the left and right half 18 bits of the PDP-10 (Maxc) word.
n/1 Change the current memory location to n; and print out the contents of that location.
/ Print out the current location.
n<cr>1Put n into the current location. If the current machine is the Nova, a 16-bit number is
permissible. If the current machine is Maxc, a 40-bit number is permissible. The first
4 bits input are the last 4 bits of the memory. Thus one can think of Maxc as a 36-bit
machine (like the PDP-10), right adjusted in a 40-bit field, rather than a 36-bit
machine left adjusted in a 40-bit word as is actually the case.
This command is only legal after a command which prints out a Maxc or Nova location.
<lf>1(lf means linefeed). Change the current location to the current location plus 1, and
print out the (new) current location.
n<lf>1Equivalent to n, <carriage return>, <linefeed>.
↑1Change the current location to the current location minus 1, and print out the (new)
current location.
n↑1Equivalent to n, <carriage return>, <up arrow>.
<tab>1Change the current location to the location pointed to by the current location. Print
out its contents.
B1Boot Micro-Exec from Save Area 1 of physical disk unit A.
nB1Boot Micro-Exec from Save Area 1 of physical disk unit n (0=A, 1=B, etc.) The
parameter n is remembered for subsequent "B" commands without arguments.
D Go to the Nova Debugger. $P will resume ODT.
E Startup the Maxc Micro-Exec, loading from Tape Unit 0.
nEStartup the Maxc Micro-Exec, loading from Tape Unit n.
nG1Go to Maxc location n. Precisely: stop the Maxc microprocessor (cleanly if possible),
then tell it to begin executing PDP-10 instructions at Maxc main memory location n.
H1Halt Maxc (cleanly if possible).
IInitialize NVIO.
nIExecute initialization routine n:
0Initialize all devices
1Initialize DLS
2Reset memory system
M1Halt Maxc (cleanly if possible) and return control to Midas.
nM1Go to Microprocessor location n. (If you use this command, you had better know
what you are doing.)
P1Protect NVIO. The herald becomes a number sign (#); only those commands that
examine bmemory (and other state varibles) are legal.
nP1If the number typed is the Pass(word) number: ODT becomes unprotected; the herald
becomes a colon (:) and all commands are legal. Currently the pass(word) number is
3301; this should be easy to remember as it is the smallest number which is the sum
of two different cubes in two different ways. (143 + 13 = 113 + 123; octal of
course.)
QPrint out the current state of Maxc (running, stopped, or at a micro breakpoint).
R1Resume Maxc (the microprocessor is told to proceed). If a reset was previously done
("21M" to ODT or "21;G" to Midas), PDP-10 interpretation will begin at the starting
address pointed to by main memory location 7; otherwise, Maxc will resume from
where it was halted.
nRIf n is zero, disable Maxc main memory error recovery; NVIO will halt instantly on
any fatal Maxc error. If n is nonzero, reenable error recovery.
S1Startup Tenex, booting Micro-Exec from disk unit A.
nS1Startup Tenex, booting Micro-Exec from disk unit n (0=A, 1=B, etc.)
nTBegin Testing output on DLS line n.
nUUnhang Nova device number n by simulating a completion interrupt. If you use this
command, you had better know what you are doing.
nZStop testing DLS line n.
8.3. Nova Locations of Interest
50:Version number. This number is incremented by 100 for each assembly of NVIO.
51:Normally this location has a -1. If it has the number n in it then NVIO will PUNT if
it attempts to read or write into Maxc physical page n.
52:The pass(word) number. Currently this is set to 3301 as explained under the ODT
command P.
53:Date of most recent NVIO assembly, in the form MMDDYY, where MM and DD are
octal but YY is decimal (at least until 1978).
55:Save area to boot Micro-Exec from (usually 1).
56:Default disk unit to boot Micro-Exec from (initially 0, but changed by arguments to B
and S commands).
57:Correction for known clock error, in seconds per day. This number is positive if the
clock is known to be fast, negative if slow.
The following symbolic locations are of interest:
RTN:location of code to return to Midas. The Nova debugger
M:commands RTN$R or M$R are equivalent to the ODT command M.
BREAK:location to goto to make a save file of the current version of NVIO. After BREAK$R
is executed, control will go to the Nova Exec and the command:
SAVE name
should be executed to save NVIO on the specified file. This is normally done after
NVIO is patched by the following sequence:
DEB NVIO
make patches
BREAK$R
R
SAVE NVIO
If control goes to a debugger breakpoint after the BREAK$R is executed, this means
that there is no disk space available. Exit via RTN$R; make disk space; and repeat
patches. (Sorry!)
8.4. NVIO Punts
For each PUNT, the location at which the PUNT occurred is put into Nova register 3, and information particular to each PUNT is sometimes stored in register 0. Maxc is then halted (cleanly if possible) and "NVIO Punt" is printed on the Nova console.
Accumulators 0, 1, 2, and 3 are stored at PUNT0, PUNT1, PUNT2, and XPUNT respectively, and may be examined by going into the DOS debugger with the "D" command. After resuming NVIO with "$P", it is necessary to restart Tenex in one of the following (increasingly drastic) ways:
1)R...OK.(Simply tells Maxc to proceed).
2):21M...OK.(Resets Maxc microprocessor).
:140G...OK.(Attempts "soft" restart of Tenex).
3)S...OK.(Reloads and restarts Tenex).
More detailed information on handling NVIO punts and Nova crashes may be found in Section 2.