millfork/CHANGELOG.md

796 lines
22 KiB
Markdown
Raw Permalink Normal View History

2018-01-30 16:43:18 +00:00
# Change log
2018-01-30 16:38:32 +00:00
2021-12-15 15:01:46 +00:00
## 0.3.30 (2021-12-15)
2021-12-15 14:54:00 +00:00
* Added volatile structure fields (#112).
* Added `this.function` as the alias for the current function (#118).
* Added support for constant evaluation in `file` expressions (#114).
* Allowed declaring local constants and passing untyped parameters for macros.
* Allowed treating bare function name as a pointer to it.
* Added Mesen, ld65 and "raw" label file formats (#128).
* Commodore: the address used by SYS is now determined automatically instead of hardcoded (#111).
* C64: Fixed address for `sid_v1_sr` (#115).
* EasyFlash: Fixed address for `switch_hirom` (#121).
* GB: Fixed standard library (thanks to @retrac0).
* Commander X16: Updated platform definition file (thanks to @mookiexl).
* 65CE02: Full assembly support.
* R800: Full assembly support.
* Various miscompilation fixes (#123, #125) and parser fixes (e.g. #120).
* 6809: Various optimizations.
* Improvements related to constant evaluation.
2021-05-23 22:17:51 +00:00
## 0.3.28 (2021-05-24)
* Officially deprecated decimal operators with apostrophes.
2021-03-13 20:42:52 +00:00
2021-03-14 23:44:14 +00:00
* Added optimization hints.
2021-03-13 20:42:52 +00:00
* Added `utf32be`, `utf32le`, `cp1253`, `cp1254`, `cp1257`, `geos_de` encodings.
2021-05-07 22:46:37 +00:00
* Allowed for underscores in numeric literals for readability purposes, similar to several other programming languages.
* Added a warning for comparisons between bytes and pointers (#110).
2021-03-13 20:42:52 +00:00
* Fixed escape sequences in many encodings.
* Fixed and documented absolute module imports (#106)
2021-04-23 23:21:03 +00:00
* Fixed and optimized sign extension.
* Fixed optimizations involving unused labels.
* Fixed pointer types to type aliases.
2021-05-07 22:46:37 +00:00
* Fixed parsing of Intel hex literals of the form `0BH`, `0B0H` etc.
* 6809: Fixed flow analysis in optimization.
* Optimization of certain bitmask operations.
2021-04-23 23:21:03 +00:00
* Parsing optimizations.
2021-03-13 20:42:52 +00:00
2021-02-28 19:55:08 +00:00
## 0.3.26 (2021-03-01)
* Array fields in structs.
2021-01-13 13:39:32 +00:00
2021-02-18 02:26:24 +00:00
* Various Apple II-related improvements, including ProDOS support (thanks to @retrac0).
2021-01-13 18:57:17 +00:00
* Segment-related constants now match their equivalents from the platform definition. Missing constants have been defined.
* Constants with heap start and segment start are now generated properly.
2021-02-17 23:51:07 +00:00
* Signed multiplication support for `sbyte` and `signed16`.
* Heavily experimental `typeof` builtin.
2021-02-24 02:05:09 +00:00
* Self-modifying assembly code is now supported (#101).
* Successful compilation now prints result program size.
* Warning about data not being included in the output file.
* Warnings can now be enabled and disabled individually.
* Imported modules are now identified by their full relative path, not just the token used in the `import` statement (#89).
2021-01-13 13:39:32 +00:00
* 6502: Fixed sbyte to word promotions in certain contexts.
2021-02-17 23:51:07 +00:00
* 8080: Fixed compilation of sign extension of `sbyte` values into the BC register pair.
* Fixed negative constant folding.
* Fixed optimizations around macro invocations.
2021-02-24 02:05:09 +00:00
* 6502: Fixed code deduplication in presence of trampolined functions.
2021-01-13 13:39:32 +00:00
* Optimized word shifts for between 7 and 12 bits.
* Allowed new lines after `=`.
2021-01-13 18:57:17 +00:00
* Various optimization improvements.
2021-02-18 02:26:24 +00:00
* Improved some error messages (thanks to @agg23).
2021-02-24 02:05:09 +00:00
* Other fixes and improvements.
2020-12-01 23:54:52 +00:00
## 0.3.24 (2020-12-02)
2020-09-21 07:10:50 +00:00
2020-09-29 20:57:48 +00:00
* Preliminary support for TRS-80 Model 1 and 3 running TRS-DOS.
* Preliminary support for Robotron Z1013.
2020-12-01 13:26:47 +00:00
* Allowed defining entry points other than the start of the segment for Atari, ZX Spectrum, CoCo, Z1013 and TRS-80. (#78)
2020-11-19 17:56:49 +00:00
2020-09-21 07:10:50 +00:00
* Allowed the `:` operator in const-pure functions.
2020-11-19 17:56:49 +00:00
* Added `pointer.interrupt` and `pointer.kernal_interrupt` types.
* Implemented `readline` and `readword` for VIC-20.
2020-09-29 23:51:26 +00:00
* `init_rand_seed` uses the POKEY on Atari.
2020-11-19 17:56:49 +00:00
* Useless labels are no longer emitted into the label file.
* VIC-20: added `readline` and `readword`.
* Atari: use POKEY for randomness source.
* New output format elements: ASCII string, program name.
* Fix: Pointers to functions with parameters (#86)/
2020-09-21 07:10:50 +00:00
* Fix: more instances of memset loops should be detected and optimized (#59).
2020-09-29 20:57:48 +00:00
* Fix: things mentioned in the segment layout should not be deleted even if unused.
2020-11-19 17:56:49 +00:00
* Fix: `endaddr+N` output format.
2020-09-29 20:57:48 +00:00
* 65816: some code generation fixes.
2020-11-19 17:56:49 +00:00
* 8080: word negation now works.
2020-12-01 17:18:56 +00:00
* Various optimization improvements.
2020-11-19 17:56:49 +00:00
* Various other fixes.
* Improved some error messages.
2020-09-21 07:10:50 +00:00
* Even more new Atari examples (thanks to @zbyti).
2020-12-01 13:26:47 +00:00
* Build process slightly changed.
2020-11-19 17:56:49 +00:00
2020-09-15 15:16:47 +00:00
## 0.3.22 (2020-09-15)
2020-08-14 20:34:34 +00:00
2020-09-01 20:00:07 +00:00
* Added local labels in assembly.
2020-08-14 20:34:34 +00:00
* Added alternate decimal operators (with `$` instead of `'`).
2020-09-15 15:14:20 +00:00
* **Potentially breaking change!** Identifiers no longer can end with `$`.
2020-08-14 20:34:34 +00:00
* Added `z80next` as an alternate name for the ZX Spectrum Next's processor (#55).
* Added encodings: `brascii`, `macroman`, `dmcs`, `lics`.
2020-08-14 20:34:34 +00:00
* Improved some error messages.
2020-09-08 23:49:00 +00:00
* Fix: interrupt functions written in assembly no longer have the default prologue (#62).
2020-09-03 23:18:37 +00:00
* Fixed the `a8_os` module (#58).
2020-08-14 20:34:34 +00:00
* Fixed evaluation of division of large constants.
2020-09-01 22:44:24 +00:00
* Fix: Structure alignment is now respected for substructures.
2020-08-14 20:34:34 +00:00
* X16: Fixed the address of `vera_dc_hscale_hstop` register (#54) (thanks to @Kobrasadetin).
* Fixed evaluation of more complex boolean expressions (#56).
* Fixed accesses to volatile variables.
* 8080/Z80: Optimization improvements.
2020-09-15 15:14:20 +00:00
* 6809: Optimization improvements.
* Various Atari improvements (#60, #63, #65) (thanks to @zbyti).
2020-09-08 23:49:00 +00:00
* New Atari examples (thanks to @zbyti).
## 0.3.18 (2020-04-08)
2020-04-26 19:17:13 +00:00
2020-07-13 21:11:00 +00:00
* Support for Motorola 6809 (complete, but still experimental).
2020-07-30 23:58:40 +00:00
* Preliminary support for Tandy Color Computer running RS-DOS.
2020-08-01 20:20:52 +00:00
* Preliminary support for 16K cartridges for Tandy Color Computer.
2020-07-13 21:11:00 +00:00
* Added support for modifying large variables via pointers.
2020-07-17 23:34:16 +00:00
* Added the ability to declare structure alignment.
2020-07-24 17:13:57 +00:00
* `for` loops over arrays.
2020-04-30 23:31:54 +00:00
* Allowed defining custom text encodings.
**Potentially breaking change!**
There are no built-in encodings now, the include path needs to contain the necessary encodings.
* Fixed encodings:
`apple2`, `atasciiscr`, `iso_de`, `iso_no`, `iso_se`,
`koi7n2`, `msx_jp`,
`oldpet`, `origpet`, `petscii`, `petsciijp`, `petscr`, `petscrjp`,
`zx80`.
* Added encodings:
`apple2c`, `apple2e`, `apple2gs`,
2020-07-30 23:58:40 +00:00
`coco`, `cocoscr`,
2020-04-30 23:31:54 +00:00
`cpc_da`, `cpc_en`, `cpc_es`, `cpc_fr`,
`cp437`, `cp850`, `cp851`, `cp852`, `cp855`, `cp858`, `cp866`,
`cp1250`, `cp1251`, `cp1252`,
`ebcdic`,
`galaksija`,
`iso8859_1`, `iso8859_2`, `iso8859_3`, `iso8859_4`, `iso8859_5`,
`iso8859_7`, `iso8859_9`, `iso8859_10`, `iso8859_13`, `iso8859_14`, `iso8859_16`,
2020-07-24 17:13:57 +00:00
`kamenicky`,
`koi8e`, `koi8f`, `koi8r`, `koi8ru`, `koi8t`, `koi8u`,
`mazovia`, `pcw`,
2020-04-30 23:31:54 +00:00
`pokemon1en`, `pokemon1es`, `pokemon1fr`, `pokemon1jp`.
2020-07-31 15:09:34 +00:00
* Added `ENCODING_NOLOWER` preprocessor feature.
2020-07-24 17:13:57 +00:00
* Fixed raw views of typed pointers.
* Fixed dead code elimination (#51).
2020-04-30 23:31:54 +00:00
* **Potentially breaking change!** Changed default encoding for CPC to `cpc_en`.
* **Potentially breaking change!** Changed the type of `mouse_lbm` and `mouse_rbm` to `bool`. Added `mouse_mbm`
2020-07-24 17:13:57 +00:00
* **Potentially breaking change!** Renamed the `x_coord` module to `coord`. Added the `y_coord` type and `TALLSCREEN` preprocessor feature.
2020-07-24 20:27:54 +00:00
* Added `pscrstr2word` function.
2020-07-13 21:11:00 +00:00
* Labels with fixed addresses are now exported to the label file (#49).
2020-07-25 20:19:13 +00:00
* Fixed address of the VIC 20 volume register (#52) (thanks to @nippur72).
2020-07-24 20:27:54 +00:00
* Fixed and improved stdlib optimizations.
2020-04-27 10:44:18 +00:00
* Allow importing modules from subdirectories.
* Allow placing platform definitions in a dedicated subdirectory.
2020-07-31 15:09:34 +00:00
* Allow using Batch files with the `-r` option.
* Improved error reporting for constants used before their definitions.
2020-07-31 15:09:34 +00:00
* Improved typo hints.
* Typo hints for non-ASCII characters.
2020-07-24 17:13:57 +00:00
* Z80: Intel syntax for all Z80 instructions, based on Digital Research's Z80.LIB.
2020-05-01 13:19:36 +00:00
* Commander X16: Updated to support VERA 0.9 and the new joystick API. Added mouse support.
2020-07-17 23:34:16 +00:00
* 6502: Optimization improvements:
* Fixed index register optimization regressions.
* Small array optimizations are now available for more operations.
* Index calculations for arrays of structs with sizes divisible by an even power of two are now sometimes optimized.
* Redundant index calculations are now removed.
2020-04-27 10:44:18 +00:00
2020-04-08 10:10:02 +00:00
## 0.3.16 (2020-04-08)
2019-12-15 22:51:34 +00:00
2020-04-08 01:20:28 +00:00
* Language improvements:
* Added compile-time evaluation for user-defined functions.
* Added `breakpoint` macro (#44).
* **Potentially breaking change!** Added `min`, `max` and `if` compile-time functions.
* Added experimental `signed16` and `unsigned16` types.
* Added length-prefixed strings (Pascal strings).
* Improved operator support for word-sized arguments (#24, #25).
* **Potentially breaking change!** Various macros improvements, including the requirement of parameter types matching exactly (#23, #39, #40).
* Compiler improvements:
* 6809 improvements (no full support yet).
* Added warnings for calling from one segment to another overlapping one.
* 6502: Fixed undocumented mnemonics.
* Create output directories when needed (#21).
* Allow defining different output formats for different segments when outputting one file per segment.
* Fixed multiple optimization bugs (#32, #38, #41, #46 and others) thanks to @agg23 for detailed bug reports!
* 6502: Fix boolean arrays and pointers (#28).
* Fixed and improved memset-like loops (#47).
* Minor improvements to inline assembly.
* Improvements to constant evaluation, including more arithmetic operators.
* **Potentially breaking change!** Detect overflowing constants, like `const byte x = 256`.
* Optimization improvements.
* 6502: Memory allocation improvements for pointers.
* Support for MkImg (tool for creating BBC Micro disk images) and multiple output files on BBC Micro.
* Other minor fixes.
* Library improvements:
* Added `putsigned16` function.
* Added `pstring` module and `putpstr` function.
* Various improvements to the C64 libraries (thanks to @bsutherland).
* Added detection for various PET variants and implemented `readkey` for PET.
* Implemented `readkey` and `readline` for Apple II.
2020-04-08 01:20:28 +00:00
* Changed the default load address for BBC Micro.
* Multiple fixes to the `string`, `scrstring` and `encconv` modules.
* Other minor fixes.
* Other changes:
* Created a pure-Millfork test suite.
* Updated to Scala 2.12.11.
2020-03-25 22:54:23 +00:00
2020-04-08 10:10:02 +00:00
## 0.3.14 (2019-12-03)
2019-11-12 12:49:16 +00:00
2019-12-01 02:16:09 +00:00
* Full assembly support for HuC6280.
* Improvements to subroutine extraction; it's now much faster, less buggy and actually effective.
* 8080: function parameters can now be optimized to registers.
* Fixed error messages about invalid function flags.
* 6502: Fixed compilation of interrupt routines.
* 65C02: Fixed fatal bugs related to some 65C02 subtypes.
* Other bug fixes.
2020-04-08 10:10:02 +00:00
## 0.3.12 (2019-11-06)
2019-11-03 22:18:00 +00:00
* **Breaking change!**
2019-12-01 22:13:51 +00:00
The `petscr`, `petscrjp` and `atasciiscr` encodings now use $E0, $E0 and $DB respectively as their string terminator.
2019-11-06 13:42:48 +00:00
* **Potentially breaking change!**
Changed the identifiers for various subtypes of the 65C02 processors.
2019-11-03 22:18:00 +00:00
* Added `nullchar_scr` and `NULLCHAR_SCR`
* Added the `scrstring` module
2019-11-04 01:31:57 +00:00
* Added `strz_from_screencode`, `strz_to_screencode`, `strzpaste` and `scrstrzpaste` functions
2019-11-03 22:18:00 +00:00
* Added the ability to convert from booleans to integers
2019-11-04 01:31:57 +00:00
* Fixed the string escape bug
2019-11-03 22:18:00 +00:00
* Unary minus and other parser improvements
* Better error reporting
* Other bugfixes
2020-04-08 10:10:02 +00:00
## 0.3.10 (2019-10-24)
2019-09-24 23:20:12 +00:00
2019-09-30 22:52:21 +00:00
* Preliminary support for the CPU from ZX Spectrum Next.
2019-09-24 23:20:12 +00:00
* Added the ability to define custom segment layouts.
2019-10-22 00:14:14 +00:00
* Hardware definitions for Atari 8-bit (thanks to @FreddyOffenga)
* Fixed BLL headers for Atari Lynx (#7).
* Some improvements for Commander X16 (with help from @Ambez05)
* Specified consistent behaviour of `for` loops (#8)
2019-09-24 23:20:12 +00:00
* Fixed bugs with constant booleans.
2019-10-22 00:14:14 +00:00
* Fixed bugs with arithmetic promotions of signed values.
* Fixed a bug with unused global variable elimination (#10).
* Fixed a bug with variable overlapping (#11).
2019-09-24 23:20:12 +00:00
2019-10-23 09:52:42 +00:00
* 6502: Fixed a bug with flow analysis during optimizations.
* 6502: Fixed a bug with certain 16-bit additions.
2019-10-22 11:54:30 +00:00
* 8080: Fixed and optimized 16-bit comparisons.
2019-09-24 23:20:12 +00:00
* 8080: Optimized some library functions.
2019-10-22 16:22:25 +00:00
* Optimized certain byte comparisons and pointer indexing.
2019-09-30 22:52:21 +00:00
2019-10-22 14:35:17 +00:00
* 6502: Optimized certain boolean conversions and some small array accesses.
2019-09-30 22:52:21 +00:00
* Unused built-in functions are now removed more accurately.
2019-09-24 23:20:12 +00:00
* Updated to Scala 2.12.10.
2019-09-30 22:52:21 +00:00
* Added another NES example (thanks to @Garydos).
2020-04-08 10:10:02 +00:00
## 0.3.8 (2019-06-21)
2019-08-15 22:42:11 +00:00
* `sizeof` now supports arrays.
2019-09-14 00:40:03 +00:00
* Added `-R` option for specifying extra commandline parameters for emulators.
2019-09-15 17:47:19 +00:00
* Added full 16-bit multiplication and unsigned division.
2019-09-04 19:17:06 +00:00
2019-09-30 22:52:21 +00:00
* Added preliminary support for Atari Lynx (thanks to @Nullious).
2019-09-19 23:44:18 +00:00
2019-08-16 16:00:04 +00:00
* Added preliminary support for EasyFlash.
* Added preliminary support for Commander X16.
2019-08-16 16:00:04 +00:00
* Allowed defining custom output padding byte value.
* Allowed passing non-decimal numbers to the `-D` option.
2019-09-03 23:14:14 +00:00
* Added the `encconv` module.
* Added `nullchar` constant as the null terminator for strings and `NULLCHAR` feature to define its value.
2019-09-20 17:41:53 +00:00
* Added `vectrex`, `msx_br`, `koi7n2`, `iso15`, `zx80` and `zx81` text encodings.
* `reset_joy` is now defined to always reset all joypad state variables.
* Fixed arithmetic promotion bugs for signed values.
2019-09-17 23:04:31 +00:00
* Fixed parsing of `zp_bytes` in platform definitions.
2019-08-16 16:00:04 +00:00
* Fixed several serious bugs related to cartridge-based targets.
2019-09-16 19:31:12 +00:00
* 6502: Few minor optimization improvements.
* 6502: Inlining improvements.
2020-04-08 10:10:02 +00:00
## 0.3.6 (2019-08-05)
2019-06-30 23:24:55 +00:00
* **Breaking change!**
The `petscii` encoding now uses the $C0-$DE range for uppercase characters instead of $60-$7E.
This matches both the CC65 behaviour and the return values from `readkey()`.
2019-07-30 20:51:33 +00:00
* Added support for the Japanese version of Commodore 64.
* Added `segment` block statement.
2019-07-15 00:06:23 +00:00
* Added goto.
* Added `bool` type.
2019-07-26 22:58:10 +00:00
* Added function pointers so far quite limited.
* Added arrays of elements of size greater than byte.
2019-07-30 20:51:33 +00:00
* Added `.length` for large arrays and `.lastindex` for numerically indexed arrays.
2019-07-30 22:20:18 +00:00
* New text encodings: `petjp`, `petscrjp`, `msx_intl`, `msx_jp`, `msx_ru`.
2019-07-09 20:40:26 +00:00
* Improved passing of register parameters to assembly functions.
2019-07-08 17:24:27 +00:00
* Enabled declaring multiple variables in one line.
* Fixed detection of duplicate names in declarations.
* 6502: Fixed expressions of form `p[i] <<= 1`.
2019-08-03 18:46:43 +00:00
* 6502: Fixed variable bit shifting.
* 6502: Fixed word division by a divisor larger than 127.
* 6502: Fixed byte multiplication.
2019-08-03 18:46:43 +00:00
* 8080/Z80: Fixed byte division.
* Fixed many optimization bugs:
* incorrect removal of unused local variables;
2019-08-04 11:40:49 +00:00
2019-08-04 15:16:01 +00:00
* incorrect removal of certain type casts;
2019-08-04 11:40:49 +00:00
* broken parameter passing to tail calls;
2019-08-03 18:46:43 +00:00
* 6502: miscompilation when using the zeropage pseudoregister;
* 6502: stack overflow when inlining local variables into registers;
2019-08-04 11:42:00 +00:00
* 6502: not setting the high byte to 0 when optimizing word multiplication by 0
2019-08-03 18:46:43 +00:00
* 8080/Z80: compiler crash when compiling conditions;
2019-08-04 10:37:54 +00:00
* 8080/Z80: miscompilation of code after `if` statements;
2019-08-03 18:46:43 +00:00
* 8080/Z80: miscompilation near multiplication;
* Z80: miscompilation when using stack variables.
2019-07-09 20:40:26 +00:00
* Other fixes and improvements.
2020-04-08 10:10:02 +00:00
## 0.3.4 (2019-07-01)
2018-12-28 18:24:56 +00:00
2019-03-18 22:15:28 +00:00
* Preliminary experimental Game Boy support.
2019-06-05 11:31:43 +00:00
* Preliminary MSX support.
2019-05-31 15:03:35 +00:00
* Super experimental and very incomplete Intel 8086 support via 8080-to-8086 translation.
* Support for Intel 8085, together with illegal instructions.
2019-05-31 15:27:38 +00:00
2019-06-14 09:39:11 +00:00
* More label file formats.
2018-12-31 12:20:32 +00:00
* Added `memory_barrier` macro.
2019-06-26 13:51:09 +00:00
* Added `keyboard` module.
2019-06-25 16:26:48 +00:00
2018-12-30 18:01:38 +00:00
* Added `random` module.
2019-06-28 14:43:50 +00:00
* Added `init_rw_memory` module for cartridge targets.
* **Breaking change!** Preinitialized writable arrays on cartridge targets
can no longer be read before an explicit call to `init_rw_memory`, either add the call or make the arrays const.
2018-12-30 18:01:38 +00:00
* Added `ensure_mixedcase` function and `oldpet` and `origpet` text encodings.
2018-12-29 19:16:05 +00:00
* Added `MILLFORK_VERSION` preprocessor parameter.
* Added structs and unions.
2019-04-14 23:58:51 +00:00
2019-06-05 23:17:34 +00:00
* Added unsigned byte division and modulo.
2019-06-05 16:36:39 +00:00
2019-04-14 23:58:51 +00:00
* Pointers can now be allocated anywhere.
* Pointers can now be typed.
2019-04-16 14:56:23 +00:00
* Added `nullptr`.
* You can now take a pointer to a stack variable.
* Arrays can now have elements of types other than `byte` (still limited in size to 1 byte though) and be built out of struct literals.
2019-04-29 20:57:40 +00:00
* Arrays can now be constant.
2019-04-14 23:58:51 +00:00
2019-06-24 20:32:29 +00:00
* Arrays can now be local.
2018-12-30 18:01:38 +00:00
* Added hint for identifiers with typos.
2019-03-18 22:15:28 +00:00
* Aliases now also support subfields.
2019-04-15 17:56:14 +00:00
* Short functions can be now defined using expression syntax.
* On most Commodore targets printing double quote characters doesn't toggle the quotation mode anymore.
2019-06-25 16:26:48 +00:00
2019-06-26 11:40:33 +00:00
* **Potentially breaking change!** Commodore 128 target no longer defines `CBM_64` feature.
2019-06-28 14:43:50 +00:00
* Fixed the NES examples and the `nes_joy` module.
* 6502 targets can now define free zeropage bytes, not only pointers.
2018-12-29 19:16:05 +00:00
* 6502: Fixed optimizations using index registers.
2019-06-05 16:12:57 +00:00
* 6502: Fixed optimizations of comparisons.
2019-06-25 16:26:48 +00:00
* 6502: Fixed optimizations near `for` loops over in-place lists.
* Preprocessor: Added `#use A=B` directive
* Preprocessor: Added `if` function
2019-06-26 11:43:15 +00:00
* Preprocessor: Added `#define` directive.
* Fixed volatile-related bugs.
2018-12-30 18:01:38 +00:00
* Fixed optimizations removing jumps to jumps.
2018-12-29 19:16:05 +00:00
* Fixed optimizations removing pointless stores to local variables.
* Fixed name clashes when passing parameters to functions and macros.
2018-12-29 19:16:05 +00:00
* Fixed `#use` not accessing all preprocessor parameters.
2019-04-16 14:56:23 +00:00
* Fixed `#pragma` not respecting `#if`.
2019-06-26 16:31:45 +00:00
* Fixed nested `#if`s.
* Fixed `@long` and `@long_be` array filters.
2019-06-24 21:51:17 +00:00
* Fixed for-each loops with non-constant arrays.
* 8080 and LR35902: Fixed inlining of byte-sized variables into registers.
2019-04-16 14:56:23 +00:00
* 8080 and LR35902: fixed large stack variables.
2018-12-29 19:16:05 +00:00
* Other bug fixes.
2018-12-29 23:52:40 +00:00
* Optimization improvements.
2020-04-08 10:10:02 +00:00
## 0.3.2 (2018-12-28)
2018-07-01 17:07:12 +00:00
2018-07-27 17:15:57 +00:00
* Almost complete support for the Zilog Z80, Intel 8080 and Sharp LR35902 microprocessors.
2018-12-19 21:21:51 +00:00
* A very incomplete support for NEC PC-88, ZX Spectrum, CP/M and Amstrad CPC.
2018-07-06 23:11:53 +00:00
* Unified the syntax of commandline switches.
2018-12-24 01:38:28 +00:00
* Automatic detection of the standard include path.
2018-07-11 23:23:38 +00:00
* Added aliases.
* Added enumeration types.
2020-12-01 13:26:47 +00:00
* Added the preprocessor.
2018-12-19 18:04:19 +00:00
* Added `for` loops over enum types and in-place lists
2018-10-04 19:33:10 +00:00
* Added `align` keyword for choosing data and code alignment.
2018-12-14 21:51:09 +00:00
* Added original line numbers in assembler output.
2018-12-16 20:07:42 +00:00
* Added `sizeof` operator.
* Added preliminary support for `volatile` keyword.
2018-12-14 21:51:09 +00:00
* Added multiplication of a 16-bit number by an unsigned 8-bit number.
2018-12-16 20:07:42 +00:00
* Added more warnings.
2018-07-06 22:58:44 +00:00
* Automatic selection of text encoding based on target platform.
* Text literals can be now used as expressions of type `pointer`.
* Extra `z` at the name of the encoding means that the string is zero-terminated.
2020-12-01 13:26:47 +00:00
* **Potentially breaking change!** It's no longer allowed to define things with names that are keywords or builtins.
2018-12-21 21:35:16 +00:00
* **Potentially breaking change!** Curly braces in text literals are now used for escape sequences.
2018-12-19 18:04:19 +00:00
* **Potentially breaking change!** Changed the `c64_basic` module.
2018-07-06 23:11:53 +00:00
* **Potentially breaking change!** `scr` now refers to the default screencodes as defined for the platform.
Code that uses both a custom platform definition and the `scr` encoding needs attention
(either change `scr` to `petscr` or add `screen_encoding=petscr` in the platform definition file).
* **Potentially breaking change!** Platform definitions now need appropriate feature definitions.
Code that uses a custom platform definitions will cause extra warnings until fixed.
2018-12-14 21:51:09 +00:00
* Software variable stack for 6502.
* Other optimizations and fixes for stack variables.
2018-07-06 23:11:53 +00:00
2018-08-06 17:29:09 +00:00
* Various code deduplication optimizations.
2018-07-06 23:11:53 +00:00
* Fixed emitting constant decimal expressions.
2018-07-24 22:04:00 +00:00
* Fixed decimal subtraction.
2018-08-03 14:21:02 +00:00
* Fixed signed comparison.
2018-12-14 21:51:09 +00:00
* Fixed `for`...`downto` loops.
* Fixed invalid optimization of loads before `BEQ` and similar
* Fixed miscompiled `nonet` calls.
2018-07-06 23:11:53 +00:00
* Parser performance improvement.
* Standard libraries improvements.
2018-07-06 23:11:53 +00:00
* Other improvements.
2020-04-08 10:10:02 +00:00
## 0.3.0 (2018-06-25)
2018-03-25 14:19:37 +00:00
2018-06-18 22:08:18 +00:00
* Finally faster than C.
2018-06-23 22:31:10 +00:00
* Licenced the standard library more permissively.
2018-06-08 22:18:21 +00:00
* Preliminary Atari 2600, BBC Micro and LUnix support.
2018-04-02 22:21:26 +00:00
2018-06-18 22:00:48 +00:00
* Added array initialization syntax with `for`.
2018-04-02 17:47:11 +00:00
* Added multiple new text codecs.
2018-03-25 22:01:29 +00:00
2018-04-02 19:06:18 +00:00
* Added character literals.
2018-06-04 14:24:18 +00:00
* Added 24-bit `farword` type.
2018-06-18 00:52:14 +00:00
* Special array layouts, e.g. `@word`.
2018-06-04 14:24:18 +00:00
* Fixed invalid offsets for branching instructions.
* Fixed incorrectly overlapping local variables.
* Fixed broken `downto` loops.
2018-06-18 22:00:48 +00:00
* Fixed broken comparisons between variables of different sizes.
2018-06-04 14:24:18 +00:00
* Fixed several other bugs.
2018-03-25 14:19:37 +00:00
2018-06-23 22:31:10 +00:00
* Tons of optimizer improvements.
* Other improvements.
2020-04-08 10:10:02 +00:00
## 0.2.2 (2018-03-19)
2018-03-18 22:58:42 +00:00
* Allowed adding constant words to variable bytes without the zeropage pseudoregister.
* `-fzp-register` is now enabled by default, as the documentation has already been saying.
* Allowed more kinds of constants within variable and array initializers.
2018-03-18 22:58:42 +00:00
* Fixed several bugs.
* Other improvements.
2020-04-08 10:10:02 +00:00
## 0.2 (2018-03-17)
2018-01-30 16:38:32 +00:00
* **Breaking change!** Renamed `inline` to `macro`.
* **Breaking change!** Added support for memory segments. Changed the platform definition file syntax.
* Added preliminary support for 65CE02, HuC6280 and 65816 processors.
2018-03-16 21:15:07 +00:00
* Added support for Famicom/NES and C64 with SuperCPU.
2018-02-26 16:49:55 +00:00
* Added new `-O1` optimization preset; old `-O1` became `-O2`, old `-O2` became `-O3` and so on.
2018-03-16 21:15:07 +00:00
* Added command line options for controlling the size-speed trade-offs.
* Added support for parameters for macros written in Millfork.
2018-02-26 00:20:50 +00:00
* Enabled calling macros with index expression parameters.
2018-03-10 21:05:10 +00:00
* Enabled calling macros from assembly.
* Added optimizer hints: `inline`, `noinline`, `register`.
* Added command line flags `--size`, `--fast`, `--blast-processing`.
* Removed command line flag `--detailed-flow`.
Detailed flow analysis was slow, broken, hard to maintain, and didn't even help that much.
2018-03-16 21:15:07 +00:00
* Added `*'=`, `nonet`, `hi` and `lo` operators.
2018-03-06 15:59:18 +00:00
* Added support for zeropage pseudoregisters, allowing for some operators work with more types of operands.
2018-01-30 16:38:32 +00:00
* Added return dispatch statements.
2018-03-03 20:34:12 +00:00
* Added `break` and `continue` statements.
2018-03-06 15:59:18 +00:00
* Allowed the `else if` combination (i.e. the `else` branch doesn't have to be in braces if it's just a single `if`-`else` statement).
* Added octal and quaternary literals.
2018-03-10 21:05:10 +00:00
* Fixed several allocation bugs.
2018-01-30 16:38:32 +00:00
* Fixed several optimization bugs.
2018-03-16 21:15:07 +00:00
* Fixed several C64 and C16 library bugs.
2018-02-26 00:20:50 +00:00
* Fixed several other bugs.
* Other improvements.
2018-01-30 16:38:32 +00:00
2020-04-08 10:10:02 +00:00
## 0.1 (2018-01-24)
2018-01-30 16:38:32 +00:00
2020-07-25 20:19:13 +00:00
* Initial numbered version.