I've adapted the CP/M version of the Microsoft BASIC to the ZX Spectrum +3 to support a little bit of graphics and a proper console integration.
To do so I've imported portions of the MSX ROM, the result looks quite stable and professional (for the 1982 standards

Since I've finished the spare slots for command tokenization and I'm not willing to break the compatibility with MBASIC, I decided to rename the "DRAW" command to "LINE@".
The new commands customized for the Spectrum are: VPOKE, VPEEK, PSET, PRESET, POINT, CSRLIN, LINE, CLS, COLOR, LOCATE, LINE@ [replacing DRAW], CSAVE, CLOAD, CLOAD? [as on MSX, to verify the saved program].
The CSAVE format is sort of compatible with MSX but, as said, the token codes are the MBASIC ones and are different.
It could be possible to work on the compatibility but there are better ways to convert the programs and plenty of Microsoft BASIC variants (e.g. even the SpectraVideo SVI slightly differs from MSX both on the tokenization and on the CSAVE format).
I haven't tested CLOAD on a real Spectrum thus I don't know if it is worth to extract a LOAD routine for the BLOAD format for z88dk.
Screenshot of the process of typing and running an MSX program on a Spectrum, using CSAVE to pass it to the MSX, adjusting the code (tokens are not compatible), running on MSX.
The program tests the "MCL macro language", available on both GW-BASIC and MSX.