Skip to the content
PCBKitNew board
2 layers207 × 76 mmAltairDrive, the printed circuit board in 3D

MCP-Enabled Serial Terminal, Disk Image Management, Altair FDC+ Disk Server

Size
207 × 76 mm
Copper layers
2
Thickness
1.6 mm
Parts
40
Nets
60
Pads
125
Tracks, vias
235, 0
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
17 Nov 2025
Updated
17 Sep 2026

Overview

AltairDrive is an open-source printed circuit board by joezilla, from the joezilla/bitsby8 repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 207 × 76 mm with 40 parts on 60 nets, routed with 235 tracks and 0 vias.

Its parts include 17 resistors, 17 diodes, 4 connectors and 2 switches. It belongs with the computers and single-board computers and interfaces and adapters boards of this library.

README

README.md

BitsBy8

MITS Altair 8800

BitsBy8 turns a Raspberry Pi (or any Linux/macOS machine) into a disk server and virtual-machine workbench for the MITS Altair 8800 and other S-100 computers.

It serves virtual floppy and hard-disk images to a real Altair through its FDC+ Enhanced Floppy Disk Controller over a serial cable — and it can also build and boot fully virtual S-100 machines right in your browser, no hardware required. Everything runs from a single Svelte web UI, with a REST API and an MCP server for AI assistants on the side.

Version: 3.0.0-alpha · License: GPL-3.0 · Platforms: Linux (Raspberry Pi & x86), macOS

Note: BitsBy8 is the product name. The Debian package and systemd service are now named bitsby8 (the CLI is bitsby8, with an fdcsds alias kept for backward compatibility). The source repo is still fdcplus-web.

BitsBy8 web UI — the Drives & Library page: four drive bays across the top, disk-image library below.


What it does

Serve disks to a real Altair. Mount up to four floppies (plus larger hard-disk images) and serve them to an unmodified Altair 8800 through its FDC+ controller over serial — or over a WebSocket link to an Altair simulator. Drives can be read-only or copy-on-write, and multiple machines can share the same library at once.

Run virtual machines. Assemble an S-100 computer from a catalog of emulated cards — CPU (8080/Z80), RAM, disk, serial, video — save it as a reusable Machine Profile, and boot it in the browser. Each running machine gets a live serial console, an Altair-style front panel, and a video monitor (VDM-1 character display / Cromemco Dazzler graphics). Snapshot a machine and restore it later.

One place to drive it all. The web UI, a full REST API, and an MCP server (90+ tools) all reach the same live state, so you can operate BitsBy8 by hand, from scripts, or from an AI assistant.

At a glance:

  • 💾 Disk serving over real serial or WebSocket, with read-only and copy-on-write (transient / per-client "splinter") mounts you can keep, commit, or save as a new image
  • 🖥️ Virtual S-100 machines — card catalog, machine profiles, and a run cockpit with console, front panel, and video monitor
  • ⌨️ VT102 terminal in the browser for a real serial console or a virtual machine's console — reconnects where you left off
  • 🧑‍🤝‍🧑 Multi-client serving so several machines (real and virtual) share one disk library
  • 📼 Cassette audio playback
  • 🤖 AI assistant integration via MCP (stdio or HTTP), plus OpenAPI/Swagger docs at /api/docs

Quick start (no hardware needed)

Try the whole thing on your laptop — mount a sample disk or boot a virtual machine without an Altair in sight:

bash
git clone <repo-url> fdcplus-web && cd fdcplus-web
pnpm install            # provisions the backend + frontend workspace
pnpm dev:all            # backend + web UI, live-reloading
open http://localhost:3000

Requires Node.js 22+ and pnpm.


Installation

Raspberry Pi / Debian (recommended for real hardware)

Build and install the .deb, then run it as a systemd service:

bash
make deb
sudo dpkg -i ../bitsby8_*.deb
sudo apt-get install -f            # pull in any missing dependencies

sudo nano /etc/bitsby8/bitsby8.config.json   # set your serial port, drives, etc.
sudo systemctl enable --now bitsby8          # start on boot and now

Upgrading from an older fdcsds install is automatic — apt supersedes it and your config, data, and database are migrated.

The web UI is then at http://<pi-hostname>:3000. See DEBIAN-PACKAGE.md for the full packaging guide.

Docker

bash
docker compose up -d      # then open the web UI (default port 3000)

Configuration and data persist in the mounted volume; see docker-compose.yml.

From source

bash
git clone <repo-url> fdcplus-web && cd fdcplus-web
pnpm install
pnpm build:all            # compile backend + build the web UI
pnpm start -- --web       # or: bitsby8 --web  (if installed globally)

Connecting a real Altair

Wire the FDC+ controller to a USB serial adapter and point BitsBy8 at that port:

bash
bitsby8 -p /dev/ttyUSB0 -0 disks/cpm22.dsk -w
# -p  serial port for the FDC+     -0..-3  mount a disk to a drive
# -w  enable the web interface     -b <rate>  set baud (default 230400)

A second serial port can drive an interactive console terminal in the web UI:

bash
bitsby8 -p /dev/ttyUSB0 -0 disks/cpm22.dsk \
  --terminal-port /dev/ttyUSB1 --terminal-baud 9600 -w

A few setup notes:

  • Serial permissions (Linux): add your user to the dialout group (sudo usermod -aG dialout $USER, then log out and back in).
  • Stable port names: USB port names like /dev/ttyUSB0 can shuffle across reboots. Run bitsby8 --show-persistent-paths to get a stable /dev/serial/by-id/... path for your config.
  • No physical FDC+? An Altair simulator can connect over WebSocket instead of serial — see docs/WS-FDC-TRANSPORT.md.

Generate a starter config any time with bitsby8 --example-config > .bitsby8.config, and run bitsby8 --help for the full option list.


The web interface

Open the UI and everything is in the left sidebar:

SectionWhat it's for
DisksMount/unmount images across the four drive bays, toggle read-only, browse and upload the disk library, take snapshots
Virtual MachinesBoot machine profiles and drive them in the run cockpit — serial console, Altair front panel, video monitor
Card Catalog / Machine ProfilesAssemble S-100 machines from emulated cards and save them as reusable profiles
TerminalA VT102 console for a real serial port or a running virtual machine
CassettesPlay cassette-tape audio images
Disk ClientsSee and manage the machines currently sharing your disks (multi-client serving)
ScriptsReplay canned input / XMODEM transfers to a machine
ConfigServer settings — serial defaults, web/API, MCP

More detail in docs/WEB-INTERFACE.md.


AI assistant integration (MCP)

BitsBy8 ships a Model Context Protocol server exposing 90+ tools — mount disks, drive machines, read/write CP/M files, run the terminal — to assistants like Claude Code. It's off by default; opt in per transport:

  • Local (stdio): point your assistant at bitsby8 --mcp:
    json
    { "mcpServers": { "bitsby8": { "command": "bitsby8", "args": ["--mcp", "--data-dir", "/path/to/data"] } } }
  • Over the LAN (HTTP): set an API key, then enable MCP-over-HTTP in Config → MCP server (or --mcp-http). It requires a bearer token and is intended for trusted networks — put TLS in front if you expose it.

The tools can read and write disk images and send bytes to real hardware, so don't point an assistant at a production machine without meaning to.


Configuration

Settings live at two layers:

  • Install-time defaults — a config file (/etc/bitsby8/bitsby8.config.json, or .bitsby8.config from source) plus CLI flags. These set up the box; changes take effect on restart.
  • Day-to-day settings — managed live from the web UI (and REST/MCP), stored in a SQLite database in the data directory. Per-image settings like notes, write policy, and snapshots live here and apply immediately.

The data directory (/var/lib/bitsby8 on a .deb install) holds your disk library, uploads, cassettes, and the database.


Documentation


License

GPL-3.0.

Credits

  • BitsBy8 software (disk server, web interface, virtual machines, MCP server): Joe Toppe, 2024–present.
  • FDC+ Enhanced Floppy Disk Controller hardware: Mike Douglas / deramp.com. BitsBy8 talks to that controller over serial; the hardware itself is a separate product.

See AUTHORS for the full contributor list.

References

Parts

40
QtyValueFootprintReferences
17470Resistor_THT:R_Bare_Metal_Element_L12.4mm_W4.8mm_P11.40mmR1, R2, R3, R4, R5, R6, R7, R8, R10, R11, R12, R13, R14, R15, R16, R17 +1
11_HLLED_THT:LED_D5.0mmD2
11_MTLED_THT:LED_D5.0mmD1
11_ROLED_THT:LED_D5.0mmD3
12_HLLED_THT:LED_D5.0mmD5
12_MTLED_THT:LED_D5.0mmD4
12_ROLED_THT:LED_D5.0mmD6
13_HLLED_THT:LED_D5.0mmD8
13_MTLED_THT:LED_D5.0mmD7
13_ROLED_THT:LED_D5.0mmD9
14_HLLED_THT:LED_D5.0mmD11
14_MTLED_THT:LED_D5.0mmD10
14_ROLED_THT:LED_D5.0mmD12
1ACTLED_THT:LED_D5.0mmD17
1Conn_01x03_PinConnector:FanPinHeader_1x03_P2.54mm_VerticalJ3
1Conn_02x20_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_VerticalJ1
1I2CConnector:FanPinHeader_1x04_P2.54mm_VerticalJ4
1PWRLED_THT:LED_D5.0mmD16
1SERIALConnector:FanPinHeader_1x03_P2.54mm_VerticalJ2
1SW_PWRMrEppot:E-SwitchSW2
1SW_RBTMrEppot:E-SwitchSW3
1S_COLED_THT:LED_D5.0mmD13
1S_RXLED_THT:LED_D5.0mmD15
1S_TXLED_THT:LED_D5.0mmD14

Questions

How big is the AltairDrive PCB?

It measures 207 × 76 mm and has 2 copper layers, 1.6 mm thick.

What parts does the AltairDrive use?

40 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 AltairDrive KiCad files?

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

Can I use the AltairDrive design in my own project?

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

Similar boards

  • 2 layers139.7 × 73.7 mm134pin 7-967288-1, the printed circuit board in 3D

    134pin 7-967288-1

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    40 parts1.2k
  • 2 layers149.4 × 177.4 mmLightsculpture, the printed circuit board in 3D

    Lightsculpture

    hackclub/OnBoard

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

    40 parts915
  • 2 layers150 × 50 mmEleLab v2 Bus150, the printed circuit board in 3D

    EleLab v2 Bus150

    Chrismettal/EleLab_v2

    Cheap DIY lab system for hobbyists and the tinkering folk

    40 parts531GPL-3.0
  • 2 layers66.4 × 48.1 mmRaspberry, the printed circuit board in 3D

    Raspberry

    Chrismettal/flipper-zero-backpacks

    Backpack-style addon boards for the Flipper Zero!

    40 parts456
  • 2 layers44 × 44 mmTrackball, the printed circuit board in 3D

    Trackball

    jfedor2/rp2040-pmw3360

    RP2040+PMW3360 PCB and code

    40 parts432
  • 2 layers90.8 × 53.3 mmABSIS Bus Master, the printed circuit board in 3D

    ABSIS Bus Master

    jrsteensen/OpenHornet

    OpenHornet 1:1 F/A-18C Simulator Repository

    40 parts431
  • 2 layers59.6 × 109.5 mmDrop, the printed circuit board in 3D

    Drop

    ohmtech-rdi/eurorack-blocks

    Software to Hardware Prototyping for Eurorack using C++, Max/Gen~ or Faust

    40 parts410
  • 2 layers123.8 × 73.5 mmAttic, the printed circuit board in 3D

    Attic

    simondlevy/Hackflight

    Minimalist flight-control toolkit for makers

    40 parts334GPL-3.0