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/