A simulator significantly inspired by the first commercial transistor computer

2 hours ago 1

#MV 950 Toy

A toy computer/simulator significantly inspired by the first commercial transistor computer, Metrovick 950.

This toy system is very close to Metrovick 950, but is only compatible with it on the source-code level. It can deliver, quite impressively, 200-300 operations per second. The toy aims to emulate the CPU, a teleprinter with a paper tape punch/reader, a magnetic tape storage device, and a plotter.

#Background

Metrovick 950, the first commercial transistor computer, is an early British computer, released in 1956. It is a direct descendant of the Manchester Baby (1948), the first electronic stored-program computer ever.

The Baby, formally known as Small-Scale Experimental Machine, was a foundation for the Manchester Mark I (1949). Mark I found commercial success as the Ferranti Mark I. A few years later, Manchester University built a variant of Mark I that used magnetic drum memory instead of Williams tubes and transistors instead of valves. This computer was called the Manchester Transistor Computer (1955). Engineers from Metropolitan-Vickers released a streamlined, somewhat simplified version of the Transistor Computer as Metrovick 950.

#Project structure

  • docs/ - notes about the system, emulator, assembler and so on
  • src/host - emulator (or, rather, simulator) and assembler for it in Python, plus some tests that can be run with pytest
  • src/target - programs for the MV950

Example: step-by-step emulation of a program that adds NUM1 to NUM2 and stores it in NUM3; and then replacing the Instruction register with a new command:

$ python3 emu.py -r ../target/001_add.ram -m ../target/001_add.map MV950 is ready. Press Enter to perform a single step, or enter a command. === A: 0 B: [0, 0, 0, 0, 0, 0, 0, 0] === I: 0x00000001 [FD:0 BD:0 S1:0 S2:1] CLR &0 0x0 0x1 > === A: 0 B: [0, 0, 0, 0, 0, 0, 0, 0] === I: 0x08005002 [FD:1 BD:0 S1:5 S2:2] ADD &0 NUM1 0x2 > === A: 123 B: [0, 0, 0, 0, 0, 0, 0, 0] === I: 0x08006003 [FD:1 BD:0 S1:6 S2:3] ADD &0 NUM2 0x3 > === A: 579 B: [0, 0, 0, 0, 0, 0, 0, 0] === I: 0x38007004 [FD:7 BD:0 S1:7 S2:4] STOL &0 NUM3 0x4 > === A: 579 B: [0, 0, 0, 0, 0, 0, 0, 0] === I: 0xa8000005 [FD:21 BD:0 S1:0 S2:5] STOP &0 0x0 NUM1 > [STOP command encountered] === A: 579 B: [0, 0, 0, 0, 0, 0, 0, 0] === I: 0x0000007b [FD:0 BD:0 S1:0 S2:123] CLR &0 0x0 0x7b > p NUM3 [7] = 579 | CLR &0 0x0 0x243 === A: 579 B: [0, 0, 0, 0, 0, 0, 0, 0] === I: 0x0000007b [FD:0 BD:0 S1:0 S2:123] CLR &0 0x0 0x7b

#You can now play Lunar Lander on it!

src/target $ make 007_lander python3 ../host/asm.py -i 007_lander.asm -o 007_lander.ram -m 007_lander.map python3 ../host/emu.py -r 007_lander.ram -m 007_lander.map MV950 is ready. Press Enter to perform a single step, or enter a command. === A: 0 B: [0, 0, 0, 0, 0, 0, 0, 0] === I: 0x000000a4 [FD:0 BD:0 S1:0 S2:164] CLR &0 0x0 INTRO > g Entering interactive mode. Press Ctrl+C to return to the shell LUNAR LANDER TIME ALT VELOC FUEL THRST 0 1000 50 150 0 0-30? 20 TIME ALT VELOC FUEL THRST 1 958 35 130 20 0-30?

#Problems? Worries? Questions?

If you need any help or feedback, feel free to create a new TODO in the Issue tracker.

Read Entire Article