Can't patch NES Tetris romhacks?
TL;DR The header may be NES 2.0 and you need it in iNES, or viceversa.
If you like modding your games to change their difficulty, add quality of life improvements, alter their looks, or have a whole new experience, then you might have found that Tetris for the Nintendo Entertainment System has romhacks which ask for an specific rom which you don't seem to have from your legally dumped cartridge.
The thing is that the NES cartridges use specific wiring and signals to tell the console what to do, since it was designed for only 32k of program rom (program) and 8k of character rom (graphics), totaling 42k (sometimes said to be 41k).
But the cartridges could contain additional chips, colloquially known as “mappers”, which added much needed things like bank switching, allowing for larger, more complex games.
So it was the task of the community to create a way for Emulators to know which additional chips the cartridge game had, and so the iNES header was created, for the aptly named iNES emulator.
Thing is, it was made when the knowledge of the console and it's mappers was still growing, so it was incomplete and lacking in certain areas, which made it so a revision was due, designed to be backwards compatible, NES 2.0
Which brings us to the topic at hand, Tetris has the MMC1 mapper with a SEROM configuration (meaning no program banking, only graphics)
Headers
The iNES Header for Tetris is quite easy actually
4E 45 53 1A 02 02 10 00 00 00 00 00 00 00 00 00
All of that means it's a NES game, 32k program rom, 16k character rom, with the MMC1 mapper chip.
However, the NES 2.0 Header for Tetris adds some info
4E 45 53 1A 02 02 10 08 50 00 00 00 00 00 00 01
That adds the fact it's submapper 5 (SEROM) and that it uses standard NES controllers.
The fix
In order to being able to patch the rom with your ips/bps/xdelta/etc you might have to change the header, or even remove it entirely, it shouldn't make any difference to the gamer, only to very accurate emulators.
rom info
Here I include the hashes of the 3 variants discused here, so you can know if you have the correct one.
Unheadered
| Hash | Value |
|---|---|
| CRC32 | 1394f57e |
| MD5 | 5b0e571558c8c796937b96af469561c6 |
| SHA1 | fd9079cb5e8479eb06d93c2ae5175bfce871746a |
| SHA256 | 2ae5fb18a1bf841077e3872ba05060f030ea0bfc573994b2f8fe2fb570dc7853 |
iNES
| Hash | Value |
|---|---|
| CRC32 | 6d72c53a |
| MD5 | ec58574d96bee8c8927884ae6e7a2508 |
| SHA1 | 77747840541bfc62a28a5957692a98c550bd6b2b |
| SHA256 | acab10f2dbad4d4ef5d56b31cd4cea208bb6e2e2c5dba5eb339d711ec04e3535 |
NES 2.0
| Hash | Value |
|---|---|
| CRC32 | d16ea396 |
| MD5 | 886012ac3b3fbf4a244dead999788fe8 |
| SHA1 | 3026d28b63d94c921fe58364f8b0659d10b5a0ac |
| SHA256 | ddb876c302cfd4ee19fabff8e3ede0b6801ded70c49980d1682a32d352953082 |