[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