| |
Angel of Death
Registered: Apr 2008 Posts: 211 |
Converting 64Tass 1.45 sources to 1.xx
Hello,
Just me being a lazy person I want to start using a newer version of 64tass as I'm still using 1.45.
However, it turns out that none of my macros are working anymore.
For example this one suddenly gives a "constant too large" error:
basicstart .macro
*= $0801
.word nd,2015
.byte 0,^2015
.null $9e,^\1
nd .word 0
basicend
.endm
And with all the other ones I get all sorts of "...not defined" errors.
I tried using a version as old as 1.46 with no result and I can't find anything in the documentation, so far, that says something regarding that functionality has changed.
What am I not seeing here? |
|
| |
iAN CooG
Registered: May 2002 Posts: 3193 |
.byte 0,^2015
seems useless here and also the message is clear, you're trying to define ^2015 as a byte while it's text. just remove it
basicstart .macro
*= $0801
.word nd,2015
.null $9e,^\1
nd .word 0
basicend
.endm
basicstart start
*=$80d
start
inc $d020
rts
dox at http://tass64.sourceforge.net/ (even linked in the csdb entry) |
| |
Angel of Death
Registered: Apr 2008 Posts: 211 |
It's an old trick to hide the "sys" command and I solved that one in the meantime as it was indeed a bit of bad coding and probably worked by accident.
But that still left me with the other thing of the "...not defined" errors.
And while writing this I got a hunch and found where the problem lies. Browsing through the binaries in Sourceforge it turned out that somewhere between 1.46r38 and 1.46r191 the .macro directive was changed to NOT except outside access of labels anymore and the .segment directive was added to accomodate.
Since it was not in the release notes but only in the manual entry for the .macro directive it took a while to find it.
But thanks a lot for your quick, if unhelpful, answer anyway. |
| |
soci
Registered: Sep 2003 Posts: 480 |
Yes, scoping of .macro was fixed in r86, from there on the .segment directive is equivalent to the old behaviour. This change fixed a long mismatch to C64 TASM.
As for .byte vs. .text, only the second accepts strings in newer versions. This is to enforce the intended range checking of .byte the same way as .word and others.
Traditionally the two directives were equivalent (and still are in some other assemblers), but this was not the case on C64 TASM either.
Another thing which might trip you is that the arguments of .binary, .include and .cpu need to be quoted for a while now (was optional before). This was changed to allow variables as arguments.
That's what I remember now, there might be other "minor" differences.
There was a period after 1.46 where I thought commit messages are enough (no, they're usually not). So mentioning that .macro change fell through the cracks.
But for many years now I picked up the habit of creating news entries about what might break, was fixed or added. (https://sourceforge.net/p/tass64/news/) |
| |
Angel of Death
Registered: Apr 2008 Posts: 211 |
Thanks for the answer Soci.
It turned out I kinda exploited the quirks of the old version much more than I thought.
It gave me a huge compatibility problem which I am fixing as we speak. :) |