# P12 Suite: TunerPro XDF for the GM Delphi P12, OS 12627884 (EXPERIMENTAL v3.13) An open TunerPro definition for the 2006 Hummer H3 (3.5L I5, 4L60-E) P12 PCM running **operating system 12627884**. From the P12 Suite project, licensed GPLv3 (see LICENSE). **Experimental.** Every item was traced in the PCM's own code, checked by static analysis, and exercised in an emulator. **49 of 1932 items have been confirmed against a running vehicle**; the rest are code-validated only. Treat every change as a test: small steps, log the result, keep your stock read. ## Before you use it 1. **Check your OS ID. It must be 12627884.** Addresses do not carry between P12 operating systems. Loading this on another OS shows garbage, and flashing edits made that way can brick the PCM. 2. **Never change the OS ID.** 3. **This XDF defines no checksum, on purpose.** TunerPro cannot express the P12 scheme. Repair checksums before flashing: - P12 Suite: `python h3suite/run.py p12 repair ` - UniversalPatcher (P12 segment checksums) A bin with bad checksums will not boot. 4. Keep an untouched stock read, and know how to recover the PCM before you flash anything. 5. Axis labels are fixed numbers. The P12 computes most axes in code, so they are not stored in the bin. The labels come from tracing that code. Editing them does nothing. 6. **Items marked DO NOT TUNE in their description are included for reference.** They are protection, fault-handling or model tables. Read them and log against them, but leave them alone. 7. **Items marked "axis, edit with care"** are stored breakpoints that other tables are indexed by. Changing one moves every cell of the tables that use it. ## Loading it in TunerPro 1. **File > Open Bin…**: your own 1 MB P12 read (the `.bin`). 2. **XDF > Select XDF…**: `P12_12627884_experimental_v3.13.xdf`. 3. The title bar should read `TunerPro - .bin | XDF File - P12_12627884_experimental_v3.13.xdf`. If every table is full of random-looking numbers, the XDF was opened as the bin. Reload the `.bin`. Quick 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–4400 rpm; the table maximum is 43.5, and high-load rows settle near 15–18.5. ## What's in it 1932 items: 633 tables and curves, 1299 scalars. TABLES.md lists every item. | Category | Items | |---|---| | Diagnostics | 880 | | Transmission | 277 | | Fuel | 199 | | Spark | 115 | | Airflow | 114 | | Idle | 111 | | Torque | 92 | | Limits | 65 | | Engine | 51 | | Sensors | 20 | | Speedometer | 8 | ## Read this first if you use the 4-Lo or "Performance" tables **The tables named "Performance" in earlier releases are the 4-Lo tables.** This calibration has no performance mode: the PCM uses those shift and converter clutch schedules whenever the transfer case is in 4-Lo. They are retitled "4-Lo" in v3.7. Nothing about the values or addresses changed. **In 4-Lo the transmission's speed reading is 4.03 times road speed.** The PCM works it out from transmission output speed with the high-range ratio, so every transmission speed table acts at about a quarter of its listed speed on the road in 4-Lo. A 4-Lo upshift listed at 20 km/h happens at about 5 km/h. If you edited the old "Performance" tables expecting a sport mode, those edits have only ever acted in 4-Lo. ## Corrections in v3.12: read this if you used v3.11 ### The oxygen sensor response curves had the wrong airflow axis Twenty response-test curves in v3.11 label their airflow axis 0, 10, 20, 30 and so on. The real spacing is **half that**: 0, 5, 10, 15 g/s, over 0 to 100 g/s. **The values in the tables were always right** - only the axis labels were wrong, so a point you read as 40 g/s is really 20 g/s. These curves are flat on a stock calibration, so nothing behaved differently; it is a reading correction. ### EVAP tank pressure values are now in inches of water The engine-off evaporative leak test items were shipped as raw counts. They are **inches of water** on the PCM's own scale (1024 counts per inch, positive meaning vacuum), and the rate limits are inches of water per second. Addresses are unchanged. Two were also named for the wrong system: "worst cylinder accumulator ceiling" is the leak test's pressure phase time limit, and the correction check timer is its disturbance check interval. ### Three more "sample count" limits are times Same mistake as the timers above, found in a later audit: **P0068 fail** (0.19 s), **P0520 fail** (5 s) and **P0336 pass** (25 s) are times, not sample counts. An audit of the other count-type items in the same code found the remaining 13 really are counts. ### The four A/C cut-out items mean something different from what v3.11 said v3.11 called these "A/C Disable / Re-Enable TPS and RPM", which reads as "the A/C is cut above this rpm". **That is backwards.** They belong to the wide-open-throttle A/C cut, and the rpm pair is an **upper rpm limit on that cut**: the flag is set while rpm is *below* the value. Addresses, scaling and values are unchanged. | v3.11 name | v3.12 name | |---|---| | A/C Disable TPS | A/C WOT Cut - Throttle | | A/C Re-Enable TPS | A/C WOT Cut - Re-Enable Throttle | | A/C Disable RPM | A/C WOT Cut - RPM Limit | | A/C Re-Enable RPM | A/C WOT Cut - RPM Limit Reset | **On this calibration the WOT A/C cut never runs at all**: its maximum time is 0. So these four change nothing on a stock H3, whatever you set them to. ### Six "Diagnostic Monitor Precondition" items belong to one specific test They are the enable window for the **downstream oxygen sensor test (P0136)**, not a general precondition shared by the monitors, and are renamed "P0136 Test Enable - RPM / Airflow / Vehicle Speed Minimum and Maximum". Addresses and scaling are unchanged. ### Eight items were named for the wrong monitor The module they belong to is the **catalyst monitor** (P0420), not the misfire diagnostic. **Addresses, scaling and values are unchanged** - only the names were wrong, so nothing you read was wrong, but what you thought it controlled was. If you changed any of these expecting to affect misfire detection, they affect the catalyst monitor instead: | v3.11 name | v3.12 name | |---|---| | Misfire Diagnostic Enable - Airflow Minimum | Catalyst Monitor Enable - Airflow Minimum | | Misfire Diagnostic Enable - Airflow Maximum | Catalyst Monitor Enable - Airflow Maximum | | Misfire Diagnostic Enable - RPM Above Idle Limit | Catalyst Monitor Enable - RPM Above Idle Limit | | Misfire Diagnostic Enable - RPM Below Idle Limit | Catalyst Monitor Enable - RPM Below Idle Limit | | Misfire Diagnostic Hold Time - Mode A | Catalyst Monitor - Settle Time, Mode A | | Misfire Diagnostic Hold Time - Mode B | Catalyst Monitor - Settle Time, Mode B | | Fault Confirmation - Elapsed Seconds Ceiling | Catalyst Monitor - Closed Throttle Time Limit | | Fault Confirmation - Pass Counter Threshold | Catalyst Monitor - Readiness Count | ### Six diagnostic timers were labelled as sample counts These counted in "samples" in v3.11 and are really **times in seconds**. Addresses are unchanged; the numbers now read as seconds and the titles say "Time": | v3.11 title | v3.12 title | Stock | |---|---|---| | P0621 Fail - Sample Count | P0621 Fail - Time, Engine Running | 15 s | | P0622 Fail - Sample Count, Engine Stopped | P0622 Fail - Time, Engine Stopped | 5 s | | P0622 Fail - Sample Count, Engine Running | P0622 Fail - Time, Engine Running | 30 s | | P250A Pass - Sample Count | P250A Pass - Time | 30 s | | P0462 Fail - Sample Count | P0462 Fail - Time | 60 s | | P0141 Fail - Sample Count | P0135 / P0141 Check - Fail Samples | (renamed; it really is a sample count, shared by both codes) | If you changed any of these, re-read them: an entry you made as a count is now shown as the time it actually sets. ## New in v3.13 **9 new items since v3.12.** Nothing was removed, renamed or rescaled. All nine were proven earlier and held back by choice; they are released now. - **Transmission fault reactions (2 tables).** For each of the 115 transmission fault-code slots, whether that code drives its fault reactions (the limp-mode gear and pressure strategies) while it is failing, or from its first failure until the codes are cleared. Each column is labelled with its trouble code. On a stock calibration P0218, P0711, P0719 and P0724 react only while the fault is present; 31 other codes keep their reaction until the codes are cleared with a scan tool or age out. **Setting a slot to zero removes a transmission protection.** Leave these alone unless you know exactly which reaction you are changing. - **P2610 engine-off timer check enable.** 0 switches the check off. Stock is on. - **Secondary air (4 items).** System enable, channel count, and the channel on and off delays. Secondary air injection is switched off on the stock H3, so these do nothing unless the hardware is fitted and the system is enabled. - **Diagnostic model input ceilings (2 items).** The engine speed and airflow ceilings of a model whose only readers are the misfire monitor enable conditions, a diagnostic timer and the secondary air routine. They do not limit torque, spark, fuel or throttle; changing them moves when the misfire monitor runs. On a road vehicle, switching off a monitor or a fault reaction may break emissions law where you live, and a transmission that no longer protects itself can be damaged. These are published so the PCM can be read and understood in full; changing them is your call and your risk. ## Earlier releases - **v3.12:** 703 items (almost every diagnostic monitor, line pressure by gear, cruise control limits, oil life) and the seven corrections listed above. - **v3.11:** 18 items (the EVAP leak tests, the spark reference for cam target reduction, the cruise control demand target) and the correction that 23 tables had the wrong sign setting. - **v3.10:** 4 items (open-loop hot-restart gain, engine torque estimate, EVAP purge flow model pair) and the correction that 8 tables had their rows and columns swapped. - **v3.9:** 31 items (the closed-loop correction on the electronic throttle's torque limit, traction control request default and floor, P0741 / P0742 ratio windows, misfire-type diagnostic airflow window, idle throttle area cap). - **v3.8:** 95 items (P0711 fluid temperature checks, neutral safety switch ratio windows, trouble code sample counts, 47 items marked (inactive)) and three retitled P0116 / P0742 items. - **v3.7:** 327 items (shift solenoid test enables, MAP sensor and fuel trim monitors, O2 response test, cam phasing, closed-loop fuel, tip-in torque) and the correction that the "Performance" tables are the 4-Lo tables. - **v3.6.1:** removed the catalyst over-temperature confirm switch that v3.6 shipped by mistake. - **v3.6:** 108 items (transmission speed pair and 4-Lo ratio, transmission monitors, 55 diagnostics, idle follower, rev limiter hysteresis). - **v3.5:** 72 items (injector short pulse width correction, EVAP purge ramp, cam phasing enable and region selector, shift idle-air kick timers, idle airflow follower) and the correction that two "fuel trim boundary" tables are the cam phasing region boundaries. - **v3.4.1:** corrected the VE cam-axis note. Text only. - **v3.4:** 206 items (shift and TCC schedules, cold-engine shift limits, TCC slip, garage pressures, cam phasing, the hot high-load spark ceiling, spark floors, knock detection, idle acquire, the per-code DTC status table). - **v3.2:** 116 items (P0741 monitor, TCC, hot mode, idle airflow learning, tip-in torque management, rpm limiter) and the correction that VE banks 2-5 very likely blend in under load. - **v3.1:** 56 items (LTFT, transient fuel, PE delay, start-up, DFCO exit, gear ratios) and the correction that Final Drive Ratio and VSS Tire Revs fix the speedometer, OBD speed and speed limiter but not shift points or converter lockup. ## Diagnostics and trouble codes - **Per-code DTC status table:** one byte per trouble code (276 codes, labelled by P-code). Setting a code's bits 0-1 to 0 stops the PCM reporting it; 1 to 3 set the report type (proven in code). Bit 2 is commonly read as the MIL request (community decoding, not checked in this code). Note the stock value before you change a code, so you can put it back. - Turning off a code for hardware you have removed is your call. On a road vehicle, disabling emissions-related codes may break emissions law where you live. - **In from v3.13:** the P2610 engine-off timer check enable and the transmission fault reaction enables (see New in v3.13). - **Left out on purpose:** the switch that forces the emissions monitors to report ready, and the one that switches off the catalyst over-temperature confirm logic. ## What's been checked, and how - **Live (49 items):** the MAF transfer curve, the VE banks, the idle targets and ramp, the Normal shift schedule, the speedometer constants (decode only: the PCM derives speed from them, so this does not measure your tires), the output-shaft pulses per rev and gear ratios, the catalyst light-off items and the others marked in TABLES.md. - **Execution-level checks:** each table's own lookup code is run in an emulator and the axis inputs are swept, so breakpoints are measured rather than assumed. Since v3.10 the same run also confirms each table's row and column layout at every grid point. Tables gated by gear, mode or schedule are run through their own routines with that state set. - **Third-party cross-check:** TunerPro itself loads each release on a stock read and exports every parameter; v3.0 through v3.13 matched our independent decoder on every item (0 failures). - **Everything else** rests on code tracing. ## What's deliberately NOT in it - **Held for more evidence:** injection timing (unit not proven), injector offset, maximum line pressure, the line pressure tables (until line pressure is logged), and items whose structure is known but whose purpose is not. - **Monitor enables:** most on / off switches of the diagnostic tests stay out, as do the readiness override and the catalyst over-temperature confirm switch. The P2610 engine-off timer check enable is in from v3.13. - **Secondary air:** the system enable, channel count and channel delays are in from v3.13; the remaining secondary air items stay out until every field is proven. - **The transmission fault code mask table** (which reaction each code triggers) stays out until its remaining flags are identified. ## Known limitations - **This is not the whole calibration.** Many further tables in the calibration region are located but not identified yet, many of them diagnostics and monitors. These 1932 items are what has been proven, not a complete map of what is tunable. - **VE display units.** The VE banks are shown as the raw cell / 16. Physical volumetric efficiency looks like roughly cell / 40960, but that rests on one narrow operating band. - **VE banks 2-5** are dormant at idle and light load; under load the cam very likely phases and the PCM blends banks 4 and 5 (traced in code, not yet confirmed on a drive). The cam axis is on the actual-cam scale, most likely crank degrees; the absolute scale is not yet proven. - **Main spark** is a high/low octane pair blended by a learned octane scaler: spark = High - (High - Low) x scaler. After a reset the scaler starts at 1.0 (all Low) and moves toward High while there is no knock. Change both tables together. - Units and axes come from tracing the code. If something looks wrong on your truck, report it. ## Reporting Send your OS ID, what you changed (old and new values), and a log (CSV is fine). Corrections are as useful as confirmations. A drive log in 4-Lo, and a log of one shift after changing tire size, would confirm the transmission speed and 4-Lo items released on code evidence, including the 4-Lo full-throttle shifts. ## Build info - Definition: P12 Suite p12_h3.json v3.526.0-experimental (1932 items released) - Generated with `xdf_export.py --from-def --tier release` - Release gate: all six validation fields established, a maintainer-signed category, and code or live evidence behind the item's function; the gate refuses any held item and both monitor-defeat controls - Checks run: XDF round-trip through our importer, description length under TunerPro's limit, a scan that fails the build on any third-party tool reference, a plain-English check that fails the build on any internal name or admitted-unknown text in a released item, an item-by-item diff against v3.12 (9 added; none removed, retitled or rescaled), a check that every table's layout matches its own header, and a check that every table's sign setting matches the code that reads it - TunerPro cross-check: TunerPro loaded this exact file on a stock read and exported every parameter; all 1932 items matched our independent decoder, with no failures and no axis-label mismatches NO WARRANTY. You flash at your own risk. Modifying engine calibration may affect emissions compliance and vehicle warranty in your jurisdiction.