Display List Opcodes
There are three main groups of display list opcodes. There are also some modifiers which may be added to the basic opcodes, much like a sharp or flat may be added to a musical note. Just as certain notes may not have a sharp or flat added, certain display list opcodes may not have certain modifiers.
Here are the groups:
1. Blanking opcodes.
When ANTIC encounters one of these, it generates a certain number of blank scan lines, in the color and luminance of the background or border. It does not look to display memory or do anything else, it just generates blank scan lines. From 1 to 8 blank scan lines can be generated by these opcodes. The blank lines, like any display block, extend fully across the screen horizontally.
Modifiers: Only a display list interrupt modifier may be added to blanking opcodes.
2. Character/Graphics opcodes.
When ANTIC encounters one of these, it fetches bytes from display memory, determines the graphics mode, and puts a display on the screen. A complete list of these opcodes is available in the previous chapter.
Modifiers: Horizontal scroll, vertical scroll, load memory scan and a display list interrupt modifiers may be added to these opcodes.
3. Two special codes.
JMP is a JUMP for ANTIC. It tells ANTIC to continue looking for instructions at a different address. It is equivalent to a GOTO in the display list. It is followed by the 16 bit address of the next opcode.
JVB (Jump and wait for Vertical Blank) tells ANTIC to jump to the start of the display list, and wait for a new screen refresh to begin. It is followed by the 16 bit address of a display list to execute when the next screen refresh begins. You've seen this before, at the end of the graphics 0 display list.
Modifiers: Only a display list interrupt may be added to a jump opcode.
4. Special instructions.
JMP 01 hex (1 decimal)
JVB 41 hex (65 decimal)
To add a modifier to a given opcode, just add the value given for that modifier to the base opcode, then use the total as the opcode.
1. Horizontal Scrolling.
This capability added to an instruction means that the display block may be horizontally scrolled. Add 10 hex or 16 decimal.
2. Vertical Scrolling.
This capability allows smooth vertical scrolling. Add 20 hex or 32 decimal.
3. Load Memory Scan.
(A 3 byte instruction is implied if you use this modifier.) This tells ANTIC where to find display memory, and resets ANTIC's pointer to the location, losing the current display memory pointer location. Add 40 hex or 64 decimal to the opcode.
4. Display List Interrupt.
The execution of this instruction causes ANTIC to force the 6502 to generate an interrupt. The interrupt service routine will be at the address pointed to by memory locations 200, 201 hex (512, 513 decimal).
We have covered "playfield graphics" (or graphics generated by the display list), ANTIC, and CTIA hardware in some depth. You now know how to generate some amazing graphics.
There is much information to present here. We will give lots of examples and ideas for their use to help you understand. The ANTIC opcodes allow you to mix graphics modes, to program display memory for mixed modes, and to format display memory.
In the next section, we will cover display list interrupts and color handling in detail as a method for achieving 128 colors on the screen at the same time. The actual goal (the 128 shades of color) is not nearly as important as the method behind it, but without the end point to work towards, the information presented is not useful or functional. By the end of the section, you will be able to generate the 128 color display and you will also have a good idea of how the Atari handles color.
After we cover display list interrupts, we will examine Player-Missile graphics. This is a separate graphics generation system that is independent of display lists and other special graphics features of the Atari. Player-Missile graphics allow high speed animation.