Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Examining the core memory module inside a vintage IBM 1401 mainframe (righto.com)
122 points by NelsonMinar on Aug 30, 2015 | hide | past | favorite | 24 comments


The IBM 1401 was pretty exotic for it's time, but there was a more common product using toroid memory even earlier than the 1401.

Seeburg's line of jukeboxes from 1955 onward used this mysterious system called TORMAT, which essentially was a 160-bit toroid memory device (for a jukebox that held 160 selections). Bits were flipped on as you paid for choices and the loading arm seeked the next record by checking the bits in memory. This also had the positive side-effect of people selecting the same record not resulting in multiple plays, since you were flipping on a bit that was already flipped.

https://www.flippers.com/Seeburg-tormat.html

The TORMAT was used up until 1974, when it was replaced with silicon-based memory.


The first system I worked on in the USAF had 512 bytes of core memory¹. But it only used 320 of them, as the system was hard-coded to 80-columns (for both punch-card and printer). Since it was fully duplex, it had 2 send and 2 receive buffers of 80 characters each. It would flip the role of the buffers as they became full or empty.

I once had to replace the core memory array when one bit went bad. By pure bad luck, it was in one of the first few columns where the end-of-message sequence was expected, and the bad ferrite meant the system got hung up waiting for an EOM that was never detected. Bad donut. No message. ;/

¹ https://c1.staticflickr.com/1/40/109018526_8edb26b499_b.jpg


You could buy 16-word ROM, which copied bootstrap to core automagigally. But we had no money for such luxuries, and we had to program it manually from front panel switches almost everyday.


IIRC you could push a button and it would automatically read a card into locations 1 through 80 and start executing at location 1. First instruction had to be a set word mark (, i thing) because instructions were variable length and needed a word mark to denote the end. I also seem to remember that 4K meant 4,000 not 4096. Long time ago and we all danced a happy dance when the 1401 came in to replace our 407 accounting machine with its plugboards. Well not everyone. Some were afraid of the new machine and certain that the time was still not right.


Your description of the IBM 1401 startup sequence is absolutely right. I'll fill in some details since it's a strange process. There's no operating system at all: pressing the load button on the card reader causes one card to be read into memory and the first instruction executed. The first few cards in a program deck have special loader initialization code. As you say, the first instruction is "write two word marks", making the next two instructions executable. The next few instructions are more "write two word marks" instructions, until there enough word marks in place to run a few other instructions, which clear memory and load the next card.

The cards for the program to be executed have program code on the left half and loader code on the right half. That is, each card has code to move its program code into the right place in memory, add necessary word marks, and then load the next card. This code is running from the reader buffer (locations 1 through 80). The final card jumps to the location in memory to start execution.

TL;DR: Since the IBM 1401 doesn't have an operating system, when loading a program from cards, each card also contains the code to load itself into memory.

And yes, 4K of memory is 4000 characters, not 4096, because it's a decimal machine, not a binary machine.


What about timing? Did you have to hurry to input the second punchcard? Did the cores lose their bits overnight?

Also, what kind of data can you process with 4K? They say "accounting software" and "paysheets", was it actually quicker than writing paysheets manually?


These were just glorified card sorting machines. Data and code was on them cards -- 4K was just temporary registers, which was plenty. And cores did not lose their data too easily. Manual bootstrapping was needed mostly because of programming errors or you used the expensive memory area for something else.

Cards were quite handy, because they were reusable. You could construct a program just using old ones. In university I remember a special box for "100 CONTINUE"-cards.


IBM later developed looms capable of weaving core memory planes automatically, and the price started to drop. Not every far. Around 1970, a megabyte of core memory cost about a million dollars.


If you're interested in the machines IBM used to weave cores, see: http://ibm-1401.info/IBMCoreArraysIEEEMagnetics1969.pdf

One interesting thing they did was to thread extra cores onto each wire so they could crush the bad cores and still have enough to continue. (They would test after wiring one direction, before wiring the second direction.)


I have one or two of those planes in a drawer somewhere. After all this time, the ferrite cores are cracking and half-round bits litter the bottom of the drawer.


You can buy the ferrite beads. Re-looming such a thing would be "fun".


Possibly more interesting would be to attempt to read the data still there - it is non-volatile, after all.


I'm guessing: 1's and 0's. Remember a plane was a bitslice through a word.


To quote DwarfFortress, !!FUN!!.

It would be neat to do though. wonder if you could make one work like an i2c eeprom chip, have it act as a drop-in replacement. Or rather, an "add jumper wires and put in a box outside of it replacement."


What I'd like to see is a "Show HN: I built a working core memory".


Someone built a working one-bit core memory: https://sites.google.com/site/wayneholder/one-bit-ferrite-co... But more impressive is the 32-bit core memory shield for Arduino: http://www.corememoryshield.com/report.html


I've seen several DIY projects in the past that used core memory -> should be google-able.



It seems to be all copper. How come one wire doesn't conduct to all other wires?


It's magnet wire. It may appear to be all-copper, but it is in fact coated with an insulator. (It's often called enameled wire, but it really generally is a polymer coating)


Neat...My dad was a customer engineer for IBM. He took me to work in the early 1970s, and one of the things he showed me was a memory cabinet that looked just like that.


Since nobody's mentioned it yet: If you want a musical accompaniment to this piece, try Jóhann Jóhannsson's amazing "IBM 1401: A User's Manual" http://ausersmanual.org/

Listen to part 1 here: https://www.youtube.com/watch?v=tBw_wSoVQrY


The 1401 wasn't a mainframe. It was a smaller computer designed to replace unit-record systems and was, in fact, sometimes used as a mainframe peripheral.

The mainframe of the era was something in the 7000 or 700 series, I think.


Linguistic arguments are somewhat pointless, but IBM disagrees with you: http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/mainfra... The IEEE also disagrees: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=5406338




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: