1r2625 (2021-04-25)
2==================
3
4The last release got more than a year old now and there were
5plenty of pending corrections to be released. Some planned
6features still didn't made it in. Maybe next time.
7
8**Fixes**
9
10* .fill/.align multi byte pattern fix
11  Broke due to changes in r1845.
12* Wrong diagnostic for incomplete byte string
13  The missing closing quote was pointed at the wrong place
14* Incomplete diagnostic message
15  The opcode was not displayed in some cases
16* Diagnostic locations fixed
17  In some cases the location was wrong
18* Duplicate diagnostic messages avoided
19  In some cases redundant diagnostics was output
20* Crash while .function declaration and macro init parameters
21  Found by Pierre
22* Improved filename portability checks
23  In some cases case insensitive filenames were not recognized
24* Diagnostics of non-portable filename characters improved
25  Now points at the problematic character.
26* Functions did not execute as loop and other conditions
27  Now they do.
28* Can't calculate errors related to functions
29  In some cases these were incorrectly reported
30* 4510 missed had () instead of (),z addressing mode
31  Now same as 65CE02 in this regard
32* Improved format() diagnostics
33  It's more strict now
34* Floating point bitops didn't work as intended
35  Actually in some cases they did work but mostly not
36* Dot eor operator works again in TASM compatible mode
37  Got broken due to syntax clash with hexadecimal floats
38* Wrong message text for invalid unary operators
39  Tried to diagnose them like binary by mistake
40* Improved syntax highlighting
41  In some case it didn't highlight well on vim
42* Byte string compare didn't work properly
43  In case a byte string was inverted.
44* In some cases .null failed to detect zeros
45  For example for ~$ff
46
47**Changes**
48
49* Comment nesting
50  Directives are not recognized now in commented block
51* Negative size an error now, size extension a warning
52  If an offset reduces a memory area beyond 0 it's a fault now
53  (instead of 0) and extension beyond the original size a warning.
54  Controllable through -Wsize-large.
55* PC bank wrapping gone now
56  Seemed like a good idea but crossing banks with long data gave
57  unexpected results for many people.
58* VICE label de-duplication is gone now
59  Was intended to avoid warnings on import but actually breaks
60  symbolic breakpoints if the needed label gets deduplicated...
61* -Wswitch-case gone now
62  Could cause unexpected side effects which is a no-no for diagnostics
63* Ident renamed to symbol
64  For less confusing diagnostic messages
65* Long values not displayed in listing by default
66  They cluttered up the listing. They are still displayed in verbose
67  mode.
68* Dictionary keys must be identical and not equal
69  Otherwise bit strings can't be matched properly for example.
70* Hex float format from format() gone now
71  Seemed like it's easy to add without much effort but it was not cross
72  platform.
73* Bit string extraction operators now return bit string
74  Did return bytes for a long while but now I realized those may not
75  compare as expected in some cases.
76* Multi line expressions are gone now
77  Seemed like a good idea back then but they cause more problems than
78  they solve. They were never documented due to all the unsolved edge
79  cases anyway.
80* Duplicated label files do not append automatically
81  It must be done now explicitly with --labels-append
82* Unnamed values not listed in listing any more
83  There's no label so makes no sense
84
85**New**
86
87* Immediate operand to branches
88  It's now possible to write 'bne #0' (for self modifying code)
89* Hexadecimal byte string literal separation with spaces
90  Space is accepted now in hexadecimal byte strings like x'ab cd'
91* Various byte string functions added
92  Like byte(), word() and friends
93* New --output-append parameter
94  For appending the output to a file instead of overwriting it
95* New --no-output option
96  For cases where no output file is needed
97* Symbol definition syntax
98  May be defined with a dot prefix. Useful as dictionary keys.
99* New .sfunction directive
100  For defining single line functions which only do calculations
101* Alternative end directives
102  Bit more verbose but more consistent and easier to remember.
103  E.g. .endpage vs. .endp
104* Identity operator (===)
105  For exact matching
106* --no-error and --error-append
107  To not save or append error messages
108* Broadcasting conditional operator is '??'
109  Sometimes broadcasting is needed but that's not compatible with the
110  regular '?' conditional operator
111* Diagnostics for interrupted compilation
112  Now it's displayed where it happened for improved infinite loop
113  debugging.
114* --labels-append
115  For appending to label files.
116
117r2200 (2020-04-07)
118==================
119
120This is a bug fix release to fix the unintended performance degradation on some
121systems like BSDs.
122
123**Fixes**
124
125* Revert buffering changes
126  These caused really slow performance on some systems which I forgot to test.
127* Makefile name escaping
128  It's not the same as for shells and is more limited. So names with spaces
129  should work now but otherwise it's advised to avoid incompatible file naming.
130* Bold black is not be visible on black background
131  Changed to cyan.
132* Unicode parameter file names didn't work on some platforms
133  Forgot a conversion so only UTF-8 worked
134
135**New**
136
137* Coloured output on windows console and DOS.
138  This was available for a while but not for these platforms. Real DOS needs
139  ANSI loaded and TERM set.
140
141r2176 (2020-03-23)
142==================
143
144There were quite many changes in trunk so it's time to release another version.
145
146**Changes**
147
148* Removed -Wtype-mixing
149  It was a transitional warning just in case someone relied on an undocumented
150  tuple/list mixing which changed earlier.
151* Floor rounding is used by default now, added -Wfloat-round
152  The old method was to truncate but it was not consistent with the integer
153  division and was problematic when using floating point to represent
154  fixed point numbers. The difference only shows for negative numbers.
155  Just to be on the safe side there's a new warning now for cases where
156  the programmer could use one of the rounding functions explicitly to avoid
157  a rounding ambiguity.
158* Handling of address space wraps in calculations
159  There are various address space wraps depending on the CPU. As an example the
160  zero page may wrap or may not with indexed addressing. 64tass now tries to
161  wrap when an offset is applied to an address to keep it in the same address
162  space. E.g. a label at $10 in the expression lda label-$20,x results in
163  lda $f0,x for a 6502 but lda $fffff0,x for a 65816. In all cases there are
164  warnings issued for such an ambiguity. If it's intentional it may be
165  suppressed but usually it's not.
166* -Wmem-wrap and -Wpc-wrap renamed now to -Wwrap-mem and -Wwrap-pc
167  To make them in line with the other bunch of new -Wwrap-something switches.
168  Please update your build scripts. They won't fail just yet but may in future.
169* Only --export-labels references labels
170  Listing labels incorrectly referenced .proc blocks and so just by doing a
171  label list unused .proc blocks got suddenly compiled in. This is unexpected
172  and should not happen for a simple label list therefore it won't any more. If
173  otherwise unused .proc blocks are needed in the label listing please add the
174  new --export-labels option to get them listed and compiled.
175* Star is finally a label now
176  Before it was only a number but as the theory goes it should be the
177  memory location at the beginning of the line. This means label = \* + 1
178  constructs are now correctly referring to memory locations.
179* Variables are not listed in VICE label list any more
180  They are ambiguous as may be assigned multiple times and usually don't refer
181  to memory locations
182* Dictionaries are order preserving and iterable now
183  Earlier order was undefined.
184* I/O error messages or in C locale now
185  As the rest of the messages aren't localized either.
186
187**New**
188
189* Add -Wmacro-prefix
190  Warns about macro calls without any prefix in front
191* Add WDM opcode
192  It was requested for 65816
193* Added .while and .bwhile
194  Could be done with .for before but it's cleaner this way
195* Add .breakif and .continueif
196  Simplifies .if .break .fi and .if .continue .fi sequences
197* Functions got a namespace
198  The function itself can hold symbols now so there's no need for an
199  additional label just to store data across invocations. That is
200  "functionname.stuff := 4" works now.
201* Lists can be used as keys in dictionaries
202  On query they need to be put into a list of course
203* CPA alias was added for CMP
204  For consistency with CPX and CPY.
205* Added --macro-caret-diag
206  Normally the diagnostic message is displayed along with the line causing it.
207  There was an option to suppress the line display for those who don't want
208  this but that makes debugging of macro expansions hard as the source file only
209  contains the unexpanded macro. This option is a middle ground to display
210  faulty lines only for macros.
211* Added --vice-labels-numeric
212  Normally only memory locations are included to avoid numeric constant
213  definitions in the listing but if you have a lot of label = $3000 style
214  definitions this is for you.
215* Dictionaries are concatenable now
216  There was hack to add entries by using the splat feature but the simpler
217  {1:2}..{2:3} works now too.
218* Dictionaries are sortable
219  Now that the order is preserved and they are iterable this makes sense
220* Multiple output files can be generated now
221  By using multiple "--output" parameters. The output format and the section used
222  may be varied of course.
223* Broadcast works with format() as well
224  It's now possible to format values in a list and the result is a list of
225  formatted values
226* Added --make-phony command line option
227  This is useful for automatic dependency generation purposes for Makefiles.
228* Added .with/.endwith
229  This allows to access symbols of another namespace without changing the
230  current one. Unlike .namespace/.endn which does that.
231
232**Fixes**
233
234* Now @b and @w works for branches
235  It can be used to prevent automatic long branches where it'd be bad
236* Fix AHX/SHA mode
237  Wrong addressing mode was used
238* Leading zeros warning message suppression was corrected
239  Due to a copy mistake it was -Wimmediate instead of -Wleading-zeros
240* Improve double definition error handling
241  It worked before as well but caused so additional errors
242* The "Too early to reference" error is gone now
243  Now nothing is to early to reference
244* Listing now contains returned values
245  The results of function return values are in the listing now
246* Unused .proc labels not in listing any more
247  If unused technically the don't exists and should not be there
248* Improved macro diagnostic message position for macros
249  In many cases now the diagnostic messages are issued at the macro invocation
250  instead in the macro body. At least when it seems like the problem is due to
251  wrong parametrization.
252* Addressing mode and size messages improved
253  They display the opcode now which can't have that addressing mode or size
254* Diagnostic backtrace now omitted for trivial cases
255  This cuts back on the useless clutter for diagnostic messages in a multi file
256  project
257* Inverse command line options added for consistency
258  For example there was a --quiet but no --no-quiet.
259* VICE label lists omit duplicate entries now
260  The monitor can only display one of them
261* Various diagnostic message location improvements
262  Some diagnostic messages pointed to the directive instead of it's parameter
263* Functions may be created anywhere
264  There were limitations on where functions may be defined but it's sorted now.
265* Struct offsets are numbers now
266  Of course they are but they were addresses earlier which caused -Wimmediate
267  to not trigger on them.
268* In some cases a missing .ends was not reported
269  Now it is
270
271r1900 (2019-02-17)
272==================
273
274Quick bug fix release to sort important regressions for file numbering, label files and \*=/.offs.
275
276**Fixes**
277
278* File number in line numbered list file was wrong
279  The parent was shown instead (which is not very useful)
280* Empty data or code lines vs. --no-source
281  Empty data lines are omitted now from the listing file
282* Undefined symbol messages could be wrong in macros
283  In some special cases it ended up as garbage
284* Open/close directives shouldn't work across files
285  Still worked with .include and the result was confusing
286* VICE label file generation crash on unconvertable address
287  In the unlikely case like 0,x and similar
288* .offs now does what C64 TASM does
289  This fixes a regression for old-school \*=/.offs relocations
290
291
292r1864 (2019-02-03)
293==================
294
295This release took a while as I wanted to test some of the features in practice
296first and those projects took a lot of time. Also some parts had to be
297rewritten as the implementation wasn't quite right. Then in the testing phase
298I've found a lot of problems and I wanted to solve them before doing a release.
299
300Anyway it's finally out now and I think it's a good improvement over r1515. If
301not then please let me know.
302
303**New**
304
305* Add -Waltmode to show unavailable addressing mode fallback
306   Data bank addressing may be bad sometimes instead of direct page
307* Add ".for var in sequence" style iteration loops
308  Looping over lists elements got easier now
309* Add .namespace/.endn directives
310  Now it's possible to switch to namespaces temporarily
311* Add -Wno-page
312  Now the .page/.endp error can be turned into a warning or off
313* Add --output-section
314  Output can be limited to a specific section instead of dumping everything
315* Add binary() function
316  This enables reading file content as a byte string for easier processing
317* Add .virtual/.endv
318  For compiling to an address but without producing any output
319* .align works in structures now
320  It aligns from the start of structure
321* Folding operator "..." added
322  Summing, minimum, maximum, etc. of list elements is easier now.
323* @w and @b size override now works with immediate addressing
324  For consistency, this is more useful for 65816
325* Hexadecimal representation of byte strings x"1234"
326  More straight forward to type than bytes($3412) and with "proper" ordering
327* z85 style byte strings representation z"0S\*"
328  More compact than x"1234". For label files and to embed binary data in source as text.
329* Add .bfor and .brept
330  Scoped variant of .for/.rept which handles non-anonymous labels better
331* Conditional assignment ":?=" added
332  Creates a new variable when symbol undefined otherwise keeps old value
333* Lazy fault handling
334  A failed calculation is not a problem if the result is not used
335* Negative .binary offsets
336  To allow offsets based from end of file
337
338**Fixes**
339
340* Data directives (.byte) must have at least one argument
341  Confusing behaviour, no argument is likely a mistake
342* Missing closing directives didn't auto close
343  This resulted in confusing error messages or worse
344* Improved directive missing messages
345  It's not just "something is expected" but a bit more verbose
346* Undefined sections could cause too many passes
347  Implementation bug
348* Optimizer suggestions are not shown for macros
349  How to apply multiple suggestions for a single line?
350* Exported symbols (-l) were reported as unused
351  They are used for exporting after all...
352* Compilation failed due to wcwidth
353  Some platform had interesting defines preventing compilation
354* Improve unused checks
355  Was not reporting correctly in some cases (like macro invocation)
356* Compilation warning reported by Compyx
357  A static keyword was missing.
358* Sometimes compilation ended too early
359  In some sections related cases not enough passes were made
360* Describe the "command line from file" feature better
361  A single paragraph was not enough
362* Improved missing macro argument message
363  The old one was not verbose enough
364* Redundant compilation warning (#33)
365  Didn't delete enough ;)
366* Section end with union
367  Section end was not right in union
368* Anonymous labels vs. conditional compilation
369  Make clear in documentation how this works
370* 65CE02 stack relative addressing fix
371  Unlike a 65816 it's signed.
372* VICE label generation was not generic enough
373  Some members where not listed.
374* Improved -Wshadow
375  Due to the .namespace directive it was not good enough any more
376* WIN64 compile fixes
377  Some format strings are unavailable on mingw64
378* Incorrect warning about labels not on left
379  Colon suffix was not enough
380* str()/repr() improvement
381  Some types have better string representations now
382* Wrong type messages replaced with better conversion messages
383  The old message was not too helpful
384* 65CE02 long branch fix second try
385  There were still cases where the wrong distance was calculated
386* Structs and unions didn't instantiate using a dot
387  It was documented but didn't work
388* Update to Unicode 11
389  Upgraded tables to the latest version
390* Suppress repeated caret lines in messages
391  One is enough if all the others are the same
392* .dstruct/.dunion double message on not defined
393  No additional syntax error message any more
394* Improve error positions
395  Still some errors were not on the right character in line
396* Only report file errors once
397  It's enough to know once if a file is missing
398* Improve syntax error messages
399  Mostly replaced by 'expected' messages now
400* Some messages lacked spacing at the end
401  Now it's there
402* Indexing precedence fixed
403  Broke in r1315, oops.
404* Faster in-place operations
405  Most noticeable for list appending or concatenate
406* Anonymous labels vs. scopes
407  Now they're truly bound to scope like normal labels
408* Runaway macro/function recursions are stopped faster now
409  Certain recursion faults were difficult to debug
410* Wrong negated bit string shifting
411  ~%10 << 1 was ~%100 instead of ~%101
412* Wrong negated byte string
413  -x'00' was ~x'ff' instead of x'00' (integer value different)
414
415r1515 (2017-05-01)
416==================
417
418It's about time to release another version as many changes were done and people were waiting for fixes already sitting in trunk for a while now. Some ideas didn't made it into this version as the implementation would have delayed the release even further, maybe next time.
419
420Changes since the last version:
421
422**Compatibility**
423
424I'm not happy about these "annoying" changes and hope it's easy to update the affected code.
425
426- Deprecation of '^' operator
427Code needs to be updated to use the format("%d", value) function for converting
428values to decimal strings. The reason is that the "standard" use of this
429operator is to return the bank byte in almost all other 65816 assemblers. This
430function is available with the grave accent operator currently, as '^' was
431already taken at the time. Plan is to migrate to the standard variant.  Old
432code with '^' for decimal strings conversion will of course still compile now.
433
434- Deprecation of non-string encoding names
435The original ".enc" directive used symbols for identifying encodings. The
436problem with this is that it's not parametrizable so the encoding can't be an
437expression or variable. There was no other way back then as strings were not
438supported at the time but it would be nice to allow such use. In this version
439the encoding names may be quoted for future compatibility but no expressions
440are available yet otherwise not yet updated code wouldn't compile.
441
442**New**
443
444Please check the manual for further details.
445
446- Keys without values in dict (sets)
447For quicker "in" than in list
448
449- Compound assignment also in .for
450Now "+=" and friends work in ".for"
451
452- Add &&= and ||= compound operators
453For consistency.
454
455- Check for file name portability issues (-Wno-portable)
456On multi platform development file names can cause compilation problems
457
458- Find unused labels with -Wunused
459Some unused labels may remain in code which can be pointed out
460
461- Check inconsistent symbol references with -Wcase-symbol
462For case insensitive but case matching symbols
463
464- Add <? and ?> operators (smaller/min, greater/max)
465New operator for range limiting
466
467- Check for double .case values with -Wswitch-case
468Multiple use of case value does not compile multiple times and may be a problem
469
470- Check for missing # with -Wimmediate
471For checking numeric constant opcodes without a '#' which may be a typos.
472
473- Turn on a check with -Werror=xxx too
474Less options needed as -Werror=xxx assumes -Wxxx.
475
476- Command line arguments from file with @file
477Frequently used options may be stored in a file
478
479- Scopes and addresses included in VICE label listing now
480Now more symbols are available in VICE
481
482- Listing of labels of specific scopes only into files (--root-labels=)
483Exporting of symbols only in a particular scope is possible now.
484
485- Dict indexable with lists now
486For translation uses
487
488- Improve some error messages by displaying the invalid values
489So that there's less guessing what the wrong value was
490
491- Keep integers when rounding
492floor() and friends converted to float unnecessarily
493
494- Add sort() to sort lists
495For sorting
496
497- '-' can be a variable as well
498For consistency.
499
500- Optimizer warns about ror/rol which could be lsr/asl
501C is clear, so there's no point shifting it in.
502
503- Warn for float comparison problems -Wfloat-compare
504Float comparisons may be wrong, especially for equality due to limited precision
505
506- format() improvements (integer precision, etc.)
507Some format() features were missing or wrong.
508
509- Predefine pi constant
510In case rad(180) needs too much typing...
511
512- Assign function parameters as variables instead of constants
513So that they may be modified.
514
515- Check for leading zeros -Wleading-zeros
516There's no octal number support, so this may be an error
517
518- Check for aliases with -Walias
519For consistent use of opcodes.
520
521- Improve message of const as variable
522It was a bit confusing
523
524- Improved non-negative message on range errors
525Make clear that the problem is with negative numbers not with number of bits
526
527- Notes for common pitfalls -Wpitfall
528Tips for some commonly encountered "problems".
529
530- Long branch warnings are possible again -Wlong-branch
531Long time ago this was there but was temporarily removed due to internal changes
532
533- Optimizer warns about constant results, duplicate sir/sac
534Calculations with constant values are pointless
535
536- Optimizer proposes use of stz on 65c02
537Storing zero, so why may use the specific instruction for that as well
538
539- Update to Unicode 9.0
540Including width tables this time
541
542- Optimizer proposes use of bra
543For always taken conditional branches
544
545- Better out of memory error handling
546For common cases it shows now where it happened.
547
548**Fixes**
549
550- Fix a few error positions which were missing
551Some error messages still didn't point to the cause...
552
553- Reduce fault messages for .endu/.ends
554Too many messages
555
556- Fix a possible null pointer crash for unknown address (fuzzed by Pierre)
557Implementation bug
558
559- Fix possible crash root namespace copying (fuzzed by Pierre)
560Implementation bug
561
562- Fix no argument indexing crash (fuzzed by Pierre)
563Implementation bug
564
565- Crash while handling struct values (fuzzed by Pierre)
566Implementation bug
567
568- Some special section nesting is not allowed (fuzzed by Pierre)
569Implementation bug. The fix caused some regression but it should be fixed as well.
570
571- Wrong memory use on long division (fuzzed by Pierre)
572Implementation bug
573
574- Missing type checks at a few places (fuzzed by Pierre)
575Implementation bug
576
577- Fix some return leaks
578Return where not freed
579
580- Compile fixes with VS
581Compiles now with newer VS without messing with code
582
583- Display address without mode correctly
584Did not display that an address is an address
585
586- Some notes were still displayed without warning/errors
587Some suppressed messages still had their notes displayed
588
589- Stdin/stdout not to be listed in makefiles
590Pointless to do so, they are not files.
591
592- Improve operations on addresses
593Especially needed without mode
594
595- Implement code offsets
596To preserve code reference
597
598- More operations on gap
599For .struct defaults with calculations
600
601- Fix integer limit checks
602It was done wrong.
603
604- Correct function call from macro line
605Didn't work well.
606
607- Fixed scoped macro highlighting in vim syntax
608Was not handled in the syntax file
609
610- Fix error messages on undefined section
611Messages were wrong.
612
613- Fix display of colon list with defaults
614It was wrong.
615
616- Unnecessary bytes needed message after another error
617Duplicate message for something which is not there
618
619- .eor was not applied to all fields in listing
620Listing showed the wrong hex values except for the opcode
621
622- label \*=\*+1 works again with warning -Wstar-equal
623Broke when compound operators were added, now works again.
624
625- Unpack code in .text
626Inconsistent behaviour
627
628- Fix some negative truncations/non-negative only values
629Some negative values didn't supposed to be truncated.
630
631- Restore bold output after invalid char inverted output
632Bold was missing after inversion.
633
634- Colours for all messages
635Command line parameter errors didn't had it yet.
636
637r1237 (2016-09-07)
638==================
639
640Just a quick bug fix release this time.
641
642Due to a mistake in the previous version file errors were not reported at all most of the time, which was of course not the intention. This is the main reason for this release.
643
644Otherwise only the encoding related error messages were improved to be less confusing.
645
646r1229 (2016-07-09)
647==================
648
649Lot's of changes lately and not just code tidying ;) So it's about time to release another version.
650
651** Changed **
652
653There's a new deprecation warning for the old single '=' equal operator which might hit many as a surprise. If possible please update all instances to '==' as this is how it's written for many years now. If that's not an option then the warning can be disabled with the "-Wno-old-equal" command line option.
654
655The recently added "--shadow-check" option was renamed to "-Wshadow" be consistent with the other new warning control options. This needs to be manually updated in build scripts. As it's a warning now by default a "-Werror=shadow" might be needed to make it an error again.
656
657** Fixes **
658
659* Fix highlighting of .sint in syntax files
660* Memory leak in -M generation
661* Bool \*\* was wrong due to a typo
662* Negative integer modulo/division fixes
663* Possible leak at label file generation
664* Wrong function compare due to a typo
665* pow() was wrong due to copy-pasting
666* Reject overlong UTF-8 sequences
667* Reduced the identifier set to used scripts
668* 65CE02 relative long branch calculation corrected now
669* Error out if the address mode is to complex
670* .dsection didn't took over PC type
671* Some calculations didn't work with addresses
672* Weak variables were included in shadow check
673* Data bank addressing was accepted incorrectly for some opcodes
674* Text width of wide characters is correct now
675* Exit code was wrong if output failed
676* Disassembly of bit addressing instructions was wrong
677
678** Improved **
679
680* Improved key error message
681Now displays what key was not found, not just says it's wrong
682* Improved source portability and documentation
683Hopefully it's easier to compile it now for some environments.
684* Some out of memory errors are non-fatal now
685Now for these few memory errors the diagnostic is a bit better.
686* Improved floating point highlighting in some syntax files
687It's including the dot and exponent as well if possible.
688* Indexing can be subtracted now
689It was not possible before unless it matched.
690* Bits and bytes negation preserves size unless on overflow
691These are not converted to integer any more just because of negation.
692* Better error message for small address space "bank crossing" and bank 0.
693Some of those 65816 style messages were not appropriate for small systems.
694* Improved fault handling strategy (no early exit and false messages)
695Due to early exit some invalid fault messages were displayed, and sometimes important messages were hidden. This should be better now.
696* Repeated data lines are shortened now in listing file
697The listing file will be not overly long now just because there was a .fill 8192,0
698
699** New **
700
701* "Column indexing" of nested lists
702This is quite cool but hard to explain here ;) But there's a section called "Slicing and indexing" now in the manual where this is shown as well.
703* New CPU type for 4510
704For the MAP and EOM opcodes, otherwise the same as 65CE02.
705* Line numbers in listing, column headers (--line-numbers)
706It's possible to enable an additional column for line numbers and source origin. So that it's easier to find what's coming from where (especially macros).
707* Strict boolean operations (-Wstrict-bool)
708New warning for finding implicit boolean calculation
709* Warning for deprecated operators (-Wdeprecated)
710It warns about things like using '=' instead of '==' before it's too late...
711* Colored error messages on some systems
712Colored diagnostic messages are displayed on some terminals now
713* Optimizer warnings (-Woptimize)
714There's an experimental optimizer now, which can generate useful warnings sometimes.
715* Some additional addressing modes for NOPs for R65C02/W65C02
716To be consistent with the NMOS 6502. After all these NOPs are at least defined in the data sheets ;)
717* Scoped variables are now output in VICE labels
718Now scoped variables are included in VICE listing, which can help debugging a lot.
719* Add --cbm-prg command line option just for completeness
720It's the default, but now it has an option anyway.
721* Use NOP immediate and relative long for skipping if available
722New possibilities to skip bytes and words using the "gxx" pseudo opcodes on some CPUs.
723* Syntax highlighting for VIM
724It was about time. Not the same what I use normally, for a good reason ;)
725* Signed immediate addressing mode (lda #-1)
726After long last it's possible to enter negative numbers for immediate addressing as a proper signed version was introduced. See manual for notes (#- and #+)
727* Warning for implied addressing instead of accu (-Wimplied-reg)
728To find code where the "a" was left off "asl".
729* Diagnostics switchable now and can be made to an error (-Wxxx).
730There's more control now over what gets warned about and how. See the "Diagnostic options" section in manual for details.
731* Display command line option at the end of warnings/errors for switchable ones
732Many warnings are switchable now so it's good to know what switch can be used to manipulate them. These are displayed in brackets after the messages.
733* Option for jump bug warning (-Wjump-bug)
734The jmp ($xxff) warning has an option now
735* Option for address wrap warnings (-Wpc-wrap, -Wmem-wrap)
736Address wrap warnings have an option now
737* Option for label not on left warning (-Wlabel-left)
738The check was improved to have less false positives and has an option now.
739* Option for branch page crossing (-Wbranch-page)
740These are quite common and hard to do much against, so it's not enabled by default.
741* Option for old '=' operator warning (-Wold-equal)
742This checks for the old single equal operator, which should be changed to '=='.
743
744r1050 (2016-04-30)
745==================
746
747Some time passed again, so here's another release:
748
749** Changed **
750
751* Image file limits depend on format not CPU type
752  So using a 65816 does not imply 16 MiB output image file size any more. See
753  output options if this makes a problem. The earlier behaviour was rather
754  confusing when using several CPU types.
755* .int renamed to .sint
756  It was a wrong choice to name this directive so as now it conflicts with the
757  int type. Therefore it was renamed. Please update affected sources.
758
759** Fixes **
760
761* Fix invalid addressing mode parsing
762  For example (0),x was degraded to 0,x instead of giving an error.
763* Improve on duplicate fault messages
764  There were some cases where a single fault resulted in more than one error message.
765* CPU register symbols only for used CPUs
766  This is important in case --shadow-check is used.
767* Fix a .logical/.here nesting problem
768  Don't have the test case any more but it caused some weird behaviour
769* Error buffering fix
770  Could crash due to not updated pointers on realloc
771* Improve messages for some to many passes cases
772  Now gives can't calculate messages instead of too many passes
773* Wrong bank0 message instead of dp when dp undefined
774  Wrong error message was displayed
775* Wrong inverted byte conversion due to missing break
776  Typo resulting in miscalculation
777* Local label context nesting fixed
778  Underscore labels were not scoped as it was originally planned
779* Fix zero shifting of bits
780  Wrong result
781* Avoid non 0 message for .null when encoding is invalid
782  An extra invalid message appeared for unencodable .null texts
783* Improve error detection when writing to output
784  Redirected output didn't detect errors like disk full
785
786** New **
787
788* Makefile rule generation option (-M)
789Now it's possible to output all referenced files as a Makefile rule, which helps to write makefiles
790* Symbol shadowing checking (--shadow-check)
791Check if symbols are reused in upper scopes and create error if so.
792* Code page support for DJGPP
793Code pages are converted to Unicode correctly now under real DOS (if anyone still uses it)
794* Apply logical not, and, or to lists
795Instead of error these operations are applied on lists now
796* Debug label dumping (--dump-labels)
797Dump all labels with position information for debugging purposes.
798* Use holes in output files when possible
799Large but sparse image files take less space now.
800* Intel hex output (--intel-hex)
801* Motorola s-record output (--s-record)
802These two output formats were added for people with EPROM programmers or special download methods
803* Verbose listing (--verbose-list)
804Include everything in listing files, even if it does not generate anything
805* Error file (-E)
806Errors can be redirected to standard output or file. For better integration with some WIN32 editors.
807
808That's all for now.
809
810r992 (2015-09-03)
811=================
812
813No release for a long time, so time for an update. As I'm running out of version numbers this will be probably the last 1.51.
814
815** Fixes **
816
817**Fix missing backslash when displaying filenames**
818  Windows paths displayed incorrectly
819**Fix float exponential 0.0\*\*0.0 **
820  Was not 1.0
821**Fix local label scoping vs. anonymous labels**
822  +/- should not break the scope of underscore labels
823**Fix wrong label required message for duplicate .proc**
824  Wrong message
825**Fix missing comma for zp bit relative in listing**
826  Bad output in listing file
827**Fix some .for/.rept bugs**
828  Could crash in special cases
829**Fix long negative bits crash**
830  Could crash in special cases
831**Fix splat handling in unusual places**
832  Could crash in special cases, now has proper error message
833**Fix text recursion of string types**
834  Didn't work as expected
835**Compiles with a recent DJGPP again**
836  For a very important platform ;)
837
838** New **
839
840**Add --no-caret-diag**
841  For editors which can parse and jump to the error messages.
842**Update to Unicode 8.0**
843  Just because it came out meanwhile.
844**Add --vice-labels**
845  Because there was a demand for this ;)
846**Add underscore digit separator (int, bin, hex, float)**
847  Long literal constant digits can be separated as %1010_0111
848**Add := as .var**
849  Just a shorthand, like 'v .var 2' as 'v := 2'
850**Compound .var assignments (+=, -=, etc.)**
851  Another shorthand, like 'v .var v+1' as 'v += 1'
852**Reuse jumps of nearby long branches**
853  Spare some bytes off if long branches are close and to same place
854**New column for displaying PC in listing**
855  Easier to debug relocated code when .logical/.here is used
856**Simple manual page for command line options**
857  For distributions.
858**Debian packaging directory**
859  To compile .deb packages
860**For .for condition or assignment can be omitted too**
861  So that '.for ,,' is possible now
862**Syntax highlight updates**
863  Unicode labels where not always highlighted
864**Documentation updates**
865  More detailed now ;)
866**Don't display long values in error messages**
867  It clutters up the error log and probably was not intended
868**Improved .fill/.align pattern filling**
869  Can do the same as now as .text for a list
870
871** Notes **
872
873If for some reason you had a label in front of a '\*=' assignment in your
874sources this will clash now with the compound assignment '\*='.
875
876To avoid this move the label a line above. The 'v \*= $2' construct is now
877multiplying the variable 'v' with $2, instead of defining a label 'v' and
878setting the PC to $2.
879
880Sorry for the inconvenience.
881
882r943 (2015-04-17)
883=================
884
885There was a major code restructuring meanwhile, and it seems to work now, so
886let's release it ;) The plan was to gain more flexibility and to reduce the
887chances of creating bugs.
888
889I found some bugs when I've re-read and rewrote the code and also Pierre Zero
890uncovered some crashes by fuzzing. So it should be more stable than 1.51.883
891was in some edge cases.
892
893**Fixes:**
894
895* Wrong address on empty .fill/.align in listing
896* Limit function recursion
897* Another to early compilation stop case fixed
898* Proper 65816 PC wrapping
899* Better position reporting of invalid characters in .shift/.shiftl/.null
900* Include instructions without result lines in listing
901* And all those crash bug fixes I better don't list here ;)
902
903**New:**
904
905* 65816 rep/sep tracking, added .autsiz/.mansiz
906* Add random() and .seed
907* mcedit syntax highlight added
908* .dpage and .databank can be "unset" now
909* String constant prefixes 'n', 's', 'p', 'l' added
910* PEI with direct page addressing
911* PC has type now
912* .rta and .addr accepts ,k now
913* Add empty string error message for clarity
914
915The manual was improved as well of course.
916
917r883 (2014-12-14)
918=================
919
920Time for another release. Most of the changes were re-factoring as things
921started to get more complicated than necessary.
922
923**Fixed:**
924
925* Signed bit concat was wrong
926* Set binary mode on stdout when needed (win32)
927* Fix some label listing problems
928* Fix error position for star
929* Fix some bit slicing problems
930* Wrong string length on repeat and multi index
931* Fix bool to decimal string
932* Nested structs are not special anymore
933* Bits and/or length fixes
934
935**Improved:**
936
937* Improved floating point error messages
938* Point on invalid format string character
939* Change Unicode output on win32
940* Address of .rta now in current program bank
941* Improve addressing mode error messages
942* Give expected type in wrong type message
943* TBA was missed from documentation
944* Bits shift was not in documentation
945* Some operator fixes
946* Add some missing operations
947* Avoid duplicate error messages (e.g. in .rept)
948* Add TOC to documentation
949
950**New:**
951
952* Add .addr for current program bank address
953* Apple II DOS 3.3 output format
954* Option for listing tab-size
955* Broadcasting for two argument functions
956* Bit string in .text
957* Types, more complete conversions
958
959r774 (2014-10-13)
960=================
961
962It's time for a release, I've sit on fixes for too long.
963
964**Fixes:**
965
966* the manual still had non-ASCII characters at places expected to be copy-pasted
967* file names where not encoded properly (were always UTF-8) if they were non-ASCII
968* there was an invalid out of memory error with strings
969* invalid extra character at end of line message fixed in a special case
970* labels were deleted when still needed (crash in special cases)
971* caret was at wrong position of anonymous labels
972* .ptext was not working properly (wrong length)
973* compilation finished in some special cases too early
974* some error objects leaked to unexpected places causing crash
975* .var was not referencing in some complicated cases
976* value reuse crash (bug #21 and #22)
977* numbers should be non-locale dependent (wrong floating point printing)
978
979**Improved:**
980
981* use locale encoding for 8-bit files instead of fixed ISO-8859-1
982* the caret points to the non-encodable character now in the simple literal case, instead showing the beginning of the string.
983* use "not a one character string" message instead of "string too long"
984* some general syntax messages were converted to comma expected instead
985* allow non-ASCII printable character printing
986* use shell quoting when printing file names with special characters
987* do real disassembling in list files as some opcode names where still aliases
988* some special addressing modes were not there as expected
989* some duplicated error messages are suppressed now
990* the html manual is better scalable now
991
992**New:**
993
994* support of Unicode 7.0.0
995* registers other than "a" can be used as well. E.g. "inc x" is "inx"
996* registers can be used for indexing now. E.g. "reg = x" and "lda val, reg" is "lda val,x"
997
998r727 (2014-06-08)
999=================
1000
1001The r716 version didn't last long ;( There was a regression which caused to
1002miscompile the "pea #" opcode, so here's the fix.
1003
1004The bug was noticed after the .cpu change removed the warning, so I'd like to
1005note again that the .cpu directive now has a string argument and therefore old
1006sources may need to add quotes because of this.
1007
1008The good news is that this version includes the Unicode identifier support,
1009which was planned for a long time. It's based a version 6.3.0 and features:
1010
1011* identifiers composed of XID_Start and XID_Continue only, plus underscore
1012* proper case folding in case insensitive mode (e.g. Straße = strasse)
1013* NFKC normalized, the "same" identifiers represented differently are still
1014  equivalent (ligatures field = field, combining marks á = á, similar symbols �� =
1015  A = ��,  etc.)
1016
1017It didn't bloat up the binary at all, as the required stuff was included for
1018the NFC source normalization already. Performance is not affected when plain
1019ASCII labels are used, and the difference is not noticeable otherwise.
1020
1021Other changes include further error message and message position improvements
1022and that .binary can load more than the processor address space (in flat mode).
1023
1024r716 (2014-06-07)
1025=================
1026
1027Lot's of internal changes. The most notable addition was the caret diagnostic
1028error messages. The displayed source line is macro expanded of course, to ease
1029debugging.
1030
1031**Changes:**
1032
1033* fixed unaligned accesses (ARM crash)
1034* nested parentheses bug in compatible mode
1035* .pron/.proff nestable now
1036* some special cases are solved in less passes
1037* use locale for non-ascii character messages
1038* caret diagnostic error messages (macro expanded)
1039* fix some error message positions
1040* improve instruction address mode error messages
1041* jmp is non-data bank also on non-65816
1042* long branch versions of bbr/bbs (R65C02)
1043* cross bank long automatic jumps on 65816
1044* improved listing file handling of long jumps
1045* .cpu warning if name is not a quoted string
1046
1047Please note that the ".cpu" directive will require a string argument in the
1048next version, to make it more flexible. This change will allow CPU selection by
1049using a variable as an argument.
1050
1051On r716 and earlier versions CPU name quoting was optional, but now there's a
1052warning for a non-quoted name. Variable arguments will be available in the next
1053version only, as otherwise they conflict with CPU names like "r65c02", which
1054looks like a variable. Please update your sources for future compatibility.
1055
1056r675 (2014-03-06)
1057=================
1058
1059**Bug fixes:**
1060
1061* PEA # / REA # was missing for 65EL02
1062
1063* MVP/MVN #,# valid now (MVP/MVN $,$ still there for compatibility)
1064
1065* float() was broken
1066
1067* Some characters were broken in README and were shown as "?"
1068
1069* A few error messages lacked the severity marking
1070
1071* .include/binary used the wrong position for file errors
1072
1073* .if with forward references failed in some special cases
1074
1075* power operator (**) associativity was wrong
1076
1077* list/tuple compare crashed
1078
1079* Some other fixes (hard to decide if they applied to the previous versions or not)
1080
1081**Features:**
1082
1083* Create multiple instructions when using a list of addresses
1084
1085* pair is gone (a:b), instead there's a general colon list
1086(a:b:c...) which is used for dictionaries/slices.
1087
1088* improve argument number error messages and other fault reporting improvements
1089
1090* nested lists are now flattened for .byte/.text and friends
1091
1092* .break and .continue flow control for .rept and .for loops
1093
1094* NFC normalization of source files. This added ~150k to the
1095executable. It'll be used for some not yet implemented Unicode functions
1096sometime later too.
1097
1098* added the splat operator to "inline" lists in place of arguments. (*list)
1099
1100* .weak/.endweak for defining weak symbols
1101
1102**Changed operation:**
1103
1104* the multiple destinations hack for branches is gone now.
1105It was never official, and the same effect can be achieved by using an
1106easy to write function. I better don't tell what it was ;)
1107
1108* addressing modes are applied to list elements and not to the list itself
1109
1110* str()/repr() applies to list elements instead of list
1111
1112* list/tuple mixed membership testing gives per element results in a list/tuple
1113
1114* space between $ or % and numbers is not allowed anymore.
1115This allowed confusion with the modulo operator for "%".
1116
1117* only comma separated elements are processed in .case and not single
1118list/tuple's members. Use the splat operator if lists/tuples are containing
1119the possibilities.
1120
1121* the "format string" % (values) formatting operation is gone now as
1122it was too confusable with modulo, especially when variables
1123were involved. Instead use the new format() function as format("string",
1124some variables). If list elements are the format arguments, use the splat
1125operator to inline them. (e.g. format("%d: %s", *list))
1126
1127r584 (2014-01-19)
1128=================
1129
1130**Bug fixes**:
1131
1132- various bug fixes for crashes, leaks, etc.
1133- notes are not incorrectly counted as errors any more
1134- no 32 bit issues with code address calculation anymore, especially when going negative
1135
1136**Features**:
1137
1138- Atari XEX output file format
1139- .fill and .align can use iterable objects as fill byte, this can be used for simple patterns using lists/tuples
1140- it's possible to specify the default value returned for non-existing elements in dictionaries to avoid errors
1141- dictionaries can use externally defined key/value pairs. I'm not sure if this is interesting
1142- object type is displayed in conversion error messages for better understanding of the problem
1143- function context is more similar to it's invocation context now (e.g. address is matching now)
1144- documentation improvements, section for addressing modes some indexes at the end
1145- escape sequences in encodings can generate more than a single byte now
1146- cheap local labels supported now between normal symbols (read the docs)
1147- "starred" function parameter to collect extra parameters into tuple to have functions with unlimited parameters
1148
1149**Changed operation**:
1150
1151- All symbols starting with an underscore are cheap local labels now. This might cause problems in existing sources which ignored the "symbol names start with a letter" rule. Please rename your global symbols which used an underscore.
1152
1153- -W and --word-start option gone, there's -X and --long-address instead, which affects the start address of C64 binaries. It was confusing that the start address depended on the CPU type and it caused internal conflicts. Now the start address size is independent from CPU. When compiling for e.g. 65816 usually the start address is forced to 16 bit start with "-W" option. This options needs to be removed, it's 16 bit by default now, but can be changed to 24 bit with the --long-address option.
1154
1155- built in symbols for true/false, "a" register, and for built in functions. Built in functions were special before and different to user functions. Now they are the same, which means they can be passed around, aliased or can be shadowed. This makes sure that new built in functions can be introduced without breaking existing sources in the future and gives greater flexibility.
1156Unfortunately there might be cases where a normal symbol was shadowing a built-in function and this now results in an error (like size() function vs. size symbol). Please rename the problematic symbol to something else. This also applies to the "a" register symbol.
1157
1158- I've seen that a bug in .if was abused for getting something similar to .ifdef. This was corrected by "mistake", therefore that trick does not work any more. There are no plans for .ifdef/.ifndef at this point, however symbol strengths are planned instead to get "default" values. But that needs further development. There's a possibility to get something similar with shadowing right now as well.
1159
1160r521 (2013-11-30)
1161=================
1162
1163__Bug fixes:__
1164- listing could reference unused symbols, this caused a compile failure on code that otherwise compiles
1165- bit string right shifting had a sign problem
1166- bit string zero inversion didn't work
1167- .xl and .al didn't work on 65el02
1168- Long accu was applied for BRK, COP and MMU instructions incorrectly
1169- some object conversions resulted in an infinite recursion and crash
1170
1171__Features:__
1172- code objects give access to symbols in situations where it was not possible before, e.g. when member of a list
1173- undefined identifiers are only reported once per scope
1174- address calculations are not limited to 32 bits any more. The code address space is still of course.
1175- Accu and index register lengths (.al, .xl) are independent from current CPU, so 16 bit immediate values are available always
1176- relative jumps are better guessed now (fewer passes in some special cases)
1177- any(), all(), bool() functions
1178- long lists and dictionaries can be split into several line, these lines are implicitly joined
1179
1180__Changed operation:__
1181- comparison operators compare list by elements and give a list of booleans instead of a single boolean.
1182- lists consisting of more than one element don't have a truth value anymore, any() or all() should be used. An empty list is false and a single element is the truth value of that element.
1183
1184(2013-08-27)
1185============
1186
1187The old 32 bit unsigned/signed integers and bit strings are gone now. Instead there are just arbitrary long integers and a bit strings. Therefore calculations won't silently overflow or go floating point any more.
1188
1189Unfortunately in 1.51.493 the branch range check was non-functional by a mistake ;( Next try for the release is 1.51.496 ;)
1190
1191Some things to watch out for:
1192
1193"%c" in format strings now always outputs the Unicode character for the integer value of variable, even if it's a string. Use "%s" with one character strings too.
1194
1195The "^" operator always gives a decimal string for the integer value of variable, even for strings. Before it give back the original string without conversion.
1196
1197The "repr()" function adds quotation marks to strings now, use "str()" if this is not what's needed.
1198
1199
1200