Menu

64tass / News: Recent posts

64tass 1.60.3243

Time to make another release as it'd be good to get the fixes out.

Fixes

  • Rename memalign function
    Caused compilation failures if such function existed in standard library
  • Struct members offsets were still addresses sometimes
    This could cause wrong diagnostic messages (#71)
  • Improve indirect alignment directives
    In some cases they failed even if the alignment was doable
  • Wrong value in addressing limit messages
    The full address mode was displayed while only the address value is relevant
  • Typo causing various issues on win32
    Especially on newer versions. (#75)
  • Listing file error got lost
    If an error occurred on creation of a listing file it wasn't reported
  • Original definition note message even when location was not known
    Without the location it's useless, so it's avoided now.
  • BBR and BBS long branches
    These broke at some point but are working now again.... read more
Posted by Soci/Singular 2025-05-10

64tass 1.59.3120

About time to make another release. There are some fixes for reported
problems (thanks!) and for some more I've noticed myself. For new
features check below.

Fixes

  • Line numbers didn't always show up in listing file when requested.
    Was a regression, there was a workaround but it's not necessary now
  • Listing file didn't listed labels at the end of functions/macros.
    Now it does
  • When .binclude failed it could cause an unexpected too many passes error.
    No such surprises now on filename typos.
  • Some versions of GCC miscompiled the source with LTO optimization
    It resulted in an immediate crash at startup. It's worked around now.
  • Possible issues fixed with (0, x) style indexed indirect addressing
    This workaround should have been done more carefully. Should work now.
  • When outputting a specific section the output was incomplete in some cases
    I usually used complicated arrangements which worked so it was
    surprising to find that in special a simple one it didn't
  • Parsing errors could cause unnecessary undefined label errors
    It does not do this any more, so less noise in error messages.
  • Zero length concatenation of inverted bits/bytes was not correct
    A very special case.
  • The order of indirect parameters in format() was wrong (broke in r2345)
    Haven't used it until now and was surprised to find this.
  • The line number was at the wrong place in listing in some cases
    Now it's always in front where it should be.
  • There was a complicated way to cause a crash through encoding definition
    One of those what would happen if experiments. Unlikely anyone
    encountered this.
  • Katepart syntax file was incompatible with newer version
    There were silly mistakes in XML which were accepted in earlier versions.
  • Possible crash fixed related to iterated bfor error handling
    The error case handling had a mistake.... read more
Posted by Soci/Singular 2023-09-10

64tass 1.58.2974

This is a bugfix release due to the broken multi file output. There were
a bunch of encoding related work meanwhile so these are included as well.

Fixes

  • There was a mistake which could cause crashes (usually on Windows)
    when outputting sections to multiple files.
  • Linking to older versions of MS C library could result in unexpected
    behaviour when Unicode characters were attempted to be output due to
    differences to ISO-C. Such functions are not used anymore. The
    precompiled binary used a recent enough toolchain and so was not
    affected.
  • Map file output not written to a file could still report a file open
    error if the standard output was redirected and that couldn't be written.
  • In some cases ANSI colour sequences could end up in text output to files.
    This shouldn't happen now.
  • Memory maps written to files were not added to makefile as outputs.
  • The Notepad++ syntax file was incompatible with dark-mode as it set the
    text background to white instead of transparent.
  • When running on DOS the code page was not detected with some versions
    of the OS.
  • Attempting to use it on Windows versions without wide character
    support resulted in immediate exit. Now it can be used as normal.
  • When trying to use options with non-ASCII characters the error message
    showed garbage.
  • Coloured diagnostic messages only worked in console window but not in
    mintty (unless compiled for Cygwin). Now it should work with the
    native version as well.
  • Depending on the C library memory map output could hang due to a
    mistake. (e.g. on Amiga)... read more
Posted by Soci/Singular 2023-01-11

64tass 1.57.2900

It's time to release a version now. People are looking for fixes which were in
trunk for a long time.

Fixes

  • Paths with parent references don't give bogus portability warnings any more
    On Windows the due to an oversight parent referencing paths incorrectly
    triggered the portability warning originally intended for detecting a
    filename case mismatch.
  • Arbitrary length int right shift was wrong in some cases.
    Now it's correct.
  • .bfor didn't accepted .endfor closing in some cases
    Now it's correct. Did always work with .next and I didn't transitioned the
    test sources...
  • (0, x) is now recognized as indexed indirect for opcodes
    The parser of course did recognize (0,x) just fine for opcodes. However
    writing (0, x) is a tuple and so does something else. There's a workaround
    now to recognize such a construct as indexed indirect instead. This should
    avoid bad surprises for those unaware that the indexing operator should not
    have a white space there.
  • Writing to standard output suppresses messages in all cases
    This only worked for output files but now for everything (e.g. listing
    to "-" didn't suppressed messages while --output "-" did).
  • The TASM compatibility text macro parameter expansion was wrong
    It didn't remove the quotes from strings. It broke quite long ago, now
    works again.
  • Output append didn't reproduce gaps working correctly in some cases
    Padding was corrected and now it does.
  • Output could have garbage in gaps on non-POSIX conforming systems
    Unlikely anyone got that far in porting but gaps should be correctly
    filled with zeros now... read more
Posted by Soci/Singular 2022-11-05

64tass 1.56.2625

The last release got more than a year old now and there were
plenty of pending corrections to be released. Some planned
features still didn't made it in. Maybe next time.

Fixes

  • .fill/.align multi byte pattern fix
    Broke due to changes in r1845.
  • Wrong diagnostic for incomplete byte string
    The missing closing quote was pointed at the wrong place
  • Incomplete diagnostic message
    The opcode was not displayed in some cases
  • Diagnostic locations fixed
    In some cases the location was wrong
  • Duplicate diagnostic messages avoided
    In some cases redundant diagnostics was output
  • Crash while .function declaration and macro init parameters
    Found by Pierre
  • Improved filename portability checks
    In some cases case insensitive filenames were not recognized
  • Diagnostics of non-portable filename characters improved
    Now points at the problematic character.
  • Functions did not execute as loop and other conditions
    Now they do.
  • Can't calculate errors related to functions
    In some cases these were incorrectly reported
  • 4510 missed had () instead of (),z addressing mode
    Now same as 65CE02 in this regard
  • Improved format() diagnostics
    It's more strict now
  • Floating point bitops didn't work as intended
    Actually in some cases they did work but mostly not
  • Dot eor operator works again in TASM compatible mode
    Got broken due to syntax clash with hexadecimal floats
  • Wrong message text for invalid unary operators
    Tried to diagnose them like binary by mistake
  • Improved syntax highlighting
    In some case it didn't highlight well on vim
  • Byte string compare didn't work properly
    In case a byte string was inverted.
  • In some cases .null failed to detect zeros
    For example for ~$ff... read more
Posted by Soci/Singular 2021-04-25

64tass 1.55.2200

This is a bug fix release to fix the unintended performance degradation on some
systems like BSDs.

Fixes

  • Revert buffering changes
    These caused really slow performance on some systems which I forgot to test.
  • Makefile name escaping
    It's not the same as for shells and is more limited. So names with spaces
    should work now but otherwise it's advised to avoid incompatible file naming.
  • Bold black is not be visible on black background
    Changed to cyan.
  • Unicode parameter file names didn't work on some platforms
    Forgot a conversion so only UTF-8 worked... read more
Posted by Soci/Singular 2020-04-07

64tass 1.55.2176

There were quite many changes in trunk so it's time to release another version.

Changes

  • Removed -Wtype-mixing
    It was a transitional warning just in case someone relied on an undocumented
    tuple/list mixing which changed earlier.
  • Floor rounding is used by default now, added -Wfloat-round
    The old method was to truncate but it was not consistent with the integer
    division and was problematic when using floating point to represent
    fixed point numbers. The difference only shows for negative numbers.
    Just to be on the safe side there's a new warning now for cases where
    the programmer could use one of the rounding functions explicitly to avoid
    a rounding ambiguity.
  • Handling of address space wraps in calculations
    There are various address space wraps depending on the CPU. As an example the
    zero page may wrap or may not with indexed addressing. 64tass now tries to
    wrap when an offset is applied to an address to keep it in the same address
    space. E.g. a label at $10 in the expression lda label-$20,x results in
    lda $f0,x for a 6502 but lda $fffff0,x for a 65816. In all cases there are
    warnings issued for such an ambiguity. If it's intentional it may be
    suppressed but usually it's not.
  • -Wmem-wrap and -Wpc-wrap renamed now to -Wwrap-mem and -Wwrap-pc
    To make them in line with the other bunch of new -Wwrap-something switches.
    Please update your build scripts. They won't fail just yet but may in future.
  • Only --export-labels references labels
    Listing labels incorrectly referenced .proc blocks and so just by doing a
    label list unused .proc blocks got suddenly compiled in. This is unexpected
    and should not happen for a simple label list therefore it won't any more. If
    otherwise unused .proc blocks are needed in the label listing please add the
    new --export-labels option to get them listed and compiled.
  • Star is finally a label now
    Before it was only a number but as the theory goes it should be the
    memory location at the beginning of the line. This means label = * + 1
    constructs are now correctly refering to memory locations.
  • Variables are not listed in VICE label list any more
    They are ambiguous as may be assigned multiple times and usually don't refer
    to memory locations
  • Dictionaries are order preserving and iterable now
    Earlier order was undefined.
  • I/O error messages or in C locale now
    As the rest of the messages aren't localized either.... read more
Posted by Soci/Singular 2020-03-23

64tass 1.54.1900

Quick bugfix release to sort important regressions for file numbering, label files and *=/.offs.

Fixes

  • File number in line numbered list file was wrong
    The parent was shown instead (which is not very useful)
  • Empty data or code lines vs. --no-source
    Empty data lines are ommited now from the listing file
  • Undefined symbol messages could be wrong in macros
    In some special cases it ended up as garbage
  • Open/close directives shouldn't work across files
    Still worked with .include and the result was confusing
  • VICE label file generation crash on unconvertable address
    In the unlikely case like 0,x and similar
  • .offs now does what C64 TASM does
    This fixes a regression for old-school *=/.offs relocations
Posted by Soci/Singular 2019-02-17

64tass 1.54.1864

This release took a while as I wanted to test some of the features in practice first and those projects took a lot of time. Also some parts had to be rewritten as the implementation wasn't quite right. Then in the testing phase I've found a lot of problems and I wanted to solve them before doing a release.

Anyway it's finally out now and I think it's a good improvement over r1515. If not then please let me know. ... read more

Posted by Soci/Singular 2019-02-03

64tass 1.53.1515

It'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.

Changes since the last version:

Compatibility

I'm not happy about these "annoying" changes and hope it's easy to update the affected code.... read more

Posted by Soci/Singular 2017-05-01

64tass 1.52.1237

Just a quick bug fix release this time.

Due 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.

Otherwise only the encoding related error messages were improved to be less
confusing.

Posted by Soci/Singular 2016-09-07

64tass 1.52.1229

Lot's of changes lately and not just code tidying ;) So it's about time to release another version.

** Changed **

There'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.... read more

Posted by Soci/Singular 2016-07-09

64tass 1.52.1050

Some time passed again, so here's another release:

** Changed **

  • Image file limits depend on format not CPU type
    So using a 65816 does not imply 16 MiB output image file size any more. See output options if this makes a problem. The earlier behaviour was rather confusing when using several CPU types.
  • .int renamed to .sint
    It was a wrong choice to name this directive so as now it conflicts with the int type. Therefore it was renamed. Please update affected sources.... read more
Posted by Soci/Singular 2016-04-30

64tass 1.51.992

No 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.

** Fixes **

Fix missing backslash when displaying filenames
Windows paths displayed incorrectly
Fix float exponential 0.0**0.0 **
Was not 1.0
Fix local label scoping vs. anonymous labels
+/- should not break the scope of underscore labels
Fix wrong label required message for duplicate .proc
Wrong message
Fix missing comma for zp bit relative in listing
Bad output in listing file
Fix some .for/.rept bugs
Could crash in special cases
Fix long negative bits crash
Could crash in special cases
Fix splat handling in unusual places
Could crash in special cases, now has proper error message
Fix text recursion of string types
Didn't work as expected
Compiles with a recent DJGPP again**
For a very important platform ;)... read more

Posted by Soci/Singular 2015-09-03

64tass 1.51.943

There was a major code restructuring meanwhile, and it seems to work now, so let's release it ;) The plan was to gain more flexibility and to reduce the chances of creating bugs.

I found some bugs when I've re-read and rewrote the code and also Pierre Zero uncovered some crashes by fuzzing. So it should be more stable than 1.51.883 was in some edge cases.

Fixes:

  • Wrong address on empty .fill/.align in listing
  • Limit function recursion
  • Another to early compilation stop case fixed
  • Proper 65816 PC wrapping
  • Better position reporting of invalid characters in .shift/.shiftl/.null
  • Include instructions without result lines in listing
  • And all those crash bug fixes I better don't list here ;)... read more
Posted by Soci/Singular 2015-04-17

64tass 1.51.883

Time for another release. Most of the changes were re-factoring as things started to get more complicated than necessary.

Fixed:

  • Signed bit concat was wrong
  • Set binary mode on stdout when needed (win32)
  • Fix some label listing problems
  • Fix error position for star
  • Fix some bit slicing problems
  • Wrong string length on repeat and multiindex
  • Fix bool to decimal string
  • Nested structs are not special anymore
  • Bits and/or length fixes... read more
Posted by Soci/Singular 2014-12-14

64tass 1.51.774

It's time for a release, I've sit on fixes for too long.

Fixes:

  • the manual still had non-ASCII characters at places expected to be copy-pasted
  • file names where not encoded properly (were always UTF-8) if they were non-ASCII
  • there was an invalid out of memory error with strings
  • invalid extra character at end of line message fixed in a special case
  • labels were deleted when still needed (crash in special cases)
  • caret was at wrong position of anonymous labels
  • .ptext was not working properly (wrong length)
  • compilation finished in some special cases too early
  • some error objects leaked to unexpected places causing crash
  • .var was not referencing in some complicated cases
  • value reuse crash (bug #21 and #22)
  • numbers should be non-locale dependent (wrong floating point printing)... read more
Posted by Soci/Singular 2014-10-13

64tass 1.51.727

The r716 version didn't last long ;( There was a regression which caused to miscompile the "pea #" opcode, so here's the fix.

The bug was noticed after the .cpu change removed the warning, so I'd like to note again that the .cpu directive now has a string argument and therefore old sources may need to add quotes because of this.

The good news is that this version includes the Unicode identifier support, which was planned for a long time. It's based a version 6.3.0 and features:... read more

Posted by Soci/Singular 2014-06-08

64tass 1.51.716

Lot's of internal changes. The most notable addition was the caret diagnostic error messages. The displayed source line is macro expanded of course, to ease debugging.

Changes:

  • fixed unaligned accesses (ARM crash)
  • nested parentheses bug in compatible mode
  • .pron/.proff nestable now
  • some special cases are solved in less passes
  • use locale for non-ascii character messages
  • caret diagnostic error messages (macro expanded)
  • fix some error message positions
  • improve instruction address mode error messages
  • jmp is non-data bank also on non-65816
  • long branch versions of bbr/bbs (R65C02)
  • cross bank long automatic jumps on 65816
  • improved listing file handling of long jumps
  • .cpu warning if name is not a quoted string... read more
Posted by Soci/Singular 2014-06-07

64tass 1.51.675

Bug fixes:

  • PEA # / REA # was missing for 65EL02

  • MVP/MVN #,# valid now (MVP/MVN $,$ still there for compatibility)

  • float() was broken

  • Some characters were broken in README and were shown as "?"

  • A few error messages lacked the severity marking

  • .include/binary used the wrong position for file errors

  • .if with forward references failed in some special cases

  • power operator (**) associativity was wrong... read more

Posted by Soci/Singular 2014-03-06

64tass 1.51.584

Bug fixes:

  • various bug fixes for crashes, leaks, etc.
  • notes are not incorrectly counted as errors any more
  • no 32 bit issues with code address calculation anymore, especially when going negative

Features:

  • Atari XEX output file format
  • .fill and .align can use iterable objects as fill byte, this can be used for simple patterns using lists/tuples
  • it's possible to specify the default value returned for non-existing elements in dictionaries to avoid errors
  • dictionaries can use externally defined key/value pairs. I'm not sure if this is interesting
  • object type is displayed in conversion error messages for better understanding of the problem
  • function context is more similar to it's invocation context now (e.g. address is matching now)
  • documentation improvements, section for addressing modes some indexes at the end
  • escape sequences in encodings can generate more than a single byte now
  • cheap local labels supported now between normal symbols (read the docs)
  • "starred" function parameter to collect extra parameters into tuple to have functions with unlimited parameters... read more
Posted by Soci/Singular 2014-01-19

64tass 1.51.521

Bug fixes:

  • listing could reference unused symbols, this caused a compile failure on code that otherwise compiles
  • bit string right shifting had a sign problem
  • bit string zero inversion didn't work
  • .xl and .al didn't work on 65el02
  • Long accu was applied for BRK, COP and MMU instructions incorrectly
  • some object conversions resulted in an infinite recursion and crash

Features:

  • code objects give access to symbols in situations where it was not possible before, e.g. when member of a list
  • undefined identifiers are only reported once per scope
  • address calculations are not limited to 32 bits any more. The code address space is still of course.
  • Accu and index register lengths (.al, .xl) are independent from current CPU, so 16 bit immediate values are available always
  • relative jumps are better guessed now (fewer passes in some special cases)
  • any(), all(), bool() functions
  • long lists and dictionaries can be split into several line, these lines are implicitly joined... read more
Posted by Soci/Singular 2013-11-30

64tass 1.51

The 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.

Unfortunately in 1.51.493 the branch range check was non-functional by a mistake ;( Next try for the release is 1.51.496 ;)

Some things to watch out for:

"%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.... read more

Posted by Soci/Singular 2013-08-27

.dsection not a block anymore

Sometime after r384 the ".dsection" directive will not start a section block anymore, but will be a single line directive similar to ".dunion" or ".dstruct".

It was a former bad design decision. The label of ".dsection" line is ambiguous, it can't be both the complete section and the section fragment at the same time. Think "size(x)" on a .dsection for example.

After the change there's no need for ".send" after using ".dsection" and data/code (if any) must be moved to a normal ".section/.send" block.... read more

Posted by Soci/Singular 2013-03-20
MongoDB Logo MongoDB