A look back at the Apple IIGS

A comment thread on Hacker News got me thinking about the Apple IIGS, the computer on which I learned to program.

The Apple IIGS had an interesting mix of features. It was based on the Western Design Center 65C816 processor, which had a 6502-compatible 8-bit emulation mode, but also a 16-bit native mode with 24-bit addressing (meaning a 16 MB address space). The IIGS also featured 16-color graphics and multi-voice 8-bit sampled sound (using an Ensoniq chip). Finally, the IIGS provided a Mac-like GUI and Toolbox programming framework.

Like the earlier Apple II models, the IIGS had Applesoft BASIC in ROM. But none of the advanced features of the IIGS were available from BASIC. And because the BASIC environment was still running in the 8-bit emulation mode, AFAIK nobody even attempted to write assembly-language modules that would make the advanced features available from BASIC, as one would with advanced graphics or sound routines for the original Apple II line.

No, the way we were supposed to program native Apple IIGS applications was using a professional programming environment like the Apple Programmer's Workshop. Instead of a REPL-like BASIC interpreter or the old Apple II Monitor (invoked with "CALL -151"), we would need to use an editor, compiler or assembler, linker, and debugger. This was entirely foreign to those of us that cut our teeth on Applesoft BASIC. That's where my own story begins.

My parents bought an Apple IIGS, my family's first computer, in 1988 when I was about 7. We played with some native IIGS programs, but it was a disk full of 8-bit Apple II games, given to us by my uncle, that indirectly sparked my interest in programming. When you booted that disk, which used the 8-bit ProDOS operating system, it brought up a menu program so you could choose which game you wanted to run without having to type in the appropriate command at the BASIC prompt. At some point, I stumbled upon the program for editing the menu. I tried to add a new item with a made-up name to the menu, and of course it didn't work. One of my parents explained that you couldn't just add a new program to the menu, that you'd have to program it. So I wanted to know how to do that.

Fortunately, our IIGS came with a disk that helped me get started. The disk was called "Your Tour of the Apple IIGS", and it covered basics like how to use the keyboard and mouse, how to use a word processor, database, and spreadsheet, and a basic explanation of memory and disks. But the last lesson on the disk was an intro to Applesoft BASIC programming. (In retrospect, I speculate that though this disk used the advanced graphics and sound features of the IIGS, it must have been developed by the old Apple II camp within Apple, not the Mac camp that brought us the Toolbox and professional programming environments.)

The BASIC tutorial included with the computer didn't take me very far. But my uncle taught me a lot more (for example, how to do file I/O). And once my parents saw my interest and aptitude in programming, they gave me a book by Apple called "A Touch of Applesoft BASIC". I don't remember if they bought the book for me, or if it came with the computer but they just hadn't told me about it at first.

Later (when I was about 10 or 11 years old), to help me advance further, my parents bought me the book "Apple Programmer's Introduction to the Apple IIGS" for my birthday. This book was an overview of native IIGS application development using the Toolbox and the Apple Programmer's Workshop. The available languages were assembly, Pascal, and C. After I unwrapped the gift, we opened the book and looked for a section on how to use one of the Toolbox features (QuickDraw, I think) from BASIC. We were sure it had to be there. But of course it wasn't. At this point, we were flummoxed. I was going to have to learn one of the other languages. And my parents would have to buy me a proper programming environment.

I might have already started dabbling with 8-bit assembly language at this point. I certainly knew that assembly language was the way to write the fastest programs. Also, the "Programmer's Introduction" book came with a disk that included binaries of the sample application in all three languages. I observed that the smallest binary was for the assembly-language version. So for me, that sealed the deal; I needed to learn 16-bit assembly language and get an assembly-language development environment. I finally got what I needed to do native Apple IIGS programming for Christmas when I was 12 years old. In retrospect, I probably would have had more fun if I had used a high-level language. Indeed, my uncle, who got into native IIGS programming after me IIRC, chose Pascal.

Though there was no getting away from the inability to use advanced Apple IIGS features from the built-in BASIC, there was some resistance to the Mac-like Toolbox. In France, there was a group of developers called the Free Tools Association (should have been the Tools-Free Association). They developed a music tracker for the IIGS, called NoiseTracker. It controlled the sound chip directly and implemented its own idiosyncratic GUI, rather than using the official one. I have since learned that the Amiga demoscene was similar in its rejection of the proper way of developing on the platform.

To conclude my own story, I never did anything substantial with the native Apple IIGS programming tools I eventually received, though I had fun writing toy programs. My younger brother kept wanting me to write different games for him, and he even drew characters, settings, and objects on the computer. But at age 12 or 13, I didn't know the first thing about game development, and I never got further than an opening screen (with a theme song composed in NoiseTracker) and a main menu. And, truth be told, I got tired of humoring him.

My uncle, who had chosen Pascal, got further. He did a native IIGS rewrite (Toolbox GUI and all) of an educational game that he had previously written in BASIC for the Apple II. One of my last memories of time spent together with him hacking on the IIGS, before we both reluctantly moved on to the PC, was working on that program. I never really learned Pascal, but apparently that didn't stop him from letting me try to help him with the project.

In retrospect, the IIGS was probably best understood as being like two computers in one case (and, importantly at a time when computers were expensive, for the cost of one). My parents and I didn't grasp that at first. I wonder how common this story is among programmers of my generation.