bobeager.uk Projects Link to http://youtube.bobeager.uk

This page is intended to show projects that I have played with (and possibly completed). Currently, these are:

PiDP-10 (PDP-10 replica with KA-10 console)

The Digital Equipment Corporation (DEC) produced a series of computers (originally called Programmed Data Processors). The early ones were named as PDP- followed by various numbers.

Most people think of the PDP machines as being exclusively minicomputers; however, the PDP-10 was arguably a mainframe. Later on, it was renamed the DECsystem-10 (to be succeeded by the DECsystem-20). This was a 36 bit machine, and was a monster compared to the other PDP systems.

However, the PDP-10 did show its minicomputer roots, at least in the earliest model, the KA-10. It still had the array of indicator lights on the control panel (over 100 of them), and a large number of switches for data entry, address entry, and various control functions. I used a KA-10 for a year back in the 1970s, and did some assembler programming on it.

A kit (PCB, case, LEDs and other parts) is now available to build a replica PDP-10. This was realised by using a Raspberry Pi running emulator software, with the GPIO interface being used to drive the lights, read keyswitches and so on. I am in the process of building one of these. I will document progress here.

The kit

The kit arrived! The following is quite detailed, as I was one of the early constructors (serial number 19); I wanted to give an account of what I did to help others. The following picture shows the component parts laid out on my workbench.

It can be seen that the PCBs are quite large, so I made sure that there was plenty of room on the bench before I started. I tried to keep as little on the bench as possible, throughout.

The decision was made to include all additional connectors and options from the start, to reduce the number of times that things had to be taken apart to solder something new. Thus, there were a number of additional components which are not shown here:

  • Various straight and right angled headers, both single and double row.
  • Some JST XH right angled PCB plugs.
  • An additional 16 pin dual in line socket for the optional level shifting circuit. I used a machined/turned pin socket, and in retrospect it would have been a good idea to replace the supplied sockets with this type as well.
  • A MAX202 chip for the level shifting circuit.
  • Five 0.1µF ceramic disc capacitors required by the MAX202.
  • A USB-C power inlet socket for mounting on the rear panel.
  • A key operated power switch for mounting on the rear panel.
  • A pair of 120mm fans for mounting on the rear panel (although one was omitted, to leave space for the eventual maintenance panel).
  • Eight 20mm nylon standoffs, with nuts, as a temporary support during construction of the LED board.
  • Two DE-9 straight pin PCB mounting male connectors, for serial port hookup.
  • Four over-length jack posts with nuts and washers, for mounting the DE-9 connectors.
  • Four 5mm spacers for the jack posts.
  • Sundry JST XH flying sockets, and DuPont sockets (crimped) and connecting wire.
  • Masking tape ("painter's tape") for temporarily holding components while soldering.
  • Kapton tape (for insulating the connectors on the Raspberry Pi, and for holding down wires).
  • A Raspberry Pi! See below.
PiDP-10 kit parts

Before construction started, the Raspberry Pi was prepared. I used a Raspberry Pi 5, with 8GB of memory. This is probably overkill, but means that the Pi can be used for other things at the same time as running the PiDP-10. To avoid overheating and possible throttling, the official active cooler was attached. Kapton tape was used to insulate the metal housings on the Ethernet and USB connectors, in case they contacted the LED board. The heat sink on the active cooler was in no danger of making the same kind of contact. The software was installed and tested.

Raspberry Pi 5 with cooler and Kapton tape

For construction, I used 63/37 Sn/Pb solder throughout, as it has a slightly lower melting point, which is actually a point and not a range. Given that there were over 1000 joints to make, I set up my extraction/filter fan!

Work started with soldering 74 diodes to the smaller board (the one that would later receive the switches). This was straightforward and uneventful. This was followed by the addition of one diode to the larger board (the one for the LEDs), as well as 26 resistors. Then came the connector for the Raspberry Pi GPIO interface, being careful to place this on the rear of the board. The three IC sockets supplied with the kit were then added, and also a fourth one for the optional RS-232 level converter circuit. In the photograph, resistors (bottom, and top right) and IC sockets (top right) have been added. The left hand socket (and the adjacent capacitors) are for the RS-232 level shifting circuit, which is a standalone circuit. I chose to use a MAX202 rather than a MAX232, which meant I could use 0.1µF ceramic capacitors rather then larger polarised parts. This turned out to be important for clearance later on.

The additional IC socket was what I usually use; a machined/turned pin part. I was later to wish that I'd fitted such sockets for all of the ICs (see later).

The LEDs were initially fitted by dropping them all into place, adding a retainer shield, taping that temporarily, then turning the board over and soldering (all one leg, then a double check and any adjustment, then the other LED). I fitted temporary standoffs in all eight mounting holes to make it easier to keep the LEDs in place without the leads being pushed back through; I used 20mm nylon parts. The retainer shield is a permanent feature, to reduce light bleed-through between LEDs, and is meant to be an interference fit on the LEDs. Due to manufacturing tolerances, it was initially quite loose. However, once the LEDs were soldered in place and did not 'give', it tightened up.

A pair of angled pin headers were fitted, one to each board, for connecting the boards together. The cable for this was wider than the connectors, by one pair of holes; the correct blanking plugs were fitted to the cable ends to eliminate any errors in the future due to misalignment of the two ends. A third angled header was also fitted on the reverse side, for connection to the optional maintenance panel.

A number of connectors (some optional) were also added to the rear of the board. These were:

  • 5 pin single row straight connector for I2C accessories.
  • 3 pin single row straight connector for a debug console.
  • Two 3x2 double row angled connectors for connecting the inputs and outputs of the optional RS-232 circuit.
  • Two JST XH connectors for fan power.
  • Two 2 pin single row connectors for power input (via the rear panel) and for a keyswitch on the rear panel.
  • Two DE-9 male connectors for external serial connections. These were straight through-hole connectors which, when fitted, left the mounting flanges about 5mm clear of the board. These were fixed using long jack posts and 5mm plastic spacers.

Two 5x2 double row angled connectors were also added to the switch board, for optional Spacewar controllers.

This is the bench during installation of the LEDs. Note the temporary standoffs so that the LEDs can be dropped into place.

Partially completed LED board

This is the (nearly) completed LED board. The LED shield is omitted for clarity.

Other items of note:

  • Near bottom left, a 5x2 header can just be seen on the back of the board (deliberate shadow makes it more visible). This is for a later, optional, 'maintenance panel'.
  • At centre bottom is the right angled header for the cable that connects to the switch board (still to be completed).
  • Near the top, and slightly to the right, are the footprints for the two DE-9 connectors that will provide serial access for terminals. These need to be wired separately, to the MAX202 level shifting circuit to the right of them.
  • The MAX202 is now installed, together with the 0.1µF capacitors it needs.
  • To the right of the MAX202 are two multiplexer chips, one for the LEDs and one for the switches. There is also a driver chip for the LEDs.
  • On the far right (top) are two single row headers, mounted on the back side. The top one (5 pole) is the external I2C interface, for driving other things. Below it, the 3 pole connector is for a basic serial debug console.
  • On the right (bottom) are the two connectors for optional power input, and for the key switch. These are also on the back side, and will go to a connector and a switch on the rear panel. Below them (on the back again) are two JST XH connectors for optional fans.
Mostly completed LED board

Finally, the two DE-9 connectors (for serial ports) were bolted in place. 5mm spacers were used under the mounting lugs, as they do not sit flush with the LED board. Connections were made from these, to the RS-232 pins on the level shifter circuit, unfortunately on the other side of the board. The Raspberry Pi was also installed, using nylon standoffs attached to the LED board with metal screws. Nothing was attached to the free ends of the standoffs at this stage.

Completed LED board, front view

Completed LED board, rear view

Attention was then turned to the switch board; here it is, before adding the 74 switches. There are 74 diodes, one for each switch; also the right angled header for connection to the display board, via a cable. Still to be added are the two right angled connectors (bottom left) for the optional Spacewar controllers.

The plastic boxes contain the switches, 74 of them! The third and fifth boxes contain momentary switches (more correctly known as keys on a PDP-10), and the others contain normal switches (known as switches on a PDP-10).

Partially completed switch board

The switches were first tacked in place by soldering one mounting pin. Care was taken to distinguish momentary switches, or keys, from the rest. Positions were then checked and adjusted before soldering the other pins, doing one pin on all switches before returning for the next one (to avoid overheating any of them). It was found that a lot of the pins (particularly the mounting ones) did not want to 'take' solder, so extra flux was applied via a flux pen. The board was then cleaned of excess flux.

Completed switch board

The fully loaded switch board was surprisingly heavy. Care had to be taken to support it when handling, to avoid undue flexing.

The LED board and the switch board were connected up and a final run of the LED/switch test program was carried out. All was well. The switch board was installed into the black baseplate, which provides protection.

Completed switch board on baseplate

The protective film was removed from the front of the acrylic printed front panel, and it was pushed into place in the main case. This was followed by the LED board, secured with eight self tapping screws (first ensuring that the LED shield/retainer was in position). The ribbon cable was attached to the LED board. The baseplate (containing the switch board was offered up, and the ribbon cable was attached to that too. The baseplate was attached to the main case with four self tapping screws.

Combined case and baseplate

The back panel was then prepared. It is made of multiple parts; see below. Parts C and D are used to join parts A and B; it was important to use nylon nuts and bolts due to the small clearance to the LED board, which causes a risk of short circuits if metal components are used. Part B has two fan mounting positions, but only the left hand one was used (the other area being left free for the maintenance panel). Three breakout parts were removed:

  • The lower of two small openings at the bottom on the right hand side. This will be used to access the maintenance panel connector. There seemed no need to remove the upper part.
  • The square panel giving access (and clearance) for the two DE-9 serial port connectors.
  • A small rectangular panel to the right of the Raspberry Pi. This gives clearance for large items plugged into the USB ports, and is useful when installing USB to serial port adapters.

Issues have been reported with insufficient space between the LED board and the back panel, one in particular being the lack of depth for the heads of bolts holding the fans in place. I chose to mount the fans with rubber fan mounts; not only are they quite flat, but they are made of rubber, so there is no risk of a short circuit. An enlarged image of one of these mounts is shown below, and four of them can be seen attached to part B.

Before assembling the components of the rear panel, part B was first fitted in place to check clearances. There were no issues. However, part A, while fitting everywhere else, did not 'sit' correctly at the bottom left corner, due to the presence of the two whit JST XH connectors (these were chosen because the fans are fitted with the corresponding connector).

Components of back panel

Close-up of rubber fan mount

(to be continued)

PiDP-8 (PDP-8/I replica)

The Digital Equipment Corporation (DEC) produced a series of computers (originally called Programmed Data Processors). The early ones were named as PDP- followed by various numbers.

To me, one of the most interesting was the PDP-8, a machine using a 12-bit word (no bytes). It had a mere 3 bits to specify an instruction, and a maximum of 32k words of memory. It was originally produced using discrete logic; this was superseded by an integrated circuit version using logic circuits with just a few gates per chip. The first IC model was the PDP-8/I.

A distinguishing feature of the PDP-8/I was the large number of indicator lights, that showed a great deal of what was going on - at quite a low level. The machine had only eight basic opcodes, and eight indicators were dedicated to showing the opcode of the current instruction! Others showed instruction phases, and of course some showed the contents of the accumulator, memory address register and so on (other models used fewer lights, and used a rotary switch to select what was displayed).

A kit (PCB, case, LEDs and other parts) was available to build a replica PDP-8/I. This was realised by using a Raspberry Pi running emulator software, with the GPIO interface being used to drive the lights, read keyswitches and so on. I built one of these; pictures below. The worst part was soldering 89 LEDs, and 26 switches! It includes a number of different boot options; console access can be via the Raspberry Pi's serial port, but I decided that it would be neater to access the PiDP-8 console using ssh over wi-fi.

The Raspberry Pi in the PiDP-8 runs a version of Linux, but I am looking into replacing that with FreeBSD, as that would be easier for me to maintain. To do this, some of the emulator code will need to be rewritten so that it uses the FreeBSD model for access to the GPIO bus. There is some clever multiplexing which is used to drive all of the LEDs from a limited number of GPIO pins (as well as sampling the switches), so I will need to replicate that.


Basic pidp-8 board, front
Front of the circuit board, with switches, LEDs, etc.
Basic pidp-8 board, rear
Rear of the circuit board, including the Raspberry Pi. The wood is used to mount the board into the case!
Completed pidp-8
The completed PiDP-8 on the bench.

SBC6120 (PDP-8 replica)

As noted above (but repeated here) the Digital Equipment Corporation (DEC) produced a series of computers (originally called Programmed Data Processors). The early ones were named as PDP- followed by various numbers.

As stated above, one of the most interesting was the PDP-8, a machine using a 12-bit word (no bytes). It had a mere 3 bits to specify an instruction, and a maximum of 32k words of memory. It was originally produced using discrete logic; this was superseded by an integrated circuit version using logic circuits with just a few gates per chip. Eventually, an entire PDP-8 CPU appeared in a single chip, the Intersil/Harris 6100, with a later version being the 6120.

A kit (PCB and difficult-to-obtain chips) was available to build a single board PDP-8 using the Harris 6120; this was called the SBC6120. I built one of these; pictures below. It includes a ROM monitor for booting, testing, etc. I later burned custom ROMs that worked better for me.


Basic SBC6120 interior
Interior of the basic SBC6120. The small board is for power isolation and testing.

Another view of the basic SBC6120
Another view of the basic SBC6120. This shows the power connector on the rear panel, and the DE9 connector for the serial (console) port.

I later built a second one, this time with a silk screened front panel, LEDs and switches. I put it in a basic wooden case. The DE9 console connector, and the power sockets, are mounted in a plate on the side. The rear panel is attached with magnets, to make it easy for enthusiasts to look inside! A picture follows.


The SBC6120 with front panel
A view of the enhanced SBC6120, including front panel, LEDs and switches.

Both of these machines use a Compact Flash card as multiple 2MB hard disks, and will run the disk operating system known as OS/8. They can compile and run programs in various languages, including BASIC, FOCAL and FORTRAN.

Voice over IP PBX

One of the most useful projects was the Voice over IP PBX (Private Branch Exchange). This is a mini telephone exchange, within the house. The house is large and slightly rambling, so an internal phone system is very useful. Of course, all phones also work externally as well, so phone calls can be made from almost any room.

The PBX is based on an HP microserver, an inexpensive, small, low power PC. The underlying software is the open source Asterisk system, running on the FreeBSD operating system (not Linux).


An HP microserver
An HP microserver

The system is connected to the normal POTS telephone system via a LinkSys/Cisco SPA3102 ATA, which provides the necessary FXO port, as well as an FXS port that is used for an external bell.


An SPA3102 An SPA3102
An SPA3102

All of the actual phones are of course IP phones. Most are LinkSys/Cisco SPA303 models, with two being the smaller SPA301. These all plug directly into the house gigabit network.


An SPA301 An SPA303
An SPA301 phone (left) and an SPA303 (right)

For the history of telephone systems in the house, see my presentation on the subject.

Doorbell

The house is big, and it has a strange layout. This means that it isn't possible reliably to hear a knock at the door everywhere in the house. It certainly can't be heard in the garden. One option that was considered was a pair of cord-operated butlers' bells, with the cords tied together - but that would only have been a partial solution.

It was decided to harness the house PBX. The solution adopted was as follows:

  • There is a conventional doorbell push button, that matches the door furniture. This just closes a single wire circuit. It is linked (via a flexible wire coupling since it is mounted on the door) to a wiring centre adjacent to the PBX machine.
  • The pair of wires is connected to a digital input on an Arduino microcontroller. When the bell is pushed, this causes the input to change, and this is detected by the program running in the Arduino. The program then sends a prearranged signal along a USB cable connected to the PBX.
  • There is a 'listener' process in the PBX, waiting for the signal from the Arduino. When it is detected, a call is immediately queued to a special extension number. This causes all of the phones in the house to ring. A special cadence is used, very different from that used by normal phone calls.
  • The calls can be 'hushed' in selected bedrooms for a selected time. This allows younger occupants of the house to do so when they have ordered a late night takeaway delivery.
  • Special 'star'codes can be used to enable and disable the (normally silent) conventional bell in the garden. This is automatically disabled in the evening for the sake of the neighbours.

The bell used in the garden
The bell used in the garden

Valid XHTML 1.0! Valid CSS!

This site is copyright © 2025 Bob Eager
Last updated: 03 Jun 2025