I've been finishing up the FILEIO RE.
One thing to note is newer versions of FILEIO have a 64 byte unaligned double buffer for reading instead of a 16 byte unaligned double buffer.
Unfortunately, since size of the structure is not specified in the transfer, I can't detect which buffer size to use by detecting the size.
So instead, this is my attempted workaround:
1. If size to transfer of either buffer is over 16 bytes, it's using the 64 byte structure version, so stop here.
2. Before starting transfer, flip all the bits of the unaligned double buffer, then copy it to somewhere else.
3. After transfer, if the last 96 bytes of the double buffer is unchanged, it's using the 16 byte structure version, so stop here.
4. It's using the 64 byte structure version, so stop here.
What does Play! emulator do in its HLE emulation of FILEIO?
Well, since it has knowledge of both EE and IOP RAM, it can just write directly to it. No need to go through SIF or handle misalignment.