All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- smart copy improvements
- CiderPress suffix works for DOS 3.x
- fix some issues with filename mapping
- skip Apple language detection on non-Apple disks
- better detection of random access text files
- make use of path segments in chain analysis
- update github workflow dependencies
- BASIC workspace symbols are more complete
- smart copy
--suffixoption - provide CHAIN backlinks to LSP client
- fix issue where BASIC workspace scan would fail to register changes
- ProDOS smart copy handles custom file types as
anyrather than aborting - More robust handling of CP/M user prefix and related matters
- smart copy fixes
- reconcile CP/M and Windows (user prefix and drive prefix)
- path parsing is a little smarter
- suppress a misleading warning
- REM following ONERR GOTO no longer hangs the Applesoft server
- move lines no longer adds new-lines to the end unnecessarily
- where possible, line labels are gathered even if there is an error on the line
- Applesoft and Integer BASIC expression evaluation
- Workspace scan for Applesoft and Integer BASIC
- detects DOS or ProDOS CHAIN commands
- identifies CHAIN links between files
- analysis accounts for chained variables
- fix regression in hover formatting
- leading underscore suppresses unreferenced label warnings
- baseline scan will try a half-track and guess a format if necessary
- patches to smart copy
- fix some issues with paths and error handling
- make the language detection a little smarter
- add tests and update test code
- BASIC servers respond to window activation event
- Integer BASIC line reference hovers trigger on the number itself
- fix a few misleading error messages
- fix an issue where some unlikely Applesoft syntax errors could be passed over
- Applesoft minifier handles removing REM statements at the end of a program
- eliminate a panic that could happen during Merlin macro expansion
- the
-t autooption works in more cases
- "smart copy" subcommand
cp - Merlin language support is improved
- hovering on an ENT label will list the modules that use it
go to referenceson an ENT finds corresponding EXT labels in other modules- error checking of macro arguments allows for conditionals
- fix handling of 400K Apple disks
- remove interleave restriction on 3.5 inch Apple disks
- eliminate unnecessary elements from disk identification matrix
- fix an issue where minifier level 3 could break valid code
- fix some issues with handling of unusual WOZ layouts
- correct various docstrings and log strings
- register LSP commands (will be required by Neovim 0.13)
- create, read, and write with proprietary formats
- from CLI use
--proargument with any disk image subcommand
- from CLI use
- WOZ handling enhancements
- flux tracks
- optional emulation to deeper levels (LSS, fake bits)
- CLI access of quarter tracks, e.g.
17.25..19.25selects two quarter tracks
- support AppleSingle format (PR #2)
- minify and renumber can be guarded by external references
- CLI
mkdsksupports creating blank or empty disks (issue #3) - CLI
mkdsksupports creating flux tracks - add long help for certain CLI arguments
- CLI
geometryoutput is enhanced- will return fractional cylinder numbers if necessary
- distinguishes nibble codes used in address vs. data fields
- returns better sector addresses and description thereof
- includes a summary object
- optionally return abstract format information
- CLI
getcan be coerced into formatting output for the console - Merlin improvements
- macro expansions handle
]0(Merlin 16 or higher) - additional diagnostics and settings
- macro expansions handle
- more fine grained control of permissions
- sector search by explicit address
- The
mkdsk --kindvalues are changed- ambiguous kinds such as
5.25inare no longer allowed - every floppy kind is in the form of a triple
<PKG-VEND-FMT>
- ambiguous kinds such as
- Subcommands
lock,unlock,protect, andunprotectare replaced byaccess - Scripts that depend on
geometryoutput will need to be rewritten - If there are tag bytes they are included in sector data (but not in blocks)
- Error return types have changed in some cases
- eliminate modules
disk35,disk525 - eliminate trait
TrackBits - eliminate various public entities from
img::woz - eliminate enumerations
img::NibbleCode,img::DataRate - eliminate functions
parse_escaped_ascii,lang::merlin::eval_if,img::imd::cpm_blocking - moved
Blockenumeration tobiosmodule, things moved around withinbios - renamed:
cpm::types::ExtentTypetocpm::types::EntryType - changes to
DiskImagetrait- arguments to many functions use abstract
TrackandSectorin place of CHS indices
- arguments to many functions use abstract
- changes to
DiskFStrait- permissions are controlled by
set_attrib, whilelock,unlock,protect, andunprotectare eliminated
- permissions are controlled by
- changed interfaces:
create_fs_*,escaped_ascii_to_bytes,Packing::get_load_address,Woz1::create,Woz2::create - changed structures:
merlin::settings::Flag,img::TrackSolution - changed enumerations: various error enumerations
- public became private:
lang::linenum - dependencies: language parsers use tree-sitter 0.25, lsp-types 0.97 URI type is different
- Multiple hex escapes in a string are correctly highlighted
- Format on type while entering
PMCarguments is repaired
- More powerful Applesoft minifier
- Spot assembler accepts equivalences
Most of the changes pertain to Merlin components.
- Docstrings are handled more consistently
- Nested conditionals are handled more accurately
- Variables are tracked more accurately
- Various minor fixes
- Macro expansions resolve
IFandDOin many cases - Tracking of macro dependencies to maximum allowed depth
a2kit verifyreturns an error if handed an empty string- Duplicate labels in a macro trigger a warning rather than multiple errors
- Conditional macro definitions are handled differently
- they are always discouraged by a warning
- they will be dimmed if the conditional evaluates false
- Fix error in disassembly with label substitution
- Account for label substitution in unit testing
- Eliminate possible panics due to missing WOZ tracks
- Allow for repeated address fields when solving nibble tracks
- CLI multi-sector
putstrictly seeks in angle order- this matters for tracks with repeated sector addresses
- non-contiguous sequences can be used to resolve ambiguities
- CLI multi-sector
putmay resolve differently (see above)
- Correct an issue with the assember's addressing-mode matcher
- Correct some issues that could come up in disassembly
- Various forms of
RUNcan end an Applesoft relocation flow
- Support converting data to code in Merlin source files
- Prevent excessively long workspace scans
- Limit the directory count and recursion depth
- Skip
build,node_modules, andtargetdirectories
- Detokenizing from RAM image works for Integer programs ending at $C000
- More bounds checking of RAM images
- Servers advertise the
executeCommandcapability (required by Neovim) - Applesoft server complies with elevated minification request
- Prevent certain truncations in level 3 minifier
- Refine blank line handling in a few places
- Consistent case control settings in
langmodule
- Language server arguments to ease integration with Neovim
- Subcommand to generate shell completions
- Shell completions will not be packaged with each release since they can be generated on the fly
- Repairs to BASIC renumbering
- updates all references
- moves can handle blank lines
- The
LineNumberTooltrait is deprecated, use theRenumbertrait instead. - Improved LSP symbol manipulations and checks
- LSP declarations, definitions, and references do not overlap.
- Handles Teledisk 1.x in addition to 2.x
- Responds to a client's workspace symbols request
- Make some use of backup FATs
- Formatting preserves blank lines
- Correct a bug in rename symbol
- Correct a bug in address hovers
- Always zero high word of cluster1 for FAT12/16
- Better handling of Merlin conditionals
- Disassembler identifies out of bounds branches as data
- Automatic unpacking uses both file system hints and actual data
- More complete handling of Merlin folding ranges
- ProDOS and FAT glob patterns are automatically prefixed when necessary
- CP/M generic catalog includes user numbers when there are users other than user 0
- Disk server write operations will actually write
- Fix an issue with the head map in IMD and TD0 images
- Language servers for Applesoft, Integer BASIC, and Merlin
- these can be used to support any editor that implements the LSP
a2kit verifyperforms a much deeper language analysis- Disassembler for 6502, 65c02, and 65816
- Limited assembler for Merlin 8, 16, 16+, 32
- new CLI subcommands
mgetandmputfor efficient multi-file handlingpackandunpackfor direct manipulation of file imagesgloballows you to glob (search) any solvable disk image
- new CLI subcommand options
get -t autowill automatically select an unpacking strategycatalog --genericwill produce the same columns no matter the FS- some subcommands have
--indentoption to control JSON formatting
- Applesoft optionally accepts extended CALL syntax
- Integer optionally accepts immediate mode commands
- Renumbering optionally allows for movement of lines
- Eliminate some possible panics
- Better handling of 16 bit Merlin syntax
- Better ProDOS Y2K handling
- Better handling of CP/M files with no extension
Most of the JSON outputs will now default to a minified format. This is optimal when a2kit is being called as a subprocess or library. Users of the raw CLI can recover pretty formatting using the --indent option.
CLI scripts written for v2 should still work with v3, unless a user's JSON parser is checking the length of certain arrays, or checking for unknown keys.
Users of the a2kit library crate will have to consider the following before upgrading to v3:
- Extracting files from a disk image works differently
- The
FileImageobject handles packing or unpacking various data types, whileDiskFSworks only withFileImage. DiskFShas convenience functions similar to the oldsave,bsave, etc., but some arguments and return values have changed.TextConversiontrait replacesTextEncodertrait
- The
- Enumerations that are extended:
ItemType, someErrorenumerations scoped by module - Syntax tree walker is different
VisitandWalkerChoiceare replaced byNavigateandNavigation
- FileImage 2.1.0 is the default, this adds two root level keys
full_pathkey which is mainly useful formputaccessedkey which can be used by FAT file systems
- Function calls that will need to be revised
a2kit_macro::DiskStruct::from_bytesa2kit_macro::DiskStruct::update_from_bytesimg::DiskImage::from_bytesfs::<>::Disk::from_imgcrate::try_img
- Sector sizes are included in track solutions as a fourth element in the CHS map subarrays
- The outward facing
geometrysubcommand still uses thechs_mapkey, so user parsers will still succeed if they ignore extra array elements.
- The outward facing
FileImage::desequenceclears the chunk map before updating chunks, whileRecords::update_fimgdoes so optionally