Skip to the content
4 layers140 × 110 mm6502fb, the printed circuit board in 3D

A framebuffer for the 6502, implemented in discrete logic

Size
140 × 110 mm
Copper layers
4
Thickness
1.6 mm
Parts
114
Nets
225
Pads
859
Tracks, vias
2,228, 637
Pours
3
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
18 Oct 2023
Updated
27 Nov 2024

Overview

6502fb is an open-source printed circuit board by sky-dragn, from the sky-dragn/6502fb repository on GitHub. It is a 4-layer board of 140 × 110 mm with 114 parts on 225 nets, routed with 2,228 tracks and 637 vias.

It is built around the 74AHC30D, 74LV08PW and 74AC109PC, with the 74HC00D, 74LV04D and 74LV32DB among its other parts. Its parts include 37 capacitors, 34 ICs, 21 connectors, 11 resistors and 1 crystal.

Main components

11

README

README.md

6502 Framebuffer

A 160 by 120 pixel, 256-color framebuffer and VGA generator for a 6502-based computer, made for CMU 98-341 Build Your Own Breadboard Computer.

Heavily inspired by Ben Eater's "world's worst video card" saga, but with many improvements:

  • better timing compliance (shorter critical path -> no vertical artifacts)
  • FFs instead of latches (easier to debug timing)
  • higher resolution (160x120 vs. 100x75), accomplished through memory banking
  • more common VGA mode (640x480 vs. 800x600)
  • double-bufferring (updates aren't restricted to blanking period)
  • software blanking (show solid black or white without drawing to every pixel)
  • configurability (disable NMI if not needed)

This repo contains the KiCad files for the board, a corresponding Verilog design and testbench, and a software simulator.

The board went through 2 revisions before it worked fully:

Rev1

Revision 1 worked well enough to generate a valid VGA signal, but I made a major mistake on the SRAM pinout which led to it not being able to interface with the 6502 computer. Another mistake: my minimum via diameter was too small, so it cost like $40 extra...

However, despite these faults, I was able to bodge the row and column pins to allow it to display an image from an EEPROM.

KiCad render KiCad render

KiCad board view KiCad board view

Debugging... Part of the arduous debugging process that eventually led to me discovering the SRAM mistake...

It works! It works! (with a static image...) The EEPROM I used here has a much slower read speed than the SRAMs I designed for, which leads to the vertial artifacts on some pixels here.

Final form Closeup of Rev1 bodges: SRAMs removed and row/column signals routed to EEPROM + color routed in through header

Rev2

Revision 2 fixed the pinout of the SRAM ICs, fixed the via size issue, added a debug header for the config register, and added an optional 5V regulator that can be used to power the entire computer.

KiCad render KiCad render

KiCad board view KiCad board view

Final assembled board Final assembled board!

Power-on noise Power-on noise: this is expected! The SRAM does not have a deterministic state when powered on.

Drawing works Drawing to the screen works!

Moving image And it can redraw live!

Parts

114
QtyValueFootprintReferences
340.1uCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC1, C2, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 +18
874AHC30Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU10, U11, U12, U13, U21, U22, U23, U24
7Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ6, J11, J12, J13, J14, J15, J18
674LV163Package_SO:SOIC-16_3.9x9.9mm_P1.27mmU14, U17, U20, U26, U27, U28
4MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
3100Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR9, R10, R11
374CBT16390Package_SO:TSSOP-56_6.1x14mm_P0.5mmU5, U6, U9
374LV08Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU19, U32, U33
3Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ1, J5, J22
21.8kResistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR3, R6
2470Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR5, R8
274AC109Package_SO:SOIC-16_3.9x9.9mm_P1.27mmU16, U25
274HC00Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU2, U4
274LV04Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU15, U18
274LV32Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU30, U31
2910Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR4, R7
2AS7C256A-10Package_SO:TSOP-I-28_11.8x8mm_P0.55mmU7, U8
2Conn_01x04Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ19, J20
2Conn_01x08Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ2, J8
2Conn_01x10Connector_PinHeader_2.54mm:PinHeader_1x10_P2.54mm_VerticalJ9, J10
1100nCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC37
110uCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC35
125.175MHzOscillator:Oscillator_DIP-8X1
1330nCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC36
1390Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR2
174HC377custom:SOIC-20_5.3x12.6mm_P1.27mmU29
174HC86Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU1
174LV27Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU3
1820Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolderR1
1Barrel_Jack_SwitchConnector_BarrelJack:BarrelJack_CUI_PJ-102AH_HorizontalJ21
1Conn_01x01Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ16
1Conn_01x05Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ17
1Conn_01x16Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_VerticalJ4
1DE15_Receptacle_HighDensitycustom:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mmJ7
1L7805Package_TO_SOT_THT:TO-220-3_Horizontal_TabDownU34
1LOGOcustom:sky-standingG***
1LOGOcustom:skyG***
1LOGOcustom:salixG***
1LOGOcustom:bnyahajG***
1LOGOcustom:altG***
1LOGOcustom:sky-headphonesG***

Similar boards

  • 2 layers245.1 × 160 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64x4-Home-Computer

    My DIY TTL home computer with VGA and PS/2 and 4x the processing power of a Commodore C64 or Apple II.

    139 parts326
  • 2 layers208.9 × 170.8 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-UART-Computer-3

    Version 3 of my educational DIY TTL computer built around a UART serial interface - now with blinkenlights!

    207 parts54
  • 2 layers160 × 140 mm8-Bit CPU, the printed circuit board in 3D

    8-Bit CPU

    otterbox901/8-Bit_CPU

    Microcoded 8-bit CPU built from 24 74HC-series ICs: a custom 10-instruction ISA, 4 general-purpose registers, and an EEPROM-driven control unit.

    69 parts2
  • 2 layers100 × 100 mmHC4 KiCad EE, the printed circuit board in 3D

    HC4 KiCad EE

    nasu8151/HC4

    Schematics and board of HC4 E (E means "for Education").

    125 parts8
  • 2 layers90 × 76.5 mmLCDZapperPro, the printed circuit board in 3D

    LCDZapperPro

    charcole/LCDZapper

    Device for making light gun games playable on LCD TVs

    126 parts163
  • 2 layers100 × 45 mmBasic mc6800, the printed circuit board in 3D

    Basic mc6800

    rabid-inventor/mc68xx-boards

    collection of PCB's based around the Motorola MC6800 series processor

    32 parts3MIT
  • 4 layers220 × 170 mmArpeggiator, the printed circuit board in 3D

    Arpeggiator

    EwoudVV/arpeggiator

    12-note analog arpeggiator with a 1/2/3 octave range, custom pcb and printed case

    360 parts3

Questions

How big is the 6502fb PCB?

It measures 140 × 110 mm and has 4 copper layers, 1.6 mm thick.

What parts does the 6502fb use?

114 parts, built around the 74AHC30D, 74LV08PW, 74AC109PC and 74HC00D. 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 6502fb KiCad files?

From the sky-dragn/6502fb repository on GitHub, at the commit this page was made from: the board is 6502fb.kicad_pcb and its schematic 6502fb.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the 6502fb design in my own project?

Its repository states no licence, so its author keeps all rights: ask sky-dragn before reusing the design.