The idea of the "system" was that you could give one of these images and MESS would automatically launch the correct driver.
Oh, I seem to have misunderstood that. I thought of declaring which systems are capable of running that romset. See below in my suggestion.
Some more thoughts about the ROM format...
Here is another suggestion with slight modifications. I'll start again with my ti99 Extended Basic cartridge and we can then see how to put in the rest.
<romset>
<images>
<bin id="somelabel1" file="exbasc.bin" crc="..." sha1="..." />
<bin id="somelabel2" file="exbasd.bin" crc="..." sha1="..." />
<bin id="somelabel3" file="exbasg.bin" crc="..." sha1="..." />
</images>
<pcb id="cartridge" type="rom2bank+grom">
<socket number="1" uses="somelabel1"/>
<socket number="2" uses="somelabel2"/>
<socket number="3" uses="somelabel3"/>
</pcb>
<software system="required">
<!-- Runs on multiple systems in the same configuration -->
<system driver="ti99_4x" bios="ti99_4ae" default="true"/>
<system driver="ti99_4x" bios="ti99_4a"/>
<system driver="ti99_4x" bios="ti99_4e />
<system driver="ti99_4x" bios="ti99_4" />
<system driver="ti99_8" bios="ti99_8" />
<item name="Extended Basic" maker="Texas Instruments" year="1981">
<uses pcb="cartridge" />
</item>
</software>
</romset>
Some comments:
1. Except for the <item> attributes, this is the minimum information for an unambiguous configuration.
2. The <pcb> element maps the ROM contents (associated to files in the <images> block) to specific sockets. The type of the pcb is interpreted by the driver. The driver will see that some image is mapped to socket 1, which is attached to a specific address. Socket 2 is on the same position and will be mapped in and out (which is controlled by the driver again).
3. The memory regions (e.g. whether the image is accessible in REGION_CPU1) cannot be changed by the cartridge, due to the fact that the wiring at the connectors are fixed (aren't they?). Instead, the driver knows that socket1 and 2 belong to REGION_CPU1 and socket3 belongs to REGION_USER1.
4. I did not include memory locations and sizes because the socket position together with the pcb type already determine the location. If not (address somehow burnt into the ROM), this should be used as attributes: <socket numer="1" uses="somelabel1" address="0x4000" length="0x2000"/>.
5. system attribute in <software>: system="required" uses the following set of <system> as the maximum valid set. system="any" may be default and will allow to provide a set of preferred platforms without limiting the set.
6. The <system> element with default="true" will be the startup default.
7. I think we can merge this with your previous concept with mixed ROM, CHD if we introduce new elements referring to the CHDs, tagging them, and linking in //item/use. Example:
...
<pcb.../>
<chd id="chdID" >
<map image="game_us" region="cdrom" drive="1" name="..."/>
</chd>
...
<software>
<item name="...">
<uses pcb="cartID"/>
<uses chd="chdID"/>
</item>
</software>
...
Michael