When you click on links to various merchants on this site and make a purchase, this can result in this site earning a commission. Affiliate programs and affiliations include, but are not limited to, the eBay Partner Network.
I’ve added in a MAT timing compensation table and a MAT VE compensation table.
what other tables or feature could we benefit from? I’d like to make this old computer do more to enhance daily drivers.
Wow, what an opportunity! You guys that are doing this software stuff are gods!
Some questions:
Is this going to be a new version of S_AUJP? Or something else?
How does the MAT VE compensation table differ from the MAT Compensation Counts table? I've disabled the Inv MAT table, so my only MAT temperature utilization is the Compensation table.
Maybe some AE vs RPM table(s) if possible? I know there's the AE Delta TPS filter coefficient vs RPM, but something on the Delta-MAP AE side too? Kind of analogous to the Delta MAP scale factor vs %TPS. Maybe a scale factor vs RPM?
Other than that, I'm not sure what else I'd add.... in reality, the 7730 already has an impressive amount of tuning fidelity for an ECM of that vintage.
Wow, what an opportunity! You guys that are doing this software stuff are gods!
Some questions:
Is this going to be a new version of S_AUJP? Or something else?
How does the MAT VE compensation table differ from the MAT Compensation Counts table? I've disabled the Inv MAT table, so my only MAT temperature utilization is the Compensation table.
Maybe some AE vs RPM table(s) if possible? I know there's the AE Delta TPS filter coefficient vs RPM, but something on the Delta-MAP AE side too? Kind of analogous to the Delta MAP scale factor vs %TPS. Maybe a scale factor vs RPM?
Other than that, I'm not sure what else I'd add.... in reality, the 7730 already has an impressive amount of tuning fidelity for an ECM of that vintage.
I tried to help develop SAUJP, there was no response from them. I am the sole developer of my code.
My tables are simple. I didn’t want to test and retest and deal with that crap. I can plug in a value and immediately know it’s set.
It reads inv Mat and adjusts timing or VE directly. For timing it's when inv mat is 56c, then add 7 degrees timing to timing table output. For VE it's when inv mat is 32c multiply VE table output value by 1.03
.
Last edited by Vanilla Ice; May 14, 2025 at 08:51 PM.
I tried to help develop SAUJP, there was no response from them. I am the sole developer of my code.
My tables are simple. I didn’t want to test and retest and deal with that crap. I can plug in a value and immediately know it’s set.
It reads inv Mat and adjusts timing or VE directly. For timing it's when inv mat is 56c, then add 7 degrees timing to timing table output. For VE it's when inv mat is 32c multiply VE table output value by 1.03
.
So does your MAT VE multiplier table replace the MAT Compensation Counts vs MAT? That's what I'm trying to understand. The Compensation Counts table (as I understand it) is already supposed to tell the ECM how to take air density into account in the fueling calculations and adjust the syncronous fueling to compensate.
It can supplement or replace. It’s far easier to tune since it’s in terms anybody can relate to. Log BLMs and mat. If blms change at different mat adjust it just like the ve table. Stupid easy.
As far as a benefit to you? I really doubt it. You seem to revel in the minutiae of tuning and already have a grasp of the other table and it’s effects.
Some background, I wrote this up years ago. when I wrote the code I had no interest in finding out how every poorly defined and worded xdf table worked. I wanted easy quick control. I only used axxd. I didn’t know saujp had a very well defined xdf to compare to.
so, could I use the OEM table instead? Maybe. Would I? No. I’d still use my code as it’s stupid easy.
i had a heatsoak issue (Phoenix Arizona 115 degrees for 2 months straight) and was planning to turbo so I set it up how I wanted and could tune easy.
thats the point of this thread. What is needed? What can help?
to Be honest the ideas gathered here will only be followed if I have personal interest.
Also this platform is RIDICULOUSLY easy to write code for.
With your love of tuning you should tackle assembly code writing.
I learned it in an afternoon after toiling through the immensity of 32bit ECUs this was so damn easy.
doing it allows you to fully understand the tables too.
look into ghidra or ida pro and look at the code itself. My guess is you could be the next one of us code talkers within a couple days. And with your love of it could take the mantle quickly as the goto guy.
the passing of Rbob and the disappearance of the saujp guys has left a massive void. I have 4 different platforms and work on all of them maybe 1 month per year. So soon I’ll be a ghost around here again. (Az heat kills my desire). I can’t do it.
if you need help let me know. You are best suited to take the mantle.
a pwm output for brushless fans would be pretty sweet.
Man if my EBL had PWM outputs that'd be so cool. Would've made my fan swap and alternator swap a cake walk.
I jumped straight to the EBL train and skipped trying to tune factory ECM. At this stage I feel like if I was to ever move away from the EBL it would likely only be to go LS based full sequential or a LS swap all together.
Definitely can still appreciate the work you guys are doing though for the old school tuning.
Man if my EBL had PWM outputs that'd be so cool. Would've made my fan swap and alternator swap a cake walk.
I jumped straight to the EBL train and skipped trying to tune factory ECM. At this stage I feel like if I was to ever move away from the EBL it would likely only be to go LS based full sequential or a LS swap all together.
Definitely can still appreciate the work you guys are doing though for the old school tuning.
Also this platform is RIDICULOUSLY easy to write code for.
With your love of tuning you should tackle assembly code writing.
I learned it in an afternoon after toiling through the immensity of 32bit ECUs this was so damn easy.
doing it allows you to fully understand the tables too.
look into ghidra or ida pro and look at the code itself. My guess is you could be the next one of us code talkers within a couple days. And with your love of it could take the mantle quickly as the goto guy.
the passing of Rbob and the disappearance of the saujp guys has left a massive void. I have 4 different platforms and work on all of them maybe 1 month per year. So soon I’ll be a ghost around here again. (Az heat kills my desire). I can’t do it.
if you need help let me know. You are best suited to take the mantle.
Hmm... interesting... I may look into that. I'm a mechanical engineer by occupation, so software code isn't my strong suit (to say the least). But you've piqued my interest now.
PWM in aftermarket use seems like a newer thing. I certainly didn't really know much about it until researching the brushless fan setup I installed. I am not sure if I ever saw anyone mention it in the EBL thread.
PWM in aftermarket use seems like a newer thing. I certainly didn't really know much about it until researching the brushless fan setup I installed. I am not sure if I ever saw anyone mention it in the EBL thread.
The EGR uses PWM. As does Carbon can, AIR, OEM fans, light bulbs etc.
If one wants to hijack one of those outputs, you should be able to run what you want off PWM code.
I don't know of any unused PWM outputs nor their addresses, but if you can find that documented somewhere or hijack a used OEM one, you can write up a quick subroutine to do what you want.
Example would be say you find the PWM routine for the OEM fans. Where that code goes to work, you write over the OEM code instruction to:
Jump to your code instead.
Then in empty ROM space you write up what you want.
Say if ECT is above this threshold, PWM out = 30% Duty cycle.
If ECT is above this threshold, PWM out = 100% Duty cycle.
Else, PWM out = 0% duty cycle.
Then you simply jump back to the OEM code to the next block of code that bypasses all other fan code.
Once you understand the subroutine of PWM output, writing the code would take 20 minutes max.
Unfortunately, I don't know the PWM routines and don't have personal interest right now.
BUT, if you or anybody else wants to look at the ANHT hac document and learn exactly how that all works, then publish it I can quickly implement your needs into code.
Since I have nothing to do right now...
Here's where the ECU clears all PWMs. So there's that address chunk. Those are your PWM output registers. They are 2 byte registers, sp you have 5 different PWM outputs to choose from.
TURN OFF ALL PWM'S
; 3FD4 - 3FDC
;-----------------------
LDX L3FD4 ; POINT TO 1ST DUTY CYC REG
;
LDD #$7000 ; FOR 0% DUTY CYCLE
LEE2C STD 0,X ;
INX ; BUMP ADDR POINTER
INX ;
CPX #L3FDC ; LAST ADDR ?
BNE LEE2C ; BR TILL DONE
; ... else
STD L3FCC ; PWM 6 REG
;
BSR LEE4A ; DELAY
;
STD L3FEA ; PWM7 REG, (PWMI)
Here's the Fan 1 PWM routine:
;--------------------------------------------------
; ALDL MODE 4, COMMAND FAN 1
;
; CNT'L WD $0192, b1, 1 = FAN 1 CONTROLED
; CNT'L WD $0193, b1, 1 = FAN 1 ON
;
; ECM 8D, ECM P/N 1227730
;--------------------------------------------------
BRCLR L0048,#$01,LD060 ; BR IF NOT IN ALDL MODE 4
LDAA L0192 ; DISCRETE ENABLES, ALDL
BITA #$02 ; b1,1 = FAN 1 CONTROLED
BEQ LD060 ; BR IF NOT CNT'ING FAN
; ... else
LDAA L0193 ; ALDL DESCRETE STATES
BITA #$02 ; b1, 1 = FAN 1 ON
BEQ LD06B ; BR IF FAN CMD'ED OFF
; ... else
BRA LD068 ;
;--------------------------------------------------
;--------------------------------------------------
;
;
;--------------------------------------------------
LD060: BRCLR L0037,#$80,LD06B ; BR IF NOT b7, 1 = ENGINE RUNNING
; ... else
BRCLR L0037,#$08,LD06B ; BR IF NOT b3, ALL PID FAN STP'S ..
; ... NOT ADDED
; ... else
LD068: LDX #$DFFF ; FAN MAX DUTY CYCLE
LD06B: STX L3FEA ; SAVE NEW FAN STATE
The stock outputs for those are just on/off grounded triggers though correct? Can they be setup for say a variable duty cycle at specific frequencies depending on a sensor input? With PWM controlled fans this allows variable fan speed.
For example with my fan that is the primary benefit to it. My controller uses coolant temp to adjust fan speed. If it doesnt need 100% it doesn't use 100%. I can then wire up my AC system to activate 100% fan speed regardless of coolant temp.
Edit: I know very little about coding so you very well couldve hit on that above and I just didn't get it.
Last edited by dabomb6608; May 15, 2025 at 12:25 PM.
The code at LD060 is an easy place to hook into. Replace that code with a JMP to your custom routine.
Custom routine, checks for those commands you removed when you added your JMP instead.
So this is the start of your custom code:
LD060: BRCLR L0037,#$80,LD06B ;
BRCLR L0037,#$08,LD06B ;
If it passes that it normally turns the fan full on.
So you can do whatever you want here:
If ECT is over 60C then LDX #$DF00
else if ECT is over 90C then LDX #$DFFF
then
STX L3FEA
then
return from your subroutine, JMP back to just after that code snippet above.
The stock outputs for those are just on/off grounded triggers though correct? Can they be setup for say a variable duty cycle at specific frequencies depending on a sensor input? With PWM controlled fans this allows variable fan speed.
For example with my fan that is the primary benefit to it. My controller uses coolant temp to adjust fan speed. If it doesnt need 100% it doesn't use 100%. I can then wire up my AC system to activate 100% fan speed regardless of coolant temp.
Edit: I know very little about coding so you very well couldve hit on that above and I just didn't get it.
I don't know how it's all wired. As I said I do not know how the PWMs all work, but a PWM output could very well be all you need as I said in my custom code post just now. Again, I don't know, so you'd have to be your own guinea pig as my car is for my testing.
I hijacked the CEL light PWM output for my code, but I never tried anything but 100% DC.
There's definitely a chance I missed stuff as again, I've not done anything beyond stealing the CEL on/off routine. So there is probalby a CPU control switch also that needs to be switched as well.
Last edited by Vanilla Ice; May 15, 2025 at 12:46 PM.
This looks to be the Fan CPU switch (at bottom). So as I did above, you can cut and paste off this stuff below into your routine. I'd bypass it completely and setup your own decisions.
If you want fan off:
LDX #$D000 ; FAN OFF DC
STX L3FEA ; SAVE DC
BCLR L0039,#$40 ; Turn off
If you want fan on:
LDX #$DFFF ; FAN MAX DUTY CYCLE
STX L3FEA ; SAVE DC
BSET L0039,#$40 ; Turn on
If you want fan on low:
LDX #$D7D0 ; FAN 1/2 DUTY CYCLE
STX L3FEA ; SAVE DC
BSET L0039,#$40 ; Turn on
; FAN 1 OUTPUT FLAG SET UP
;--------------------------
LD3B7 BRSET L003F,#$08,LD3C6 ; BR IF FAN 1 REQ FLAG SET
CMPA $837C ; 20 SEC, FAN TIME ON THRESH
BCC LD3CF ; IF ON LONG ENOUGH TO TURN OFF
; ... else
BRCLR L0037,#$08,LD3CF ; BR IF NOT b3, FAN 1 PID STPS DONE
; FAN 1 NOW OFF
; ... else
BRA LD3DA ; TURN FAN 1 ON
LD3C6 BRSET L0037,#$08,LD3DA ; BR IF b3, FAN 1 PID STPS DONE
; {NO DLY IF FAN 1 ON NOW}
; ... else
CMPA $837B ; 1 SEC FAN DELAY TMR
BHI LD3DA ; IF OFF LONG ENOUGH TO TURN ON
; ... else
LD3CF CLR $0102 ; NO FAN IN VENT OR HEAT REQUEST
BCLR L0037,#$08 ; CLR b3, FAN 1 PID STPS DONE FLG
BCLR L0039,#$40 ; CLR b6, FAN 1 OUTPUT REG FLG
BRA LD3DD ; EXIT FAN 1 va FAN 2
LD3DA BSET L0039,#$40 ; SET FAN 1 OUT REQUEST FLG
Wow, what an opportunity! You guys that are doing this software stuff are gods!
Some questions:
Is this going to be a new version of S_AUJP? Or something else?
How does the MAT VE compensation table differ from the MAT Compensation Counts table? I've disabled the Inv MAT table, so my only MAT temperature utilization is the Compensation table.
Maybe some AE vs RPM table(s) if possible? I know there's the AE Delta TPS filter coefficient vs RPM, but something on the Delta-MAP AE side too? Kind of analogous to the Delta MAP scale factor vs %TPS. Maybe a scale factor vs RPM?
Other than that, I'm not sure what else I'd add.... in reality, the 7730 already has an impressive amount of tuning fidelity for an ECM of that vintage.
AE Delta MAP scale factor vs RPM Is now a thing. This patch is for AXXD or AXXC, beyond that it will need to be adapted or checked before use.
Attached is the patch and table data.
This looks to be the Fan CPU switch (at bottom). So as I did above, you can cut and paste off this stuff below into your routine. I'd bypass it completely and setup your own decisions.
If you want fan off:
LDX #$D000 ; FAN OFF DC
STX L3FEA ; SAVE DC
BCLR L0039,#$40 ; Turn off
If you want fan on:
LDX #$DFFF ; FAN MAX DUTY CYCLE
STX L3FEA ; SAVE DC
BSET L0039,#$40 ; Turn on
If you want fan on low:
LDX #$D7D0 ; FAN 1/2 DUTY CYCLE
STX L3FEA ; SAVE DC
BSET L0039,#$40 ; Turn on
; FAN 1 OUTPUT FLAG SET UP
;--------------------------
LD3B7 BRSET L003F,#$08,LD3C6 ; BR IF FAN 1 REQ FLAG SET
CMPA $837C ; 20 SEC, FAN TIME ON THRESH
BCC LD3CF ; IF ON LONG ENOUGH TO TURN OFF
; ... else
BRCLR L0037,#$08,LD3CF ; BR IF NOT b3, FAN 1 PID STPS DONE
; FAN 1 NOW OFF
; ... else
BRA LD3DA ; TURN FAN 1 ON
LD3C6 BRSET L0037,#$08,LD3DA ; BR IF b3, FAN 1 PID STPS DONE
; {NO DLY IF FAN 1 ON NOW}
; ... else
CMPA $837B ; 1 SEC FAN DELAY TMR
BHI LD3DA ; IF OFF LONG ENOUGH TO TURN ON
; ... else
LD3CF CLR $0102 ; NO FAN IN VENT OR HEAT REQUEST
BCLR L0037,#$08 ; CLR b3, FAN 1 PID STPS DONE FLG
BCLR L0039,#$40 ; CLR b6, FAN 1 OUTPUT REG FLG
BRA LD3DD ; EXIT FAN 1 va FAN 2
LD3DA BSET L0039,#$40 ; SET FAN 1 OUT REQUEST FLG
Certainly interesting. Definitely possible to do things with the code itself. I guess the true question would be what kind of signal is actually getting sent on that output. For instance Bosch/GM/Spal Fans like the C7 fan I am using operate via a 100hz frequency using a negative polarity. Duty cycle at or above 95% is fan off. 85% is minimum speed. 15% is max speed. Without that style of output going into the PWM module on the fan they don't work at all.
AE Delta MAP scale factor vs RPM Is now a thing. This patch is for AXXD or AXXC, beyond that it will need to be adapted or checked before use.
Attached is the patch and table data.
Daaayyyuummmm... I'll have to check that out and see how you did that.
So do I basically edit the xdf in Tunerpro by adding a new parameter?
Daaayyyuummmm... I'll have to check that out and see how you did that.
So do I basically edit the xdf in Tunerpro by adding a new parameter?
copy the text into your xdf for axxc or axxd or any others that are nearly identical. The patch won’t work in other bins. The addresses will be different and cause bugs.
you may need to change the unique id in what you copy over.
then you should see the new table and the patch in tuner pro.
Last edited by Vanilla Ice; May 15, 2025 at 03:27 PM.
what other tables or feature could we benefit from? I’d like to make this old computer do more to enhance daily drivers.
Running GM 5V fuel composition sensor w/frequency range 50-150Hz, interpolating multiple fuel mapping and timing with user set flag between 0 to 100% ethanol content. Have since been running the experimental XDF for the EBL system before Bob passed, however I totally lost interest in pushing it any further with him no longer being here, so sadly it died with him as far as I'm concerned. Works flawlessly and eliminated the need of either draining the tank in between fuels being used, or having multiple tunes on standby being Flashed in due to varying ethanol percentage differences. This can be added easily with your setup, and be beneficial for those running boosted applications and want a simple way to fill it with e85 and not worry about the exact percentage of it in the tank...
has everyone dug into old code 59? they supposedly got wot wide band a/f control working on it. I never got mine running clean enough to try turning it on, since it wasn't a daily. it. broken more than running haha seems like something that might interest you as I think almost all the newer standalones have it?
some way to trigger coil packs to upgrade the ignition spark power for boosted as heel talked about and tried for a while. the old north star caddy setup has been made to work, but it needs a oddball setup of dual crack triggers. the older Ford packs I think were used by someone with a timing box, but ecm timing tables couldn't be used? something like that, the ecm output trigger time wasn't compatible
Running GM 5V fuel composition sensor w/frequency range 50-150Hz, interpolating multiple fuel mapping and timing with user set flag between 0 to 100% ethanol content. Have since been running the experimental XDF for the EBL system before Bob passed, however I totally lost interest in pushing it any further with him no longer being here, so sadly it died with him as far as I'm concerned. Works flawlessly and eliminated the need of either draining the tank in between fuels being used, or having multiple tunes on standby being Flashed in due to varying ethanol percentage differences. This can be added easily with your setup, and be beneficial for those running boosted applications and want a simple way to fill it with e85 and not worry about the exact percentage of it in the tank...
- Rob
what is the complete list of tables needed to blend?
Well, I wrote the Flex Fuel code to blend 3D and 2D tables.... just need the full list of tables that NEED blending.
Injector Flow
Crank Fuel vs ECT
Main Timing
VE
Any others????
The code hijacks the table lookup routine. Does this:
Blended Value = (GasolineTableOutput * (10 - BlendFactor) + E85TableOutput * BlendFactor) / 10
Blend factor will have 3 different ways of being set. standard would be you change it in the tune. The other 2 are more fun, but will have to wait until somebody tests all of this.
Last edited by Vanilla Ice; May 16, 2025 at 12:57 PM.
copy the text into your xdf for axxc or axxd or any others that are nearly identical. The patch won’t work in other bins. The addresses will be different and cause bugs.
you may need to change the unique id in what you copy over.
then you should see the new table and the patch in tuner pro.
I must be really dense... I don't seem to be getting this.
You may need to break this down into a step by step that a monkey could follow...
I must be really dense... I don't seem to be getting this.
You may need to break this down into a step by step that a monkey could follow...
Use AXXD or AXXC Bin ONLY. No other bin works, without somebody else reverse engineering it first to find out.
Open your AXXC or AXXD XDF.
Open the XDF I provided.
Copy whats in my xdf to your AXXD or AXXC xdf file.
Save it as a new XDF
Use tunerpro to open the new XDF and a fresh AXXD or AXXC bin file.
Look at the very bottom for the patch list.
Open the patch and select apply patch and close that patch window.
Look for your new table, enter values and test.
If you get an error with that XDF, if you look at the XDF i provided there are "uniqueID" that are listed. Try changing the name if you need to.
Also for anybody looking for Flex Fuel, I listed tables that will be implemented.
This process is in the final stages.
If you need any other tables changed for flex fuel, now's the time to speak up.
As soon as I finish flex fuel I'll probably disappear for a year and you'll be on your own.
Use AXXD or AXXC Bin ONLY. No other bin works, without somebody else reverse engineering it first to find out.
Open your AXXC or AXXD XDF.
Open the XDF I provided.
Copy whats in my xdf to your AXXD or AXXC xdf file.
Save it as a new XDF
Use tunerpro to open the new XDF and a fresh AXXD or AXXC bin file.
Look at the very bottom for the patch list.
Open the patch and select apply patch and close that patch window.
Look for your new table, enter values and test.
If you get an error with that XDF, if you look at the XDF i provided there are "uniqueID" that are listed. Try changing the name if you need to.
Ok, that's probably the issue. I was attempting to copy that patch into my SAUJP based bin. I don't know that I'll be wanting to run AXXD at this point.
Ok, that's probably the issue. I was attempting to copy that patch into my SAUJP based bin. I don't know that I'll be wanting to run AXXD at this point.
I'm not sure I know enough to answer that intelligently...
All I know is that the S_AUJP has an extensive amount of AE parameters that are (as far as I've seen) not available in any other XDF. Especially being fully commented and all of that too. And without those parameters avail I don't think I'd have been able to get anywhere near the level of tune that I'm at right now.
Can I simply open an AXXD xdf, copy the xdf parameter in TP, then open my SAUJP xdf and simply paste that parameter into the parameter tree?
TP has that copy and paste feature for xdf parameters. Ive used it before to move stuff from one SAUJP xdf to another. But the base SAUJP bins have been the same.
I'm not sure if that works when the actual bins are different too.
I'm not sure I know enough to answer that intelligently...
All I know is that the S_AUJP has an extensive amount of AE parameters that are (as far as I've seen) not available in any other XDF. Especially being fully commented and all of that too. And without those parameters avail I don't think I'd have been able to get anywhere near the level of tune that I'm at right now.
I forget, if your car manual? it's been forever ago and I know the guys put a bunch of time into aujp, but. my 91 manual never ran great on it, main reason I went to code 59 was the car felt like it just wanted to go, where I wasn't good enough to make it feel the same. while he's still around. I feel like it would be worth a shot to load up AXXD and see what you get. once you get over the hurtle of adding things. I have hopes it will transfer over to other projects.
If AE is all you want out of SAUJP, AXXD should have every single table AUJP has. It just hasn't been in a public XDF yet.
I don't know where the code diverges from aujp to axxd, but it's relatively minor. Maybe 10-20 bytes different. I haven't looked.
well i guess what im saying is if I wanted to import your new AE map table you just created, is it as simple as copying the parameter from the AXXD xdf to the SAUJP via the method i described.
Like I said... trying to get me to learn code is like trying to teach a chimpanzee calculus
well i guess what im saying is if I wanted to import your new AE map table you just created, is it as simple as copying the parameter from the AXXD xdf to the SAUJP via the method i described.
Like I said... trying to get me to learn code is like trying to teach a chimpanzee calculus