OK... I've spent the past few months exhaustively reverse engineering and working out how everything works.
I don't really know how far people have got before on this because most of this effort goes on behind closed doors and then is rarely shared.
I've even written my own custom Siemens C16x/ST10 Disassembler in C which an earlier stripped down version of is included in the github repo's for my Swiss Army Knife tool. The way I wrote the tool I discovered to my surprise it seems to 'just work' on even 1Mb roms from the Ferrari F430 and Maserati 4200's for all the checksumming functionality. Tested and works right out of the box. I'm guessing it works on many others too. Finds 60 odd checksum regions on the bigger 1Mb files!
Anyway I've now identified majority of the functions and labelled over 6,200 variables and maps in my ME7.3 Ferrari 360 ROM. That includes internal ram and external ram region variables as well as values, value blocks, strings, maps, fixed maps, group maps, curves, fixed curves and group curves. So you could say my disassembly is about as complete a job as anyone else I know has done or disclosed...
For the test case rom I generated this on;
*This* rom file below..
https://github.com/360trev/ME7RomTool_Ferrari/raw/master/Release/LEFT_Eddie_2004_360Spider_EU.bin(which maps directly back to the Ferrari 360 which maps back to FRE07E0.PDF function and datasheet on here somewhere) you get the following;
// EXTERNAL MEM 0x38xxxx range: Num of entries = 2903
// INTERNAL RAM 0xExxx-0xFxxx range: Num of entries = 274
// EXTERNAL FLASH (Values) range: Num of entries = 1843
// EXTERNAL FLASH (Value_Blocks) range: Num of entries = 682
// EXTERNAL FLASH (Group_Curve) range: Num of entries = 136
// EXTERNAL FLASH (Curve) range: Num of entries = 188
// EXTERNAL FLASH (Group_map) range: Num of entries = 91
// EXTERNAL FLASH (maps) range: Num of entries = 78
// EXTERNAL FLASH (fixed_curve) range: Num of entries = 19
// EXTERNAL FLASH (fixed_maps) range: Num of entries = 3
// EXTERNAL FLASH (strings) range: Num of entries = 6
This can also generate the IDC script for IDA Pro to import the lot of this back into IDA.. (not included in this tool I just built but if anyone is interested let me know)...
With a bit more work I could probably derive a hundred or so remaining internal variables then its fully complete...
I've also written a tool to allow you to search for all variables referenced by main functions, e.g. GGPED, GGKS, GGHFM, PROKON (refer to Functional datasheet for more..).. So you give it the function and it tells you all of the internal ram variables used, the external ram variables used, maps referenced and all the addresses. You get the picture... It uses wildcards so you can do stuff like *GG* and find everything GG related which yield a huge list..
E.g.
$ me7vars.exe *GGHFM*
1) addr=0x0000f970 name="mlhfma_w" (;s)
2) addr=0x00381e1a name="mlhfmm_w" (;s)
3) addr=0x0000f97b name="rl" (;s)
4) addr=0x00380b32 name="wdkba" (;s)
5) addr=0x00810afb name="KFKHFM" (;s)
6) addr=0x00380b52 name="fkhfm" (;s)
7) addr=0x00810e83 name="KFPUSU" (;s)
addr=0x00818596 name="PUKANS" (;s)
9) addr=0x00810cbf name="KFPU2SU" (;s)
10) addr=0x00810da1 name="KFPU3SU" (;s)
11) addr=0x00810bdd name="KFPU" (;s)
12) addr=0x00380b53 name="fpuk" (;s)
13) addr=0x0000f86c name="nmot" (;s)
14) addr=0x00380bba name="tans" (;s)
15) addr=0x0000f972 name="mshfm_w" (;s)
16) addr=0x00380b54 name="nmotkor" (;s)
17) addr=0x00814300 name="MLHFM" (;s)
18) addr=0x00814700 name="MLOFS" (;s)
19) addr=0x00380f60 name="uhfm_w" (;s)
20) addr=0x00380b6e name="sumode" (;s)
// Total defines: 6223
Free table..
I'm not yet ready to release this source-code to the generator just yet as I haven't got it working generically enough yet (great on Ferrari 360 rom's but I need more work to clean it up) but I absolutely plan to. The question I have is what format do you want me to generate this is and is there a spec I can follow (or examples at least)...
Already this tool is useful.. here is a link just for the Window Command Line executable..
https://drive.google.com/open?id=1tkoeN3hg0sUu-Z4Qa6gA5V1_gXo1DZ3tSource will be released in good time...
Any feedback for options let me know.. Its been *invaluable* for working my way around the ROM as my disassembler can reference variables and functions rather than just absolute addresses you'd normally get..
Next step on the disassembler front is to map this to auto generate C style syntax code which will speed up conversion back to even more...