Post by hydrophilic on Jul 6, 2014 14:24:35 GMT
I have spent a pathetic amount of time searching (and searching, and searching...) for a good assembler/compiler. Preferably one that works in any version of Windows, but hell if it is good I'll use DOS or Linux. Sadly I still haven't found a "perfect" solution... (yeah, write one yourself, I know...) but here are some I have tried and which are adequate for most jobs...
64TASS; this one is really powerfull multi-pass assembler and has very standard syntax (supposibly compatible with TASS, but I haven't verified this). Supports many CPUs, multiple segments, variable scopes (with .block and .bend, or .proc and .pend), annonymous labels (+ and -), local lables, and powerful macro capability. This would be my recommendation if it allowed conditional assembly with forward references (but it does not)... it does allow conditional assembly (.if/.else and such) OR forward references, but not both (hence = fail). Also (very personal opinion) the directives are needelessly cumbersome.
ACME ( CA65 ? ); it is my understanding that ACME was originally the "backend" of a C compiler. It is also my understanding it is a traditional 2-pass assembler. Anyway, this one if pretty powerful with multiple segments, variable scopes (using ZONE), annonynous lables (+ and -), multiple CPUs (at least 6502 and 65816), and basic macros. Non-standard is use of ! for directives. (I haven't tired this one much because of the non-standard syntax and limitations of 2-pass assembler.)
KickAss; this is also a powerful multi-pass cross-compiler. It is written in Java so should run on almost any system. Has almost anything you might need, BUT the syntax is 90% incompatible with every other 6502 assembler... basically they just hacked a C compiler to produce 6502 code. If you prefer your 6502 code to look like C, then this is probably your ticket. Although that terribly annoys me, I could learn to live with it if allowed conditionally assembly + forward references... but it does not.
XA (XA65); moderately powerful multi-pass assembler; has 4 pre-defined segments, variable scopes (with easy .( and .) directives ), primitive macro capability. It does not have annonymous lables (+ and -) nor "auto locals", which I can forgive. Only supports 6502. I would recommend this for Commie owners, except for the limited macro capabilitis, and more important for me (C128 programmer) the author-imposed limit of 4 segments... would probably do for VIC-20/C64 but becomes a pain with more sophisticated systems like the CBM-II series, the C128, or maybe even Plus/4 (I'm not a Plus/4 guru, so who knows).
Okay, that is the short version! Trust me when I say I have tested many, many, assemblers... and they ALL suck (for my purposes). Those listed above are the few I thought worthy to be mentioned. So I just saved you about 329 hours. Please forward your gold to hydrophilic@usa.earth.solar.milkyway.minkowsky
64TASS; this one is really powerfull multi-pass assembler and has very standard syntax (supposibly compatible with TASS, but I haven't verified this). Supports many CPUs, multiple segments, variable scopes (with .block and .bend, or .proc and .pend), annonymous labels (+ and -), local lables, and powerful macro capability. This would be my recommendation if it allowed conditional assembly with forward references (but it does not)... it does allow conditional assembly (.if/.else and such) OR forward references, but not both (hence = fail). Also (very personal opinion) the directives are needelessly cumbersome.
ACME ( CA65 ? ); it is my understanding that ACME was originally the "backend" of a C compiler. It is also my understanding it is a traditional 2-pass assembler. Anyway, this one if pretty powerful with multiple segments, variable scopes (using ZONE), annonynous lables (+ and -), multiple CPUs (at least 6502 and 65816), and basic macros. Non-standard is use of ! for directives. (I haven't tired this one much because of the non-standard syntax and limitations of 2-pass assembler.)
KickAss; this is also a powerful multi-pass cross-compiler. It is written in Java so should run on almost any system. Has almost anything you might need, BUT the syntax is 90% incompatible with every other 6502 assembler... basically they just hacked a C compiler to produce 6502 code. If you prefer your 6502 code to look like C, then this is probably your ticket. Although that terribly annoys me, I could learn to live with it if allowed conditionally assembly + forward references... but it does not.
XA (XA65); moderately powerful multi-pass assembler; has 4 pre-defined segments, variable scopes (with easy .( and .) directives ), primitive macro capability. It does not have annonymous lables (+ and -) nor "auto locals", which I can forgive. Only supports 6502. I would recommend this for Commie owners, except for the limited macro capabilitis, and more important for me (C128 programmer) the author-imposed limit of 4 segments... would probably do for VIC-20/C64 but becomes a pain with more sophisticated systems like the CBM-II series, the C128, or maybe even Plus/4 (I'm not a Plus/4 guru, so who knows).
Okay, that is the short version! Trust me when I say I have tested many, many, assemblers... and they ALL suck (for my purposes). Those listed above are the few I thought worthy to be mentioned. So I just saved you about 329 hours. Please forward your gold to hydrophilic@usa.earth.solar.milkyway.minkowsky