Sometimes it is necessary to port code written for older assemblers to ca65.
In some cases, this can be done without any changes to the source code by
using the emulation features of ca65 (see
.FEATURE). In other cases, it is necessary to make changes to the
Probably the biggest difference is the handling of the
.ORG directive. ca65 generates relocatable code, and placement is
done by the linker. Most other assemblers generate absolute code, placement is
done within the assembler and there is no external linker.
In general it is not a good idea to write new code using the emulation features of the assembler, but there may be situations where even this rule is not valid.
You need to use some of the ca65 emulation features to simulate the behaviour of such simple assemblers.
notice that the two emulation features are mostly useful for porting sources originally written in/for TASS, they are not needed for the actual "simple assembler operation" and are not recommended if you are writing new code from scratch.
; if you want TASS style labels without colons .feature labels_without_colons ; if you want TASS style character constants ; ("a" instead of the default 'a') .feature loose_char_term .word *+2 ; the cbm load address [yourcode here]
Please note that other than the original TASS, ca65 can never move the program counter backwards - think of it as if you are assembling to disk with TASS.
; *=$2000 .res $2000-* ; reserve memory up to $2000
.gotoetc.) must be rewritten to match ca65 syntax. Most importantly notice that due to the lack of
.goto, everything involving loops must be replaced by
.ORGdirective instead of
.org $1800 [floppy code here] .reloc ; back to normal
Note that you need to use the actual start address minus two, since two bytes are used for the cbm load address.
cl65 --start-addr 0x0ffe -t none myprog.s -o myprog.prg