[Simh] Simulating the PDP-15/76 Unichannel

Bob Supnik bob at supnik.org
Tue Mar 17 16:33:29 EDT 2015


Memory semantics on the 15/76 were very simple. Neither machine had 
cache; neither machine had overlapped instruction execution; and neither 
system had locking capabilities. Therefore, the only ordering constraint 
is this:

- all memory writes in common memory must be visible (committed) before 
either system issues an IO instruction to the DR15 or DR11 (which pokes 
the other system).

That's because the ordering is based on the following software model:

PDP15:
- set up Task Control Block, set up buffers, pointers, etc.
- write TCB address to the PDP11 via the DR15.

At the point the TCB address is written, everything written to common 
memory must be visible to the PDP11.

PDP11:

- process TCB, do IO (either DMA or programmed IO)
- post an IO completion interrupt back to the PDP15 via the DR11.

At the point the interrupt is posted, everything written to common (or 
PDP15 non-common) memory must be visible to the PDP15.

For a "mashed up" implementation, I don't think the memory container 
size difference is insurmountable. The PDP11 already abstracts memory 
access to routines like Read/Write or Map_Read/Write. These can be 
conditionally compiled as needed. The RK11 likewise would require 
relatively little work, mostly in abstracting the data type used for 
rkxb, the transfer buffer.

As I said, the real problem is the global name space conflict. I didn't 
write the code with the expectation of mashups, so every simulator has a 
global M for memory, a global PC for the program counter. Because of 
code cloning, there tend to be lots of subroutines with the same names 
in every simulator. It's not insurmountable, because very little of the 
PDP11 is needed, but it's tedious and painstaking, and I don't want to 
end up having to retest the PDP-11 from scratch. That's why I ended up 
with five separate DECtape implementations rather than give skeletons 
and a common device library - it was easier at the time to clone and 
modify than to conditionalize.

/Bob


More information about the Simh mailing list