Olivier Poncet is the author of an Amstrad CPC emulator : Xcpc v0.52.0 for Linux, BSD and Unix. It doesn't emulate the + models though.
He is talking about how to write an emulator on his web site.
And also quite interesting, he has released last month AYM JS which is a sound chip emulator written in JavaScript emulating the AY-3-8910 PSG (Programmable Sound Generator) and the YM2149 SSG (Software-Controlled Sound Generator). You can test AYM JS here (press the Power button and the Play button). At the moment YM files must be converted to javascript (but the conversion tool isn't available yet), but direct support of YM files is on the way.