CASM is a portable (it shouldn't be using anything more than ANSI/ISO features) macro cross-assembler in C. It currently supports the following processors:

It can also produce output in the following formats:

The CPC tape output has been tried on a real CPC, so it has the honour of being the first bit of real Z80 silicon to run the output of CASM.

Source for V1.10 are available here. Sources for the lastest development version are available here.