Fact-checked by Grok 2 weeks ago

MOS Technology VIC-II

The MOS Technology VIC-II (Video Interface Controller II) is a chip developed by , Inc., best known for powering the graphics in the Commodore 64 released in 1982. It supports a range of display modes, including 40×25 character text graphics with 8×8 pixel cells, high-resolution bitmap graphics at 320×200 pixels, and multicolor bitmap mode at 160×200 pixels, all using a fixed palette of 16 colors. The chip also features eight movable hardware sprites, each 24×21 pixels and expandable in size, with capabilities for multicolor rendering, priority layering, and collision detection between sprites and the background or other sprites. Additionally, it provides programmable raster interrupts for precise timing, light pen input support, and automatic DRAM refresh, addressing up to 16 KB of video memory including 1 KB of dedicated color RAM. Designed primarily by engineer Albert Charpentier at 's LSI Group, the VIC-II's development commenced in January 1981, achieving first-pass silicon by November of that year and prototypes by late December, enabling its unveiling at the January 1982 Winter alongside the 64. Fabricated in 5-micrometer NMOS technology and operating at approximately 8 MHz, the chip evolved from the earlier 6560 used in the , with significant enhancements to handling—allocating two-thirds of its die area to support the eight sprites—and overall graphical flexibility. Variants include the 6567 for systems and the 6569 for PAL, along with later HMOS-II revisions like the 8562 and 8565 for improved efficiency in subsequent models such as the 128. These features made the VIC-II a cornerstone of the 64's appeal, enabling sophisticated games, demos, and applications that leveraged its interrupt-driven timing for effects like smooth scrolling and flexible line interpretation.

Development and History

Origins and Design Goals

The VIC (6560/6561) chip, introduced in the in 1980, represented an early effort to bring affordable color graphics to the consumer market but suffered from significant limitations in and color handling. Its standard display offered a of 176×184 pixels in high- , with multicolor reducing to effectively 88 pixels by halving the dot width per character cell, which constrained visual detail for games and applications. Color support was restricted to a 16-color palette, but with only three global colors available in multicolor (background, auxiliary, and two from color RAM), and upper palette colors limited to background and border uses, the chip often resulted in washed-out visuals on consumer televisions due to insufficient signal drive. These shortcomings positioned the VIC as inadequate for competing with higher-end systems like the Apple II's 280×192 with six colors or 8-bit computers' 320×192 monochrome (with a 128-color palette available in multicolored modes at lower resolutions), prompting to seek a more capable successor amid the booming early market. Conception of the VIC-II chip began in late 1980 as part of 's strategy to develop an inexpensive color computer system to challenge market leaders and , with initial design work ramping up under in January 1981. The project originated from a broader initiative to create custom graphics and sound chips for what was initially envisioned as a , but evolved into the 64 platform to deliver a full-featured at a retail price around $595, emphasizing of MOS chips to minimize costs. Key motivations included addressing the VIC's deficiencies by enabling richer visuals for gaming and productivity, while maintaining compatibility with the 6502-series CPU ecosystem that had pioneered. Specific design goals for the VIC-II centered on achieving fixed colors from a vibrant palette, a 320×200 in high-resolution mode (with multicolor halving to 160×200), and support for eight movable sprites to facilitate smooth animations without taxing the CPU. Integration with the 6502 processor was prioritized through a simple memory-mapped register interface, allowing seamless access to video RAM within a KB , all while targeting a production cost under $10 per chip to keep the overall system around $130. These objectives aimed to balance performance and affordability, enabling features like graphics and character modes that surpassed contemporaries without requiring expensive external components. Early prototypes encountered substantial challenges, including an initial video chip design that failed to meet timing and performance specifications due to issues, necessitating revisions such as the addition of a for stable color generation. Prior efforts, like the MOS 6562 graphics chip developed for Commodore's canceled TOI (The Other Intellect) computer project in , had also faltered owing to stringent memory timing requirements that demanded costly high-speed , rendering it unviable for and influencing the VIC-II's more pragmatic . These setbacks delayed first to November but ultimately refined the chip into a reliable, low-cost solution.

Key Contributors and Timeline

The development of the MOS Technology VIC-II was led by key engineers at , Inc., a subsidiary of . Albert Charpentier served as the primary logic designer, drawing on his prior experience leading the LSI Group at MOS and designing the original MOS Technology 6560 VIC chip used in the computer. Charles Winterble, often credited as Charlie Winterble, handled chip layout and managed the engineering team, building on his role in earlier MOS projects including prototypes for the . Their collaboration was part of a secretive effort to create advanced custom chips for Commodore's next-generation . Design work on the VIC-II began in late 1980, with full development ramping up by early under Charpentier and Winterble's direction. The team conducted a market survey of contemporary home computers and video games to inform features, finalizing the amid constraints of MOS's in-house fabrication capabilities. occurred in early using a 5-micron NMOS process, which presented initial fabrication challenges due to yield issues and timing sensitivities inherited from prior chip iterations. Key milestones included overcoming these process hurdles through iterative testing phases in late 1981, with first silicon arriving in November 1981 for validation of video timing and color generation stability. The VIC-II design was completed by November 1981, enabling integration into the Commodore 64 prototype. The chip debuted in the Commodore 64, released in August 1982, marking a significant upgrade over the original VIC in terms of graphical capabilities while maintaining compatibility goals from the project's origins. Subsequent revisions supported PAL and variants for international markets.

Core Features

Display and Resolution Capabilities

The MOS Technology VIC-II video controller supports a standard of 320 × 200 in high-resolution mode and 160 × 200 in multicolor mode, derived from its 40 × 25 matrix where each occupies an 8 × 8 cell. In , the visible area typically spans 40 columns by 24 or 25 rows, adjustable via control registers to enable features like smooth scrolling, which reduces the effective display to 38 columns by 24 rows. These resolutions are constrained by the chip's fixed raster timing, with the total horizontal width extending to approximately 418 in variants (including borders and areas) and 403 in PAL variants. The VIC-II operates at a vertical of 60 Hz for systems and 50 Hz for PAL systems, synchronized to the host system's clock frequency of 1.023 MHz () or 0.985 MHz (PAL) for the CPU, with the video dot clock running at roughly 8.18 MHz () or 7.89 MHz (PAL). This timing ensures compatibility with standard standards, where supports up to 262 total raster lines (with 234 visible) and PAL up to 312 lines (with 284 visible). Output from the VIC-II is provided as separate luminance (including sync) and chrominance signals, which are combined externally to produce composite video suitable for direct connection to a television or monitor. In typical Commodore 64 implementations, these signals feed into an RF modulator for channel 3 or 4 TV broadcasting, enabling RF output over coaxial cable, though the modulator introduces some signal degradation compared to direct composite. The chip's border, controlled by register $D020, surrounds the active display area and can extend into overscan regions, with the full horizontal extent including left/right borders of 24–31 pixels each in standard configurations. Hardware constraints include a fixed 40-column limit, 8 × 8 blocks, and a 16-color palette comprising primary colors (, red, cyan, purple, green, blue, yellow) with four levels for each of the four basic hues, plus additional mixes for a total of 16 distinct shades. These limits define the VIC-II's output fidelity, prioritizing compatibility with 1980s consumer televisions while supporting integration for dynamic overlays within the same resolution bounds.

Graphics Modes and Primitives

The MOS Technology VIC-II supports five primary modes, selected via the (Extended Color Mode), BMM (Bitmap Mode), and MCM (Multi-Color Mode) bits in the at address $D011. These modes enable a range of display options, from character-based text rendering to pixel-level , all within a standard resolution of ×200 pixels for high-resolution output or 160×200 pixels in multicolor configurations. In standard (ECM/BMM/MCM = 0/0/0), the screen displays 40×25 , each drawn from an 8×8 font stored in character memory, using a single foreground color per against a global background. Multicolor (0/0/1) divides each into 4×8 blocks, allowing up to four colors per for more vibrant displays. Extended color (1/0/0) expands the character set to unique glyphs and assigns four background colors directly to each via attribute bits, enhancing flexibility without altering . Standard mode (0/1/0) treats the screen as an 8×8 grid across 40×25 blocks, enabling direct manipulation with colors derived from the video . Multicolor mode (0/1/1) halves the horizontal to 160×200 but permits four colors per 4×8 block, facilitating filled with reduced detail. Combinations like extended color with (1/1/0 or 1/1/1) result in invalid black-screen states. The VIC-II's hardware primitives center on eight independent sprites, each 24×21 pixels in standard size (or 12×21 in multicolor), positionable anywhere on the screen with individual coordinates. Sprites support expansion to double width and/or height for larger 48×42 pixel objects, multicolor operation with four hues, and priority layering over background . Additional primitives include support, which latches the raster position upon detecting a light pulse via dedicated input pins, enabling interactive pointing at 320×200 resolution. Basic line drawing and other vector primitives rely on software algorithms, as the chip lacks dedicated for such operations beyond sprite and mode-based rendering. Screen memory organization allows flexible banking within the VIC-II's 16 address space, divided into four selectable 16 banks controlled by the CIA #2 chip's port A bits. The default configuration maps screen (video ) memory to addresses $0400–$07FF (1 for 40×25 s), with memory (2 ) at $1000–$17FF or data (8 ) at $2400–$3BFF, respectively; these can be repositioned via register $D018 (screen in 1 increments, in 2 increments). pointers and data occupy 64-byte blocks, adjustable in 64-byte steps. This banking facilitates efficient sharing with the CPU while supporting up to 64,000 pixels per in full 320×200 high-resolution mode. Performance is constrained by the VIC-II's cycle-stealing mechanism, where "badlines"—occurring every eighth raster line within the visible area (lines $30–$F7 when display enable is set)—halt the CPU for 40–43 cycles to fetch pointers, ensuring for updates. This results in a maximum of approximately ,000 visible pixels per frame, though effective throughput depends on mode and sprite activity. Color application across modes draws from a 16-color palette, with backgrounds and attributes influencing rendering in text and bitmap variants.

Technical Architecture

Memory Organization and Mapping

The MOS Technology VIC-II graphics chip accesses a 16 KB address window within the system's memory, determined by 14 address lines (A0–A13), allowing it to interface with up to 64 KB of total RAM through bank selection mechanisms. In the Commodore 64 implementation, this window is configurable into one of four 16 KB banks ($0000–$3FFF, $4000–$7FFF, $8000–BFFF, or C000–FFFF) via bits in the CIA #2 port A register at DD00, enabling flexible mapping of graphics data without altering the CPU's full 64 KB view. Screen , also known as the video matrix, occupies 1 (1,000 bytes) and stores codes or pointers for display generation, typically located at $0400 in the default configuration but adjustable in 1 increments via the VIC-II's control register at D018. Associated color [RAM](/page/Ram), a dedicated 1 [KB](/page/KB) region at fixed address D800–DBFF, provides 4-bit color values for each screen position, accessed in [parallel](/page/Parallel) with screen [memory](/page/Memory) fetches to support per-[character](/page/Character) coloring in text and extended color modes. The [character](/page/Character) generator ROM, holding 8x8 [pixel](/page/Pixel) definitions for up to 256 characters (2 [KB](/page/KB) total), resides at $1000–$1FFF by default, configurable in 2 [KB](/page/KB) steps via D018, and is fetched row-by-row during raster scans. In bitmap mode, the VIC-II utilizes an 8 KB region for pixel data, defaulting to $2000–$3FFF and adjustable in 8 KB steps via D018, with the 8 KB holding data for 200 pixel rows (40 bytes per row for 320 pixels), organized into 25 groups of 8 rows each corresponding to the character matrix positions. Memory access occurs primarily during the first phase of the system clock (φ2 low), granting the VIC-II priority over the CPU, which operates in the second phase; however, conflicts arise on "badlines"—every eighth raster line within the display area (lines $30–F7 when display enable is active)—where the VIC-II requires 40–63 consecutive cycles to fetch character pointers, stalling the CPU via the BA (bus available) line to ensure timely screen refresh. Sprite pointers, briefly, are stored within the upper portion of screen memory ($3F8–$3FF) to define sprite data locations.

Register Interface and Programming

The VIC-II provides a memory-mapped interface for controlling its operations, with 47 registers accessible at addresses D000 through D02E in the Commodore 's I/O space. These registers are mirrored every 64 bytes across the range D000 to D3FF, allowing flexible access but requiring programmers to account for the duplication to avoid unintended overwrites. Key registers include D011, which controls the low 8 bits of the raster line comparison (shared with control bits), display enable (DEN, bit 4), bitmap mode (BMM, bit 5), extended color mode (ECM, bit 6), row select (RSEL, bit 3), and vertical scrolling (YSCROLL, bits 2-0); D016, which handles horizontal scrolling (bits 2-0), column select for extended resolution (CSEL, bit 3), and multicolor mode (MCM, bit 4); and $D018, which sets the base addresses for video memory (VM bits 7-4, multiples of $400) and character memory (CB bits 3-1, multiples of $800). These registers enable core functions such as display control and memory mapping, with reads from them also providing status information like light pen coordinates or interrupt flags. Initialization typically begins by configuring D018 to point to the desired screen memory location, such as POKE 53272,17 to set the video [matrix](/page/Matrix) at $0400 and [character](/page/Character) memory at $2000 (in decimal equivalents for [BASIC](/page/Basic)). Display is then enabled by setting the DEN bit in D011 (e.g., POKE 53265, 23 for standard with scrolling disabled). A basic raster synchronization loop can be implemented in using LDA D012 to read the current raster line and STA D012 to set the line, ensuring timing alignment with the VIC-II's 63 cycles per line. Programming the VIC-II involves direct register writes via 6502 instructions like LDA #$1B; STA D011 for mode setup, or [BASIC](/page/BASIC) POKE statements such as POKE 53248, 0 to zero a [sprite](/page/Sprite) pointer. For precise timing, [interrupt request](/page/Interrupt_request) (IRQ) handling is essential: enable raster interrupts by setting bit 0 in D01A, configure the line in D012, and service the IRQ routine by checking and clearing bit 0 in D019 (write 1 to acknowledge). This allows synchronization with the electron beam for effects like mode switching without visual glitches. Common pitfalls include overlooking register mirroring, which can lead to redundant writes if code assumes unique addresses, and failing to synchronize CPU operations with the VIC-II's clock, as the chip steals cycles during bad lines (when the raster reaches the configured row in D011), potentially stalling the 6502 and causing timing errors in interrupt-driven code. Programmers must also ensure that writes to D018 occur during blanking periods to prevent screen corruption from memory pointer changes.
RegisterAddressKey Functions
$D01153265Raster line (low 8 bits, shared), (display enable, bit 4), vertical scroll (bits 2-0)
$D01653270 scroll (bits 2-0), CSEL (extended columns, bit 3), MCM (multicolor, bit 4)
$D01853272Video base (VM), base (CB)

Color Palette and Generation

The MOS Technology VIC-II features a fixed 16-color palette, defined by 4-bit color codes ranging from 0 to 15, with each code corresponding to a specific hardware-generated color. These include (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), light (A), dark grey (B), medium grey (C), light (D), light (E), and light grey (F). The palette is generated on-chip using (Y) and (U/V) components derived from a color subcarrier clock—3.579545 MHz for variants (e.g., 6567) and 4.433619 MHz for PAL variants (e.g., 6569)—to produce signals compatible with standards. RGB approximations of these colors vary between and PAL due to differences in color encoding ( for vs. for PAL), resulting in hue shifts and intensity variations; for example, PAL approximates to RGB(104, 55, 43), while is typically brighter and more saturated, approximating RGB(142, 72, 0). Color selection for display elements is managed through a dedicated 1 KB color RAM located at memory addresses D800–DBFF, consisting of 1024 bytes where the lower 4 bits (nibble) of each byte specify the primary color for the corresponding screen position, enabling per-character or per-block coloring in graphics modes. In multicolor modes (enabled via bit 4 of register D016, MCM, for both character and bitmap modes when bitmap mode is active), the color RAM byte provides two 4-bit values: the lower nibble selects one additional color (MC0, for 2-bit code 01), and the upper nibble selects another (MC1, for 2-bit code 10), combined with background color 0 (D021) for code 00 and an extra color ($D025) for code 11, allowing up to four colors per 4×8 pixel block at reduced 160×200 resolution. This setup supports multicolor character (MC00–MC03) and bitmap modes by interpreting 2-bit pairs from the bitmap data to index into these colors, with the color RAM ensuring independent foreground and background assignments per cell. Color generation involves priority-based compositing for overlays, where the border and background colors (D020 for border, D021–D024 for up to four backgrounds) set baseline luminance levels, and sprite (multicolor intermediate bitmap, or MIB) colors (D027–D02E) are blended according to programmable priorities. Sprites can be placed behind the background (via bit 6 of D01B) or in front, with fixed inter-sprite priority (sprite 0 highest, sprite 7 lowest); when overlapping, the higher-priority sprite's color replaces lower ones without additive blending, though transparency bits in sprite data allow underlying layers to show through. Luminance is controlled globally via the border register, which extends beyond the active display area and influences overall video levels, while the VIC-II's internal DAC mixes luma (from 0–32 discrete levels in later revisions) with chroma phases at fixed 16 angles on the for hue. In character and bitmap modes, these colors are applied by fetching from color RAM during raster scans, with multicolor enabling smoother gradients through the four-color blocks. The VIC-II's color system has notable limitations, including the absence of a true grayscale ramp, as the three grey shades (B, C, F) are fixed luminance steps without adjustable hue or saturation, relying instead on the palette's discrete luma values (e.g., 0 for black, 32 for white in 8-level implementations). Additionally, composite video output suffers from color bleeding, where adjacent chroma signals interfere due to the low-resolution YUV encoding and lack of separate luma/chroma filtering, causing hues to smear across high-contrast edges—particularly evident in NTSC due to its narrower bandwidth compared to PAL. These constraints stem from the chip's cost-optimized design, prioritizing compatibility with 1980s television standards over modern RGB precision.
Color CodeNamePAL RGB Approx.NTSC RGB Approx. (Example)
0Black(0, 0, 0)(0, 0, 0)
1White(255, 255, 255)(255, 255, 255)
2Red(104, 55, 43)(142, 72, 0)
3Cyan(112, 164, 178)(0, 212, 176)
............
15Light Grey(189, 189, 189)(208, 208, 208)
(Note: Full RGB values vary by revision and measurement; approximations derived from YUV conversion with . Ellipsis indicates selective examples for brevity.)

Graphics Functionality

Character and Bitmap Modes

The MOS Technology VIC-II supports two primary background modes: mode for text-based displays and mode for pixel-addressable . In mode, the display is organized as a 40-column by 25-row , where each cell renders an 8x8 selected from a 256-entry set stored in a 2,048-byte ROM or RAM . The video matrix, a 1,000-byte area in screen , holds 8-bit pointers to these characters, with each pointer determining the 8 bytes of data fetched from the base . This mode enables efficient text rendering, with the set including predefined for attributes such as reverse video (achieved by selecting codes 128–255, which invert patterns relative to codes 0–127) and underline (implemented via dedicated characters like the full-width underline ). Color in standard character mode uses a single foreground color per character, selected from 16 palette entries via the low 4 bits of the corresponding color location (D800–DBFF), while the background color is global from register D021.[13] Enabling multicolor character mode (via bit 4 of register D016) divides each 8x8 character into four 4x8 pixel blocks, allowing up to four colors per character: the global background from D021, two additional backgrounds from D022 and D023, and a fourth color from the low 3 bits of color [RAM](/page/Ram) (colors 0–7), with bit 3 of color [RAM](/page/Ram) set to enable multicolor for that position.[2][16] This expands visual expressiveness for text, such as in games or interfaces, while maintaining the 320x200 effective resolution. The character generator base is configurable in 2,048-byte increments via bits 1–3 of register D018, and the video matrix base in 1,024-byte steps via bits 4–7 of the same register. Bitmap mode provides direct pixel control, rendering a 320x200 monochrome display (1 bit per pixel) or a 160x200 multicolor variant (2 bits per pixel, four colors). Pixel data is packed 8 bits per byte across an 8,192-byte bitmap area, with the video matrix repurposed to supply color information for each 8x8 block: in monochrome, the low 4 bits set the foreground color (for set pixels), with the global background from D021 for clear pixels, and the high 4 bits unused; in multicolor (bit 4 of D016), 2-bit pairs map to the global background (D021), auxiliary backgrounds (D022–$D023), and video matrix color bits. The VIC-II fetches bitmap bytes sequentially, using a row counter (0–7) to select the vertical offset within each block and the video counter (derived from the 40x25 matrix position) for horizontal progression. Switching between character and bitmap modes is controlled by bit 5 of register D011 (BMM): cleared for character mode (default) and set for bitmap mode, which overrides character fetches with direct bitmap data starting from the eighth raster line of each text row.[13] The bitmap base address is derived from the character base bit 3 (CB13 in D018, shifting in 8,192-byte steps) combined with video matrix counter bits and the row counter, effectively positioning the 8K bitmap relative to screen memory. For example, in a typical configuration with the video matrix at $0400 and character base at $1000 (CB13=0), the bitmap base aligns at $2000, calculated as the video base offset integrated into the fetch addressing ($2000 = base + offset derived from VM10 set in D018).[10] Scrolling can be applied to both modes via horizontal and vertical shift registers (D011 bits 0–2 and $D016 bits 0–2), adjusting the display window without altering base addresses.

Sprite System

The MOS Technology VIC-II graphics chip includes hardware support for eight movable object blocks, commonly known as sprites, which enable dynamic foreground elements independent of the background display. These sprites are particularly useful for applications requiring animation, such as game characters or cursors, and are fetched directly from system memory by the VIC-II via (DMA). Each sprite measures 24 pixels wide by 21 pixels high in high-resolution (hi-res) mode, where each is represented by a single bit, allowing for two colors: the 's assigned color or transparent. In multicolor mode, the width effectively halves to 12 pixels, enabling up to four colors per by interpreting pairs of bits. The data for one occupies 63 bytes in , consisting of three bytes per scanline across 21 lines (with each byte controlling eight pixels), typically aligned to 64-byte boundaries for convenience. Sprite pointers, located at the end of the screen area (offsets $3F8–$3FF relative to the video base ), specify the starting of this data for each of the eight sprites. Positioning of sprites is controlled through dedicated registers in the VIC-II's I/O space. The X-coordinate (0–255 pixels) for each sprite is set using the low eight bits in registers D000–D00E (for sprites 0–7), with the ninth bit (for positions beyond 255) stored in D010. The Y-coordinate (0–255 pixels) is set in D001–D00F. Horizontal expansion, doubling the width to 48 pixels, is enabled per sprite via bits in D01D (MxXE), while vertical expansion, doubling the height to 42 pixels, uses $D017 (MxYE); both can be applied simultaneously for 48×42 pixels. These expansions do not alter the underlying data resolution but replicate pixels for scaling. Sprite priorities and interactions are managed through additional control registers. Among sprites, priority is fixed in numerical order, with sprite 0 having the highest precedence over sprite 7; relative to the , each sprite's layering is set via bits in D01B (MxDP), where a 0 places it in front and 1 behind. Collisions are detected automatically: sprite-to-sprite overlaps set bits in D01E (MxM), and sprite-to-background overlaps set bits in D01F (MxD), both triggering raster interrupts if enabled via D019. These flags must be cleared by software to detect subsequent events. Each sprite is assigned a color from the 16-color palette using registers D027–D02E. For animation, the VIC-II fetches sprite data via during the active raster period, performing three memory accesses per visible scanline per active to load the relevant bytes into internal buffers. This process repeats for each line the is visible on, based on its Y-position. To exceed the limit of eight simultaneous s, techniques reuse the hardware by altering positions and pointers mid- using raster interrupts, though bandwidth constrains the total to approximately 120 pixels of height across all instances per .

Scrolling and Raster Effects

The MOS Technology VIC-II enables smooth of the area through hardware-controlled offsets, allowing pixel-level adjustments without requiring software-based shifts. Horizontal is managed by the XSCROLL bits (0-2) in D016, which shift the screen content to the right by 0 to 7 pixels with 3-bit granularity, effectively delaying the start of character data fetches during each scanline.[2] Vertical [scrolling](/page/Scrolling) operates similarly via the YSCROLL bits (0-2) in [register](/page/Register) D011, offsetting the downward by 0 to 7 pixels and influencing the timing of row counter resets. Coarse adjustments to position can be achieved by selecting different rows or columns through screen , complementing the fine offsets for broader repositioning. Raster interrupts provide precise synchronization with the beam's vertical position, facilitating advanced manipulations such as split-screen effects. These interrupts are triggered by setting a target raster line in register D012 (an 8-bit value from 0 to 255, with bit 8 in D011 for lines 256-311), generating an IRQ when the beam reaches that line. This allows programmers to alter VIC-II parameters mid-frame, such as changing border colors or modes to create banded effects or vertical holds that stabilize scrolling across frame boundaries. Badlines represent a key aspect of the VIC-II's raster timing, where forced (DMA) occurs to fetch character pointers and reset the 3-bit row , ensuring consistent display of text or rows. These badlines activate on every eighth line within the visible area (starting from raster line $30, adjusted by YSCROLL), during which the VIC-II steals 40 to 43 CPU cycles per line for memory access, potentially disrupting timing-sensitive operations. The mechanics of badlines interact with by shifting their positions vertically, which can be exploited for effects like flexible line distancing, though they impose constraints on CPU availability during raster interrupts. Representative effects enabled by these features include horizontal fine scrolling up to 7 pixels, which produces fluid side-to-side motion in and demos by leveraging XSCROLL's per-scanline delay. Vertical hold via raster synchronization maintains stable positioning during smooth vertical scrolls, preventing by aligning interrupts with position changes. Split-screen techniques, achieved through raster IRQs, divide the display into independent zones—such as a status bar at the top and main graphics below—by modifying registers like $D011 for screen enablement mid-frame. These capabilities, rooted in the VIC-II's timing architecture, allowed for dynamic visuals in resource-constrained systems despite the era's hardware limitations.

Variants and Revisions

Standard VIC-II Versions

The standard VIC-II chips were produced in several variants tailored to different video standards and markets, all sharing the core architecture for generating video signals, refresh, and graphics primitives in the Commodore 64. These NMOS implementations operated on a 5 V supply voltage, with an additional 12 V on pin 13 (V_DD) for internal video in the NMOS process. The early versions used a 40-pin package, initially in for reliability but later switched to for without altering functionality. The 6567 was the original variant designed for North American 64 models, featuring 60 Hz timing with 262 raster lines and 65 color clocks per line to support the full 16-color palette without phase issues in composite output. It provided 320×200 resolution in hi-res mode and included support for 8 , bitmap graphics, and character modes, all accessed via a 16 KB . This version was used in early production runs starting in , with early revisions like R56A having timing bugs that were addressed in later versions such as R7 and R8, improving collision detection reliability. The 6569 served as the PAL counterpart for and other 50 Hz markets, maintaining identical core logic and 16-color support but adjusted for 312 raster lines and 63 color clocks per line, resulting in slight color phase shifts relative to (e.g., reds appearing more orange in some outputs). It ensured compatibility with PAL-B/G standards, enabling smooth scrolling and raster interrupts optimized for 403 visible pixels per line. Like the 6567, it used the 40-pin and was integral to PAL C64 units from launch. The MOS Technology 6572 was a specialized variant for PAL-N markets in , operating at 60 Hz like but with PAL color encoding to match regional broadcast requirements, preserving the full 16 colors and capabilities of prior versions. It shared the same 5 V supply and 12 V V_DD pin configuration, with minor timing tweaks for 262 lines to avoid vertical hold issues in PAL-N TVs. This chip appeared in later regional C64 revisions for cost alignment with local production. Later HMOS-II process revisions, such as the 8562 ( replacement for 6567) and 8565 (PAL replacement for 6569), were introduced in later C64 production runs. These operated on a single 5 V supply, eliminating the need for 12 V, while reducing power consumption and heat generation. They maintained identical functionality, pinout, and compatibility with standard VIC-II software and , housed in the same 40-pin package. All standard VIC-II versions featured compatible pinouts for the 40-pin , including a 14-bit address bus (pins 2-15), 12-bit bidirectional data bus (pins 21-32), and key control signals like IRQ (pin 37), input (pin 38), and clock inputs (pins 1 and 20). Differences were limited to internal timing generators for video standards, with no changes to interfaces or , ensuring drop-in interchangeability within matching regional . Over time, die shrinks in subsequent mask revisions reduced manufacturing costs while maintaining functionality.
VariantVideo StandardSupply VoltageV_DD VoltageKey TimingPackagePrimary Use
6567 (60 Hz)5 V12 V65 color clocks/line, 262 lines40-pin (/)Early North C64
6569PAL-B (50 Hz)5 V12 V63 color clocks/line, 312 lines40-pin (/) C64
6572PAL-N (60 Hz)5 V12 V65 color clocks/line, 262 lines40-pin () C64 revisions
8562 (60 Hz)5 VNone (single supply)65 color clocks/line, 262 lines40-pin ()Late North C64
8565PAL-B (50 Hz)5 VNone (single supply)63 color clocks/line, 312 lines40-pin ()Late C64

Enhanced Versions (VIC-IIe)

The MOS Technology VIC-IIe, introduced in the Commodore 128 computer in 1985, is an enhanced version of the standard VIC-II chip designed to support advanced display features while maintaining full with Commodore 64 software and hardware. It operates on a single 5V power supply and is housed in a 48-pin package, compared to the 40-pin configuration of earlier VIC-II variants. The chip includes two additional registers beyond the original VIC-II set: one for controlling 2 MHz CPU operation (which disables the VIC-IIe's display processing) and another for scanning the extended keyboard matrix on the . Key variants of the VIC-IIe include the 8564 for systems, the 8566 for PAL-B/G standards, and the 8569 for PAL-N regions, ensuring compatibility with regional television broadcast formats. These enhancements enable separate luma and outputs for improved video signal quality. The VIC-IIe supports 40-column text modes compatibly, while 80-column text and high-resolution bitmap modes (up to 640x200 or 640x400 with RGBI output) are handled by the integrated 8563 (VDC) chip, using a 16-color palette. Sprites from the VIC-IIe are unavailable during VDC 80-column operation. Despite these upgrades, the VIC-IIe retains core features from the standard VIC-II, such as 40-column output, sprite handling, and scrolling capabilities, ensuring seamless operation in legacy modes. However, its adoption was limited primarily to the lineup due to the increased manufacturing costs associated with the expanded pinout and additional functionality, which contributed to the system's higher overall price point compared to the .

Applications and Legacy

Usage in Commodore Systems

The MOS Technology VIC-II served as the primary graphics processor in the Commodore 64, released in 1982, where the 6567 () and 6569 (PAL) variants were integrated to deliver 16-color graphics capabilities essential for the system's gaming and multimedia features. These chips handled text modes at 40x25 characters, resolutions up to 320x200 pixels, and support for eight hardware sprites, while also managing refresh and generating output. Access to the VIC-II's registers, located at memory addresses D000–D3FF, was facilitated through the Commodore 64's operating system routines, enabling programmers to control sprites, scrolling, and interrupts via standardized calls. In the , introduced in 1985, an enhanced version known as the VIC-IIe (8564 for and 8566 for PAL) was employed to support both 40-column compatibility with the Commodore 64 mode and native operations, including dual color RAM banks for efficient memory allocation in text and modes. This variant worked in conjunction with the VDC (8563) co-processor, which handled 80-column text and higher-resolution graphics, allowing seamless switching between display modes without hardware reconfiguration. The VIC-IIe's design preserved full while extending capabilities like real interlace mode for up to 400-line resolution. The Educator 64, a 1984 educational variant also marketed as the PET 64 or Model 4064, integrated the standard 6569 VIC-II chip within a modified 64 housed in a PET-style all-in-one case, retaining the full 16-color graphics and 64 KB RAM of the base system. This setup targeted school environments but was limited by its monochrome green-screen monitor, which underutilized the VIC-II's color palette, though it supported the same routines and audio integration as the 64. The Educator 64 also appeared in prototypes and limited international distributions, such as bundled educational packages, demonstrating the VIC-II's adaptability across 's hardware lines.

Influence on Computing and Emulation

The MOS Technology VIC-II played a pivotal role in the 64's commercial triumph, which saw over 12.5 million units sold and recognition as the best-selling single computer model of all time. Its advanced graphics capabilities, including support for 320x200 , a 16-color palette, and hardware , enabled the creation of -quality games that were unprecedented in home computing at the time. For instance, titles like Summer Games leveraged raster interrupts and to produce smooth animations and multicolored effects, making sophisticated visuals accessible to hobbyists without requiring expensive dedicated hardware. This democratization of high-quality graphics contributed to the C64's appeal, as engineers noted it offered "the best graphics-display capability of anything that has yet been done for a TV screen," helping drive its rapid market adoption from an initial price of $595 down to $149. The VIC-II's features profoundly shaped and the , fostering creativity within the constraints of 8-bit . Programmers exploited undocumented behaviors of the chip, such as variable screen positioning and sprite-background collisions, to achieve effects like borderless scrolling in cracktros—short intros created by software crackers to showcase their skills. These techniques, often programmed in 6502 assembly, pushed the limits of the VIC-II's 16 KB and cycle timings, inspiring a vibrant of tools and demos that emphasized efficient code and visual innovation over raw power. The chip's system, supporting up to eight 24x21 movable objects, became a cornerstone for platformers and action games, exemplifying how limitations encouraged novel problem-solving in early . In modern emulation, the VIC-II's intricacies demand high-fidelity recreations to preserve its graphical nuances. The Versatile Emulator () provides cycle-precise and pixel-accurate simulation of the VIC-II since version 0.13.0, accurately modeling rendering, raster interrupts, and video modes to run demanding demos and games without artifacts. Similarly, Frodo emphasizes exact reproduction of the chip's special graphical effects, supporting platforms from Unix to modern systems for authentic playback of C64 software. FPGA-based projects like C64 core recreate the VIC-II in hardware, offering bit-level accuracy with features such as reduced-border modes for displays and compatibility with original ROMs, enabling seamless integration of vintage peripherals. Reverse-engineering efforts, including die-shot analysis, have further refined these emulators by mapping the chip's internal logic, ensuring compatibility with edge-case behaviors like flexible line interpretation. The VIC-II's legacy extends to cultural phenomena, underpinning the retro revival and studies of 8-bit . With over 5,000 commercial games released, it symbolized computing optimism, where constraints like limited colors and resolution spurred innovative visuals paired with audio, influencing modern indie developers and movements. Recent hardware revivals, such as FPGA-powered 64 recreations, have sold thousands of units by tapping into this , allowing new generations to experience the chip's effects through updated interfaces like HDMI output. Academic analyses highlight how the VIC-II's design fostered under limitation, as seen in productions that repurpose its sprites and scrolling for artistic expressions, cementing its status as a foundational element in digital culture.

References

  1. [1]
    Creating the Commodore 64: The Engineers' Story - IEEE Spectrum
    MOS Technology was a merchant semiconductor house. Its LSI Group, headed at that time by Albert Charpentier, had been responsible for some of the chips that ...
  2. [2]
    [PDF] THE MOS 6567/6569 VIDEO CONTROLLER (VIC-II) AND ITS ...
    The 656* series graphics chip by MOS Technologies were originally designed to be used in video games and graphics terminals. But as the sales in these markets ...
  3. [3]
    [PDF] 6560/6561 video interface chip - commodore
    The 6560 Video Interface Chip (VIC) is designed for color video graphics applications such as low cost CRT terminals, biomedical monitors, control system ...
  4. [4]
    The VIC-II Chip - Retro Isle
    Mar 15, 2014 · The VIC-II chip was designed primarily by Al Charpentier and Charles Winterble at MOS Technology, Inc. as a successor to the MOS Technology 6560 ...Missing: history | Show results with:history
  5. [5]
    [PDF] The Home Computer Wars - stonan.com
    Commodore 64 was quietly being developed in tight secrecy by an engineering and chip design team headed by Charlie Winterble, Al Charpentier, and Bob Yannes.Missing: timeline | Show results with:timeline
  6. [6]
    The History of Commodore, Part 3 - by Bradford Morgan White
    Nov 11, 2023 · ” Winterble was the head of engineering for Commodore, and Charpentier led the group at MOS who'd worked on the VIC. To build these chips ...Missing: Technology development Al timeline
  7. [7]
    When did work begin on the VIC-II? - Retrocomputing Stack Exchange
    Mar 4, 2024 · In 1979 MOS Technology began work on two new video chips named 6564 and 6562. 6564 was intended for TOI computer and 6562 was intended for ...
  8. [8]
    List of semiconductor scale examples | Engineering | Fandom
    Oct 29, 2024 · MOS Technology VIC-II, a video display controller developed for the Commodore 64 in 1982 (5 μm). Products featuring 3 μm process. Main ...
  9. [9]
    Commodore 64 Programmer's Reference Guide - Zimmers.net
    The PROGRAMMER'S REFERENCE GUIDE is designed so that everyone from the beginning BASIC programmer to the professional experienced in 6502 machine language can ...
  10. [10]
    The MOS 6567/6569 video controller (VIC-II) and its application in ...
    Most chips are manufactured in NMOS technology. 2.2. 6510 processor ------------------- The 6510 microprocessor [1] has an 8 bit data bus and a 16 bit ...
  11. [11]
    VIC-II 6567 / 6569 / 8562 / 8565
    Technical data. 14 bit address bus; 320x200 in 16 fixed colors; 40x25 chars textmode; 8 hardware sprites 24x21; Possible interrupt sources: raster ...Missing: specifications | Show results with:specifications
  12. [12]
    The memory accesses of the 6569 / 8566
    The memory accesses of the MOS 6569 VIC-II and MOS 8566 VIC-IIe Video Interface Controller Marko Mäkelä 3rd June, 1994 This document is based on my screen ...
  13. [13]
    [PDF] The 6567 Video Interface Chip (VIC II) is a multi-purpose ... - 6502.org
    The color video display is 25 rows of 40 characters each with additional features including horizontal and vertical scroll, bit map graphics and movable image ...Missing: Technology | Show results with:Technology
  14. [14]
    Calculating the color palette of the VIC II - Pepto.de
    The VIC II was designed to generate a video signal that is compatible with analog television, that's why colors are composed of Luma (brightness) and Chroma ...Missing: Technology datasheet
  15. [15]
    Commodore VIC-II Color Analysis (Preview) - unusedino.de
    The C=64 (with its VIC-II chip) features a palette of 16 colors. Black, White and the three Greys are no colors and the "light"-versions of Red, Green and Blue ...Missing: MOS Technology
  16. [16]
    [PDF] Programming Graphics On The Commodore 64
    Connected with screen memory is a group of. 1000 locations called COLOR MEMORY or COLOR RAM. These start at location 55296 ($D800 in HEX)and go up to 56295.
  17. [17]
    [PDF] The Commodore VIC I and VIC II chips - Columbia CS
    VIC I and VIC II chips. Albert J. Charpentier. Bil Herd. Stephen A. Edwards ... Sprite 0 X-position. $D001 (R/W) M0Y. Sprite 0 Y-position. $D002 (R/W) M1X.
  18. [18]
  19. [19]
    Inside The Commodore
    Page ii-1. Graphics on the Commodore 64. These next chapters will attempt to expand upon the information found in the Commodore 64 Programmer's Reference Guide.
  20. [20]
    None
    Below is a merged summary of the VIC-II chip sections from the Commodore 128 Programmer's Reference Guide, consolidating all information from the provided segments into a comprehensive response. To maximize detail and clarity, I’ll use a table format where appropriate, followed by additional narrative text for aspects not easily tabularized. The response retains all mentioned details, cross-referencing page numbers and URLs where provided.
  21. [21]
    VIC-IIe - Commodore 128 Tips & Tricks
    This mode uses two MultiColor pictures (160*200/4 colors in 4*8 cell), each using its own attributes (except the color RAM at $d800, which is shared by both).
  22. [22]
    Commodore Educator 64 Computers : The C64 is Schoolbound...
    The PET/Educator 64 IS a Commodore 64, complete with the powerful VIC-II video chip, SID sound chip, 64K of memory, and the fantastic BASIC 2.0 programming ...
  23. [23]
    THE COMMODORE 64 - MIT Press Direct
    The VIC 6560 chip had been designed by MOS. Technology engineer Al Charpentier to be sold to other manufacturers like. Apple and Atari, but none were interested ...
  24. [24]
    1.1.1 C64 emulator features - VICE
    The emulation has been fully cycle-accurate since version 0.13.0. The accurate C64 emulator, called `x64sc' , features a cycle-based and pixel-accurate VIC-II ...
  25. [25]
    The Official Frodo Home Page
    Frodo is a portable Commodore 64 emulator that runs on a variety of platforms, with a focus on the exact reproduction of special graphical effects possible on ...
  26. [26]
    MiSTer-devel/C64_MiSTer - GitHub
    Based on FPGA64 by Peter Wendrich with heavy later modifications by different people. Features. C64 and C64GS modes; C1541 read/write/format support in raw GCR ...
  27. [27]
    This Is the Commodore Comeback Fans Have Waited for ... - WIRED
    Jul 20, 2025 · Over 5,000 commercial games were released during the machine's heyday, and more than 15 million units were sold, making the C64 still one of the ...