[Simh] Simulating the PDP-15/76 Unichannel
Bob Supnik
bob at supnik.org
Mon Mar 16 17:19:08 EDT 2015
This has been on the wish list for a decade.
The 15/76 Unichannel was a big PDP-15 that used a PDP-11/05 as an IO
processor to get access to inexpensive Unibus peripherals, particularly
the RK11-E/RK05, which supported 18b data, the LP11, the CR11, and
various plotters (not supported in SimH). XVM/DOS and XVM/RSX supported
the Unichannel, and standard DOS probably did as well.
The 15 and the 11 are crosscoupled through shared memory. Except for
4K-12K(W) of local memory, all of Unibus address space is mapped into
the 15's main memory. DMA transfers from the RK11-E could transfer 18b
data (using the Unibus parity lines for extra data lines); programmed IO
transfers from the IO processor transferred 16b data, zeroing out bits
0-1 on the 15.
Control is done by a DR15-C parallel interface cross-connected to two
DR11-C's in the 11. The 15 created task blocks in shared memory and
transfers an 18b pointer to the 11 via the DR15/11 parallel connection.
The 11's IO program, called PIREX, executes the directive and sends an
API interrupt back when done.
Booting is awkward but didn't happen often; both machines had core
memory that preserved program images.
The method for simulating multiple processors was demonstrated ten years
ago, but it assumed a from-the-ground-up implementation. Mashing two
simulator sources together creates serious global variable collisions
that cannot be resolved without extensive edits to one or the other
(probably the 11). This is why the HP 2100 Access dual system
configuration is simulated on two separate simulator instances that
communicate by TCP/IP. This is not practical for the 11/76 Unichannel,
because of the shared memory.
Before I venture on a detailed design of a "merged" 15/11 simulator, I
had one other thought. On today's multi-cores, it's perfectly practical
to have two simulators running side-by-side, controlled from separate
terminal windows. However, the two processes would need to share memory.
Is there some simple way to do this on both Windows and Linux? I'm sure
there's no portable solution.
/Bob
More information about the Simh
mailing list