Skip to the content
2 layers284.9 × 96.5 mmFella, the printed circuit board in 3D

DIY 6502 all-in-keyboard personal computer

Size
284.9 × 96.5 mm
Copper layers
2
Thickness
1.69 mm
Parts
115
Nets
260
Pads
1,037
Tracks, vias
3,491, 1,122
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
17 Mar 2024
Updated
4 Aug 2025

Overview

Fella is an open-source printed circuit board by agkaminski, from the agkaminski/FellaPC repository on GitHub, published under the CC0-1.0 licence. It is a 2-layer board of 284.9 × 96.5 mm with 115 parts on 260 nets, routed with 3,491 tracks and 1,122 vias.

It is built around the 74HC244D, 74HC245D and MAX232N, with the CH340N, 74HC574D and 74HC138 among its other parts. Its parts include 45 capacitors, 32 ICs, 14 resistors, 7 connectors and 2 transistors. It belongs with the keyboards and input and retro computing and games boards and the FPGA and CPLD boards of this library.

Main components

12

README

README.md

FellaPC

All-in-keyboard 6502 based PC with built-in BASIC interpreter.

Features:

  • BASIC interpreter,
  • 6502/65C02/W65C02S CPU @1.8432 MHz,
  • 32 KiB of ROM, 24 KiB of static RAM,
  • 640x480@60Hz VGA adapter with character generator (80x60 black and white text mode only),
  • 6522 VIA for onboard control, I2C memory and user port,
  • 2 UARTs (USB-C and RS-232),
  • 68 or 63 button mechanical keyboard,
  • edge connector expansion port,
  • powered via USB-C port.

Memory map

Memory map

BASIC

FellaPC provides BASIC language subset (partially inspired by C64 BASIC).

Program editing

Simple line editor is provided, code is entered line by line. To insert a new line or overwrite existing line type in the line number followed by the code.

Example

text
10 FOR I = 0 TO 10
20 PRINT I
30 NEXT I

Let's say we want to change line number 20 to print a square of I insted. To do this simply type in a new version of this line:

text
20 PRINT I*I

The program will be updated:

text
LIST

10 FOR I = 0 TO 10
20 PRINT I*I
30 NEXT I

Ready

Commands

Following commands are supported:

PRINT

Print out to the screen.

Syntax examples:

text
PRINT "String"
PRINT "String", variable
PRINT "String"; variable
PRINT variable
PRINT var1, var2
INPUT

Prompt user for input, real numbers only.

Syntax examples:

text
INPUT var
INPUT "Prompt", var
FOR, TO, STEP, NEXT

Used for loops. Intelacing and infinite loop nesting are supported.

Syntax example:

text
10 FOR VAR=0 TO 10 STEP 2
20 PRINT I
30 NEXT I

Above loop will output:

text
0
2
4
6
8
GOTO

Jump to the line in the code.

Syntax example:

text
10 GOTO 30
20 PRINT "foo"
30 PRINT "bar"

Above code will output only bar, as foo has been skipped by goto.

GOSUB, RETURN

Similar to GOTO, but allows returning back from the destination of jump via RETURN. Return address (line after GOSUB) is placed on the return stack. There is no limit on the stack depth (apart from the computer memory capacity).

Syntax example:

text
10 GOSUB 200
20 PRINT "bar"
30 END
200 PRINT "foo"
210 RETURN

Folowing code will output:

text
foo
bar
IF, THEN, ELSE

Conditional execution.

Syntax example:

text
var = 5
10 IF var > 10 THEN 100 ELSE 200
100 PRINT "foo"
200 PRINT "bar"

Above code will only output bar, as var is not greater than 10.

CLEAR

Clear the screen and return cursor to the home position.

END

End program execution, return the interactive mode.

RUN

Starts execution of the program. Can be used in the interactive mode only.

LIST

Displays program. Can be used in the interactive mode only.

SAVE

Stores the program on the non-volatile memory. Can be used in the interactive mode only.

LOAD

Loads the program from the non-volatile memory. Can be used in the interactive mode only.

ABS()

Return absolute value.

Syntax example:

text
10 PRINT ABS(-5)
20 PRINT ABS(5)

This program will output:

text
5
5
FRE

Pseudo-variable. Return available BASIC memory in bytes.

INT()

Returns integer part of the real number.

Syntax example

text
PRINT INT(3.1412)

Will output 3.

RND

Pseudo-variable. Return a random real number in the range of <0, 1).

PEEK(), POKE()

Functions that allow direct reading and modification of the computer memory.

Syntax examples:

text
PRINT PEEK(100)

Displays value of the memory at address 100.

text
POKE(100, 42)

Stores 42 at the address 100.

Operators

Following operators are supported:

text
( ) * + , - / ; < = > <= >= AND NOT OR
Variables

Variables are declared on the first use:

text
a = 5
var = 42

Limitations

Applies to rev A, rev B:

All limitations in the firmware come from the limited size of the ROM space and poor performance of the CC65 C compiler. 16 KB of program memory was thought to be just enought to fit a full BASIC interpreter implementation. Alas, CC65 does not optimize almost at all for the code size. 6502 is also infamous of not playing nice with the C language. There was much struggle at the end of the development with the ROM space running out - so some features were removed or abandoned and some functions has been rewritten in assembled instead (which provides huge savings). It was deciced against writing the BASIC interpreter itself in the assembler, in hope to reuse it in the future project, with its portability in mind. Writing the whole firmware in assembler would also prolong the project and more it difficult to maintain.

Due to above concerns, following hardware features are not handled by the firmware:

  • both UARTs,
  • 6522 VIA (apart from I2C and VGA ROM selection),
  • interrupts (only NMI/VBLANK is handled).

Although these features can still be used by PEEK and POKE keywords of BASIC.

Visual glitches are expected on the VGA output when the VRAM is being modified. CPU is too slow and DRAM refresh takes too long to be able to perfom any operation during VBLANK.

PCB

FellaPC rev C SBC PCB and keyboard PCB are a 2-layer design.

Case

Case is provided as STL files that are designed for the FDM 3D priting. There are three parts:

  • keyboard,
  • main body,
  • bottom panel.

All parts are too big to be printed in one piece on most 3D printers, so cutting the model during slicing and glueing back together after printing might be needed. Threaded inserts have to be embedded in the plastic.

Hardware needed:

  • threaded inserts:
  • M3 4x5 mm 9 pieces,
  • M3 4x4 mm 4 pieces,
  • bolts:
  • M3x4 or M3x5 for keyboard and SCB 8 pieces,
  • M3x25 for main body 5 pieces.

Parts

115
QtyValueFootprintReferences
38100nCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mmC2, C3, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C26, C27, C28, C29 +22
474HC244Package_DIP:DIP-20_W7.62mmU19, U28, U35, U36
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
310uCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC5, C6, C7
3470RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR15, R16, R17
34K7Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR7, R8, R9
34K7x8Resistor_THT:R_Array_SIP9RN1, RN3, RN4
36264Package_DIP:DIP-28_W15.24mmU8, U11, U12
374HC574Package_DIP:DIP-20_W7.62mmU20, U25, U38
2100RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR18, R19
210KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR2, R3
21K5Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR5, R6
2470uCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC48, C49
26551Package_DIP:DIP-28_W15.24mmU30, U31
274HC138Package_DIP:DIP-16_W7.62mmU3, U7
274HC245Package_DIP:DIP-20_W7.62mmU21, U37
2BC547Package_TO_SOT_THT:TO-92Q1, Q2
2FusePCM_Fuse_AKL:Fuse_Littelfuse_395SeriesF1, F2
110Kx8Resistor_THT:R_Array_SIP9RN2
110nCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mmC1
11KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR4
11uCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mmC50
1220KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1
124LC256Package_DIP:DIP-8_W7.62mmU34
127256Package_DIP:DIP-28_W15.24mmU9
12764Package_DIP:DIP-28_W15.24mmU26
16264PCM_Package_DIP_AKL:DIP-28_W15.24mmU24
16522Package_DIP:DIP-40_W15.24mmU29
174HC00Package_DIP:DIP-14_W7.62mmU10
174HC02Package_DIP:DIP-14_W7.62mmU22
174HC08Package_DIP:DIP-14_W7.62mmU5
174HC166Package_DIP:DIP-16_W7.62mmU27
174HC174Package_DIP:DIP-16_W7.62mmU17
174HC32Package_DIP:DIP-14_W7.62mmU13
1ACO-1.8432MHz-AOscillator:Oscillator_DIP-14X2
1ACO-25.175MHz-AOscillator:Oscillator_DIP-14X1
1CH340NPackage_SO:SOP-8_3.9x4.9mm_P1.27mmU33
1Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ7
1Conn_02x05_Odd_EvenConnector_IDC:IDC-Header_2x05_P2.54mm_VerticalJTAG1
1Conn_02x06_Odd_EvenConnector_IDC:IDC-Header_2x06_P2.54mm_VerticalJ1
1Conn_02x18_Top_Bottom8bits:EDGE_2x18J6
1DB25_Receptacle_MountingHolesConnector_Dsub:DSUB-25_Socket_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mmJ5
1DE15_Receptacle_HighDensity_MountingHolesConnector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mmJ2
1DE9_Plug_MountingHolesConnector_Dsub:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mmJ4
1LOGOlogo:logoG***
1MAX232Package_DIP:DIP-16_W7.62mmU32
1NE555PPackage_DIP:DIP-8_W7.62mmU2
1ResetButton_Switch_THT:SW_TH_Tactile_Omron_B3F-10xxSW2
1USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_G-Switch_GT-USB-7010ASVJ3
1W65C02SxPPackage_DIP:DIP-40_W15.24mmU4
1XC9536PC44Package_LCC:PLCC-44_THT-SocketU18

More from agkaminski/FellaPC

2
  • 2 layers61.5 × 87.6 mmEmuprom, the printed circuit board in 3D

    Emuprom

    agkaminski/FellaPC

    DIY 6502 all-in-keyboard personal computer

    33 parts2CC0-1.0
  • 2 layers47.2 × 29.2 mmCart, the printed circuit board in 3D

    Cart

    agkaminski/FellaPC

    DIY 6502 all-in-keyboard personal computer

    4 parts2CC0-1.0

Similar boards

  • 4 layers188 × 128.3 mmZAK180, the printed circuit board in 3D

    ZAK180

    agkaminski/ZAK180

    DIY all-in-keyboard computer featuring Z180 and floppy drive

    140 parts
  • 2 layers200 × 150 mmMicro, the printed circuit board in 3D

    Micro

    jurendono/VMC

    A Versitile 6502 Based Microcomputer

    235 parts
  • 2 layers180 × 67.5 mmNEW KANJI ROM, the printed circuit board in 3D

    NEW KANJI ROM

    bml3mk5/S1KanjiRomJIS2

    JIS Level 2 Kanji ROM Card for HITACHI MB-S1

    61 parts
  • 2 layers177.8 × 130.8 mmDurango, the printed circuit board in 3D

    Durango

    zuiko21/minimOS

    Scalable OS for 6502/65816

    159 parts23MIT
  • 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 layers299.7 × 198.1 mmCisc-8, the printed circuit board in 3D

    Cisc-8

    nailed-barnacle/Cisc-8-ttl-processor

    A cut-down version of the 8080 processor using HCTTL and including a discrete ALU and instruction decoder

    319 parts1MIT
  • 2 layers306.1 × 130.2 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64-Home-Computer

    Legacy: Full TTL-only home computer with VGA and PS/2 and twice the processing power of a Commodore 64

    132 parts94

Questions

How big is the Fella PCB?

It measures 284.9 × 96.5 mm and has 2 copper layers, 1.69 mm thick.

What parts does the Fella use?

115 parts, built around the 74HC244D, 74HC245D, MAX232N and CH340N. 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 Fella KiCad files?

From the agkaminski/FellaPC repository on GitHub, at the commit this page was made from: the board is kicad/fella.kicad_pcb and its schematic expansion/cart/cart.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Fella design in my own project?

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