When I was a shade over 11 years old, back in 1980, I got a chance to play with a Commodore PET in school, and from the very second in which my fingers first danced over the keyboard, I knew with absolute certainty what I was going to do for the rest of my life - be a computer programmer.
Around 18 months later my parents bought me a VIC-20 for Christmas, and in the intervening time I consumed any and every scrap of information I could find that related to the design, construction, and most of all programming of this marvellous new technology. As well as writing numerous bits of code that I hoped one day to be able to type into a computer of my own, I spent a lot of time designing my 'perfect' machine; endless drawings of schematics, component layouts, technical manifests of components, and even add-ons that seemed more like science-fiction at the time, but which today are commonplace. Portable, pocket-sized hard disk, anyone?
I didn't get around to building a computer back then, but in recent years I've collected a variety of 'vintage' components such as CPUs, memory, I/O chips, etc. with the intention of finally assembling a homebrew machine just as I always imagined. However, space and time constraints mean that for the moment it remains a pipedream project, except for one aspect - the design and coding of the operating system ROM which will drive this one-off creature. The machine will be a 6502-based device, as that's the microprocessor I know best and most intimately, so it occurred to me that I could take at least some steps towards realising my dream by writing the ROM as a 'plug-in' replacement for an existing machine. In fact, I don't even need to set up the hardware and physically burn EEPROMs, as a sizable number of those classic 8-bit computers are extremely accurately represented as software emulations today.
So what I'm doing is writing a completely new OS ROM for my first and best-loved computer, the aforementioned VIC-20, and simply dropping the assembled binary into arguably the best emulator out there - which is VICE. In this way, I can hone the art of OS and language design for a restricted hardware platform, but without having to wait until I've actually built that hardware - I can take the VIC-20 computer and re-purpose it by swapping its' BASIC and KERNAL ROMs out for my new code, and do so simply by telling VICE to load my binaries instead of the original Commodore versions. The result will be a 'new' computer that happens to have all the same hardware as the classic VIC-20, but with a completely new operating system in the driving seat.
It won't be a VIC-20 any more, of course, as it won't be compatible with any software written for that machine - with the BASIC and KERNAL ROMs rewritten, there will be no way for any VIC-20 software to run, because all the routines (and in fact the essence of how the machine works) will be different. It won't even be running CBM BASIC V2, as my intention is to give the new machine a hybrid language based on BASIC but with imported language features like the increment operator - meaning a BASIC line like 10 LET A=A+1 will be rewritable as 10 A++.
Line numbers themselves probably won't actually exist, in theory.
It'll be a significant jump forward for my homebrew project, and will allow me to experiment and test new ideas in an existing and well-understood architecture ready for later deployment to my own design. I call this hybrid (one part Commodore-designed hardware, one part my new OS ROM software) ...
VIC++
This is its' development story.
No comments:
Post a Comment