So, after a lot of frustration, hacking and assistance from the Discord #emulation group, I have gotten emulation of the 48K, 128K, +2 and +2A/3 working!
The 128 and +2 are pretty much the same from an emulation standpoint. Over and above the 48, it's pretty much implementing ROM and RAM paging.
The +2A/+3 are the same also, with the menu showing +2A or +3 depending upon the absence/presence of a disk drive (which of course can be faked in emulation).
So, disregarding that I've done nothing to emulate sound yet, the emulator is fairly complete. It emulates the systems mentioned above and, I have tested a load of games on it (see here and here).
Here's some screenshots...
Spectrum 48K

Spectrum 128

Spectrum +2

Spectrum +2A/3

So, excluding sound emulation, which I expect to be a whole world of pain and may not bother with at all, I'm not sure where to go with this now.
The perfectionist in me would like to start again taking the lessons learned along the way into account, to architect the project differently. It does seem like such a waste to do that, even though I would be able to reuse a lot of the code.
Will have to see. Any suggestions as to what next? Comment below or get me on Twitter: @SteveHuwJohn.
