5200 vs 7800 Display Lists

Eric Ball Wrote

"When I use a word," said Humpty Dumpty, "it means what I want it to mean." (Alice in Wonderland)

For those familiar with the Atari 5200 (or the Atari 8 bit computers) trying to learn about the Atari 7800 must be like visiting a foreign country where the people seem to speak the same language but use the same words to mean completely different things.

(Note: I've never played, much less programmed, the 5200 but I've skimmed "De Re Atari" to understand what the confusion is; and think I have the basics. Feel free to correct me.)

The 5200 has a 6502 CPU, the ANTIC video coprocessor and the GTIA video display generator. The 7800 also has a 6502 CPU but has a MARIA video coprocessor / display generator. The confusion arises because both systems use "display lists" and "display list interrupts", but there is little similarity between how the two systems use those "display lists" to generate the graphics.

First a, probably simple, overview of the how the 5200 produces graphics. On the 5200, the "display list" is a set of instructions for the ANTIC which are used to set the graphics/text mode and bitmap/character data address for a number of scan lines (based on the mode used). In addition, the GTIA has 4 player (8 bit/pixel) and 4 missile (2 bit/pixel) sprites each with a horizontal position.

The ANTIC has the ability to cause an NMI when it completes an instruction ("display list interrupt") which can be used to do a variety of things, including updating the player/missile graphics to allow them to be reused multiple times on the same screen.

One major problem with how the 5200 creates graphics is the amount of RAM required. The highest resolution graphics mode requires 8K of RAM for the bitmap data. And although the "display list interrupt" creates considerable flexibility, it can also lead to significant complexity.

Next, an overview of how the 7800 produces graphics. On the 7800 a "display list list" contains a series of 3 byte entries which contain the address of a "display list" and the number of scanlines (typically 8 or 16) to draw using the display list. Each "display list" contains a series of 4 or 5 byte entries which contain the base address of a sprite or a character map along with the palette to use for the sprite/characters, the number of bytes, and the horizontal position.

The MARIA also has the ability to cause an NMI when it completes a DLL entry ("display list interrupt" again), although the uses are far fewer than on the 5200.

The different 7800 graphics modes are defined outside of the display list by a combination of the MARIA CTRL register (horizontal resolution) and a flag in a 5 byte display list entry (colors per sprite). (It is possible to change horizontal resolution on the 7800 in mid-screen via a DLI routine, though it is of dubious value.)

The 7800 has no bitmapped graphics capability, although it could be emulated by creating a sprite in RAM (though, since the 7800 has only 4K of RAM total, it could not be full-screen). Both the 7800 and 5200 can produce user-defined characters or tiles. Where the 7800 excels is the ability to put a large number of independent sprites on the screen at once. The 5200 is limitted to the 4 player and missile sprites on a single line, while the 7800 can easily display 30 sprites on a single line.

In summary, although the 5200 and the 7800 both use "display lists" they are very different things. The 5200 display list is closer to the 7800 display list list since both define graphics coprocessor activity for a number of scanlines. But while the 5200 display entry list defines the graphics/text mode, the 7800 display list list entry simply points to the 7800 display list and the 7800 display list entry contains the address pointers to the graphics data or character map (which are contained in the 5200 display list entry). The "display list interrupt" is very similar on both systems, although the DLI routines themselves are used for very different things.Â