Skip to content

Repository files navigation

MaClone

Read and write Amiga floppy disks with a Greaseweazle — as a self-contained macOS app.

MaClone writing a disk

The interface follows “Cyclone Digital Image Copier” (ASI, 1992 — code R. Apling & A. Maier, graphics Erdmann Toball). Not a copy of the original artwork, but the same visual language: bevelled panels, one track grid per disk, a single status line.

Why

The Greaseweazle is excellent hardware, but it is driven from a command line. For “insert disk, get an ADF” you want a window with a grid that shows which track is running right now — the way it looked in 1992.

What it does

Pick a source; the direction follows automatically. Press START.

Source Target What runs
Drive File (ADF / ADZ / SCP / IPF) read
File Drive write + verify

The two grids are the display. SOURCE always shows reading, TARGET always shows writing, regardless of which side is the file. Each cell holds the error count for that cylinder: green 0 for a clean track, amber where a retry was needed and succeeded, red where gw gave up. AmigaDOS covers cylinders 0–79; raw flux runs to 81, and the grid has cells for both.

When the run ends the status line sums it up — DONE — 160 TRACKS, 3 REWRITTEN OK rather than a bare DONE, so a recovered retry does not read as a failing disk.

Raw flux tracks get a blue X instead of a green 0: gw does not decode raw flux, so it cannot verify it. Green would claim a check that never happened.

Pressing START a second time aborts. An abort during writing reports ABORTED — TARGET INCOMPLETE, because that is what the disk is.

Formats

The output format is asked before the save dialog, not taken from its filter — a filter only filters, it cannot decide what gets written.

Choice Extension Notes
ADF AMIGADOS .adf Standard 11-sector AmigaDOS
ADF PACKED .adz gzip'd ADF — the established Amiga convention
SCP FLUX .scp Raw flux, all cylinders
SCP PACKED .scpz Same, compressed
IPF IMAGE .ipf Needs a title, see below
IPF PACKED .ipfz Same, compressed

Compressed images are recognised by magic bytes, not by extension, so a mislabelled file still opens. .gz and .xz work as well as .adz/.scpz/.ipfz.

.adz is the one packed name that predates this app — emulators have written and read gzip'd ADFs for years, so MaClone always writes gzip for it, never xz, and unpacks it to .adf because gw has no adz reader of its own. .scpz and .ipfz are this project's own naming.

IPF

IPF needs the closed-source SPS/CAPS library. It is not bundled — redistributing someone else's proprietary binary is not our call. Install it yourself into ~/Library/Frameworks/ (no sudo, survives rebuilds). MaClone checks for it and says so when it is missing.

  • Apple Silicon: CAPSImg_5.1.3_macOS_ARM64.tar.xz (fs-uae.net)
  • Intel: CAPSImage.framework 4.2 (softpres.org)

Writing an IPF to disk goes through gw. Creating one goes through the bundled disk-analyse, which knows 1810 formats but does not detect them — you pick the title, and a wrong title yields a wrong image. Details: docs/ipf.md.

Requirements

  • A Greaseweazle (tested: V4.1, firmware 1.6)
  • macOS 11 or newer
  • A drive on the Greaseweazle's second port — it answers as unit 1 and is shown as DRIVE 0, matching the Amiga's DF0:

Write precompensation defaults to 40=125, which fixed a failing inner track on real hardware.

The app is unsigned. On a machine other than the build host, Gatekeeper will object on first launch.

Self-contained

The rule is: everything is inside the DMG, nothing is fetched at runtime — no Python, no venv, no Homebrew library, no network access. build_dmg.sh verifies this after every build and aborts if a library points outside the bundle, or if requests sneaks in.

Build

python3 -m venv .venv
.venv/bin/pip install "git+https://github.com/keirf/greaseweazle@v1.23" py2app
./build_dmg.sh          # -> dist/MaClone.dmg  (~25 MB)

The build runs the test suite first and stops on failure. Those tests pin how gw's output maps to grid numbers; when gw changes its wording, the grid would otherwise show wrong error counts silently.

Status

Reading, writing and verifying work. A disk written from an IPF read back clean: all 160 tracks, median 331,935 bits, 0.09 % spread, no weak tracks.

Still unproven: whether a written disk actually boots on a real Amiga. That test is outstanding and needs genuine DD media — taped-over HD disks failed here at two different cylinders.

The ADF viewer behind OPENADF is not implemented. START/END TRACK are still decoration. German development notes live in STATUS.md.

Sister project

ADF-Copy — the research question whether Amiga disks can be written with an unmodified USB floppy drive. The answer is no, provably: the sync word 4489 is impossible in legal MFM (that is the entire point of a sync mark), and an FDC emits only legal MFM by design. Which is exactly why a device like the Greaseweazle is needed — and why MaClone exists.

lib/amiga_mfm.py and lib/flux_quality.py come from there.

Thanks

  • Keir Fraser for the Greaseweazle and for disk-utilities (disk-analyse)
  • ASI (1992) for Cyclone — the template
  • Rob Smith for DrawBridge, proof that a €5 Arduino does the same job

License

GPL-3.0 — see LICENSE.

Bundled third-party parts keep their own terms: the Greaseweazle host tools and disk-analyse are public domain (Unlicense), the latter with COPYING.disk-utilities next to the binary. The CAPS library is proprietary and deliberately not included.

Artwork

The GPL covers the code. The interface graphics — panels, logo, disk icons, LEDs, the cracktro screen — belong to Synthetic Development and are not placed under it. They are in this repository so the app can be built and run as intended, not as free-to-reuse assets: fork the code as much as you like, but bring your own artwork if you ship a build of your own.

The layout is a homage to Cyclone Digital Image Copier (ASI, 1992 — code R. Apling & A. Maier, graphics Erdmann Toball). No original Cyclone asset is reused; everything here was drawn fresh in the same visual language.

Fonts

Two faces ship with the app: DeluxeFont for the interface and CC-Fat for the sine scroller.

The scroller was originally set in Subwich Bold (LyonsType, all rights reserved). A commercial font may be embedded in an application but not redistributed as a file, so it is not in this repository. Drop subwich-bold.otf into src/assets/fonts/ and point FONT_FILE_SCROLL at it to get the original look back.

About

Read and write Amiga floppy disks with a Greaseweazle — a self-contained macOS app styled after Cyclone Digital Image Copier (ASI, 1992)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages