Skip to the content
PCBKitNew board
2 layers100 × 110 mmA2m2053, the printed circuit board in 3D

A replacement controller board for the Apple UniDisk 3.5 (A2M2053).

Size
100 × 110 mm
Copper layers
2
Thickness
1.6 mm
Parts
46
Nets
80
Pads
350
Tracks, vias
768, 123
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
16 Oct 2026
Updated
27 Oct 2026

Overview

A2m2053 is an open-source printed circuit board by robertrico, from the robertrico/a2m2053_controller repository on GitHub. It is a 2-layer board of 100 × 110 mm with 46 parts on 80 nets, routed with 768 tracks and 123 vias.

It is built around the STPS2L40AF. Its parts include 18 resistors, 13 capacitors, 5 ICs, 5 connectors and 1 diode. It belongs with the RP2040 boards of this library.

Main components

1

README

README.md

A2M2053 Controller

A replacement controller board for the Apple UniDisk 3.5 (A2M2053).

The prototype chained with a working UniDisk on an Apple IIe

Overview

The UniDisk 3.5 is Apple's 800K drive for the Apple II. When its controller board (IF-83, service part 661-0307) dies, there's nothing to fix it with. The board is built around a Sony CXD1013 gate array that has no public datasheet and no replacement, and the only spare board on eBay has sat unsold at $150 for months.

This project replaces the whole board. A Raspberry Pi RP2350 speaks SmartPort to the Apple IIe through the Liron card and drives the stock Sony 800K mechanism directly through its 20-pin connector. The 65C02, ROM, RAM, IWM and the CXD1013 are all gone. The mechanism, the case and the front panel stay.

It isn't a clone of the original. The firmware is new C on the Pico SDK. The original drive ROM is used as a test oracle for SmartPort behavior, status codes, errors and timing, never as a template.

Features

  • SmartPort device on the Liron card: STATUS, READBLOCK, WRITEBLOCK, FORMAT, CONTROL (eject), INIT
  • Reads, writes and formats 800K double-sided ProDOS disks
  • Daisy chain out the rear DB-19, in front of or behind another drive
  • Front-panel eject button and in-use LED
  • Runs from the Apple's own +5V and +12V rails through the host cable
  • Whole-track read buffer on its own core; every write verified on the next revolution
  • USB console for bring-up: mechanism status, raw flux capture, block reads, whole-disk scans, bus counters

Scope

Apple IIe with 800K double-sided ProDOS disks. Macintosh disks (524-byte blocks, Mac interleave) and 400K single-sided disks show up in Apple's docs and the drive ROM but were never used on the IIe, so they're out of scope.

Specifications

ParameterValue
MCURP2350A on a Raspberry Pi Pico 2 (prototype)
Level shifting5x SN74LVC8T245, 3.3V to 5V, one DIR and /OE per 8 channels
GPIO25 of 26 used
Host interfaceSmartPort, Liron card DB-19 (CN102)
Mechanism interfaceSony 800K 20-pin (CN104, ERS 699-0321)
MechanismStock Sony 800K double-sided, CX23077A logic + CX20185 read/write amp
Rear portDB-19 daisy chain: PH3_OUT, ENBL_OUT, LASTONE/
Power+5V and +12V from the host connector; Pico VSYS from +5V through a diode

Architecture

text
 Apple IIe / Liron card                                  Sony 800K mechanism
         | DB-19                                                | 20-pin
   [level shifters]                                    [level shifters]
         |                                                      |
   PIO0: SmartPort FM rx/tx                     PIO1: flux capture / GCR write
   PIO2: rear-port pass-through                                 |
         |                                                      |
   CORE 0: SmartPort device  <---- block request queue ---->  CORE 1: mechanism
   - bus phases, packets                                      - status, seek, motor, eject
   - commands, DIB, status                                    - speed zones
   - daisy-chain ID, LASTONE/                                 - whole-track buffer
                                                              - GCR decode/encode

Each SmartPort read, write or format becomes a request to core 1. Core 0 holds ACK until the answer is back, and the Liron card waits.

Project status

Perfboard prototype: done (October 2026). Milestones M0 to M9 passed on the bench with a Pico 2, five 8T245 breakout boards and a mechanism from a dead UniDisk.

MilestoneWhatLog
M0Bench rig, power, shifter boot safetym0
M1Mechanism status readsm1
M2Mechanism commands: motor, seek, ejectm2
M3Raw flux capture, decoded on the Macm3
M4Whole disk read on the boardm4
M5Write and format; the working UniDisk reads our diskm5
M6SmartPort on the RP2350; ProDOS boots from a RAM diskm6
M7ProDOS boots from a real floppy through the Liron cardm7
M7.5Bench supply retired; runs on the IIe railsm7_5
M8Daisy chain with a working UniDisk, both ordersm8
M9Disk swaps, write-protect, ejects, resets, long runsm9

Drop-in PCB: in design. The outline matches the IF-83 and fits the original mounting holes and case opening (checked with 3D prints). The board must stay hand-solderable and well under the $150 the spare board couldn't sell for. Requirements carried from the bench: FABRICATION.md.

Build notes and photos are also on bytehamr.com.

Repository structure

text
a2m2053_controller/
├── firmware/            # RP2350 firmware (C, Pico SDK)
│   ├── src/             # SmartPort, mechanism server, PIO programs, console
│   └── test/            # Host-side unit tests (fake drive, simulated Liron card)
├── tools/
│   ├── a2m/             # Python: console client, flux decode, GCR, PIO model
│   ├── apple/           # Test disk builders and SPCOMPARE (Applesoft)
│   └── tests/           # pytest
├── hardware/kicad/      # KiCad schematic and PCB
├── docs/
│   ├── build_log/       # Per-milestone notes and measurements
│   ├── captures/        # Scope shots, Apple screens, console logs
│   ├── photos/          # Bench photos
│   ├── superpowers/specs/  # Design spec
│   ├── research_notes.md   # Facts with sources; start here
│   ├── level_shifting.md   # Signal directions and shifter grouping
│   └── pin_budget.md       # GPIO map
└── FABRICATION.md       # PCB requirements and part choices

Getting started

Prerequisites

  • Pico SDK 2.2.0, CMake, Ninja, arm-none-eabi-gcc
  • A Raspberry Pi Debug Probe (or picoprobe) and Raspberry Pi's OpenOCD build for SWD flashing
  • Python 3 for the tools (tools/requirements.txt)
  • AppleCommander and ADTPro for the test disks

Building and flashing

bash
cd firmware
make            # build
make test       # host-side unit tests
make flash      # program over SWD (OpenOCD)
make reset      # reset the target

Tool paths live in .env.local at the repo root, git-ignored. Copy .env.example, fill in PICO_SDK_PATH and, if they are not on your PATH, OPENOCD and GDB. Anything already in your environment or on the make command line wins over the file. The test-disk scripts in tools/apple/ read AC_JAR and PRODOS_SRC from the same file.

Console

The firmware exposes a USB CDC console. help lists the commands: mechanism status and control, flux capture, block reads and writes, whole-disk scans, format, and sp for the SmartPort bus state and counters. The Python tool drives the console for the scripted jobs:

bash
cd tools
python -m a2m.cli readdisk --port /dev/cu.usbmodemXXXX --out disk.po --compare ref.po

Design references

This project builds on:

  • Byte Hamr: the PicoPort SmartPort device for the RP2040 (the FM receive/transmit PIO programs and packet layout started there), its IWM work, and the annotated drive ROM disassembly by Eric Smith used as the oracle.
  • bitsavers: Sony 800K drive ERS (699-0321), mechanism schematics, Apple drive command and status codes.
  • tashnotes: GCR checksum and drive command tables.
  • Apple II Technical Notes (UniDisk 3.5 #1-#5, Misc #6) and the IWM specifications, via the Asimov archive.

Datasheets, Apple and Sony documents, and photos of other people's boards were used during the work but aren't ours to host, so they're not in this repo. docs/SOURCES.md says where each one came from.

License

This project is released under the MIT License.

Author

Robert Rico

Parts

46
QtyValueFootprintReferences
1510kResistor_SMD:R_1206_3216MetricR1, R2, R3, R4, R5, R6, R7, R8, R9, R11, R12, R13, R14, R15, R18
10100nFCapacitor_SMD:C_0805_2012MetricC1, C2, C3, C4, C5, C6, C7, C8, C9, C10
5SN74LVC8T245DWRPackage_SO:SOIC-24W_7.5x15.4mm_P1.27mmU1, U2, U3, U4, U5
34.7uF 50VCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC11, C12, C13
1100kResistor_SMD:R_1206_3216MetricR10
1180Resistor_SMD:R_1206_3216MetricR17
12kResistor_SMD:R_1206_3216MetricR16
1CN102 host (FROM HOST)Connector_IDC:IDC-Header_2x10_P2.54mm_VerticalJ3
1CN104 mechanismConnector_IDC:IDC-Header_2x10_P2.54mm_VerticalJ2
1DB-19 female R/A (daisy chain)a2m2053:DSUB-19_Female_Horizontal_P2.77x2.84mm_MountingHoles38.8mmJ1
1Eject buttona2m2053:TE_AMP_CT_1x03_P2.00mm_VerticalJ4
1In-use LEDa2m2053:TE_AMP_CT_1x02_P2.00mm_VerticalJ5
1LOGOa2m2053:logo_smG***
1M3 frame grounda2m2053:MountingHole_3.2mm_M3_Pad_5.2mmH1
1M3 frame groundMountingHole:MountingHole_3.2mm_M3_Pad_ViaH2
1Pico 2Module:RaspberryPi_Pico_SMD_HandSolderA1
1STPS2L40AFDiode_SMD:D_SMAD1

Questions

How big is the A2m2053 PCB?

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

What parts does the A2m2053 use?

46 parts, built around the STPS2L40AF. 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 A2m2053 KiCad files?

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

Can I use the A2m2053 design in my own project?

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

Similar boards

  • 4 layers94 × 50.8 mmUlx3s, the printed circuit board in 3D

    Ulx3s

    drandyhaas/KiCadRoutingTools

    A set of Python/Rust tools to aid routing in KiCad

    235 parts744MIT
  • 6 layers85 × 56 mmKarnix ASB, the printed circuit board in 3D

    Karnix ASB

    Fabmicro-LLC/Karnix_ASB-254

    Karnaugh Interactive Extendable ASIC Simulation Board AKA Karnix ASB-254

    368 parts19
  • 4 layers97.6 × 74.8 mmProject byte hamr, the printed circuit board in 3D

    Project byte hamr

    robertrico/project_byte_hamr

    Open source expansion platform for Apple IIe prototyping and development

    93 parts2
  • 8 layers60.1 × 32.1 mmPanelith, the printed circuit board in 3D

    Panelith

    w531t4/panelith

    PCB for Panelith FPGA Board

    103 parts
  • 2 layers83.3 × 65.3 mmSimonShield, the printed circuit board in 3D

    SimonShield

    github-linguist/linguist

    Language Savant. If your repository's language is being reported incorrectly, send us a pull request!

    46 parts14kMIT
  • 2 layers27.8 × 22.3 mmAudio, the printed circuit board in 3D

    Audio

    byrantech/laptop

    anyon_e, a highly integrated, high end, open source laptop. Attempt the impossible.

    46 parts4.3kMIT
  • 2 layers370 × 11 mmDaylight XXL, the printed circuit board in 3D

    Daylight XXL

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    46 parts1.1kGPL-3.0
  • 2 layers87.5 × 50 mmMesabob, the printed circuit board in 3D

    Mesabob

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    46 parts990GPL-3.0