The disc CLI¶
The disc command-line tool provides a unified interface for working
with Acorn DFS, ADFS, and AFS disc images. Install it with:
uv add oaknut-disc
Both disc and oaknut-disc are registered as console scripts –
use whichever you prefer.
Filing-system prefixes¶
When a disc image carries multiple partitions (e.g. an ADFS hard disc with an AFS tail partition), prefix the in-image path to select the target partition:
disc ls scsi0.dat # default: ADFS root
disc ls scsi0.dat adfs:'$' # explicit ADFS
disc ls scsi0.dat 'afs:$' # AFS root
disc cat scsi0.dat 'afs:$.Library.Free'
The prefix is case-insensitive (afs:, AFS:, Afs: all work).
When no prefix is given, the filing system is auto-detected from the
image extension (.ssd/.dsd for DFS, .adf/.adl/.dat
for ADFS).
Mismatches are rejected immediately:
$ disc ls games.ssd 'adfs:$'
Error: image is DFS format; cannot access as ADFS
Acorn star-aliases¶
Acorn-style aliases are accepted alongside the Unix command names.
They must be quoted or escaped on POSIX shells because of the *
prefix:
disc '*CAT' games.ssd # same as: disc ls games.ssd
disc '*TYPE' games.ssd '$.HELLO' # same as: disc cat
Unix command |
Acorn alias |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Cross-image copy¶
The cp command uses image:path colon syntax for copying files
between disc images of any format combination:
disc cp source.ssd:'$.HELLO' target.dat:'$.HELLO'
Load and exec addresses are preserved. Access attributes are mapped as losslessly as the target format allows (e.g. DFS only has a locked bit, so public-read from ADFS is dropped).
For within-image copies, use the three-argument form:
disc cp image.adl '$.Original' '$.Copy'
Creating a Level 3 File Server disc¶
A complete walkthrough for building a bootable L3FS hard disc image:
# Create a 10 MiB ADFS hard disc image
disc create scsi0.dat --format adfs-hard --capacity 10MiB --title Server
# Copy the file server binary from its DFS floppy
disc cp FS3v126.ssd:'$.FS3v126' scsi0.dat:'$.FS3v126'
# Create a !BOOT file and set the boot option
printf '*RUN $.FS3v126\r' | disc put scsi0.dat '$.!BOOT' -
disc opt scsi0.dat 3
# Plan the AFS partition (shows geometry, free space, suggested command)
disc afs-plan scsi0.dat
# Initialise AFS with users and libraries
disc afs-init scsi0.dat --disc-name Server --cylinders 309 \
--user Syst:S --user RJS:2MiB \
--emplace Library --emplace Library1
# Inspect the result
disc tree scsi0.dat
The --emplace option accepts either a shipped library name
(Library, Library1, ArthurLib) or a path to any ADFS
.adl image. Everything in the image is copied into a directory
of the same name on the AFS partition.
Shell quoting¶
Acorn paths contain characters that POSIX shells interpret specially. Use single quotes to prevent expansion:
$– shell variable prefix!– zsh history expansion*– glob character (for star-aliases)
disc cat image.dat '$.!BOOT' # single quotes: safe
disc cat image.dat "$.!BOOT" # double quotes: zsh expands !
disc '\*CAT' image.dat # backslash-escape the *