But at some point, it clicked, and I started writing out the assembly… there was a register to control the screen background color… so I just blasted 0 into that register to make it black. In what was probably my greatest ever fear of engineering, I then hand-assembled my two-line assembly into 5 bytes of machine code. But I had to wait until I got back from vacation to try it.
It worked… it changed the background color, but it crashed the machine… I had forgotten to add ‘return from subroutine’, after that it worked, and that was the beginning of my journey.
I regret not spending more on proper tooling early on. But all the good assemblers were cross-assemblers that ran on pc’s.
There’s was also a really good book by Raeto Collin West that went into more details, and that’s where I got some of the drive register info. There is a command you can send to the printer to dump its memory, so that’s what I did. (To get it’s ROM to see what it’s drivers are doing)
The printer was critical to being able to read through the assembly and annotate it. You learn how to read ASCII in your head, etc.
However, assembly was more common back then and really wasn't consider a 'black art'. It was just what you did. Also, 8 bits were a lot simpler to program (flat address space, no protected mode, etc) - at most, you might have to deal with some bank switching..
Even hobbyist mags like Compute! would run articles on assembly - and DDJ would have that fancy 'C' stuff too!
You could read the entire OS ("KERNAL") and BASIC disassembly start to finish (there were books listing them, with comments added). You could systematically test what changing registers would do - I remember pestering my parents at work by calling them to let them hear what sounds I managed to make by randomly POKE'ing things into the sound registers just to experiment.
And of course the manuals. While I agree with you books were hard to get, the C64 manual was fantastic.
To GGP: you should get an 8-bit computer and play around a bit, some things may blow your mind. I first played around with a C64 in around 7th grade, after I'd already learned some programming on PCs, and I learned a lot.
Commodore published very detailed documentation for its computers, including schematics. You could buy these in most large book stores.
There was also lots of information available through local user groups, BBSes, BBS networks, and online services like GEnie, Delphi, The Source, and CompuServe.
Many local computer stores had regular meetings of their customers where people would exchange programs and information.
Nowadays it's even easier with FB and such, just ask, and keep asking until you're satisfied.
Back then, it was the same, 80's, ask, community clubs, mailing lists, etc -
We're in tech, we communicate with one another, ask the right question and you'll get the right answer, even if it's questionable. ;)
My personal experience as a kid is more oriented towards the Amiga, but I suspect it was quite similar.
One fun fact, the place I grew up was a minority language region, so specialized magazines/books were only available in the dominant language of the country which was not yet part of my of my school curriculum.
I ended up reading most of that stuff in German having absolutely no idea what that meant; a double puzzle to solve.
(Yes, I could have gone a few dozen kilometers cross the border to Italy to buy some, but I was a kid and my parents didn't indulge me further with this "toy")