LSxHunter
Experimental · Free · GPLv3

Open TunerPro XDF for the H3 P12, OS 12627884

2006 Hummer H3, 3.5L I5 (L52), 4L60-E. Nobody had published an open definition for this OS, so I built one. Every table here was traced out of the PCM's own code, not guessed from hex. Version 3.13, released 2026-10-02.

Download v3.13

.zip, 263 KB · XDF + README + full item list + license

Read this before you load it

  1. Your OS ID has to be 12627884. P12 addresses don't carry between operating systems. Load it on another OS and you get garbage. Flash edits made that way and you can brick the PCM. Never change the OS ID. How to check it.
  2. No checksum in the XDF, on purpose. TunerPro can't express the P12 scheme. Repair checksums before you flash (P12 Suite p12 repair, or UniversalPatcher). Bad checksums, no boot.
  3. Keep an untouched stock read and know how you'll recover the PCM before you flash anything.
  4. Changed tires or axle gears? Change four values, not two. Final Drive Ratio and VSS Tire Revs set the speedometer, OBD speed and speed limiter. The transmission's own pair, Final Drive Ratio - Transmission Speed and Tire Revs per Distance - Transmission Speed, sets shift points and converter lockup. Put the same numbers in both pairs. The transmission pair is proven in code, not yet on a drive: log a few shifts after.
  5. 49 of 1932 items are confirmed on a running truck. The rest are proven in the PCM's code and in an emulator, not on the road yet. Small steps. Log everything.

What you need to read, flash and log a P12

Not sure what to buy? This is the short list.

As an Amazon Associate I earn from qualifying purchases. That costs you nothing extra, and the XDF stays free either way.

Keep it free

The XDF is free and stays free. If it saved you time, a tip covers the hosting and the hours of tracing.

Tip the project

Check your OS ID first

Don't go by year and model. GM service reflashes and other H3 years can run a different OS, and the XDF only fits 12627884. Check the read you're going to edit:

  1. Your read tool. Most P12 read tools show the OS ID when they pull the bin. With P12 Suite, python h3suite/run.py flash props reads it from the PCM (a safe read), and python h3suite/run.py p12 osmatch your.bin 12627884 checks a saved bin.
  2. A hex viewer. In a 1 MB 12627884 read, the four bytes at offset 0x8004 are 00 C0 AF AC, which is 12627884 in hex. Anything else, stop.
  3. TunerPro. Load it and look at Main Spark Advance - High Octane (see Loading it in TunerPro). Garbage there means the wrong OS or the wrong file.

What's in it

1932items released
633tables and curves
1299scalars
49confirmed on the truck
CategoryItems
Diagnostics880
Transmission277
Fuel199
Spark115
Airflow114
Idle111
Torque92
Limits65
Engine51
Sensors20
Speedometer8

Cross-checked in TunerPro 5.00 on 2026-10-02: TunerPro loaded v3.13 on a stock read and exported every item, and 1932 of 1932 matched our independent decoder with zero failures (v3.12: 1923 of 1923, v3.11: 1220 of 1220, v3.10: 1202 of 1202).

How it's proven

Nothing goes in because a number looks right in a hex dump. Every finding gets a numbered entry in an evidence ledger, and a script re-proves each entry from the stock read. The ledger is past 1080 entries.

0.33°average warm-idle spark error, emulator vs the truck
0.99desired-throttle match replaying a full drive (1.0 = perfect)
464diagnostic PIDs mapped to the memory they report
1080+evidence ledger entries
  1. Traced in the code. Each item is found by following the PCM's own code to the instruction that reads it. The address, size, units and axes come from how the code uses the value, not from what the bytes look like.
  2. Run in an emulator. The PCM's whole operating system runs in an emulator at its real task rates, and logs from my truck are replayed through it. At warm idle it lands on the truck's logged spark within 0.33 degrees on average. Replaying a full drive, it tracks the truck's own logged values: desired throttle at 0.99 correlation, engine load and cylinder airflow at 0.98, delivered torque at 0.95, rpm exact, desired idle within 12 rpm. Cruise spark lands within 1 degree on 16 of 18 steady 4th-gear rows. Its airflow model agrees with the MAF within 3 %.
  3. Cross-checked in TunerPro. Every release is loaded in TunerPro on a stock read and every item is compared against the independent decoder (above).
  4. Confirmed on the truck. 49 items are confirmed on a running truck with a log to show it. That number only moves when a drive proves something.

Where the emulator still misses: coasting. On closed-throttle decel it reads spark about 16 degrees high and throttle 1.5 to 2 % low, because the decel logic isn't engaged in the rig yet. It's listed so nobody reads more into the numbers than they say.

Mapping progress

How much of the calibration (131,068 bytes, 0x20000 to 0x3FFFB) is accounted for, as of 2026-10-02. Counted in bytes, so one big table weighs more than a single setting. Refreshed every few batches while the mapping work runs.

"Located" means the PCM's code is known to read it; "identified" means we know what it does and how to scale it. The byte share moves slowly because most new finds are single settings, a couple of bytes each, and because items only count as released once they pass every check.

Proven, but held back from v3.13

The gauge cluster gets vehicle speed over the Class 2 bus, as the same number OBD reports, so there is no separate speedometer calibration to find on this truck.

New source of names: the E40

The P12 is built from the same Delphi code library as the E40 PCM (2005-06 GTO, LS2). Using the open E40 definition shared on pcmhacking.net, the two operating systems were matched routine by routine with every address masked out: 964 routines line up, 813 of them exactly. Wherever the E40 code reads a named setting, the P12 reads its counterpart at the same point, so the name carries over.

Checked against 37 settings already proven here, it agreed on 35, and every exact match agreed. It points at about 130 more settings, among them cranking spark, coolant and catalyst over-temperature limits, open-loop fuel, fuel-trim limits and launch spark.

Nothing ships on the E40's word. Each lead is traced in the P12's own code (units, axes, what it does) before it goes in the XDF. The E40 match seeded many of the early fuel and start-up items (most of v3.1's additions came this way), and it still points at leads. Every one was re-traced in the P12's own code before it shipped.

Changelog

v3.13 · 2026-10-02 · 1932 items (+9)

Older releases: v3.12 back to v2.94

v3.12 · 2026-10-01 · 1923 items (+703)

v3.11 · 2026-09-30 · 1220 items (+18)

v3.10 · 2026-09-30 · 1202 items (+4)

v3.9 · 2026-09-29 · 1198 items (+31)

v3.8 · 2026-09-28 · 1167 items (+95)

v3.7 · 2026-09-27 · 1072 items (+327)

v3.6.1 · 2026-09-25 · 745 items (correction)

v3.6 · 2026-09-25 · 746 items (+109)

v3.5 · 2026-09-25 · 637 items (+72)

v3.4.1 · 2026-09-25 · 565 items (text fix)

v3.4 · 2026-09-25 · 565 items (+206)

v3.2 · 2026-09-24 · 359 items (+116)

v3.1 · 2026-09-24 · 243 items (+56)

v3.0 · 2026-09-23 · 187 items (+21)

v2.99 · 166 items (+13)

v2.97 · 153 items (+10)

v2.94 · 143 items

Loading it in TunerPro

  1. File > Open Bin: your own 1 MB P12 read.
  2. XDF > Select XDF: the .xdf.

Every table full of random numbers? You opened the XDF as the bin. Quick sanity check on a stock read: in Main Spark Advance - High Octane, the 0.08 g/cyl row starts at 27.0 and peaks at 41.0 around 3600 to 4400 rpm.

Common edits

The three changes most people come for, using released items only. One change per flash, repair checksums, and log before and after.

New tire size or axle gears (speedometer and shift points)

Idle speed

Shift points

Left out on purpose

This isn't the whole calibration. There are several hundred more tables in the cal region nobody has identified yet. These 1932 are what's been proven.

Got a 12627884 truck?

Send your OS ID, what you changed (old and new values), and a log. CSV is fine. Corrections help as much as confirmations. Post it in the group or message the page.