I might have an idea. I had some confusion with defining LAMFA correctly as well, especially since it seemed misdefined in one of the DAMOS floating around.
I will use the 2.7 K-Box for this example.
Here is the data for the LAMFA table:
0F 06 19 4B 4F 52 55 58 5E 61 64 6B 71 7D 84 8A
96 00 A4 00 C3 00 E4 00 05 01 26 01 48 01 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80Okay, so the first two numbers in
red are the axis lengths. The first axis is 0F or 15 data points. This is the RPM axis, highlighted in
blue.
The second axis is the mrfa_w axis, which is six 16 bit data points highlighted in
purple.
The map starts after that, and is highlighted in
green.
Now comes the interesting part, and I think this is where you could be going wrong.
After the 1st axis, there is a "00". This is not part of anything, perhaps it was there to simply accommodate a 16th value, or perhaps it is used for something else I don't know. I have seen this defined wrong, so that the axis was set to LSB first, and the map was being moved 1 cell as well.
Let's see what happens when the map is defined correctly in TunerPro:
And what happens if you define it incorrectly:
One of the DAMOSes I had actually had it incorrectly defined. This was so confusing, that I had no other choice than to look at the code.
In my file this segment starts at 0x1CAC8, so:
0x1CAC8 - nmot axis length
0x1CAC9 - mrfa_w axis length
0x1CACA - nmot axis
0x1CADA - mrfa_w axis
0x1CAE6 - map values
This is confirmed by the code:
You can see how mrfa_w and nmot are loaded as arguments.
Then the map location is loaded - 0x1CAE6, not 0x1CAE5!
After that the nmot axis location is loaded, followed by the length - LAMFA_RPM_AXIS_LEN is 0x1CAC8 (or 0x81CAC8).
And now the mrfa_w axis is loaded the same way, by first loading the location and then the length of the axis.
Finally the map reading function is called.
Make 100% sure that you have this defined correctly, because if you don't, this is the behaviour you would get. Don't trust the DAMOS, trust the code.