Sunday, May 16, 2021

How to use PicoEnigma, an Enigma Z30 Simulator

PicoEnigma is an Enigma Z30 simulator, a rare, numbers only Enigma Machine. 

Its mode of operation is similar to other Enigma machines, it has a keyboard and a lampfield, pushing a key sends electricity to the entry rotor (ETW), then the electricity goes from right to left through the rotor pack, comes back through the reflector (UKW), and returns from left to right through another set of wires in the rotor pack, goes into the ETW and out to a lamp. 

In this machine, the rotors can be rearranged, the ring setting can be changed and the rotor starting position can be set. To successfully decrypt a message, the machine settings must be the same used to enctypt it.

This simulator is designed to operate the same as the Enigma Z30 Simulator for the KIM Uno:

After the simulator is turned on, it is ready to encrypt a message. The rotor starting position is 4321. Pressing a key advances the rotors and lights the result. The result will be illuminated while the key is being pushed. Releasing the key turns the lamps off. 

During machine operation, all the lamps will be off if none of the black keys are pressed, or one lamp will illuminate when a black key is pressed. Pressing the red key enters the configuration mode. To indicate at a glance that the machine is in the configuration mode, all of the lamps are lit except for one. 

When only the first lamp is turned off, the rotor types are being changed. Pushing the keys above or below the displays changes the rotor type for that position. Each rotor can only be used once. Once a unique rotor combination is selected, pushing the red key again advances to the next setting. 

When the second lamp is turned off, the ring settings are being changed. The up and down keys are used to change this setting, Each rotor can be set differently to a number from 0 to 9. Pressing the red menu key advances to the next setting.

When the third lamp is turned off, the stepping mode is being changed. There were two kinds of machines, one with a traditional lever stepping and another with geared stepping. The lever stepping machines suffered from a double stepping anomaly where a 9 in any position steps that wheel and the one to its left.  A double stepping sequence is: 0088 0089 0090 0101 Geared stepping works like a car odometer and no digits are skipped. 

The stepping mode is indicated by the digit on the right. If it shows a 0, the machine is using lever stepping, if it shows a 1, it is using geared stepping. In this screen, pushing the leftmost up and down button also changes the brightness of the lampfield digits. 

Pushing the red menu button again turns all the lamps off and returns to the operating mode screen.

Pushing the up and down buttons changes the rotor starting position. The machine is now ready to encrypt numbers. 

To send a text message, an encoding scheme must be devised. Either substitute letters by two numbers A 01 B 02 ... Y25 Z26 or use a codebook where words are substituted by numbers, first translate the message to numbers then encrypt the numbers. 

To decrypt the message ensure the machine is set up exactly as the machine used to send the message. Ensure the starting position is set the same as well.

For example, to encrypt the message TEST, use the table below.

 A  B  C  D  E  F  G  H  I  J  K  L  M

01 02 03 04 05 06 07 08 09 10 11 12 13

 N  O  P  Q  R  S  T  U  V  W  X  Y  Z

14 15 16 17 18 19 20 21 22 23 24 25 26

The word TEST would be encoded as 20 05 19 20

Typing and holding one number at a time in the machine using the default settings after power up yields 44 57 43 94

The wheels should be at position 4329 after all the numbers have been typed. 

To decrypt it, use the up and down keys to reset the wheels to the starting position of 4321. Then type the encrypted message (44 57 ...) and the original message (20 05 ...) will be displayed.

Thursday, January 21, 2021

Dual Screen DSKY talks to host computer via Virtual Serial Port

This is a new project, a DSKY, the Display Keyboard interface for the Apollo Guidance Computer (AGC), using two 240x320 LCD screens and a keypad made with Kailh Cherry clone keys.

This DSKY uses an Arduino Mega 2560 to interface with the host computer via a USB Virtual Serial Port. The Arduino Mega uses two of its auxiliary serial ports to communicate with the Arduino Nano on each screen. The Arduino Mega is also responsible for scanning the DSKY keyboard and sending keypresses back to the host computer. 

Each indicator on the left and right screen is controlled by a command from the host computer. For example to illuminate the indicators below, the host computer sends to the Mega the following string "C F P  V00 N00 X 00000 Y 00000 Z  000  ". The Mega receives commands from the host computer and forwards them to both screens. The left screen reacts to single character commands A..O. Upper case commands illuminate an indicator, lower case commands turn them off. The right screen uses the Q command to illuminate the COMP ACTY indicator and the P, V, N, X, Y, Z commands to display numeric data which may include a leading positive or negative sign.  

This DSKY is being made to interface to a modified version of Moonjs, An Online Apollo Guidance Computer (AGC) Simulator ( The simulator has been modified to use the experimental Web Serial API available in the Google Chrome browser in order to both send screen data to the external DSKY as well as be controlled by keypresses from the external DSKY. 

The modified simulator accepts keypress commands from the external DSKY via Serial Port. The commands correspond to the first letter of each key legend. For example if KEY REL is pressed in the external DSKY, it sends K to the simulator. Thus, to calibrate the IMU as part of the launch checklist, the simulator receives V 3 7 E 0 1 E from the external DSKY. 

The modified simulator is available at

A PCB is being designed to hold both screens and the keypad. Each screen connects to an Arduino Uno compatible pin header and is controlled by an Arduino Nano located under it. The Arduino Nano has been rotated so the USB connector is accessible  Only the minimum number of signals needed to control the display using SPI have been routed from the Nano to the LCD screen pins. The RX pin on each Nano is connected to a separate auxiliary TX pin on the Mega. 

The minimum number of signals needed to control the SPI LCD screen was experimentally determined by using jumper wires. 

Here is an OSHPark ( rendering of the board design so far: