Repository navigation
Releases
Releases · neilsf/xc-basic3
Version 3.2.1
This is a bug fix release.
- Fixed wrong byte order in
TI()function's return value - Fixed
ON RASTER n GOSUBresulting in syntax error - Fixed stack error when
IFwas followed by a non-byte expression - Fixed double argument escaping when executing
dasm
Version 3.2.0
New features
- Commander X16 and MEGA65 targets are now incorporated to the stable branch.
- Added VIC-20 16 KB and 24 KB targets.
OPTION ASCIIemits strings as ASCII instead of PETSCII.STATICroutines support theFASTmodifier andFASTparameters.INCBINaccepts an optional offset parameter.- Added
LOCATEsupport for PET. - Added
-zcommand line option to zero- fill variable memory
Breaking changes
- Numeric literals and
CONSTvalues defined without an explicit type are now untyped.
An untyped constant adapts to the type of the other operand, e.g.b + 1is aBYTE
operation ifbis aBYTE. If the constant does not fit in that type, the operation is
promoted to the smallest type that can hold both, e.g.b + 300is aWORDoperation and
b * -1is anINToperation. - Constant expressions (numeric literals and
CONSTvalues) are evaluated at compile time with
exact arithmetic, e.g.250 + 6now evaluates to256instead of wrapping to0.
Division truncates toward zero andMODfollows the runtime rules. Division by zero and
results out of the 24-bit range are compile-time errors. - Constants in an expression are combined where possible, e.g.
b + 200 + 100is compiled
asb + 300. - Assigning or passing an untyped constant that does not fit the target type is now an error
(e.g.b = 300orPOKE addr, -1). Use an explicitly typed constant or a variable if
wrapping is intended. - Arithmetic on typed operands (variables, functions, typed constants) is unchanged and still
wraps within its type, e.g.b1 + b2where both areBYTE. CONSTaccepts constant expressions (e.g.CONST SIZE = WIDTH * HEIGHT). A constant
declared withAS <type>is typed and behaves like a variable of that type in expressions.- Untyped constant arguments match any numeric parameter type that can hold their value when
resolving overloaded routines. - A
FORloop with an unsigned counter and a negative constantSTEPis now an error.
Bugfixes and improvements
- Fixed
SELECT CASEcomparisons, including range cases. - Fixed
DATAstatements without an explicit type. - Fixed PET
PRINT TABbehavior. - Fixed
VOICEcommand. - Fixed float constant folding in comparisons and division chains.
- Fixed error where the compiler failed to resolve shared routine prototypes.
- Fixed the
-lcommand-line switch and improved argument quoting on Windows. - Optimizer improvements
Version 3.1.13
Improvements and bug fixes:
- #247 - Implicit type conversion is not working if argument list contains string arguments
- #266 - Add
REMcomments to assembly listing to help debugging - #267 - Fixed
TI()function - #269 - Fixed Screen RAM address on VIC-20
- #274 - Variables of unused subroutines and functions now excluded from variable segment
- #270 - Keyboard scan code constants for multiple targets
Release v3.1.12
DATAstatements now support labels (#261)
Version 3.1.11
This release contains long-awaited bug fixes.
Version 3.1.10
This release fixes a bug where timer interrupts were disfunctional after a LOAD command.
Version 3.1.9
Version 3.1.8
Fixes regression: missing DOKE keyword.
Version 3.1.7
This release fixes some bugs:
- Wrong line number in error messages on Windows
- Some string operations leaving garbage on stack
Full Changelog: v3.1.6...v3.1.7
Version 3.1.6
Hotfix update
- Fixed variable name in NEXT statement misread
- Fixed SPRITE statement overwriting reference to THIS