N54 Exhaust Burble XDF Tables

General.Massacre

Corporal
May 14, 2018
232
70
0
Ride
2009 E92 335i DCT
The easiest way of finding tables between different ROM versions is to look for byte patterns in the BIN.

I can give you the table starting addresses for any tables you are after if you give me the table ID (eg for Fuel Cut Duration Normal the ID is "ip_t_min_pu_n_tco")

It takes a load of time to port XDF tables between ROM revisions but I have IKM0S and INA0S fairly well decompiled so can give you the starting addresses quite easily for each and you can work the axis out by using the relative offsets from the table start address.

Hi @carabuser this s what i have on the INA0S Z4 35is "New Tables" XDF i posted above:

1629826016026.png
1629826048733.png

1629826075802.png
1629826106189.png

1629826134800.png
1629826162585.png


THese are all the starting address for the Burble settings for INA0S.
Is that you were asking for right?
 

carabuser

Lieutenant
Oct 2, 2019
966
1
960
0
UK
Ride
Z4 35i & 335i
Just the names in brackets that I put in the descriptions. c_t_min_pu_vs for example.

These are the equivalent addresses in IKM0S
c_t_min_pu_vs = 4C32C
ip_t_min_pu_hom = 4BC4E
ip_t_min_pu_n_tco = 5BAC8
ip_t_min_pu_rng_l_n_tco = 5BB28
c_vs_min_pu = 4CBC8
ip_t_min_pu_s = 4BC54
 

General.Massacre

Corporal
May 14, 2018
232
70
0
Ride
2009 E92 335i DCT
Just the names in brackets that I put in the descriptions. c_t_min_pu_vs for example.

These are the equivalent addresses in IKM0S
c_t_min_pu_vs = 4C32C
ip_t_min_pu_hom = 4BC4E
ip_t_min_pu_n_tco = 5BAC8
ip_t_min_pu_rng_l_n_tco = 5BB28
c_vs_min_pu = 4CBC8
ip_t_min_pu_s = 4BC54
You sir, are both a Scholar and a Gentleman. Thank you.
I will check these out tomorrow and get them to my XDF.
 
  • Agree
Reactions: Asbjorn

carabuser

Lieutenant
Oct 2, 2019
966
1
960
0
UK
Ride
Z4 35i & 335i
Those addresses I gave you look OK. I checked and the BIN is IKM0S, it's just that in IKM0S those tables are all set to 0.
 

General.Massacre

Corporal
May 14, 2018
232
70
0
Ride
2009 E92 335i DCT
Thank you.
I am checking the INA0S bin for one of the burble tables, and i struggling to understand what you meant by find the offset for the Row/Column hex.
The map in INA0S im looking at:
1629957761780.png


I think i have the correct place in the hex, but what im struggling to understand is the Row/Column hex, the address Hex for Rows is 0x4A8A1, thats nowhere near where ive highlighted below.
1629958040615.png


Can you assist me in understanding this please.
 

carabuser

Lieutenant
Oct 2, 2019
966
1
960
0
UK
Ride
Z4 35i & 335i
Thank you.
I am checking the INA0S bin for one of the burble tables, and i struggling to understand what you meant by find the offset for the Row/Column hex.
The map in INA0S im looking at:
View attachment 58174

I think i have the correct place in the hex, but what im struggling to understand is the Row/Column hex, the address Hex for Rows is 0x4A8A1, thats nowhere near where ive highlighted below.
View attachment 58175

Can you assist me in understanding this please.
99% of the time the axis stays in the same relative position to the data.

If in INA0S the x axis is at 4b5a0 and the y axis is at 4b5b0 and the data starts at 4b5c0 then you can follow that pattern onto IKM0S.

If the data address starts at 5c6f4 you can work backwards and assume the y axis will be at 5c6e4 and x axis is at 5c6d4.
 

General.Massacre

Corporal
May 14, 2018
232
70
0
Ride
2009 E92 335i DCT
99% of the time the axis stays in the same relative position to the data.

If in INA0S the x axis is at 4b5a0 and the y axis is at 4b5b0 and the data starts at 4b5c0 then you can follow that pattern onto IKM0S.

If the data address starts at 5c6f4 you can work backwards and assume the y axis will be at 5c6e4 and x axis is at 5c6d4.
Alright, that i can understand, relatively.
But the INA0S table shows Starting address is 5AB08, and one of the Axises is Row: 4A8A1 and Column: 4837A? thats quite far off from the Start address from my limited understanding? does that even make a difference?
If so, how would i even work that back? or is it a case of counting the gap between each, if thats even possible, i dont know?
Sorry i know i sound stupid, but Hex is not my forte, and i only have what i have via the current availbale data in the XDF's to work off of.

Edit:
so what i tried, and tell me if this is a suitable method of doing this please:
Is i highlight from 5AB08, all the way to 4A8A1, thisgave me a "gap" of 66151 bytes:
1629966721380.png


If i use that logic in IKM0S, can i just use that same Gap from the starting address you gave me, and note the address at with the highlighting endis?
Its rudimentary i know, but the best solution i came up with right now :D lol
 
Last edited:

carabuser

Lieutenant
Oct 2, 2019
966
1
960
0
UK
Ride
Z4 35i & 335i
I forgot that some of these tables are disjointed. They use shared axis so much harder to find. If you did want to find any in future then you are best just copying some hex data from that range and use the search to find it in the binary of the ROM you are porting to, if you are lucky then you will only get 1 match.

I just went and added those key tables into the IKM0S XDF.

That should give you all the tables you need to make the burbles work. Just take it easy with the timing table, pull out 2 degrees at a time then test. Personally I only take out 2 degrees between 3k and 6k. Also be aware that I haven't tested them so be cautious on the first drive.
 

Attachments

  • IKM0S with burble tables.xdf
    511.8 KB · Views: 63

ShocknAwe

Captain
Jan 24, 2018
1,598
1
814
0
Charleston, SC
Ride
N54/3 1er ///Mutt
Sorry if it's been explained already;

What happens if you don't set the timing properly to work on and off part throttle here?
 

carabuser

Lieutenant
Oct 2, 2019
966
1
960
0
UK
Ride
Z4 35i & 335i
Sorry if it's been explained already;

What happens if you don't set the timing properly to work on and off part throttle here?
The timing is set by the torque manager routine in the DME. When you take your foot off the accelerator the torque manager will target a really low value and it will do that primarily using ignition. During different engine modes the ignition has different minimums. The table I have added is the one used when in "PU" mode which is overrun with fuel injection active.

By reducing the values in that table you are allowing the DME to further reduce timing. The table axis are Airflow (mg/stk) and RPM. During overrun the airflow in mg/stk is between 50 and 100 depending on RPM.

In all of Wedge's tunes (and also RFP ones since he copied the OTS maps) he disables the "Disable Tq Reduction by Ign" toggle which means that the DME just runs off the Timing (Main) table instead and not the proper table that I have defined. When you adjust the MHD slider it just reduces the first column in Timing (Main) so as soon as you let off the gas it suddenly jumps to a huge negative value.
That's why MHD burbles are jerky and artificial sounding, it feels like you have hit a wall when you ease off.
 

corbanistan

Corporal
Jul 26, 2021
140
1
62
0
Florida, USA
Ride
E93 335i 6MT
Can VANOS change the behavior of burbles during overrun? A little while ago I had changed VANOS for increased engine braking and it seemed to lessen the effect of the MHD settings (I believe I had it on medium w/ a shorter duration). I ended up going back to close-to-stock tables for unrelated reasons but I've always wondered about that.
 

General.Massacre

Corporal
May 14, 2018
232
70
0
Ride
2009 E92 335i DCT
I forgot that some of these tables are disjointed. They use shared axis so much harder to find. If you did want to find any in future then you are best just copying some hex data from that range and use the search to find it in the binary of the ROM you are porting to, if you are lucky then you will only get 1 match.

I just went and added those key tables into the IKM0S XDF.

That should give you all the tables you need to make the burbles work. Just take it easy with the timing table, pull out 2 degrees at a time then test. Personally I only take out 2 degrees between 3k and 6k. Also be aware that I haven't tested them so be cautious on the first drive.
No Problem man, thank you so much, just had a look and all looks great, i see my method that i thought might work above would of been wrong lol, i see your bytes are different for the Row and Columns :D

out of interest, I checked your XDF you provided and defined, thank you.
Is the INA0S description and the IKM0S descriptions for Duration/Activation While Clutch Pressed (Sport) different? as they have different Descriptions, and the tables are different?

INA0S
1630043260773.png
1630043464124.png


IKM0S
1630043344084.png
1630043486360.png



The timing is set by the torque manager routine in the DME. When you take your foot off the accelerator the torque manager will target a really low value and it will do that primarily using ignition. During different engine modes the ignition has different minimums. The table I have added is the one used when in "PU" mode which is overrun with fuel injection active.

By reducing the values in that table you are allowing the DME to further reduce timing. The table axis are Airflow (mg/stk) and RPM. During overrun the airflow in mg/stk is between 50 and 100 depending on RPM.

In all of Wedge's tunes (and also RFP ones since he copied the OTS maps) he disables the "Disable Tq Reduction by Ign" toggle which means that the DME just runs off the Timing (Main) table instead and not the proper table that I have defined. When you adjust the MHD slider it just reduces the first column in Timing (Main) so as soon as you let off the gas it suddenly jumps to a huge negative value.
That's why MHD burbles are jerky and artificial sounding, it feels like you have hit a wall when you ease off.

Thank you for this little gem, that puts alot into perspective thank you, a little more understanding from it now thanks man.
 

carabuser

Lieutenant
Oct 2, 2019
966
1
960
0
UK
Ride
Z4 35i & 335i
No Problem man, thank you so much, just had a look and all looks great, i see my method that i thought might work above would of been wrong lol, i see your bytes are different for the Row and Columns :D

out of interest, I checked your XDF you provided and defined, thank you.
Is the INA0S description and the IKM0S descriptions for Duration/Activation While Clutch Pressed (Sport) different? as they have different Descriptions, and the tables are different?

INA0S
View attachment 58210View attachment 58212

IKM0S
View attachment 58211View attachment 58213




Thank you for this little gem, that puts alot into perspective thank you, a little more understanding from it now thanks man.

Table names and decriptions differ a little as i fixed a few errors and have a clearer idea of some of the tables.
 

General.Massacre

Corporal
May 14, 2018
232
70
0
Ride
2009 E92 335i DCT
Table names and decriptions differ a little as i fixed a few errors and have a clearer idea of some of the tables.
OK, so that Clutch pressed (Sport) table with the single cell is then correct?
EDIT: I think (i may be wrong as you would know more than i do), but if i compare the tables between INA0S and IKM0S, the Column tab might be missing a hex address to provide the 3 cells needed? thats if the descriptions that you provided are indeed correct. (All the other tables you assisted in defining have the same Descriptions for their counter part tables between the ROMS
INA0S: (ip_t_min_pu_s)
IKM0S: (c_t_min_pu_rng_l)

EDIT2:
I corrected it (I think), as i noted that both the Normal and Sport tables for Burble Duration (INA0S) share the same Columns Axis Address.
I applied that logic to the Fuel Cut Activation Delay tables you provided, and it looks correct now in IKM0S:
1630057327901.png


Please can you confirm this for me, dont want to fuck up your logic on the XDF you so nicely provided if indeed i am looking to far into this incorrectly :)
Hope no offence @carabuser
 
Last edited:

carabuser

Lieutenant
Oct 2, 2019
966
1
960
0
UK
Ride
Z4 35i & 335i
That table I assumed is for sport. It's active when the "low range" condition is on, which is something you normally only see in 4x4 vehicles but in the DME it seems to be active when the sport button is pressed.

It should only be 1 cell. as you have it at the moment you will overwrite values for c_t_min_pu_vs and c_t_min_pu_vs_cs.
 

General.Massacre

Corporal
May 14, 2018
232
70
0
Ride
2009 E92 335i DCT
That table I assumed is for sport. It's active when the "low range" condition is on, which is something you normally only see in 4x4 vehicles but in the DME it seems to be active when the sport button is pressed.

It should only be 1 cell. as you have it at the moment you will overwrite values for c_t_min_pu_vs and c_t_min_pu_vs_cs.
FML, thank you for the confirmation then.

1630059540275.png

I assume as the INA0S XDF states, the Throttle Trailing Difference and Factor details are for INA0S only? or was that just a note for something else, as i see you did add the Trailing Throttle Base to the IKM0S XDF.
(ip_iga_dif_min_tco_pu_h_rng) - Minimum Ignition Angle During Trailing Throttle (Difference)
(ip_fac_iga_min_tco_pu) - Minimum Ignition Angle During Trailing Throttle (Factor)
Plse can you add this if its needed? im not sure if you missed it, thought id ask.
(ip_t_min_pu_s)

i ask for the Trailing Throttle Factor and Difference in case those values are needed to coincide with the burble settings, which i think they might.
 

carabuser

Lieutenant
Oct 2, 2019
966
1
960
0
UK
Ride
Z4 35i & 335i
I don't think you need those for now, try use the tables and see if it works as you want.
 

General.Massacre

Corporal
May 14, 2018
232
70
0
Ride
2009 E92 335i DCT
Hi there. So as an update. I loaded the flash with the burbke tables updated. The burbke does indeed work. Not as long as the Z4. But it does work.
I flashed back to stock as I made a few other additional changes to the map, and was experiencing some issues, and thought the burbke tables may have caused it. But they didn't. So will load back.
I'm needing to change Secondary O2s at some point.
 

GreyNBlueE92

Sergeant
Oct 3, 2018
266
93
0
28
OH
Ride
2007 E92 335i
Maybe the Z4 runs a little different timing in the main table to achieve those burbles?