My first computer was a Commodore Vic-20. I don't think it was the first computer that I programmed on-- that was likely an Apple ][. My dad had a TRS-80 Model 2 at his office that we sometimes wrote little programs on too. The Vic-20 however, it was the first computer that was mine all mine. Sure, it was arguably for "all of us kids", but my brothers were really too young to do much of anything with it. They were eight and two years old respectively. I was ten years old, and that computer was my favorite toy.
I could make it do amazing things, usually to impress my little brothers. When we'd play war in the basement- complete with opposing pillow forts, Popsicle stick hand-grenades, and popcorn kernels blown through straws for guns- the VIC-20 was there providing sound the sound effects for our fights. I had it doing random machine gun blasts, mortar shell bursts, and medic sirens. I could make it play 'happy birthday' while animating a cake full of candles. I made it play a mean game of battleship (unless you realized that I'd failed to initialize the random number generator and you could memorize the location of all of the boats. I'm talking to you, cousin Huey.) I wrote a space invaders clone, and the ever present light-cycles game. My piece-de-resistance was a little animated guy who could, at the press of a key, wave, nod his head, or lift a leg and fart with a glorious BRAPPP sound effect. My two year old brother loved that program.
One of the reasons I was able to write all of those cool programs was that the VIC-20 had really great documentation. The VIC-20 Programmers Reference Guide is an amazing book. It completely documents the computer. Every part of it. The book even came with a schematic for the hardware! This was not some introductory text on computers. It was the system documentation, nothing held back, not dumbed down. What makes it so amazing is that it is written in a way that even a ten year old could understand it.
Check out the section on "PROGRAMMABLE CHARACTERS" starting around page 85. It begins with a simple two line statement: "The graphics ability of the VIC 20 is more powerful and sophisticated than many users realize. The following material is a concept-by-concept guide to help you make better use of these graphics features to enhance your games and other programs." I had an epiphany with this chapter. It was a sudden flash of understanding, a complete mental shift. It shaped me, it pushed me into an engineering career. I can remember the feeling vividly, and I know exactly where I was at the time. I was sitting at the kitchen table with the computer set up there so that I could watch Saturday morning cartoons and play with the Vic at the same time-- pretty decadent! I'd read the chapter, and I was trying to make the computer draw a frowny-face instead of the smiley face used in the example. I wasn't getting it. This was the sentence that in the manual that I'd been struggling with all morning: "If you view each row as a binary word, the numbers are the value of that bit position. Each is a power of 2. The leftmost bit is equal to 128 or 2 to the 7th power, the next is equal to 64 or 2 to the 6th, and so on, until you reach the rightmost bit (bit 0) which is equal to 1 or 2 to the 0th power." Understand, I was ten years old. I had no idea what a 'power' was, but because of the way this book was written, I was sure that if I just kept at it, I would get it. And i did. It came like a flash as I was POKEing values into video memory. Suddenly, I understood binary to decimal conversion, and it was the VIC-20 Programmers Reference Manual that taught it to me.
This book is a fairly dry read if you aren't a computer nerd sitting in front of a VIC-20 watching Scoobie-Doo on a sunny Saturday morning in 1982, but I think it still has some nuggets of wisdom that hold true today. You've come this far with me, so I'll spare you a lengthy read and quote some of the passages that were influential to me as a young programmer. You don't see this kind of writing in computer manuals today, and I think it is one of the reasons why we don't turn out ten year old programmers like we used to.
You don't have to be an auto mechanic to drive a car, and by the same token you don't have to be a programmer to "drive" your VIC 20. Still, knowing something about how your car works mechanically helps you maintain and use your car to best advantage. Likewise, knowing how the computer is programmed helps you get the most out of your VIC 20.
Learning to write machine language programs is a discipline which is very useful in programming. Since machine language is at the same level as the internal workings of the machine, your brain is stretched that much further, when trying to organize things in your mind and in the VIC-20.
One of the best ways to learn machine language is to look at other people's machine language programs. These are published all the time, in magazines and newsletters, even if the article is for a different computer that also has the 6502 microprocessor (there are many). You should make sure that you thoroughly understand the code that you look at. This may require perseverance, especially when you see a new technique that you have never came across before. This can be infuriating, but if patience prevails, you will be the VICtor (sorry about that).
Having looked at other machine language programs, you MUST write your own.
When approaching a large task in machine language, a certain amount of subconscious thought has usually taken place, in thinking about how certain processes would be implemented in machine language. When the task is started, it is usually a good idea to set out on paper block diagrams of memory usage, functional modules of code required, and a program flow.
[...] If you look upon a large indigestible problem as something that once broken down into small enough pieces can all be eaten, then this will enable you to approach something that seems impossible, and you will be surprised at how swiftly it all falls into place. This process obviously improves with practice, but KEEP TRYING.
Anyway, thanks for reading. If you want to play around with a VIC-20 and try out some of the examples in the manual, there is an emulator that you can download over at www.viceteam.org. Be forewarned- they haven't implemented "old sony portable tv tuned to channel 3" mode, so it isn't as authentic as it could be. If you are fortunate enough to own a VIC-20 and want to get it looking like it did back in the Regan era for the full 1980's experience, check out Retr0Bright, a cleaner that can make old yellow plastic look new again.
POKE 36879,8 -jsj