Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

a2woz - minimally process a2r files into woz files

Usage

One-time installation:

pip install https://github.com/adafruit/a2woz

Convert a single file:

a2woz input.a2r

Convert multiple files, with output directory:

a2woz --output-dir out *.a2r

Full usage:

a2woz --help

Theory of a2r to woz raw conversion:

The a2r file contains "1 and a fraction" revolutions, for each track. (It can actually contain multiple revolutions, but ignore that for now)

a2woz takes a revolution, then finds all the "sync points". "sync points" are a sequence of 2 or more "FF36" or "FF40", which are used by the floppy interface controller to synchronize with data on the floppy.

For each pair of sync points within some distance of the start of the capture, and some distance of the "estimated bit length" of the capture, find the similarity measure. A similarity of 1.0 indicates that the next few thousand bits (at least one full 256-byte sector) are an exact match; a similiary of 0.67 seems to happen for random/fake flux regions.

The pair of sync points with the best similarity is used as the "exact bit length" of the track. Ties are broken by choosing the resulting track length that is closest to the estimated bit length. Chop the flux after exactly this many bits, and write it to the output woz file.

That's about all there is to it.

This has worked for a small set of a2r files:

  • Amnesia - Disk 1, Side A.a2r (4am from archive.org)
  • DOS 3.3 System Master [1983] - Disk 1, Side A.a2r (cowgod from archive.org)
  • skyfox.a2r (jepler from fluxengine)

TODO

  • Share with the world
  • Try more a2rs
  • Graft in the greaseweazle flux readers & use them as input formats
  • Try different revolutions, if available in the a2r file, hopefully finding a single best revolution
  • Properly handle "weak bits" by locating stretches that look like they are not valid flux (due to sequences of 3+ zeros), and setting all the bits in the region to 0. A proper emulator then generates fake flux for these sections of the track.

Credits

a2woz is based on passport.py, a2rchery, and wozardry from @a2-4am.

Metadata

Release files for a2woz 0.1.0a0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for a2woz 0.1.0a0
File Size Uploaded
a2woz-0.1.0a0.tar.gz 34.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for a2woz 0.1.0a0
File Interpreter ABI Platform
a2woz-0.1.0a0-py3-none-any.whl Python 3 none any Details

Total release size: 62.1 kB

Release files / a2woz-0.1.0a0.tar.gz

Download URL a2woz-0.1.0a0.tar.gz
Size 34.5 kB
Tags Source
SHA-256 checksum
How to use checksums
faff1b838d50b22dc65431c8c83c26338da93c54328254a1a9c53234c9eadbf0
BLAKE2b-256 checksum
How to use checksums
8a9c08c3d98e8f57b5f347cc56ba2ec6e1e6eca9a4569b53bf499b27350d04cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.10.4

Release files / a2woz-0.1.0a0-py3-none-any.whl

Download URL a2woz-0.1.0a0-py3-none-any.whl
Size 27.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
017d2c54c53f24c2771b311d17785cd545c3108c22a7cafbdcfc3d4065155699
BLAKE2b-256 checksum
How to use checksums
7b00216a9e06c02aa2ab1711b145f58f6565c5db41fc037e10613b544f0f3ea6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.10.4

Release history Release notifications | RSS feed

This release

0.1.0a0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page