About a year ago, smack in the middle of the pandemic, I turned to the internet for some retail therapy. I’m a musician, so my usual retail therapist of choice is Reverb.com; a sort of fancy Craigslist or eBay just for musicians. Every day, I would see new listings pop up for instruments I might want, like a 6-string fan-fret bass, a nice electronic drum kit, or my “holy grail” – a super-rare, 22-year-old analog synthesizer: the Alesis Andromeda.
The Andromeda is a 16-voice polyphonic analogue synthesizer; basically a keyboard that sounds very lush, human, and organic, and can play a lot of notes at once. (That combination is expensive, for reasons.) Every function is controllable by a separate knob on the front panel, making it extremely interactive; every knob makes the sound change in some way.
As a kid, I remember playing one of these at my local music store in the early 2000s. It was the biggest, most expensive, and most intimidating thing in the shop. Here’s an extremely kitschy ‘90s demo video:
Synthesizers with similar capabilities cost over $9,000 today. The Andromeda was discontinued in 2010, and since then, prices for working units have shot up to around $6,000. There’s no way I could justify spending that kind of money.
Until one day, in October 2021, a listing popped up on Reverb. The seller was explicit: this unit was used, broken, and non-functioning.
I’m selling this synth for parts. It turns on but hangs on the splash screen. It’s missing side trim pieces, pitch/mod assembly, several knobs and several screws. The casing has nicks and scratches. The metal sides are a bit bent. The cable that connects the analog board to the main board has a cracked tensioner so maybe that’s part of the issue? I don’t have the tools or knowledge to fix this one so I’m passing it on. I can’t get it to do any tests so I can’t tell if anything is working. No returns on this one.
I was tempted. I looked up the service manual online, and found that there were many debugging steps one could take to try to fix problems like this. I’ve also had plenty of experience dealing with hardware. My computer hardware classes at university even dealt with the same CPU used by this synth – the Motorola Coldfire (which uses a variant of the M68k architecture) – and I had a small cache of tools that might be useful. Feeling bold, and desperately bored after 18 months of working from home, I sent an offer.
After two weeks of eager waiting, the synth arrived to my apartment in New York from Portland in a massive box. As described, it was in bad shape. The service manual provided a list of debugging functions that could be accessed by holding down one of eight buttons on the front panel during boot:
I had hoped that the previous seller just hadn’t discovered this information, but it turned out that these functions did not work at all. Time to dig deeper. No combination of buttons would do anything, nor would any other tips or tricks from the official manual.
Luckily, back in February of 2015, users on the popular forum GearSpace started a 15-page thread about how to debug a non-booting Andromeda. This thread included links to a confidential service manual that contained more debugging tips, intended for distribution only to Alesis-approved service centers. This service manual also included full schematics for the entire synth, showing how all of the components were logically connected together.
This service manual revealed a couple of important things: while this is an analogue synthesizer, meaning that sound is generated via non-digital, analogue circuitry, its brain is entirely digital. It uses a Coldfire CPU (an MCF5307 running at 90MHz), has 2MB of Flash memory to store its upgradeable operating system, 1MB of RAM for use at runtime, and 512kB of battery-backed RAM for persistent storage of user settings.
The great people in this thread also suggested a number of fixes to try:
-
Replacing the resonator on the LCD panel: the Andromeda will often fail to boot if the front panel controller can’t communicate with the LCD. The LCD panel uses a 3MHz ceramic resonator that can sometimes fail, and when the LCD’s clock is unstable, serial communication with it can fail. Luckily, a new crystal oscillator costs about $1, and that part is very easy to replace. (Unluckily, that didn’t seem to help.)
-
Adding a pull-up resistor to the SRAM chips: the Andromeda uses two external static RAM chips, providing a total of one megabyte of RAM. These external RAM chips are connected to the data and address busses of the CPU. During boot time, each SRAM chip may accidentally be enabled by default. If this happens, other devices on the bus (like the Flash memory chip that stores the operating system) will have their data overwritten by the data coming from each SRAM chip until they are disabled. (Think: too many people talking at once.)
This problem is called bus contention. The solution to this problem is to “tie” the Chip Enable pin of each chip to its “off” value (+3.3 volts) by using a resistor. This resistor is called a pull-up, as it pulls up the voltage on the pin when no other devices are controlling the line. By using a resistor, other devices are still able to pull the pin high or low; the resistor essentially sets a default value.
This resistor is a cheap and plentiful part – a 4.7kΩ resistor costs only pennies. Adding the resistor requires very careful soldering, though, as the pins on the SRAM chip are extremely close together. More on that later.
-
Replacing the Flash memory chip that stores the operating system. This logically made sense; Flash memory is reprogrammable, and it’s possible that the Flash may have been corrupted somehow, preventing the system from booting. Unfortunately, the Flash memory on the board is an extremely small part and is difficult to replace without advanced soldering skills or the proper equipment.
-
Replacing the entire CPU. I was incredulous about this; I’ve never heard of entire CPUs failing, but many people suggested that a whole-CPU replacement was necessary to get their synthesizers working again. This was a last-resort issue, as the CPU had 208 extremely fine pins that would be difficult to solder.
At this point, I thought the next step was to start making changes to the hardware to try to fix one or more broken parts. I’ve been using a soldering iron on and off since I was about 10 years old, so I thought I had the dexterity, patience, and steady hand required to solder a single resistor across the two pins.
I did not.
In my effort to add a resistor between chip U12 and capacitor C50, I managed to short out multiple pins of U12. Then, when trying to fix my mistake by replacing the chip, I accidentally tore off at least 12 of the 44 solder pads that connect the chip to the circuit board.
If the synth wasn’t working before, it definitely wasn’t working now. I had to concede defeat and call in someone to help.
I started emailing around to local, NYC-area electronics repair shops – including the famed Rossmann Repair Group only blocks away, but none of them said they were able to fix a problem like this. After some more searching, I found a blog post from Edmonton-based VideogameRepairs.ca in which they had replaced the CPU and Flash chips of an Andromeda in the past, and sent them photos, asking if they would be able to fix my self-inflicted soldering damage. To my surprise, they said they’d be able to repair the board and replace its CPU, although had no means to test it.
Two months later, after buying a replacement CPU on eBay and shipping my main board from New York to Edmonton and back, I finally had a repaired board with a new SRAM chip and CPU. I had opted not to replace the Flash memory, as I didn’t know if it was good or bad, or how to go about reprogramming it. As part of the repair, a pull-up resistor was also added to the SRAM chips’ chip-select pin, just like the folks on Gearspace.com had suggested. (The repair job was amazing; huge thank you to Daniel Wynne at VideogameRepairs in Edmonton for such intricate rework – and for only $300 USD, too!)
…but the machine still refused to boot. Time to step things up a bit.
As I was waiting for my repaired circuit board to arrive in the mail, I pored through the service manual carefully. Surely there must have been some way to get more insight into what was going wrong during the boot process. The design engineers at Alesis included many test points in the synth where it was possible to hook up an oscilloscope or logic analyzer to ensure the system was behaving as expected.
Along with those test points, I noticed that the Coldfire CPU exposed a number of pins to a 26-pin header, conveniently labelled DEBUG PORT
.
Some searching for some of the keywords on the circuit diagram – including DDATA
and PST0
– led me to discover that this was a proprietary (but well documented) debugging interface specific to Coldfire processors. This is a form of debug interface known as Background Debug Mode, or BDM; which provides much of the functionality required by today’s software debuggers, like GDB or LLDB.
I spent a couple of days searching more to find any existing software and hardware that could connect to this debug port. Unfortunately, each solution was a pain, for different reasons:
- BDM interfaces exist on eBay for less than $20, but they target a slightly different BDM protocol than the one used by this CPU.
- Open-source projects like USBDM exist, but require custom hardware interfaces that don’t seem to be for sale anywhere, only seem to work on Windows and Linux, and require proprietary IDEs like CodeWarrior.
- PEMicro sells debug probes that are pin-compatible with exactly this Coldfire debug interface, but the cheapest hardware options cost $300. (This would have probably worked, to be honest.)
Building a BDM Interface #
Given that it was fairly difficult or expensive to use existing tools, I looked to see if maybe I could build my own using common parts, like an Arduino. The CPU’s 484-page user manual goes into tons of detail about how its debug port works: it’s really just a serial interface where the debugger send