Skip to the content
4 layers254 × 134.6 mmZ280-S100, the printed circuit board in 3D

16-bit Zilog Z280 CPU card for the IEEE-696 S-100 backplane; glue logic in two ATF1508AS CPLDs

Size
254 × 134.6 mm
Copper layers
4
Thickness
1.6 mm
Parts
61
Nets
277
Pads
1,080
Tracks, vias
3,179, 319
Pours
3
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
5 Sep 2026
Updated
8 Sep 2026

Overview

Z280-S100 is an open-source printed circuit board by cm68, from the cm68/Z280-S100 repository on GitHub, published under the CERN-OHL-P-2.0 licence. It is a 4-layer board of 254 × 134.6 mm with 61 parts on 277 nets, routed with 3,179 tracks and 319 vias.

It is built around the 74F245D, 74HCT244D and MAX232N, with the 74F521PC, 74F573D and 74F138D among its other parts. Its parts include 27 ICs, 23 capacitors, 4 resistors, 4 connectors and 1 crystal. It belongs with the fPGA and programmable logic and retro computing and games boards and the FPGA and CPLD boards of this library.

Main components

7

README

README.md

Z280 S-100 CPU Card

A 16-bit Zilog Z280 CPU card for the IEEE-696 S-100 backplane. All the glue logic lives in two Atmel ATF1508AS CPLDs, and the entire schematic + PCB are Python-generated (gen_kicad.py, gen_pcb.py).

Key characteristics

CPUZilog Z280, 16-bit, Z-BUS @ 12 MHz
BusIEEE-696 S-100, 100-pin edge connector
Glue logic2× Atmel ATF1508AS (128 macrocells each)
RAM2 MB SRAM — 4× IS61C5128AS-25 (512K×8, 25 ns), word-addressed as 1M×16
Boot ROM64 KB EEPROM — 2× AT28C256 (32K×8)
ConsoleRS-232 via MAX232, 2×5 IDC header (J7)
Data-bus drive74F245 — meets the IEEE-696 24 mA sink spec

The board is a bus master by default: it drives address, status, control and data onto the backplane. The CPLDs split the work cleanly:

  • Control CPLD (U4, z280-s100-ctl.pld) — "the decider". Arbitration, the master-bridge state machine, local-memory control, and the pre-qualified steering terms (MST_RD/MST_WR/SLV_RD/SLV_WR, XFR16, SPLIT, SLAVE).
  • Data CPLD (U5, z280-s100-ad.pld) — "everything that moves bits". The AD0-15 byte mux to the S-100 DO/DI lanes, the burst address counter, and the byte lane.

Address decode is external: a 74F138 (SRAM window) + two 74F521 comparators (flash window, slave window). The A3–A15 address lines are latched out through two 74F573s, and the 16-bit data bus runs through two 74F245 transceivers.

Memory map (24-bit address space)

RangeSizeDecodeDevice
000000–1FFFFF2 MB74F138 (SRAM_WIN) / 74F521 (SLAVE_WIN)SRAM — board + temporary-master access
F00000–F0FFFF64 KB74F521, A23:A16 = F0Boot EEPROM

The boot EEPROM pair is word-addressed (flash A_n = byte A_{n+1}), so the two parts span 64 KB. They are not socket-interchangeable with 27C256s (pin 27 is WE# here, not A14).

Local-memory DMA (temporary-master access)

Another S-100 master can take the bus and read/write this card's local SRAM directly — DMA-style, without the Z280:

  1. The temporary master (TMA) asserts HOLD; the control CPLD forwards the request to the Z280 (Z_BUSREQ) and waits for Z_BUSACK.
  2. With Z_BUSACK low the board is a slave (SLAVE = !Z_BUSACK # SLAVE_ONLY): the address/status/control 74F245s reverse direction, the data 74F245s float (S100_DODSB), and the 74F573 address latches float their outputs.
  3. The TMA reaches this card's RAM through the slave window — a 74F521 comparator (SLAVE_WIN, hardwired to 000000–1FFFFF) that maps the TMA's address space onto the local SRAM.

The SLAVE_ONLY strap (J11) forces this state permanently, turning the card into a plain memory-only card for bring-up and debug.

Burst mode

The Z280's memory burst mode (consecutive accesses without re-presenting the address) is handled in the data CPLD:

  • a 2-bit burst address counter (A1/A2) increments during a burst;
  • the byte lane (A0) is derived from the low-address bit and the 16→8 SPLIT flag, so byte and word cycles share one data path;
  • 16-bit transfers are detected from WORD and the S-100 SIXTN (16-bit-acknowledge) line: SPLIT16 = WORD & !SIXTN.

SIXTN is open-collector (wired-OR) and pulled up via R4, like the ready lines.

Clock options

Two 24 MHz time-base footprints are laid out; populate exactly one:

  • Y1 — parallel-resonant crystal (HC49) across XTALI/XTALO, or
  • Y2 — a DIP-can oscillator (DIP-8 or DIP-14) driving XTALI.

The Z280 auto-detects the source: a crystal enables the on-chip oscillator, while an external clock into XTALI bypasses it (leave XTALO open). There is no strap for this. Either way the CPU clock is half the XTAL1 frequency, so 24 MHz → 12 MHz processor clock.

Configuration jumpers

J10 — BTI register straps (3×8 header)

The Z280 samples AD0-7 on the rising edge of reset to load its Bus Timing & Initialization (BTI) register — the wait-state field, clock divider, bootstrap and multiprocessor bits. J10 is a 3×8 header, one row per bit: the centre pin selects +5V (logic 1) or GND (logic 0); a 74HCT244 (U21) drives the value onto AD0-7 for the whole reset window.

Default = 0b10001110 (AD7…AD0): direct clock, no bootstrap, no multiprocessor, 3 wait states, bus clock = CPU clock.

J11 — SLAVE_ONLY

2-pin header. Open (default) = normal bus master. Jumper to +5V = permanent slave (memory-only card). R3 (1 kΩ) holds the line low when open.

SLAVE_WIN — temporary-master window

A 74F521 comparator hardwired to 000000–1FFFFF (the same 2 MB window as SRAM) selects where a temporary master sees this card's SRAM. Not user- configurable on this rev.

FLASH_WE — boot-ROM write protection

The 28C256 WE# line is normally driven by the control CPLD (in-system EEPROM programming). Strap it to +5V to hard-write-protect the boot ROM.

Repository layout

PathPurpose
gen_kicad.pyGenerates the schematic (.kicad_sch, .kicad_sym, NOTES.md)
gen_pcb.pyGenerates the board (.kicad_pcb) — components, nets, power planes
sync_pcb.pyReads hand-tweaked PCB placement back into gen_pcb.py
z280-s100-ctl.pldControl CPLD (U4) logic — arbitration, FSM, memory control
z280-s100-ad.pldData CPLD (U5) logic — byte mux, burst counter, byte lane
z280-s100-*.jedCompiled CPLD fuse maps (fit with WinCUPL + ProChip, flashed over JTAG)

CPLDs are flashed over the JTAG header (TDI/TMS/TCK/TDO on pins 14/23/62/71).

License

CERN Open Hardware Licence Version 2 - Permissive (CERN-OHL-P-2.0). Fork, modify and build it freely — just don't claim you designed it: keep the attribution.

Parts

61
QtyValueFootprintReferences
180.1uFCAP-2C6, C7, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 +2
874F245Package_DIP:DIP-20_W7.62mmU15, U16, U17, U18, U19, U20, U25, U26
50.1uFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P2.50mmC1, C2, C3, C4, C5
274F521Package_DIP:DIP-20_W7.62mmU23, U24
274F573Package_DIP:DIP-20_W7.62mmU2, U3
1PATCH
11k SIXTNHDR-2R4
11k SLAVE_ONLYHDR-2R3
11k XRDYHDR-2R2
11k pRDYHDR-2R1
124 MHz crystalHDR-2Y1
128C256 evenPackage_DIP:DIP-28_W15.24mmU10
128C256 oddPackage_DIP:DIP-28_W15.24mmU11
174F138Package_DIP:DIP-16_W7.62mmU22
174HCT244Package_DIP:DIP-20_W7.62mmU21
17805HDR-3U12
1ATF1508 controlPackage_LCC:PLCC-84_THT-SocketU4
1ATF1508 dataPackage_LCC:PLCC-84_THT-SocketU5
1ConfigHDR-3x8J10
1DS1813HDR-3U13
1JTAGHDR-6J9
1LM323KPackage_TO_SOT_THT:TO-3U27
1MAX232Package_DIP:DIP-16_W7.62mmU14
1SLAVE_ONLYConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ11
1SRAM0 evenPackage_DIP:DIP-32_W15.24mmU6
1SRAM0 oddPackage_DIP:DIP-32_W15.24mmU7
1SRAM1 evenPackage_DIP:DIP-32_W15.24mmU8
1SRAM1 oddPackage_DIP:DIP-32_W15.24mmU9
1Serial (2x5)Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ7
1Z280 (ZBUS)Package_LCC:PLCC-68_THT-SocketU1
1Z280 16 Bit MasterS100_MALEV 0.1 curt@zen-room.org

Similar boards

  • 6 layers304.8 × 243.8 mmHydra-16, the printed circuit board in 3D

    Hydra-16

    danstruthers/hydra-16

    6502-based multi-tasking hardware and software project

    210 parts1
  • 4 layers184.9 × 243.8 mmProject NuXT, the printed circuit board in 3D

    Project NuXT

    monotech/NuXT

    MicroATX Turbo XT Motherboard, with VGA, Floppy, CF, Serial

    223 parts121GPL-3.0
  • 2 layers152.4 × 101.6 mm8088-FE2010A SBC, the printed circuit board in 3D

    8088-FE2010A SBC

    skiselev/micro_8088

    Micro 8088 - IBM XT Compatible Processor Board based on Faraday FE2010 chipset

    72 parts412GPL-3.0
  • 2 layers110.1 × 101.6 mmNano8088, the printed circuit board in 3D

    Nano8088

    monotech/Nano8088

    Smaller SMD version of Sergey Kiselev's Micro 8088 SBC, with XT-CF added

    78 parts17GPL-3.0
  • 2 layers209 × 175 mmExcalibur64, the printed circuit board in 3D

    Excalibur64

    Cptscorcher/Excallibur-64

    A reimagining of the seminal Excalibur 64 Computer

    126 partsGPL-3.0
  • 2 layers416.8 × 346.1 mmAmiga 2000R6, the printed circuit board in 3D

    Amiga 2000R6

    iansbremner/Amiga-2000-KiCAD

    Schemtics and PCB Layout for the Amiga 2000 Rev6

    553 parts20
  • 4 layers113 × 69 mmVideoMacPac, the printed circuit board in 3D

    VideoMacPac

    apmcpherson/VideoMacPacHack

    Clone of the Video Mac Pac PDS video card for the Macintosh Portable

    30 parts27
  • 2 layers150 × 150 mm8bit computer, the printed circuit board in 3D

    8bit computer

    halfburnttoast/TCPU8-Alpha

    Discontinued computer I made in 2020

    138 parts4GPL-2.0

Questions

How big is the Z280-S100 PCB?

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

What parts does the Z280-S100 use?

61 parts, built around the 74F245D, 74HCT244D, MAX232N and 74F521PC. 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 Z280-S100 KiCad files?

From the cm68/Z280-S100 repository on GitHub, at the commit this page was made from: the board is z280-s100.kicad_pcb and its schematic z280-s100.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Z280-S100 design in my own project?

Its repository publishes it under the CERN-OHL-P-2.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).