Repository navigation
A2 File Cmd 1.0 — Two panels. One Apple II.
A2 File Cmd 1.0 brings the two-panel workspace to ProDOS on the Apple IIe,
//c and IIgs, with a separate DOS 3.3 edition for the 48 KB Apple II+.
Four self-contained disk images cover the complete XL workspace, enhanced
XL, the practical 800K selection and DOS 3.3. This release consolidates
0.9.9 with the data-preservation fixes below; physical writes remain
vulnerable to power loss.
-
Sense Disk II write protection with its sequencer running in read mode.
A stopped motor could leave stale data in the latch, causing DOS33W to
refuse a writable disk or misread a protected one. Native regressions
cover both CPUs, slots 5/6, both drives and stopped/running motors, with
unchanged disk bytes and AUX. -
Route named
.FOTO1/.FOTO2image pairs to PURPLE before the generic
raw HGR fallback, preserving complete pair validation and both planes. -
Read fixed sample prefixes through isolated accessors. cc65 2.19 could
reuse an uninitialized or clobbered scratch pointer across branches,
opening VisiCalc as text and Arlequin as hex on 65C02. Compare the real
production stage against the host C classifier on 4,996 cases per CPU,
including every file type, malformed prefixes and original-format fixtures. -
Recognize LISA 8/16 source files before the generic Integer BASIC run
fallback. Return could offer to execute an INT-typed source instead of
opening LISAV4. Both CPU regressions retain normal BAS/INT execution and
verify real LISA sources, header bounds and source-byte preservation. -
Read Multiplan grid dimensions independently of the saved cursor. A
valid sheet saved after moving back to the top left could be refused.
Recreate seven sheets with original Multiplan 1.06 and add byte-preserving
host, both-CPU and native regressions, including invalid dimensions. -
Link the macOS POM2 test hosts with CoreFoundation, required by the
current emulator library. RespectPOM2_ROOTfor disposable host builds
and run the composite plugin qualification serially by default.
Use monotonic deadlines in the benches so host sleep or clock changes
do not produce false UI timeouts; keep the active-time limits unchanged. -
Reorganize the English manual: reader descriptions join the reading chapter;
continuous pagination reduces the PDF from 25 to 19 pages without smaller
type. Keep headings with opening text and repeat table headers. -
Binary II extraction checks output stream errors after full-count writes,
verification reads and the EOF probe. An errored zero-byte probe could
previously hide an unverified output tail and report success. Only the
owned failed record is cleaned; prior records, the archive and unrelated
files remain intact. The summary now fits its 64-byte buffer even with
five-digit counters from a malformed archive. -
SYNC rechecks all source metadata after its copy/readback closes and
before publication. A changed or unreadable source could previously replace
a newer destination using the source's stale catalog timestamp or type.
Refusal keeps the original destination and the verifiedA2FC.SYNC, and
stops the tree before the next file. Late cancellation still discards only
the owned temporary and reports a failed cleanup if it cannot do so. -
DIRSORT refuses parent and child directory pointers to boot blocks or
blocks outside the declared volume. A malformed child header could
previously authorize raw writes to those blocks while reporting success.
Host and both native compiler regressions verify zero writes and unchanged
disk bytes, even when the underlying device can read the invalid block. -
Fix the fuzz campaign's refused-write expectation: REPAIR can verify that
the original bytes remain intact even if every write is refused. Require
zero applied corrections and an unchanged image, with a regression replay
of the 150-case CI campaign. -
Recover resident MAIN space without raising memory limits: 322 bytes free
on 65C02 and 676 on 6502. VDrive's install-only code and page-3 relay
source move to BATCH; collective tagging and the T/H selection helper move
into the language card. Boot loads BATCH before reading panels, with the
uninstall marker disarmed before the load. Active drivers and uninstall
remain resident; normal navigation needs no extra overlay load. -
Fit VERIFY's 6502 code and BSS back into its existing window: shorten its
menu description and compact equivalent expressions and summary arguments,
retaining the DOS 3.3 refusal and all read checks. -
S cycles disk order (the default, no header star), then name, size and
type. Returning to disk order rereads both panels, so tags are not kept
on that step. SavedS0/S1/S2still mean name, size and type. -
IMGCONV Escape after CREATE, during replace or between blocks prints
« Stopped. », not « Stopped failed. » or « Aborted, DEST removed. »
while DEST is still the original. -
Tree copy count refuses a destination directory that cannot hold
A2FC.COPY: a file whose own name fitted used to pass the count, then
stop the copy mid-tree with a partial destination. « Path too long for
ProDOS. » now, before the first byte. -
VERIFY refuses a DOS 3.3 volume-list row instead of READ_BLOCK on unit
$00(those rows store the unshifted unit andaccess = 0). -
REPAIR and BOOTBLK judge a failed write by the bytes that remain: a
write-protected disk that still holds the original is not reported as a
failed restore. -
NIBCOPY reads the target's volume name again after the first "Erase
TARGET" question and writes nothing if it changed or is now the
program's disk: a disk swapped during that question received track 0
(boot, root directory and bitmap). Two disks of one name, or both
without a ProDOS volume, are still not told apart there. -
Tree copy, move and delete treat an entry as a directory only when its
storage type says so: a plain file typed $0F whose first block read as
a directory header was copied as an empty directory, then destroyed by
V. A refuses type $0F on a file. A copy whose destination holds a file
of the directory's name is refused ($47) instead of reporting success. -
BLKEDIT on an image closes the file, checking the close, and opens it
again before reading the block back: the read back came from ProDOS's
file buffer, and a flush failing at the close (write-protected or
failing disk) was lost after "written and read back identical". -
The two remaining
JMP (vector)of FORMAT and NIBCOPY are checked at
link time against the NMOS 6502 page-boundary bug. -
DISKIMG W and two-drive O read the device list again after ERASE and
refuse ($2E) when the target drive no longer holds the volume the warning
named, or now holds the program's disk or the image's. Two disks of one
name, or both without a ProDOS volume, are still not told apart. -
A copy or move batch stops when the target panel can no longer be read
after an item: the next item is no longer written under the prefix as a
bare name, nor its source deleted. ESC pressed during an item still stops. -
VOLNAME refuses to rename when two volumes on line answer to the chosen
name (ProDOS could rename either), and reports an ON_LINE failure, before
any change. -
FORMAT marks AUX as in use from the first Disk II track, so a Ctrl-Reset
before the rebuild rebuilds /RAM instead of leaving its directory on line
over overwritten blocks. -
DIRSORT revalidates a subdirectory's parent entry after confirmation,
refusing raw writes if its protection, name, key or storage changed, or
the parent block cannot be read. Check the actual leaf-name length before
comparing malformed parent metadata, avoiding an out-of-bounds path read.
Add host/ASan and both-CPU regressions, plus a POM2 disk-swap check during
confirmation with every disk byte, AUX and the C stack guard preserved. -
Honor ESC received by the final metadata checks before TXTCONV, IMGCONV
or DOSIMAGE replaces an original. Poll before the first rename, preserve
originals on cancellation and report failed temporary cleanup. Add
byte-preservation regressions for all three callers and execute the shared
replacement/rollback code on both CPUs, including cancellation after the
transaction has started. -
DIRSORT now checks the volume's write protection when sorting a
subdirectory, including after confirmation, and the header protection of
each child directory it would update. Refuse writes after a parent-catalog
close error. Add host and both-CPU regressions plus POM2 checks that
protected volumes retain every byte, AUX and the C stack guard. -
Honor ESC received during either verification close before publishing a
core copy or allowing a move to delete its source. Preserve the original
destination and discard only the exclusively created temporary. Add
byte-preservation regressions for all four closes, empty and nonempty
sources, and existing or absent destinations; retain both CPU layout guards.
Files
| Image | Contents |
|---|---|
A2FILECMD-PRODOS-XL-1.0.2mg |
Complete bootable 32 MB image, 6502, with demonstration files |
A2FILECMD-PRODOS-XL-65C02-enhanced-1.0.2mg |
Complete 32 MB image for an enhanced IIe, //c or IIgs: MouseText, optional mouse |
A2FILECMD-DOS3.3-1.0.dsk |
Standalone DOS 3.3 edition for Apple II+ 48 KB, 40 columns, two drives |
A2FILECMD-PRODOS-800K-1.0.po |
Bootable 800 KB ProDOS image, 6502, selected tools and BASIC runtimes, no demo corpus |
The English user guide is included as A2FILECMD-MANUAL-EN-1.0.pdf.
XL includes all 130 overlays, BASIC.SYSTEM, INTBASIC.SYSTEM and a DEMO
folder sorted by kind of file. The 800K edition has the practical selection in
config/800k.mk, without the demonstration corpus and with space left for files.
Both editions are self-contained; their menus list available tools.
All ProDOS editions need 128 KB and 80 columns. The choice is enhanced or
not: the enhanced XL is for an enhanced IIe, a //c or a IIgs; every other
ProDOS image runs on any IIe. Mini is a separate DOS 3.3 program for the 48 KB Apple II+.
Boot an image and press ? for help. sha256sum -c SHA256SUMS-1.0.txt
checks the four images and manual. ProDOS images carry ProDOS 8 2.4.3.
XL and 800K include BASIC.SYSTEM (John Brooks' free distribution; Apple's
software) and INTBASIC.SYSTEM v0.9 by Joshua Bell
(https://github.com/a2stuff/intbasic).
Sources, manual and benches: https://github.com/habib256/a2filecmd.