Skip to the content
PCBKitNew board
2 layers172.7 × 108.6 mmClementina hardware, the printed circuit board in 3D

Clementina hardware

fran150/clementina-hardware

KiCad schematic for Clementina, a 3.3V W65C02S computer with a Raspberry Pi Pico 2 W (MIA) handling video, audio, storage and I/O.

Size
172.7 × 108.6 mm
Copper layers
2
Thickness
1.6 mm
Parts
48
Nets
105
Pads
416
Tracks, vias
1,360, 272
Pours
3
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
30 Sep 2026
Updated
1 Oct 2026

Overview

Clementina hardware is an open-source printed circuit board by fran150, from the fran150/clementina-hardware repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 172.7 × 108.6 mm with 48 parts on 105 nets, routed with 1,360 tracks and 272 vias.

It is built around the 74AC138SC, 74AC00 and 74AC08PC, with the AS6C4008-55PCN, AS6C62256-55PCN and BAT85 among its other parts. Its parts include 14 capacitors, 11 resistors, 8 ICs, 5 connectors and 2 diodes. It belongs with the audio and music boards and the RP2040 boards of this library.

Main components

6

README

README.md

Clementina Hardware

KiCad 9 schematic and board for Clementina, a 3.3 V homebrew computer built around a W65C02S CPU. A Raspberry Pi Pico 2 W, called MIA, runs the machine: it generates the CPU clock, boots the kernel, and provides video, audio, storage and input.

Status: the rev 1 schematic is complete and ERC-clean, and the rev 1 board is laid out, fully routed and DRC-clean. The first build is planned on protoboard, using the same parts as the board.

Opening the project

Open clementina-hardware.kicad_pro in KiCad 9.

  • clementina.kicad_sym (listed in sym-lib-table) holds the parts KiCad's own libraries lack, currently the AS6C62256 SRAM.
  • The W65C02S and W65C22S symbols come from KiCad's Plugin and Content Manager (library PCM_65xx-library). The schematic carries copies, so it opens without that library. Install it to keep ERC's library check clean.
  • One ERC item is excluded on purpose: the Pico's AGND tied to GND. The ADC is unused, and the Pico datasheet allows the join.
  • clementina-hardware.kicad_dru holds one custom DRC rule: the audio jack's barrel hangs over the board edge on purpose, so its silkscreen outline may cross the edge.
  • DRC shows one warning, and it is expected: the Pico footprint "does not match the copy in the library". The library's antenna keep-out lists 32 copper layers, and a 2-layer board keeps only two of them.

Sheets:

SheetContents
clementina-hardware.kicad_sch (A3)CPU, VIA, RAM, MIA, IRQ and reset circuits, expansion headers, user port, audio output, microSD, power and decoupling
CS Logic.kicad_schAddress decoding (74AC138 x2, 74AC08, two gates of the 74AC00)
OE_RW_PHI2_Sync.kicad_schRead and write strobes: ~OE from R/W, ~WE qualified by PHI2 (two gates of the 74AC00)

Architecture

PartRole
W65C02S (U1)CPU. MIA drives PHI2: 1.2 MHz by default, up to 8 MHz.
AS6C62256 (U4)32 KB base RAM
AS6C4008 (U2)512 KB extended RAM, seen through a 16 KB window
W65C22S (U3)VIA. Port A selects the extended RAM bank; port B and CA/CB go to the user port.
Raspberry Pi Pico 2 W (A1)MIA: clock, boot loader, video over Wi-Fi, audio, microSD, input, reset
74AC138 x2, 74AC08, 74AC00Glue logic (see Glue logic timing)

Memory map:

RangeDevice
$0000-$7FFFBase RAM
$8000-$BFFFExtended RAM window (32 banks, selected by VIA PA0-PA4)
$C000-$DFFFI/O: eight 1 KB slots. Slot 0 ($C000) is the VIA; slots 1-7 go to the expansion headers.
$E000-$FFFFMIA (registers at $FFE0-$FFFF)

MIA's pins:

GPIOSignal
GP0-GP3microSD (SPI0: MISO, CS, SCK, MOSI)
GP4, GP5Audio left and right (PWM)
GP6MIA chip select
GP7R/W
GP8-GP15D0-D7
GP16-GP20A0-A4
GP21PHI2
GP22IRQ
GP26RESB (MIA holds the CPU and VIA in reset)
GP27Reset request from the RESET button
GP28Unused

Glue logic timing

The glue logic is 74AC, not 74HC, because 74HC is slow at 3.3 V (roughly 13 ns per gate typical, up to about 30 ns). Two places depend on it:

  • Write strobe. ~WE = NAND(PHI2, ~OE) in one 74AC00 gate, so ~WE rises within about 10 ns of PHI2 falling. The W65C02S only guarantees its address and data for 10 ns after PHI2 falls, and the SRAMs need both held until ~WE rises. This timing doesn't depend on clock speed, so running slower doesn't help. The Picocomputer RP6502 makes WE# the same way.
  • Chip selects. The VIA and the expansion cards need their chip select 10 ns before PHI2 rises. U6 is enabled straight from A13-A15 (A15 through one inverting gate), not through U8, which removes a decoder level from those selects.

With 74AC parts, the chip-select paths meet the datasheets up to about 6.5 MHz with worst-case parts, and typical parts reach 8 MHz. 74HC parts give the same logic but lose the write-strobe guarantee, and the VIA's chip select limits them to about 3.5 MHz worst case.

Interrupts are wired-AND: MIA and the VIA each pull ~IRQB low through a BAT85 Schottky diode against a 4.7 kΩ pull-up. ~NMI (4.7 kΩ) and RDY (2.2 kΩ) are also pulled up, so expansion cards can use them. RDY is also an output: the CPU pulls it low while it executes WAI. The W65C02S only guarantees 1.6 mA at 0.4 V there, so the RDY pull-up can't be stronger than about 2 kΩ.

Power (rev 1)

Everything runs from the Pico's USB. Its 3V3 output supplies the whole board, and VBUS supplies the +5V pins on the headers.

  • Keep the external 3.3 V load under about 300 mA. The board uses roughly 50 mA idle and 150 mA with the microSD card writing, which leaves about 150 mA for expansion cards.
  • A phone charger works when no PC is attached.
  • VSYS is left free for a rev 2 power input.

Connectors

J1, J2: expansion bus (2x20 keyed box headers, identical)

PinSignalPinSignal
1GND2+3.3V
3A04A1
5A26A3
7A48A5
9A610A7
11A812A9
13GND14PHI2
15GND16RWB
17~OE18~WE
19~RESB20~IRQB
21~NMI22RDY
23D024D1
25D226D3
27D428D5
29D630D7
31~IOCS132~IOCS2
33~IOCS334~IOCS4
35~IOCS536~IOCS6
37~IOCS738+5V
39GND40+3.3V

J3: user port (2x10 keyed box header, VIA port B)

PinSignalPinSignal
1GND2+3.3V
3PB04PB1
5PB26PB3
7PB48PB5
9PB610PB7
11CB112CB2
13CA114CA2
15~RESB16GND
17GND18+5V
19GND20+3.3V

Rules for cards on J1-J3:

  • 3.3 V logic only. Never put a 5 V signal on any pin.
  • A card claims one I/O slot by jumpering one of ~IOCS1-~IOCS7.
  • ~IRQB, ~NMI and RDY: pull them low through a Schottky diode or an open-drain output, and never drive them high.
  • RDY also goes low while the CPU executes WAI. Don't read RDY low as a wait request from another card.
  • ~RESB is driven by MIA: read it, never drive it.
  • W65C22S port pins have no current limiting. Drive LEDs and similar loads through a resistor.

J4: audio out. A stereo 3.5 mm jack (CUI SJ1-3533NG, through-hole, round pins): tip left, ring right. Each channel uses the same output stage as the Picocomputer RP6502: a 220 Ω / 100 Ω divider, a 100 nF filter capacitor, a 47 µF DC block and a 1.8 kΩ bleed resistor. It gives about 1 Vpp line level and drives headphones directly. MIA mixes at 48 kHz.

J5: microSD. A 1x9 female header for the Adafruit 4682 microSD breakout (3 V only), used in SPI mode on MIA's SPI0: 400 kHz to initialise, then 12 MHz. The breakout has its own pull-ups (CS, MISO, DAT1, DAT2) and bypass capacitors. DAT1, DAT2 and card detect stay unconnected.

Pin123456789
Breakout3VGNDCLKSOSICSDAT1DAT2DET
Signal+3.3VGNDSD_SCKSD_MISOSD_MOSISD_CS---

Board (rev 1)

clementina-hardware.kicad_pcb: 172.7 x 108.6 mm, 2 layers, every part through-hole. The chips sit in sockets and the Pico plugs into female headers, so the same parts move from the protoboard build to the board.

  • Layout: the MIA Pico is at the top left, with its USB port on the top edge and its Wi-Fi antenna over a copper keep-out. The microSD breakout sits to its left, with the card slot at the left board edge. The audio stage and jack run down the left edge, and the reset button sits well below the Pico. The CPU, RAM, extended RAM and VIA form one row, with the user port at the right edge. The glue logic is in a row below them, and the two expansion headers are stacked along the bottom edge.
  • Every chip has a 100 nF capacitor next to its supply pin; C14 (22 µF) is by the Pico's 3V3 pin.
  • Wi-Fi antenna: Raspberry Pi recommends putting the Pico W's antenna at a board edge with nothing close to it. Here it sits inside the board, as on the Picocomputer RP6502. The Pico stands about 10 mm up on its headers, no copper runs under the antenna, and a rule area ("Wi-Fi antenna clearance") keeps tracks, vias and ground fill about 6 mm past the Pico's end. Leave that area clear of parts and cables. The expected cost is a few dB of range, which the video protocol tolerates. To check a build, compare the Wi-Fi signal strength (RSSI) of the Pico on its own and on the board at the same spot; if the board costs more than about 6 dB, move the antenna to an edge in rev 2.
  • Routing: 0.25 mm signal tracks, 0.4 mm for GND, +3.3V and +5V (net class Power), 0.2 mm clearance, and 0.6 / 0.3 mm vias. The top layer runs mostly horizontal and the bottom mostly vertical. Both layers carry a GND pour, stitched with vias. Any hobby PCB fab can make it (1.6 mm FR-4, 1 oz copper).
  • The routing was produced by a script and then checked with KiCad's DRC and its schematic parity check. Edit it freely in KiCad.
  • Silkscreen: part values are printed on the resistors and capacitors, and the chip names inside the socket outlines. The J5 pin names and the breakout's outline are printed too.
  • Mounting: four M3 holes in the corners. Two M2.5 holes under the microSD breakout match its own holes. They're optional, to support it with standoffs (about 11 mm).

Bill of materials

Every part has two schematic fields that keep the bill of materials generic, so you can source parts yourself (for the protoboard build) or hand them to an assembly service:

  • Factory: what gets soldered to the board at that designator. Chips get a DIP socket, and the Pico (A1) gets two 1x20 female headers.
  • Plug-in: what you plug in afterwards, if anything.

bom/factory-bom.csv lists everything that's soldered: passives, diodes, sockets, headers, the jack and the button. With those soldered (by you or the factory), the board needs no more soldering; plug in these parts:

RefPart
U1WDC W65C02S CPU, DIP-40 (W65C02S6TPG-14)
U3WDC W65C22S VIA, DIP-40 (W65C22S6TPG-14)
U4Alliance AS6C62256-55PCN, 32K x 8 SRAM, DIP-28
U2Alliance AS6C4008-55PCN, 512K x 8 SRAM, DIP-32
U6, U874AC138, DIP-16
U774AC08, DIP-14
U974AC00, DIP-14
A1Raspberry Pi Pico 2 WH (the version with pins already soldered)
J5Adafruit 4682 microSD breakout, 3 V

The Adafruit 4682 ships with its header loose: solder the 9 pins to the module once, or use a breakout sold with the header fitted.

The "A1" row of the factory BOM is two headers, one per side of the Pico.

To regenerate the factory BOM after changing parts:

text
kicad-cli sch export bom --fields 'Factory,${QUANTITY},Reference' --labels 'Part,Qty,References' --group-by Factory --sort-field Reference --sort-asc -o bom/factory-bom.csv clementina-hardware.kicad_sch

Fabrication files

The Gerbers are generated from the board, so they aren't committed: git ignores fabrication/. Rebuild them after any board change:

text
mkdir -p fabrication/gerbers
kicad-cli pcb export gerbers --no-x2 --no-netlist --subtract-soldermask -l F.Cu,B.Cu,F.Mask,B.Mask,F.Silkscreen,Edge.Cuts -o fabrication/gerbers/ clementina-hardware.kicad_pcb
kicad-cli pcb export drill --excellon-separate-th -o fabrication/gerbers/ clementina-hardware.kicad_pcb
rm fabrication/gerbers/*.gbrjob
zip -j -FS fabrication/clementina-rev1-gerbers.zip fabrication/gerbers/*

Upload fabrication/clementina-rev1-gerbers.zip to the fab. It holds eight files: both copper layers, both masks, the front silkscreen, the board outline, and separate drill files for plated and unplated holes.

  • --no-x2 --no-netlist: PCBWay's KiCad guide asks for Gerbers without X2 attributes. With them, its upload preview showed only the holes.
  • No back silkscreen: it's empty.
  • --subtract-soldermask keeps silkscreen ink off the pads.
  • The zip leaves out KiCad's .gbrjob job file.
  • zip -FS also removes files that are no longer in fabrication/gerbers/.

When you order boards, tag the commit you ordered from and attach the zip you uploaded to a GitHub release on that tag. That keeps a record of exactly what was made.

Not in rev 1

  • A separate power input (USB-C into VSYS) with a jumper to power a USB keyboard on the Pico's port
  • Local video output, likely a second Pico as a display client

Related repositories

License

GPLv3. See LICENSE.

Parts

48
QtyValueFootprintReferences
10100nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC2, C4, C6, C7, C8, C9, C10, C11, C12, C13
4MountingHole_3.2mm_M3MountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
3100Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR4, R7, R10
21.8KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR8, R11
2220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR6, R9
24.7KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2, R5
247uFCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC3, C5
274AC138Package_DIP:DIP-16_W7.62mm_SocketU6, U8
2BAT85Diode_THT:D_DO-34_SOD68_P7.62mm_HorizontalD1, D2
2ExpansionConnector_IDC:IDC-Header_2x20_P2.54mm_VerticalJ1, J2
2MountingHole_2.7mm_M2.5MountingHole:MountingHole_2.7mm_M2.5H5, H6
110KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR3
11uFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC1
12.2KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1
122uFCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC14
174AC00Package_DIP:DIP-14_W7.62mm_SocketU9
174AC08Package_DIP:DIP-14_W7.62mm_SocketU7
1AS6C4008-55PCNPackage_DIP:DIP-32_W15.24mm_SocketU2
1AS6C62256-55PCNPackage_DIP:DIP-28_W15.24mm_SocketU4
1Audio OutConnector_Audio:Jack_3.5mm_CUI_SJ1-3533NG_Horizontal_CircularHolesJ4
1RESETButton_Switch_THT:SW_PUSH_6mmSW1
1RaspberryPi_Pico_WModule:RaspberryPi_Pico_Common_THTA1
1User PortConnector_IDC:IDC-Header_2x10_P2.54mm_VerticalJ3
1W65C02SxPPackage_DIP:DIP-40_W15.24mm_SocketU1
1W65C22SxPPackage_DIP:DIP-40_W15.24mm_SocketU3
1microSDConnector_PinSocket_2.54mm:PinSocket_1x09_P2.54mm_VerticalJ5

Questions

How big is the Clementina hardware PCB?

It measures 172.7 × 108.6 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Clementina hardware use?

48 parts, built around the 74AC138SC, 74AC00, 74AC08PC and AS6C4008-55PCN. 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 Clementina hardware KiCad files?

From the fran150/clementina-hardware repository on GitHub, at the commit this page was made from: the board is clementina-hardware.kicad_pcb and its schematic CS Logic.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Clementina hardware design in my own project?

Its repository publishes it under the GPL-3.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).

Similar boards

  • 2 layers101.6 × 83.8 mmZ80DevBoard, the printed circuit board in 3D

    Z80DevBoard

    dbuchwald/Z80DevBoard

    Simple Z80 based prototyping and development board designed as extension to Arduino Mega 2560

    39 parts3MIT
  • 2 layersBreadBin, the printed circuit board in 3D

    BreadBin

    c0pperdragon/BreadBin

    A CPU made of 7400 logic on breadboards - inside a bread bin ;-)

    45 parts18
  • 4 layers100 × 100 mmRosco 6502, the printed circuit board in 3D

    Rosco 6502

    rosco-6502/rosco_6502

    Design, documentation and software for the Really Old School Computer (6502)

    62 parts8MIT
  • 2 layers99.1 × 76.8 mmMegacart ram, the printed circuit board in 3D

    Megacart ram

    ezod/rc2014-cv-megacart-ram

    RC2014 ColecoVision MegaCart 32KB/512KB RAM Module

    31 parts2
  • 2 layers70 × 99 mmCC1, the printed circuit board in 3D

    CC1

    etherkit/CC1

    CC1 CW QRP Transceiver

    209 parts11
  • 2 layers233.4 × 280 mmCft board0, the printed circuit board in 3D

    Cft board0

    alexiosc/cft

    The CFT homebrew minicomputer

    299 parts6GPL-3.0
  • 4 layers169.7 × 99.8 mm65816-computer, the printed circuit board in 3D

    65816-computer

    mike42/65816-computer

    A 65C816-based homebrew computer (prototype)

    97 parts37
  • 2 layers160 × 100 mmLedrom, the printed circuit board in 3D

    Ledrom

    Noah1989/loopmicro

    An 8-bit microcomputer for the 21st century

    213 parts2MIT