The latest improvements for multi-disk support are a good start, but I think another step is needed.
One of the issues is that sometimes the disk are not simply numbered. This was especially true of Japanese disk releases where you would have a Main or Game disk and then a number of “Data” disks, and often also a “User disk” which was the save-game disk. This last disk would often not be included, but had to be provided by the user (they did sometimes include a disk label for the user disk). The games would often require the user disk to be inserted at the start of the game and at set times to save progress so you really need this disk.
With some games you could also have one disk in drive A and another disk in drive B (if you had a system with multiple drives), this would save you swapping disks.
The problem is that how can the emulator know this for every single game. And the answer is that it cannot unless we create a per-game config file.
So that is my proposal, create a per-game JSON file which would have a description of the disks and the mount points. Something along the lines of:
{
"type": "object",
"description": "Software",
"properties": {
"schema_version": {
"type": "integer"
},
"System": {
"type": "string"
},
"Program": {
"type": "string",
"default": "Game"
},
"Title": {
"type": "object",
"properties": {
"Title": {
"type": "string"
},
"Language": {
"type": "string"
}
},
"required": [
"Title",
"Language"
]
},
"Media": {
"type": "object",
"properties": {
"Type": {
"type": "string"
},
"sha1": {
"type": "string"
},
"filename": {
"type": "string"
},
"mount": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"Type"
]
}
},
"required": [
"schema_version",
"System",
"Program",
"Title",
"Media"
]
}
Multiple language titles would be allowed, in case the same media is distributed in multiple countries, but the title on the box is different. For instance, software that asks which language before starting (some software will change language automatically depending on the region of the computer or console, which is another problem not currently solved).
Multiple disks are allowed, and can optionally be given a mount location (e.g. A or B, or in the case of a multi-CD game on the PC, D, E, F, etc). Such that the emulator can assign a disk per drive if the game supports it.
Save game disks are a special case. You cannot have a sha1 checksum for them as they will change each time. Hence the filename. Also, some games require the disk to be formatted, while others may not. A difficulty are games that intentionally save on the game disk themselves, as it causes the sha1 to get invalidated (so the filename is again needed for backup). But unless some kind of overlay is used to save those writes separately, there is not much you can do about that.
Obviously this JSON format could be extended to cover all kinds of other special cases where the emulator needs to know a bit more about the game, such as certain extensions that should be present, or perhaps even suggested extensions in case of optional extensions to enhance the gameplay, in the emulated system. It could also include URL’s to grab metadata.