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