Moving to ARM (Part 1 – Picking the board)

Ever since Apple announced that they were going to switch away from Intel processors in favour of ARM, I’ve been considering making the switch myself as well. Ryzen is fast, but I’ve had issues with my TR2950x pretty much from the day I built it, and Intel seems intent on kicking the overpriced Broadwell / Skylake 14nm++++++ can down the road forever; and with ARM starting to pick up steam in the server market, I thought it might be about time I take a look at what’s available in the consumer market.

Raspberry Pi 4B – Courtesy of the Raspberry Pi Foundation

I’m sure everyone knows what a Raspberry Pi is at this point, but two things that it’s not, is a router or a server. MicroSD is slow, eMMC is slow, the platform doesn’t even support SATA, and gigabit ethernet is also slow comparatively to 10 gigabit (and you only get one network port).

Getting into ARM seems to be quite a niche still, despite the fact that practically everyone owns a cellphone, or a tablet, or a smartwatch these days… not to mention consoles like the Nintendo Switch, the Nvidia Shield family, or the multitude of retro-themed “mini” consoles on the market.

If you’ve ever rooted an Android phone, or installed CyanogenMod / LineageOS on one, you’ll know that it’s not an easy task to run your own code on them. Tinkering with most ARM devices is sadly the same way for the most part. The Raspberry Pi comes close to being open, but it still has its own firmware that you have to deal with, and none of this stuff is standardized.

I spent several months trying to find an ARM board that was relatively inexpensive (compared to x86), and had decent performance. ARM hardware development seems to come in waves, and we could be nearing the tail end of a lull if ARMv9 is coming soon (it was recently announced in March).

I didn’t want to wait until next year (or longer), so I settled on ARMv8. Eventually I found a board that had both 10 gigabit networking and SATA for storage. Enter the Marvell / SolidRun Macchiatobin.

Marvell / SolidRun Macchiatobin DoubleShot – Courtesy of SolidRun

This board packs two 10 gigabit ports for either copper or fibre / SFP+ DAC cables, a 2.5 gigabit SFP+ port, as well as an additional gigabit copper port. Perfect for running a router for a home lab. Add in the three SATA3 ports, and you have a storage server that can easily saturate a 10 gigabit network if you are using SSDs for storage.

Macchiatobin platform block diagram – Courtesy of Solidrun

The “mcbin” is powered by a Marvell Armada 8040 system-on-a-chip, which houses four ARM Cortex A72 processors clocked at 2GHz (or 1.6 for the cut-down “SingleShot” variant – which also drops the copper 10gbit ports), and supports up to 16GB of DDR4.

Marvell 8040 block diagram – Courtesy of Marvell

All of this power is contained within the Mini-ITX form factor, which means it should fit easily into any PC case. Speaking of power, both variants can be powered by either a 12V wall wart, or with the onboard ATX power connector. The wall wart (included separately) outputs a maximum of 2.5A, so the mcbin only consumes a maximum of 30W. My TR2950X idles around 200W, so I could run 6 of these at full tilt for the same amount of power.

This thing sounded too good to be true, but I was curious, so I bought one. Shipping was quite quick, and the board was well packed in thick foam. I wish all computer parts were packed like this, the packaging for a PC motherboard has zero protection whatsoever if UPS / Fedex decide to play soccer with your shipment.

At this point I was quite happy with my purchase, even though I hadn’t even powered it up yet. In part 2, I’ll go over my experiences in getting Gentoo running on the board, and in part 3 I’ll talk more about my plans to switch my homelab over to ARM processors.

How to run a NES from USB power

I recently installed a NESRGB into my NES, and wanted to remove the RF modulator from the system because I didn’t need it anymore. Or so I thought…

As it turns out, the NES also routes its power in and out of the RF modulator board a few times before sending the power to the main board to power the console. “Well that’s no good”, I thought.

NES power circuit – Courtesy of Console5

I looked around online and found an article on Hackaday where someone was doing something similar to what I was doing, however they were still powering the board from a barrel jack, and in some revisions cutting up the chassis to use a multi-out connector. I also didn’t need a palette switch since I soldered my NESRGB to the default palette. A little overcomplicated for what I needed, but still a cool project, and inspiration to come up with something I could easily use.

So I fired up Kicad and played around with a few ways to route the component video and audio out the original ports and power the console. I was quite surprised to find out that you can connect a USB B cable into a port using the same hole that was used by the barrel jack on the original board. A couple layout redesigns later, and I came up with a fairly bare bones PCB.

My somewhat basic attempt at making a replacement board

Theoretically you could remove the LED and resistors. I had originally included it as an “idiot light” to remind me to unplug the console if I was working on it with the chassis open, but in retrospect it doesn’t really add much other than a small amount of power draw and some light shining out the back of the console (and maybe a little out the cartridge slot if you didn’t put the metal RF shield back on). The resistor on the USB connector can also be replaced with a dead short, as I misinterpreted the USB power delivery spec.

So after a few weeks of work and building one of these up for myself, I had found out that people have been making these for a while. I suppose I shouldn’t be surprised at this point, the console is 36 years old, and the NESRGB has been around for almost 10 years. That’s okay though, I needed the PCB routing practice.