On Sun, Sep 13, 2015 at 7:44 PM, J. David Bryan <jdbryan at acm.org> wrote:
On Sunday, September 13, 2015 at 8:42, Jay West
wrote:
3) Any I/O instructions in the loader are
automatically patched during
the transfer (based on switch register bits 11 through 6) so that the
correct I/O address (device) is referenced.
It's actually a bit more nuanced than this. What occurs is:
3a) Except for halt instructions, any I/O instruction referencing select
code 10 (octal) or greater is patched by adding the select code
value in the switch register minus 10.
This means that (a) halt instructions, which are in the I/O group, are not
altered, (b) DCPC I/O instructions, which reference select codes 2, 3, 6,
or 7 are not altered, and (c) interfaces that use two select codes, e.g.,
the 7900 disc interface, get both select codes updated properly. It also
implies that all loaders are written to reference select code 10 (or 10 and
11, etc.).
3b) The two's-complement of the memory address of the first word of the
loader is stored in the last word in memory.
This is so that loaders can check that what they are loading does not
overwrite the loader itself. For example, the paper tape loader does a HLT
55 if the absolute binary tape contains a record that would overlay the
loader executable code.
3c) The contents of the penultimate memory location is patched by adding
the select code value in the switch register minus 10.
This is used to patch the select code into an optional DCPC control word,
which is a constant and not an I/O instruction and so wouldn't be patched
by (3a). Loaders that use DCPC, e.g., the disc loaders, place their DCPC
control word at this location.
There's actually quite a lot going on under the hood for that IBL button
press.
-- Dave
For the curious the source code for the Initial Binary Loader
microcode is listed on pages D-16 and D-17 of this manual:
It is reasonably well commented, but still not completely obvious
exactly what and why it is doing what it is doing without something
like Dave's explanation above.