
Fixing the core memory in a vintage IBM 1401 mainframe - kens
http://www.righto.com/2015/10/repairing-50-year-old-mainframe-inside.html
======
Animats
I really need to go watch that machine run. They finally got four tape drives
working, so now they can run a sort.

The 1401 is a strange machine. It's a direct descendant of IBM's
electromechanical card machines, and it shows. It has a memory layout and ALU
designed for fixed length strings of decimal digits of arbitrary length. The
end of a number is indicated by a "word mark" bit, a special 7th memory bit on
each 6 bit character.

In early computers, "business" computers had decimal arithmetic hardware, and
"scientific" computers had binary. The IBM System/360 had both. This lives on
in the binary-coded-decimal instructions in x86, which are used by almost
nobody. (You can only do one digit at a time, because the x86 decimal
instructions haven't been upgraded since x86 machines really were 8 bit.)

~~~
bjackman
If they were 8-bit, shouldn't they have supported 2 digits at at time (4 bits
per digit)?

~~~
Animats
6 bits of data, one bit of mark, and 1 bit of parity only visible to the
parity checking hardware.

~~~
mikepavone
That's not the format used by the x86 BCD instructions. x86 (and the 8080
before it) use 4-bit packed BCD so each byte contains two digits (x86 also has
instructions for dealing with unpacked BCD, but the digits are still 4-bit).
Additionally, the 8086 was a 16-bit processor (the 8088 had an 8-bit bus, but
that came later and was still 16-bit internally) so I don't think the 8-bit
limitation is due to the word size of the CPU in this case. It could be a
holdover from the 8080 (8086 isn't binary compatible, but it was marketed as
"source" compatible so there's a fair amount of similarity), but the 68000
(16-bit implementation of a 32-bit ISA) has the same limitation.

I think it probably comes down to cost. Just to support two packed digits, you
need a fair bit of extra hardware (or a little extra hardware and a bunch of
microcode) so you can properly calculate the correction factor. Expanding this
to a full word means you need to be able to do that calculation for 4 nibbles
instead of 2 which is about 3 times worse (you effectively get the most
significant nibble "for free" so it's 3 extra nibbles to support instead of
just 1).

------
wglb
Fascinating detailed drilldown.

(I haven't heard of the 1401 called Mainframes before, though)

~~~
kens
What would you call the 1401 if not a mainframe? IBM refers to the 1401 as a
mainframe:
[http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/mainfra...](http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/mainframe/)
[http://www-03.ibm.com/ibm/history/exhibits/mainframe/mainfra...](http://www-03.ibm.com/ibm/history/exhibits/mainframe/mainframe_PP1401.html)
The 1401 restoration team calls them mainframes:
[http://ibm-1401.info/](http://ibm-1401.info/)

But whatever you call it, the 1401 is an interesting computer.

~~~
wglb
Yes, quite.

I am wondering if the mainframe tag is a more recent thing, as I don't
remember that description back when it was still in production.

~~~
ChuckMcM
Interesting that it doesn't show up in any of IBM's literature until the S/360
which is referred to as a "mainframe". Most people I've talked with think of
the 701 as the first mainframe computer.

------
rasz_pl
Here is a blog of a guy trying to build core memory from scratch for fun:

Weekend Project: A Tiny Core Memory Array: [http://mikesmods.com/mm-
wp/?p=556](http://mikesmods.com/mm-wp/?p=556)

Weekend Project: Determining Operating Parameters of a Memory Core:
[http://mikesmods.com/mm-wp/?p=610](http://mikesmods.com/mm-wp/?p=610)

