Not as old as some nor young as others, I got bitten hard around the time the Commodore 64 and the TI-99/4A were duking it out in the marketplace (Apple being completely out of my price range). After much consideration of factors I really didn't know much about, I bought a C64.
Much experimentation followed as I tried to teach myself enough to earn a living as a programmer. Software was hard to come by in those early days - I was visiting relatives in California when I came across a HESMon cartridge that, together with Leventhal's "6502 Machine Language", I used to learn 6502 machine language.
The first "big" 6502 program I wrote - 3K! - was a terminal emulator for a Control Data Magnavox. Maggies had a 512x512 pixel orange monochrome plasma display, a 16x8 pixel characters (so 32 rows of 64 characters each), 16x16 block touchscreen capability, downloadable character sets, built-in line drawing primitives, and could communicate at up to 1200 baud.
It turns out the store I bought my C64 from was owned by three guys from Control Data, and they provided all the internal documentation I needed to understand the telecommunications protocol. There was a similar program for the Atari that Control Data called "The Learning Phone", and these guys figured the future was microcomputers and wanted more emulators out there.
They were right, but Control Data was dead set on selling the PLATO system as educational when their own internal statistics showed that users spent the most time playing games, including some of the first graphical multi-user dungeon crawlers. Nothing ever came of the "C64PAD" via Control Data, but I did sell a number of copies, mainly to colleges and universities running PLATO systems. The furthest was to Australia, revelling at the time in their America's Cup win. They needed a change to provide very asymmetric upload/download speeds which caused me to learn even more about the Commodore software UART.
There's still a small active PLATO community at http://www.cyber1.org
running PLATO software on a Cyber emulator. I use it to play 'Moria', one of those early graphical dungeon crawlers (and written by Kevet Dumcombe, one of the three owners of that shop. Don't get Kevet mad; he'll put you on level 61, the one with no stairs out...). I think about adapting "C64PAD" to Contiki, but other projects have put this on the back burner for now.
After that I wrote a BASIC extension, naturally The Finest Of Them All. It hid under the BASIC ROM and stashed a bitmap screen under the Kernel ROM, so all the extras it provided took nothing away from what was already there. If an extended BASIC program was concatenated to a copy of the extension, the extension would move the BASIC program to its normal position as part its own initialization and then start executing it. This was a feature I did not document but was going to tell anyone who registered a shareware copy.
Well, y'all are the first to hear about it.
But the BASIC extension was what I used to prove to Robert Woodhead that I knew what I was doing, so he invited me to lovely Ithaca, New York for a few months to port the "Wizardry" series of fantasy RPGs to the C64. Robert, you see, had access to a PLATO system as a student at Cornell and, along with Andrew Greenberg, figured a single player microcomputer version of one of these graphical dungeon crawlers would sell.
"Wizardry" was written in UCSD Pascal, in large part because its overlay capability allowed a game larger than would fit in memory at once. But Robert and Andrew didn't want to license it any more, and instead wanted a p-code interpreter developed in-house that would let them port the game to any 6502-based machine with no more fees.
The big technical challenge for the Commodore version was of course the slow 1541 drives. The floppy-to-disk-drive-memory speed is actually fairly decent, about 50K/sec. The disk-drive-memory-to-computer-memory speed is atrocious, about 400 bytes/sec. So I had to develop a fast-transfer scheme, complicated a bit by the fact that I used a text screen rather than a bitmapped one. The VIC-II keeps shutting down the 6510 for 40 cycles every eight visible scan lines to fetch 40 character bytes, so I had to figure a way around that. IIRC I got the speed up to 2K/sec or so, which mades things tolerable.
"Wizardary" is the project where I finally learned how to use macros on my trusty Merlin assembler. Using them saved enough source space that I managed to delay the time I had to move to disk-based assembly (slow drives, again). Then I realized how handy macros are at simplifying source and reducing coding errors as well.
I also learned conditional assembly by using the basically the same source for a C128 version, which takes advantage of the larger memory and faster 1571 drives (so every Commodore version of "Wizardry" has always come with two p-code interpreters, one of which auto-boots on the C128).
The next project I worked on was a Commodore version of a game called "Captain Power". "Captain Power" was a children's television character designed as a one-season merchandising vehicle. Keypunch Software bought the rights to computer games based on the character, and I wrote a "Defender" clone for them. I learned about split screens and side-scrolling here (I've seen mention of using an off-screen sprite to get a stable split screen. I dunno. I noticed that the ROM routine to fetch a character from the keyboard input buffer disables interrupts, and when I re-wrote that to eliminate interrupts my split screen became rock solid).
After that I had to get a Real Job, and my programming has basically been on a hobbyist level ever since. I did have a C-language article about flood fills published in this phase, which solved a problem I'd been tossing around for a few years and is probably the only completely original idea I've ever had. It also paid enough to buy a nicer video card for my PC.
I've been tinkering with my "HXA" assembler for quite a while now, and eventually I hope to do something "useful" with it. I've been pondering Yet Another BASIC, the twist on this one being that it would be customizable in the sense that every keyword could be conditionally assembled in or out. That would be the different part; everything else would be stolen from Microsoft and Atari and BBC and yes, Eh BASICS.
OTOH I've been struggling for weeks now in my spare time trying to get a handle on CSS (every time I think I've figured it out somehow the display gets changed to something I don't expect). So it could be a while.