The study of ancestry can teach us a great deal.  Knowing the origins of something gives us a renewed appreciation for where we are today, and affords us a better perspective on where we are going tomorrow.
Manchester Baby - Small Scale Experimental Machine

Today I stood and basked in the awesome glory of the Manchester Small Scale Experimental Machine (SSEM) nicknamed the ‘Baby‘. Built 1948, it was the first ever electronic computer system in the world and has been on display here at the Manchester Institute of Science and Technology.  I was dismayed to learn that the computer is being packed away in to storage, but the kind staff allowed me up close to pay my respects and bring you these great photos.

Programming the Small Scale Experimental Machine

Having spent much of last weekend writing my first programs for this great ancestor of modern computing, I find renewed appreciation for the technology that is available to us now. Roger Visits the SSEM BabyI have written code for a few computers, including some home consoles like the Super Nintendo, but nothing could have prepared me for the Manchester Baby.

Why? Well, firstly, it has a humble instruction set consisting of 7 valid instructions, with only ONE arithmetic operation – subtract! In order to add two values, a programmer would need to use the form: -(-x-y).  Software multiplication can be achieved by creating a loop which repeatedly ‘adds’ in this manner – don’t even ask me about divide!

Another exciting fact about the SSEM is it’s memory store.  By today’s standards it would be considered backward.

Normal Binary Example

How Binary Numbers are Usually Stored

SSEM Binary Example

How SSEM Stores Binary Numbers

No, I mean that it’s memory is literally a mirror image of how we might expect today’s computers to store binary numbers, with the least significant bit (LSB) is on the left and the most significant bit (MBR) on the right!

The memory store itself is made up of 32 rows of 32-bit words, giving the SSEM 128 bytes (0.125 KB) of total memory for both program and data. Not a lot when you compare it to computers available today.  To put everything back in perspective, the SSEM executes 1,100 instructions per second. Yet my Apple iPhone used to photograph this exhibit can execute 620,000,000 instruction per second and has 8,000,000 KB of storage and (AND!) … it fits right in my pocket.


How To Run Virtual SSEM Programs At Home

TheFraj Demo on the SSEM Baby[ See The Source Code For This Example Here ]

But you don’t have to travel all the way to Manchester to use the SSEMDavid Sharp has developed a fantastic Java based SSEM simulator which you can run directly through your browser.  Not only does it include the imagery of the original machine, but includes several working program examples and the ability to import/export memory snapshots and assembly code.

Small Scale Experimental Machine Small Scale Experimental Machine

Conclusion

All in all it was a very humbling experience. I am told that the Baby will go back on display in about 7 months and I strongly urge others to see this exhibit. While the Small Scale Experimental Machine may not be all that impressive technically, it provided a solid blueprint upon which all modern computers are built.  In doing so, it leaves a timeless mark in the computer world that will live on beyond it’s physical components.   These principles seem far removed when I’m sat at my desk working with luxuriously high-level language like PHP. But sometimes it helps to remind myself of the sheer toil and pain it has taken to get to this stage.

Extras

Here is the source code to the ‘TheFraj’ example featured in this article, a scrolling marquee based on an example program that comes with the simulator. Try saving this into a file and importing to the simulator!

30
1 NUM -1207943145
2 CMP
3 SUB 22
4 STO 18
5 LDN 18
6 SUB 18
7 STO 23
8 LDN 1
9 STO 18
10 LDN 18
11 SUB 20
12 CMP
13 LDN 19
14 STO 1
15 SUB 21
16 STO 7
19 NUM 1207943145
20 NUM -134217729
21 NUM -8192
22 JMP 1
23 NUM 2039410350
24 NUM 575808164
25 NUM 575808164
26 NUM 600729316
27 NUM 600729316
28 NUM 575283876
29 NUM 710025892
30 NUM 307375780
31 NUM 0

Instruction Set List for SSEM Baby
Binary Code Assembly Instruction Explaination of Operation
000 JMP S Jump to the instruction at the specified memory address (absolute unconditional jump)
100 JRP S Jump to the instruction at the specified memory address plus the number in the accumulator (relative unconditional jump)
010 LDN S Take the number from the specified memory address, negate it, and load it into the accumulator
110 STO S Store the number in the accumulator to the specified memory address
001 OR
101
SUB S Subtract the number at the specified memory address from the value in accumulator, and store the result in the accumulator
011 CMP Skip next instruction if the accumulator contains a negative value
111 STP Stop
  • Share/Save/Bookmark