Skip to the content
PCBKitNew board
4 layers100 × 100 mmSimple010-16, the printed circuit board in 3D

Simple010-16

harrowm/Simple0101

68010 SBC using a ATF1608 CPLD based on teh rosco_m68k SBC

Size
100 × 100 mm
Copper layers
4
Thickness
1.6 mm
Parts
75
Nets
124
Pads
562
Tracks, vias
2,839, 241
Pours
6
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
1 Jun 2026
Updated
21 Jun 2026

Overview

Simple010-16 is an open-source printed circuit board by harrowm, from the harrowm/Simple010 repository on GitHub, published under the MIT licence. It is a 4-layer board of 100 × 100 mm with 75 parts on 124 nets, routed with 2,839 tracks and 241 vias.

It is built around the MCP2221A-I/P, AS6C4008-55PCN and USBLC6-2SC6. Its parts include 25 capacitors, 22 resistors, 9 ICs, 6 connectors and 4 diodes. It belongs with the computers and single-board computers and fPGA and programmable logic boards and the FPGA and CPLD boards of this library.

Main components

3

README

README.md

Simple010

A 68010 single-board computer based on the rosco_m68k r2 design. Simple010 replaces the six discrete glue-logic ICs from that design with a single ATF1508AS PLCC84 CPLD, reducing board complexity while adding hardware SPI acceleration for SD card access.

Simple010 board

Hardware overview

ItemDetail
CPUMotorola MC68010P at 10 MHz
RAM1 MB — two AS6C4008-55PCN SRAMs (even/odd byte lanes)
ROMTwo SST39SF040 4 Mb flash (even/odd byte lanes)
CPLDATF1508AS PLCC84 — replaces IC2/IC3/IC4/IC5/IC6/IC7 from rosco_m68k r2
USB/serialMCP2221A — USB-CDC serial to UART A. The original rosco_m68k board has two UARTs A and B. However, the code for two UARTs won't fit into the CPLD, so a cheaper one-channel USB-to-serial chip is used.
PCB4-layer, 100 × 100 mm, JLCPCB stackup (F.Cu / GND / PWR / B.Cu)

Memory map

RangeDevice
$000000–$0FFFFF1 MB SRAM
$100000–$DFFFFFExpansion bus (DTACK from LGEXP)
$E00000–$EFFFFFFlash ROM
$F00000–$FFFFFFI/O — CPLD UART at $F00000, register select via A1–A4

CPLD functional blocks

The CPLD (code/cpld/cpld.v) implements:

  1. Glue logic — HALT/RESET open-drain drivers, CPU-space gating, boot flag
  2. Address decoder — RAM, ROM, expansion, and I/O selects; DTACK; WR
  3. Watchdog — 16-cycle timeout, asserts BERR open-drain
  4. UART A — fixed 115200 8N1, XR68C681-compatible register map
  5. GPIO / OPR — XR68C681 output port emulation; drives SPI CS, LEDs, MOSI, SCK
  6. SPI RX accelerator — hardware-assisted SD card byte receive at ~1.843 MHz
  7. Interrupt priority encoder — replaces 74LS148; encodes IRQ2/3/5/6 + UART RX into IPL2:1:0

Resource utilisation: 122/128 macro cells (95%).

Repository layout

text
design/
  Simple010/            KiCad 10 schematic and PCB (1 MB SRAM)
    Simple010.kicad_sch   top-level (references four sub-sheets)
    CPU.kicad_sch         MC68010P, oscillator, expansion connector
    Memory.kicad_sch      SRAM, ROM, write-enable jumper
    CPLD.kicad_sch        ATF1508AS, JTAG header, LEDs, pull-ups
    USB.kicad_sch         MCP2221A, SD card, reset supervisor, power LEDs
    production/           Gerbers, BOM, position file
  Simple010-16/         KiCad 10 schematic and PCB (16 MB SRAM variant)
  datasheets/           component datasheets and parts index (INDEX.md)

code/cpld/       ATF1508AS Verilog RTL and testbench
  cpld.v                RTL source with //PIN: preassignment comments
  tb_cpld.v             testbench (120 assertions)
  build.sh              synthesis → fit → pin check → simulation
  cpld.jed              program this into the device
  cpld.fit / cpld.pin   fitter log and pin placement

rosco/           rosco_m68k firmware (git clone), modified for Simple010

CPLD build

Requires atf15xx_yosys cloned into ~/atf15xx_yosys, and iverilog/vvp on PATH.

sh
cd code/cpld && ./build.sh

Expected output: 122/128 MCs used and 120/120 tests passed.

To run the testbench without re-synthesising:

sh
cd code/cpld && iverilog -DSIMULATION -o tb_cpld tb_cpld.v cpld.v && vvp tb_cpld

The -DSIMULATION flag is required — without it 2 of 120 tests fail due to a cross-clock-domain handshake that behaves differently under deterministic simulation timing.

Firmware

The firmware is the standard rosco_m68k r2 firmware cloned into rosco/, with minimal changes for Simple010 hardware.

The rosco directory is a clone of rosco-m68k/rosco_m68k. Simple010 changes are on the develop branch, pushed to a fork at harrowm/rosco_m68k. The upstream is origin; the fork is fork:

sh
cd rosco/rosco_m68k
git add <files>
git commit -m "description"
git push fork develop

CPLD compatibility

The CPLD's UART emulates the XR68C681 (MC68681) at the register level. The existing rosco firmware DUART detection and initialisation code works without modification: the CPLD returns 0x0F from the IVR register at reset, exactly as the real XR68C681 does.

Simple010-specific changes

Startup detection — stage1/main1.c

At startup, after printing the standard CPU and memory information, the firmware reads the CPLD detection register and prints additional messages:

text
MC68010 CPU @ 10.0MHz with 1048576 bytes RAM
Simple010 CPLD v1 detected
  SPI RX accelerator present

Detection mechanism: reading byte address 0xF00005 (DUART_R_MISR in machine.h) returns a fixed capability byte from the CPLD:

BitMaskMeaning
70x80CPLD present (always 1)
60x40SPI RX accelerator available
1–00x03Bitstream version (currently 1)

The combined value is 0xC1. On the original XR68C681, this register is MISR (masked interrupt status), which reads ~0x00 at boot — so the detection is safe on original rosco hardware and the CPLD messages simply do not appear.

Address note: the CPLD's uart_sel is gated on ~LDS (lower data strobe), so the access must target the odd byte address 0xF00005. Reading even address 0xF00004 (upper data strobe / UDS) will not reach the CPLD.

SPI RX accelerator — stage1/blockdev/bbspi.c

The CPLD includes a hardware SPI byte-receive engine clocked at ~1.843 MHz (UART_CLK ÷ 2), reducing per-byte bus traffic from ~24 cycles to 2 cycles compared to bit-banging.

BBSPI_initialize() detects the accelerator by reading 0xF00005 and caches the result in a static bool cpld_spi_accel. BBSPI_recv_byte() and BBSPI_recv_buffer() then dispatch on this flag:

Accelerated receive sequence (per byte):

StepActionAddress
1Write any value to SPIRX register — triggers one 8-bit receive0xF00009 (write)
2Poll SRA bit 2 (spi_busy) until clear0xF00003 (read)
3Read received byte from SPIRX register0xF00009 (read)

Send operations (BBSPI_send_byte, BBSPI_send_buffer) are unchanged — they continue to bit-bang through the CPLD GPIO, which is correct since the SD card protocol is heavily read-biased and transmit calls are infrequent. On original rosco hardware, cpld_spi_accel is false and both receive functions fall back to the existing bit-bang asm routines in dua_spi_asm.asm.

Parts and ordering

See design/datasheets/INDEX.md for a full BOM with LCSC and Mouser part numbers.

Key sourcing notes:

  • ATF1508AS-15JU84 — not on LCSC; order from Microchip direct, Mouser (556-AF1508AS15JU84), or DigiKey
  • MC68010P — EOL; source from eBay or second-hand market
  • SST39SF040 PLCC-32 — not stocked on LCSC; use Mouser (579-SST39SF040-70-4I-NHE)

Acknowledgements

Simple010 is based on the rosco_m68k project by Ross Bamford and contributors. The schematic topology, memory map, and firmware are derived from the rosco_m68k r2 mainboard design.

Parts

75
QtyValueFootprintReferences
20100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C2, C3, C5, C10, C11, C12, C13, C14, C15, C16, C17, C20, C21, C22, C24 +4
114K7Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R22
51KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3, R4, R19, R20, R21
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
210KResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2
210uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC4, C19
25.1kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR17, R18
2AS6C4008-55PCNPackage_DIP:DIP-32_W15.24mm_LongPadsU5, U6
2GREENLED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderLED1, LED3
2REDLED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderLED2, LED4
2SST39SF040Package_LCC:PLCC-32_THT-SocketU3, U4
1100pFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC23
11K2Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR5
11MResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR16
1470nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC25
147uFCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC18
1ATF1508ASx-xxJx84Package_LCC:PLCC-84_THT-SocketU2
1Backup serialConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ4
1CS2Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_VerticalJ1
1Conn_02x05_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ2
1Conn_02x32_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x32_P2.54mm_VerticalJ7
1LM809M3-4.63/NOPBPackage_TO_SOT_SMD:SOT-23U9
1Legacy ExpansionConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP2
1MC68010PPackage_DIP:DIP-64_W22.86mmU1
1MCP2221APackage_SO:SOIC-14_3.9x8.7mm_P1.27mmU8
1ROM WR EnableConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP1
1ResetButton_Switch_SMD:SW_SPST_SKQG_WithoutStemSW1
1SD CardConnector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_VerticalJ8
1SG-5032CAN 10MHzOscillator:Oscillator_SMD_SeikoEpson_SG8002LB-4Pin_5.0x3.2mm_HandSolderingY1
1SG-5032CAN 3.6864MHzOscillator:Oscillator_SMD_SeikoEpson_SG8002LB-4Pin_5.0x3.2mm_HandSolderingY2
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U7
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J3

Questions

How big is the Simple010-16 PCB?

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

What parts does the Simple010-16 use?

75 parts, built around the MCP2221A-I/P, AS6C4008-55PCN and USBLC6-2SC6. 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 Simple010-16 KiCad files?

From the harrowm/Simple010 repository on GitHub, at the commit this page was made from: the board is design/Simple010-16/Simple010-16.kicad_pcb and its schematic design/Simple010-16/CPLD.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Simple010-16 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

  • 2 layers49.5 × 49.5 mmAtmega gpib, the printed circuit board in 3D

    Atmega gpib

    cellularmitosis/atmega-gpib

    An ATmega-based GPIB-to-USB adapter board.

    24 parts16MIT
  • 2 layers74.9 × 89.2 mmPictas, the printed circuit board in 3D

    Pictas

    bigbass1997/PICTAS

    Low-cost replay device for playing back Tool Assisted Speedruns on real hardware

    37 parts9
  • 2 layers63.5 × 45.5 mmF ramune avr, the printed circuit board in 3D

    F ramune avr

    obskyr/f-ramune

    A device for testing and programming FRAM chips! Finally you can be sure that FRAM you bought from China works.

    27 parts6
  • 2 layers44.1 × 82.7 mmRemote64-controller, the printed circuit board in 3D

    Remote64-controller

    bigbass1997/remote64

    Provides a method for N64 homebrew developers to test their roms on remote hardware

    20 parts4
  • 2 layers39.4 × 20.3 mmPsense, the printed circuit board in 3D

    Psense

    noahp/psense

    🔌 Basic USB interfaced power sensor

    25 parts3
  • 4 layers99.1 × 75.7 mmCircuit tap, the printed circuit board in 3D

    Circuit tap

    gcoonrod/circuit-tap

    Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

    65 partsApache-2.0