I prefer coding on the bare metal. I understood exactly what every part of the program was doing every moment, and could fix a bug almost immediately, becauyse I knew exactly what should have happened and the only reason it could have screwed up the way it did.
It also taught us a lot (you learned or you went into a different line of work, since we were inventing the science as we went). But Mike, it wasn't that specific. It only took me about a week to port CP/M (8080) to 6502 - which was a totally different kind of animal.
But we were also able to shoehorn a lot of code into a little space. We did an entire planetarium automation system in about 32k of ROM, split among 3 computers. Today, "Hello, World" takes a 5GB library just so you can put text on the screen. I used to get WordStar files (text, but with the high bit of some letters set for various reasons, like soft hyphen) and had to strip off the 8th bit for certain uses. I never saved the source, because it was about 10 lines of code. You ran debug, punched in the machine code and ran. The whole thing was faster than loading a compiler from storage today.
It was fun too. "That can't be done" meant "I can't figure it out, let's see if there's someone better than I am". We always figured it out. And in very small spaces too. A shoehorn was a standard programming tool, so you could cram more code into whatever RAM you had. (BASIC saves line numbers as characters, so we'd write renumbering tools, so we could change the line numbers to start at 0 with an increment of 1. Fewer digits that way. And every line had as many characters as you could cram in. Instruction:instruction:instruction: etc. CR and the next line number took at least 2 bytes that we could use for code.
We'd write code so one routine would call (or jump to) the opcode, but another routine could jump to the operand and the code would run entirely differently. (Anyone who understands assembler knows that's like pulling a rabbit out of a hat you don't have.)
We didn't know all the rules - because no one had made any yet - so we did things that can't be done. Tom Pittman started it, I think, with a 2k BASIC interpreter. Dr. Dobbs (Journal of Calisthenics and Orthodontia - Running Light without Overbyte) ran a contest for the smallest interpreter anyone could write and someone got it down to a lot less than 2k. (Guy with a Chinese name - I can't remember it.) Reading that code taught me how to write interpreters.
Programming was fun then - if you found a way to do something that everyone said couldn't be done, you didn't write an app and charge for it, you published the source for everyone to play with - like an early Sourceforge or git. Andrew wouldn't invent the term "shareware" for another 10 years or more.
But it was easier. I learned 8080 in a couple of days. (I already knew programming.) And I mean all 200 (about) opcodes. And remembered most of them in first octal, then when we started using hex, in hex.
Had to do a monitor (kind of a primitive command line interpreter) on an 8048 - no compare instruction, so how do you compare the input character with your list of operations characters? Figured that one out too.
Assemblers? At the stationery store. Other people called them legal pads. We knew the difference between one pass and two pass assemblers, because we WERE the assemblers. If you wanted the computer to assemble your code, you'd have to write the assemble first.
Then people came out with things like compiled languages, Mark Williams came out with a great C compiler and, not far behind, Microsoft came out with theirs - with a bug that made you rewrite the assembler file before assembling it. (I guess they were trying to be IBM. One of the error codes in one of IBM's Fortran compiler error listing said something to the effect of "this is not a bug in your code, it's a bug in our compiler".)
Oh, and I had hair, teeth, could hear and see, even bend over far enough to touch my knees ... anyone have a spare 30 year old body lying around? Just back up the memories before rebuilding me, they were - and still are - good ones.
Mike - do you ever get down to Kowloon? If you do, go to the Space Museum - it's a couple of blocks east of the ferry to the island. If they're running a recorded show, you'll see one of my early projects. We automated that thing back in 1978. Done entirely in 8080 (but we cheated, we used an assembler). Strange things for the time (that "couldn't be done"). Like a 400 foot long data bus done in ribbon cable (with no shielding - and run in the same trough as the main, noisy, power cables). Like controlling the kilowatt arc lamp in the projector with SCRs the size of your thumbnail. (They were on heatsinks because we didn't want to give anyone who saw them running in air a heart attack.) Fun times.