Jon Relay's Apple II Info Archives
Video Display Theory
This page is based on my very limited misunderstanding of Apple II video output from 14 years ago. It is incomplete and inaccurate. Here is how Apple II video output actually works, in one big unified diagram.
This came up on comp.sys.apple2 long ago. It was in a thread about a new Apple II emulator, I think, and the author needed help with high-resolution graphics. Here was my theory at the time.
A composite video signal has a chroma and a luma signal. The luma controls the brightness of a pixel. The chroma is actually two axes on a two-dimensional surface of color. The x axis goes from magenta to green, and the y axis goes from orange to blue. At the center of each axis is white:
+-----------+ | O | O = Orange, G = Green, | | B = Blue, M = Magenta, |M W G| W = White | | | B | +-----------+
Filling in the corners, we can find the whole spectrum:
+-----------+ |R O Y| R = Red, O = Orange, | | Y = Yellow, G = Green, |M W G| C = Cyan, B = Blue, | | V = Violet, M = Magenta, |V B C| W = White +-----------+
You'll notice that the extremes of each axis look like the four high-resolution graphics colors. However, Robert Munafo posted some information a while ago about the way the Apple II generates NTSC output. The actual high-resolution graphics colors are not exactly the same as the polarities of the axes. The colors generated by the Apple II are actually twelve degrees lower in phase, but it is so little of a difference since the tint setting on your monitor is probably a little off anyway.
Someone, I don't remember who, replied that the hi-res color magenta was actually purple. The Apple people were confused when purple didn't fit on the color table (as was I), so they called it magenta in the documentation.
It wasn't in the post (although someone did reply with it) that the color group bit of each byte of graphics data determined which axis to use for color, and the two bits of each pair of columns defined the polarity of the axis at that point.
One explanation for why you get weird colors on byte boundaries was because the Apple II's composite video output wasn't exactly NTSC (or PAL). You got what was called "color bleeding." A single point of light somewhere on the screen showed a variety of colors depending on exactly where it was. The different color group bits on the bytes at the byte boundaries pushed and pulled the pixel one way or another, and that's why you get all sorts of weird colors there. The Apple IIgs has a totally different video system, but it still uses a slightly-off color-bleeding composite signal.
The earlier Apple II's used TTL logic and all that off-the-shelf stuff to display video, so the signals where just switched on and off. The Apple IIgs has a complicated microchip to handle video, so it can produce all those 4096 colors you can use. With an RGB monitor, the Apple IIgs doesn't do a very good job at putting high-resolution and double high-resolution up on an RGB screen, so you get some bad colors there. Some colors show up as all black, or all white, or a different color. And, of course, my favorite: dark green shows up as a flickering green that seems to stabilize to solid green sometimes.
Also see Robert Munafo's response to my theory.