80 Columns in Software on the Commodore VIC-20

If you have good eyesight, a well-tuned display and patience it is possible to use 80 columns in software on the VIC-20. This is really just an experiment but considering the limitations of the Vic I think the results are quite good. While it looks hard to decipher to start with, over time it becomes easier to use.

The 80 Column Character Set

In order to be able to display 80 columns on the Vic I have created a 2x8 bit character set. The characters can be seen in the image which is displaying ASCII characters 33-126.

I have taken a number of steps to help optimize the character set so that each character is as distinct as possible. The uppercase and lowercase letters are folded into a single case and use mainly lowercase letters with a few uppercase letters where they stand out more. I have used descenders for some letters such as 'p', 'q' and 'y'. The non-alphabetic characters make use of the full-height of the characters to help make them more distinct, this is particularly important for the numeric characters.

While designing the characters I was careful to consider what they would look like next to other letters - this can be seen with the 'h', for example, which if placed next to another letter will invariable look like the final down leg is present.

80 Column Software Routines

The code for this is in the display80_vic20 repo on GitHub and contains the routines to display the text in 80 columns along with some test programs.

Since the font is 2x8 this means that four characters fit side-by-side in the space of one 8x8 Vic character and therefore if we use twenty Vic columns of text we can get eighty columns across. To help increase our ability to see the character boundaries the colour of the characters alternates between blue and black every fourth eighty column character.

For comparison the text being displayed in the image is as follows.

80 columns on the Commodore VIC-20!

Supports Newline (software definable), Backspace, Tabs to next eighth column and
 ASCII 32-126 with case folded into a single case.  The fonts are 2*8 and uses h
eight and descenders to help differentiate the characters.  The numbers are tall
er for the same reason.

The standard text mode is 80*22 with the ability to switch to 20 column mode whi
ch views the 80 column screen through a movable window using the standard 8*8 fo

The alphabet:
  a b c d e f g h i j k l m n o p q r s t u v w x y z
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
The numbers:
  0 1 2 3 4 5 6 7 8 9
The rest:
  ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

Where there's a will there's a way!

20 Column Movable Window

The software also supports switching to a 20 column mode which uses a movable window to display a quarter of the 80 column screen width. In the test programs I have used the function keys: F1, F3, F5 and F7 to easily move the window between quarters of the screen width. 80 column mode is accessed using F2. The 20 column mode is particularly useful to not only clarify certain character combinations which can look similar but also to see which characters are uppercase and which are lowercase.


The following video shows the 80 column text mode in action.

Other Text Modes

This article is one of a number articles covering different text modes for the Vic. The others may also be of interest.

Creative Commons License
80 Columns in Software on the Commodore VIC-20 by Lawrence Woodman is licensed under a Creative Commons Attribution 4.0 International License.

Share This Post


Related Articles

64 Column Text Mode on the Commodore VIC-20

With a little lateral thinking and by putting the television on its side we can create a 64 column sideways text mode on the VIC-20. This article will demonstrate this and show how it is done. Previo...   Read More

Getting the Address of BASIC Variables on the VIC-20

Getting the address of a BASIC variable can be useful if you want to pass data to a machine code routine or want to access the bytes of a variable directly to improve speed and reduce garbage collectio...   Read More

Saving and Loading Memory on the VIC-20

Saving and loading memory is quite easy on the VIC-20 once you know how. However, it isn't obvious how to do this and therefore this article will present a few simple ways of doing it from BASIC and A...   Read More

Basic Line Storage on the VIC-20

BASIC programs are stored in memory using a simple structure that we can investigate and manipulate. This article will show how they are stored and contains a BASIC program to go through each line of ...   Read More

Programming in Assembly with VICMON on the VIC-20

VICMON is a machine language monitor released by Commodore in 1982 and is great for programming the VIC-20. Its interactive nature means that it can often be quicker to develop via this rather than us...   Read More