I need to get this all out of my brain and onto paper - why not do it in a public space where ideas can be shared and re thought too. this is a work in progress, please help out if you can. What is EcuFlash? - EcuFlash is a 3rd party software program that allows us to read/edit/flash ROM files to/from our Mitsubishi ECU's. To do so, it takes in the ROM (data) file and uses the parameters defined in the related XML (definitions) to order and display the ROM data in a way that is relevant to us. The ROM is purely data/information and this is what we changed when we want to make alterations to how the car operates. The XML does all the hard work - it must provision * ROM identification * units of measurements (Labeling and raw data conversion) * Location of data (For fixed measurements) * Location of data (For variables) technically everything is variable, but lets not go there * Tuning Tables (Axis, range/size and use of the above) AS A MINIMUM Breaking down the XML ROM Identification always happens first and in a fixed structure. More info required. Scaling definitions give us our units of measurements. These turn 0's and 1's into meaningful and changeable data and convert them back when we're done. Example: <scaling name="MAFHz" units="Hz" toexpr="6.29*x/64" frexpr="64/(6.29*x)" format="%.0f" min="0" max="5000" inc="1" storagetype="int16" endian="big" /> Scaling name is simply a short hand way of calling up all the following information quickly. It is referred to later on, rather than defining all of the information each time it is used. units is the name displayed next to the axis in ECU Flash to & fr expr are the "in" and "out" calculations performed to the data before we see it and after we're done with it. In the case above, the original data is multiplied by 6.29 and divided by 64 before being displayed on EcuFlash. When we flash it back to the car, the inverse operation is performed, so the data is preserved in the right format. format is used to limit/extend how much of the data is shown. In this case %.0f means that the data is shown to the nearest whole figure. %.1f shows it to one decimal place Min and Max are the lower and upper limit respectively of data that we can input back to the ROM Inc is the increments in which the data can be changed. 1 refers to a whole number. When we use the increase function on Ecu Flash, the data will increase by one. Inversely, decreasing will be done by one also Storage Type refers to how the data is "Stored" and "returned" to the ROM structure endian * More info required Table Definitions put together data defined by above scaling into a range of tables. They require a fixed data in relation to a variable data. For example, a 2D table like Injector Latency, requires Voltage on the x-axis as it's fixed data and a single y axis of time as the variable data. <table name="Injector Battery Voltage Latency Compensation" category="Fuel" type="2D" scaling="InjectorLatency" address="3970"> <table name="Battery Voltage" address="4f1c" type="Y Axis" elements="7" scaling="BatteryVoltage"/> </table> Table name is the label shown for the tale in Ecu Flash Category is used to place/separate table groups in EcuFlash Type self explanatory I hope Scaling refers to the above scaling def, called in this case "InjectorLatency" Address is the specific location of the data for this rom Elements defines how may rows or columns to show, as there may be more data available at the address that is not required/relevant What can we change? The ECU operates by using input data and the ROM data in equations to output a function. We cannot change the equations being performed, or where it finds the data to do said equations. We can change the raw data used for the calculations and in most cases this is more than enough. We do not know all of the calculations performed by the ecu. We do not know where all of the specific data is stored in every rom Everything is very well reverse engineered. We can make more tables do show anything we like. The relevance to how the ecu functions is unknown until trialed.