Dilettante Habits

Knowing nothing about everything

c64 Font Sizes

Abstract: Common font sizes on the c64 with some examples.

Topics: typography, c64

© Copyright Daniel Krajzewicz, 19.04.2020 02:50, cc by


On modern PCs, each character (letter) glyph exists as a vector representation and is rendered onto a bitmap for being shown as pixels. Older home computers used a bitmap representation of character glyphs directly. The text screen consisted of a matrix of rows and lines where every entry (byte) pointed to the according character's bitmap. The bitmap of the actual character glyph to show was read from a memory area that contained the “character set” or “charset”. As the pointer was one byte, 256 different character glyphs could be addressed.

The standard c64's character set consisted of 128 different characters with a size of 8×8 pixels each. The second half of the 256 characters contained the inverted version of the first 128 characters.

Figure 1: The default c64 character sets.

The c64 allowed for loading and showing an own, custom charset. One could easily change the address (origin) where the character set to display should be read from. Thereby, own character sets could be used in demos, games, etc. The most basic method was to draw an own character set of 8×8 pixel chars. Yet, different methods were established for realising bigger fonts. By combining more than one character glyphs, it was possible to show character sets that were bigger than 8×8 pixels. In the following, some character sets I designed for the c64 are given, including the description of common methods for building bigger character sets.

I hope that I did not claim that I've done something albeit I did not — please let me know if you know better; thirty years are quite a long time.

Plain 1×1 Character Sets

The next table shows basic 8×8 charsets I've done. Nothing special at all.

Abraham v2.1
intro#1, ATA
Abraham v1.3, ‘Steve’ message writer, Higher Level part #2
Fast One part #1
Higher Level part #4, intro#2
Made in Berlin
Movie Scroller, Loser, Higher Level part #3
No Wonder part #7
Open Sesame part #2
c16 ATA

Besides those hires charsets, I also made a multicolour 1×1 charset you may find below. Using multicolour divides the x-resolution by two. As a result, you have only 4×8 pixels instead of 8×8 pixels for each single character.


Building Bigger Character Sets

As said, bigger charsets were possible by combining two or more characters. As seen in Figure 1, the 256 characters include a lot of “uncommon”, “special” characters that are not used in written language. Yes, they were used for ASCII-art, e.g., but that's not what is described, here. For our purpose, the generation of bigger character sets, the inverted characters were not necessary. Using them as a second part of a character reduces the number of available characters to 128, but allowed for building characters of 8×16 or 16×8 pixels. One can as well use the upper case characters, additionally. This reduces the number of available characters to 64, enough for writing text, and increases the maximum size to 16×16 characters by composing a character using four chars.

1×2 Character Sets

Below, you may find some characters that are 16 pixel high and 8 pixel wide, composed from two 8×8 pixel characters, respectively.

Abraham v2.1
intro#1, ATA
Movie Scroller
c16 ATA

2×1 Character Sets

One could find as well characters with a width of 16 pixel and a height of 8 pixels.

Higher Level part #2

2×2 Character Sets

As said, 2×2 character sets could store only 64 characters. Each character was composed from four chars.

No Wonder part #6
No Wonder part #7
Higher Level part #2

Even Bigger Character Sets

Even bigger character sets were possible using charpacking. Charpacking allows re-using the same 8×8 (or 4×8 multicolour) pixel tile as a part of different chars within a bigger character. This was as well used to design bigger logos.Abraham” is a c64 tool for charpacking, I wrote. A more modern approach is included in my c64 Python tools.

The following one from ATA (1992) is 2 chars (16 pixels) high and variable in width, between 1 char (8 pixels) and 5 chars (40 pixels). Note that's it multicolour, yet using only two colours.

ATA multicolour Xby2

This may not look that fascinating at first, but it could be rendered as show below by changing both colours in each line.

ATA multicolour XbyX with an alternative rendering

The following one is even older, taken from the “At Last” demo (1991). It's 24 pixel (3 chars) wide and 16 pixels (2 chars) high per default. But it's proportional as well — smaller characters, such as “i” may be less wide. And it only looks well when being coloured.

AtLast part #2 3×2 character set

The next one is from “No Wonder” (1991). Seems not very nice at a first view, but using multicolour made some nice effects possible.

No Wonder part #1 4×1 character set

The biggest one is from “Made In Berlin” (1990). It's five chars (40 pixels) wide and 9 chars (72 pixels high).

Made In Berlin part #5 5×9 character set

Further Notes

While trying to replicate charset-based to bitmap-based implementations of compound characters, one could as well do the opposite — transfer c64 characters to vector fonts. This was done by building a true type font representation of the original c64 character set. One may also think of porting other c64-character sets to true type fonts, yet, I suppose the results won't match current quality due to being monospaced and lacking any kind of information about kerning.


Creative Commons Attribution 4.0 International
Your message

Supporting an e-mail address allows us to answer.

Your message has been sent. Thank you.