Page 5 of 11 FirstFirst 123456789 ... LastLast
Results 81 to 100 of 205

Thread: Any tune basics for the 65RFE ?

  1. #81
    Banned
    Join Date
    Jan 2018
    Location
    Everywhere
    Posts
    1,772
    Seems you deleted your post on where to find the pressures settings, so I assume you found them

  2. #82
    Tuner in Training
    Join Date
    Jul 2023
    Posts
    11
    Quote Originally Posted by Jim P View Post
    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. 😀

  3. #83
    Tuner in Training
    Join Date
    Jun 2024
    Location
    Europe
    Posts
    33
    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

  4. #84
    Tuner in Training
    Join Date
    Jun 2024
    Location
    Europe
    Posts
    33
    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

  5. #85
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    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.

  6. #86
    Tuner in Training
    Join Date
    Jun 2024
    Location
    Europe
    Posts
    33
    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

  7. #87
    Tuner in Training
    Join Date
    Jun 2024
    Location
    Europe
    Posts
    33
    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

  8. #88
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    Quote Originally Posted by 10le View Post
    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
    The abbreviations have nothing to do with Siemens/VDO/Continental or Bosch

    And will have to find out what this STALL TORQUE really means.

    Just a torque limiter just in determining torque limit


  9. #89
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    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;
    }

  10. #90
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    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.

  11. #91
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    best of luck figuring it out

  12. #92
    Tuner in Training
    Join Date
    Apr 2023
    Location
    Sofia, Bulgaria
    Posts
    36
    Quote Originally Posted by Jim P 2.0 View Post
    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.

  13. #93
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    Quote Originally Posted by sparkybg View Post
    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.
    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.

  14. #94
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    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.

  15. #95
    Tuner in Training
    Join Date
    Apr 2023
    Location
    Sofia, Bulgaria
    Posts
    36
    Quote Originally Posted by Jim P 2.0 View Post
    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...
    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.

    Quote Originally Posted by Jim P 2.0 View Post
    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.
    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:
    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;
    }
    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.

    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.

  16. #96
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    still not correct and that was me that posted the shift shift table

  17. #97
    Tuner in Training
    Join Date
    Apr 2023
    Location
    Sofia, Bulgaria
    Posts
    36
    Quote Originally Posted by Jim P 2.0 View Post
    still not correct
    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.

    Quote Originally Posted by Jim P 2.0 View Post
    and that was me that posted the shift shift table
    Thank you for that.
    Last edited by sparkybg; 06-17-2024 at 01:20 AM.

  18. #98
    Tuner in Training
    Join Date
    Jun 2024
    Location
    Europe
    Posts
    33
    Quote Originally Posted by Jim P 2.0 View Post
    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;
    }


    Wow, thank you. Now I have a lot to do!! 😍😍😍

  19. #99
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    437
    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.

  20. #100
    Tuner in Training
    Join Date
    Apr 2023
    Location
    Sofia, Bulgaria
    Posts
    36
    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.