P01 and P59 ignition driver hardware

Disassembly, Reassembly, Tools and devleopment. Going deep with Hardware and Software.
dubcrazy8392
Posts: 38
Joined: Fri Jul 18, 2025 10:57 pm
cars: -1981 6.0L LQ4 swapped C10 (aka lumpy)
-2000 silverado 2500 (daily work horse that does it with style)

P01 and P59 ignition driver hardware

Post by dubcrazy8392 »

I have been pulling my hair out for some time on an issue that came about when i custom coded spark cut launch control, flat shift and rev limiter into my P59 ECU. basically i have 2 trucks, both 6.0L, both running P59's converted to DBC. the one truck my 81 C10 is rather violent on the launch control with all the usual carrying on, fire and flames you get. my 2000 silverado on the other hand has 0 violence and just acts mechanical. with both of them if i even touch the hard spark cut rev limiter the engine shuts down and wont fire back up unless i cycle the key and restart it, it will fire right back up that way. the one not acting fun and them both shutting down on the limiter is extremely annoying. i have re-written the code for this 3 times placing the custom code from various jump out points like where there dwell time routine is entered, than i moved the code jump out inside the dwell routine near the end after everything is calculated but before the dwell in RAM is copied to the RAM for the TPU, still didnt fix the problems. than my last ditch effort was to inject my jump outs at the very last end of the chain where the dwell RAM is copied to the ram for the TPU. i thought i had it till today when i hit the rev limiter doing a burnout in my C10 and it shut down again. love the truck but i wanted to put road flair in it after it did that lol. so im wondering if there was hardware variances for the coil drivers themselves between P01 and P59? from what i can gather the TPU is inside the CPU so thats not something i could easily swap out to see if i get a different result plus putting a P01 processor in a P59 is extremely counter-productive. anyhow, who knows where the ignition coil driver chips are in these ECU's and if there may have been different hardware manufacturers chosen for the supply of the chips throughout the P01/P59's lifespan?
User avatar
antus
Site Admin
Posts: 10076
Joined: Sat Feb 28, 2009 10:34 am
cars: TX Gemini 2L Twincam 8psi
TX Gemini SR20 18psi
Datsun 1200 Ute
Subaru Blitzen '06 EZ30 4th gen, 3.0R Spec B
Subaru WRX 2007

Re: P01 and P59 ignition driver hardware

Post by antus »

It is external to the CPU and whats known about it is here viewtopic.php?p=131488#p131488
Have you read the FAQ? For lots of information and links to significant threads see here: http://pcmhacking.net/forums/viewtopic.php?f=7&t=1396
kur4o
Posts: 1154
Joined: Sun Apr 10, 2016 11:20 am

Re: P01 and P59 ignition driver hardware

Post by kur4o »

What may happen is when pcm enters your code it just crashes on exiting the code.

You can post some more info[diss of actual code, jump calls], might be something obvious.
User avatar
AngelMarc
Posts: 613
Joined: Sat Apr 08, 2023 11:23 am
cars: A CB450 running to 8,000RPM with a P59.

Re: P01 and P59 ignition driver hardware

Post by AngelMarc »

I think it's more likely you look at crank signal error.
Don't stress specific units.
User avatar
Knackersjewels
Posts: 156
Joined: Thu May 05, 2022 10:24 am
cars: Stock VZ SV6
Cammed VZ SV6 (sson to be 6L45 converted and twin turbo)
VY SS L98 ute
VZ V6 AWD One Tonner
Location: Maffra, Vic

Re: P01 and P59 ignition driver hardware

Post by Knackersjewels »

When I used the LS1 Boost OS, it did the same thing, cut spark completely until ignition is cycled. I assumed it was because I had launch control enabled, but no clutch switch wired in.
User avatar
AngelMarc
Posts: 613
Joined: Sat Apr 08, 2023 11:23 am
cars: A CB450 running to 8,000RPM with a P59.

Re: P01 and P59 ignition driver hardware

Post by AngelMarc »

I bet it's stock behavior. I've had it without OS changes, just tuner variables changed. My ghetto trigger wheel wobbles. Didn't have the problem before it shifted so bad.
Change your damn crank sensor.
Don't stress specific units.
dubcrazy8392
Posts: 38
Joined: Fri Jul 18, 2025 10:57 pm
cars: -1981 6.0L LQ4 swapped C10 (aka lumpy)
-2000 silverado 2500 (daily work horse that does it with style)

Re: P01 and P59 ignition driver hardware

Post by dubcrazy8392 »

im not going to think its the crank sensor just yet because both trucks i own do this and i know of 2 more others that are patched with the code that also do it. as of recently i have re-written the spark cut logic 6 million ways to sunday in hopes that maybe something was poisoning something with the TPU and making it shut down like that at high RPM. so far i have written it to 0 coil dwell in the regular RAM. there are 3 variables there by the way. there is the min dwell time, max dwell time and actual dwell time. basically the ECU goes through the dwell time routine and populates these 3 RAM variables than once it exits the dwell time routine it copies these 3 variables into RAM for the TPU. you can clearly see these copies happening directly after the jsr for the dwell routine itself 3 times because the dwell rouutine is referenced 3 times if you look at it in disassembly. anyhow i have written this as early code to force the RAM dwell to 0. shuts down at high RPM. than re-wrote everything again and made it come out of the dwell time routine itself. still same end result. the last thing i did was hijack the the 3X points where actual dwell is copied into TPU RAM and force the value going directly to the TPU with 0 for the spark cut. still same end result. i literally cannot figure out what is happening here.

than i started disassembling how the TPU works and found all of these flags that pertain to shutting ignition down so i started cautiously NOPing some of those and testing to see if i get any other result. still same result. its frustrating that i cant figure out what is causing this shut down to happen. The pasted disassembly is the last version that targets 0ing the TPU RAM directly. maybe someone here can see or has a clue as to whats going on here.


Code: Select all

OS7:000D0946                     ; =============== S U B R O U T I N E =======================================
OS7:000D0946
OS7:000D0946
OS7:000D0946                     SPARK_CUT_ROUTINE:                      ; CODE XREF: sub_299AC+B0↑p
OS7:000D0946                                                             ; DoLoopA+18C↑p ...
OS7:000D0946
OS7:000D0946                     ; FUNCTION CHUNK AT OS7:000D0BEA SIZE 00000010 BYTES
OS7:000D0946
OS7:000D0946 3A38 A562                           move.w  (RAM_RPM).w,d5  ; Move Data from Source to Destination
OS7:000D094A 4A39 000E 0008                      tst.b   (HRD_LIMIT_SW).l ; Test an Operand
OS7:000D0950 6700 000C                           beq.w   loc_D095E       ; Branch if Equal
OS7:000D0954 BA79 000E 0D2A                      cmp.w   (HARD_LIMITER_CONSTANT).l,d5 ; Compare
OS7:000D095A 6200 0052                           bhi.w   loc_D09AE       ; Branch if High
OS7:000D095E
OS7:000D095E                     loc_D095E:                              ; CODE XREF: SPARK_CUT_ROUTINE+A↑j
OS7:000D095E 4A39 000E 0003                      tst.b   (VE_TABLE_SELECT).l ; Test an Operand
OS7:000D0964 6700 0010                           beq.w   loc_D0976       ; Branch if Equal
OS7:000D0968 3838 B292                           move.w  (RAM_crank_ref_period).w,d4 ; Move Data from Source to Destination
OS7:000D096C B879 000E 1F4A                      cmp.w   (OVERBOOST_SPRK_CUT_SAFE).l,d4 ; Compare
OS7:000D0972 6200 003A                           bhi.w   loc_D09AE       ; Branch if High
OS7:000D0976
OS7:000D0976                     loc_D0976:                              ; CODE XREF: SPARK_CUT_ROUTINE+1E↑j
OS7:000D0976 4A39 000E 0006                      tst.b   (LC_ENABLE_SW).l ; Test an Operand
OS7:000D097C 6700 0014                           beq.w   loc_D0992       ; Branch if Equal
OS7:000D0980 4A38 B5EC                           tst.b   (RAM_LC_DISABLE).w ; Test an Operand
OS7:000D0984 6700 000C                           beq.w   loc_D0992       ; Branch if Equal
OS7:000D0988 BA79 000E 0D30                      cmp.w   (CONST_LC_RPM).l,d5 ; Compare
OS7:000D098E 6200 001E                           bhi.w   loc_D09AE       ; Branch if High
OS7:000D0992
OS7:000D0992                     loc_D0992:                              ; CODE XREF: SPARK_CUT_ROUTINE+36↑j
OS7:000D0992                                                             ; SPARK_CUT_ROUTINE+3E↑j
OS7:000D0992 4A39 000E 0007                      tst.b   (NLS_ENABLE_SW).l ; Test an Operand
OS7:000D0998 6700 001C                           beq.w   loc_D09B6       ; Branch if Equal
OS7:000D099C 4A38 B5ED                           tst.b   (RAM_ENABLE_NLS_FLAG).w ; Test an Operand
OS7:000D09A0 6700 0014                           beq.w   loc_D09B6       ; Branch if Equal
OS7:000D09A4 BA79 000E 0DC0                      cmp.w   (CONST_NLS_RPM).l,d5 ; Compare
OS7:000D09AA 6500 000A                           bcs.w   loc_D09B6       ; Branch if Carry Set
OS7:000D09AE
OS7:000D09AE                     loc_D09AE:                              ; CODE XREF: SPARK_CUT_ROUTINE+14↑j
OS7:000D09AE                                                             ; SPARK_CUT_ROUTINE+2C↑j ...
OS7:000D09AE 4EF9 000D 0BEA                      jmp     loc_D0BEA       ; Jump
OS7:000D09AE                     ; ---------------------------------------------------------------------------
OS7:000D09B4 004E                                dc.b $4E ; N
OS7:000D09B5 0071                                dc.b $71 ; q
OS7:000D09B6                     ; ---------------------------------------------------------------------------
OS7:000D09B6
OS7:000D09B6                     loc_D09B6:                              ; CODE XREF: SPARK_CUT_ROUTINE+52↑j
OS7:000D09B6                                                             ; SPARK_CUT_ROUTINE+5A↑j ...
OS7:000D09B6 0C43 7FFF                           cmpi.w  #$7FFF,d3       ; Compare Immediate
OS7:000D09BA 6304                                bls.s   loc_D09C0       ; Branch if Low or Same
OS7:000D09BC 363C 7FFF                           move.w  #$7FFF,d3       ; Move Data from Source to Destination
OS7:000D09C0
OS7:000D09C0                     loc_D09C0:                              ; CODE XREF: SPARK_CUT_ROUTINE+74↑j
OS7:000D09C0 31C3 E09E                           move.w  d3,(RAM_TPU_dwell_Main).w ; Move Data from Source to Destination
OS7:000D09C4 4E75                                rts                     ; Return from Subroutine
OS7:000D09C4                     ; End of function SPARK_CUT_ROUTINE

Code: Select all

OS7:000D0BEA                     ; ---------------------------------------------------------------------------
OS7:000D0BEA                     ; START OF FUNCTION CHUNK FOR SPARK_CUT_ROUTINE
OS7:000D0BEA
OS7:000D0BEA                     loc_D0BEA:                              ; CODE XREF: SPARK_CUT_ROUTINE:loc_D09AE↑j
OS7:000D0BEA 4278 E0A6                           clr.w   (RAM_TPU_DWELL_MIN).w ; Clear an Operand
OS7:000D0BEE 3639 000E 8166                      move.w  (DWELL_TIME_CONSTANT).l,d3 ; Move Data from Source to Destination
OS7:000D0BF4 31C3 E09E                           move.w  d3,(RAM_TPU_dwell_Main).w ; Move Data from Source to Destination
OS7:000D0BF8 4E75                                rts                     ; Return from Subroutine
OS7:000D0BF8                     ; END OF FUNCTION CHUNK FOR SPARK_CUT_ROUTINE
OS7:000D0BF8                     ; ---------------------------------------------------------------------------
dubcrazy8392
Posts: 38
Joined: Fri Jul 18, 2025 10:57 pm
cars: -1981 6.0L LQ4 swapped C10 (aka lumpy)
-2000 silverado 2500 (daily work horse that does it with style)

Re: P01 and P59 ignition driver hardware

Post by dubcrazy8392 »

Knackersjewels wrote: Mon May 11, 2026 9:36 am When I used the LS1 Boost OS, it did the same thing, cut spark completely until ignition is cycled. I assumed it was because I had launch control enabled, but no clutch switch wired in.
no, i have this activated on a factory 5 speed GMT800 truck that has all the clutch switches wired factory and it still does it. clutch switches are not the issue.
User avatar
AngelMarc
Posts: 613
Joined: Sat Apr 08, 2023 11:23 am
cars: A CB450 running to 8,000RPM with a P59.

Re: P01 and P59 ignition driver hardware

Post by AngelMarc »

Always possible it's somewhere else entirely. If we're seeing it on modded bins and unmodded butchered tune bin (what I did for CB450).
There's a lot of code these things loop through. The kill string could be anywhere referencing the dumbest variable. I do find it odd my wobbly wheel always starts but never catches itself after "stalling".
Don't stress specific units.
User avatar
AngelMarc
Posts: 613
Joined: Sat Apr 08, 2023 11:23 am
cars: A CB450 running to 8,000RPM with a P59.

Re: P01 and P59 ignition driver hardware

Post by AngelMarc »

Like what if it's something that expects knock signal, but when spark cut happens, it doesn't see it, and my CB450 is missing 6 cylinders.
Seems unlikely though, because here's this working without hitting some kill string. It only stalled because shit tune and no idle control of any kind.
https://youtu.be/g_Q6pFgmySY?si=HuXpKapBnU1mVw69&t=24
This was before the trigger wheel shifted.
Don't stress specific units.