Loading...
 

The TIA and the CPU

Let's spend this session having a look at how some of the hardware generates a scanline for the TV. Remember in session 2, we had a good look at how a TV works, and in particular how a TV frame is composed of 262 scanlines (NTSC) or 312 scanlines (PAL). It's the programmer's job to control how many scanlines are sent to the TV, but it is the '2600 which builds the actual signal comprising the colour and intensity information for any scanline. This colour and intensity information is derived from the internal 'state' of the TIA (Television Interface Adaptor) chip inside the '2600. The TIA is responsible for creating the signal for a single scanline for the TV.

The TIA 'draws' the pixels on the screen 'on-the-fly'. Each pixel is one 'clock' of the TIA's processing time, and there are exactly 228 colour clocks of TIA time on each scanline. But a scanline consists of not only the time it takes to scan the electron beam across the picture tube, but also the time it takes for the beam to return to the start of the next line (the horizontal blank, or retrace). Of the 228 colour clocks, 160 clocks are used to draw the pixels on the screen (giving us our maximum horizontal resolution of 160 pixels per line), and 68 clocks are consumed during the retrace period.

The CPU's clock is derived from the TIA clock through a divide-by-three. That is, for every single clock of CPU time, three clocks of TIA time have passed. Therefore, there are *exactly* 228/3 = 76 cycles of CPU time per scanline. The CPU and TIA perform a complex 'in-step' dance - one cycle of the CPU, three cycles of TIA . A side-note: 76 cycles per line x 262 lines per frame x 50 frames per second = the number of CPU clock cycles per second for NTSC (= 1.19MHz, roughly).

So, as our 6502 program is executing its instructions, the TIA is also sending data for each scanline. Every cycle of CPU time we know that the TIA has sent 3 colour clocks of information to the TV. If the TIA was in the first 68 colour clocks of the scanline, then it was in the horizontal retrace period. If it was in colour clock 68-227, then it was drawing pixels on the visible scanline. And so we go, the CPU doing its stuff and at the very same time the TIA doing its stuff. The magic happens when you start changing the 'state' of the TIA, because those changes are reflected immediately in the TIA output to the TV! Since the CPU is 'locked' to the TIA through their shared timing origin, it is possible for the programmer to know exactly where on a scanline the TIA is currently drawing (ie: what pixel). And knowing where the TIA 'is at' allows us to change what it is drawing at particular positions on the scanline. We don't have much scope for change, but we do have some. And it is this ability that master '2600 programmers use to achieve all those amazing effects.

Naturally, to achieve this sort of precision timing, programmers have to know exactly how long the CPU takes to do each instruction. For example, a load/store combination takes a minimum of 5 cycles of CPU time. How many onscreen pixels is that? Remember, 3 colour clocks per CPU cycle, so that's 3 x 5 = 15 pixels. Essentially, if one were using the quickest possible load/store combinations to change the colour of, say, the background, then the absolute quickest this could be done (of course, without modern hardware assist techniques) would be every 15 pixels (ie: just on 11 times per scanline).

Don't despair! It is not necessary for you to learn how to count 6507 cycles at this stage. Those sort of tricks are for more advanced '2600 programming - and the original design of the TIA hardware made this unnecessary. It's only when you need to push the hardware (TIA) beyond its original design, that you will come to appreciate the benefit inherent in the way that the CPU and TIA are intricately tied together. If you do want to look at counting cycles, the dasm manual has useful tables showing these timings.

Also

Programming for Newbies
previous Television Display Basics
next The TIA