AppleII HDV File Mover Tool
← Project Index AppleII HDV File Mover Tool

AppleII HDV File Mover Tool

A small Linux & Windows utility to open Apple II ProDOS disk images and cherry-pick files onto a bootable 32 MB .hdv hard-drive image you can boot in AppleWin, Virtual ][, MAME, and friends.

Exploring Started: 2026 Updated: Jun 2026

Overview

If you collect Apple II software, you eventually hit the same wall: you have a pile of single-disk images in every format under the sun, and you want a few files off each one assembled onto a single bootable hard drive you can use in an emulator. Doing that by hand is tedious block surgery. This tool makes it a two-pane pick list instead.

It opens ProDOS (and other) disk images, lets you select the files you actually want, and copies them onto a 32 MB .hdv hard-drive image -; optionally making that image bootable in the same step. Then you point AppleWin, Virtual ][, or MAME at it and boot.

Background

This one started as an answer to a Reddit question (from user u/steveheistand) and grew into a proper little utility. The honest observation behind it: the hard part -; bitmap management, directory growth, file types and aux types -; is already solved by CiderPress II's cp2 command-line tool. So rather than re-implement ProDOS, this is a thin, friendly front-end over cp2 that handles the orchestration and the picking.

How It Works

The whole thing is dependency-free Python (3.10+) wrapping cp2. The engine is a verified cp2 wrapper plus a catalog parser you can import as a library; the CLI layers argparse subcommands and an interactive picker on top; and an optional two-pane Textual TUI lets you multi-select on the left and copy the batch to the right with one keystroke. The two pieces it can't ship -; the cp2 binary and an Apple-copyrighted ProDOS system disk -; are fetched by a setup script.

# create a bootable 32MB drive, then pick files onto it
python -m a2hdv new mydisk.hdv --volume GAMES --system ProDOS_2_4.dsk
python -m a2hdv tui some_game.po mydisk.hdv
#   space = toggle, a = all, c/Enter = copy, q = quit

Input is whatever cp2 reads -; .po, .do, .dsk, .hdv, .2mg, .woz, .nib, .shk and more. The target is always a ProDOS .hdv (or .po / .2mg). A pytest suite skips gracefully when cp2 or Textual isn't present.