Well, it’s finally complete!
Probably what most people want to see is the Bombe in action so here we go.
For those who haven’t been following the whole project basically I reverse engineered then build my own desktop version of the Bletchley Park Bombe, the machine the British used to help solve the Enigma code during WW2.
Thanks again to John Harper, who lead the BP Bombe rebuild team and who answered some questions for me, James Grime, mathematician and Enigma Expert, Magnus Ekhall who was one of people behind the online Bombe simulator, Frank Carter, who wrote the BP Report 4 booklet, and Bletchley Park themselves who managed to find and send me a copy of the aforementioned report that is out of stock! Also the late Tony Sale who made available on his web site the US 6812th Division 1944 Bombe Report.
I started by making my own Enigma machine wristwatch because to understand the Bombe works you have to fully understand how Enigma works and how it was used operationally.
You can read about that here.
My Turing-Welchman Bombe machine makes use of some software I wrote in C++ running on a Raspberry Pi 2. I figured out for myself how the Bombe worked then wrote my own software version, initially in BASIC of all things to run on my homemade 6502 computer Orwell. With the general algorithm worked out I ported it to C++.
The Raspberry Pi 2 connects to an Arduino which then drives three stepper motors, via driver boards, to turn the three indicator drums on the front of the machine. These drums mimic the three indicators on the real Bombe. The Arduino reports back the position of the drums to the Pi as a series of pulses then the Pi can tell the drums when to stop. An LCD screen on the side of the machine mimics the original Bombe mechanical indicator unit as well as providing a basic user interface. Start and Stop button are provided on the front of the machine as on the real Bombe.
The machine runs in real time (although the next stop is pre-calculated) so a Bombe run should take the same amount of time as a real Bombe run at Bletchley Park.
The casing is steel tube brazed together and the panels are 0.8mm sheet steel finished in wrinkle black paint. All the wiring is cable laced together into bundles. The drums are 3/4 scale replicas I made at home from old sweet tins! All the parts for the hubs and drums are hand made with a small lathe and simple hand tools. The drum faces use dry transfer lettering (which is getting hard to find these days – mine came from a model railway shop)! The machine is totally self contained with it’s own power supply (a 12 volt SLA battery) so is portable, although it does weight 10kg.
Menus are loaded onto a USB thumb drive inserted into the back of the machine. I mainly run the same menu as used at BP but it does run other menus such as the test menus in the US Army report. I haven’t been able to get all of them to run though but then I can’t get them all to run on the online simulator either.
All the details of the build, software and so on are in previous posts but are some pictures of the finished thing.
I will make the code available to anyone who wants it but it’s not really much use to anyone without the actual unit. If you want to see it to see how my Bombe algorithm works though it’s not too hard to pick out the core functionality. You have to have a VERY good understanding of the Bombe and what it is doing to really understand how it works although the code itself isn’t hard to follow. If you want to see it just ask me. If there is enough interest I can package up the C++ code and the Arduino code (for driving the steppers) and post them here.
Below is an example of how my menu files look:
* This menu is used to demonstrate the recreated Bombe at Bletchley Park. * This will generate two stops: * DKX:Q (correct stop) * FAN:K * Rotors: 2, 5, 3 Reflector: B Test register: G Input voltage: A Drums: ZZK, ZZE, ZZF, ZZN, ZZM, ZZG, ZZP, ZZB, ZZJ, ZZI, ZZL, ZZO, ZZA Connections: U: 1i E: 1o, 2i, 7o, 8in G: 2o, 3i, 11o, 12i R: 3o, 4i, 10o, 11i A: 4o, 5i S: 5o, 6i, 13o V: 6o, 7i N: 8o H: 9i Z: 9o, 10i L: 12o W: 13i