Edit: You know what would be funny as hell? A Z80-based system that used a SuperFX chip.
Hah, screw enslavement. Isn't proper abstraction fun? When I first started on SA-1 support, I made it inherit from the S-SMP core instead of the S-CPU core for fun. But there's not much practical use for a 21MHz SPC700

It's been checked into SVN, enjoy.
Wow. I can't believe you ported Andreas' C++ S-DD1 classes to C. I didn't want to mess with that at all. Disappointed about using the system time for the S-RTC, but oh well. It's more of a preference than anything else. You will need to add a hack to pass the SPC7110 test like ZSNES in that case. It sets the time and then checks it a second later to make sure it's incrementing properly. Initializing the last 16-bytes of SRAM to "SPC7110 CHECK OK" will work.
SuperFX, wow. You had to rewrite almost all of it. Sucks not having references and overloaded operators in C, but I don't want to start a language war so I'll shut up. Very impressive how fast you put that together. And I see you dodged all the common mistakes I made impeccably.
My biggest mistakes were not realizing that SREG and DREG are sometimes the same, and clobbering them before getting flag states and such; and screwing up the pipeline fetching, but those look pretty good with your code.
Glad you were able to avoid the messiness of the Snes9X core's faux-pipeline trickery in every single opcode and automate it as I have.