------------------------------------------------------------------
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
accumulator 0.
Then load (into the next address) 0611xx, where xx is 22 for tape
or 33 for disk. This is
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.
------------------------------------------------------------------------------------------------------------------------------------
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