Draft 1 (everyone please amend together!!)
1. Stella List
1.1 Who is "Stella?"
Stella was a french bicycle that Joe Decuir, one of the Atari 2600 hardware
designers, owned. He chose that name as a password for his time-sharing
account he used to develop early kernels (such as Video Olympics) and
ultimately through Jay Miner it got attached to the project and the TIA
chip (as the majority of the hard work on the Stella project was the design
of the custom TIA graphics chip itself).
1.2 What is Stella List?
Since 1996, Stella List has evolved into the center-point of hobby game
development for the Atari 2600. Stella List represents the strongest
combined brain-trust of Atari 2600 know-how in the world.
Stella List members represent programmers who work collectively to solve
technical problems, and also observers who offer game design advice and
playtesting. It is an atmosphere of peer review and healthy collaboration
that, at its best, can operate analogous to the working environment during
the golden days of 2600 development.
2. Basic VCS Programming
2.1 Why do some people say the VCS is very difficult to program?
The 6507 CPU runs in synchronization with the television scanline. The TIA
chip only has enough memory and hardware functions to draw one scanline at
a time. The 6507, through software (known as the kernel) must manually
create a list of instructions (later to become the more automated display
list system on the 400/800) which populate the TIA registers on each
scanline and perform the various video functions like vertical blanking.
Therefore even simple games require very careful programming, where you
must count individual cycles for each instruction and count scanlines drawn
in order to maintain proper video sync and graphics stability.
Cycle counting in particular is something that even old style programmers
very rarely had to do.
2.2 What experience do I need?
A good foundation in 6502 assembly language is important. But since there
is very little time inbetween frames for the 2600 to "think", you probably
won't need to learn much about assembly number crunching algorithms. Most
2600 programming is simple load and store commands to the TIA registers.
2.3 How do I get started?
6502 assembler book recommendations.
How to draw a playfield...
2.4 What CPU does the VCS use?
The 6507 is a cost-reduced (18-pin?) variant of the 6502. It has a 13-bit
address bus (8096 bytes) and the usual 8-bit data bus. In order to
simplify addressing logic, this 8K was split into two parts, the first(?)
section referring to internal registers, and the second section referencing
external (cartridge) memory.
For the purpose of its instruction set, the 6507 can be seen as identical
to the 6502.
The 6502 series is one of the most successful processor families of all
time. It features faster performance than its peers (6800 and Z80) at the
cost of fewer registers and built-in functions. This makes it ideal for
game machines which, at least in the classic era, are mostly concerned with
raw speed writing to hardware graphics registers as opposed to complex
mathematical computation ability.
Because it has relatively few instructions and only 3 registers X, Y, and
Accumulator, the 6502 is one of the easiest processors for learning
assembly language. It also has less variability in the cycle timings for
each of its opcodes than other processors. Therefore it is ideal in the
2600 context, as instructions serendipitously "line up" in such a way to
allow for on-the-fly writes and rewrites of TIA hardware registers. This
occurs with such regularity that highly complex manipulations of the TIA
chip can be attempted, many of which have results useful in game
design. Depending on how the TIA chip reacts to these writes at various
timings, whole new kinds of graphical effects can become possible. Over 20
years since the VCS debuted and there may still be some effects which have
yet to be discovered.
This is possible only because of the tight integration between the TIA and
the 6507, which, although manufactured by separate companies, seem
perfectly mated to eachother.
2.5 What graphics chip does the VCS use?
The TIA chip, also known as the Stella chip, is a 7-layered VLSI chip with
approximately 5000 gates (gotta check up on this one in my video footage).
It handles horizontal synchronization with the TV, and generates 5 sprites
and the playfield. It also has hardware collision detection and a means of
assigning hardware z-order (or overlapping priority) to these objects. It
can also perform effects on sprites, widening them or cloning them
horizontally. All of these sprite objects are available on each and every
scanline, and can have independent properties on each. Therefore the total
number of moving objects in a game can be much greater than 5.
2.5.1 What is a playfield?
This is the background graphics upon which the players (or sprites) will
animate. This is a 40 pixel by ~200 pixel grid with 1 bit depth of color
with a 7-bit fixed palette.
2.5.2 How do you draw a playfield?
2.5.3 What is a player?
A player is an 8-bit wide strip of graphics that will appear as its
assigned color (same choices as playfield) or transparent. Think of it
like a transparent GIF with only one color.
2.5.4 How do you draw a player?
A player is only 1-dimensional on the 2600. Your program (ROM) stores a
byte of memory into the player's RAM register. To give a player height,
you rewrite the player register on each scanline until he is completely
drawn.
2.5.5 How do you position a player?
To move him vertically, you start his graphic on a different scanline in
the following frame. To more him horizontally, you use a software routine
which converts a decimal number into a coarse and fine hardware position
register.
2.5.6 What is a missile?
A missile is a 1-bit wide object that shares its color register with its
associated player. It can be positioned independently of the player, but
if the player is cloned, all missiles will also be cloned.
2.5.7 How do you draw a missile?
Since a missile is only 1-bit wide, you can't really create interesting
shapes with it. It's either on or off. But you can decide its width,
color, and position for interesting effects (slashes and what not).
2.5.8 How do you position a missile?
2.5.9 What is the ball?
The ball is like the missile, only that it (can not be clone??) and its
color register is tied to that of the playfield.
2.5.10 How do you draw the ball?
2.5.11 How do you position the ball?
2.5.12 How do you detect collisions?
2.5.13 What colours can I use?
The 2600 NTSC color palette has 16 hues and 8 brightnesses of each
hue. These map to 24-bit RGB values roughly in this table:
Xxx
2.5.14 How can I display more than four colours?
2.5.15 What is PAL / What is NTSC?
2.5.16 What is the difference between PAL and NTSC?
2.6 How much memory does the VCS have?
RAM is provided through the 128 bytes of zero page in the 6507 which it
shares with the stack. (The stack holds return addresses for subroutines.)
2.7 What I/O chip does the VCS use?
A 6532 "RIOT" chip is used.
2.7.1 How do I read the joystick positions?
2.7.2 How do I read the fire buttons?
2.7.3 How do I read the paddles?
2.7.4 How do I read the keypads?
2.8 What sound chip does the VCS use?
The TIA chip is not only a graphics chip but also a rudimentary sound
chip. It uses polynomial counters (pseudorandom number generators) and
various clock dividers to generate different tones and distortions on those
tones.
These tones do not match up perfectly to the diatonic musical scale. A
chart was created to provide relative note values and their actual
frequency (in hertz):
INSERT OUR CHART
3. Advanced VCS Programming
3.1 How can you display more than two players?
3.2 How can the two halves of the playfield be different?
3.3 How can I use six digit displays?
The six digit display, also known as the six-character-display or the
six-char is actually not digits or characters per se, but six
sprites. These sprites represent player 1 and player 2 cloned into 3
copies with wide spacing, lined up in such a way that they overlap
eachother, forming a 48-pixel block which the programmer can use to draw
graphics. Typically, cloned sprites must share the same graphics
data. However, since the 6507 is free to overwrite graphics registers
while the scanline is being drawn, a properly timed kernal has just enough
time to rewrite player copies inbetween the TIA's drawing operation for
each sprite.
This is typically used in score routines, but can also be used to display
narrow but higher-resolution blocks of graphics for things like title
displays, or even moving objects like the drag racers in Dragster. When
moving these objects, a very precise time-wasting kernel is employed to
adjust the positions and rewrite-time of the kernel. This severely limits
any sort of playfield manipulations.
3.4 How do you display a screen of text?
The 2600 has no hardware fonts or text capabilities. These must be
generated in software.
3.5 How can I use more than 4KB of ROM?
3.6 How can I use more than 128B of RAM?
Since the phase2 (clock) and read/write lines were omitted from the
cartridge port for cost purposes, RAM on the cartridge can not be supported
through conventional means. The Starpath Supercharger, Superchip, and CBS
Ram Plus all provide elaborate means of providing external RAM to the 2600.
Of these, the Starpath Supercharger is probably the only one hobby gamers
would likely support, since most who frequent Stellalist own Superchargers
to use as development stations since game code can be downlaoded into them.
3. Developing Your Project
3.1 Can this possibly be fun?
The joy from 2600 programming comes from the challenge. The challenge is
in fitting your game into constrained memory. While you could write a
large banked ROM game, most people write for 4K because it's easier to
cannibalize common cartridges (Pac-Man especially) for distribution. 4K
also fits neatly in the Supercharger for easy debugging.
The challenge also comes in taking an idea for a game and find a way to
make it happen given the quirks of the 2600 hardware. The end result
represents many individual tradeoffs of the programmer which are very
apparent to the player in how the game looks and feels. Now to the bad
programmer, these limitations will get the best of him, but to the good and
persistent programmer, he can find a middle-ground where everything becomes
balanced. Like working within the constraints of a rigid poetic structure
such as haiku, a programmer's style shows through in the end product far
more than would be evident from other systems.
Also, remember that far more is expected from games on the PC than any one
programmer can create within a reasonable span of time. To write a PC game
of professional quality is beyond the scope of a hobbyist. You could write
a game which played like a fancy 2600 title much faster than writing for
the 2600, but it would likely be ignored or scoffed by the PC gamer. The
2600 provides programmers with an individual creative outlet in which
simplicity is an inevitability, and therefore criticisms about the art and
the sound are eliminated. The coder is free to focus on the core aspects
of gameplay. He also knows that there is a small but solid group of people
who will really appreciate his work.
As far as comparisons with developing for other consoles, it's simply not
viable to do grass roots development for modern consoles. Developer
machines are very expensive. So some satisfaction can be gained from being
able to actually have a game distributed in cartridge form for a real
console system.
3.2 Can I make money from this?
3.3 How can I use Stella list?
Game development works best when the programmer periodically shares his
source code to the list. This is typically done through attaching a .BIN
file and a ZIP of the sourcecode (or just inserting it as plaintext into
the body of the message). The list (or peers) review the soruce code and
often find ways for the code to be more efficient. The less technical play
around with the assembled BIN file. They act as beta testers and game
testers, finding visible bugs and offering advice in how to make the game
look and play better.
The most critical period for game development is the last 10%. This can be
the most frustrating. You've worked on your game so much you're burned
out, but people keep on asking for new features and tweaks. The temptation
is to just ship it. But if you know it can be better, and other people on
the list help out to free up bytes and processor time, then keep whittling
at it. It could mean the difference between a good game, and a great one.
3.4 Will someone make cartridges for me?
Insert Hozer Video info.
3.5 Will anyone buy my cartridges?
4. Software Projects to date
5. Hardware Projects to date
6. Web resources
------------------------------------
Regards,
David Schweinsberg
--
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/
Glenn Saunders - Producer - Cyberpunks Entertainment
Personal homepage: http://www.geocities.com/Hollywood/1698
Cyberpunks Entertainment: http://cyberpunks.uni.cc
--
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/