Page 1 of 2 12 LastLast
Results 1 to 20 of 26

Thread: Freebie 2012 68RFE Tune File with CCV Code Removed

  1. #1
    Banned
    Join Date
    Jan 2018
    Location
    Everywhere
    Posts
    1,772

    Freebie 2012 68RFE Tune File with CCV Code Removed

    Attached is a code modified tune file for a 2012 68RFE up for grabs. All code related to the crankcase ventilation filter/pressure gauge has been removed. There is no code to trigger derates or DTC's related to the CCV/CCP whatsoever within this tune file, the code has been fully removed.
    Attached Files Attached Files

  2. #2
    Thanks for the share Jim!
    2019 CCSB Bighorn - Excited HP Tuners finally supported Cummins CM2350&2450 platforms

  3. #3
    Potential Tuner
    Join Date
    Jul 2021
    Posts
    2
    HI Jim, I am looking for a stock 68RFE tune for a 2014 Dodge 2500 6.7L. This truck has had the transmission tuned and no stock file available. Do you know if this tune you shared would be the same for the 2014 68rfe? Thanks

  4. #4
    Banned
    Join Date
    Jan 2018
    Location
    Everywhere
    Posts
    1,772
    100% not

  5. #5
    Potential Tuner
    Join Date
    Jul 2021
    Posts
    2
    Thanks Jim, I was hoping that I could use it as a compare file to change this one back to stock. Would you have any suggestions where I might find a stock tune.?

  6. #6
    Ultimate goal of the above file was the beginning of learning how the OS works, how things are tied together and ultimately develop a race engine dedicated OS that has no fluff and upgraded control algorithms to more modern models, not just with engine control but transmission control as well. Been a long time since working on it and going to try to get back into it and work on how the EGR and intake throttle are interlaced within the OS and remove the coding, restructure the code as necessary to have it operational. Test bed is a bench ECU for flash testing to make sure the ECU functions after modifications to the OS and eventually my personal Canadian registered truck which was purchased a long time ago without any of the emissions equipment on it. It?s gonna be a long and challenging road but got plans and goals set in place for what I want to accomplish with it. Removing the CCV code was easy everything else while easy to locate within the code is going to be mucho more challenging.
    Last edited by Jim P 2.0; 02-13-2024 at 07:00 PM.

  7. #7
    Part of the challenge is while I have all the user editable parameters mapped out, there is a massive amount of data cells used for storing and retrieving data from calculations, sensor data, etc that there is no way of figuring out what exactly they are and code needs to be studied to try to deduce what it is, if it’s shared with other areas of code and how vital it is

  8. #8
    Something many people may not actually know is the “tables” and stuff we edit for more power, etc aren’t what the code actually uses per say, except for a small amount of tables and parameters. Vast majority of them get loaded into RAM and the code uses the data from there.

  9. #9
    That is an amazing goal to have Jim. Sounds like you have set deliverables and timelines, which is definitely needed for a challenge like this. Please keep the world posted with your progress!
    2019 CCSB Bighorn - Excited HP Tuners finally supported Cummins CM2350&2450 platforms

  10. #10
    No exact timeline. It’s a super time consuming endeavour and hard to fit into day to day life. I only just started to revisit the project. I’m not sure how long it’ll take to strip the OS down to bare bone. Once there I’ll know how much memory I’ll have available to work with for sure. Right now I’m just looking at the intake throttle logic and majority of it sits within its own function groups but there is a little bit of interlacing with the egr code and VGT code that I need to look at closer to see how I can do some snipping and still keep the system happy. That’s the biggest challenge is keeping things happy as things are snipped out.

  11. #11
    The project is intended to a race only dedicated OS and once complete, whenever that’ll end up being, there will be security features built into it so it can’t just float around and be used on any vehicle before it could be a deliverable.

  12. #12
    This is essentially what it looks like working in the code

    Hex to PowerPC language
    Code Sample 1.png

    Pseudo-code of the PowerPC language translated into rough C code
    Code Sample 2.png

    From those you can see the challenge presented by it.

  13. #13
    Good stuff Jim. Not many individuals can comprehend/decipher stuff like that nonetheless make changes in those languages.

  14. #14
    It’s not that easy that’s for sure. Took a lot of time just to fill in information to be able to tell what the different function groups are and they are still void of a lot of information as there are a lot of data fields in RAM that you can’t know what they are without the original full code or by systematic deduction of what they could possibly be
    Last edited by Jim P 2.0; 02-14-2024 at 06:28 PM.

  15. #15
    I’ve gone through the code sections for the intake air throttle, labelling data fields in RAM that are completely unknown as to what they are and mainly there are two data fields that I have labelled as IAT_UNKNOWN_40 and IAT_UNKNOWN_60 that are used in 108 different function groups of code outside of just within the intake air throttle code sits. Some global variables that I’ll have to figure out what they are, all the other unknowns, there’s 251 just within the sections of code for the intake air throttle, that can be trashed along with the intake air throttle code for sure as they don’t appear anywhere else.

  16. #16
    Part of the Air Filter Monitor code if anyone wants to try to figure that out lol

    void FUN_Air_Filter_Monitor(void)

    {
    bool bVar1;
    undefined *puVar2;
    uint uVar3;
    uint uVar4;
    undefined2 uVar5;
    byte bVar6;
    undefined4 uVar7;
    bool bVar8;
    bool bVar9;
    bool bVar10;
    bool bVar11;
    undefined *puVar12;
    float fVar13;
    float fVar14;
    float fVar15;
    float fVar16;
    undefined8 uVar17;
    ulonglong uVar18;
    bool bVar19;
    char cVar20;
    char cVar21;
    undefined uVar22;
    char cVar24;
    float *pfVar23;
    float fVar25;
    float fVar26;
    float *pfVar27;
    ulonglong unaff_r31;
    ulonglong uVar28;
    ulonglong uVar29;
    float fVar30;
    int iVar31;
    bool bVar32;
    char local_b8;
    undefined local_b7;
    char local_b6;
    char local_b5;
    char local_b4;
    short local_b2;
    undefined *local_b0;
    undefined *local_ac;
    undefined *local_a8;
    uint local_a4;
    uint local_a0;
    undefined *local_9c;
    undefined4 local_98;
    float local_94;
    int local_90;
    uint local_8c;
    float local_88;
    float local_84;
    float local_80;
    float local_7c;
    float local_78;
    float local_74;
    undefined4 uStack_4;

    uVar18 = ZEXT48(&DAT_60010590);
    uStack_4 = (undefined4)unaff_r31;
    uVar5 = DAT_6000b930;
    local_b5 = FUN_000621f0(uVar5);
    *(char *)((int)uVar18 + -0x4c5e) = local_b5;
    FUN_00062970(*(undefined4 *)((int)uVar18 + -0x4c24),&local_b2,&local_b8);
    if (local_b2 != 0) {
    local_b8 = '\x01';
    }
    uVar3 = ((uint)(byte)((local_b8 == '\x01') << 1) << 8) >> 9;
    uVar17 = countLeadingZeros(uVar3);
    uVar4 = (uint)uVar17 >> 5 & 0xff;
    if (uVar4 == 0) {
    if (uVar3 == 0) {
    fVar13 = 0.0;
    }
    else {
    fVar13 = 0.1;
    }
    fVar16 = (float)DAT_600525e8;
    fVar13 = fVar13 + fVar16;
    unaff_r31 = 0;
    fVar16 = fVar13;
    if (fVar13 <= 0.0) {
    fVar16 = 0.0;
    }
    fVar14 = C_AFM_Start_Time;
    if ((fVar16 <= fVar14) && (fVar14 = fVar13, fVar13 <= 0.0)) {
    fVar14 = 0.0;
    }
    }
    else {
    fVar14 = 0.0;
    }
    iVar31 = (int)uVar18;
    *(float *)(iVar31 + -0x4c34) = fVar14;
    if (uVar4 != 0) {
    *(undefined *)(iVar31 + -0x4c63) = 1;
    }
    DAT_600525e8 = fVar14;
    cVar20 = C_AFM_Feature_Enable;
    if (((cVar20 == '\0') || (fVar13 = C_AFM_Start_Time, fVar14 < fVar13)) ||
    ((cVar20 = C_AFM_Error_Disable, cVar20 != '\0' && (local_b5 != '\0')))) {
    local_90 = 0;
    }
    else {
    local_90 = 1;
    }
    if (*(char *)(iVar31 + -0x4c64) != '\x01') {
    local_8c = (uint)*(ushort *)(iVar31 + -0x4c60);
    FUN_00062120(local_8c);
    }
    if (*(char *)((int)uVar18 + -0x4c64) != '\x01') {
    local_8c = (uint)*(ushort *)((int)uVar18 + -0x4c3e);
    FUN_00062120(local_8c);
    }
    *(char *)((int)uVar18 + -0x4c64) = local_b8;
    FUN_00062e40(*(undefined4 *)((int)uVar18 + -0x4c20),&local_b2,&local_a8);
    if (local_b2 != 0) {
    local_a8 = &DAT_42a00000;
    }
    *(undefined **)((int)uVar18 + -0x4c74) = local_a8;
    FUN_00062970(*(undefined4 *)((int)uVar18 + -0x4c1c),&local_b2,&local_a4);
    if (local_b2 != 0) {
    local_a4 = 10;
    }
    *(uint *)((int)uVar18 + -0x4c80) = local_a4;
    FUN_00062e40(*(undefined4 *)((int)uVar18 + -0x4c18),&local_b2,&local_ac);
    if (local_b2 != 0) {
    local_ac = &DAT_42960000;
    }
    *(undefined **)(&DAT_ffffb360 + (int)uVar18) = local_ac;
    local_b2 = FUN_00062d00(&DAT_00001b3f);
    *(short *)((int)uVar18 + -0x4c70) = local_b2;
    local_b2 = FUN_00062d00(&DAT_00003429);
    *(short *)((int)uVar18 + -0x4c2c) = local_b2;
    FUN_00062e40(*(undefined4 *)((int)uVar18 + -0x4c14),&local_b2,&local_9c);
    if (local_b2 != 0) {
    local_9c = &DAT_42960000;
    }
    *(undefined **)((int)uVar18 + -0x4c30) = local_9c;
    FUN_00062e40(*(undefined4 *)((int)uVar18 + -0x4c10),&local_b2,&local_98);
    if (local_b2 != 0) {
    local_98 = 0x41e00000;
    }
    *(undefined4 *)((int)uVar18 + -0x4c9c) = local_98;
    FUN_00062970(*(undefined4 *)((int)uVar18 + -0x4c0c),&local_b2,&local_b7);
    if (local_b2 != 0) {
    local_b7 = 0;
    }
    *(undefined *)((int)uVar18 + -0x4c62) = local_b7;
    FUN_00062e40(*(undefined4 *)((int)uVar18 + -0x4c08),&local_b2);
    if (local_b2 != 0) {
    local_94 = 0.0;
    }
    iVar31 = (int)uVar18;
    *(float *)(iVar31 + -0x4c78) = local_94;
    if (local_90 == 0) goto LAB_001594d8;
    if (((*(short *)(iVar31 + -0x4c70) == 0) && (*(short *)(iVar31 + -0x4c2c) == 0)) &&
    (cVar20 = DAT_6005264c, cVar20 == '\0')) {
    local_b6 = '\0';
    }
    else {
    local_b6 = '\x01';
    }
    if (local_b6 == '\0') {
    cVar20 = '\x03';
    }
    else {
    cVar20 = '\x02';
    }
    AFM_Status = cVar20;
    cVar21 = C_AFM_Use_Mass_Flow_Rate;
    local_b0 = local_a8;
    if (cVar21 == '\0') {
    fVar13 = *(float *)(&DAT_ffffb360 + iVar31);
    if (fVar13 < 0.01) {
    fVar13 = 0.01;
    }
    fVar16 = C_AFM_Mass_To_Volume_Flow_Factor;
    local_b0 = (undefined *)
    (((*(float *)(iVar31 + -0x4c9c) + 273.15) * (float)local_a8 * fVar16) / fVar13);
    }
    AFM_Air_Flow = (float)local_b0;
    if (cVar20 == '\x03') {
    cVar20 = C_AFM_Severe_Restriction_Enable;
    if (cVar20 != '\0') {
    if ((*(char *)(iVar31 + -0x4c62) == '\0') && (*(char *)(iVar31 + -0x4c63) == '\0')) {
    bVar19 = false;
    }
    else {
    bVar19 = true;
    }
    fVar13 = C_AFM_AAP_ROC_Min_RPM;
    fVar16 = (float)DAT_60052638;
    if ((local_94 < fVar13) ||
    (fVar13 = C_AFM_ROC_Min_Surge_Margin_Thd, *(float *)(iVar31 + -0x4c30) < fVar13)) {
    bVar32 = true;
    }
    else {
    bVar32 = false;
    }
    if (bVar32) {
    fVar13 = 0.0;
    fVar14 = 0.0;
    }
    else {
    fVar13 = (float)DAT_6005263c;
    fVar13 = ((float)local_ac - fVar13) * 10.0;
    cVar20 = DAT_6005264b;
    if (cVar20 == '\0') {
    fVar14 = (float)DAT_60052644;
    }
    else {
    fVar14 = 0.0;
    }
    }
    fVar14 = fVar14 - fVar13;
    unaff_r31 = FUN_000ef794(fVar14);
    fVar30 = C_AFM_AAP_ROC_Filter_Constant;
    fVar30 = fVar14 * fVar30;
    if ((fVar14 == fVar30) || ((float)unaff_r31 <= 0.0)) {
    fVar30 = 0.0;
    }
    fVar30 = fVar30 + fVar13;
    DAT_6005264b = 0;
    DAT_60052644 = fVar30;
    fVar13 = (float)FUN_000bfd00(&local_b0,&C_AFM_Min_AAP_Rate_ FAF_Axis,6,
    &C_AFM_Min_AAP_Rate_Table,uVar18 - 0x4c2a);
    if (bVar19) {
    fVar15 = 0.0;
    }
    else {
    fVar14 = C_AFM_ROC_Min_Surge_Margin_Thd;
    if (((*(float *)((int)uVar18 + -0x4c30) < fVar14) || (fVar30 >= fVar13)) ||
    (cVar20 = DAT_60052655, cVar20 != '\0')) {
    fVar14 = 0.0;
    }
    else {
    fVar14 = 1.0;
    }
    fVar14 = fVar14 + fVar16;
    unaff_r31 = 0;
    fVar16 = fVar14;
    if (fVar14 <= 0.0) {
    fVar16 = 0.0;
    }
    fVar15 = C_AFM_Severe_Restriction_Count_Limit;
    if ((fVar16 <= fVar15) && (fVar15 = fVar14, fVar14 <= 0.0)) {
    fVar15 = 0.0;
    }
    }
    fVar16 = C_AFM_Severe_Restriction_Count_Limit;
    if (fVar16 <= fVar15) {
    if (fVar16 <= fVar15) {
    fVar16 = 0.1;
    }
    else {
    fVar16 = 0.0;
    }
    fVar14 = (float)DAT_60052640;
    fVar16 = fVar16 + fVar14;
    unaff_r31 = 0;
    fVar14 = fVar16;
    if (fVar16 <= 0.0) {
    fVar14 = 0.0;
    }
    fVar25 = C_AFM_Severe_Restriction_Delay;
    if ((fVar14 <= fVar25) && (fVar25 = fVar16, fVar16 <= 0.0)) {
    fVar25 = 0.0;
    }
    }
    else {
    fVar25 = 0.0;
    }
    fVar16 = C_AFM_Severe_Restriction_Delay;
    bVar19 = fVar16 <= fVar25;
    DAT_600525e6 = bVar19;
    DAT_60052640 = fVar25;
    AFM_Severe_Restriction_Detected = bVar19;
    AFM_Min_AAP_ROC_Threshold = fVar13;
    AFM_AAP_Filtered_ROC = fVar30;
    AFM_AAP_ROC_Count = fVar15;
    if (bVar19) {
    uVar22 = C_AFM_AECD_7_7b_Enable;
    }
    else {
    uVar22 = 0;
    }
    AFM_AECD_7_7b_State = uVar22;
    DAT_60052638 = fVar15;
    DAT_6005263c = local_ac;
    DAT_60052655 = fVar30 < fVar13;
    }
    cVar20 = DAT_60052651;
    if (cVar20 == '\0') {
    cVar21 = DAT_600525e6;
    if (cVar21 == '\0') {
    fVar13 = 0.0;
    }
    else {
    fVar13 = 0.1;
    }
    fVar16 = (float)DAT_600525ec;
    fVar13 = fVar13 + fVar16;
    unaff_r31 = 0;
    fVar16 = fVar13;
    if (fVar13 <= 0.0) {
    fVar16 = 0.0;
    }
    fVar14 = C_AFM_SR_Chime_Repeat_Time;
    if ((fVar16 <= fVar14) && (fVar14 = fVar13, fVar13 <= 0.0)) {
    fVar14 = 0.0;
    }
    }
    else {
    fVar14 = 0.0;
    }

  17. #17
    Quote Originally Posted by Jim P 2.0 View Post
    I’ve gone through the code sections for the intake air throttle, labelling data fields in RAM that are completely unknown as to what they are and mainly there are two data fields that I have labelled as IAT_UNKNOWN_40 and IAT_UNKNOWN_60 that are used in 108 different function groups of code outside of just within the intake air throttle code sits. Some global variables that I’ll have to figure out what they are, all the other unknowns, there’s 251 just within the sections of code for the intake air throttle, that can be trashed along with the intake air throttle code for sure as they don’t appear anywhere else.
    Looking through the code looks like what I labelled as IAT_UNKNOWN_40 is engine rpm. I don't see anything to store data there, just load from it so there must be some code, either in the bootloader or in other inaccessible areas of the processor that has code for updating data in that data field. Also I'm thinking the IAT_UNKNOWN_60 may be battery voltage but unsure.
    Last edited by Jim P 2.0; 02-14-2024 at 08:13 PM.

  18. #18
    Jim! Just saying hello, I see you're still out here doing good deeds for everybody! Hope you're doing well man!

  19. #19
    Hey Dominic! Been a long time man! Busy busy busy, no time for anything really for quite a while. Been pretty vacant from the tuning scene

  20. #20
    I’ve managed to figure out how to get the bootloader code out of the ecm’s