Adding hardware flow-control to a KL8-JA last change: Aug 2000

Why would you want to do this? To get "reader-run" support.

What is "reader-run" support? If you have an ASR-33, it's the thing you probably don't have (unless the ASR-33 was original DEC equipment) that allows the -8 to control the paper tape reader. It's an extra PC board that fits inside the control housing that requires another pair of leads from the -8 (so now there are 6 total) that signals the teletype when to send data.

What's it used for? You can turn the reader on, and the -8 will start and stop it. This is required for multi-part paper tapes, since the -8 will stop the reader after the first section, and you need to press "continue" to get it to read the rest. Without reader-run support, the reader will just keep playing into the next segment (the computer won't see it, it's halted!). This is used mostly for programs that have extra overlays on the same tape for different features, like FOCAL.

Having long ago given up on Teletypes, I want my KL8 to work on my PC. Same problem, no control of the "reader" (in this case HyperTerminal), so tapes just keep playing even though the computer isn't listening.

Also since this is character-by-character flow control, you can run at any baud rate even with slow programs like FOCAL or the editor. This implementation will hold off the terminal until the PDP-8 has read the last character, so there is no danger of buffer overrun. I've found it almost impossible to read in DECUS FOCAL tapes (the programs, not the binaries) without this mod, even at very slow baud rates.

Solution? Hack the M8655 to support reader-run by mapping it to RS-232 hardware flow control. Instructions below.  To help, print out this local copy of the KL8-J print set (or download them directly from Highgate.)

1. Cut the trace leading from Pin 1 of E54 (a 7400).  This is the input that clears the Reader Run flip flop when a new character comes in (or starts to).

2. Jumper from Pin 1/E54 to Pin 3/E38, a spare gate on a 7400 that we are going to use an inverter.

3. Tie Pin 1 and Pin 2 of E38 together, and run them to Pin 3 of E45, a 1489 RS-232 receiver. This supplies the signal to the reader-run flip-flop that tells it that it's got an incoming character and to de-assert the reader-run line. Normally this is tied to the current loop receiver, we've just moved it to the EIA receiver (thru a needed inversion created from E38).

4. Cut the ground traces that run to pins 4 and 5 of E50, a 1488 RS-232 transmitter. This is what would normally supply the continuously asserted RTS (and DTR) signal.

5. Jumper from pin 7 of E39, a 7474 flip-flop to pins 4 and 5 of E50. E39 is the "reader-run flip-flop".  Now RTS follows the reader run signal.

This works great, except for a couple minor glitches.

You've just destroyed the current-loop reader-run capability of the board. I'll leave it as an exercise for the reader how to modify the board to support both at once with the limitation of the number spare gates present on the board.  UNTESTED BUT SHOULD WORK:  In step 3, instead of running to Pin 3 of E45, run to pin 20 of E19, the UART.  This should preserve the current-loop reader-run capability!

DTR is also going to follow RTS, make sure your PC is ignoring DTR (and/or cut the lead at the connector).  You could move a few wires and gates around and get DTR asserted again, but it's not worth the work, just do it at the RS-232 connector or ignore it.

Hyperterminal, when set to RTS/CTS flow control, will silently hold the rest of the paper-tape (garbage, probably) until RTS goes high again (by this time in the application program) and send it at the most inopportune time, like to TECO which you just loaded. I get around this by closing hyperterminal and opening a new one.

I've only loaded one interactive program so far, FOCAL '71. For some reason it didn't set the reader-run on the first character (but did on all the subsequent ones). I've gotten around this by switching to a Hyperterminal session with flow-control disabled. Since I closing the existing session to get rid of the trailing garbage still in the buffer, this isn't particularly inconvenient.


Get Hyperterminal "Private Edition 4.0" (free). Earlier version had problems with NULLs. It lives at...

For running interactively with the -8, set hyperterminal to coerce all input to 7 bits.

I was having problems until I removed the extended status jumper on my M8655. I don't know if that was really the problem, but it started working when I removed it.

I set both the board and HyperTerminal to 8/N/1.

A truly clever hacker would make a RS-232 shell with a push-button in it the forces RTS, thus both fixing the problem of having to dump the garbage data and the no RTS on first character.