This is a project I am writing with the intent to have a Z80 emulator code on my RunCPM and at the same time use the same code as a model on Proteus.
The code is still in its infancy, but some of the Z80 instructions are already working.
There's still a lot to be done, but it is here in case anyone is interested.
The method I am using to emulate the Z80 is the one described on http://www.z80.info/decoding.htm