Components in this release:
compactflash.device 1.44 (04.06.2026)ptable.library 1.1 (07.06.2026)CFInfo 1.37 (11.01.2026)pcmciaspeed 1.36 (02.01.2026)pcmciacheck 1.39 (22.05.2026)
Documentation-only update (no binaries changed). Release notes and original CFD history are included in docs/changes.md document.
Components in this release:
compactflash.device 1.44 (04.06.2026)(new)ptable.library 1.1 (07.06.2026)(new)CFInfo 1.37 (11.01.2026)pcmciaspeed 1.36 (02.01.2026)pcmciacheck 1.39 (22.05.2026)(new)
-
Fixed a crash in the ROM-resident driver when running WHDLoad. (Issue #56) Programs that take over the machine flush idle libraries and devices to free memory before they run. The idle ROM-resident compactflash.device looked unused, got flushed, and that corrupted the program's memory setup, causing a guru (
0x0100000F, badFreeMem). Mounting a CF card first avoided it (the filesystem then held the device open), and so did WHDLoad'sNoFlushMemoption. The driver now keeps itself in use. -
Non-IDE PCMCIA cards (e.g. ATAPI CD/DVD adapters) are now released earlier in the identify process. (Issue #47) Rejecting after IDENTIFY is too late: the IDENTIFY attempt could leave the card in a state where dedicated drivers (such as
telmexatapi.device) could no longer claim it. The CIS gate reintroduced checks for a well-formed Disk Interface FUNCEXT declaring IDE before IDENTIFY runs, with up to 10 retries to tolerate unstable CIS reads. Please report if you see any CF card detection regression. -
ATAPI handler compiled out by default. Build with
ATAPI=1to keep it. See ATAPI status for details.
-
Duplicate RDB drive names are made unique at cold boot. (Issue #57) When two cards carry RDBs that reuse the same partition name (for example both define
DH0), the duplicates appeared together in the early-startup boot menu. A clashing name now gets a numeric suffix (DH0.1,DH0.2, ...). -
Loads filesystem handlers stored in a compacted format (
RELOC32SHORTrelocations). -
A partition with a damaged RDB entry is skipped instead of mounted. If a card's RDB describes a partition with incomplete settings (a
DosEnvecshorter than theDOSTYPEfield). -
Filesystem handlers loaded from a card's RDB now appear in
FileSystem.resourceunder their own name instead ofptable.library.
pcmciacheck -cis: new option that prints a readable summary of the identification data carried by the inserted PCMCIA card (manufacturer, card type, version, etc.). Handy when you want to understand why an unusual card is or isn't accepted by the driver, or when reporting a problem card.
- Archive version is now a date (YYYYMMDD). The release bundle ships several independently-versioned pieces (
compactflash.device,ptable.library,CFInfo,pcmciaspeed,pcmciacheck), each on its own cadence, so a singlev1.xnumber for the whole archive never matched what was actually inside.
- Fix hot-plug regression introduced in v1.41: inserting or removing a CF card no longer fails to notify filesystem handlers that live in a Kickstart ROM (e.g. fat95 in a custom ROM). Affected setups saw the card mount correctly but silently skip hot-plug events after that. With
Flags = 8the bug was visible in the serial log as a spurious..drop stale clientline on card removal:[CFD] Card removed [CFD] ..client IS_Code=0x00E4D3AA [CFD] ..drop stale client at 0x403DFC00
This release introduces autoboot and automount from RDB-partitioned CF cards.
-
Autoboot from RDB at cold-boot: a bootable RDB partition on the inserted card boots straight into Workbench. All RDB partitions appear at cold start without
DEVS:DOSDrivers/entries. Filesystem handlers stored on the card are loaded automatically. Requiresptable.libraryto be ROM-resident; disk-only install is mountable-only without it. When a card is present and stable all loops exit on the first iteration. The worst-case extra delay (~1.8 s) is paid once on the firstOpenDevicewith no card inserted. -
Stricter CIS gate: as the CIS detection code improved over time, the fallback that accepted cards without a readable
CISTPL_FUNCIDwas dropped. Such cards now fail the CIS gate, freeing them for their proper driver.
- Release archive version and compactflash.device version are now tracked independently (Makefile change)
- New distribution layout: two build flavors per CPU tier in dedicated folders.
dist/full/<cpu>/as debug-capable (serial output enabled) anddist/small/<cpu>/without any debug output via serial line, The<cpu>is68000for any 68k or68020for 68020+.
This release focuses on stability and CPU compatibility improvements across both shipped CPU tiers (68000 / 68010 and 68020+).
- IO path streamlined: internal cleanup in the IO path (see IO path dispatch)
- The driver now ships two CPU tiers:
68020+atdevs/68020/compactflash.device(A1200 stock, and 68020+ accelerators: 030/040/060/080)68000atdevs/68000/compactflash.device(stock A600)
- 68020+ build uses native 32-bit math:
mulu.l/divul.l/bfffoare inlined at the call sites via macros and fully replace the 68000 compatibility routines (which are excluded from the 020+ binary). No functional change.
- Experimental
COPYBURSTbuild option removed (had no effect in practice).
- CIS gate accepts only known CompactFlash device types (#38)
- Accepts cards whose CIS reports device type
0x0D(FUNCSPEC) or0x05(FLASH), the two types CompactFlash cards are known to use. - Other memory-card types are rejected early, so the driver no longer tries ATA IDENTIFY on cards that are not expected to behave like ATA devices and will not get stuck on them. (see CIS gate decision)
- Accepts cards whose CIS reports device type
- Rebuild by vasm 2.0e
- Checking stability of I/O port access (#33) -- Cards with unreliable data transfer are now detected and rejected to prevent data corruption. Thanks to Freddy for sending the CF card for analysis.
- git repository restructured
- Rebuild by vasm 2.0d
Reworks CIS handling to avoid side effects with non-storage PCMCIA cards (e.g. WiFi) and restores PCMCIA (Gayle) timing setup.
-
CIS gate (PCMCIA card type filter) (#25)
- Reads
CISTPL_FUNCID(when available) and rejects non-disk cards early to avoid interfering with other PCMCIA devices (e.g. WiFi). - If
CISTPL_FUNCIDis missing/unreadable, the driver continues for compatibility (some CF cards/adapters do not provide reliable CIS tuples).
- Reads
-
PCMCIA (Gayle) timing setup
- Restores access timing setup from
CISTPL_DEVICEviaCardAccessSpeed(v1.37 didn't program timing based on CIS speed).
- Restores access timing setup from
- pcmciacheck simplifies test output
- documentation improvements
-
Improved card detection reliability
- Fixes unreliable CopyTuple CIS reads by using the card's ATA IDENTIFY data instead. Seen with Transcend CF 133 4GB (Firmware 20110407) and ACA1234.
- The config address is still read from the card CIS when available, with an automatic fallback to the standard address.
Flags = 2is deprecated (the fallback is now automatic).
-
Autodetect multi-sector override capability
- Driver estimates by simple test during init if multi-sector override works
- If test passes (DRQ clears properly), 256 sector mode is enabled for best performance
- If test fails (DRQ stays high), falls back to firmware-reported value for compatibility
Flags = 16still available as manual override to force 256 sector modeFlags = 32skips auto-detection and uses firmware-reported value directly- Debug output shows detection result: "DRQ issue not detected" / "DRQ issue detected"
-
CFD_GETCONFIG command (0xED)
- New SCSI passthrough command to retrieve driver internal configuration
-
CFInfo shows driver configuration
- Displays mount flags, multi-sector settings (firmware vs actual)
- Requires driver v1.37+ for config display (card info still works with v1.36+)
-
pcmciacheck tests all 5 transfer modes
- Added mode 4 (MMAP) memory-mapped transfer testing
- Typo fixes throughout documentation
- MuForce hit fix when using Format (#8)
- Fixed memory access issue detected by MuForce during disk formatting operations
- Clear stale card data on removal
- CFU_IDEStatus, CFU_IDEError, CFU_IDEAddr, CFU_ConfigAddr cleared when card is removed
- CFU_MultiSize, CFU_MultiSizeRW cleared to reset multi-sector settings
- 512-byte IDENTIFY buffer (CFU_ConfigBlock) fully cleared - prevents stale model/serial/firmware/capacity data
- Prevents returning stale data when no card is present or after card swap
- SD-to-CF adapter retry fix
- when ATA IDENTIFY retries exhaust (regression in v1.33), now tries ATAPI IDENTIFY PACKET DEVICE before giving up (as v1.32)
- Fixes potential hang on SD-to-CF adapters
- Implement ATA_IDENTIFY command
- retrieve the cached ATA IDENTIFY data from the driver
- CFInfo utility
- displays card model, serial, firmware, capacity, and capabilities
- pcmciaspeed utility
- Recreated PCMCIA memory access timing benchmark tool
- pcmciacheck utility
- Recreated PCMCIA check tool
- AmigaGuide documentation
- Native Amiga .guide files included in release
- Gayle memory timing
- Experimental: disabled by default, compile with
GTIMING=1to enable - Maps card's ATA PIO mode to Gayle PCMCIA memory timing
- Experimental: disabled by default, compile with
- Improved code documentation
- Architecture overview with register conventions
- Documented CFU structure fields
- Added function headers with input/output/register usage
- Serial debug output - set
Flags = 8to enable debug messages via serial port- Shows card insert/remove, identification, size, and MultiSize
- Replaces cfddebug tool with readable text-based serial output
- Enforce multi mode - set
Flags = 16to force 256 sector reads/writes per IO request, even if card firmware does not support it- Can improve performance on capable cards (1MB/s -> 2MB/s)
- Warning: May cause data corruption on unsupported cards - see Enforce Multi Mode
- Simplified SD-to-CF adapter support - cleaner retry mechanism for IDENTIFY command introduced in v1.33
- Improved compatibility with >=2014 Firmware CF cards
- Workaround for "get IDE ID" on large capacity cards
- Multi-sector IO uses firmware reported value to improve compatibility
| Version | Date | Changes |
|---|---|---|
| v1.33 | 1/2017 | Init reliability fix, SD card adapter support (Paul Carter) |
| v1.32 | 11/2009 | Error messages, open source release (Torsten Jager) |
| v1.31 | 11/2009 | Fixed "memory mapped" mode bug |
| v1.30 | 11/2009 | Major API rework for kickstart ROMs |
| v1.29 | 11/2009 | Transfer mode autoconfiguration |
| v1.28 | 04/2009 | First ROMable attempt |
| v1.27 | 02/2009 | Fast interrupt support for Kingston cards |
| v1.25 | 07/2004 | Interrupt watchdog |
| v1.24 | 10/2003 | CARDBUS investigation |
| v1.23 | 06/2003 | IDE interrupt enabling |
| v1.22 | 05/2003 | Alternative card socket reset |
| v1.21 | 04/2003 | Write multiple, PCMCIA soft reset, CFA_ERASE |
| v1.20 | 10/2002 | ATAPI fix, spinup from standby |
| v1.19 | 10/2002 | Accept cards without valid signature |
| v1.18 | 09/2002 | Forced card socket activation |
| v1.17 | 08/2002 | Transfer mode autosense |
| v1.16 | 08/2002 | Transfer mode testing, word access default |
| v1.15 | 08/2002 | ATAPI support |
| v1.14 | 07/2002 | Ready check before commands |
| v1.13 | 06/2002 | Double read workaround |
| v1.12 | 06/2002 | Slowed transfer mode, PCMCIA speed tool |
| v1.11 | 06/2002 | SCSI Inquiry fix, 5VDC programming voltage |
| v1.10 | 05/2002 | PCMCIA status change handling |
| v1.09 | 05/2002 | "cfd first" hack, SCSI 6-byte commands |
| v1.08 | 04/2002 | Interrupt handling, faster reads |
| v1.07 | 04/2002 | Debug tool and disk icon |
| v1.06 | 03/2002 | PCMCIA I/O address space |
| v1.05 | 03/2002 | TD64 and SCSI emulation |
| v1.04 | 03/2002 | Bug fixes, quiet shutdown |
| v1.03 | 03/2002 | Auto-repeat for faulty cards |
| v1.02 | 03/2002 | Minimal exec command set |
| v1.01 | 02/2002 | First experiments |