************************************ ** Greaseweazle Firmware Release Notes ** Keir Fraser ************************************ ** v1.6 - 28 September 2024 - Flux write: Whole-track writes to hard-sectored disks - Pre- and post-write delays: Specified by many drive datasheets - Required for correct interaction with offset tunnel-erase heads - Configurable "Index Mask", for debouncing noisy INDEX signals - Seek (HDD): Remove arbitrary 100-cylinder limit ** v1.5 - 19 December 2023 - AT32F403(A): Extend SRAM from 96kB to 224kB - Report USB buffer size in 'gw info' - GCC12 build fixes - USB High Speed: Fix device_qualifier descriptor ** v1.4 - 22 July 2023 - New board type: V4.1 (AT32F4xx, USB-C) ** v1.3 - 18 February 2023 - AT32F403A: Run this MCU at 216MHz in main firmware - USB: Implement GET_STATUS(DEVICE) as required by USB spec - This fixes repeated USB resets on some Linux hosts - Blinky test: Fix serial baud rate (115200) ** v1.2 - 18 July 2022 - Support AT32F403A MCU on F1 and V4 boards - Send MCU info to host (reported in 'gw info') ** v1.1 - 27 February 2022 - V4: External Activity LED can be connected to pin TXO - TXO-RXI jumper still forces update mode - TXO still used for serial logging in debug firmware builds - GetPin: Report on all pins also supported by SetPin - ReadFlux: Don't report missing index if read is not index-terminated - GetInfo: New sub-pages CurrentDrive and Drive_n - Report motor, cylinder#, and flippy drive status ** v1.0 - 26 December 2021 - Firmware is now released separately from the host tools - No firmware changes since v0.31 (apart from the version bump) ------------------------------------------------------------------------- All versions below include firmware and host tools in a combined release. ** v0.33 - 14 December 2021 - Support high-density Amiga images (1760kB ADF) - IPF: Automatic write verification - New format specifiers for Acorn DFS and ADFS - New image handlers for Acorn: ADS, ADM, ADL, SSD, DSD ** v0.32 - 14 December 2021 - New format specifiers for IBM, Atari ST and Commodore 1581 - New image handlers for *.ST and *.D81 ** v0.31 - 8 October 2021 - F1: Support Low-Density STM32F103C6 chips, 32k Flash, 10k SRAM - V4: Increase USB buffer size from 16kB to 64kB ** v0.30 - 12 August 2021 - New board type: V4 Slim (AT32F403 MCU, laptop drive interface) - F7 Slim: Support Disk Change Detect (used by WinUAE floppy bridge) ** v0.29 - 29 July 2021 - gw read/write: Fix memory leak, reducing memory usage by approx 10x - gw bandwidth: Test USB connection integrity - New board type: F1 Plus (Unbuffered) ** v0.28 - 22 June 2021 - V4: Improve USB bandwidth and double MCU clock speed to 144MHz - Fixes "gw bandwidth" warnings - Firmware: New command CMD_NOCLICK_STEP. - Used by Rob Smith's WinUAE bridge to implement noclick - "gw pin": Split into "gw pin set" and "gw pin get" ** v0.27 - 12 May 2021 - EDSK: Support writing KBI-19 protection tracks - EDSK: Support next IDAM in preceding sector's GAP - gw seek: New option --motor-on to enable drive motor while seeking - New firmware command: CMD_GET_PIN to interrogate input floppy pins - New board type: V4 (using AT32F4xx MCUs) - New board type: F1 Plus (enhanced BP adapter board by Monideth Pen) ** v0.26 - 26 March 2021 - Support new Greaseweazle model: F7 v3 "Thunderbolt" - EDSK: Support for writing many protected EDSK files - Windows 7: Disable jumperless firmware update as it hangs. - Default head-step delay is doubled to 10ms. ** v0.25 - 27 February 2021 - EDSK: Support for writing unprotected EDSK files - SCP: Allow disktype header byte to be specified (eg "a.scp::disktype=amiga") - SCP: Fix import of non-index-cued SCP imnage files - AmigaDOS: Mark bad sectors with explicit pattern "-=[BAD SECTOR]=-" - read/write: Add a --retries parameter used if analyse/verify stage fails - clean: New command to clean a drive using a cleaning disk - gw: New global option --time to print elapsed time taken by an operation - gw: Improve reliability of USB connection reset when starting an operation - flippy: Improve reliability for Panasonic modded drives (find true trk0) - Linux/Mac: setup.sh better error reporting when run from wrong folder ** v0.24 - 14 January 2021 - Index-cue generated Kryoflux and SCP image files - Most external tools and emulators fail with non-cued streams - gw write: New precomp command-line option (see the wiki) - gw: Backward compatibility with older firmware (only back to v0.23) - Safer bootloader update (CRC check before erasing existing bootloader) ** v0.23 - 13 January 2021 - Support new Greaseweazle model: F7 Slim - Read/write/verify 1.44M IMG image files - Read/write Kryoflux stream files - Optimisations: - Rewrite read/verify conversion routines in C - Fast Amiga track reads (now read an Amiga disk in approx 45 seconds) - Shrink the Windows distribution zip file - GW: New track-selection syntax ("--track="). See the wiki. ** v0.22 - 27 November 2020 - Support read and write of Amiga ADF image files - Increase /STEP pulse width to 15us (fix 5.25" drive seek for Arno Olaf) - Flippy drives: support 'gw seek' down to track -8 - Revised USB protocol ** v0.21 - 10 September 2020 - Support new Greaseweazle model: F7 Lightning Plus - Fixes for older drives - 50us index mask, avoid double triggering on the index signal - Increase default head-step delay to 5ms - Windows: Install the CAPS/SPS IPF library automatically - New command 'gw seek' to seek to specified drive cylinder - New syntax for specifying Greaseweazle device name on command line - eg 'gw read --device COM3 a.scp' ** v0.20 - 1 July 2020 - gw write: New options --erase-empty and --double-step - gw update: Fix COM redetect on Windows running Bitdefender - Support version 2 of Ant Goffart's F7 Plus - SCP: support legacy single-sided SCP images - Automatic import; Export via ::legacy_ss suffix - eg. gw read --single-sided my.scp::legacy_ss - SCP: support SCP image files generated by FluxEngine ** v0.19 - 8 June 2020 - F7 v2: Support for the new board design - gw update: Signature and CRC validation checks - gw read: Fix end-track field in single-sided SCP images ** v0.18 - 28 May 2020 - gw read: New parameters --rate and --rpm - rate: Bitcell data rate in kbit/s (eg 250=DD 500=HD) - Used only for HFE images right now, where default is DD (250) - rpm: Normalise track timings to the given RPM value - This occurs before any other conversion or analysis - gw info: New command to display information about the Greaseweazle setup - gw bandwidth: Improved stats output - SCP: Fix single-sided image handling according to latest SCP spec. - Operates correctly with latest beta version of HxC software - F7: Support new board designs - AmberTronic F7 Plus: Kryoflux form factor, output buffers, 12v supply - F7 Lightning: High Speed USB, output buffers ** v0.17 - 19 May 2020 - Windows: New self-contained executable distribution - No need to install Python, or module dependencies - Mac, Linux: Main script is directly executable - No need to manually invoke the Python interpreter - GW host tool: Help-text description for each available action ** v0.16 - 15 May 2020 - F7 Firmware: Enable over-drive voltage mode - Required for reliable 216MHz operation (see datasheet) - Bootloader update: - 'gw.py update --bootloader' updates the bootloader - Not normally required - Failure may brick the Weazle and require full reflash: Take care! - Update build system to work with Windows MinGW environment ** v0.15 - 5 May 2020 - Host tool improvements: - IPF: More robust conversion to raw flux for writeout - HFE: Fix crash when writing out HFE from third party tools - F7 Firmware improvements: - Preparation for High Speed USB (future board using 730Z8 MCU) - Enable Instruction and Data caches (10x execution speedup) - Various improvements to bandwidth as reported by 'gw.py bandwidth' ** v0.14 - 29 April 2020 - IPF: Full write support (weak data, index misalignment) - New GW commands: bandwidth, erase - bandwidth: Measure USB read/write bandwidth - erase: Erase a disk - F7 USB: Improved bandwidth when writing to disk - Much less likely to see FluxUnderflow failures - update: Fix a bug which could fail to reopen the GW device for update - update: Automatically find the update file if filename not specified - Control script: Tidier notification of errors (no scary backtrace) ** v0.13 - 25 April 2020 - HFE: Read & write support - IPF: Preliminary write support - Requires SPS/CAPS support library. See the wiki. - Weak data not yet supported (RNC "Protect Process" protection, & others) - Write splice is always rotated to the index (affects Speedlock & others) - Also TODO: Verified writes - USB: Use the VID:PID pair assigned to Greaseweazle (1209:4d69) - New prerequisite: 'bitarray' module. See the wiki. ** v0.12 - 10 March 2020 - GW Autodetect: General improvements, and now works on Windows 7 - New read parameter --double-step to double-step drive heads - Useful for reading a 40-cylinder disk in an 80-cylinder drive - New 'pin' command allows a floppy pin to be set to specified level - Currently supported only for pin 2 (DENSEL) - New 'reset' command resets the Greaseweazle to power-on settings - Motors off, drives deselected, power-on pin levels and delay values ** v0.11 - 21 January 2020 - GW.py: Auto-detect the COM/serial port device name - The device argument is now optional! - USB: Provide a serial-id string to the host - Identifier is unique to each Greaseweazle device - Allows disambiguation between multiple Greaseweazle devices - Recommended: Full flash from HEX file (embeds serial in bootloader) - Ubuntu: Udev script now creates a /dev/greaseweazle symlink ** v0.10 - 17 January 2020 - STM32F7xx: Multi-drive support via drive-select config option - Up to three Shugart drives or two IBM/PC drives - gw.py read|write --drive {a,b,0,1,2} - See the "Drive Select" wiki page ** v0.9 - 7 January 2020 - Activity LED - Lights while a USB-issued command is in progress - Flashes when enumerated but idle in the firmware-update bootloader ** v0.8 - 6 January 2020 - STM32F73xx: Various Fixes and Improvements - Allow Firmware Update mode to be forced via strapping Serial RX/TX - Fix bogus sample values at start of read flux values - Fix some time constants to be in units of the sample clock - USB: Advertise USB 2.0 device descriptor ** v0.7 - 6 December 2019 - USB: Fix end-of-stream detection on track writes - Writes of empty/unformatted tracks sometimes hung forever - No Flux Area: Firmware automatically masters long NFAs during track writes - Generating no flux transitions does not read back as a NFA - STM32F73xx: Initial support for new STM32 MCU - Two HEX files are included: Use Greaseweazle-F1-* for existing boards! - Single unified UPD file containing both firmware images ** v0.6 - 15 November 2019 - gw.py: Big overhaul of underlying Python package - Action (read, write, update) must come first on the command line - eg. "python3 gw.py read --ecyl=39 foo.scp COM3" - gw.py: New action "delays" to print/set delay parameters - eg. "python3 gw.py delays --step=10000" to increase step time to 10ms ** v0.5 - 11 November 2019 - USB: Overhaul the protocol and allow writes to be terminated at index - Terminate-at-index is always used by current Python control script - Terminate-at-index prevents an over-long write from overwriting itself - Fix interruption of track writes (eg. KeyboardInterrupt) - gw.py: New option --adjust-speed to normalise flux times for target drive - Measures RPM of the target drive and calculates an adjustment factor ** v0.4 - 5 November 2019 - Blinky: Diagnostic test firmware to detect fake STM32 chips - https://github.com/keirf/greaseweazle/wiki/STM32-Fakes - Floppy Write: Fix for very short flux timings - Floppy Read: Fix for very long flux timings - USB: Small improvement to double-buffer logic ** v0.3 - 30 October 2019 - Bootloader: Fix Programming-Jumper detection - Read Track: Various minor fixes - SCP: Fix the SCP file headers generated by "gw.py read" ** IMPORTANT USER INSTRUCTIONS **: - Users must serial-update using the v0.3 HEX file - DO NOT update from v0.2 using the UPD file - May need to install the crcmod package: eg "pip3 install crcmod" ** v0.2 - 29 October 2019 - USB: Fix hangs during "gw.py read" - Thanks to Charlie Smurthwaite for telling me how to fix this! - USB: Improved bandwidth (double-buffered IN/OUT endpoints) - Reduces risk of buffer underflow/overflow during disk operations - Firmware Update: Requires a jumper across A14 (aka DCL) and GND - eg. "python gw.py update Greaseweazle-v0.2.upd COM3" ** v0.1 - 17 October 2019 - First release