Currently, creating ECU definitions is a bit intimidating and cumbersome, and most of the people doing it seem to be having trouble while most tend to just stay away to begin with. Creating an ECU definition editor for RomRaider that will allow users to create ROM and table definitions easily is planned, but it will be some time before it is finished. To make the ECU definition format a little less cryptic, I'm creating this guide to help describe the process, what you need to do, and what you don't.
While supporting as many ECU definitions as possible is important, at the same time, it's not absolutely necessary. More often than not, I think it would be best concentrate more on the latest revision (or CalID) for each ECU version. A wiki describing this better and with actual lists of ECU versions and revisions will be available in the next couple weeks.
ECU definitions are created in XML, in the ecu_defs.xml file (note: future versions of RomRaider will allow multiple definition files). If you don't know XML, a quick look at the definition file will make it pretty self explanatory. If not, search google -- there are a good number of XML primers out there. Assuming you understand XML well enough, let's continue.
A simple diagramCode:
<roms>
<rom>
<romid>
<...[i]other nodes[/i] />
</romid>
<table type="3D">
<scaling units="PSI" />
<table type="X Axis" />
<table type="Y Axis" />
</table>
</rom>
</roms>
This diagram shows the basic nodes of the XML file with some dummy attributes. The list of nodes and attributes below states whether each field is
mandatory or optional. If a node or attribute is
mandatory in all instances, it must be present in
every node of its' parent's type. ie, every <romid>
must have a child [xmlid]. If the node or attribute is only
mandatory once, it need only be present in a ancestor
or child rom.
For example, if you have one rom with the xmlid
WRXBASE and filesize of
192kb, a rom inheriting WRXBASE must have it's own unique
xmlid, but may inherit WRXBASE's
filesize. If the inheriting rom has a different filesize, the base rom's filesize can be overridden.
I'll start by talking about the <rom> tag.
<rom> -- Each ECU revision will reside within a <rom> tag, which is the highest level node you will be modifying. A rom can inherit all data from another rom with the
base tag. ie
<rom base="WRXBASE"> When inheriting, all child nodes (tables, romid) can be extended (by adding attribute not present in the original) or overridded, by giving the same attribute a different value.
rom attributes:
base -- optional; rom to inherit and extend
rom child nodes:
romid --
mandatory in all instances; information about rom
<romid> -- This mandatory child node of
rom stores all of it's data, used for opening an image, and viewable in the
Rom Properties screen in RomRaider.
romid attributes:
none
romid child nodes:
<xmlid> --
mandatory in all instances; this field is used as the display name for the rom, and the name used in the
base attribute of a rom.
<internalidstring> --
mandatory; the unique name identifier found within the ROM. On Subaru ECUs, the revision number is found at 0x200, an 8 letter CalID, ie A4TC300L. Other ECUs, such as Hondas, don't have a common or reliable method for storing this ID, so a unique string if bytes will need to be used. This string is used searched for upon opening an image.
<internalidaddress> --
mandatory; the memory location at which the internal id string is found. ie, 0x200
<caseid> -- optional; the ECU version this revision is from.
<make> -- optional; the car manufacturer. ie, Subaru
<market> -- optional; market car is sold in. ie, USDM, JDM
<year> -- optional; year of car
<model> -- optional; model of car. ie, Impreza
<submodel> -- optional; trim of car. ie, WRX, STi
<transmission> -- optional; transmission of car. ie, AT, MT
<flashmethod> -- optional; flash method used by ECUFlash. ie, wrx04. This will be used in RomRaider 1.5.0 when flashing an image to an ECU.
<memmodel> -- optional; memory model of image. Used when flashing and opening an image in future versions of RomRaider. ie, AH792.
<filesize> --
mandatory; size of file map is based on. ie, 192kb. This is used for determining whether the RAM portion of memory has been included in the image.
Table definition will be discussed after RomRaider 0.2.6b is released later this week.