[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