Skip to main content
shopping_basket Basket 0
Login

Building a Retro 32-bit Core Memory for Arduino

Dave Ives
10

Completed PCB of a 32-bit Core Memory for Arduino

Assembling an Arduino shield kit that demonstrates how computer core memory works.

Building on the work of  Ben North and Oliver Nash at corememoryshield.com, Jussi Kilpeläinen has come up with a kit for a core memory Arduino shield – a project that he describes as “hilariously impractical”.

Picture of ferrite core memory
Image by Konstantin Lanzet shared on Wikipedia, licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license.

For a year or two, my computer at work has had this picture of ferrite core memory for its wallpaper. It was one of those images I had come across on Wikipedia, while searching for something else, and had liked and saved. I understood it was an early type of computer memory but beyond that knew little or nothing about it.

Then my colleague pointed me at a DIY kit for building a 32-bit ferrite core memory made by Jussi Kilpelainen in Finland and I thought it would be fun to build and find out a bit more about this pioneering early computer technology. Little practical purpose but gives an insight into the development of computers without which the world would be a very different place.

Magnetic-core memories were the predominant form of computer memory from the mid-50s until the mid-70s. They work by storing information into the magnetic field of a ferrite core. 

Each ferrite ring, or core, can be magnetized in either the clockwise or anti-clockwise direction and can therefore store one bit of information. The value of the bit stored in a core is zero or one according to the direction of that core's magnetization. The direction of the magnetization in a core can be set by passing an electric pulse through the wire threaded through it - one direction will result in clockwise magnetisation, the other anti-clockwise, thus storing a one or a zero. Another wire through each core, the sense wire, is used to detect whether the core changed state. 

Core memory is non-volatile, meaning that it preserves its contents even when power is turned off. Also, the process of reading the memory destroys its contents, so that every read must be followed with a write if you don’t want to lose these. The disadvantages of this type of memory are that it is power-hungry, requires a lot of space and needs to be protected from strong magnetic fields. 

One of the early uses of core memory was in a real-time aircraft tracking system developed by the Massachusetts Institute of Technology in 1953 called Project Whirlwind.  Early commercial use of Core Memory in the mid-1950s was in jukeboxes.

Assembling the kit

Components used to build the core

I decided to tackle the most difficult part of the kit first, threading the tiny ferrite beads onto the copper wires and soldering them in place. 

Threading tiny ferrite beads onto the copper wires to create the core
Starting with the vertical wires, I soldered one end in place, threaded eight beads on to it and then soldered the other end, while trying to keep it as taught as possible. After I had completed this I read a good tip for taping the wire down before soldering it, using Kapton tape (436-2762) to help keep it taught. A pair of needle-nose tweezers (054-9628) was an invaluable tool during this process.

Illustration of bead correctly oriented
The next job was to thread the horizontal wires through the beads, making sure the beads were correctly oriented – each bead being diagonal to the wire and at right angles to the bead next to it, as in the illustration above.

Finally, I threaded the sense wire, again following the illustration where it is the one coloured orange.

Threading the sense wire through the core

Once that was done I breathed a sigh of relief and set about soldering the components in place, starting as ever with the resistors. It was then that I discovered the values for the resistors I had supplied with the kit, did not match the ones in the BOM I was working from. Which confused me somewhat until I noticed that the latest version of the board had been updated to use 5V from the Arduino, whereas the version I had was an older one that had a connector for a 3.3V supply. I checked the date on my PCB, located the corresponding BOM and everything matched up.

Assembling the resistors onto the PCB
That mystery cleared-up, I started by soldering the resistors on the base of the PCB.

The board is quite compact with components close to each other, including 4 SMD bridge rectifiers and two SMD resistors that solder between pins on the underside of the PLCC socket – so it was not a completely straight forward build and took some time to complete. 

PNP and NPN transistors correctly assembled on PCB
The driver transistors were also quite tricky; as well as making sure I did not mix up the PNP and NPN transistors, the resistors on the underside of the board do get in the way a bit but as long as you use a soldering iron with a fine tip it is do-able with care.

Luckily the documentation is good and clear, as long as you make sure you are reading the version for the iteration of the board that you are working on!

Arduino

The creator of the kit recommends using an Arduino UNO (715-4081) , although also cautions that the large USB B socket can sometimes interfere with the underside of the shield. I fixed a small piece of insulating tape over the top of the socket, to make absolutely sure it did not short out anything on the base of my shield.

I also tried an Arduino Leonardo (761-7324) that has the much smaller mini USB connector but did not have any luck getting it working with that.

I needed to supply 3.3V to the connector on the shield, which I did using my bench power supply.

The Lattice CPLD (Complex Programmable Logic Device) included with the kit comes pre-programmed, so all I needed to do to get my memory working was to upload the provided sketch to my Arduino, using the Arduino IDE.

Testing

Screen shot of test the core using a serial monitor

Once the sketch was uploaded I opened the Serial Monitor. I was greeted with the message “Welcome! If you're new, try using the commands 'r', 'w', 't' and 'R', 'W', 'T' to get started.” So it at least looked like the core memory was up and running and my “crochet had not been in vain.

I tried a simple write to the memory by typing “WFFFFFFFF” which returned the message 

“Core data write: 0xFFFFFFFF = B11111111111111111111111111111111”. I could confirm this had in fact been written to the memory, by typing R for Read and at once saw the following:

“Core data read: 0xFFFFFFFF = B11111111111111111111111111111111 “

So, everything seemed to be working.

As I said above the memory is persistent so, if I powered down the shield, then turned it on again and read it, it should give the same message – which it did. I also discovered that waving a fairly strong magnet over the core would erase or at least disrupt the memory.

Conclusion

This project is, as its originator says is “hilariously impractical”, but it has been educational and I now understand a little more about computer history — what that interesting thing on my PC wallpaper is and marvel at the skill and dexterity taken to thread all those ferrite beads. 

Cat supervising video of core assembly
On a side note, it was the first time I had used the Pi Camera booth to record a project and I was pleased with the resulting time-lapse video — obviously Vince the cat supervising proceedings helped enormously.

I currently look after production at AB Open. I have a background in the arts, environmental conservation and IT support. In my spare time I do a bit of DJing and I like making things.

Recommended Articles

Comments

February 2, 2021 11:59

OMG I worked on UNIVAC 1108A and UNIVAC 418-III Mainframe Computer systems in the 70's for Western Union that had core memories. Think max 256K of 36 bit words + 2 parity bits. One 64K cabinet was over 6 ft tall and 2 feet deep and probably 8 feet long. When a bit went bad you patched over to a spare bit. When that bit failed you patched to the second spare bit. Core memories can fail for many reasons. The cores can fail due to the heating that happens when they are magnetized and demagnetized and loose their properties. I have seen cores that have been deformed due to heat/cool cycles over many years of use. Anyway back to the story. If we had any more failures that would make the system inoperable so we called in a guy who used to work for Univac in Roseville MN (I kid you not when you called for him you got his mom on the phone at his farm. If he was there she would go fetch him if not she would say where he was (he traveled worldwide) and when he would get back. I only remember his name was Dale). He would show up on site with three women with microscopes, soldering irons and a vial of ferrite cores (much much smaller than the ones in the kit above). These women would unstring the core from a patch of memory (IIRC there were 1024 cores in a patch and 16K words per frame and 4 frames made a memory cabinet for a max of 4 cabinets per 1108. The 418-III was organized differently.) and replace the bad cores and restring the core in place. It was a fascinating thing to watch. We would wait until we were patched off to the last spare bit and we would call Dale. He would come in and do several planes while he was there. IIRC his fee was something like a flat rate for showing up plus expenses for him and his crew and then so much for shaking down the memory system (full diagnostics and margining) plus so much for time plus $10K per core replaced. It wasn't uncommon for his bill to be $50K+It seemed like a lot of $$ but still way cheaper than Univac as they would only swap the whole core plane. No onsite work other than install and test. I think in the 11 years I was there he was on site twice. Not a bad gig. Well a lot has happened since then. Those machines were pulled out, some were sent elsewhere. I still have the Univac 1108 sign that was on the top corner of the CPU of 1108C when we shut it down. You can see pictures of the system on the internet. One of the maintenance panels that I refurbished in the 80's is now owned by the Smithsonian. That was when men were men and computers were computers. Yeah 750nS cycle time and a whopping 125nS cycle time if you used IGR instead of core. Those were the days..........

0 Votes

February 9, 2021 12:18

@Sam Reaves amazing memories - thanks for sharing

February 1, 2021 12:56

This may be a bit to small in size - I would like 32bit * 32 (minimal) - fo my needs and I would have difficulty in assembling it.

I had a look in internet for a complete 32bit Core memory but could not find anything.
Can some help out?

0 Votes

February 1, 2021 12:55

Interesting - I'd like to try make a core ram for my Rpi usage. I wonder if one can buy pre.treaded cores.

0 Votes

February 7, 2021 10:13

@Bonzadog The core store is non volatile there for more like an SSD drive than RAM. Probably the first solid state non volatile memory, drums and tapes having moving parts.

February 1, 2021 12:01

I also used these memory types. They were in an HP intelligent terminal / early computer and had 3 stacked 32K x ? ferrite PCB's. The ones I had were made by the wives of Russian fishermen and incredibly intricate. They were covered by aluminium plates to both protect and try to minimise magnetic sensitivity.

0 Votes

February 9, 2021 12:20

@Zonko The Russian fishermen's wives is an interesting detail - I had heard that Indian women lace makers were employed, but never knew if it was true or not

Sue

February 1, 2021 11:32

Excellent project :)

0 Votes

January 28, 2021 06:42

Great article Dave! I worked on a military avionics project in the early 1970s that used 32K x 18bit ferrite ring memory modules with 0.03mm diameter cores. The core 'mat', X-Y and Inhibit drivers, and Sense amplifiers all fitted into a unit the size of an average hardback book. What sort of Access Time does this modern version have? Those old modules had an AT of 450ns: comparable with the Static RAM chips of the time.

0 Votes

January 28, 2021 06:41

@Bill Marshall Fascinating to hear from someone who has first hand experience. I'm not sure about the access time - the original work by Ben North and Oliver Nash in this report - https://corememoryshield.com/report.html - says "Cycle time is such that a 32-bit operation takes 0.5ms" Cycle time is such that a 32-bit operation takes 0.5ms,

DesignSpark Electrical Logolinkedin