How Low Can You Go?

Understanding external character ROM functionality on the Motorola MC6847 Video Display Generator (VDG)

I’ll be honest, I rarely use lowercase characters on any of the classic computers I use. Back in the day, of course, I needed them when writing posts on BBS systems, composing school papers, and writing general correspondence (my handwriting was never great). Still, they were always there when I needed them.

Sometimes, they came stock with the system. Others needed a bit of help, usually with a character ROM swap or popping in an updated video IC. But, some required more complex upgrades, like adding lowercase to the TANDY Color Computer. Though later models offered the updated video IC option or a newly designed video IC (CoCo 3), early models took a different approach.

Up until the CoCo 3, the CoCo utilized variants of the Motorola MC6847 Video Display Generator, commonly called the VDG. The VDG was an early video display entry, with limited graphics capabilities, first offered in 1978. The original MC6847 offered only 64 characters comprised of uppercase alphanumeric characters and the requisite punctuation and related characters. A later T1 variant included lowercase characters but was not a drop-in replacement. Both variants utlized an 8 pixel wide by 12 pixel tall character matrix, but included only a 7×5 font in ROM.

However, both variants offered the ability to utilize an external character ROM, as shown on page 23 of the MC6847 datasheet:

C6847 External character ROM support

Notice the portion in the lower right. I will admit the connection from the Display memory data lines to the address lines of the character ROM address lines confused me for a while, but a quick inquiry on the 6502.org discussion forum saw Rob Finch clear it up, noting that the display memory would provide the character value to the ROM, and the Row Counter would then provide the 12 lines of the character font address. The buffers and boolean logic serves to disable the external ROM if either the internal ROM or the semigraphics mode is selected by the programmer.

Now understanding how the ROM was used, I turned my attention to the counter component at the bottom of the diagram. Page 13 of the datasheet showed more detail, but it was somewhat confusing to understand how it worked:

Row Counter

I understand the idea of the counter, but preloading it with 9 (P3 and P0 high, P2/P1 low) made no sense. For reference, *RP is Row Preset, while *FS is frame sync and *HS is Horizontal Sync. *HS will trigger once per line, while *FS will trigger once per frame, and *RP triggers very 12th *HS, BUT there is a note in the datasheet:

Mind you, all datasheets take a bit to understand, but the timing diagram showing the relationship among these 3 signals was hard to grasp from the technical document. I could pore over it some more, but I thought it might be better to see if there was an existing external ROM product sold back in the day I could find. And, of course, there were a few, but the first I found was Green Mountain Micro’s “lowerkit” solution, which provided lowercase characters (and other goodies) for the CoCo. The next step was the find out more information about this product and how it worked.