BigEd wrote:
Thanks for part 1 of your intro, Andrew! It would be interesting to hear how you got started with microprocessors, or specifically the 6502 family. Or indeed, with computers or electronics.
Of course! But first I have to take you a little further down the garden path...
My background is very much in software with a bit of dabbling in microcontrollers over the years. And therein lies the problem; I've realised I don't like writing in assembly anymore. It's too far away from the abstract concepts I'm used to using in my day-to-day work. I think there has to be a happy middle ground for programming microprocessors. Something that's easier than assembly but faster than, say, python. Some people might say that that happy middle ground is C. And I'd have to agree with them. Except that I've spent probably 2 decades writing and refining some really optimised general purpose libraries... in C++.
And that's the thing; some of the libraries I've written are perfectly suited to writing a kernal* for a small memory constrained microprocessor. I really don't want to lose that work, or at least not have it available.
And so, even if it is going to take me a year or two, it's still worth it for me to write a C++ compiler for the 65816 if that allows me to use the years and years of code I've written previously. Another fairly strong motivation is I want a compiler that can run on a 65816 (rather than being a cross compiler).
And that brings me nicely to how I ended up writing the above libraries. Back when I was younger I thought it would be wonderful to write games for a living. This was the late nineties / early two thousands** and I landed myself a job writing utilities for XBox, Playstation 2 and the GameCube. All of which would be considered pretty memory constrained now. C++ compiler support was also a bit spotty back then (particularly for the Playstation 2 and the GameCube) and as such we were only allowed to use a very limited subset of C++.
There was almost no collection support when I arrived and through a series of coincidences that's what I ended up writing and specialising in. Admittedly my implementations back then could be best described as 'awful' - but as happens - I later left the game industry and took a lot of the lessons and ideas I had learned with me. I then spent quite a few years in the retro-remakes community and also generally writing games as a hobby where I refined those ideas and implementations.
The remakes I notably worked on were: Harrier Attack (from the Commodore 64); I still occasionally do a tiny bit of work on it. IO (also from the 64), this actually was completed before I lost the source but fortunately a friend found a backup a year or two ago. Project Firestart (yup, C64) but lost to time. Creatures 2, also lost to time. (I was so bad at backing things up back then). And lastly Space Crusade, a remake that I will hopefully finish one day.
And at this point anyone who has made it this far down the path with me will have started to see a pattern.
I grew up with the Commodore 64, it left a definite mark on my psyche. It's responsible for getting me into programming and gaming. There was something amazing about being able to give a computer commands and see it actually do something. Even if it was just BASIC and Logo at first. Then (like most people here I'd imagine) I moved onto 6502 assembly. And, as they say, the rest is history; that background in how computers work at a low level got me into the gaming industry and it's shaped how I develop nowadays - though that's now on servers with sometimes hundreds of gigabytes of RAM in the financial world.
Ultimately I've come back to the 65816 because I find modern hardware too complicated. I'm too far away from it and I no longer understand it. Abstractions are great, and necessary but, as I mentioned, there has to be a reasonable middle ground.
* Yes, I know. I'm keeping it.** When the game development industry was but a shadow of the toxic mess it is now.