Skip to the content
PCBKitNew board
2 layers194.9 × 90.2 mmGeneric front panel, the printed circuit board in 3D

Generic Front Panel for Hombrew Computers

Size
194.9 × 90.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
74
Nets
162
Pads
473
Tracks, vias
1,679, 56
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
18 May 2025
Updated
31 May 2025

Overview

Generic front panel is an open-source printed circuit board by rweather, from the rweather/generic-front-panel repository on GitHub, published under the MIT licence. It is a 2-layer board of 194.9 × 90.2 mm with 74 parts on 162 nets, routed with 1,679 tracks and 56 vias.

It is built around the 74HC244D, 74HC259D and 74HC138. Its parts include 20 switches, 14 ICs, 12 capacitors, 6 resistors and 6 diodes.

Main components

3

README

README.md

Generic Front Panel

This repository contains schematics and other information for a generic front panel for 8-bit homebrew computers.

Here it is connected to my version of Ben Eater's 6502 Breadboard Computer, running the "hello.s" example from the "src/6502" directory. It is shown here after I typed ABCDEF on the keypad:

Front Panel Connected to 6502 Computer

Here is a close-up of the front panel with a 3D-printed plate over the top:

Front Panel with Front Plate

The "print" directory contains an OpenSCAD file for the 3D-printable plate. My brother, who is into 3D-printing, has a textured print bed for his printer. He printed the plate upside down and the texturing gave the plate a nice finish.

Features

The generic front panel has the following features:

  • 6-digit seven segment display.
  • 16-digit hexadecimal keypad.
  • 3 extra keys for "CMD1", "CMD2", and "CMD3" which can be assigned any commands you like by your software.
  • 1 extra key for a system reset button.
  • 20-pin connector to the rest of your homebrew system.
  • Power LED for the 5V power rail.

Note that this front panel requires software support. It doesn't directly operate the address bus, data bus, clock, and other control lines like front panels of old.

What this front panel does do is make it easy to write a memory monitor in software that can examine memory, modify memory, single-step, and so on. The 6 displays can display a 16-bit address and an 8-bit byte. Or anything else you like, even words.

The seven segment displays, keypad buttons, and power LED are mounted on the front side of the PCB. All other components are mounted on the back side. The inline current limiting resistors are specified as 8-way resistor arrays. However, you could fit 8 regular resistors side by side instead.

The front panel draws about 250mA from the 5V rail when all 48 segments in the 7-segment displays and the power LED are lit. About 5mA per segment.

I have provided drivers and examples for various CPU's under the "src" directory. Patches welcome for other CPU's and homebrew boards.

Schematic and gerber files

The dimensions of the PCB are 195mm x 90mm. Five 3mm mounting holes are provided for mounting behind a face plate: four corners and one in the centre for added strength.

Parts list

  • 1 x Generic Front Panel FP-01 PCB
  • 1 x 74HC138 3-line to 8-line decoder (74LS138 or 74HCT138 can be substituted)
  • 1 x 74HC244 octal buffer / line driver (74LS244 or 74HCT244 can be substituted)
  • 6 x 74HC259 addressable latch (74LS259 or 74HCT239 can be substituted)
  • 6 x 100nF ceramic or monolithic capacitor
  • 5 x 100pF ceramic capacitor
  • 1 x 100uF electrolytic capacitor, rated for 6.3V or better
  • 6 x 470 ohm DIP-16 resistor array
  • 5 x 4.7K ohm resistor
  • 1 x 220 ohm resistor (series resistor for 5mm power LED, adjust value for the LED's current rating)
  • 1 x 5mm LED for the power LED (color is up to you)
  • 6 x MAN71A 7-segment LED display (TIL-312 or Broadcom 5082-7611 can be substituted)
  • 5 x 1N4148 diode
  • 20 x 12mm push button plus keycaps
  • 1 x 20-pin 2.54mm pitch terminal header or socket for the J1 connector

I recommend using DIP-14 sockets for the 7-segment LED displays to raise the height of the displays up to roughly level with the top of the push buttons plus keycaps. Sockets for the other IC's are up to you; I didn't bother.

Labels can be applied to the keycaps using a label maker and clear labels.

This is what the front and back of the PCB looks like once assembled (I had only done a very basic board clean at this point so it is still a little smudgy):

Front Panel Assembled Front Front Panel Assembled Back

20-pin connector

The connector on the bottom of the PCB has the following pins:

PinDescription
1+5V
2D0
3D1
4D2
5D3
6D4
7D5
8D6
9D7
10A0
11A1
12A2
13A3
14A4
15A5
16Select Display (active low)
17Select Keypad (active low)
18Reset (active low)
19GND
20GND

Chip selects

To interface to your homebrew computer, you will need to provide address decoding for the two "chip select" lines "Select Display" and "Select Keypad".

You can put the front panel anywhere in memory or I/O space that is aligned on a 64-byte boundary. Only the bottom 6 address bits are provided to the front panel. You need to decode the upper 10 bits (of a 16-bit address) yourself by some means.

"Select Display" should be low when the top-most bits of the address match the location in memory where you want to put the display, and when the bus is in a write cycle. The display occupies 64 bytes of memory space.

"Select Keypad" should be low when the top-most bits of the address match the location in memory where you want to put the keypad, and when the bus is in a read cycle. The keypad occupies 32 bytes of memory space. It can overlap with the display in memory if that is easier.

Writing to the display

Each segment of the display has its own memory address. Each digit occupies 8 bytes of memory space, for the segments A, B, C, D, E, F, G, and decimal point. The displays are at offsets 0, 8, 16, 24, 32, and 40 in the memory space.

Write a byte with the low bit set to 0 to a segment's address to turn the segment on, or write a byte with the low bit set to 1 to turn the segment off. The segment will stay lit until modified or the power is turned off. The display is not multiplexed so there is no need to constantly refresh.

Writing any byte value to offset 56 will turn all segments on. This can be useful for testing. Normally you will want to turn everything off at startup time.

The "one byte per segment" design was borrowed from the Heathkit ET-3400. 74HC259 addressable latches are used to individually address each segment, and to remember the state of the segment between writes.

Reading from the keypad

The keypad consists of 5 rows of 4 keys. The rows are associated with address bits A0 to A4. Scan through the keypad one row at a time, setting one address bit to 0 and the rest to 1. When you read from that address, the bits that are set to zero indicate which keys are pressed on that row.

AddressBitKey
$XX1E (A0)00
$XX1E (A0)11
$XX1E (A0)22
$XX1E (A0)33
$XX1D (A1)04
$XX1D (A1)15
$XX1D (A1)26
$XX1D (A1)37
$XX1B (A2)08
$XX1B (A2)19
$XX1B (A2)2A
$XX1B (A2)3B
$XX17 (A3)0C
$XX17 (A3)1D
$XX17 (A3)2E
$XX17 (A3)3F
$XX0F (A4)0CMD1
$XX0F (A4)1CMD2
$XX0F (A4)2CMD3
$XX0F (A4)3(not used)

The "Reset" key is special. It will pull pin 18 on the connector down to GND when pressed. It is assumed that a pull-up resistor and debouncing capacitor are present on your main computer board. If you want to use "Reset" for something else (such as a "CMD4" key), you can connect pin 18 to an I/O pin on your main computer board.

The "rows as addresses" design was borrowed from the VZ200 / Laser 200. Only a single 74HC244 bus transceiver is required to read the keypad. Everything else is pushbuttons, diodes, resistors, and capacitors.

There are jumpers on the back of the board that can be cut to wire up additional keys if you need more than 20. The extra keys will be available as bits 4 through 7. The bits are pulled high if the jumpers are uncut.

License

MIT License.

Contact

For more information on this project, to report bugs, or to suggest improvements, please contact the author Rhys Weatherley via email.

Parts

74
QtyValueFootprintReferences
6100nFCapacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mmC1, C2, C3, C4, C5, C11
6470RPackage_DIP:DIP-16_W7.62mmRN1, RN2, RN3, RN4, RN5, RN6
674HC259Package_DIP:DIP-16_W7.62mmU1, U2, U3, U7, U8, U9
6MAN71ADisplay_7Segment:MAN71AU4, U5, U6, U10, U11, U12
5100pFCapacitor_THT:C_Disc_D6.0mm_W2.5mm_P5.00mmC6, C7, C8, C9, C10
51N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD2, D3, D4, D5, D6
53mmMountingHole:MountingHole_3mmH1, H2, H3, H4, H5
54K7Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2, R3, R4, R5, R6
4~Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP1, JP2, JP3, JP4
10Button_Switch_THT:SW_PUSH-12mmSW2
11Button_Switch_THT:SW_PUSH-12mmSW7
1100uFCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC12
12Button_Switch_THT:SW_PUSH-12mmSW12
1220RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1
13Button_Switch_THT:SW_PUSH-12mmSW17
14Button_Switch_THT:SW_PUSH-12mmSW3
15Button_Switch_THT:SW_PUSH-12mmSW8
16Button_Switch_THT:SW_PUSH-12mmSW13
17Button_Switch_THT:SW_PUSH-12mmSW18
174HC138Package_DIP:DIP-16_W7.62mmU13
174HC244Package_DIP:DIP-20_W7.62mmU14
18Button_Switch_THT:SW_PUSH-12mmSW4
19Button_Switch_THT:SW_PUSH-12mmSW9
1AButton_Switch_THT:SW_PUSH-12mmSW14
1BButton_Switch_THT:SW_PUSH-12mmSW19
1CButton_Switch_THT:SW_PUSH-12mmSW5
1CMD1Button_Switch_THT:SW_PUSH-12mmSW6
1CMD2Button_Switch_THT:SW_PUSH-12mmSW11
1CMD3Button_Switch_THT:SW_PUSH-12mmSW16
1DButton_Switch_THT:SW_PUSH-12mmSW10
1EButton_Switch_THT:SW_PUSH-12mmSW15
1FButton_Switch_THT:SW_PUSH-12mmSW20
1InterfaceConnector_PinSocket_2.54mm:PinSocket_1x20_P2.54mm_VerticalJ1
1PowerLED_THT:LED_D5.0mmD1
1ResetButton_Switch_THT:SW_PUSH-12mmSW1

Questions

How big is the Generic front panel PCB?

It measures 194.9 × 90.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Generic front panel use?

74 parts, built around the 74HC244D, 74HC259D and 74HC138. 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 Generic front panel KiCad files?

From the rweather/generic-front-panel repository on GitHub, at the commit this page was made from: the board is schematics/Generic_Front_Panel/Generic_Front_Panel.kicad_pcb and its schematic schematics/Generic_Front_Panel/Generic_Front_Panel.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Generic front panel design in my own project?

Its repository publishes it under the MIT 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

  • 4 layers184.2 × 169.5 mmSB mini II, the printed circuit board in 3D

    SB mini II

    simonboak/SB-mini-II

    A homebrewed Apple II clone

    97 parts76MIT
  • 2 layers131.9 × 164.6 mmTic r2044, the printed circuit board in 3D

    Tic r2044

    alexiosc/cft

    The CFT homebrew minicomputer

    121 parts6GPL-3.0
  • 2 layers66 × 117 mmOutput32DC, the printed circuit board in 3D

    Output32DC

    DavidMFlynn/SerialMRRC

    Serial Model Railroad Control

    98 parts1MIT
  • 2 layers83.8 × 60.8 mmGenesis stacking 3d glasses cart, the printed circuit board in 3D

    Genesis stacking 3d glasses cart

    abzman/SMS-3D-glasses-genesis-cart-stack

    pass-through adapter to add 3d glasses support to a genesis running master system software

    31 parts1Unlicense
  • 2 layers212 × 126 mmUno-14500, the printed circuit board in 3D

    Uno-14500

    juniperlynx/Uno-14500

    A trainer / demonstration system for the Motorola MC14500B

    84 parts1
  • 6 layers150 × 60 mmLogic macropad, the printed circuit board in 3D

    Logic macropad

    Greentalinjo/74HController

    A game controller built entirely from discrete 74HC logic - no microcontroller, a diode ROM and an 8-N-1 serial frame out of an RJ45 console port.

    170 parts
  • 2 layers50 × 100 mmLamp card, the printed circuit board in 3D

    Lamp card

    retrac0/retelex

    Retro telephone exchange. Also retro telex exchange.

    23 parts
  • 2 layers100 × 100 mmCaveboard, the printed circuit board in 3D

    Caveboard

    and3rson/caveboard

    https://youtu.be/Klj2Q3trmW8

    44 parts12MIT