I've been thinking more about the use of XML for image info the last few days and I've even finished writing a custom XML parser. I'd like to present some ideas for how the data could be structured. While it's a very subjective field, my hope is that many people could give their input and contribute to this thread so that we can work towards making a nice, clean and flexible format. Databases, romsets and other stuff comes later. Once we have the format, we can take it from there. Right now I want more action and less blah blah blah.

The following layout is not neccesarily the result of deep thinking. It's just something I threw together to encourage a technical discussion.

random example:

Code:
<game name="Weird Science" system="nes.ntsc" crc="C8BAA563"> 
  <hardware board="nes-weirdrom" mapper="1">
     <prg type="rom" size="128k" crc="09234FB0"> (*) </prg>
     <prg type="ram" size="8k" />
     <prg type="nvram" size="8k"> (*) </chr>
     <prg type="eeprom" size="512"> (*) </chr>
     <chr type="rom" size="256k" crc="FE037AB1"> (*) </chr>
     <chr type="ram" size="8k" />
     <nmt mirroring="0101" />
     <mmc>mmc1b2</mmc>
  </hardware>
  <peripherals>
    ..discuss
  </peripherals>
  <dipswitches>
    ..discuss
  </dipswitches>
  <something else>
    ..discuss
  </something else>
</game>

(*) - optional reference to file

real world example using Shadowgate US version:

Code:
<game name="Shadowgate" system="nes.ntsc" crc="6A1F628A"> 
  <hardware board="nes-tkrom" mapper="4">
     <prg type="rom" size="128k" crc="591364C9" />
     <prg type="nvram" size="8k" />
     <chr type="rom" size="128k" crc="05414DD9" />
     <nmt mirroring="ctrl" />
     <mmc>mmc3b</mmc>
  </hardware>
</game>

Some attribute descriptions:

<game>

crc: crc-32 of combined roms in prg+chr order
system: nes.ntsc, nes.pal, famicom, vs.unisystem, vs.dualsystem, playchoice-10, <insert clone?>

<hardware>

board: pcb/unif name (if available, make something up otherwise?)
mapper: %0..255 (controversial, discuss!)

<prg/chr/nmt>

size: % (in bytes), %k (in kibibytes)
type: rom, ram, nvram (battery-backed), eeprom

mirroring:
0000 - single-screen from PPU $2000
1111 - single-screen from PPU $2400
0101 - vertical
0011 - horizontal
0123 - four-screen (uses extra 2k RAM)
ctrl - controlled by mmc
<xxxx> - any other combination

<xxxx> instead of the commonly refered 'horizontal/vertical/four-screen' good or bad? Discuss!

Some tags and attributes could be optional and have documented default values if unspecified. Ideas for which and what settings? Discuss!