|
Features

Postmortem: Pixels Past's SCSIcide
Sidebar:
Crash Course in Atari 2600 Programming
Programming
for the Atari 2600 is unlike that of any current videogame console.
Sure, it might be an "obsolete" system with a 1MHz system
clock, only 4K of address space, 128 bytes of RAM, complex timing
constraints, and primitive sound capabilities, but that's the beauty!
The
Atari 2600 hardware (which had a project name of "Stella")
was originally intended to play Pong-style games. By design, there
is a static playfield and 5 movable objects (2 player sprites, 2
missile sprints, and a ball sprite). The elegant system design contains
three integrated circuits of note: the 6507 microprocessor (a 6502
core with no external INT pin), the 6532 Peripheral Interface Adaptor
(PIA), and the Atari-custom Television Interface Adapter (TIA),
which creates the television picture and sound.
Arguably
the trickiest part of Atari 2600 programming is the need to keep
track of the television electron beam and write to the screen when
intended. Although the TIA provides automatic horizontal timing,
the programmer needs to write to the screen on a per-line basis
within the available time (in the case of NTSC, 76 clock cycles
per scanline). The game software must also control the vertical
sync (to reposition the electron beam to the top of the screen to
start a new frame). More details of the television protocol can
be found in the Stella Programmer's Guide written by Steve
Wright in December 1979 (see resources section, below).
The
first Atari games were limited to 2K or 4K of ROM, due to the cost
of memory at the time. With specialized bank switching techniques
using logic devices, the memory space of a cartridge gradually increased
in the early 1980's to 8K and 16K. Only one released Atari game
was 32K (Fatal Run in 1990), but many homebrew games are being developed
today that will require such a size.
It
didn't take long for Atari game to break out of the intended Pong
game mechanic. Games like Activision's Pitfall! came onto
the scene with unique concepts and astonishing game graphics that
were never imagined nor intended by the original hardware designers.
Still today, continual poking and prodding by classic game programmers
are leading to new and amazing technical feats on the Atari 2600.
Many tricks have been discovered to enable such things as asymmetric
playfield drawing, displaying multiple sprites on a given scanline
without screen flicker, and creating fully customizable music scores.
The
development environment that the original game programmers had to
work with was drastically different than what we have now. The design/debug
cycle was time consuming, to say the least. Programmers had to use
time-share mainframes on which to compile their code, then burn
the resulting binary onto EPROMs and try the result on real hardware.
Later on, throughout Atari, Activision, and Imagic, emulators and
simulators running on desktop computer systems were used. Nowadays,
development is much easier. Simply write some code, compile it,
and immediately test it on an emulator or real hardware. Sounds
easy!
Most
of the development can be done right on a PC with a standard text
editor, 6502 cross assembler, and an emulator. PC-based 2600 emulators
have helped immensely to speed up the game development cycle. When
it comes time to test your game on actual hardware, you can use
a Supercharger to load the game through your sound card directly
to the 2600. There's nothing quite like playing an Atari game on
the real thing.
The
process of building cartridges for the Atari 2600 is simple. Before
SCSIcide was produced, the most common method for homebrew
developers to make their own games was to obtain common Atari 2600
games, modify the existing cartridge circuitry (removing the ROM,
cutting traces on the circuit board, soldering in a new EPROM),
clean the cartridges, and put them back together. Cartridge manufacturing
is slightly easier now given the availability of custom circuit
boards.
Within
the past three years, the classic development and gaming community
has grown greatly. Not only are people playing these older games
with a notion of nostalgia, they truly enjoy them. Current 2600
programmers are extremely helpful and willing to share their code
and experiences. The resources now available open up game development
to the masses.
Roger
Williams, a participant on the Stella Development list, sums up
programming for the Atari 2600 in a few concise statements:
"Stella
isn't a nice girl. Stella is a bitch. She seduces you, but then
you work your balls off to support her one megahertz 8-bit no-video-RAM
habit. Sweat comes off your testicles as you try to get 48 horizontal
pixels of unflickering video where you want them on the screen.
In other environments, you deploy MUL instructions and rewrite code
to increase indirection; on Stella you unroll countdown loops because
you can't afford the overhead of the DEC and BNE instructions."
I
couldn't have said it better myself. People come to the Atari 2600
for the challenge, the frustration, and the love.
Resources
1.
2600 101: A Tutorial By Kirk Israel, A detailed guide for learning
2600 programming, http://alienbill.com/vgames/guide
2.
The Stella Mailing List, Active development list for Atari 2600
programming, many helpful, technical individuals and an archive
dating back to October 1996, http://www.biglist.com/lists/stella
3.
The Dig: Stella Archive Excavation, Extensive resource list, required
documentation, and code examples archived from the Stella Mailing
List, http://www.neonghost.com/the-dig/index.html
4.
AtariAge, The ultimate resource for anything Atari, including new,
homebrew production services, message boards, history, game lists,
documentation, and more, http://www.atariage.com
5.
AtariAge: Titles In Development, List of on-going game development
projects for all Atari systems, http://www.atariage.com/development_list.html
6.
The Atari 2600 FAQ, A good starting point for beginners, http://www.atariage.com/2600/faq/?SystemID=2600
7.
Stella Programmer's Guide, The essential technical guide written
by Steve Wright in December 1979, http://www.neonghost.com/the-dig/dox/stella.pdf
8.
DASM, 6502/6507 Cross Assembler, http://alienbill.com/vgames/guide/bin/dasm.zip
9.
Paul Slocum's 2600 Music and Sound Programming Guide, Everything
you need to know about sound generation, includes Paul's music driver,
a player, an example song, and detailed instructions, http://qotile.net/sequencer.html
Emulators
1.
z26, http://www.whimsey.com/z26/z26.html
2.
StellaX, http://www.emuunlim.com/stellax
3.
PCAE, http://pcae.vg-network.com
______________________________________________________
|