This page documents my work analyzing and reverse engineering the GM 12588500 PCM firmware. I’ve collected notes, pinouts, variable mappings, function references, and other details that help me understand how this PCM works internally. Everything here is a work in progress, many of the names and assumptions are based on my best guesses so far, and I’m using this page as a reference point as I dig deeper into the code, hardware, and calibration structure.
- M68K is a 16 register CPU, each register being 32 bit
8 Data Registers (D0-D7) - General Purpose
8 Address Registers (A0-A7) - Pointers
A7 is always used for the system stack
All Big-Endian
- Runtime memory seems to start at 0xFFFF8000, no references to any values from 0xFFFF0000-FFFF7FFF
- Lots of empty memory between 0x50000-0x60000, insert custom functions there?
- Sensor inputs end up in runtime memory, need to map what address each sensor input ends up at
Sensor>Wire>Input pin>Analog to Digital Convertor (ADC)>Runtime Memory
Does not use a register to store sensor inputs, they go straight to runtime memory
A full pinout of the P04 PCM, covering connector numbers, pin numbers, wire colors, and what I’ve determined each pin does. There’s also a separate sheet where I’ve collected pins I wasn’t sure about yet. I’ve highlighted pins on the second sheet to indicate whether they can be used, might be usable, or definitely can’t be used. Basically my working reference for planning pin repurposing and figuring out signal mapping.
This is my primary reference while working through the 12588500 OS. The sheet has two tabs: one listing all the tuning tables I’ve used and where they’re stored, and another that maps out runtime memory addresses I’ve been able to identify. This helps me keep track of where the PCM stores key values, and interpret what functions are doing based on the variables used.
A list of functions that I think I’ve figured out in the 12588500 PCM firmware — these are just my best guesses based on which variables they reference, not confirmed identifications. I used this more as a working list while digging into the code, but my primary reference is really the variables list.
The full Motorola M68000 Programmer’s Reference Manual. This is my go-to resource for understanding the CPU architecture the PCM is based on. It includes all the instructions, addressing modes, register details, and exception handling info. I refer to this constantly when disassembling the firmware and working out how individual instructions interact with memory and registers.