Early Days: The VIC-20 Programmer's Reference Guide
rachelbythebay.com
rachelbythebay.com
You can find it and others at archive.org: https://archive.org/details/VIC-20ProgrammersReferenceGuide1...
- a text to speech program, using phoneme production rules I found in a 1976 IEEE paper "Letter-to-sound rules for automatic translation of english text to phonetics"
- a 3D graphics toolkit, that drew antialiased lines, circles, cuboids onto a pixel-addressable display. The VIC-20 only had a 22x23 character display. I remember having to fill the screen with ASCII chars 0 to 255, then forcing the video to use doubleheight 8x16 pixel characters with char data in RAM rather than the video ROM. Then the graphics primatives were written into these characters by bitwise operations. I had to write my own arithmetic routines as the 6502 could only add two 8bit numbers. There was not even a multiply instruction!
Ah, happy days!
My dad was quite prescient for the time and bought me and my sister VIC-20s with little black and white matching TVs. I have great memories of typing in games from magazines and hacking the random sentence generator in BASIC and loading/saving programs to cassette tape over many minutes. Ten minutes to find and load a program!
The sentence generator was quite hilarious, my friends and I added all the bad words a group of 12 year-olds could think up and put them in the DATA lines. Hours and weeks of fun and laughs, haha. I'm a bit jealous other people discovered assembly language on the thing, didn't know it existed at the time.
Had the whole thing with Datasette, Manuals, and tapes in the original box in mint condition until around 2001-ish… until I finally sold and trashed everything to backpack around the world, sigh.
Mine was a TI-99/4a. The "+" symbol was obtained by SHIFT =, as on most current US-layout keyboards. But if you hit the FCTN key instead of the SHIFT key, it immediately rebooted the machine. It was easy to do that because the FCTN key was immediately below the right SHIFT key. Was so frustrating to lose hours of work that way. First lesson in save early, save often. Of course saving was to cassette tape, which took several minutes, so you tended to delay doing it.
EDIT: Also, the quote (") was obtained as FCTN-P, which is very close to the = key. I think that might have been even more dangerous.
The other problem is all of the cartridges for all of the games. However, in my search to solve this problem I found http://www.mega-cart.com/ It is amazing, every piece of software ever written, even demos from 2007 and all of the memory expansions on a single cartridge. I highly recommend.
Further, the joystick went missing, but Commodore used the same interface as the Atari, so I could actually by a brand new replacement off the shelf at a local retro computer store.
http://vintagegamingandmore.com/atari-paddle-repair/
Commodore paddles are similar, but use 470k ohm linear pots. You can use 500k ohm ones if you can't find 470's, but you probably won't have a problem finding them.
Getting that bare-metal knowledge of that machine served me pretty well. I'm not sure if there's an equivalent path to programmer competency today.
After the summer gig ended, the accounts still worked and that's how I got online for the first time, before BBSes.
I got a Commodore 64 around the same time and, for a while, had a "cool" set up with a TV, the two Commodores, an Atari 2600, and A/B switches for managing all the connections. I had a tape drive for the Commodores too, but never could figure out how to use it (I was young).
I would take trips to the library and pick up secondhand computing magazines that had code listings in the back, in BASIC, and then carefully copy them in to one of the computers.
I didn't really grasp everything about it all, but I understood flow control and loops and basic logic before about 8 or so.
I really wish there was a similar development environment now for beginners. Everything seems to either dumb things down too far -- confusing drag-and-drop UIs and so on -- or introduce highly abstract concepts way too early (Javascript...). I think a big part of the success of Arduino was this same "learn by tinkering" environment.
The main problem with block based languages is that short code fragments take up the whole screen. This keeps people from ever going beyond trivial initial examples.
In traditional basic, a for loop looks like:
for i = 1 to 100
print i
next i
The syntax here is very nearly as simple as possible. There are no parentheses, no semicolons, no braces or brackets; i is not declared ahead of time; indentation isn't important.Every new programming language is developed with its own syntactic dressings for ever-greater levels of abstraction. More experienced programmers want to see lambdas and continuations and parallelism and design patterns and so on, and these concepts are extraordinarily difficult to teach to beginners without also introducing advanced math. We forget how difficult it is to grasp these abstractions for the first time; we eat our young.
I don't like graphical languages because they aren't a good stepping stone towards "real" programming. They are too limited, too verbose, too awkward, and too slow to build programs with.
We assume that we can't make new languages that are resistant to syntax errors. But once upon a time, we did. (Despite all its many other limitations, I don't think I ever had a single syntax error in COBOL.)
Finally got a datasette drive a year later.
That computer (and manual) literally changed the course of my life. What fond memories.
My first machine was a TRS-80 Model III that my dad bought for me at a garage sale. It came with an aftermarket BASIC programming manual, but no programmer's manual for the machine. Without a real reference manual to explain what was going on, I wasn't able to get past the "programs as magical incantations" stage until much later.
Also, the machine came with no disk drives or any other storage to speak of. 9 year old me was really impressed at how people apparently retyped their programs into the machine every time they turned it on.
I also didn't understand what "REM" meant and the author didn't really go into what comments were and what they were for, so I dutifully typed every comment from the program listing into the machine word-for-word, being careful to use the exact same capitalization and punctuation. Then, of course, I wondered why I had to type all that cryptic stuff in below it if I was already telling the computer what to do in English!
It's a miracle I persisted long enough to figure this all out and then make a career out of it.
I think that inspired me to go out and get the '101 BASIC Games' book and experiment with that code too! "Hammurabi, I beg to report..."