Video Display Generator
|It has been suggested that this page be merged with VDG (Discuss)|
|It has been suggested that this page be merged with Motorola 6847 (Discuss)|
The MC6847 is display generator capable of displaying text and graphics contained within a roughly square display matrix 256 pixels wide by 192 lines high. It can display 9 colors: black, green, yellow, blue, red, buff (almost-but-not-quite white), cyan, magenta, and orange.
The CoCo is physically wired such that its default alphanumeric display is actually "Semigraphics 4" mode.
In alphanumeric mode, each character is a 5 dot wide by 7 dot high character in a box 8 dots wide and 12 lines high. This display mode consumes 512 bytes of memory and is a 32 character wide screen with 16 lines. The internal ROM character generator only holds 64 characters, so no lower case characters are provided. Lower case characters were rendered as upper case characters with inverted color. Although simulated screen shots would show this as green on black, on most CoCo generations it was actually green on very dark green.
Semigraphics is a hybrid display mode where alphanumerics and chunky block graphics can be mixed together on the same screen. If the 8th bit of the character is set, it is a semigraphics character. If cleared, it is an alphanumeric. When the 8th bit is set, the next three bits determine the color and last 4 bits determine which "quadrant" of the character box is either the selected color or black. This is the only mode where it is possible (without sneaky tricks) to display all 9 colors on the screen simultaneously. If used to only display semigraphics, the screen becomes a 64×32 9 color graphics mode. The CoCo features several BASIC commands to manage this screen as a low-res graphics display.
The alphanumeric display has two colorsets. The one used by default on the CoCo has black characters on a green background. The alternate has black characters on an orange background. The colorset selection does not affect semigraphics characters. The border in this mode is always black.
The 6847 is capable of a Semigraphics 6 display mode, where two bits select a color and 6 bits determine which 1/6 of the character box is lit. In this mode only 4 colors are possible but the Colorset bit of the VDG can select two different groups of the 4 colors. Due to a peculiarity of its hardware, only two colors are available in graphics blocks when using Semigraphics 6 on the CoCo.
Additional Semigraphics modes
By setting the SAM such that it believes it is displaying a full graphics mode, but leaving the VDG in Alphanumeric/Semigraphics 4 mode, it is possible to subdivide the character box into smaller pieces. This creates the "virtual" modes Semigraphics 8, 12, and 24. In these modes it was possible to mix bits and pieces of different text characters as well as Semigraphics 4 characters. These modes were an interesting curiosity but not widely used, as the Semigraphics 24-screen consumed 6144 bytes of memory. These modes were not implemented on the CoCo 3.
A programmer's reference manual for the CoCo states that due to a fire at Tandy's research lab, the papers relating to the semigraphics modes were shuffled, and so some of the semigraphics modes were never documented. CoCo enthusiasts created experimental programs to try to reverse engineer the modes, and were able to reconstruct the missing documentation.Template:Citation needed
There were several full graphics display modes, which were divided into two categories: "resolution" graphics and "color" graphics. In resolution modes, each pixel is addressable as either on or off. There are two colorsets available, the first was black dots on a green background and green border, the second, more commonly used one has white dots on a black background with a white border. In color modes, each pixel was two bits, selecting one of four colors. Again the colorset input to the VDG determined which colors were used. The first colorset has a green border, and the colors green, yellow, red, and blue were available. The second colorset has a white border and the colors white, cyan, magenta and orange were available. Resolution graphics have 8 pixels per byte and are available in 128×64, 128×96, 128×192, and 256×192 densities. Color graphics have 4 pixels per byte and are available in 64×64, 128×64, 128×96, and 128×192 densities. The maximum size of a graphics screen is 6144 bytes.
The 256×192 two color graphics mode uses four colors due to a quirk in the NTSC television system (see composite artifact colors). It is not possible to reliably display 256 dots across the screen due to the limitations of the NTSC signal and the phase relationship between the VDG clock and colorburst frequency.
In the first colorset, where green and black dots are available, alternating columns of green and black are not distinct and appear as a muddy green color. However, when one switches to the white and black colorset, instead of a muddy gray as expected, the result is either orange or blue. Reversing the order of the alternating dots will give the opposite color. In effect this mode becomes a 128×192 4 color graphics mode where black, orange, blue, and white are available (the Apple II created color graphics by exploiting a similar effect).
Most CoCo games used this mode as the colors available are more useful than the ones provided in the hardware 4 color modes. Unfortunately the VDG internally can power up on either the rising or falling edge of the clock, so the bit patterns that represent orange and blue are not predictable. Most CoCo games would start up with a title screen and invited the user to press the reset button until the colors were correct. The CoCo 3 fixed the clock-edge problem so it was always the same; a user would hold the F1 key during reset to choose the other color set.
On a CoCo 3 with an analog RGB monitor, the black and white dot patterns do not artifact; to see them one would have to use a TV or composite monitor, or patch the games to use the hardware 128×192 four color mode in which the GIME chip allows the color choices to be mapped. Users in PAL countries saw green and purple stripes instead of solid red and blue colors.
Readers of The Rainbow or Hot CoCo magazine learned that they could use some POKE commands to switch the 6847 VDG into one of the artifact modes, while Extended Color Basic continued to operate as though it were still displaying one of the 128×192 four-color modes. Thus, the entire set of Extended Color Basic graphics commands could be used with the artifact colors. Some users went on to develop a set of 16 artifact colorsTemplate:How using a 4×2 pixel matrix, giving this set of colors: black, dark cyan, brick red, light violet, dark blue, azure (the blue above), olive green, brown, purple, light blue, orange, yellow, light gray, blue-white, pink-white, and white. Use of POKE commands also made these colors available to the graphics commands, although the colors had to be drawn one horizontal line at a time. Some interesting artworks were produced from these effects, especially since the CoCo Max art package provided them in its palette of colors.
Lower case and the 6847T1
The 6847 is capable of using an external character generator. Several third party add-on adapter boards would allow the CoCo to display real lowercase characters.
Very late in the CoCo 2 production run, an enhanced VDG was available. Called the 6847T1, it included a lower case character generator and the ability to display a green/orange or black border on the text screen. Its other changes were mainly to reduce parts count by incorporating an internal data latch. The lower case capability of this VDG is not enabled by default on this system and is not even mentioned in the manual. Only through some tinkering and research was this feature discovered by intrepid CoCo users.
The 6847T1 may also carry the part number XC80652P; these may have been pre-release parts.