Yeah it's hard to do it without taking notes. What confuses things is that the map locations that TunerPro seems to use start at the list of values. I have never used it but I suppose that's all people are usually interested in changing, so it makes sense. But to read the map from the raw .bin data, and get the axis values, you need to look at the real start of the map.Tom wrote: Wed Sep 10, 2025 1:27 pm![]()
![]()
Sorry about that. My memory isn't what it used to be.
I'm having hard time following the RPM axis structure. What cell does the 5E represent in your example? In the table I posts, the value in the table is 24 (decimal) for 4000 rpm at 14v. I'm not following how it gets to 4000? I guess that means there would need to be a 156 somewhere in order for 100 to be the overflow (since 100 * 40 = 4000). Just kind of lost.
You only need to know this stuff if you want to double check the axis values. And even with this info, you still need to know how the units map to numbers the code in order to document it fully. With rpm it's easy, we know it's 1 unit=40rpm. The battery voltage one should be easy too, I'll look it up when I get a chance. The NTC temp is a bit more complicated (I'm working on it).
Every map begins with a memory location of some important variable. Dave W posted them earlier. The ones I know off the top of my head:
37 - rpm
49 - load
13 - engine coolant temp (NTC II)
11 - battery
This map begins at location 13DC, where we have 37 (rpm). The next byte is the length of the axis - C (12 decimal). The next 12 values are the rpm axis values as seen by the map read routine in the code. But they are not simply stored as values that we can make sense of. The routine starts at the far right and starts adding them to the value in RAM location 37h and stops when it gets an overflow. That's how it determines which rpm range to use. I used the first one it would add (5e) as my example.
If it's a 2d (1-axis) map then the next bytes after those 12 would be the actual values (the length varies of course but the length of the axis always matches the number of values). This one is a 3d map so after the 12 rpm values (in their obscure form) we have the same thing for the next variable - 11 (battery voltage location in RAM) followed by 7 ( there 7 voltage values on this axis). After that are the 84 actual values.
I think (from my earlier notes) that the dwell values are stored in angular units, since that's the only way the DME can measure it - it uses the number from the map as the number of flywheel teeth to count, hence the calculations I showed.
Does that help at all?
EDIT: just to add I had a quick look at the voltage reading, and it seems the DME supply voltage is divided by 3.5 before going to the ADC (which has a 5v reference). This should correspond to 1 unit in the code = 0.0686v.
