Minsk-2/Minsk-22 Emulator

(see it in action)

Introduction

This is an emulator of the Минск-2 (Minsk-2) and Минск-22 (Minsk-22) – mainframe computers from the Soviet era, produced around 1963 and 1965 respectively, in the Byelorussian SSR.

The Minsk-2 emulator was originally written for a task in the Po drátě hacking contest (sorry, the page is in Czech only). The participants were to find a password hidden in the machine's memory, which involved figuring out how the machine works and reconstructing at least a part of its instruction set. You can try your luck, the password is still there.

Online resources about these machines are rather scarce. English Wikipedia contains a fairly short article on the Minsk family of computers, Russian Wikipedia reveals a couple of technical details on Minsk-22, which is essentially Minsk-2 with extra memory. The Russian Virtual Computer Museum tells the history of the Minsk family in its full glory, but it lacks details. The best resource we could find is the book Programmirovanije dlja ECBM Minsk-22 by V. M. Salikov, and the emulator is based solely on that plus a bit of guesswork.

We have written a brief description of the instruction set for our own reference.

When using the emulator, please make sure that your browser is able to display Cyrillic letters, as all error messages are printed in Russian. (This is not historically accurate, the real machine never printed error messages – it used signal lights on the control panel instead.)

Features

We have tried to get as close to the behavior of the real machines as we could, but the description in the Salikov's book is not as detailed as we would wish, so several things remained to be guessed. Here is a list of likely differences against the real Minsk-2/Minsk-22:

Input format

The input to the emulator follows a fairly simple format:

; An example

@0050
-62 00 7000 1000
-62 00 7006 1001
-62 00 7400 0000
-00 00 0000 0000
@1000
+65 45 53 53 56 17
+42 56 60 53 44 16

Empty lines and lines starting with a semicolon are ignored. @xxxx sets the memory address (in octal), all other lines specify signed 36-bit octal values to be written to consecutive memory cells. Spaces inside numbers are purely decorative and the parser ignores them.

Examples

Here is a couple of easy example programs for you to try:

Author and copyright

The Minsk-2 emulator has been written by Martin Mareš in 2010 and it is copyrighted by its author.

Minsk-22 emulation and some other changes were added by Rutger van Bergen in 2021/2022.

The program is free software. You can freely use it and distribute it under the terms of the GNU General Public License version 2.

Bug reports and suggestions are welcome (especially from people who have encountered the real Minsk), please contact the author by e-mail at mj@ucw.cz.

Download

You can download the source code of the emulator.

Build

The emulator has been developed on Linux with GCC and it should build and run on all POSIX systems, possibly requiring trivial modifications.

On a system with the GNU toolchain installed, the emulator can be built by running the following command:

$ make

Use

The emulator reads its input from stdin. Loading and executing the ex-hello example program would therefore be done like this:

$ ./minsk < ex-hello

The list of supported options can be acquired by running the emulator with any unsupported option:

$ ./minsk -h