rainwarrior wrote:001:5 - fixed 32k PRG for MMC1. I haven't tested all the games yet, but it seems that in at least some cases simply initializing the PRG banks in NROM order at load is already sufficient for compatibility with submapper 0. This might even be true for all of the games?
Requiring specific power-on values that don't come from the hardware is asking for problems.
It's vital to understand that the original hardware MUST be the authoritative version, and adding hacks like this to fake the right behavior will result in romhacks, translations, and homebrew that can't run on the hardware that they're theoretically designed for.
This is the same reason why MMC3
must be capped to 512 KiB—not because we can't make something that looks like an MMC3 that supports more, but because the original hardware must be the reference implementation.
Relatedly:
rainwarrior wrote:Great Hierophant wrote:Also, for the discrete logic mappers with bus conflicts like UNROM and CNROM, iNES 2.0 does not seem to be able to tell the emulator that this game needs not to have bus conflicts.
The
default implementation is not to have bus conflicts.
That is patently false. The
default implementation DOES have bus conflicts, both in hardware, and in more recent emulators that implement these bus conflicts to keep people from hurting themselves on derivative works.
If there are games that require bus conflicts to be able to run correctly, please list them.
There's at least one instance documented on the wiki page for mapper 003. (as distinct from the page for CNROM)
Anyway, this is the same point. It is
absolutely vital that these emulators emulate the hardware as it existed, not an abstracted idealized version of the hardware. Otherwise, there'd be nothing wrong with creating things that only ever worked on Nesticle.
034:2 - Union Bond (Does anybody know what this means?)
Union Bond (a developer)'s mapper seems to be oversize BNROM with PRG-RAM. I don't see why it needs a submapper.
080:? - Description says they were moved to mapper 207.
Has to be referring to
Fudou Myouou Den. I have no idea why it's plural.
083:1 - Cony with 2k CHR banking.
083:2 - Cony with other modifications.
I'm pretty certain those things weren't in kevtris's page when the information was copied to the wiki.
----------
rainwarrior wrote:No, it's not a vote for crash. When I say it should be "unspecified" this is a vote for it to be the implementer's choice how to handle an inconsistency.
But that's exactly what abstention is, here. Of those four, any implementor can ONLY (consciously or subconsciously) pick one of those four results. And the "crash" choice is the most naïve choice, the one that would happen from what happens if a person doesn't think about it and just makes code that says "Oh, ok, 8KiB of PRG-RAM is marked, allocate 8KiB of RAM" and "Oh, ok, SXROM, I'll index into a 32KiB array".
If you vote to allow contradiction, and don't warn in giant blinking letters
HEY THERE COULD BE A PROBLEM HERE YOU SHOULD KEEP IT FROM HAPPENING BECAUSE SOMEONE WANTED TO ALLOW THE FORMAT TO CONTRADICT ITSELF someone WILL implement it poorly. When, not if.
So, should we explicitly add that warning label to the submapper page? (Is it fair to say that you're arguing that that is that an acceptable cost for your clean 16-bit-UID-as-ABI-version ?)
If a crash or insecurity is not a problem for the implementer, it is a valid choice for them to make. If these things are a problem, they will figure out how to prevent it.
People don't intentionally write bugs (
bug bounties notwithstanding). People don't intentionally write vulnerabilities (bribes and the underhanded C contest notwithstanding).
And people usually assume that their not-explicitly-security-based software will not be used in a location where such a vulnerability could be exploited. (e.g. the libtiff and libpng vulnerabilities)
All of the pointy bits are put there by the implementer, not by this spec. This concern is outside the realm of what we are doing here.
Specifications have sharp edges.
Implementations have bugs. Sharp edges in specifications
cause bugs in implementations. A vote to explicitly allow the format to contradict itself is a vote to create bugs later on.
What form of authority would you suggest we defer to instead?
Evidently not kevtris, since you've realized many of his submappers don't even mark a different ABI, nevermind my argument of whether the header should be allowed to contradict itself.