Memory Geometry & Axes
Flash mirroring, inline vs shared axes, and the 40-map cross-calibration offset table.
Flash mirroring, inline vs shared axes, and the 40-map cross-calibration offset table.
A common pitfall when importing DAMOS definitions into tuning software or writing binary patching scripts is misunderstanding descriptor-to-data offsets and segment mirroring.
6.1. Bosch Flash Address Mirroring#
In the Infineon C167CR-LM memory bus architecture:
- Physical Flash ROM spans
0x000000to0x0FFFFF(1024 KB). - The C167 segment registers mirror this flash space into Segment 8:
0x800000to0x8FFFFF. - In DAMOS files, addresses are frequently declared with the mirrored prefix
$81xxxx. - Conversion Rule: Strip the high nibble or mask with
0x0FFFFFto obtain the physical binary file offset: \text{File Offset} = \text{DAMOS Address} \land \text{0x0FFFFF} Example: DAMOS address$81208E\rightarrow File offset0x01208E.
6.2. Inline vs. Shared Axes Geometry#
In Bosch ASAP2DAM definitions, an address in a /SPZ record points to the map descriptor block, not necessarily the raw data array:
- Inline Axes (Flagged with
/FKXor/FKY): The map descriptor contains its own axis point counts and breakpoint values immediately preceding the map data:- 2D Curves with u16 axis: +34 byte offset (2\text{ bytes count} + 16 \times 2\text{ bytes axis} = 34). Example:
LDRXN(Max Engine Load) descriptor at0x1F054\rightarrow Data starts at0x1F076. - 3D Maps with 16x16 u16 axes: +68 byte offset (4\text{ bytes counts} + 16 \times 2 + 16 \times 2 = 68). Example:
KFMIRL(Target Load) descriptor at0x15088\rightarrow Data starts at0x150CC. - 3D Maps with 8x8 u8 axes: +18 byte offset (2\text{ bytes counts} + 8 \times 1 + 8 \times 1 = 18). Example:
KFLDHBNdescriptor at0x1EE82\rightarrow Data starts at0x1EE94. - Mixed Axes (e.g. u8 X-axis, u16 Y-axis): +50 byte offset (2\text{ bytes count} + 16 \times 1 + 16 \times 2 = 50). Example:
FKKVSdescriptor at0x1CAF2\rightarrow Data starts at0x1CB24.
- 2D Curves with u16 axis: +34 byte offset (2\text{ bytes count} + 16 \times 2\text{ bytes axis} = 34). Example:
- Shared / External Axes (No
/FKXflag): The record references separate shared breakpoint records (/SPX,/SPY) located elsewhere in flash.- For shared axis maps, scalars, and direct lookup tables, the descriptor address is the exact data address (+0 offset).
- Examples:
KFZW(Ignition timing),CWSAWE(Anti-lag codeword),TEMIN(Min injection time),MLOFS(MAF offset).
6.3. Hex Dump Byte Comparison: Shared vs. Inline Axis Mechanics#
To prevent off-by-one or data-shift corruption when patching firmware or creating custom definition files, consider the following direct binary comparison of a Shared Axis map (KFZW) versus an Inline Axis map (KFMIRL) in h24bw05g / 06A906032LP:
1. Type 1: Shared Axis Map (KFZW — Base Ignition Timing, 12x16 Grid)#
- Descriptor Address:
0x01208E - Data Array Address:
0x01208E(Offset: +0 bytes) - Data Format: 12 \times 16 = 192 unsigned 8-bit bytes (u8).
- Conversion Formula: \text{Timing (°BTDC)} = (\text{Byte} \times 0.75) - 48.00
- Axis Storage: Does not contain axis breakpoints in the table block. Points via
/SPXtosnm16(Engine Speed axis at0x011936) and via/SPYtorl12(Engine Load axis at0x011AE4).
Offset 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
─────────────────────────────────────────────────────────────────────────────
0x0001208E: 48 48 48 49 4B 4E 52 56 5A 5E 62 66 69 6C 6F 72 HHHIKNRVZ^bfilor <-- Row 0 (rl = 10%)
0x0001209E: 46 46 47 48 4A 4D 50 54 58 5C 60 64 67 6A 6D 70 FFGHJMPTX``dgjmp <-- Row 1 (rl = 15%)
0x000120AE: 42 42 43 45 47 4B 4E 52 56 5A 5E 62 65 68 6B 6E BBCGEKNRVZ^behkn <-- Row 2 (rl = 20%)
...
0x0001214E: 20 20 21 23 25 28 2B 2F 33 37 3B 3F 43 46 4A 4E !#%(+/37;?CFJN <-- Row 11 (rl = 115%)
2. Type 2: Inline Axis Map (KFMIRL — Target Engine Load, 16x16 Grid)#
- Descriptor Address:
0x0150880x015088–0x015089: X-Axis Length =0x0010(16 elements, u16).0x01508A–0x01508B: Y-Axis Length =0x0010(16 elements, u16).0x01508C–0x0150AB: X-Axis Breakpoints (Pedal Angle %): 16 \times 2 = 32\text{ bytes} (u16, scale: \times 0.001526).0x0150AC–0x0150CB: Y-Axis Breakpoints (Engine Speed RPM): 16 \times 2 = 32\text{ bytes} (u16, scale: \times 0.25).0x0150CC–0x0151CB: Data Table Payload: 16 \times 16 = 256\text{ bytes} (u16 or u8).
- Data Array Address:
0x0150CC(Offset: +68 bytes) - Structural Header Breakdown:
Offset 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Header & Breakpoints
─────────────────────────────────────────────────────────────────────────────
0x00015088: 10 00 10 00 00 00 14 05 28 0A 3C 0F 50 14 64 19 X-Len, Y-Len, X-Axis [0..5]
0x00015098: 78 1E 8C 23 A0 28 B4 2D C8 32 DC 37 F0 3C FF 3F X-Axis Breakpoints [6..15]
0x000150A8: A0 0F C0 12 E0 15 00 19 40 1F 80 25 C0 2B 00 32 Y-Axis Breakpoints [0..7]
0x000150B8: 40 38 80 3E C0 44 00 4B 80 54 00 5E 80 67 00 70 Y-Axis Breakpoints [8..15]
─────────────────────────────────────────────────────────────────────────────
0x000150CC: 00 00 12 01 24 02 36 03 48 04 5A 05 6C 06 7E 07 <-- RAW DATA PAYLOAD BEGINS (+68)
6.4. Master Cross-Calibration Address Offset & Symbol Map Table#
The table below compiles the Top 40 Core Engine Calibration Maps required for performance tuning, boost recalibration, fueling conversion, and emissions deletes. It provides the exact physical 1024 KB binary file offset across the six benchmark ME7.5 firmware releases:
h24bw05g(Master Engineering Baseline, 180 PS AWP)06A906032LP(US AWP 6-Speed Manual, SW 1037366194)06A906032PL(US AWP Late Production, SW 1037367xxx)06A906032JJ(US AWP Golf GTI Reference, SW 1037363354)06A906032HS(US AWW 5-Speed Manual, SW 1037363354 / h24bo08g)06A906032DL(Euro 4 AUQ 6-Speed Manual, SW 1037363351)
| No. | Symbol Name | Dimensions & Type | Axis Type | h24bw05g | 032LP | 032PL | 032JJ | 032HS | 032DL | Shift vs LP |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | KRKTE | 1 \times 1 u16 | Scalar | 0x01859E | 0x01859E | 0x0185CE | 0x01859E | 0x0185A4 | 0x01859A | +0\text{ B} |
| 2 | TVUB | 5 \times 1 u16 | Shared | 0x018742 | 0x018742 | 0x018772 | 0x018742 | 0x018748 | 0x01873E | +0\text{ B} |
| 3 | TEMIN | 1 \times 1 u16 | Scalar | 0x018610 | 0x018610 | 0x018640 | 0x018610 | 0x018616 | 0x01860C | +0\text{ B} |
| 4 | TEMINVA | 1 \times 1 u16 | Scalar | 0x018612 | 0x018612 | 0x018642 | 0x018612 | 0x018618 | 0x01860E | +0\text{ B} |
| 5 | FKKVS | 16 \times 16 u8 | Inline (+50) | 0x01CAF2 | 0x01CAF2 | 0x01CB22 | 0x01CAF2 | 0x01CA98 | 0x01CAE8 | +0\text{ B} |
| 6 | LAMFA | 6 \times 15 u8 | Shared | 0x01C392 | 0x01C392 | 0x01C3C2 | 0x01C392 | 0x01C338 | 0x01C388 | +0\text{ B} |
| 7 | KFLF | 16 \times 16 u8 | Inline (+68) | 0x01C530 | 0x01C530 | 0x01C560 | 0x01C530 | 0x01C4D6 | 0x01C526 | +0\text{ B} |
| 8 | KFFDLGO | 12 \times 12 u8 | Inline (+36) | 0x012F10 | 0x012F10 | 0x012F40 | 0x012F10 | 0x012EB6 | 0x012F06 | +0\text{ B} |
| 9 | KFMIOP | 11 \times 16 u8 | Inline (+50) | 0x014E54 | 0x014E54 | 0x014E84 | 0x014E54 | 0x014DFA | 0x014E4A | +0\text{ B} |
| 10 | KFMIRL | 16 \times 16 u8 | Inline (+68) | 0x015088 | 0x015088 | 0x0150B8 | 0x015088 | 0x01502E | 0x01507E | +0\text{ B} |
| 11 | LDRXN | 16 \times 1 u8 | Inline (+34) | 0x01F054 | 0x01F054 | 0x01F084 | 0x01F054 | 0x01EFFA | 0x01F04A | +0\text{ B} |
| 12 | LDRXNZ | 16 \times 1 u8 | Inline (+34) | 0x01F08A | 0x01F08A | 0x01F0BA | 0x01F08A | 0x01F030 | 0x01F080 | +0\text{ B} |
| 13 | KFLDHBN | 8 \times 8 u8 | Inline (+18) | 0x01EE82 | 0x01EE82 | 0x01EEB2 | 0x01EE82 | 0x01EE28 | 0x01EE78 | +0\text{ B} |
| 14 | KFLDIMX | 8 \times 16 u8 | Inline (+36) | 0x01EC4C | 0x01EC4C | 0x01EC7C | 0x01EC4C | 0x01EBF2 | 0x01EC42 | +0\text{ B} |
| 15 | KFLDRL | 10 \times 16 u8 | Inline (+44) | 0x01ED6E | 0x01ED6E | 0x01ED9E | 0x01ED6E | 0x01ED14 | 0x01ED64 | +0\text{ B} |
| 16 | KFLDRQ | 8 \times 8 u8 | Inline (+18) | 0x01EBEE | 0x01EBEE | 0x01EC1E | 0x01EBEE | 0x01EB94 | 0x01EBE4 | +0\text{ B} |
| 17 | KFZW | 12 \times 16 u8 | Shared (+0) | 0x01208E | 0x01208E | 0x0120BE | 0x01208E | 0x012034 | 0x012084 | +0\text{ B} |
| 18 | KFZW2 | 12 \times 16 u8 | Shared (+0) | 0x01214E | 0x01214E | 0x01217E | 0x01214E | 0x0120F4 | 0x012144 | +0\text{ B} |
| 19 | KFZWOP | 11 \times 16 u8 | Inline (+50) | 0x012470 | 0x012470 | 0x0124A0 | 0x012470 | 0x012416 | 0x012466 | +0\text{ B} |
| 20 | KFZWOP2 | 11 \times 16 u8 | Inline (+50) | 0x012586 | 0x012586 | 0x0125B6 | 0x012586 | 0x01252C | 0x01257C | +0\text{ B} |
| 21 | KFTVSA | 4 \times 1 u8 | Shared (+0) | 0x012C56 | 0x012C56 | 0x012C86 | 0x012C56 | 0x012BFC | 0x012C4C | +0\text{ B} |
| 22 | KFZWTVS | 8 \times 8 u8 | Inline (+18) | 0x012B4C | 0x012B4C | 0x012B7C | 0x012B4C | 0x012AF2 | 0x012B42 | +0\text{ B} |
| 23 | NMAX | 1 \times 1 u16 | Scalar | 0x011314 | 0x011314 | 0x011344 | 0x011314 | 0x0112BA | 0x01130A | +0\text{ B} |
| 24 | NMAXOG | 1 \times 1 u16 | Scalar | 0x011316 | 0x011316 | 0x011346 | 0x011316 | 0x0112BC | 0x01130C | +0\text{ B} |
| 25 | VMAX | 1 \times 1 u16 | Scalar | 0x0112F8 | 0x0112F8 | 0x011328 | 0x0112F8 | 0x01129E | 0x0112EE | +0\text{ B} |
| 26 | MLHFM | 512 \times 1 u16 | Shared (+0) | 0x01B854 | 0x01B854 | 0x01B884 | 0x01B854 | 0x01B7FA | 0x01B84A | +0\text{ B} |
| 27 | MLOFS | 1 \times 1 u16 | Scalar | 0x011C82 | 0x011C82 | 0x011CB2 | 0x011C82 | 0x011C28 | 0x011C78 | +0\text{ B} |
| 28 | KFPED | 12 \times 16 u16 | Shared (+0) | 0x014602 | 0x014602 | 0x014632 | 0x014602 | 0x0145A8 | 0x0145F8 | +0\text{ B} |
| 29 | WDKUGDN | 1 \times 1 u8 | Scalar | 0x013E08 | 0x013E08 | 0x013E38 | 0x013E08 | 0x013DAE | 0x013DFE | +0\text{ B} |
| 30 | KFLBTS | 16 \times 12 u8 | Inline (+56) | 0x0194A2 | 0x0194A2 | 0x0194D2 | 0x0194A2 | 0x019448 | 0x019498 | +0\text{ B} |
| 31 | TABGBTS | 1 \times 1 u16 | Scalar | 0x01956A | 0x01956A | 0x01959A | 0x01956A | 0x019510 | 0x019560 | +0\text{ B} |
| 32 | DSLGRAD | 1 \times 1 u16 | Scalar | 0x01188C | 0x01188C | 0x0118BC | 0x01188C | 0x011832 | 0x011882 | +0\text{ B} |
| 33 | DSLOFS | 1 \times 1 u16 | Scalar | 0x01188E | 0x01188E | 0x0118BE | 0x01188E | 0x011834 | 0x011884 | +0\text{ B} |
| 34 | DPUVE | 1 \times 1 u16 | Scalar | 0x011894 | 0x011894 | 0x0118C4 | 0x011894 | 0x01183A | 0x01188A | +0\text{ B} |
| 35 | DPOVE | 1 \times 1 u16 | Scalar | 0x011896 | 0x011896 | 0x0118C6 | 0x011896 | 0x01183C | 0x01188C | +0\text{ B} |
| 36 | ESKONF | 7 \times 1 u8 | Array | 0x010C4F | 0x010C4F | 0x010C7F | 0x010C4F | 0x010C4F | 0x010C4F | +0\text{ B} |
| 37 | CWDLSAHK | 1 \times 1 u8 | Codeword | 0x0181A1 | 0x0181A1 | 0x0181D1 | 0x0181A1 | 0x0181A1 | 0x0181A1 | +0\text{ B} |
| 38 | CDKAT | 1 \times 1 u8 | Codeword | 0x0181A4 | 0x0181A4 | 0x0181D4 | 0x0181A4 | 0x0181A4 | 0x0181A4 | +0\text{ B} |
| 39 | CDSLS | 1 \times 1 u8 | Codeword | 0x0181AE | 0x0181AE | 0x0181DE | 0x0181AE | 0x0181AE | 0x0181AE | +0\text{ B} |
| 40 | CDLDP | 1 \times 1 u8 | Codeword | 0x0181B2 | 0x0181B2 | 0x0181E2 | 0x0181B2 | 0x0181B2 | 0x0181B2 | +0\text{ B} |
Key Takeaway: Notice that between h24bw05g, 06A906032LP, and 06A906032JJ, the address shift is strictly 0x00 (zero bytes) across all 40 primary tuning maps. In 06A906032PL, a constant offset of +0x30 (+48 bytes) applies cleanly to all maps in Segment 1, making automated porting deterministic.
Related#
Cross-referenced on shared calibration symbols, not on subject matter — these are the chapters that touch the same maps.
- Chapter 3 — Benchmark Calibrations —
DPUVE,DPOVE,DSLGRAD,CWDLSAHK,DSLOFS,KFTVSA - Chapter 14 — Code Hooks & Patching —
CWSAWE,WDKUGDN,KFLBTS,KFTVSA,KFZWTVS,NMAX - Chapter 45 — Pattern Matching & XDF Porting —
NMAX,KFLDHBN,TEMIN,KFZW2,TVUB,KFMIOP - Chapter 25 — Troubleshooting & Failsafes —
NMAXOG,KFLDIMX,KFLF,KFLDRL,KFMIOP,LAMFA - Chapter 11 — Flash Checksum Hierarchy —
MLHFM,KFZW2,KFPED,KFMIOP,LAMFA,KFMIRL - Chapter 15 — Injector Mathematics —
MLOFS,TEMINVA,MLHFM,KFLF,TEMIN,TVUB
← Previous chapter · Contents · Next chapter →
Related
Cross-referenced on shared calibration symbols, not on subject matter — these are the chapters that touch the same maps.