Gamasutra: The Art & Business of Making Gamesspacer
View All     RSS
December 22, 2014
arrowPress Releases
December 22, 2014
PR Newswire
View All
View All     Submit Event






If you enjoy reading this site, you might also want to check out these UBM Tech sites:


 
BASIC: Riding An 8-bit Rocket
by Steve Fulton on 04/29/14 01:09:00 am   Expert Blogs   Featured Blogs

5 comments Share on Twitter Share on Facebook    RSS

The following blog post, unless otherwise noted, was written by a member of Gamasutra’s community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.

 

I was 9 years old when I first touched the keyboard of an Apple II computer.  It was 1979, and I was visiting my friend Eric's house.   Eric's dad was a computer engineer at Hughes Aircraft, and he was the first person I ever knew who owned his own computer.

Eric, my twin brother Jeff, and I all gathered around the machine, and using some simple commands Eric's dad taught us, we created our first programs.   All were based on the PRINT command.

First we printed something once.

10 PRINT "HELLO"

 

RUN

HELLO

This seemed very logical to me.  We asked the computer to do something, and it responded in kind. Next, using a loop with a GOTO Eric's dad showed us, we printed the same thing dozens of times until we broke out of the program.  It was amazing.  We had done the work of  dozens of single commands with just 2 lines code.  I was fascinated by this efficiency and the way the machine responded to a concise set of numbered commands.

 

10 PRINT "HELLO"

20 GOTO 10

 

RUN

HELLO

HELLO

HELLO

HELLO

HELLO

HELLO

HELLO

HELLO

We continued to play around with printing and discovered that you could concatenate strings with a semi-colon, which led to interesting scrolling and text effects.

10 PRINT "HELLO";

20 GOTO 10

 

RUN

 

HELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLO

 

One thing we all noticed with this program was just how slow the text was printed to the screen in Applesoft BASIC.  As we watched the text scroll up the monitor, one of us had an idea.  The exact person who thought of this idea has been lost to time, but all of us remember the output vividly:  if text scrolled up the screen so slowly, we could use limitation to our advantage.   By chaining many PRINT commands together, we could "launch" ASCII designed rockets up the screen every time we ran our BASIC program.  

This was a revelation to us.  It meant that with a few simple commands, we could make something we designed come to life.  

And so that is what we did.  For hours.  For days.  For weeks.   We sat and wrote lines of PRINT statements to create rockets like this one:

10  PRINT ""

20  PRINT ""

30  PRINT ""

40  PRINT ""

50  PRINT ""

60  PRINT ""

70  PRINT ""

80  PRINT ""

90  PRINT ""

100 PRINT "               ^"

110 PRINT "              / \"

120 PRINT "             /   \"

130 PRINT "            /     \"

140 PRINT "           /       \"

160 PRINT "           |_______|"

170 PRINT "           |       |"

180 PRINT "           |       |"

190 PRINT "           |       |"

200 PRINT "           |       |"

210 PRINT "           |   U   |"

220 PRINT "           |   S   |"

230 PRINT "           |   A   |"

240 PRINT "           |       |"

250 PRINT "           |       |"

260 PRINT "           |       |"

270 PRINT "           |       |"

280 PRINT "           |       |"

290 PRINT "           |       |"

300 PRINT "           |       |"

310 PRINT "           |       |"

320 PRINT "           |       |"

330 PRINT "          /|||||||||\"

340 PRINT "          |||||||||||"

350 PRINT "          |         |"

360 PRINT "          |         |"

360 PRINT "          |         |"

380 PRINT "          |         |"

390 PRINT "          |         |"

400 PRINT "          |         |"

410 PRINT "          |         |"

420 PRINT "          |         |"

430 PRINT "          |||||||||||"

440 PRINT "          |         |"

450 PRINT "          |         |"

460 PRINT "          |         |"

470 PRINT "          |         |"

480 PRINT "          |         |"

490 PRINT "         /-----------\"

500 PRINT "        ///////|\\\\\\\"

510 PRINT "       ////////|\\\\\\\\"

520 PRINT "       |||||||||||||||||"

530 PRINT "      /-----------------\"

540 PRINT "      |||||||||||||||||||"

 

RUN

 

When we typed "RUN" rocket text would print in succession. Since the update was so slow, each line printed one at a time, and scrolled up, making it appear like the rocket was shooting up the screen, and disappearing off the top of the monitor.  As time went on, our rocket designs got longer and longer and more and more elaborate, and each time we typed "RUN" we watched our creations crawl up the screen and disappear back into the 8-bit universe from which it came.

It was the limitation of the medium, as well as the features of it, that bred our creativity.  It was the combination of the exact hardware and software that made it possible.   You had to experience this exact "launching" illusion in person, on an Apple IIe with Applesoft BASIC.  A few years later I tried to write the same program on my Atari 800 in Atari BASIC, and it did not have the same effect.  Not too long ago, I tried to use an Javascript Applesoft BASIC emulator (http://www.calormen.com/jsbasic/), but it too did not work the same way, updating far too quickly to create the launching animation. 

It was the right place at the right time. If I was any younger, I would not have understood what I was doing  If I was any older, I would have probably questioned and complained about the speed of the display refresh, instead embracing it as part of fabric of the universe in which were were creating our worlds.

Since that day, I've written more lines of code than I can count, and worked on 100's of games and applications.  However, I've never forgotten those rockets, or how it made me feel when we created and then "launched" them.   For me, creating these rockets in BASIC was a nuanced experience that cannot be exactingly recreated. Doing so would require a mix of  technology, wide-eyed enthusiasm, and personal naivete that existed at one exact moment, in 1979, and has been lost over the decades. 

But the affect of them lives on.

Those simple programs were the jumping off point for a life of wonder and amazement I made for myself, by sitting down behind a keyboard and typing out the ideas in my head. I may be terrible at making music, and even worse at drawing pictures, but with code I feel I have the power to weave tapestries and create realities.  Many times now, when I compile my code, have a clean build, and run my project, I feel like that 9 year old boy again. I feel that same charge of excitement, and the same thrill of accomplishment I felt back in 1979, after typing in some code, typing RUN, and watching the magic of BASIC unfold before my eyes, inching up the screen, one line at a time.

 

 

 


Related Jobs

Nix Hydra
Nix Hydra — Los Angeles, California, United States
[12.22.14]

Programmer
Bungie LLC
Bungie LLC — Bellevue, Washington, United States
[12.22.14]

Engine Programmer (Experienced)
Bungie LLC
Bungie LLC — Bellevue, Washington, United States
[12.22.14]

Tools Engineer (Lead)
AMI Entertainment Network, LLC
AMI Entertainment Network, LLC — Trevose, Pennsylvania, United States
[12.22.14]

Unity 3D Game Programmer





Loading Comments

loader image