But everything else is the exact same!
There's a header in the start consisting of two identifier strings, then there is a "size of" field, followed by some meta-data about FBA, another "size of" field, a 32 byte ASCII string, a frame count field, a 12 bytes block of 0s, and finally, the compressed state of machine at save moment. The last chunk varies in size according to numerous factors (entropy, bios settings, in-game state...etc) but will always be the same if these factors are the same as well, after all, it's using the same zlib algorithm for its compression.
I deduced this by comparing savestates of the same game at the same in-game moment
of different versions of FBA. Now, you might ask how could I recreate the savestates when games run at 60fps. Simple, use the same bios, pause game at start, advance using shot factory to a very specific frame that you can easily identify, then make your save.
Compare the savestates and the only fields that will differ are the ones I described in the original post. At least this is how I see it.