VIC-20 Graphics

Commodore VIC-20 Video Demonstration

Phone: 555-6520

            ╔═══════════════════════════════════════════════════╗
            ║                                                   ║
            ║      ┌────────────────────────┐                  ║
            ║      │                        │                  ║
            ║      │    ████  ████  ████    │                  ║
            ║      │    █  █    █   █       │                  ║
            ║      │    █  █    █   █       │                  ║
            ║      │     ██   ████  ████    │                  ║
            ║      │                        │                  ║
            ║      │    VIC-20 TEST         │                  ║
            ║      │    WATCH I BLINK!      │                  ║
            ║      │                        │                  ║
            ║      └────────────────────────┘                  ║
            ║                                                   ║
            ║         V I C - 2 0   V I D E O                  ║
            ╚═══════════════════════════════════════════════════╝

Introduction

Welcome to the VIC-20 Graphics demonstration on the Emulator.ca Systems network.

The Commodore VIC-20 holds a special place in computing history. Released in 1981, it was the first computer of any kind to sell one million units. At a launch price of US$299.95, it brought colour computing to households that had never dreamed of owning a computer. Jack Tramiel's vision of "computers for the masses, not the classes" found its purest expression in this cheerful little machine with its 22-column display and 5 kilobytes of RAM.

The VIC (Video Interface Chip, the MOS 6560 in NTSC markets and MOS 6561 in PAL) was the VIC-20's namesake and its defining component. Unlike the later VIC-II in the Commodore 64, the original VIC chip produced a smaller display---22 columns by 23 rows in its standard configuration. It offered 8 foreground colours, a configurable background and border, and shared the same PETSCII character set as its successors. What it lacked in resolution it made up for in charm; the VIC-20's chunky graphics and vivid colour palette gave it a distinctive personality that C64 owners would quietly envy.

This demonstration emulates the VIC-20's text mode through a MOS 6502 CPU core. Screen RAM, colour RAM, and VIC registers are faithfully mapped to their original addresses. The demo renders the word "VIC" in large block graphics using PETSCII solid block characters, with an animated blinking "I"---a small tribute to the machine's playful spirit.

This is a video-mode backend. The display is rendered from emulated video memory at 30 frames per second, not through ANSI escape sequences. The 22x23 character grid reflects the authentic VIC-20 screen dimensions.

Features

Quick Start

  1. Dial 555-6520 from the EC-TTY main menu
  2. The VIC-20 video display initialises automatically
  3. Watch the "VIC" block art with blinking "I" animation
  4. Type characters to write to the VIC-20 screen
  5. Hang up to disconnect
ATDT555-6520
CONNECT 14400

**** VIC-20 VIDEO TEST ****

Getting Connected

Dialling In

ATDT555-6520

Upon connection, the following initialisation sequence occurs:

  1. The MOS 6502 WASM emulator module is loaded
  2. The CPU is created and reset
  3. A 22x23 virtual terminal is initialised
  4. Video memory is cleared (spaces with green foreground)
  5. VIC registers are configured for standard text mode
  6. The "VIC" block letter display is drawn to screen RAM
  7. The blinking animation timer begins (toggling every 500ms)
  8. The VIC-20 text adapter begins rendering at 30 fps

Modem Profile

VIC-20 Graphics uses the V.32bis modem profile (14,400 baud) for smooth framebuffer streaming.

The VIC Display

Screen Layout

The VIC-20 displays 22 columns by 23 rows---noticeably smaller than the C64's 40x25 grid. This was a deliberate design choice by Commodore to reduce memory requirements. At just 506 bytes for screen RAM, the VIC-20 could devote more of its limited 5 KB to programme storage.

    Row 0:  ┌────── 22 columns ──────┐
    Row 1:  │                          │
    ...     │  Screen RAM: $1000-$11F9 │
    Row 21: │  Colour RAM: $9600-$97F9 │
    Row 22: └──────────────────────────┘

The VIC Colour Palette

The VIC-20 supports 8 foreground colours per character cell:

Index Colour Notes
0 Black
1 White
2 Red Used for "V" in the demo
3 Cyan Used for "I" in the demo, background
4 Purple
5 Green Default foreground, border
6 Blue
7 Yellow Used for "C" in the demo

The default configuration sets the background to cyan and the border to green, approximating the VIC-20's classic power-on appearance.

The VIC-20 supports only 8 foreground colours compared to the C64's 16. The extended colours (orange, brown, light red, greys, light green, light blue) were introduced with the VIC-II chip. If you want to see the full 16-colour palette, dial 555-6502 for the C64 Graphics demo.

PETSCII and Block Graphics

The VIC-20 shares the same PETSCII character encoding as the C64. The demo makes particular use of the solid block character ($A0), which fills an entire character cell with the foreground colour. By arranging these blocks in patterns, the demo creates large "VIC" lettering---a technique widely used in the 8-bit era for title screens and decorative displays.

Each letter in the demo is 4 characters wide by 5 characters tall:

    V:  █  █      I:  ████      C:  ████
        █  █          ██            █
        █  █          ██            █
         ██           ██            █
         ██           ████          ████

VIC Registers

The emulation provides the key VIC chip registers:

Address Register Function
$9000 Screen Origin H Horizontal screen origin
$9001 Screen Origin V Vertical screen origin
$9002 Columns Number of display columns (bits 0-6)
$9003 Rows Number of display rows (bits 1-6), char height (bit 0)
$9005 Character Address Video and character memory addresses
$900E Auxiliary Colour Auxiliary colour (bits 4-7), volume (bits 0-3)
$900F Background/Border Background (bits 4-7), reverse (bit 3), border (bits 0-2)

Background/Border Register ($900F)

    Bits 7-4: Background colour (0-15, but VIC-20 only has 8 distinct colours)
    Bit 3:    Reverse mode
    Bits 2-0: Border colour (0-7)

The demo sets this register to $35, giving cyan (3) background and green (5) border.

The Blinking Animation

The centrepiece of this demonstration is the blinking "I" in the "VIC" display. Every 500 milliseconds, the "I" letter alternates between visible (drawn in cyan block characters) and invisible (replaced with space characters). This simple animation demonstrates how the VIC-20's screen RAM can be manipulated in real time to produce visual effects.

The animation runs entirely through JavaScript timer callbacks that write directly to the emulated screen and colour RAM---the same approach a VIC-20 programme would take, except that on original hardware, the programme would be running on the 6502 and writing to memory-mapped I/O.

Memory Map

Address Range Contents
$0000-$0FFF System RAM (4 KB)
$1000-$11F9 Screen RAM (506 bytes, 22x23)
$1200-$1FFF User programme area
$9000-$900F VIC chip registers
$9600-$97F9 Colour RAM (506 nybbles)

Input

Characters typed on your terminal are sent to the emulated UART and echoed to the screen at the current cursor position.

Supported Input

Key Behaviour
Printable characters Written to screen RAM at cursor position
ENTER / Return Carriage return (cursor to column 0)
Line Feed Cursor moves down, scrolls if at bottom
BACKSPACE / DEL Erases character behind cursor
TAB Advances cursor to next 8-column boundary

When the cursor reaches the bottom of the 22x23 display, the screen scrolls up by one line. The scroll implementation reads all screen and colour RAM, shifts the data up by one row, and clears the bottom line. This matches the VIC-20's native scrolling behaviour.

Command Reference

Command Description
Any printable key Write character to screen at cursor
ENTER Carriage return
BACKSPACE / DEL Erase previous character
TAB Advance to next tab stop
Hang up Disconnect from the demo

Quick Reference Card

╔══════════════════════════════════════════════════════════════════════╗
║  VIC-20 Graphics - QUICK REFERENCE              Emulator.ca Systems ║
╠══════════════════════════════════════════════════════════════════════╣
║                                                                      ║
║  DIAL: 555-6520                     CATEGORY: Vintage Hardware      ║
║                                                                      ║
║  DISPLAY:   22x23 text mode         ENCODING:  PETSCII             ║
║  COLOURS:   8 foreground            REFRESH:   30 fps              ║
║  CPU:       MOS 6502                ANIMATION: 500ms blink cycle   ║
║                                                                      ║
║  VIDEO MEMORY:                                                      ║
║    Screen RAM:  $1000-$11F9 (506 bytes)                             ║
║    Colour RAM:  $9600-$97F9 (506 nybbles)                          ║
║    BG/Border:   $900F                                               ║
║                                                                      ║
║  DEFAULT COLOURS: Green on cyan (classic VIC-20 appearance)        ║
║                                                                      ║
║  DEMO: "VIC" in block letters with blinking I animation            ║
║  INPUT: Type characters to write to screen. Hang up to disconnect. ║
║                                                                      ║
╚══════════════════════════════════════════════════════════════════════╝

Troubleshooting

Problem: Screen appears blank

The VIC-20 display is smaller than most terminal windows (22x23 characters). Ensure your terminal window is large enough to display the rendered output. If the display remains blank after several seconds, disconnect and redial.

Problem: Block graphics appear as wrong characters

PETSCII block characters ($A0) are mapped to Unicode block elements for display. If your terminal font does not include these Unicode characters, the blocks may render as question marks or empty squares. Use a font with full Unicode block element support (most modern monospace fonts include these).

Problem: Animation is not visible

The blinking "I" animation toggles every 500ms. If your connection is very slow, frame updates may not arrive frequently enough to show the animation. At 14,400 baud (V.32bis), the animation should be clearly visible.

Problem: Colours look different from a real VIC-20

The VIC-20 colour palette is approximated using ANSI terminal colours. The exact shade of each colour depends on your terminal emulator's colour scheme. For the most authentic experience, use a terminal with a colour scheme modelled on the VIC-20's NTSC or PAL output.

Problem: Typed characters do not appear

Characters are written to screen RAM at the current cursor position. If the demo programme has written content to the screen, your typed characters will overwrite it. The cursor starts at position (0, 0)---the top-left corner. If the demo has drawn over this area, your input may be hidden behind the animation.

See Also


VIC-20 Graphics -- Commodore VIC-20 Video Demonstration

Emulator.ca Systems

Document Revision 1.0