Commodore Vic/C64
Commodore VIC-20  (1980)
◄ Back to Computers

Commodore VIC-20

The Commodore VIC-20 was announced in 1980, three years after the first personal computer that Commodore made, the PET. The VIC-20 was hugely successful, it was the first computer to sell more than a million units.

In Germany the comptuer was introduced as the VC-20, since the word VIC sounds like a German expletive, and was marketed as the VolksComputer (People's Computer). In Japan the computer was marketed as the VIC-1001.

The aim of the VIC-20 was to be more affordable than the PET. The computer was equipped with only 5K of RAM, but used the same MOS 6502 CPU as the PET. The Video chip was a general-purpose color video chip designed by Al Charpentier in 1977 and intended for use in terminals and game consoles, but Commodore could not find a market for it. The chip was rebranded as the MOS Technology VIC and used in the VIC-20.

The VIC-20 really opened up the market to low-price computers selling at retail stores to the general public, rather than professionals or people with an electronics background. In that way, the VIC-20 really was the "People's Computer".

There was a sizable library of software for the VIC-20. The VIC-20 BASIC is compatible with the PET, and the Datasette format for tape is the same. Commodore actively promoted third-party development of software and also created a fan-base that produced a lot of public domain and freeware distributed through online services such as CompuServe, BBSs, as well as through clubs and user groups. Magazines published listings that people could type-in, another way to distribute and share software.

Commodore BASIC

Commodore BASIC was a dialect of Microsoft BASIC, licensed by Commodore in 1977 for use in the PET 2001. It ran from ROM, freeing all RAM for user programs, and provided an immediate programming environment upon power-up. The interpreter was built on the 6502 processor, with tightly coded routines for tokenization, line storage, and execution. This structure allowed BASIC statements to be entered interactively, stored in memory as linked line records, and executed sequentially or via branching constructs. Commodore kept this design across its entire 8-bit product line, from the PET and VIC-20 to the Commodore 64 and beyond, creating a sense of continuity between machines.

Historically, Commodore BASIC differed from many other implementations in its limited feature set relative to machine capabilities. For example, the original PET BASIC lacked dedicated graphics or sound commands, requiring programmers to manipulate memory directly through PEEK and POKE. Even later versions, such as BASIC V2 on the C64, still omitted high-level graphics and sound statements, in contrast with Atari BASIC or BBC BASIC, which provided structured access to system hardware. Only with extended versions such as BASIC 3.5, 4.0, and 7.0 did Commodore add disk commands, string handling improvements, and more advanced features.

When compared to contemporaries, Commodore BASIC was often criticized as being underpowered, but its simplicity made it approachable. BBC BASIC, for example, incorporated structured programming constructs and inline assembler, whereas Commodore’s offering retained the line-numbered, unstructured style of early Microsoft BASIC. Atari BASIC, developed separately, emphasized graphics and sound integration through dedicated keywords. Commodore’s approach forced users to learn the underlying memory map, making them more technically literate about hardware but also raising the entry barrier for certain types of applications.

Despite its limitations, Commodore BASIC achieved massive popularity due to sheer reach. Millions of units shipped with it as the only built-in interface, ensuring every user interacted with it directly. Its ubiquity in schools, homes, and small businesses made it a de facto teaching language for a generation. Moreover, the reliance on PEEK and POKE, while cumbersome, fostered a culture of type-in listings and hardware exploration. This combination of accessibility, wide distribution, and necessity cemented Commodore BASIC’s role as one of the most influential programming environments of the late 1970s and 1980s.

Commodore BASIC Versioning

  • BASIC 1.0 (PET 2001, 1977)

    Computers: Commodore PET 2001
    Features: Essentially a stock Microsoft BASIC interpreter running in ROM, with support for integer and floating-point arithmetic, strings, arrays, and file operations for tape storage.
    Limitations: No disk commands, no advanced error trapping, and no machine-specific extensions. Designed as a minimal environment to ship the PET quickly.
  • BASIC 2.0 (VIC-20, C64, C-MAX, 1981–1982)

    Computers: VIC-20, Commodore 64, Commodore MAX Machine
    Features: Nearly identical to BASIC 1.0 with minor bug fixes, provided the same core Microsoft BASIC functionality.
    Limitations: No disk drive commands, no dedicated graphics or sound statements. Hardware had to be accessed through POKE and PEEK.
  • BASIC 3.5 (Commodore 16, C116, Plus/4, 1984)

    Computers: Commodore 16, Commodore 116, Commodore Plus/4
    Features: Added graphics and sound commands (GRAPHIC, CIRCLE, PAINT, SOUND, PLAY), integrated disk commands (DLOAD, DSAVE, DIRECTORY), plus utilities like RENUM and TRON/TROFF.
    Limitations: Still line-number oriented and lacked the structured programming richness of competitors like BBC BASIC.
  • BASIC 4.0 (PET/CBM Business Series, 1979+)

    Computers: PET/CBM 4000 and 8000 series
    Features: Expanded disk support with DLOAD, DSAVE, DIRECTORY, COPY, and SCRATCH. Improved error handling suitable for commercial environments.
    Limitations: Focused on business and disk operations, no graphics or sound capabilities because target hardware lacked them.
  • BASIC 7.0 (C-128, 1985)

    Computers: Commodore 128
    Features: Added high-level graphics (DRAW, CIRCLE, PAINT) and sound (PLAY, SOUND) commands, advanced disk operations, structured programming constructs like WHILE...WEND, RENUM, and support for memory banking and multi-mode operation.
    Limitations: Despite enhancements, still less sophisticated in structured constructs compared to BBC BASIC or contemporary Pascal-like systems.
  • BASIC 10.0 (C-65 prototype, 1990–1991)

    Computers: Commodore 65 (prototype, unreleased commercially)
    Features: Extended support for high-resolution graphics and larger color palettes through VIC-III, up to 8 MB memory addressing, advanced string handling, and structured commands.
    Limitations: Never commercially released, so its practical impact was negligible despite advanced features.

Video - The Video Interface Chip (VIC)

The VIC (Video Interface Chip), specifically known as the MOS Technology 6560 (NTSC version) / 6561 (PAL version), is the integrated circuit chip responsible for generating video graphics and sound in the VIC-20 home computer from Commodore.

The VIC chip is not only for video display. It also integrates sound and support for analog devices through its sound circuitry and its AD converters. This allows for light-pens and other peripherals on the VIC-20

Features:

  • 16KByte address space for screen, character and color memory. (In the VIC-20 only 5KByte points to RAM)
  • 16 Colors (Upper 8 can only be used in global background and auxiliary colors)
  • Two selectable character sizes (8x8 or 8x16, the first for multi-color, the second for "hires" modes)
  • 176x182 resolution (256x280 possible on PAL; 248x232 possible on NTSC)
  • 4 Channel integrated sound circuitry; 3 square waves + a white noise channel.
  • On-chip DMA
  • Two 8-bit AD converters
  • Light pen support

CPU - The Motorola 6502

The 6502 is an 8-bit MicroProcessor designed by MOS Technology. The team was led by Chuck Peddle and had also worked on the Motorola 6800. The 6502 is a simplified, but faster and cheaper design than the 6800.

The 6502 was introduced in 1975 and was the cheapest microprocessor on the market. Together with the Zilog Z80, the 6502 helped start the home computer revolution of the 1980s. The 6502 was used in a wide range of devices: the Atari 2600, the 8-bit Atari home computers, the Apple II, the Nintendo Entertainment System, the Commodore 64, the BBC Micro and many others. All used the 6502 or a variation of it.

The 6502 is a 1MHz design, while the 6502A is designed for 2MHz. The 6502A is 100% compatible with the original 6502.

Commodore soon bought MOS Technology, but conitnued to sell the microprocessor to competitors and licensed the design to other manufacturers.

Source: WikiPedia - MOS Technology 6502

The 650x Instruction Set

Mnemonic Operation Description
ADCAdd with CarryAdds a memory location and the carry bit to the accumulator.
ANDLogical ANDPerforms a logical AND between memory and the accumulator.
ASLArithmetic Shift LeftShifts all bits one position to the left (in memory or accumulator).
BCCBranch on Carry ClearBranches to a new address if the carry flag is clear (0).
BCSBranch on Carry SetBranches to a new address if the carry flag is set (1).
BEQBranch on Equal (Zero Set)Branches to a new address if the zero flag is set (1).
BITBit TestTests bits in memory with the accumulator without modifying the accumulator.
BMIBranch on MinusBranches to a new address if the negative flag is set (1).
BNEBranch on Not EqualBranches to a new address if the zero flag is clear (0).
BPLBranch on PlusBranches to a new address if the negative flag is clear (0).
BRKForce BreakForces an interrupt request and pushes status and PC to the stack.
BVCBranch on Overflow ClearBranches to a new address if the overflow flag is clear (0).
BVSBranch on Overflow SetBranches to a new address if the overflow flag is set (1).
CLCClear Carry FlagClears the processor carry flag.
CLDClear Decimal ModeClears the processor decimal mode flag.
CLIClear Interrupt DisableClears the interrupt disable flag, allowing maskable interrupts.
CLVClear Overflow FlagClears the processor overflow flag.
CMPCompare AccumulatorCompares the contents of a memory location with the accumulator.
CPXCompare X RegisterCompares the contents of a memory location with the X register.
CPYCompare Y RegisterCompares the contents of a memory location with the Y register.
DECDecrement MemorySubtracts one from the value held at a specified memory location.
DEXDecrement X RegisterSubtracts one from the X register.
DEYDecrement Y RegisterSubtracts one from the Y register.
EORExclusive ORPerforms a logical Exclusive OR between memory and the accumulator.
INCIncrement MemoryAdds one to the value held at a specified memory location.
INXIncrement X RegisterAdds one to the X register.
INYIncrement Y RegisterAdds one to the Y register.
JMPJumpSets the program counter to a new address.
JSRJump to SubroutinePushes the return address to the stack and jumps to a new address.
LDALoad AccumulatorLoads a byte of memory into the accumulator.
LDXLoad X RegisterLoads a byte of memory into the X register.
LDYLoad Y RegisterLoads a byte of memory into the Y register.
LSRLogical Shift RightShifts all bits one position to the right (in memory or accumulator).
NOPNo OperationPerforms no operation, consuming 2 machine cycles.
ORALogical Inclusive ORPerforms a logical OR between memory and the accumulator.
PHAPush AccumulatorPushes a copy of the accumulator onto the stack.
PHPPush Processor StatusPushes a copy of the status flags onto the stack.
PLAPull AccumulatorPulls a byte from the stack into the accumulator.
PLPPull Processor StatusPulls a byte from the stack into the processor status flags.
ROLRotate LeftRotates all bits one position left through the carry flag.
RORRotate RightRotates all bits one position right through the carry flag.
RTIReturn from InterruptPulls the processor flags and program counter from the stack.
RTSReturn from SubroutinePulls the program counter from the stack and resumes execution.
SBCSubtract with CarrySubtracts memory and the inverse of the carry bit from the accumulator.
SECSet Carry FlagSets the processor carry flag.
SEDSet Decimal FlagSets the processor decimal mode flag.
SEISet Interrupt DisableSets the interrupt disable flag, preventing maskable interrupts.
STAStore AccumulatorStores the contents of the accumulator in memory.
STXStore X RegisterStores the contents of the X register in memory.
STYStore Y RegisterStores the contents of the Y register in memory.
TAXTransfer Accumulator to XCopies the current value of the accumulator into the X register.
TAYTransfer Accumulator to YCopies the current value of the accumulator into the Y register.
TSXTransfer Stack Pointer to XCopies the current value of the stack pointer into the X register.
TXATransfer X to AccumulatorCopies the current value of the X register into the accumulator.
TXSTransfer X to Stack PointerCopies the current value of the X register into the stack pointer.
TYATransfer Y to AccumulatorCopies the current value of the Y register into the accumulator.
Technical Details
Released
1980
Country
United States
Brand
Commodore
Type
Commodore Vic/C64
Name
Commodore VIC-20
CPU Class
650x
CPU
MOS 6502 @1.10MHz
Memory
RAM: 5kB
Sound Chip
MOS 6561 VIC
Sound
3 wave channels + 1 white noise channel
Display Chip
VIC (MOS 6561)
Display
22x23 text
176x185 in 16 colors
Best Text
22x23
Best Color
16 colors
Graphics
176x185 in 16 colors
Sprites
no sprites
System OS
Commodore KERNAL/BASIC 2.0
Storage
External Tape through the Datasette Tape Connector
ROM cartridges.
Original Price
$299.95
Related Systems 💾
Commodore PET/CBM - 2001/3000 Series
Commodore CBM 4000 Series
Commodore CBM 8000 Series
Commodore CBM-II 500 Series
Commodore CBM-II 600 Series
Commodore CBM-II 700 Series
Commodore C16
Commodore Vic/C64
Commodore Amiga
Commodore Amiga Desktops
Commodore Personal Computer
External Links 🌐
MOS Technology VIC
Wikipage about the VIC Chip
MOS 6502 CPU Wiki Page
The 6502 is an 8-bit MicroProcessor designed by MOS Technology.