PDP-11: DR11-C to FPGA or 1284?

Jay Jaeger cube1 at charter.net
Tue Aug 1 15:23:49 CDT 2017

On 7/31/2017 12:52 PM, Fritz Mueller via cctalk wrote:

>> On Jul 31, 2017, at 8:19 AM, Jay Jaeger <cube1 at charter.net> wrote:
>> I have Ethernet shield for my Arduino Uno, and I use that and a simple
>> (in my case, perl,  program to talk to the final destination device.  I
>> have two cables, one for each direction, from the DR11-C (not using DMA)
>> to the Arduino.
> Awesome -- it seemed likely somebody here would have done this sort of thing already :-)
> Jay, does your Arduino support TTL-level signaling, or did you have to use some level-shifting chips?  How did you arrange the cabling/packaging?
> I'm more familiar with FPGA platforms than Arduino, but this might give me a good excuse to finally play around with Arduino a bit!
> 	--FritzM.

Others have already addressed the signal level issue.  Not a problem.
When I (recently) developed the Arduino version, I checked the current
sink/source current specs to make sure I wasn't going to blow anything up.

I have posted my code (and pinouts) on Google Drive at:


Please read the readme files!  ALL of them (except maybe the PC Parallel
port one).

I would not mind comments/suggestions for improvement if delivered
gently, but the odds that I would actually change anything are pretty
small.  Of course, you can do what you want with your copy.  Some of
this code dates back to 1989.

Just today, while transferring an 18,000 block RT-11 logical disk (LD):)
file, I discovered that the Perl PC program that talks to the Arduino
can sometimes report the wrong checksum.  Most of the time it has been
right, but for that file it reported the wrong number, even though the
file did checksum right when I checked it when it got to the PC.  If
that one is wrong, then odds are its partner for sending files from the
PC is wrong, too.

The Arduino code and the PDP-11 code are probably the best places to
look to understand the protocol.  Basically it is a simple fully
interlocked handshake for each byte transfer.  Each block (fixed at 512
bytes) is preceded by a "flag byte".  The startup process has its own
special flag byte.

0x55  Initial Sync
0x22  Data block  (followed by 512 bytes of data)
0x00  EOF

(You can ignore the PC-ParallelPort folder unless you plan to use a PC
parallel port for transfers - it is a lot slower than using the Arduino,
and is old DeSmet C code.  But BE CAREFUL reading this code, because the
PC parallel port hardware *** INVERTS *** some of the signals.)

More information about the cctalk mailing list