Ok. To start with the short version. Get back when you really want more
details.
The deal is to fake the MK11 so that it thinks there are four 256KB
cards when you have a 1MB card.
The memory bus is pretty simple. You have address lines, and card select
lines. Address lines are as usual.
Card select lines are like chip selects, or whatever you are used to in
terminology. It selects which card should respond when address and data
and other control signals are on the bus.
Usually only one card select line is active at a time.
So you have three things to deal with:
. Address lines
. Card select lines
. ECC
Address lines are pretty simple. You grab four card select lines, hook a
4-to-2 binary multiplexor in there, and you get A18,A19 from those. This
means that four adjacent cards will cause A18,A19 to be generated.
Card select lines are even simpler. You just OR the four card select
lines together, and output it on one of them. I seem to remember that
you don't need to cut anything on the backplane, but check that to be
sure. Also, you need a total of four of these special cards in order to
get 4 MB working in the MK11, but all four cards will be identical.
With that, the hardware side is done. Now, the one part left is a bit
more tricky, but it's a hardware problem with a software solution.
The MK11 (as well as the 11/750) have ECC memory. In order for the
memory to not scream bloody hell when you access it, the syndrome bits
must be set right. At power up, the MK11 initialize the syndrome bits
for all memory in the box, but it does this in a really clever way. It
runs though all addresses and do a write to them, forcing the ECC
syndrome bits to be updated.
*But*... It does this on all cards in the box in parallell. That is, all
card select lines are active at the same time, at this one instance.
The problem with that is that (obviously) not all the memory in the 1MB
memory board will be reset. By designing your small adapter card the
right way, you can get atleast the first 256KB ECC syndrome bits set
right. The rest you'll have to do by software instead, before the memory
can be used. Otherwise you'll just get parity errors if you try to
access that memory.
And, normal writes to memory won't work! The memory is 32 bits wide, and
a normal write from a PDP-11 will only write 16 bits, so it won't cause
the memory to do a blind write and just set the syndrome bits.
If you read the documentation for the MK11, you'll find that it actually
have a CSR as well, and in that, you can set bits to force writing the
syndrome bits and ignore errors. And for the initialization that's what
you need to do: set the right bits in the CSR, write to all memory
needed, and then reset the CSR again.
The last "funny" thing with this is that the CSR isn't easy to access.
All accesses to the I/O page in an 11/70 will cause the reference to run
out on the Unibus (not surprising). However, the MK11 isn't on the
Unibus. :-)
The trick is to realize that the Unibus map will always direct the
access to the memory bus, even if the final address is in the I/O page.
So, you need to setup the Unibus map to point to the I/O page, and then
access the MK11 CSR through the Unibus map.
After that, you're all done, and the MK11 with 1MB memory boards will be
happy. I've done it in the past, and it really not any more complicated
than that.
Johnny
Show replies by date