BPS notes

Documentation on this format from byuu can be found here. I compared my understanding of that document to what Floating IPS actually does, and found my understanding lacking. I’ll record here some clarifications.

Relative offsets

Regarding relative offsets, byuu writes:

beat patches keep track of the current file offsets in both the source and target files separately. Reading from either increments their respective offsets automatically.

The exact behavior here wasn’t clear to me, but at length I came to three major conclusions:

  1. A SourceRead does not increment the source offset, even though you are clearly reading from the source. You do the copy and then seek back to where you started.

  2. A SourceCopy does increment the source offset, so the new offset will be old_offset + relative_offset + copy_length.

  3. A TargetCopy is not specified relative to the current output position, but to a separate target file reading pointer, which starts at zero (and is only modified by TargetCopy operations).

Checksums

Checksums are little-endian.