April 17, 2008

Apple II nostalgia

Justin Moore writes:

Clif,

Wasn't it you in one night at a restaurant in Kansas City last fall telling those at your table about how you used to create graphics in assembly on old Apple's? For some reason I'm thinking it was, so I immediately thought of you when I saw this video.

Even if that wasn't you, I think you'll appreciate the geekiness of the clip...

Yes, Justin, that was me.  Here's the story.

The Apple II did nothing out of the box except flash that lonely cursor.  It was 1979 and we had one computer in a high school of 1,800 students (Abraham Lincoln High School in Des Moines, IA).  There wasn't a single teacher who knew anything about it so it represented a great challenge and opportunity for discovery.  There was one other guy, Mark, geeky enough to stay after school every day with me and play with the computer until the teacher kicked us out of the room so he could lock up and go home. 

Our first idea for something to do with the graphics mode was to draw our school logo.  That took some doing because the pixels were not mapped into memory sequentially from top left to bottom right.  Steve Wozniak had simplified his graphics chip design by laying out the memory to follow the interlace scheme of NTSC video.  Steve was famous for building ingenious, brilliantly simple hardware that made the software more complex.  So, with a lot of trial and error and many re-reads of the Apple manual, we eventually were able to turn on the right pixels to form the ALHS logo.

Our next idea was to print the logo.  We had a 4-pin dot-matrix printer.  Consulting the printer manual, we wrote a BASIC program that would print whatever was on the screen, with each pixel on the screen becoming a dot on the page.  Again this was tricky because we had to convert from the video interlace pattern in memory to four vertical dots for each pass of the print head.  We eventually got it work but it took more than 30 minutes to print one screen because it would print a pass and then think a long time before printing the next pass, doing just four rows of pixels on each pass.  

To speed it up, Mark and I taught ourselves 6502 machine language.  With nothing more than a 6502 programming card, paper, pencil, and a well-used eraser, we wrote a program that would print the screen and then we hand assembled it into a series of 8-bit codes like the program you saw loading at the start of the video.  (We didn't even have an assembler, for crying out loud!)  That program would print the screen as fast as the printer would go, finishing a page in under a minute. 

Looking back, it's hard to believe how creative, resourceful, and self-motivated we were to do things like that as high school students with no one there to teach us.  Good times.  Thanks for taking me back, Justin.

No comments: