[Simh] An update on the UC15
Bob Supnik
bob at supnik.org
Mon Sep 14 13:52:14 EDT 2015
I haven't forgotten about the project. I've just been busy on other
things, like 35 years of neglected house repairs. ;)
The UC15 is another example of minimization of gates, a consequence of
how expensive gates were at the opening of the TTL era. The DR15C, which
was implemented in Flip Chips, has very little state, and it depends on
the pair of DR11Cs, which were implemented in 74H series ICs, at the
other end for quite a lot. You can't really speak of the DR15C as an
independent device separate from the DR11Cs and vice-versa.
The DR15C has the following state:
TCBP_ACK (called DONE in the schematics) - TCBP read acknowledge - set
by the PDP11 when it reads the TCB pointer register or by INIT. Cleared
by IOT 706002 and friends. Tested by IOT 706001.
XFER_REQ - set by IOT 706004 and friends. Cleared by read of DR11C#2
TCBP register. Shows up as DR11C#2 CS<7>. Cleared by INIT.
API_FLAG[0:3] - set by writes to DR11C#1 or #2 output buffers. Cleared
by INIT or CAPI0..3. Tested by SAPI0..3. Masked with IE to create API
interrupts requests. Readable on the PDP11 side in DR11C#1 input buffer.
Negated logical OR (all API clear) is DR11C#1 CS<7>.
IE - masks API_FLAG[0:3] for generating interrupt requests. Readable by
IOT 706102. Written by IOT 706122. Set by INIT.
BUF<0:17> - the output buffer (TCB pointer). Written by IOT 706004. Not
touched by INIT; initial state is unpredictable. Readable in DR11C#1 and
#2 input buffer. Not readable on the PDP15 side.
API_VEC[0:3]<0:6> - API vectors for levels 0..3. Written on PDP11 side
via DR11C#1 and #2 output buffers. Not stored in the DR15C or the PDP15.
The master/slave communications protocol is interrupt driven on both sides.
1. PDP15 writes TCBP and clears TCBP_ACK. It must poll for TCBP_ACK
first, because that flag is not wired to interrupt.
2. DR11C#2 CS<7> is set. If IE is set, the PDP11 is interrupted.
3. PDP11 reads TCBP. This clears DR11C#2 CS<7> and sets TCBP_ACK.
4. PDP11 uses address in TCBP to pick up a control block address and
executes it. Control block specifies which API level and vector to use.
5. When execution is done, PDP11 writes API vector into the appropriate
API level register.
6. If interrupts are enabled, PDP15 is interrupted. It now knows that
the device operation has completed.
The availability of four API levels means that the PDP11 can easily
process four IO requests in parallel. In fact, it can do more, by
multiplexing multiple devices onto a single API level, but in practice
there weren't that many devices on the PDP11.
The TCBP_ACK flag is only used to prevent overwriting of the PDP11s TCBP
register if multiple requests are getting queued. It should be set only
for the amount of time needed for the PDP11 to be interrupted and then
read the TCBP. The all API done flag is not used by software; in fact,
DR11C#1 CS isn't even defined in the PDP11 PIREX exec.
The UC15 supported a variety of PDP11 peripherals, but the only ones
that matter are thethe RK11/18b, and the LP11. A console port was
available for debugging, and sometimes a paper tape reader was added for
the same purpose, but they weren't visible on the PDP15 side. The
PDP11's clock was used for timing IO events but did not keep track of
daytime.
/Bob
More information about the Simh
mailing list