Skip to the content
4 layers63.5 × 102.6 mmCard, the printed circuit board in 3D

An open source Video Display Controller following in the footsteps, but not a clone, of the Commodore 8568 VDC chip.

Size
63.5 × 102.6 mm
Copper layers
4
Thickness
1.6 mm
Parts
21
Nets
78
Pads
192
Tracks, vias
408, 35
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
21 Mar 2020
Updated
29 Oct 2020

Overview

Card is an open-source printed circuit board by sam-falvo, from the sam-falvo/VDC-II repository on GitHub, published under the MPL-2.0 licence. It is a 4-layer board of 63.5 × 102.6 mm with 21 parts on 78 nets, routed with 408 tracks and 35 vias.

It is built around the SN74LVC8T245PWRE4 and 74HCT688D. Its parts include 7 capacitors, 7 resistors, 4 ICs, 2 connectors and 1 switch. It belongs with the lEDs and displays boards of this library.

Main components

2

README

README.md

VDC-II

The VDC-II core is an open source Video Display Controller following in the footsteps, but not a pure clone, of the Commodore 8568 VDC chip.

Link to project on Hackaday.io.

Why?

I'm working on a homebrew computer of my own design, called the Kestrel-3. The Kestrel-3 project, however, is very slow-going, as I'm basically building everything from the ground up. I was asked if I could instead implement the salient bits of the Kestrel-3's video core, the Configurable Graphics Interface Adapter, or CGIA, for the RC2014 backplane. That would both speed up development of the Kestrel-3 project, as I'm more focused on individual components, but also can benefit the RC2014 community as well. I said, "that sounds like a great idea!"

Problem is, I've never built an RC2014 or an expansion board for it before. And, there are many unknowns along the way: for example, I've never worked with level shifting logic before, and interfacing a 25MHz dot-clock circuit to the 7MHz bus of the RC2014 will involve multiple clock domains and its respective complexities. To get my feet wet, I decided to target a design for the 39-pin RC2014 expansion bus using a small FPGA part, specifically the TinyFPGA BX.

The problem with the TinyFPGA BX is that I'm severely I/O limited! But, with careful interface design, and a constriction on the number of I/O ports accessible to the host CPU, I was able to fit everything into the pins available. Also, the TinyFPGA BX provides 16KB of block RAM resources, and that sparked a memory: didn't the C128's VDC chip only have 16KB available to it?

Turns out, yes. And, it also has a constrained host CPU interface as well. And looking through the C128's Programmers Reference Manual on how to code for the VDC chip, I saw that much of the CGIA's feature set was already present in the VDC. Not everything, but most things for sure! So, I got to thinking, instead of using the CGIA as the basis, maybe I can create a version of the VDC chip which can drive a VGA monitor, flexibly. After all, the RomWBW HBIOS software already has a VDC driver available for it, so porting software should be much easier. (Though, strangely, it goes by the name CVDU or Color VDU in the source tree.) That's the operating theory, at least.

The VDC-II project was born.

Description

The VDC-II core aims to be a worthy successor to the original Commodore VDC design. Unlike the original VDC chip, which runs at NTSC frequencies, the VDC-II core is intended to drive a VGA monitor.

While 100% backward compatibility is not my primary goal, I would continue to strive for it where I can afford to. There will be some features which will simply work differently between the VDC and VDC-II, such as how horizontal smooth scrolling works. Some of these incompatibilities will stem naturally from the fact that we're driving a VGA display instead of a CGA display. Disclaimer: I do not have a real Commodore 128 to test behavior with. I'm limited to comparing behavior against what the Vice x128 emulator supports.

Goals

Most importantly, I want to make a VDC-II core that achieves basic feature parity with the original VDC. This should include supporting all 37 of the original register set. Note: Not all bits of all registers will be supported, or will work exactly the same way. For example, the complex interaction between inter-character gaps and horizontal smooth scrolling might compel me to just leave inter-character gaps out of the design. (Kind of how x128 does now.)

Going into future day-dreaming mode, I'd next implement color palette registers, giving the VDC-II core more color options. I'd also support an alternative attribute format which allows for both 16 foreground and background colors.

The VDC-II core could conceivably be expanded to support sprites as well, perhaps using an interface not unlike the TMS9918A VDP. This will be very nice for, e.g., supporting mouse pointers and text cursors while in bitmapped mode (e.g., GEOS/128).

Resources

These are some handy references and resources I've found to help guide my development. These might be of interest to you as well.

Parts

21
QtyValueFootprintReferences
7100nFCapacitor_THT:C_Disc_D6.0mm_W4.4mm_P5.00mmC1, C2, C3, C4, C5, C6, C7
74.7KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R3, R4, R5, R6, R7
2SN74LVC8T245PWRPackage_SO:TSSOP-24_4.4x7.8mm_P0.65mmU2, U3
174HCT688Package_DIP:DIP-20_W7.62mm_SocketU1
1Conn_RC40_MaleConnector_PinHeader_2.54mm:PinHeader_1x40_P2.54mm_VerticalJ1
1SW_DIP_x07Button_Switch_THT:SW_DIP_SPSTx07_Slide_9.78x19.96mm_W7.62mm_P2.54mmSW1
1VDC-II-cardPackage_DIP:DIP-28_W15.24mm_SocketU4
1VideoMezzanine14Connector_PinHeader_2.54mm:PinHeader_2x07_P2.54mm_VerticalJ2

Similar boards

  • 2 layers139.7 × 101.6 mmIsa monster fdc, the printed circuit board in 3D

    Isa monster fdc

    skiselev/monster-fdc

    ISA floppy disk controller card that supports up to 8 floppy drives

    57 parts78
  • 2 layers176.5 × 85.1 mmISA EMS, the printed circuit board in 3D

    ISA EMS

    hkzlab/ISA_EMS_4Mb

    ISA 4Mb EMS expansion board

    49 parts41
  • 2 layers100 × 50 mmRc2014-ds1302-rtc, the printed circuit board in 3D

    Rc2014-ds1302-rtc

    electrified/rc2014-ds1302-rtc

    DS1302 Real Time Clock for the RC2014 computer

    34 parts25
  • 2 layers76.2 × 134.1 mmMultiplier board, the printed circuit board in 3D

    Multiplier board

    michaelkamprath/minimal-64x4-expansion-cards

    A set of expansion boards for the Minimal 64x4 Home Computer

    80 parts19
  • 4 layers65.4 × 111.6 mmGinger, the printed circuit board in 3D

    Ginger

    mrehkopf/Ginger

    Socket shift, CPU switch, Clockports for Amiga mITX "Denise"

    30 parts12
  • 2 layers100 × 50 mmRc2014-ym2151, the printed circuit board in 3D

    Rc2014-ym2151

    electrified/rc2014-ym2151

    Yamaha's DX21, DX27 and DX100 synthesisers used a derivative IC which is very similar.

    33 parts9
  • 2 layers188 × 102.9 mmRC200-Dev Backplane, the printed circuit board in 3D

    RC200-Dev Backplane

    MarkD833/RCBUS-68xxx

    My Motorola 68000 & 68302 processors (+ SIO, PIO & MFP boards) for the RCBus ecosystem.

    102 parts8GPL-3.0
  • 2 layers131.1 × 88.3 mmResound 2 MCA, the printed circuit board in 3D

    Resound 2 MCA

    texelec/Resound-2-MCA-OPL3

    Microchannel OPL3 Based Sound Card / Adlib Compatible

    53 parts5

Questions

How big is the Card PCB?

It measures 63.5 × 102.6 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Card use?

21 parts, built around the SN74LVC8T245PWRE4 and 74HCT688D. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Card KiCad files?

From the sam-falvo/VDC-II repository on GitHub, at the commit this page was made from: the board is rc2014/kicad/card/card.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Card design in my own project?

Its repository publishes it under the MPL-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).