I thought this was worthy of its own post, so here we go.
For those of you who have been following the CSL-0401-Program-Binary-Disassembly-Notes thread you'll have known this was coming. For those of you who haven't, here's a quick run down.
IMPORTANT
Up front I'd like to call out all the work bmwfnatic has put into this project behind the scenes that has helped me get as far as I have with putting this XDF together. Without his help and guidance I wouldn't have got this far. I'd also like to thank those who worked on the original XDFs on which this one is based. All our work is built off the work of others.
DOWNLOAD LINK
The current version of the XDF can be downloaded here: https://github.com/karter16/CSL_0401...ree/master/XDF
THE DETAILS
It was an arduous job but I now have a "complete" 0401 XDF built out. I had to make well north of 500 changes/additions/deletions to the public 0401 XDF (more than 1000 if you include the DTCs in that). The automated process that was used a few years ago to generate the XDF was impressive, but still seems to have had an error rate of about 20% or so.
Below is the process I've followed for building this out:
1: Build out 1801 disassembly
2: Compare SMG characteristics and code between 0901 and 1801 to map across the characteristics that can be.
3: Map 1801 disassembly across to 0401 (I sighted every variable/characteristic individually in context to ensure it was mapped correctly, any that I couldn't verify have been marked as unknown)
4: Take the publicly available 0401 XDF
5: Run comparison on the XDF against symbols from 0401 disassembly
6: Add/Update/Delete from XDF as necessary
7: Make updates to parameters as more is found out from disassembly
Is this 100% accurate? Certainly not! I did this by hand and I have undoubtedly made errors along the way. That said the error rate should be about a 20th of what it was before. Interestingly I came across a not insignificant number of items which had been manually corrected by others in the past but which were in fact still incorrect. It is not enough to look at the order/placement of the parameters against a known version, you have to actually compare at the line-by-line code level to be sure you are mapping the parameters correctly as BMW have inserted/removed items in the middle of the lists of parameters (rather than adding at the end in all cases) between versions.
Why do I say that it is "Complete"? It's complete in the sense that every single parameter, curve and map is now identified as an item in XDF. There are a significant number of SMG-related parameters which are not yet known. Additionally there are about 100 parameters that are specific to the CSL software (e.g. aren't present in the normal MSS54HP software). I've managed to identify via reverse engineering about a 3rd of them, but still have a lot more work to go.
Key things to note:
The CSL-related parameters are grouped together, as I make more progress on the reverse engineering I'll split these out to their appropriate functions.

I've put explanations in the descriptions of the ones I've worked out:

Also bmwfnatic had the good idea of representing the DTCs as tables to make them easier to read and consume.


If you have any questions or wish to report any bugs please feel free to comment in this thread :-)
For those of you who have been following the CSL-0401-Program-Binary-Disassembly-Notes thread you'll have known this was coming. For those of you who haven't, here's a quick run down.
IMPORTANT
Up front I'd like to call out all the work bmwfnatic has put into this project behind the scenes that has helped me get as far as I have with putting this XDF together. Without his help and guidance I wouldn't have got this far. I'd also like to thank those who worked on the original XDFs on which this one is based. All our work is built off the work of others.
DOWNLOAD LINK
The current version of the XDF can be downloaded here: https://github.com/karter16/CSL_0401...ree/master/XDF
THE DETAILS
It was an arduous job but I now have a "complete" 0401 XDF built out. I had to make well north of 500 changes/additions/deletions to the public 0401 XDF (more than 1000 if you include the DTCs in that). The automated process that was used a few years ago to generate the XDF was impressive, but still seems to have had an error rate of about 20% or so.
Below is the process I've followed for building this out:
1: Build out 1801 disassembly
2: Compare SMG characteristics and code between 0901 and 1801 to map across the characteristics that can be.
3: Map 1801 disassembly across to 0401 (I sighted every variable/characteristic individually in context to ensure it was mapped correctly, any that I couldn't verify have been marked as unknown)
4: Take the publicly available 0401 XDF
5: Run comparison on the XDF against symbols from 0401 disassembly
6: Add/Update/Delete from XDF as necessary
7: Make updates to parameters as more is found out from disassembly
Is this 100% accurate? Certainly not! I did this by hand and I have undoubtedly made errors along the way. That said the error rate should be about a 20th of what it was before. Interestingly I came across a not insignificant number of items which had been manually corrected by others in the past but which were in fact still incorrect. It is not enough to look at the order/placement of the parameters against a known version, you have to actually compare at the line-by-line code level to be sure you are mapping the parameters correctly as BMW have inserted/removed items in the middle of the lists of parameters (rather than adding at the end in all cases) between versions.
Why do I say that it is "Complete"? It's complete in the sense that every single parameter, curve and map is now identified as an item in XDF. There are a significant number of SMG-related parameters which are not yet known. Additionally there are about 100 parameters that are specific to the CSL software (e.g. aren't present in the normal MSS54HP software). I've managed to identify via reverse engineering about a 3rd of them, but still have a lot more work to go.
Key things to note:
The CSL-related parameters are grouped together, as I make more progress on the reverse engineering I'll split these out to their appropriate functions.
I've put explanations in the descriptions of the ones I've worked out:
Also bmwfnatic had the good idea of representing the DTCs as tables to make them easier to read and consume.
If you have any questions or wish to report any bugs please feel free to comment in this thread :-)