IPS patcher online

IPS is the oldest format still glued to NES, SNES, and Game Boy readmes. The header is the five ASCII bytes PATCH. Each record is a 24-bit offset, a 16-bit length, and then that many data bytes. A length of zero means the next two bytes are a run length and a fill byte, which is how long stretches of the same value stay small. The file ends when the offset bytes spell EOF. That layout is the ZeroSoft description, and the browser module uses the same rules with a hard stop at 0x1000000.

Sixteen mebibytes is not a suggestion. A 24-bit offset cannot name a byte past 16 MiB minus one. SNES and NES games fit. Some GBA titles sit near the edge, and anything larger needs BPS, UPS, or xdelta. IPS also has no checksum of any kind. The tool can write an output from the wrong region, a bad dump, or a file that was already patched, and the button still says it finished. The failure shows up in the emulator: a black screen, a garbled title, or a game that crashes after the intro. I treat a finished IPS apply as proof that the records were readable, not proof that the base was right.

Lunar IPS by FuSoYa is the Windows program a generation of hackers used to write and apply these files. Floating IPS also writes them, and the creator mode on this site can build an IPS from two files under the size cap. Lunar IPS itself is covered on its own guide because the desktop clicks are different from the browser. On NES, the iNES header is part of the file the records address, so a patch written for a headered ROM will shift every offset if you strip the header first. On SNES, a 512-byte copier header does the same thing. I check the readme for the words headered or headerless before I touch the file.

EBP reuses this header and adds a trailer. If your extension is .ebp, the IPS module still parses the records. If the extension is .bps, leave this page. IPS remains the right tool when the project is old, small, and honest about which dump it used. It is the wrong tool when you wanted a checksum to save you.

FieldRecord
Extension.ips (IPS32 is a wider-offset variant)
MagicPATCH
ChecksumNone
Size cap16 MiB (24-bit offsets)
End markerEOF
Browser ROM patcher with two file slots and a patch button
Pixel-art CRT showing a blank cartridge, used as a visual marker

Questions

Why did the patch apply and the game still fail?

IPS does not store a source checksum. The records were applied to whatever file you selected, including the wrong revision.

What is a zero-length IPS record?

A run-length fill. The next two bytes say how many times to repeat the following byte, which keeps blank space from bloating the patch.

Sources