Project: ZX Enigma

Basic project overview

In the basic version I plan to create 3 views in the program. The main one where you have a view of the 26 lighted characters. It won’t show the keyboard, since you will use the keyboard on the ZX Spectrum to enter the text. Then there will be a view showing an interface to choose and configure the rotors, and one for the plug-board.

I haven’t yet decided how to switch to the rotor or plug-board view or how these will be used. Also the design of those screens are something I need to think about.

For the screen with the bulbs I plan to show the 26 characters on discs and using the ZX Spectrum screen attributes change the colors. It will possibly also show an output of the processed character so you can see the encrypted or decrypted values for longer than you hold the key.

Optional extras

  • Show the rotor and plug-board settings on the main view. So you can also see the rotor positions progress.
  • Add a function to send the processed text to the printer.
  • Add the usage procedure instructions so you can follow these without having them externally.
  • Add support for the navy version of the Enigma (4 rotor positions and 8 rotors) or any of the others
  • Add code book generation. Since the ZX Spectrum has no persisted memory, we can’t store them.
    So they could be generated using a pseudo random value that the user enters. Or we could print them. The ZX Spectrum compatible printers have only a small amount of characters per line (the ZX Spectrum screen itself has the same problem) so printing the full settings on a single line won’t be possible (The plug-board settings take quite a bit of space)

Having original code books in the program won’t be possible due to size. And I don’t think the Germans used a pseudo random number generator to generate their code-books. (Joke)


Related articles

ZX Spectrum: Assembly programming