MK11 with 1MB boards

Johnny Billquist johnny.billquist at synap.se
Mon Dec 29 05:35:28 CST 2008


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




More information about the cctech mailing list