via Slashdot, Programming Books, part 3: Programming the Commodore 64
Prologue about the book itself is worth reading, but the following really resonated for me:
Now I know that there is already plenty of old-fart nostalgia on this blog — a lot of people have interpreted Whatever happened to programming? as a yearning for the days when you had to do everything from first principles, which wasn’t really what I meant. But I do, I really do, miss the days when it was possible to understand the whole computer.
I’m not claiming that I ever had the level of mastery that people like West and Butterfield had. I was never really a big machine-code programmer, for one thing — I wrote routines to be called from BASIC, but no complete programs in 6502/6510. And I’ve never been a hardware hacker at more than the most trivial swap-the-video-cards level. But I did have a huge amount of Commodore 64 lore internalised. I knew which memory location always held the scan-code of the key that was pressed at that time; and where the screen memory-map began; and which locations to POKE to play different pitches on the various channels of sound, or to change the screen or border colours. I knew hundreds or thousands of those little bits of information, as well as being completely familiar with the horrible BASIC dialect that was in one of the ROMs. In short, I knew the machine in a way that I don’t even begin to hope to know any of my computers today; in a way that, I am guessing, no-one anywhere in the world knows their machines.
I miss that.
I know exactly what he means.
Long, nostalgic ramble after the break. Consider yourself warned.
I’m not sure whether there was one single point of inflection, but I think the real change happened quite quickly in the first half of the 1990s, too. Up through somewhere around 1993, you could pretty much gain that level of understanding (at the systems level, at least) of the ISA PC architecture, from registers and bus-level IO ports[*] up through pretty much how all of DOS worked, and even get a pretty good handle on what each of the core DLLs and drivers in Windows 3.x did. Sure, there was some wacky high-end stuff like Microchannel and EISA, but that was for the most part outside the consumer/home computer space, and to the extent that it broke compatibility even at the port level, people would complain about “not really being IBM compatible.”
One might place the breaking point earlier (MicroChannel in 1986? the 80386SL introducing SMM in 1990?), but I’d suggest 1993-95 as the point to really look at: the combination of the new hardware standards (PCI and USB), MUCH more rapid turnover in the motherboard chipset space, the increasing ubiquity of things like networking and power management, and a much more rapid turnover in CPU generations… and on the the introduction of two much more complicated OSes (NT 3.1 in 1993 and Windows 95) which finally gave PCs a real driver model and broke through the old requirement for being at least mostly backwards compatible with the wonderful old IBM PC/XT/AT family. Games seemed to be the last thing to leave and direct hardware mangling, and that transition was pretty fast (to my recollection at least) after Win95 came out.
I wonder, though, if part of it isn’t just age on my end, and realizing there is a much bigger world in computing. In 1993 when I was a senior in high school, knew the PC as intimately as I ever have, and was trying to use that to write a toy OS, I had a LOT of free time and energy. I don’t today, to anywhere near that same degree, and a lot of the stuff I do know today would have been rather like knowing Vaxen then – big, complicated business-y stuff (exactly like the EISA and MicroChannel stuff then, or like the Novell stuff I was actively in the process of learning.
Further, if we go back to when I was a kid rather than a teen, when you looked across 8-bit micros as a whole, there was a lot of fragmentation. C-64 vs 128? (let alone VIC20, Pet, C16/C+4, etc) Several generations of Apple II? Atari 8-bit? That’s all different sets of knowledge just on the 6502/6510/8510 family. Add in the various forms of 6800/68000, 8080/8085/Z80 and a few outright oddballs like the TI-99 series, and well… did anyone really know more than a slice out of that space all that closely?
Which really makes me wonder what I’d be learning if I was 17-18 today. It strikes me that, given my inclinations, the whole open source device based on an ARM SOC and a stripped down Linux (ie GP32X, Pandora, maybe even hacked Android phones) would be tremendously exciting. Given the availability of information on the internet (vs dead trees) plus open source OSes and drivers, it strikes me that these might be enough easier to learn and hack on to more than balance their greater complexity. Even at 34, if I were to suddenly become independently wealthy, learning these at the level of detail I used to know for the PC would be highly tempting.
[* I wonder – how many of my readers still remember that the x86 architecture has a separate address space for IO ports and for memory? ]