Seems you deleted your post on where to find the pressures settings, so I assume you found them
Seems you deleted your post on where to find the pressures settings, so I assume you found them
Yes. Thank you. Took me a bit but I figured out that I needed to take the class then turn on advanced options.
I was able to adjust the pressure settings and flash the truck. All seems good. I did have a scare. When I started the truck the check engine light was on with a U0101 code. I thought I had bricked it!! For some reason the code was stored twice. After clearing it somehow was still there. Cleared a second time and all seems good now.
Wonder if this will happen each time?
Any way thank you again. Now to research other things to try and get the trans to shift better. 😀
Hoy
May you allow me to add another question:
How is the information "WOT" shared between ECM and TCM? Is ECM informing TCM or vis-versa? And is there a message exchange between TCM and ECM about the shift points (TCM: I will shift now, please ECM retard ignition angle and (or not) cut-off fuel)?
Servus
10le
Hoy
Please allow me to add another question:
My MAX PRESSURE LOCK = 827kPa, should I really change it to 180kPa, is it really such a huge change??
Same with
MAX PRESSURE NEUTRAL = 862 kPa, new value= 125kPa
And
MIN LINE PRESSURE= 345 kPa, new: 125 kPa
Last but not least
MAX PRESSURE REVERSE = 1724 kPa, new: 250 kPa
Can anyone, who did it give me a short confirmation for a 65RFE that I'm on the right path?
Servus
10le
I don’t know about older 65/66RFE models, the older 68RFE models, specifically model years 2007.5-2009 had a separate TCM and there was communication between the ECM and the TCM via CAN bus, otherwise how would it work if it didn’t receive information needed from the ECM??? Newer model years there is no separate TCM, the ECM and TCM are one and the same, no difference whatsoever. I think you are misreading things. You are talking kPa and values like 180 for lockup pressure is PSI. The max pressure 250 on reverse is stock value in PSI. Makes absolute no sense if working in kPa to go from 1724kPa to 250kPa. You are completely mixing up kPa versus PSI.
Hi Jim P 2.0
Thank you for your answer.
Please apologize. A typical European failure. 🙃. The settings of my HP Tuner are Europe units, but here we are talking about US-units. Thank's for helping me out of this failure.
EuropĂ©enne Guys: THIS ARE US-units. 🤣🤣🤣🤣
For the ECM-TCM communication I will write back later on.
Servus
10le
Hoy
Last request:
Where can I find an explanation of the abbreviations (sry, being a BMW guy and knows it for Siemens / VDO/ Continental and Bosch ECM)
I'm looking for
TCC
DoD
FSO
AFC
And will have to find out what this STALL TORQUE really means.
Last question:
If I'm in SHIFT SCHEDULING, I have a lot of modes:
Driver Select Mode; Tow/Haul; Overdrive 4WD Low, Drive, WOT
LOW Normal and for Overdrive-Normal Shifts, Cold Shifts and Super Cold Shifts
Question:
In which mode I'm if I have D (Drive) activ on the selector lever: DRIVE or Driver Select Mode?
And which Mode is for using the +/- on the selector lever?
Overdrive: When I'm in the OVERDRIVE mode?
Servus
10le
See here my DAU support:
https://forum.hptuners.com/showthrea...2-Acronym-List
Last edited by 10le; 06-20-2024 at 06:33 AM. Reason: DAU Support
void FUN_003a01a0(void)
{
ushort uVar1;
undefined uVar2;
byte bVar3;
uint uVar4;
byte bVar7;
short sVar5;
undefined2 uVar6;
char cVar8;
ulonglong uVar9;
short sVar10;
short sVar11;
byte bVar13;
longlong lVar12;
short sVar14;
longlong lVar15;
short sVar16;
byte bVar18;
longlong lVar17;
short sVar20;
longlong lVar19;
short sVar21;
undefined *puVar23;
longlong lVar22;
int iVar25;
longlong lVar24;
ushort uVar26;
ushort uVar27;
sVar14 = DAT_003f2d78;
lVar15 = (longlong)DAT_003f2d78;
bVar7 = STATFR;
lVar12 = lVar15;
lVar17 = lVar15;
lVar19 = lVar15;
sVar11 = sVar14;
if (((bVar7 & 0x10) == 0) || ((~bVar7 & 0x4f) != 0x4f)) {
DAT_60002669 = 0;
DAT_6000266c = 0;
DAT_6000266d = 0;
lVar22 = lVar15;
goto LAB_003a07c8;
}
bVar7 = GENFG1;
if (((((bVar7 & 4) == 0) && (bVar13 = IGCODE, (~bVar13 & 1) == 0)) &&
(bVar13 = THDATA, (TMGSTHR)_Garage_Shift_Torque_Management_Throttle_ Threshold < bVar13)) &&
((~DAT_003f35c8 & 1) == 0)) {
lVar17 = (longlong)DAT_003f7e5e;
}
else {
cVar8 = SHCODE;
if ((((cVar8 == '\x13') || (cVar8 == '\x14')) &&
(((~bVar7 & 4) == 0 &&
((bVar13 = THDATA, (TMGSTHR)_Garage_Shift_Torque_Management_Throttle_ Threshold < bVar13 &&
(bVar13 = DAT_600024fe, (bVar13 & 2) == 0)))))) &&
((bVar13 = DAT_600026bd, (bVar13 & 0x10) == 0 && ((~DAT_003f35c8 & 1) == 0)))) {
lVar17 = (longlong)(TMGSMAX)_Garage_Shift_Torque_Management _Torque_Limit;
}
else {
bVar13 = DAT_600026d2;
bVar18 = DAT_003f2d80;
if (((~bVar13 & 0x10) != 0) || (bVar13 = DAT_600026c3, (~bVar13 & 0x10) != 0)) {
bVar13 = DAT_600026c3;
if (((~bVar13 & 0x20) != 0) || (bVar3 = DAT_6000266d, bVar3 == 0)) goto LAB_003a0398;
if (((~bVar13 & 0x10) != 0) && (bVar18 = bVar3 - DAT_003f2d81, bVar3 < DAT_003f2d81)) {
bVar18 = 0;
}
}
DAT_6000266d = bVar18;
uVar26 = ENGRPM;
iVar25 = (int)(short)((uint)DAT_003f2d82 * (uint)bVar18 >> 8) *
((int)DAT_003f2d84 - (int)(short)uVar26) + 0x80;
if (iVar25 < 0x7fff01) {
lVar17 = (longlong)(short)((uint)iVar25 >> 8);
if (iVar25 < -0x800000) {
lVar17 = -0x8000;
}
}
else {
lVar17 = 0x7fff;
}
}
}
LAB_003a0398:
if (((~bVar7 & 4) == 0) && (bVar7 = DSM_Mode??, (bVar7 & 2) == 0)) {
bVar7 = DAT_600026c3;
bVar7 = ~bVar7;
if (((bVar7 & 0x14) == 0) || (((bVar7 & 0x20) == 0 && (cVar8 = DAT_60002669, cVar8 != '\0')))) {
bVar13 = SHCODE;
if (bVar13 < 4) {
if (bVar13 == 3) {
uVar4 = (uint)Target_Engine_Torque_with_WOT_for_2-3_Shift;
puVar23 = (undefined *)0x3f4b6c;
cVar8 = Upshift_Decay_Factor_with_Torque_Management_for_2-3_Shift;
bVar13 = Delta_Upshift_Decay_Factor_with_Torque_Management_ for_2-3_Shift;
}
else if (bVar13 == 0) {
uVar4 = (uint)Target_Engine_Torque_with_WOT_for_1-2_Shift;
puVar23 = (undefined *)0x3f4b64;
cVar8 = Upshift_Decay_Factor_with_Torque_Management_for_1-2_Shift;
bVar13 = Delta_Upshift_Decay_Factor_with_Torque_Management_ for_1-2_Shift;
}
else {
if (bVar13 != 2) goto LAB_003a0478;
uVar4 = (uint)Target_Engine_Torque_with_WOT_for_2-2P_Shift;
puVar23 = (undefined *)0x3f4b74;
cVar8 = Upshift_Decay_Factor_with_Torque_Management_for_2-2P_Shift;
bVar13 = Delta_Upshift_Decay_Factor_with_Torque_Management_ for_2-2P_Shift;
}
}
else if (bVar13 == 4) {
uVar4 = (uint)Target_Engine_Torque_with_WOT_for_2P-3_Shift;
puVar23 = (undefined *)0x3f4b7c;
cVar8 = Upshift_Decay_Factor_with_Torque_Management_for_2P-3_Shift;
bVar13 = Delta_Upshift_Decay_Factor_with_Torque_Management_ for_2P-3_Shift;
}
else if (bVar13 == 5) {
uVar4 = (uint)Target_Engine_Torque_with_WOT_for_3-4_Shift;
puVar23 = (undefined *)0x3f4b84;
cVar8 = Upshift_Decay_Factor_with_Torque_Management_for_3-4_Shift;
bVar13 = Delta_Upshift_Decay_Factor_with_Torque_Management_ for_3-4_Shift;
}
else {
LAB_003a0478:
uVar4 = (uint)Target_Engine_Torque_with_WOT_for_4-4P_Shift;
puVar23 = &DAT_003f4b8c;
cVar8 = Upshift_Decay_Factor_Constant_with_Torque_Manageme nt_Active_Flag_for_4-4P_Shift;
bVar13 = Delta_Upshift_Decay_Factor_Decay_Constant_for_4-4P_Shift;
}
if ((bVar7 & 0x10) != 0) {
bVar7 = DAT_60002669;
cVar8 = bVar7 - bVar13;
if (bVar7 < bVar13) {
cVar8 = '\0';
}
}
DAT_60002669 = cVar8;
bVar7 = THDATA;
if (bVar7 <= Wide_Open_Throttle) {
uVar2 = DAT_600024e3;
uVar4 = FUN_003acae0(uVar2,puVar23);
uVar4 = uVar4 & 0xffff;
}
uVar26 = DAT_003f20d6;
if (((~Configuration_Flags_for_Upshift_Logic_#3 & 4) == 0) &&
(bVar7 = DAT_600024ff, (~bVar7 & 0x40) == 0)) {
uVar26 = (TSTARUS_OS)_Engine_Torque_Offset_with_Off-Schedule_Shifts;
}
DAT_6000227c = uVar26;
uVar2 = DAT_600025b4;
bVar7 = FUN_003ac8f0(uVar2,&DAT_003f4bbc);
DAT_6000266a = bVar7;
sVar20 = DAT_60002270;
iVar25 = ((int)((uint)bVar7 * (uVar4 - uVar26)) >> 8) - (int)sVar20;
if (iVar25 < 0x8000) {
if (iVar25 < -0x8000) {
iVar25 = -0x8000;
}
sVar20 = (short)iVar25;
}
else {
sVar20 = 0x7fff;
}
bVar7 = DAT_60002669;
uVar4 = FUN_0039f560();
lVar19 = (longlong)
((int)((uVar4 & 0xff) * ((int)sVar20 * (int)(short)(ushort)bVar7 + 0x80 >> 8)) >> 8);
}
bVar7 = DSM_Mode??;
if ((bVar7 & 2) == 0) {
bVar7 = DAT_600026c3;
bVar7 = ~bVar7;
if (((bVar7 & 0x18) == 0) || (((bVar7 & 0x20) == 0 && (cVar8 = DAT_6000266c, cVar8 != '\0'))))
{
bVar13 = DAT_003f2d7e;
if ((bVar7 & 0x10) != 0) {
bVar7 = DAT_6000266c;
bVar13 = bVar7 - DAT_003f2d7f;
if (bVar7 < DAT_003f2d7f) {
bVar13 = 0;
}
}
DAT_6000266c = bVar13;
sVar20 = DAT_6000226a;
iVar25 = (uint)(T_ds*)_Target_Engine_Torque_for_Downshift - (int)sVar20;
if (iVar25 < 0x8000) {
if (iVar25 < -0x8000) {
iVar25 = -0x8000;
}
sVar20 = (short)iVar25;
}
else {
sVar20 = 0x7fff;
}
lVar12 = (longlong)((int)((int)sVar20 * (uint)bVar13 + 0x80) >> 8);
}
}
}
uVar27 = DAT_60002350;
Stall_Torque_Limit_Selection();
uVar26 = DAT_003f2d7c;
if (((~DAT_003f35c8 & 1) == 0) &&
(bVar7 = DAT_600025ea, (THR_TRQ_LIM)_Throttle_Threshold_for_CAN_Torque_Li miting < bVar7)) {
uVar27 = DAT_6000235e;
if (uVar27 != 0) {
uVar26 = uVar27;
}
sVar20 = Stall_Torque_Limit;
uVar9 = (ulonglong)sVar20;
LAB_003a06fc:
iVar25 = (int)((uVar9 & 0xffffffff) << 7) / (int)(uint)uVar26;
}
else {
uVar1 = OUTRPM;
if (((uVar1 < Output_Speed_(No)_Threshold_for_Delta_Torque) &&
(uVar1 = ENGRPM, Engine_Speed_(Ne)_Threshold_for_Delta_Torque < uVar1)) &&
((bVar7 = GENFG1, (bVar7 & 4) != 0 || (bVar7 = IGCODE, (~bVar7 & 1) != 0)))) {
sVar20 = Stall_Torque_Limit;
sVar21 = (short)((uint)uVar27 * 0x21e5 + 0x80 >> 8);
if ((sVar20 < sVar21) && ((DAT_003f35c8 & 1) == 0)) {
uVar27 = DAT_6000235e;
if (uVar27 != 0) {
uVar26 = uVar27;
}
uVar9 = (longlong)sVar20 - (longlong)sVar21;
goto LAB_003a06fc;
}
}
iVar25 = (int)DAT_003f2d88;
}
if (iVar25 < 0x8000) {
lVar22 = (longlong)(short)iVar25;
if (iVar25 < -0x8000) {
lVar22 = -0x8000;
}
}
else {
lVar22 = 0x7fff;
}
if (((int)DAT_003f2d86 < (int)lVar22) && ((DAT_003f35c8 & 1) == 0)) {
lVar22 = (longlong)DAT_003f2d86;
}
bVar7 = DAT_600026c3;
if ((~bVar7 & 2) == 0) {
FUN_0039f5c0();
}
bVar7 = DAT_600026d2;
if ((~bVar7 & 4) == 0) {
sVar11 = DAT_6000226a;
iVar25 = (int)sVar11 * -(int)(KTC)_Torque_Reduction_Factor_for_EMCC + 0x80;
if (iVar25 < 0x7fff01) {
sVar11 = (short)((uint)iVar25 >> 8);
if (iVar25 < -0x800000) {
sVar11 = -0x8000;
}
}
else {
sVar11 = 0x7fff;
}
}
LAB_003a07c8:
sVar20 = DAT_600022f8;
sVar21 = OUTRPM;
DAT_60002264 = sVar21 - sVar20;
bVar13 = DAT_60002697;
bVar7 = DAT_6000258e;
sVar10 = (ushort)bVar7 - (ushort)bVar13;
DAT_60002266 = sVar10;
bVar7 = STATFR;
sVar16 = sVar14;
if ((~bVar7 & 0x10) == 0) {
sVar5 = Engine_Braking_Torque_Reduction_for_Final_ShutDown ;
if ((((~bVar7 & 2) != 0) &&
(bVar7 = DAT_600026d5, sVar5 = Engine_Braking_Torque_Reduction_for_Transfer_Case_ in_Low,
(~bVar7 & 0x20) != 0)) &&
(bVar7 = DAT_60002645, sVar5 = Engine_Braking_Torque_Reduction_for_Electronic_Ran ge_Select,
4 < bVar7)) {
cVar8 = DAT_60002692;
sVar5 = Engine_Braking_Torque_Reduction_for_SLP_=_2.L;
if (((cVar8 != '8') && (cVar8 != 'X')) &&
((cVar8 = DAT_6000273b, cVar8 != '\x02' ||
((bVar7 = IGCODE, (~bVar7 & 0x20) != 0 ||
(bVar7 = GENFG1, sVar5 = Engine_Braking_Torque_Reduction_for_Tow_Mode_3rd_G ear,
(bVar7 & 4) != 0)))))) {
bVar7 = DAT_60002635;
if ((~bVar7 & 0x20) == 0) {
sVar5 = FUN_003acdf0(sVar21 - sVar20,&DAT_003f4af8);
}
else {
bVar7 = DAT_600026c9;
if ((~bVar7 & 0x40) == 0) {
sVar5 = FUN_003acdf0(sVar10,&DAT_003f4b08);
}
else {
bVar7 = DAT_600026cb;
sVar5 = 0;
if ((~bVar7 & 1) == 0) {
sVar5 = FUN_003acdf0(sVar10,&DAT_003f4b00);
}
}
}
}
}
sVar20 = DAT_60002268;
sVar21 = DAT_003f26ca;
if ((sVar20 <= DAT_003f26ca) && (sVar21 = sVar5, sVar20 < DAT_003f26cc)) {
sVar21 = DAT_003f26cc;
}
DAT_60002268 = sVar21;
FUN_0039ffd0();
uVar26 = DAT_60002288;
if ((~uVar26 & 0x800) == 0) {
sVar20 = DAT_6000226a;
lVar24 = (longlong)sVar21 - (longlong)sVar20;
if (lVar24 < 1) {
if ((int)lVar24 < -0x8000) {
lVar24 = -0x8000;
}
sVar16 = (short)lVar24;
}
else {
sVar16 = 0;
}
}
}
sVar20 = (short)lVar19;
if ((~DAT_003f35c8 & 1) == 0) {
uVar6 = FUN_003a0160(lVar17,sVar20);
uVar6 = FUN_003a0160(uVar6,lVar22);
DAT_60002254 = uVar6;
}
else {
bVar7 = 0;
if ((int)lVar17 < (int)sVar14) {
lVar15 = lVar17;
bVar7 = Garage_Shift_Torque_Management_Enable_Bits;
}
if (sVar20 < (short)lVar15) {
lVar15 = lVar19;
bVar7 = Upshift_Torque_Management_Enable_Bits;
}
if ((short)lVar12 < (short)lVar15) {
lVar15 = lVar12;
bVar7 = Downshift_Torque_Management_Enable_Bits;
}
if ((int)lVar22 < (int)(short)lVar15) {
lVar15 = lVar22;
bVar7 = Stall_Torque_Management_Enable_Bits;
}
sVar14 = (short)lVar15;
if (sVar11 < (short)lVar15) {
sVar14 = sVar11;
bVar7 = EMCC_Torque_Management_Enable_Bits;
}
if (sVar16 < sVar14) {
sVar14 = sVar16;
bVar7 = Engine_Braking_Torque_Management_Enable_Bits;
}
bVar13 = THDATA;
if (bVar13 < Wide_Open_Throttle) {
bVar18 = 1;
}
else {
bVar18 = 8;
}
uVar26 = DAT_60002288;
bVar7 = ~bVar7;
uVar27 = uVar26 & 0xfffe;
if ((bVar7 & bVar18) == 0) {
uVar27 = uVar26 | 1;
}
if (bVar13 < Wide_Open_Throttle) {
bVar18 = 2;
}
else {
bVar18 = 0x10;
}
uVar26 = uVar27 & 0xfffd;
if ((bVar7 & bVar18) == 0) {
uVar26 = uVar27 | 2;
}
if (bVar13 < Wide_Open_Throttle) {
bVar13 = 4;
}
else {
bVar13 = 0x20;
}
uVar27 = uVar26 & 0xfffb;
if ((bVar7 & bVar13) == 0) {
uVar27 = uVar26 | 4;
}
DAT_60002288 = uVar27;
}
DAT_60002256 = sVar14;
DAT_60002258 = sVar20;
DAT_6000225a = (short)lVar12;
DAT_6000225c = (short)lVar17;
DAT_6000225e = (short)lVar22;
DAT_60002260 = sVar11;
DAT_60002262 = sVar16;
return;
}
void Stall_Torque_Limit_Selection(void)
{
undefined uVar1;
byte bVar2;
byte bVar3;
char cVar4;
byte bVar5;
short sVar6;
bVar3 = GENFG1;
if (((bVar3 & 4) == 0) && (bVar2 = IGCODE, (~bVar2 & 4) == 0)) {
LAB_0039f8e0:
bVar2 = DAT_600026d5;
sVar6 = Stall_Torque_Limit_for_1st_Gear_Low_Range;
if ((~bVar2 & 0x20) == 0) goto LAB_0039ff84;
}
else {
cVar4 = SHCODE;
if (((cVar4 == '\x01') || ((cVar4 == '\r' || (cVar4 == '\v')))) && ((~bVar3 & 4) == 0))
goto LAB_0039f8e0;
}
cVar4 = SHCODE;
if ((((((((cVar4 == '\0') || (cVar4 == '\f')) && ((~bVar3 & 4) == 0)) &&
(bVar2 = DAT_600026d5,
sVar6 = Stall_Torque_Limit_for_Shifts_To/From_1st_Gear_Low_Range,
(~bVar2 & 0x20) == 0)) ||
(((((bVar3 & 4) == 0 && (bVar2 = IGCODE, (~bVar2 & 8) == 0)) ||
((((cVar4 == '\x02' || ((cVar4 == '\x03' || (cVar4 == '\x0e')))) || (cVar4 == '\t')) &&
((~bVar3 & 4) == 0)))) &&
(bVar2 = DAT_600026d5, sVar6 = Stall_Torque_Limit_for_2nd_Gear_Low_Range,
(~bVar2 & 0x20) == 0)))) ||
(((((bVar3 & 4) == 0 && (bVar2 = IGCODE, (~bVar2 & 0x10) == 0)) ||
(((cVar4 == '\x04' || (((cVar4 == '\n' || (cVar4 == '\b')) || (cVar4 == '\x12')))) &&
((~bVar3 & 4) == 0)))) &&
(bVar2 = DAT_600026d5, sVar6 = Stall_Torque_Limit_for_2P_Gear_Low_Range,
(~bVar2 & 0x20) == 0)))) ||
(((((bVar3 & 4) == 0 && (bVar2 = IGCODE, (~bVar2 & 0x20) == 0)) ||
((((cVar4 == '\x05' || ((cVar4 == '\x0f' || (cVar4 == '\a')))) || (cVar4 == '\x11')) &&
((~bVar3 & 4) == 0)))) &&
(bVar2 = DAT_600026d5, sVar6 = Stall_Torque_Limit_for_3rd_Gear_Low_Range,
(~bVar2 & 0x20) == 0)))) ||
(((((bVar3 & 4) == 0 && (bVar2 = IGCODE, (~bVar2 & 0x40) == 0)) ||
(((cVar4 == '\x06' || (cVar4 == '\x10')) && ((~bVar3 & 4) == 0)))) &&
(bVar2 = DAT_600026d5, sVar6 = Stall_Torque_Limit_for_4th_Gear_Low_Range,
(~bVar2 & 0x20) == 0)))) goto LAB_0039ff84;
if ((bVar3 & 4) == 0) {
bVar2 = IGCODE;
if ((((~bVar2 & 0x80) == 0) &&
(bVar5 = DAT_600026d5, sVar6 = Stall_Torque_Limit_for_4'_Gear_Low_Range,
(~bVar5 & 0x20) == 0)) ||
(((~bVar2 & 2) == 0 &&
(bVar2 = DAT_600026d5, sVar6 = Stall_Torque_Limit_for_Reverse_Gear_Low_Range,
(~bVar2 & 0x20) == 0)))) goto LAB_0039ff84;
}
if (cVar4 == '\x14') {
if ((~bVar3 & 4) == 0) {
bVar2 = DAT_600026d5;
sVar6 = Stall_Torque_Limit_for_Neutral_to_Reverse_Low_Rang e;
joined_r0x0039fb84:
if ((~bVar2 & 0x20) == 0) goto LAB_0039ff84;
}
}
else if ((cVar4 == '\x13') && ((~bVar3 & 4) == 0)) {
bVar2 = DAT_600026d5;
sVar6 = Stall_Torque_Limit_for_Neutral_to_Drive_Low_Range;
goto joined_r0x0039fb84;
}
if (((((bVar3 & 4) != 0) || (bVar2 = IGCODE, (~bVar2 & 4) != 0)) &&
(((cVar4 != '\x01' && ((cVar4 != '\r' && (cVar4 != '\v')))) || ((~bVar3 & 4) != 0)))) ||
(bVar2 = DAT_600026df, sVar6 = Stall_Torque_Limit_for_1st_Gear_and_Brake_On,
(~bVar2 & 0x10) != 0)) {
if ((((bVar3 & 4) == 0) && (bVar2 = IGCODE, (~bVar2 & 4) == 0)) ||
(((cVar4 == '\x01' || ((cVar4 == '\r' || (cVar4 == '\v')))) && ((~bVar3 & 4) == 0)))) {
uVar1 = DAT_600020cb;
sVar6 = FUN_003ad210(uVar1,&DAT_003f4bc4);
}
else if (((((((cVar4 != '\0') && (cVar4 != '\f')) ||
(sVar6 = Stall_Torque_Limit_for_Shifts_To/From_1st_Gear, (~bVar3 & 4) != 0
)) && (((((bVar3 & 4) != 0 || (bVar2 = IGCODE, (~bVar2 & 8) != 0)) &&
((((cVar4 != '\x02' && ((cVar4 != '\x03' && (cVar4 != '\x0e')))) &&
(cVar4 != '\t')) || ((~bVar3 & 4) != 0)))) ||
(bVar2 = DAT_600026df,
sVar6 = Stall_Torque_Limit_for_2nd_Gear_and_Brake_On,
(~bVar2 & 0x10) != 0)))) &&
((((sVar6 = Stall_Torque_Limit_for_2nd_Gear, (bVar3 & 4) != 0 ||
(bVar2 = IGCODE, (~bVar2 & 8) != 0)) &&
(((cVar4 != '\x02' && (((cVar4 != '\x03' && (cVar4 != '\x0e')) && (cVar4 != '\t'))))
|| ((~bVar3 & 4) != 0)))) &&
((((((bVar3 & 4) != 0 || (bVar2 = IGCODE, (~bVar2 & 0x10) != 0)) &&
((((cVar4 != '\x04' && ((cVar4 != '\n' && (cVar4 != '\b')))) && (cVar4 != '\x12'))
|| ((~bVar3 & 4) != 0)))) ||
(bVar2 = DAT_600026df,
sVar6 = Stall_Torque_Limit_for_2P_Gear_and_Brake_On,
(~bVar2 & 0x10) != 0)) &&
(((sVar6 = Stall_Torque_Limit_for_2P_Gear, (bVar3 & 4) != 0 ||
(bVar2 = IGCODE, (~bVar2 & 0x10) != 0)) &&
(((cVar4 != '\x04' && (((cVar4 != '\n' && (cVar4 != '\b')) && (cVar4 != '\x12'))))
|| ((~bVar3 & 4) != 0)))))))))) &&
(((((bVar3 & 4) != 0 || (bVar2 = IGCODE, (~bVar2 & 0x20) != 0)) &&
((((cVar4 != '\x05' && ((cVar4 != '\x0f' && (cVar4 != '\a')))) && (cVar4 != '\x11'))
|| ((~bVar3 & 4) != 0)))) ||
(bVar2 = DAT_600026df,
sVar6 = Stall_Torque_Limit_for_3rd_Gear_and_Brake_On, (~bVar2 & 0x10) != 0
)))) && ((((sVar6 = Stall_Torque_Limit_for_3rd_Gear, (bVar3 & 4) != 0 ||
(bVar2 = IGCODE, (~bVar2 & 0x20) != 0)) &&
((((cVar4 != '\x05' &&
(((cVar4 != '\x0f' && (cVar4 != '\a')) && (cVar4 != '\x11')))) ||
((~bVar3 & 4) != 0)) &&
((sVar6 = Stall_Torque_Limit_for_4th_Gear, (bVar3 & 4) != 0 ||
(bVar2 = IGCODE, (~bVar2 & 0x40) != 0)))))) &&
(((cVar4 != '\x06' && (cVar4 != '\x10')) || ((~bVar3 & 4) != 0)))))) {
if ((bVar3 & 4) == 0) {
bVar2 = IGCODE;
sVar6 = Stall_Torque_Limit_for_4P_Gear;
if ((~bVar2 & 0x80) == 0) goto LAB_0039ff84;
if ((~bVar2 & 2) == 0) {
bVar3 = DAT_600026df;
sVar6 = Stall_Torque_Limit_for_Reverse_Gear_and_Brake_On;
if ((~bVar3 & 0x10) != 0) {
sVar6 = Stall_Torque_Limit_for_Reverse_Gear;
}
goto LAB_0039ff84;
}
}
sVar6 = Stall_Torque_Limit_for_Neutral_to_Reverse;
if (((cVar4 != '\x14') &&
(sVar6 = Stall_Torque_Limit_for_Neutral_to_Drive, cVar4 != '\x13')) ||
((~bVar3 & 4) != 0)) {
sVar6 = Stall_Torque_Limit_Default_Value;
}
}
}
LAB_0039ff84:
DAT_60002276 = sVar6;
bVar3 = IGCODEA;
if (((ulonglong)(LZCOUNT(~(uint)bVar3 & 0x20) << 0x20) >> 0x25 != 0) &&
(Stall_Torque_Limit_with_Lockup < sVar6)) {
sVar6 = Stall_Torque_Limit_with_Lockup;
}
Stall_Torque_Limit = sVar6;
return;
}
Last edited by Jim P 2.0; 06-16-2024 at 11:59 AM.
best of luck figuring it out
I did some refactoring - it is not absolutely impossible, but (I am sure you know this already) it is VERY time consuming.
Isn't there a better decompilers? Those "if"-s were really nasty.![]()
I've played a little in the past with GHydra and NGC4 bin of my vehicle but ended nowhere.I was hoping to investigate why that nasty "boom" 3->4 shift after kickdown is happening, but never got the time (and maybe the experience) to dig deep enough.
Code:void Stall_Torque_Limit_Selection(void) { undefined uVar1; byte reverse = (IGCODE & 2) != 0; byte firstgear = (IGCODE & 4) != 0; byte secondGear = (IGCODE & 8) != 0; byte secondPGear = (IGCODE & 0x10) != 0; byte thirdGear = (IGCODE & 0x20) != 0; byte forthGear = (IGCODE & 0x40) != 0; byte fiftthGear = (IGCODE & 0x80) != 0; byte brakeon = (DAT_600026d5 & 0x10) != 0; byte lowrange = (DAT_600026d5 & 0x20) != 0; byte shifting = (GENFG1 & 4) != 0; if (lowrange) { if ((!shifting && firstgear) || (shifting && (SHCODE == '\x01' || SHCODE == '\r' || SHCODE == '\v'))) { sVar6 = Stall_Torque_Limit_for_1st_Gear_Low_Range; goto exit; } if ((shifting && (SHCODE == '\0' || SHCODE == '\f'))) { Stall_Torque_Limit_for_Shifts_To_From_1st_Gear_Low_Range; goto exit; } if ((!shifting && secondgear) || (shifting && (SHCODE == '\x02' || SHCODE == '\x03' || SHCODE == '\x0e' || SHCODE == '\t'))) { sVar6 = Stall_Torque_Limit_for_2nd_Gear_Low_Range; goto exit; } if ((!shifting && secondPgear) || (shifting && (SHCODE == '\x04' || SHCODE == '\n' || SHCODE == '\b' || SHCODE == '\x12'))) { sVar6 = Stall_Torque_Limit_for_2P_Gear_Low_Range; goto exit; } if ((!shifting && thirdGear) || (shifting && (SHCODE == '\x05' || SHCODE == '\x0f' || SHCODE == '\a' || SHCODE == '\x11'))) { sVar6 = Stall_Torque_Limit_for_3rd_Gear_Low_Range; goto exit; } if ((!shifting && forthGear) || (shifting && (SHCODE == '\x06' || SHCODE == '\x10'))) { sVar6 = Stall_Torque_Limit_for_4th_Gear_Low_Range; goto exit; } if (!shifting) { if (fifthGear) { sVar6 = Stall_Torque_Limit_for_4_Gear_Low_Range; goto exit; } if (reverse) { sVar6 = Stall_Torque_Limit_for_Reverse_Gear_Low_Range; goto exit; } } else { if (SHCODE == '\x14') { sVar6 = Stall_Torque_Limit_for_Neutral_to_Reverse_Low_Range; goto exit; } else if (SHCODE == '\x13') { sVar6 = Stall_Torque_Limit_for_Neutral_to_Drive_Low_Range; goto exit; } } } if ((!shifting && firstgear) || (shifting && (SHCODE == '\x01' && SHCODE == '\r' || SHCODE == '\v')) { if (brakeon) { sVar6 = Stall_Torque_Limit_for_1st_Gear_and_Brake_On; } else { uVar1 = DAT_600020cb; sVar6 = FUN_003ad210(uVar1, &DAT_003f4bc4); } goto exit; } if ((shifting && (SHCODE == '\0' || SHCODE == '\f'))) { Stall_Torque_Limit_for_Shifts_To_From_1st_Gear; goto exit; } if ((!shifting && secondgear) || (shifting && (SHCODE == '\x02' || SHCODE == '\x03' || SHCODE == '\x0e' || SHCODE == '\t'))) { sVar6 = brakeon ? Stall_Torque_Limit_for_2nd_Gear_and_Brake_On : Stall_Torque_Limit_for_2nd_Gear; goto exit; } if ((!shifting && secondPgear) || (shifting && (SHCODE == '\x04' || SHCODE == '\n' || SHCODE == '\b' || SHCODE == '\x12'))) { sVar6 = brakeon ? Stall_Torque_Limit_for_2P_Gear_and_Brake_On : Stall_Torque_Limit_for_2P_Gear; goto exit; } if ((!shifting && thirdGear) || (shifting && (SHCODE == '\x05' || SHCODE == '\x0f' || SHCODE == '\a' || SHCODE == '\x11'))) { sVar6 = brakeon ? Stall_Torque_Limit_for_3rd_Gear_and Brake_On : Stall_Torque_Limit_for_3rd_Gear; goto exit; } if ((!shifting && forthGear) || (shifting && (SHCODE == '\x06' || SHCODE == '\x10'))) { sVar6 = Stall_Torque_Limit_for_4th_Gear; goto exit; } if (!shifting) { sVar6 = Stall_Torque_Limit_for_4P_Gear; if (fifthGear) goto exit; if (reverse) { sVar6 = brakeon ? Stall_Torque_Limit_for_Reverse_Gear_and_Brake_On : Stall_Torque_Limit_for_Reverse_Gear; goto exit; } } sVar6 = Stall_Torque_Limit_for_Neutral_to_Reverse; if (SHCODE != '\x14') { sVar6 = Stall_Torque_Limit_for_Neutral_to_Drive; if (!shifting || SHCODE != '\x13') { sVar6 = Stall_Torque_Limit_Default_Value; } } exit: DAT_60002276 = sVar6; bVar3 = IGCODEA; if (((ulonglong)(LZCOUNT(~(uint)bVar3 & 0x20) << 0x20) >> 0x25 != 0) && (Stall_Torque_Limit_with_Lockup < sVar6)) { sVar6 = Stall_Torque_Limit_with_Lockup; } Stall_Torque_Limit = sVar6; return; }
Last edited by sparkybg; 06-16-2024 at 06:27 PM.
there is no direct conversion from the programming language used and the one above, whats above is pseudo-code, as close of a conversion to C language as you can get from the language used in the controller and how the code is written. it's as good as it gets without manually cleaning up and filling in unknown variables. I can follow it all through, just time consuming. but without the code in the language in the controller and actually understanding how things are done by chrysler as far as their code goes, and what the parameters are and where, best of luck.
Last edited by Jim P 2.0; 06-16-2024 at 06:57 PM.
your "edits" to the code is incorrect as well. like why would you think that the genfg1 is a shifting status flag? I don’t recall ever seeing it change bits during shifts.
Last edited by Jim P 2.0; 06-16-2024 at 07:40 PM.
I understand this. I did some experiments mainly with MIPS and ARM code, editing it "online" in GHydra. The complexity and readability of the decompiled code may be either due to code optimisations, "decompiler" deficiencies for this exact instruction set, the nature of instruction set or many other thing I am now aware of. For example, usually ARM code decompiels much better than MIPS, no matter if code optimisations are present or not - this is my impressions from looking at my compiled code for PIC32 and STM32 devices.
Looking only at the code of this function alone makes me guess that bit 2 of this variable/register is shifting status flag. I may be wrong, but based on this code alone, it looks to me that way. But even if I am wrong, the code is still clear enough to understand how it selects the stall torque limit.
I did a translation of the shift codes to shifts of 68RFE table someone posted on the forum, and adapted it to 45/545/65RFE:
max_line_pressure_shifts.jpg
Now the code looks even better, and the bit2 of GENFG1 also seems to comform with it even better:
Again, this just is my interpretarion/guess based on what I am looking at, nothing more. Without any further information, of course I may be wrong. But than we should find another explanation/quess of what "(GENGF1 & 4) != 0" means, that also comforms to the checks of either the gear or the shift codes, based on it.Code:void Stall_Torque_Limit_Selection(void) { undefined uVar1; char gearR = (IGCODE & 2) != 0; char gear1 = (IGCODE & 4) != 0; char gear2 = (IGCODE & 8) != 0; char gear2P = (IGCODE & 0x10) != 0; char gear3 = (IGCODE & 0x20) != 0; char gear4 = (IGCODE & 0x40) != 0; char gear5 = (IGCODE & 0x80) != 0; char brakeOn = (DAT_600026d5 & 0x10) != 0; char lowRange = (DAT_600026d5 & 0x20) != 0; char shifting = (GENFG1 & 4) != 0; char sh12 = 0; char sh12P = 1; char sh22P = 2; char sh23 = 3; char sh2P3 = 4; char sh34 = 5; char sh45 = 6; char sh35 = 7; //\a char sh2P4 = 8; //\b char sh32 = 9; //\t char sh32P = 0xA; //\n char sh31 = 0xB; //\v char sh21 = 0xC; //\f char sh2P1 = 0xD; //\r char sh2P2 = 0xE; char sh43 = 0xF; char sh54 = 0x10; char sh53 = 0x11; char sh42P = 0x12; char shN1 = 0x13; char shNR = 0x14; char shRN = 0x15; if (lowRange) { if ((!shifting && gear1) || (shifting && (SHCODE == sh12P || SHCODE == sh2P1 || SHCODE == sh31))) { sVar6 = Stall_Torque_Limit_for_1st_Gear_Low_Range; goto exit; } if ((shifting && (SHCODE == sh12 || SHCODE == sh21))) { Stall_Torque_Limit_for_Shifts_To_From_1st_Gear_Low_Range; goto exit; } if ((!shifting && gear2) || (shifting && (SHCODE == sh22p || SHCODE == sh23 || SHCODE == sh2P2 || SHCODE == sh32))) { sVar6 = Stall_Torque_Limit_for_2nd_Gear_Low_Range; goto exit; } if ((!shifting && gear2P) || (shifting && (SHCODE == sh2P3 || SHCODE == sh32P || SHCODE == sh2P4 || SHCODE == sh42P))) { sVar6 = Stall_Torque_Limit_for_2P_Gear_Low_Range; goto exit; } if ((!shifting && gear3) || (shifting && (SHCODE == sh34 || SHCODE == sh43 || SHCODE == sh35 || SHCODE == sh53))) { sVar6 = Stall_Torque_Limit_for_3rd_Gear_Low_Range; goto exit; } if ((!shifting && gear4) || (shifting && (SHCODE == sh45 || SHCODE == sh54))) { sVar6 = Stall_Torque_Limit_for_4th_Gear_Low_Range; goto exit; } if (!shifting) { if (gear5) { sVar6 = Stall_Torque_Limit_for_4P_Gear_Low_Range; goto exit; } if (gearR) { sVar6 = Stall_Torque_Limit_for_Reverse_Gear_Low_Range; goto exit; } } else { if (SHCODE == shNR) { sVar6 = Stall_Torque_Limit_for_Neutral_to_Reverse_Low_Range; goto exit; } else if (SHCODE == shN1) { sVar6 = Stall_Torque_Limit_for_Neutral_to_Drive_Low_Range; goto exit; } } } if ((!shifting && gear1) || (shifting && (SHCODE == sh12P && SHCODE == sh2P1 || SHCODE == sh31)) { if (brakeOn) { sVar6 = Stall_Torque_Limit_for_1st_Gear_and_Brake_On; } else { uVar1 = DAT_600020cb; sVar6 = FUN_003ad210(uVar1, &DAT_003f4bc4); } goto exit; } if ((shifting && (SHCODE == sh12 || SHCODE == sh21))) { Stall_Torque_Limit_for_Shifts_To_From_1st_Gear; goto exit; } if ((!shifting && gear2) || (shifting && (SHCODE == sh22P || SHCODE == sh23 || SHCODE == sh2P2 || SHCODE == sh32))) { sVar6 = brakeOn ? Stall_Torque_Limit_for_2nd_Gear_and_Brake_On : Stall_Torque_Limit_for_2nd_Gear; goto exit; } if ((!shifting && gear2P) || (shifting && (SHCODE == sh2P3 || SHCODE == sh32P || SHCODE == sh2P4 || SHCODE == sh42P))) { sVar6 = brakeOn ? Stall_Torque_Limit_for_2P_Gear_and_Brake_On : Stall_Torque_Limit_for_2P_Gear; goto exit; } if ((!shifting && gear3) || (shifting && (SHCODE == sh34 || SHCODE == sh43 || SHCODE == sh35 || SHCODE == sh53))) { sVar6 = brakeOn ? Stall_Torque_Limit_for_3rd_Gear_and Brake_On : Stall_Torque_Limit_for_3rd_Gear; goto exit; } if ((!shifting && gear4) || (shifting && (SHCODE == sh45 || SHCODE == sh54))) { sVar6 = Stall_Torque_Limit_for_4th_Gear; goto exit; } if (!shifting) { sVar6 = Stall_Torque_Limit_for_4P_Gear; if (fifthGear) goto exit; if (gearR) { sVar6 = brakeOn ? Stall_Torque_Limit_for_Reverse_Gear_and_Brake_On : Stall_Torque_Limit_for_Reverse_Gear; goto exit; } } sVar6 = Stall_Torque_Limit_for_Neutral_to_Reverse; if (SHCODE != shNR') { sVar6 = Stall_Torque_Limit_for_Neutral_to_Drive; if (!shifting && SHCODE != shN1') { sVar6 = Stall_Torque_Limit_Default_Value; } } exit: DAT_60002276 = sVar6; bVar3 = IGCODEA; if (((ulonglong)(LZCOUNT(~(uint)bVar3 & 0x20) << 0x20) >> 0x25 != 0) && (Stall_Torque_Limit_with_Lockup < sVar6)) { sVar6 = Stall_Torque_Limit_with_Lockup; } Stall_Torque_Limit = sVar6; return; }
I am curious how line pressure selection function looks like. I guess it may be pretty close in terms of "if"s and the variables used in them.
still not correct and that was me that posted the shift shift table
OK, then my next guess is it is some kind of "stall torque limit selection strategy" configuration flag. I guess this can be confirmed or not based on if it's address or source (i don't know if flash contents are read dirtectly or are first buffered in the RAM) is in the "parameters region" of flash/EEPROM and never changed by the code.
The important thing is - the function uses it to select the stall torque limit either from the gear (I guess present gear), or from the shifts (no idea if last shift or next shift), and that's enough to understand how the function works, which was the sole purpose of my edit/refactoring. It was fun, I've learned somethig, so even if I am still not guessing right, it is still OK for me.
Thank you for that.
Last edited by sparkybg; 06-17-2024 at 01:20 AM.
It’s related to something with shifts but does not trigger on shifts to neutral or park but I don’t see it mixed in with code that contains the shift in progress stuff and I see that bit of that flag array mixed in with thermistor logic. Not making a whole lot of sense to me at the moment. Shifts to reverse and to first gear it does pop up along with bit 3. Logging it right now and will go back and see which bits change during up down shifts.
Maybe it has something to do with "cold shifts, normal shifts" and so on.
I tried my NGC4 bin with GHidra again. SHCODE is really easy to realize - it is used all over the transmission code, but I don't have any idea how to realize the rest of the parameters. Full code (engine + transmission) is more than 160000 lines.
Can you please advise me what part of NGC4 flash is dedicated to transmission? Last 256k? Last 512k? I am really curious to play with it and engine part is of no interest to me - it just adds complexity.