Back
Ken Barbier: CP/M Assembly Language Programming (1983, Prentice-Hall) 4 stars

A great beginning-to-end primer for a programmer

4 stars

If you have a little bit of experience with programming (but it's probably not necessary to have a lot; I'm not a good judge of that case), this book is an excellent beginning-to-end explanation of how to interface with CP/M to do real work.

It has a little bit of information on using CP/M, but I think there are better books for that. It may make a good refresher on those topics.

It has a little bit of information on 8080 programming, but you're going to want a separate reference for that; the Intel data sheets are perfectly adequate. It includes op code and instruction encoding tables in the appendices, but no detailed description of individual instructions that are not used in specific examples.

Where it really shines is a thorough and well-paced introduction to using the various CP/M services (from console interactions to disk I/O). These services are illustrated through example programs that do useful things, such as print the contents of a file to the console or copy a file on disk. Early examples spend more time discussing specific assembly-language programming techniques, such as deciding which registers are caller-saved and which are callee-saved, pushing registers to the stack to preserve this property, and simply deciding which registers to use for which operations. Later examples assume some level of competence with these issues, and talk more about interactions with CP/M, memory management, etc.

Tools such as DDT and ED.COM are also covered on the way, using each tool to explore a bit of an example program being developed (or the underlying CP/M operating system).

This book is not large, so the depth of coverage of many topics is moderate, but enough information is there to piece together more sophisticated conclusions if the reader takes the time to actually explore each of the examples. I have found this book and an Intel 8080 reference manual sufficient to develop some small CP/M applications; adding the CP/M manuals themselves is virtually a complete CP/M development course in one third-party book. Programmers who are not familiar with CP/M at all may wish to include a CP/M introduction in the mix.