The project has come with a long list of challenges across software, hardware, and everything in between. This section outlines the major issues I have run into and what made each one a problem.
Challenge
Tuning support for the 3800 platform is limited and expensive. HP Tuners is the only full-featured commercial option, but it requires a $400 hardware interface and charges $50 for each flash license. Even then, the reads are saved in a proprietary format that limit compatibility with other tools. PCM Hammer was a free and open-source alternative, but every read failed CRC verification and appeared unusable.
Solution
I chose to use PCM Hammer along with a $75 USB-to-OBD2 interface. I modified the PCM Hammer source code to bypass the CRC check, then read the PCM six times to ensure the outputs were identical. That gave me a clean raw binary to work with in Ghidra. From that moment forward, I committed to using open source tools like PCM Hammer and Tiny Tuner, despite their limitations, due to the potential for me to modify these programs if necessary.
Challenge
I had never touched Motorola 68K before. I didn’t know the instruction set, architecture layout, or how anything was structured. I started out using IDA, which doesn’t properly support 68K, but I didn’t realize that at first and wasted time trying to understand why I couldn't find known values.
Solution
Once I realized the issue with IDA, I switched to Ghidra, which decoded the binary correctly. I then spent a lot of time just reading and testing until things started to click. I'm still not a 68K expert, but I don’t feel completely lost now.
Challenge
There is no official documentation for this OS. No memory maps. No tuning table layout. No instruction on how the PCM operates. It was just a raw binary.
Solution
Mapped memory myself. Found a few community resources and cross-referenced them. Documented every table and variable I could find as I went.
Challenge
My O2 sensor would not clear the firewall with the headers I had installed. My only solution to get the O2 sensor past the firewall was to completely remove the rear exhaust bank, which required removal of the rear cylinder head as well. I decided to weld in an O2 sensor bung further down the exhaust, but it was mounted too far downstream and gave inconsistent, turbulent readings.
Solution
I did more research on exhaust air, condensation points, and turbulence in exhaust to determine a better placement for the O2 bung. I wound up removing the rear exhaust bank again, then welded in a 45 degree O2 bung, allowing the O2 sensor to clear the firewall, allowing for easier access if I ever need to change it.
Challenge
The Eaton Gen 5 M90 supercharger I installed did not support the factory EVAP routing used on my car. The original setup placed the EVAP purge solenoid directly into a port at the back of the supercharger, but this location no longer had clearance due to the larger throttle body and adapter used in the new setup.
Solution
To retain EVAP functionality, I reused the EVAP system from the Gen 3 M90 setup that originally came with the car. I tapped a new hole in the back of the Gen 5 supercharger case and installed a brass hose barb fitting into the tapped hole. Then I ran a hose from the EVAP purge solenoid to the new fitting, restoring a working vacuum path. During the process, I accidentally filled the supercharger case with metal shavings and had to fully disassemble and hot tank it. I also stripped a bolt on reassembly, which required repair before reinstalling.
Challenge
While repairing a coolant leak, I lost track of a washer, which I didn’t realize it had fallen into the intake port on the cylinder head until I started the engine again. The washer made its way into cylinder 5, shattering the piston and completely grenading the engine block.
Solution
I began searching for a replacement engine, thinking it would be simple given how common 3800s are. But most available engines were from the naturally aspirated Series II 3800, which has a 9.4:1 compression ratio compared to the 8.5:1 compression in the supercharged L67. While the higher compression would have been interesting from a performance standpoint, the NA bottom end uses cast internals that are not designed to handle the stress of boost. It would have required a full rebuild with forged parts just to make it viable long term.
This left me looking specifically for a complete L67 bottom end. Even though the 3800 platform is widespread, finding a good-condition, supercharged-compatible engine was difficult. After weeks of searching, I finally found one on eBay and had it shipped from Minnesota. Only then could I begin the full teardown and rebuild process to get the car back on the road.
Every part of this project taught me something. From disassembling an engine to digging through raw firmware, these are the key takeaways I picked up while reversing the 12588500 PCM OS and getting the car back together.
Reversing an OS takes time. Rebuilding an engine takes time. Nothing works right the first time and forcing it only makes things worse. Whether it was waiting for parts, rechecking code, or figuring out why something was not logging, patience was the only reason I did not make everything worse.
PCM Hammer and Tiny Tuner are not plug and play, but they gave me full control over my workflow. Once I figured them out, they were more flexible than anything commercial. Plus I didn't have to pay $50 for every PCM flash.
No matter how much time you commit to planning, you will never cover every edge case. Something unexpected will always show up. Build your plan so that changes do not destroy your foundation. A flexible approach is better than a perfect one, because a perfect one will fall apart the second reality disagrees with it.
Learning a new architecure is hard because it feels like learning an entirely new language. You do not recognize the syntax, the structure, or how anything flows. You have to learn the structure of the hardware with no prior knowledge. But it is also easy, because at its core it is still just code. The same core logic applies whether you are looking at 68K, x86, or anything else. Once you understand the fundamentals of how code works, like conditionals, loops, and memory flow, you are not starting from zero. You are just learning a new dialect of something you already speak.
These lessons apply far beyond this project. They shaped not only how I tackle new challenges in the future, but my thought process in day to day life.