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