Skip to the content
PCBKitNew board
2 layers102.8 × 73.8 mmCPU, the printed circuit board in 3D

This is an experimental project to connect Raspberry Pi with the help of cheap Cyclone IV FPGA board to 8-bit ISA bus to act as multiple different devices.

Size
102.8 × 73.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
18
Nets
101
Pads
227
Tracks, vias
543, 130
Pours
2
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
17 Jul 2022
Updated
11 Nov 2023

Overview

CPU is an open-source printed circuit board by eigenco, from the eigenco/frankenpi repository on GitHub. It is a 2-layer board of 102.8 × 73.8 mm with 18 parts on 101 nets, routed with 543 tracks and 130 vias.

Its parts include 8 resistors, 7 connectors, 1 capacitor and 1 IC.

README

README.md

frankenpi

This is an experimental project to connect Raspberry Pi with the help of cheap Cyclone IV FPGA board to 8-bit ISA bus to act as multiple different devices.

What is currently implemented (to some degree), i.e. PC can access through ISA

  • Mass storage access from a file on the Raspberry Pi (written sectors are flushed every 2 seconds by default)
  • Adlib output to optical SPDIF
  • Sound Blaster 8-bit mono with DMA and IRQ (basic functions only), output to optical SPDIF
  • Gravis Ultrasound (basic wavetable only), output to optical SPDIF
  • Roland MT-32 (UART only), output to optical SPDIF
  • USB mouse plugged into the Raspberry Pi will appear as a kind of serial mouse in DOS, custom ctmouse driver is provided (start with /v)
  • Boot from custom TVGA9000i VGABIOS, i.e. no other devices are required to be present in the ISA bus besides FrakenPi and VGA-adapter

Youtube links:

https://www.youtube.com/watch?v=1ej76w8sHxY

https://www.youtube.com/watch?v=CkwgHHmKaSI

TESTED and working:

  • Wolfenstein 3D (SB & Adlib)
  • Second Reality (GUS)
  • Scream Tracker 3.21 (SB1 and GUS)
  • Skyroads (SB & Adlib)
  • Keen 4 (Adlib)
  • Monkey Island (Adlib/MT32/Mouse)
  • Space Quest 3 (Adlib/Mouse)
  • Space Quest 4 (Adlib/MT32/Mouse)
  • Lotus 3 (Adlib)
  • Lemmings (Adlib/Mouse)
  • Eye of the Beholder I & II (Adlib/Mouse)
  • Indiana Jones and the Fate of Atlantis (Adlib/MT32/Mouse)

Planned

  • General MIDI
  • MPU-401 support
  • Sound Blaster AWE32 wavetable support
  • Standard ATA at ports 1f0h-1f7h
  • Compatibility improvements
  • Boot ROM in the FPGA so hacked VGABIOS isn't required
  • VGA output

Used resources

  • Harddisk: ports 170h-171h
  • SoundBlaster: ports 22ah-22eh corresponding ot base address of 220h, IRQ 7 and DMA 1
  • MT32: 330h-331h
  • Gravis Ultrasound: ports 341h-347h corresponding to base address of 240h
  • Adlib: ports 388h-389h (standard)
  • Mouse: port 3f8h and IRQ 4 (COM1)
  • Bootcode for custom int 13h resides in hacked VGABIOS at the end of C0000-C7FFF memory region

Further explanation

  • Outgoing port operations are transferred from the FPGA to the Raspberry Pi GPIO using dedicated unidirectional 8-bit data bus
  • Incoming data from the Raspberry Pi GPIO (PCM, harddisk, mouse) is transferred using dedicated unidirectional 8-bit data bus
  • Raspberry Pi: CPU0 handles hdd flushing and mouse, CPU1 handles GPIO transfers, CPU2 handles Adlib, Gravis Ultrasound and MT32 (software selected)
  • Raspberry Pi operates with CPU1-CPU3 in isolated mode, all CPUs run at constant 1 GHz and sched_rt_runtime_us is -1
  • Raspberry Pi generates sound data 64 samples at a time (16-bit stereo corresponds to 256 bytes it must transfer every 1.45ms or so)
  • SPDIF is running in 24-bit 44100 Hz Stereo
  • Hardcoded harddisk type is CHS 256/16/63, i.e. approx. 126MiB

Plan for the next PCB

  • ICE40HX8K-CT256 (FPGA) seems to be available at Mouser
  • IS61WV102416FBLL-10TLI (2 MByte SRAM) seem to be available at Mouser
  • Created KiCAD project (PCB_v2)

Parts

18
QtyValueFootprintReferences
810kResistor_SMD:R_0603_1608MetricR1, R2, R3, R4, R5, R6, R7, R8
4Conn_02x08_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalJ1, J2, J3, J66
10.1uCapacitor_SMD:C_0603_1608MetricC1
174LS688Package_DIP:DIP-20_W7.62mm_SocketU19
1Bus_ISA_8bitadlib:BUS_PCJ5
1Conn_02x09_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x09_P2.54mm_VerticalJ4
1Raspberry_Pi_2_3Connector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_VerticalJ6
1TOTX1350_F_SamacSys_Parts:TOTX1350FCS1

Questions

How big is the CPU PCB?

It measures 102.8 × 73.8 mm and has 2 copper layers, 1.6 mm thick.

What parts does the CPU use?

18 parts. 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 CPU KiCad files?

From the eigenco/frankenpi repository on GitHub, at the commit this page was made from: the board is KiCad/CPU.kicad_pcb and its schematic KiCad/CPU.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the CPU design in my own project?

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

More from eigenco/frankenpi

3
  • 2 layers104.1 × 71.1 mmMinifp, the printed circuit board in 3D

    Minifp

    eigenco/frankenpi

    This is an experimental project to connect Raspberry Pi with the help of cheap Cyclone IV FPGA board to 8-bit ISA bus to act as multiple different devices.

    69 parts139
  • 2 layers104.1 × 71.1 mmMinifp, the printed circuit board in 3D

    Minifp

    eigenco/frankenpi

    This is an experimental project to connect Raspberry Pi with the help of cheap Cyclone IV FPGA board to 8-bit ISA bus to act as multiple different devices.

    49 parts139
  • 2 layersFPGA, the printed circuit board in 3D

    FPGA

    eigenco/frankenpi

    This is an experimental project to connect Raspberry Pi with the help of cheap Cyclone IV FPGA board to 8-bit ISA bus to act as multiple different devices.

    3 parts139

Similar boards

  • 2 layers27.9 × 16.5 mmPowerSSO-24 breakout, the printed circuit board in 3D

    PowerSSO-24 breakout

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    18 parts1.2k
  • 2 layers42.7 × 13.7 mmStm32-mini12864, the printed circuit board in 3D

    Stm32-mini12864

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    18 parts1.1kGPL-3.0
  • 2 layers41.2 × 46.6 mmThumb cluster left, the printed circuit board in 3D

    Thumb cluster left

    JesusFreke/lalboard

    A 3D-printed keyboard inspired by the DataHand

    18 parts993
  • 2 layers44 × 51.3 mm4272MAVcoder R4, the printed circuit board in 3D

    4272MAVcoder R4

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    18 parts915
  • 2 layers28.3 × 14.3 mmTap Photosensor PCB, the printed circuit board in 3D

    Tap Photosensor PCB

    VoronDesign/Voron-Tap

    Tap is a nozzle-based z-probe for the V2 and Trident printer designs. The entire toolhead moves to trigger an optical switch. Tap offers many advantages:

    18 parts716GPL-3.0
  • 2 layers20.3 × 15.2 mmL0 stepper driver, the printed circuit board in 3D

    L0 stepper driver

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    18 parts546MIT
  • 2 layersMooltipass, the printed circuit board in 3D

    Mooltipass

    limpkin/mooltipass

    Github repository dedicated to the mooltipass project

    18 parts531
  • 2 layers42.5 × 28.8 mmC5VRX JACK DIY V2, the printed circuit board in 3D

    C5VRX JACK DIY V2

    Twotoz/C5VRX

    Ultra-minimal, zero-CPU 5.8 GHz analog FPV video receiver using ESP32-C5 Wi-Fi 6 PHY MODEM_DIAG, BitScrambler WBFM demodulation & resistor DAC CVBS

    18 parts515GPL-3.0