Sunday, June 12, 2016

How the Point 4 IRIS Boots

This page is a part of the "Understanding IRIS" collection.  Many thanks to Tom Trebisky, for figuring this out, and sharing this with us:

------------------------------------------------------------------


The following is a conversation between Tom & his colleague Alan, who used to work with Point 4 IRIS systems.


Tom:


Since you actually used to look at and handle Point-4 computers, here is

a question for you.

How do they boot up?  I mean if you shove a tape in, how do you make it

boot from tape?
What insights do you have about how this 256 word loader would get loaded?
Why does the first bit of real code seem to be at address 0x50, does
that ring any
bells with you?

I would expect this thing to get loaded into address zero and the PC get

set to 0 to run,
but if execution started at address 0, it would run a bunch of docp
instructions, then
at address 0x40 hit a jump back to zero, hence running some endless
unwrapped loop
of just docp instructions.   It is odd that the value 0x7eff appears
like padding at the
start and end of this file or block or record or whatever you want to
call it.

The end of the block may have a clue.  It ends with an indirect jump

through 0x00fe
which would take it to the loop I found at address 0x0050.  Is this some
defined Nova
behavior?  Load a 256 word block and then set the PC to run the
instruction in the
last word?  In that case, why would it not just be a jump to 0050 itself?
________________________________________

Alan:

After having booted up the Point-4 computer about a thousand (ten or

even hundred thousand) times, I am ashamed that I cannot remember how
I did it.

What I vaguely remember is this:  from the control panel (NOVA), or

the terminal (Point-4) -

    set the address to 0375.


    Load in pattern 102400, which corresponds to SUB 0 0, which clears

    accumulator 0.

    Then load (into the next address) 0611xx, where xx is 22 for tape

    or 33 for disk.  This is DOAS 0 xx, which sends out the contents of
    accumulator 0 to channel A on device xx along with the start pulse.
    I think this sets the address of where to put the bytes in memory,
    namely address 0.

    Then load 0377, which is JMP 0377, which jumps to address 0377.


    Finally, start the cpu (at address 0375).


I don't really remember all this exactly, but what I say next is the

idea of what is supposed to happen.

The cpu clears AC0, sends that zero out to device xx.  The start pulse

tells the device to read a sector, and put it into memory starting at
address 0.  Then the cpu executes the JMP 0377, which causes it too
just loop.

When the first sector from device xx arrives in memory, and overwrites

memory location 0377, the cpu sees a new instruction (instead of the
JMP 0377).  That instruction will be a jump to a location within that
newly written memory.

What happens then is what the boot sector tells the cpu.  Namely,

    relocate this (boot) code to higher address;
    jump to that relocated code (just after the copy part);
    read in about 3 Kbytes from the next sectors of device xx;
    and, finally, jump to the execution point in the just-read kernel.

At this point, the Forth kernel is running its outer loop, and prints

the OK prompt.

This is how I remember it, and it worked, so I must be remembering OK.


Alan

------------------------------------------------------------------

I have thought a little more about what I wrote.
I said that there are three instructions to boot the system:
    SUB 0 0
    DOAS 0 xx
    JMP 0377
The more I think about this, the more I think it must be wrong.  On power reset, I think
the device channels are set to zero, so those first two instructions are not needed.  Rather,
a "1" needs to be sent to the device to tell it how many sectors to read.  So, I think, a
closer approximation to the boot instructions are:
    102520   SUBZL 0 0          which sets AC0 to 1
    0631xx   DOCS  0 xx         send AC0 to channel C, device xx  (which I think sets the sector count)
    000377   JMP 0377           loops on address 0377 until it is overwritten

All the rest should be as correct as my memory allows.

------------------------------------------------------------------

This page is a part of the "Understanding IRIS" collection.  

No comments:

Post a Comment