On Feb 27, 12:21, Andreas Freiherr wrote:
Darn! - I disassembled the whole stuff manually
yesterday evening!
:-) I apologise for the slightly non-standard syntax used, notably for
octal constants; it was rewritten for (and then assembled by) a home-grown
cross-assembler.
Non-obvious is that only two sectors (1 and 3) need to
be read: the code
in the manual continues up to sector 7 (constant in word 2124, or in
your copy, at 1124), in steps of 2 (BTW, why are even sectors skipped?).
I think there were actually three errors in my original copy. Anyway, the
version on my website is now correct. It's not the only way to do it, I've
seen other versions (there are similar versions, not identical, but
interestingly enough with mostly the same errors, in various RT-11 manuals,
the Microcomputer Peripherals Handbook, and the RX02 Pocket Service Guide).
The reason for the number of sectors is that you can use the same bootstrap
with trivial alterations for a single-density boot, but then you need four.
sectors, not two. The reason for missing the even-numbered sectors is
because they are software interleaved to give time for the memory transfers
between reads.
The most non-obvious error is using the word at
location 1132 either as
a HALT instruction (when aborting bootstrap due to an error detected by
one of the BMIs) or as a constant to load into R0 (when finishing
bootstrap and passing control to address zero, for which a CLR PC is an
excellent JMP @#0 replacement). My copy of the LSI-11 manual had this
completely wrong - it would fail to abort properly.
Some versions actually have the HALT elsewhere. I once spent ages trying
to work out the shortest variation on this bootstrap, IIRC I managed to
save just one word.
Starting the bootstrap might be easiest with a 1000G
(or in the original
copy, 2000G). one command shorter than setting R7 to 1000 and then
<P>roceeding.
The reason for the <P> instead of <G> is to avoid a bus reset, which makes
the RX02 and some processors "do things". And you're supposed to disable
interrupts by setting a mask in RS first. It doesn't use the stack,
though, and any decent second-stage boot should set R6, so I suspect that's
redundant.
I'm surprised your version starts at 2000. By convention, all normal
bootstraps and similar start at 1000 -- the best-known exceptions being
XXDP code (starts at 200, same as on a PDP-8) and the TS11 bootstrap which
starts at 10000 (to allow space for larger tape blocks).
--
Pete Peter Turnbull
Network Manager
University of York