In short
- Use Floating IPS — despite the name, it applies BPS as well as IPS, on Windows, macOS and Linux.
- beat (by byuu) is the reference BPS patcher and creator.
- BPS patches verify checksums automatically: a wrong base ROM is refused, not silently mangled.
- No size limit, no header tricks — BPS just works once the base ROM is right.
Why BPS replaced IPS
BPS (Binary Patching System) was designed by byuu as a clean break from IPS. Where IPS stores raw “write bytes here” records with no safety net, BPS stores delta-encoded differences plus CRC32 checksums of three things: the expected source file, the expected result, and the patch itself. Apply a BPS patch and the tool checks all three — a wrong ROM, a corrupted download or a truncated patch is caught before any damage is done, which is precisely the class of mistake IPS lets through silently.
There’s no 16MB addressing limit either, which is why BPS became the standard for N64 hacks and larger SNES projects. If you’re choosing a format for a new hack today, BPS is the sensible default unless the files are huge enough to want XDelta. The checksums also make BPS patches self-documenting: years later, anyone can verify exactly which base file a patch was built against, which is a quiet superpower for preservation.
BPS patchers
| Tool | Platforms | Creates BPS too? | Notes |
|---|---|---|---|
| Floating IPS | Windows, macOS, Linux | Yes | The default choice; community forks keep it current |
| beat | Windows | Yes | byuu’s reference implementation |
| RomPatcher.js | Any browser | Yes | No install; good for one-off patches |
| UniPatcher | Android | Yes | On-device patching |
Applying a BPS patch with Floating IPS
-
Confirm the base ROM
Read the hack’s readme for the exact game, region and revision. BPS will verify this itself, but knowing it upfront saves a round trip. How to verify a source file.
-
Open Floating IPS → Apply Patch
Despite the IPS in its name, Floating IPS has applied BPS for years. Choose Apply Patch.
-
Select the .bps file, then the ROM
The order matters: patch first, then the base ROM when prompted. Floating IPS checks the ROM’s checksum against the patch’s expectation immediately.
-
Read any warning as a stop sign
A checksum warning means the base ROM is wrong — region, revision or byte order. Get the right file; don’t look for an override.
-
Name the output and test
Save under a new filename with the system’s usual extension (
.sfc,.z64,.gba…) and test in an emulator.
Format-specific notes
- SNES: the headered-vs-unheadered question still applies — BPS checksums are computed over a specific flavour, so match the readme. The SNES header guide.
- N64: patches expect
.z64byte order; convert first if your dump is.n64/.v64. The N64 byte-order guide. - Creating BPS: beat’s “create” mode takes the original and modified files and emits the
.bps; Floating IPS can create them too. Distribute the patch, never the ROM.
BPS problems and fixes
| Problem | Likely cause | Fix |
|---|---|---|
| Checksum error on apply | Wrong base ROM (region/revision/byte order) | Match the readme exactly, then re-verify |
| “Not a BPS patch” | Wrong extension or corrupted download | Re-download; check it’s actually .bps |
| Works in emulator A, not B | Emulator quirk, not a patch problem | Test in the reference emulator for the system first |
BPS FAQ
Is BPS better than UPS?
For applying patches, they’re equivalent in practice — both are checksum-aware and size-unlimited. BPS has wider tool support (Floating IPS reads it natively); UPS is entrenched in the GBA Pokémon scene. Follow the hack’s format.
Can I convert an IPS patch to BPS?
Not directly — but you don’t need to. Apply the IPS to get the modified ROM, then create a fresh BPS from the original and modified files with beat or Floating IPS.
Does BPS work on every system?
Yes — BPS is system-agnostic. It’s popular for SNES and N64 because those ROMs exceed IPS limits, but the same flow works for GBA, Genesis and anything else.
Floating IPS shows a “checksum mismatch” — is my download broken?
Not necessarily. The checksum that failed is almost always the source ROM’s, meaning your base dump differs from what the patch expects. Re-check the readme’s required game, region and revision before re-downloading the patch.
Creating BPS patches with beat
beat is the reference BPS creator as well as applier. The flow mirrors applying in reverse: open beat, choose the create/build mode, select the original clean file and your modified file, and save the .bps. Floating IPS can also create BPS patches. Because the format embeds checksums of both ends, anyone applying your patch gets wrong-ROM protection for free — a strong reason to prefer BPS over IPS for new hacks.
Advanced: delta patches and large files
BPS uses delta encoding, so patches stay small even when the underlying changes are scattered across a large ROM — one reason N64 hackers adopted it. There’s no 16MB ceiling like IPS, and no practical upper bound you’ll hit with retro systems. For truly huge files (PS1/PSP-era disc images and beyond), creators typically switch to XDelta, which is built for that scale.
Auto-patching in emulators
Several emulators apply patches on the fly without modifying any file: place the .bps next to the ROM with the same filename and the emulator patches in memory at load. Snes9x does this for IPS; for BPS, check your emulator’s documentation — support varies by core. Auto-patching is perfect for trying translations, but for a permanent collection, apply the patch once with Floating IPS and keep the patched file.