Yet another update! I think that I am finally beginning to understand using IDA for disassembly.
Basically, I took a look at a number of similar, already-defined ROMs, using XMLtoIDC to map them out in IDA. Based on this analysis and analysis of my logs, I determined that there MUST have been a 3D table comparing ECT to RPM for idle timing.
I then did some further labeling of the DWORDs associated with the idle tables, followed cross references to code where these values were being moved in and out of memory/registers, and used IDAs "graph view" and "proximity browser" views to look at the logic as a flowchart, more or less. Because I had named some of the dwords manually, the logic made more sense. Essentially, I focused on what came after the "Base Timing Idle Vehicle Speed Threshold" and assumed that the tables referred to immediately after were above and below speed threshold idle timing tables for in-gear. Since one was already marked, I navigated to the dword of the unmarked table and noted that it shared the format of the 3D idle timing tables seen in other ROMs.
The values in this table make sense in light of what I was seeing in my logs. I believe that perhaps the in-gear idle above speed threshold table is mis-marked in this ROM and should be the below speed threshold table instead, based on other ROMs with these tables (on second thought, maybe its in-gear above speed threshold for the AT version or an A/B table?).
Based on this analysis, I am quite confident that I have correctly identified the table and will flash a map with changes to it shortly and report back if those changes had the desired effect.
Screenshot of graph view attached and below:
Attachment:
Graph View.png
Also, here are my notes regarding other potential tables of interest found during my search, along with descriptions of those tables:
Potential Idle Tables:
Base Timing Idle A (neutral)_? - RPM = cce18 - Timing = cce3c --- 10 Degrees up to 3000 RPM, then 25 degrees --- Labeled as "Base Timing Idle Min Table MJC" in the attached graph view
Base Timing Idle B (In-Gear) (Below Speed Threshold)? - RPM = ccc18 - Timing = ccdde - 10 degrees between 400 and 2k RPM --- Labeled as "TenDegreesFlatIdleTimingTable MJC" in the attached graph view
Already Defined, but suspect:
Base Timing Idle (In-Gear) (Above Speed Threshold) - RPM = ccc18 - Timing = ccdcc --- 10 Degrees up to 3000 RPM, then 25 degrees
Base Timing Idle (In-Gear) (Below Speed Threshold) - RPM = ccc18 - Timing = ccdd5 --- 15 Degrees Flat
Base Timing Idle (Neutral) - RPM = ccde8 - Timing = cce0c --- 15 Degrees up to 3000 RPM, then 25 degrees
Confident in:
Base Timing Idle (In-Gear) (Above Speed Threshold)_ - ECT = ce07c - RPM = ce054 - Timing = ce08c --- Limit of 30 degrees applies lower down RPM range as vehicle warms up, eventually down to 2k RPM, bottoming out at 10 degrees by 1600 RPM, as observed in logs --- This is the leftmost table in the attached graph view screenshot
Not sure:
Base Timing Idle (In-Gear) (Above Speed Threshold)_ - ECT = ce07c - RPM = ce054 - Timing = ce08c --- Limit of 30 degrees applies lower down RPM range as vehicle warms up, eventually down to 2k RPM, bottoming out at 10 degrees by 1600 RPM, as observed in logs
Lastly, here is a screenshot of the new table (Base Timing Idle (In-Gear) (Above Speed Threshold)_) in ECU Flash:
Attachment:
Table.png
p.s. for those just starting out (i am only a few months of occasional nights in), i have found that looking at already defined maps, searching for the start locations of identified tables, doing a byte sequence search for the start location, jumping to the location and labeling it, then following the cross references to areas of the map that show move operations ans viewing those locations using the proximity browser and/or graph view makes identifying tables and logic much easier, relative to just searching for byte strings found in defined tables of interest in other ROMs, which can be hit or miss and often doesn't provide much context/requires logging to prove.