Announcement

Collapse
No announcement yet.

CSL '0401' Program Binary Disassembly Notes

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Here's mzyl_berech(). This is what I'd previously identified as m_calc(). I'm not 100% sure that the function/parameter/variable names that I've pulled through from MSS65 are what BMW ACTUALLY used in the MSS54 code. I think it's more likely that PSAU is p_saug for example, in line with the way other pressure and temp variables were named in the MSS54. I think too that MZYL was possibly just M, etc. but I'm definitely going to opt for known actual names over made up names, so have pulled through the MSS65 naming where there wasn't already a 100% known name from MSS54. ? at the end of a variable name represent where I don't have a definitive name, not necessarily that I have any uncertainty about what it is/does.

    Click image for larger version  Name:	Screenshot 2026-01-23 at 7.12.58 PM.png Views:	0 Size:	159.6 KB ID:	340845
    Click image for larger version  Name:	Screenshot 2026-01-23 at 7.13.05 PM.png Views:	0 Size:	10.8 KB ID:	340844
    2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
    Build Thread:
    https://nam3forum.com/forums/forum/m...e46-m3-journal

    Comment


      Yeah hard to say for sure. I also have a suspicion that the some of the CSL stuff was borrowed from the MSS6x project given the development timelines, but the two projects very well could have had different naming conventions. Though a lot of names are shared, so it might just be their convention is a little more fluid and it more came down to whichever engineer started writing the code.

      As far as m vs mzyl -- I think they probably would have noted that the value is a per cylinder calculation in the naming scheme, though perhaps m_zyl would have been the convention on the MSS5x

      Sure would be nice if we could get access to some MSS54 ELFs

      Comment


        Originally posted by terra View Post
        Sure would be nice if we could get access to some MSS54 ELFs
        I have this horrible nagging feeling that one day I'm going to declare my efforts "complete" and the next day someone will be like "oh btw, here's the source code for the CSL" lol. There's definitely a couple of people out there who have more CSL-specific info.
        2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
        Build Thread:
        https://nam3forum.com/forums/forum/m...e46-m3-journal

        Comment


          Originally posted by karter16 View Post

          I have this horrible nagging feeling that one day I'm going to declare my efforts "complete" and the next day someone will be like "oh btw, here's the source code for the CSL" lol. There's definitely a couple of people out there who have more CSL-specific info.
          This will 100% happen one day, we know it's out there, and people love to gate keep until there's no point anymore.
          E46 ///M3 • 12/2002 • phönix-gelb • 6MT
          E39 ///M5 • 12/1998 • avus-blau • 6MT
          E60 ///M5 • 11/2006 • saphir-schwarz • 6MT

          Contact e-mail -> jasper (at) dentmparts.nl
          D&T M Parts -> dentmparts.com -> used euro parts for M vehicles

          Comment


            Originally posted by bmwfnatic View Post

            This will 100% happen one day, we know it's out there, and people love to gate keep until there's no point anymore.
            Yeah, there's clearly more out there than is publicly available. Though I would argue the MSS5x are understood well enough for there already to be no point in hoarding files - most tuners are doing little more than editing the main ignition and fueling tables.

            I do wonder if BMW gives some definitions on the motorsport side of things since I imagine those cars are recalibrated pretty often. Though I don't know if I've ever seen an MSS54 in the motorsports parts listing (MSS60 yes though)

            Comment


              Originally posted by terra View Post

              Yeah, there's clearly more out there than is publicly available. Though I would argue the MSS5x are understood well enough for there already to be no point in hoarding files - most tuners are doing little more than editing the main ignition and fueling tables.

              I do wonder if BMW gives some definitions on the motorsport side of things since I imagine those cars are recalibrated pretty often. Though I don't know if I've ever seen an MSS54 in the motorsports parts listing (MSS60 yes though)
              It mentions ECU 406 and ECU 400 and a separate VANOS ECU in the P54B32 catalog, nothing explicitly about the MSS indeed.
              E46 ///M3 • 12/2002 • phönix-gelb • 6MT
              E39 ///M5 • 12/1998 • avus-blau • 6MT
              E60 ///M5 • 11/2006 • saphir-schwarz • 6MT

              Contact e-mail -> jasper (at) dentmparts.nl
              D&T M Parts -> dentmparts.com -> used euro parts for M vehicles

              Comment


                These are the P_UMG (ambient pressure) functions.

                p_umg_init() runs once in the initialisation function when the DME boots. It establishes the starting values for the key variables.

                Click image for larger version  Name:	Screenshot 2026-01-24 at 5.52.48 PM.png Views:	0 Size:	150.3 KB ID:	341015


                p_umg_get() runs in the 100ms task, it acquires the latest value from the ambient pressure sensor via the AD channel, performs error checking (via p_umg_diag()), builds a variable to send p_umg over CAN, etc.

                Click image for larger version  Name:	Screenshot 2026-01-24 at 5.54.31 PM.png Views:	0 Size:	144.6 KB ID:	341016


                p_umg_hoehe_ber() runs in the background task and calculates the current estimated height above sea level based on current ambient pressure.

                Click image for larger version  Name:	Screenshot 2026-01-24 at 5.57.20 PM.png Views:	0 Size:	69.6 KB ID:	341017


                p_umg_diag() is called by p_umg_get(). It establishes plausibility of the ambient pressure sensor reading, updates P_UMG_FILTER with either the valid reading, an ersatz (replacement) value, etc. This function is interesting as the 0401 version contains a bunch of additional logic. In the event that when the DME starts it is unable to acquire a plausible reading from the ambient sensor it will use, if it is error free, the MAP pressure as an ersatz (replacement) value for P_UMG. The reason it can do this is that on first start up, before the engine is running, the manifold pressure is the same as ambient. This means that while the engine is running the ersatz value isn't able to be updated, but under a lot of conditions it will still be more accurate than just falling back to K_P_UMG_ERSATZ (955mbar).

                Click image for larger version  Name:	Screenshot 2026-01-24 at 6.01.10 PM.png Views:	0 Size:	160.4 KB ID:	341018
                Click image for larger version  Name:	Screenshot 2026-01-24 at 6.01.21 PM.png Views:	0 Size:	214.2 KB ID:	341019

                Edit: If you're wondering there is some method to my madness. I'm, looking at the air mass functions and wanted to be 100% sure about how p_umg was/wasn't used, hence the side quest into the p_umg functions.
                Last edited by karter16; 01-23-2026, 09:14 PM.
                2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
                Build Thread:
                https://nam3forum.com/forums/forum/m...e46-m3-journal

                Comment

                Working...
                X