OK. Actually I had some questions:
I've heard people say that using a 3-button controller setup makes desync less likely. Is this true? I've seen nothing to support that it is, but maybe it matters more for certain games?
and about these lines in state.cpp:
z80_Reset(&M_Z80);
// main68k_reset();
// YM2612ResetChip(0);
// Reset_VDP();
When I comment out the first line, everything still work fine as far as I can tell. Do you know if it was necessary for something?
Were the two lines in the middle already commented out, or did you disable them?
When I uncomment the last line, the freezes stop happening. (My test was Ecco the Dolphin, loading lots of save states across different sound samples that were playing - each load had about a 5% chance of freezing the emulated CPU... does this happen for anyone else?) But ideally the loading code shouldn't have to reset anything except by loading directly into it, unless... maybe these subsystems can't affect gameplay? I'm not exactly sure what they do, but it seems to be sound stuff.