[stella] Build up the FAQ bit by bit

Subject: [stella] Build up the FAQ bit by bit
From: Glenn Saunders <cybpunks@xxxxxxxxxxxxx>
Date: Mon, 15 May 2000 04:47:34 -0700
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/

Current Thread