Mitchell Waite and John Angermeyer have written in the CP/M Bible the best CP/M documentation I've seen.
In fact, I hope it'll be a horrible shock to a lot of people, because it proves that even as idiosyncratic and complicated a subject as CP/M, can be documented clearly and comprehensively.
All versions of CP/M are covered in detail, as are MP/M and Concurrent CP/M, not to mention each built-in command and the common transient commands, the majority of commonly-used development tools such as languages, assemblers, linkers, translators and so on, to the extent that I found myself digging around in the standard documentation after finding certain details which I'd previously overlooked. Such details are covered by the standard docs, but they're far easier to find in the CP/M Bible.
The sheer volume of information could renger the whole mass inaccessible, but the authors have provided multiple methods of finding a particular subject.
The handling of screen output is equally well done.
This book is how CP/M should have been documented, and it's to the eternal shame of the industry that we have to reply on third parties to do the work, rather than doing it properly the first time. I cannot recommend this book highly enough to anyone who uses CP/M regularly, at whatever level.