This is a spinoff of what was starting to be discussed in this thread.
The general idea:
To update the iNES format and create an auditing utility to solve various iNES ambiguities, and to correct common iNES header screw-ups (I can't tell you how many games are headered wrong). All while retaining backwards compatibility with prior versions of iNES.
Why not just go with UNIF?:
The obvious question. Since UNIF ROMs are pretty much all labelled properly, and leave nothing to question... why bother with updating iNES? Why not just go with UNIF?
UNIF has some difficulties which prevent it from (ever?) becoming a full replacement to iNES:
- UNIF board name list is incomplete. While it's true that most US releases have a proper UNIF dump, many foreign games, and some rare games do not. Therefore an iNES->UNIF converter won't be able to convert every ROM... making iNES a remaining necessity
- ROM hackers and translators use iNES pretty much exclusively. Even if UNIF were a full replacement, its floating block format is incompatible with IPS (another depricated, yet widely popular format). In addition, every NES ROM editor on the planet is built to work with iNES roms. I'm not aware of any that have UNIF support. So unless every hack, translation, and ROM hacking utility are updated to work with UNIF, there will be a large portion of the emulation community who will refuse to switch.
- Many ROM sites distribute iNES, but not UNIF. Some of the more "major" ROM sites even keep current with GoodNES sets. If we can just take over the next GoodNES release from Cowering, there's a good chance the new ROMs will get injected into the emulation community and begin circulating. UNIF, which has already been around a while, still hasn't really got anywhere.
What do we want out of the updated format:
Blargg brought up a very good point in that other thread:
I couldn't have said it better myself. UNIF aready does the job of ironing out every tiny thing you can think of. All we're trying to do here is get the ROMs playable without game specific hacks or runtime CRC checks.
What this thread is to accomplish:
I'd really like to outline ideas on what you think will be the best way to approach this. We're stuck with a 16 byte header, of which several bytes are already used.
The things we need to do with this format are:
1) Create something like a "sub-mapper" number which differentiates incompatible mappers which share the same mapper number. For example, MMC3 might be 004:0, while MMC6 might be 004:1 (aaa:b, a = mapper number, b = mapper sub). Most 071 games might be 071:0, and Fire Hawk (1-screen) might be 071:1.
2) Actually get things headered right. Fix ALL the damn mirror mode errors present in 30% of the iNES ROMs floating out there. Remove that DiskDude crap, etc.
3) Actually get a space which tells on-cartridge WRAM and CHR-RAM sizes. None of that "0 defaults to 8k" stuff that's in iNES.
4) Reliable NTSC/PAL/Dual value
5) Perhaps a "Bus Conflicts" flag like the one in the 'unofficial' update listed on the wiki?
That's pretty much all I can think of that the new format should cover. If iNES did all that I'd be perfectly satisfied with it.
But that's not all:
A new format is useless unless we have everything organized! We can shoot the breeze and talk about how awesome this would be all day, but that wouldn't change anything. SO -- in addition to outlining a new format... we need to do the following:
1) Outline DETAILS of the mapper number for every known ROM dump out there, and assign a mapper number:sub for each and every one of them. This is where UNIF falls short in a big way, and if this format update is to have any snowball's chance in hell of working, this is really where we need to have a jump on. If we just slap together something vague, we'll just be back here again in a few months with all the same problems (assuming the format even got anywhere).
2) Get these mapper numbers documented! This probably even has to be done before #1. Register descriptions, differences in sub mapper numbers, etc all has to be layed out clear as day. There HAS to be an official list of mapper numbers, and it HAS to keep current. This is where iNES went to hell, and we have to stay ahead of something like that happening again in the future.
3) All ROMs in the new format should be properly headered. There's no excuse... I don't know how iNES went to hell... but that is really unacceptable.
4) WE NEED AN AUDITOR WHICH WILL CONVERT ROMS AND UPDATE HEADERS. Without one, this project is a pipedream at best. I'd like to say I'd be willing to write one if I could get a list of CRCs for ROM dumps, but my job is keeping me pretty busy so I doubt I'll be able to. But if we can't get someone to write an auditor we might as well just stop now before we waste our time.
5) We need to get in touch with Cowering and tell him to either stop updating GoodNES, or hand off GoodNES to us so that his work doesn't conflict with ours. But of course before we ask him to do either we'll have to have our shit together.
That's about all I have on the subject. I'm too lazy to come up with a propsed new header format right now, but I might later once more ideas are on the table. What do you guys think?
The general idea:
To update the iNES format and create an auditing utility to solve various iNES ambiguities, and to correct common iNES header screw-ups (I can't tell you how many games are headered wrong). All while retaining backwards compatibility with prior versions of iNES.
Why not just go with UNIF?:
The obvious question. Since UNIF ROMs are pretty much all labelled properly, and leave nothing to question... why bother with updating iNES? Why not just go with UNIF?
UNIF has some difficulties which prevent it from (ever?) becoming a full replacement to iNES:
- UNIF board name list is incomplete. While it's true that most US releases have a proper UNIF dump, many foreign games, and some rare games do not. Therefore an iNES->UNIF converter won't be able to convert every ROM... making iNES a remaining necessity
- ROM hackers and translators use iNES pretty much exclusively. Even if UNIF were a full replacement, its floating block format is incompatible with IPS (another depricated, yet widely popular format). In addition, every NES ROM editor on the planet is built to work with iNES roms. I'm not aware of any that have UNIF support. So unless every hack, translation, and ROM hacking utility are updated to work with UNIF, there will be a large portion of the emulation community who will refuse to switch.
- Many ROM sites distribute iNES, but not UNIF. Some of the more "major" ROM sites even keep current with GoodNES sets. If we can just take over the next GoodNES release from Cowering, there's a good chance the new ROMs will get injected into the emulation community and begin circulating. UNIF, which has already been around a while, still hasn't really got anywhere.
What do we want out of the updated format:
Blargg brought up a very good point in that other thread:
Quote:
The most important thing is to limit the scope of what is being attempted. As I understand it, the goal is to remove the ambiguity in specifying which mapper is being used (and possibly some extra hardware). Attempting to throw in a kitchen sink would definitely ruin the effort.
I couldn't have said it better myself. UNIF aready does the job of ironing out every tiny thing you can think of. All we're trying to do here is get the ROMs playable without game specific hacks or runtime CRC checks.
What this thread is to accomplish:
I'd really like to outline ideas on what you think will be the best way to approach this. We're stuck with a 16 byte header, of which several bytes are already used.
The things we need to do with this format are:
1) Create something like a "sub-mapper" number which differentiates incompatible mappers which share the same mapper number. For example, MMC3 might be 004:0, while MMC6 might be 004:1 (aaa:b, a = mapper number, b = mapper sub). Most 071 games might be 071:0, and Fire Hawk (1-screen) might be 071:1.
2) Actually get things headered right. Fix ALL the damn mirror mode errors present in 30% of the iNES ROMs floating out there. Remove that DiskDude crap, etc.
3) Actually get a space which tells on-cartridge WRAM and CHR-RAM sizes. None of that "0 defaults to 8k" stuff that's in iNES.
4) Reliable NTSC/PAL/Dual value
5) Perhaps a "Bus Conflicts" flag like the one in the 'unofficial' update listed on the wiki?
That's pretty much all I can think of that the new format should cover. If iNES did all that I'd be perfectly satisfied with it.
But that's not all:
A new format is useless unless we have everything organized! We can shoot the breeze and talk about how awesome this would be all day, but that wouldn't change anything. SO -- in addition to outlining a new format... we need to do the following:
1) Outline DETAILS of the mapper number for every known ROM dump out there, and assign a mapper number:sub for each and every one of them. This is where UNIF falls short in a big way, and if this format update is to have any snowball's chance in hell of working, this is really where we need to have a jump on. If we just slap together something vague, we'll just be back here again in a few months with all the same problems (assuming the format even got anywhere).
2) Get these mapper numbers documented! This probably even has to be done before #1. Register descriptions, differences in sub mapper numbers, etc all has to be layed out clear as day. There HAS to be an official list of mapper numbers, and it HAS to keep current. This is where iNES went to hell, and we have to stay ahead of something like that happening again in the future.
3) All ROMs in the new format should be properly headered. There's no excuse... I don't know how iNES went to hell... but that is really unacceptable.
4) WE NEED AN AUDITOR WHICH WILL CONVERT ROMS AND UPDATE HEADERS. Without one, this project is a pipedream at best. I'd like to say I'd be willing to write one if I could get a list of CRCs for ROM dumps, but my job is keeping me pretty busy so I doubt I'll be able to. But if we can't get someone to write an auditor we might as well just stop now before we waste our time.
5) We need to get in touch with Cowering and tell him to either stop updating GoodNES, or hand off GoodNES to us so that his work doesn't conflict with ours. But of course before we ask him to do either we'll have to have our shit together.
That's about all I have on the subject. I'm too lazy to come up with a propsed new header format right now, but I might later once more ideas are on the table. What do you guys think?