Snial
Well-known member
There's an article on Hackaday right now, celebrating the world's first Von Neumann computer, Manchester University's SSEM (known as "The Baby"); which ran its first program in June 1948.
So, many members might think ENIAC or perhaps even Cambridge's EDSAC, the Harvard Mark I (or IV), or Zuse's machines were the first Von Neumann computers, but this isn't really correct. ENIAC hard to be programmed by jack plugs and sometimes hardware mods; EDSAC was a year later; the Harvard Mark x's weren't Von Neumann and the Zuse machines weren't known to be Turing-complete until decades later (and probably didn't run programs from memory either).
So, suprisingly, this is it. Back in 1998 Manchester Uni were developing a replica, and so I decided to write an emulator for it. In some ways its a more authentic emulator than most, because it copies the display the way it was actually shown (every digit was lit up, 1's were just longer); the "Typewriter" was a set of buttons in a rectangular grid; the toggle switches behave like the real machine.

You might wonder why the Manchester Baby looked so crude. It's because the purpose of the project was to test the phosphor on CRTs as memory for Cambridge and they figured the best way to test it was to wrap a computer around it (sneaky)! Hence, they beat Cambridge, but Cambridge rejected these Williams-Kilburn tubes because the memory density was so poor, compared with the mercury delay lines they eventually used.
My version, written in THINK C could run on a Mac Plus at full speed (700 IPS), but what I didn't know until today was whether it could run on a Mac 128K. And it does (under system 1.1).

There are a few errors though, for some reason labels F1, F0 and L4 to L0 aren't displayed; nor are LC, 'WE', 'MAN', 'SP', 'CC' or 'STOP'. But we can still play with it! And this short guide will help you go through the tortuous process of programming the world's first computer, as it was programmed!
The simplest program is incrementer. It's:
There are many strange things about the instruction set. You can't load a positive number, only a negative one (which means you need to re-negate). You can't add, only subtract; Jumps are indirect.
MacBaby 1.03 has at least one other issue on a Mac 128K under System 1.1. Trying to save a program will crash the Mac!

In a little while, I hope to upload the source code, but you can find the project here: https://web.archive.org/web/20070205070856/http://www.p-skids.freeserve.co.uk/
You can read more about the SSEM on Wikipedia.
So, many members might think ENIAC or perhaps even Cambridge's EDSAC, the Harvard Mark I (or IV), or Zuse's machines were the first Von Neumann computers, but this isn't really correct. ENIAC hard to be programmed by jack plugs and sometimes hardware mods; EDSAC was a year later; the Harvard Mark x's weren't Von Neumann and the Zuse machines weren't known to be Turing-complete until decades later (and probably didn't run programs from memory either).
So, suprisingly, this is it. Back in 1998 Manchester Uni were developing a replica, and so I decided to write an emulator for it. In some ways its a more authentic emulator than most, because it copies the display the way it was actually shown (every digit was lit up, 1's were just longer); the "Typewriter" was a set of buttons in a rectangular grid; the toggle switches behave like the real machine.

You might wonder why the Manchester Baby looked so crude. It's because the purpose of the project was to test the phosphor on CRTs as memory for Cambridge and they figured the best way to test it was to wrap a computer around it (sneaky)! Hence, they beat Cambridge, but Cambridge rejected these Williams-Kilburn tubes because the memory density was so poor, compared with the mercury delay lines they eventually used.
My version, written in THINK C could run on a Mac Plus at full speed (700 IPS), but what I didn't know until today was whether it could run on a Mac 128K. And it does (under system 1.1).

There are a few errors though, for some reason labels F1, F0 and L4 to L0 aren't displayed; nor are LC, 'WE', 'MAN', 'SP', 'CC' or 'STOP'. But we can still play with it! And this short guide will help you go through the tortuous process of programming the world's first computer, as it was programmed!
- Unzip mfsMacBaby.dsk.zip (it's a 400kB MFS-formatted disk image).
- Click on InfiniteMac, https://infinitemac.org/1984/System 1.1?infinite_hd=false&saved_hd=false
- Drag mfsMacBaby.dsk to the emulator. You should see a second disk appear on its desktop.
- Open the mfsMacBaby (marked "Untitled"), then double-click on the MacBaby app. Its emulator window should appear. It's showing my default set up: the numbers 0 to 31. So, note, the SSEM showed all the numbers in reverse order, where the address comes first with least significant digit on the left and the most on the right. Then comes the opcode for the instruction, again with the least significant digit on the left.
- To clear all the numbers toggle the SC toggle button.
- You'll need to clear the program counter. Click just to the right of where it says: "C" and a separate image will appear. This is close to how it worked on the real Manchester Baby. There was one CRT display, but it could be made to select one of 3 storage units: the program, the accumulator ('A') and the program counter ('C').
- Clear the program counter by toggling the CC button, it's not shown in System 1.1, but it can be seen in the first image above. The default Program Counter value should clear.
- Now go back to the program by clicking on the "Store" button near the bottom-left. It won't show any change, because both stores are now clear.
- You can now toggle in the program. I suggest trying incrementer, below.
- Toggle the "WE" (Write/Erase) switch, down = Write.
- Set L4 to L0 toggle switches all 'up', this is line 0. You can see which is the current line as it's the thicker one. The SSEM pre-increments the program counter so you can't use line 0 for code. Click on L0 to make it line 1.
- Now click on Typewriter buttons '0', '3', '14'. This sets bits 0, 3 and 14 to enter the LDN (load negative) instruction. If you make a mistake, you can hit the 'LC' toggle button (on the right of 'SC') which will clear the current line.
- Adjust the L4 to L0 toggle switches for each successive line; and click on the Typewriter buttons until they show each successive instruction.
- When you've finished it should look like:
- Set L4 to L0 to 0.
- Now you can run the program, toggle the 'run' button! The image updates at about 60Hz max, though the calculations are at full speed.
The simplest program is incrementer. It's:
Code:
Loop:
LDN x ;1001000000000010
STO z ;0101000000000110
LDN z ;0101000000000010
SUB y ;0001000000000001
STO x ;1001000000000110
JMP Loop;1110000000000100 (address Mem[7]+1)
0 ;0000000000000000
y EQU 8
-1 ;11111111111111111111111111111111
x EQU 9
0 ;
z EQU 10;
There are many strange things about the instruction set. You can't load a positive number, only a negative one (which means you need to re-negate). You can't add, only subtract; Jumps are indirect.
MacBaby 1.03 has at least one other issue on a Mac 128K under System 1.1. Trying to save a program will crash the Mac!

In a little while, I hope to upload the source code, but you can find the project here: https://web.archive.org/web/20070205070856/http://www.p-skids.freeserve.co.uk/
You can read more about the SSEM on Wikipedia.