On 01/03/18, Lars Brinkhoff wrote:
> > https://github.com/PDP-10/its-vault/blob/master/system-tape-generator
> Moved here, sorry for the confusion.
I'll copy here the explanation I gave on alt.sys.pdp10:
This code confirmed my prediction that words are assembled from half
words and then moved to memory with SETAM. Jumping out however is much
more complicated than the method I had come up with: a JRST to the
loader is put at 42 and then a CONO PI manually makes a request on
channel 1. Not that complicated itself but there's a quite a bit of code
to save and restore the previous word at 42. That could have been easier
with the JRST at 15 and a skip at 13.
Anyway, even seeing the code didn't immediately make it clear why
instructions are incremented and only executed if negative, but then it
dawned on me....for some reason I totally forogt that the UT function is
READ ALL, which means block marks and the junk word between the block
marks and the data are also read!
When I noticed that, all was clear. Block marks are numbered 0-01101,
i.e. always positive, so the first check makes sure block marks aren't
executed. Since they are so small, the left half will always be zero,
which means reverse block marks will have 777777 in the right half!
That's why one is added and the word is not executed if the right half
is zero: not to execute reverse block marks.
I'm not quite sure what the junk word between the reverse block mark and
the data is yet, see REVHAK and FWDHAK in SYSENG; SYSTEM GEN. It appears
to be a CONO most of the time, but some blocks seem to be special.
I'm not completely done with all the intricacies of the DECtape yet, but
at least this problem has been solved!
Simh mailing list