I am in the process of developing a multi-device “Omnibus Bootstrap Loader” board. The purpose of this project is to transfer bootstrap loader code into the PDP-8’s core memory, using a similar technique to DEC’s MI8-E board.
This page captures my random thoughts and observations throughout the project.
Interfacing to the Omnibus
The pdp8/e pdp8/m & pdp8/f small computer handbook (1973 edition), in Figure 9-6 at page 9-8, gives a good summary of the typical driver and load circuits for each type of signal.
For this project, almost all outputs signals to the OMNIBUS will be driven by open-collector 74xx logic (40mA sink current).
However, there are two signals that are unusual and need to be treated differently:
- PULSE-LA-H: Consistent with the MI8-E (and the Handbook), this signal is pulled high by my board via an NPN transistor (configured as an emitter follower) in series with a 12R collector resistor.
- POWER-OK-H: My board needs to over-power this signal, by pulling it LOW while other (existing) circuitry in the power supply is pulling it HIGH. So we’ll take the same approach as was used by the MI8-E: Sink it to GND using an NPN transistor with no collector or emitter series resistor. Be careful to keep the pulse width short, to avoid circuit damage.
The DATAx-L lines could be driven by 7406 (inverter) or 7407 (buffer) ICs. Those ICs will be driven by a pair of 74HC595s. When the 74HC595’s are reset (by the /MR input being pulled low), the 74HC595’s ouputs will go LOW. So we’ll use 7406’s in the output stage, so the DATAx-L lines float high during reset. This will ensure no bus contention on these lines at reset.
The other 4 output status lines (which exclude PULSE-LA-H and POWER-OK-H) need to float high on reset. The output stage is being driven directly by the Arduino Nano. When the Arduino is rest, its outputs go high impedance. So the inputs to the output stage (7406 or 7407) go high-impedance on reset. So we’ll use a 7407 on these 4 lines.
PULSE-LA-H need to be allowed to float LOW on reset. The output stage is an NPN transistor configured as an emitter follower, which is driven directly by the Arduino Nano pin, which will go high impedance on reset. We’ll use a pull-down resistor from the transistor base to GND, to ensure the transistor is switched off during reset.
POWER-OK-H needs to be left to float LOW (or be driven HIGH by the PDP-8/e’s power supply) without interference from our board. The output stage is an NPN transistor with emitter tied to GND, which is driven directly by the Arduino Nano pin, which will go high impedance on reset. So the same approach will be taken here: we’ll use a pull-down resistor from the transistor base to GND, to ensure the transistor is switched off during reset.
Toggling Arduino output pins
Theer are two ways to toggle an Arudino output pin. You can use the “digitialWrite” library function, or you can do direct PORTx bitwise manipulation.
The digitalWrite function is slow. It results in a minimum pulse width of 5.5 uSec. Replacing the digitalWrite statements with direct register-level instructions (eg PORTB &= B11111101) shortens the minimum pulse width to about 150 nSec.