MC6847 external character ROM

At one point I decided to do a remake of the “Lowerkit” for the CoCo 2.

This external character set board for the 6847 will allow for fonts other than the built in set in the VDU to be used.  A character set for the 6847 is 2048 bytes (2k), representing 128 ASCII character codes (0 – 127).

This version uses a 16k rom chip, providing room for 8 character sets selectable in banks by dip switch.

This version was one of my earlier CoCo projects, and used standard TTL logic.  Though a bit bulky, it worked just fine.  I actually still have this one installed in a Tano Dragon, where it has plenty of room.

MC6847 external character ROM prototype, top
MC6847 external character ROM prototype, bottom
20150116_182934 (1)
Installed in a CoCo2
External ROM in action
New character set with boot screen

Compared to the built in ROM

The next step will be to explore moving the logic into a cpld in order to get
the board size down, and then creating final board layouts for the various
CoCo1 and CoCo2 models.

I’ve put together an excel spreadsheet that aids in the creation of fonts for
the MC6847 that can be found at the end of this page. It lets me design a font in a visual manner, and generates the hex code for the rom.

The next board

Experimenting from the MC6847 External ROM board I put together earlier, I then built this version in part to learn about using CPLDs.

I built the earlier version using 7400 series logic, and thought migrating the design to CPLD would be a good learning exercise. I decided to use Xilinx chips, as I had already built a programmer for the PLCC version of the 9500xl family.

REV 01 MC6847 External Character ROM using CPLDs

I split the logic over 2 CPLDs as I needed more pins than one would supply (without moving to SMD). The 9572xl holds the logic for rerouting addressing to the 27C256 EPROM and handles the associated selection lines to the MC6847. The 9536xl holds a 4 bit counter and flip-flop used to handle the row addressing on the EPROM.

Outputs from these CPLDs can drive TTL inputs, and can also be configured as open-collector outputs, which I did try out, using some add-on pull-ups under the board. Useful for driving TTL with a bit more voltage than the standard output buffer allows.

Output using the External ROM

As you can see, it works pretty well. I did learn quite a bit about designing the internal logic for these CPLDs using the Xilinx ISE suite.

For the next revision I’ll adapt the design to SMD, using the VQF-64 version of the 9572xl to hold all the logic, making for a more compact board.

20150303_082444 (1)
Installed on a CoCo2 motherboard

A “final” version of the external character ROM

After my first CPLD version of the MC6847 External ROM board, I decided to make a final, more refined version. I’ve made and distributed a number of these among members of the Color Computer group, and the boards look and work great.

MC6847 External ROM – REV 03, top
MC6847 External ROM – REV 03, bottom

This version uses the 64-pin version of the Xilinx 9572xl CPLD.  I’ve made use of all the available pins, some of them even just to ease laying out the board.  The design includes a 3.3v regulator to run the 9572, and a mini CPLD programming header.

A description of what the DIP switches do is as follows…

MC6847 External Character ROM – REV 03


1 – Enable External ROM
2 – Inverse mode
3 – All Caps mode
4…7 – Bank selection 0…15 in binary

1) – Enable External ROM
Selects between MC6847’s internal ROM, and our external ROM.

2) – Inverse mode
Inverts the normal use of the INV line.  What was black on green is now green on black and vice versa.

3) – All Caps mode
To accommodate certain programs that are expecting inverted uppercase when the computer calls for a lowercase character, from the internal ROM, this mode does the following…

Decodes for any VDG calls for a lowercase character in external ROM (610h – 7A0h), and adds an offset to the address lines to the ROM chip.  Also triggers inverse mode.

The results will be like using the internal MC6847 ROM, but with the external character set.  Inverted uppercase in place of true lowercase characters.

4…7 – Bank Selection
Selects one of 16 character banks to use in binary

        Bank 0     Bank 1     Bank 2    Bank 3

        0 0 0 0    0 0 0 1    0 0 1 0    0 0 1 1

        – – – –    – – – –    – – – –    – – – –

Switch  4 5 6 7    4 5 6 7    4 5 6 7    4 5 6 7    etc….

REV03 board, installed, closeup
REV03 board, installed

Here are some screenshots of some alternate character sets and the different mode settings being displayed by a CoCo2 using the board.  This CoCo 2 is equipped with one of my composite boards including the B&W switch.  This is being used on the B&W screens.


Leave a Reply