I never really did any Z80 coding on the ZX81 itself, but that section of the manual came in really useful when I got an Amstrad CPC, which is what I learned Z80 on. To that I added The Ins & Outs of the Amstrad (https://cpcrulez.fr/book_english-the_ins_and_outs_of_the_ams...), which documented the firmware and other CPC-specific stuff.
Edit: wow, see this comment of elvis70
> The author has made his book freely available : http://www.z80.info/zaks.html
There were also books. One of my favourites was an annotated disassembly of the CPC's two major ROMs. 16KB basic operating system, and 16KB BASIC interpreter.
Libraries and book stores had a few books, especially if you lived in a university area.
Data sheets for the processor and co-processors and digital logic components were usually available in electronic stores (they also had some books).
But it's hard to imagine this world now that we have the Internet. I miss the focus needed to hunt down information and understand how thing worked. A lot of it was trial and error, trying to validate your understanding with experimentation.
After that I purchased a copy of Programming the 6502 by Rodnay Zaks. Books took 3 months to arrive if they were a special order like that, sometimes longer. To this day it's still one of my favourite books.
I did the same thing as the author, wrote BASIC until I needed a faster inner loop (doing some simulation like cellwar or something) and picked up asm to make it (just the inner loop) faster.