![kueller](/assets/img/avatar_default.png)
git-svn-id: svn://svn.compuextreme.de/Viitor/V961/Viitor_cc65@4236 504e572c-2e33-0410-9681-be2bf7408885
123 lines
3.7 KiB
HTML
123 lines
3.7 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.20">
|
|
<TITLE>ca65 Users Guide: Porting sources from other assemblers</TITLE>
|
|
<LINK HREF="ca65-17.html" REL=next>
|
|
<LINK HREF="ca65-15.html" REL=previous>
|
|
<LINK HREF="ca65.html#toc16" REL=contents>
|
|
</HEAD>
|
|
<BODY>
|
|
<A HREF="ca65-17.html">Next</A>
|
|
<A HREF="ca65-15.html">Previous</A>
|
|
<A HREF="ca65.html#toc16">Contents</A>
|
|
<HR>
|
|
<H2><A NAME="s16">16.</A> <A HREF="ca65.html#toc16">Porting sources from other assemblers</A></H2>
|
|
|
|
|
|
<P>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 <CODE>
|
|
<A HREF="ca65-10.html#.FEATURE">.FEATURE</A></CODE>). In other cases, it is necessary to make changes to the
|
|
source code.</P>
|
|
<P>Probably the biggest difference is the handling of the <CODE>
|
|
<A HREF="ca65-10.html#.ORG">.ORG</A></CODE> 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.</P>
|
|
<P>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.</P>
|
|
|
|
<H2><A NAME="ss16.1">16.1</A> <A HREF="ca65.html#toc16.1">TASS</A>
|
|
</H2>
|
|
|
|
|
|
<P>You need to use some of the ca65 emulation features to simulate the behaviour
|
|
of such simple assemblers.</P>
|
|
<P>
|
|
<OL>
|
|
<LI>Prepare your sourcecode like this:
|
|
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
; 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]
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
|
|
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.
|
|
</LI>
|
|
<LI>Replace all program counter assignments (which are not possible in ca65
|
|
by default, and the respective emulation feature works different from what
|
|
you'd expect) by another way to skip to memory locations, for example the
|
|
<CODE>
|
|
<A HREF="ca65-10.html#.RES">.RES</A></CODE> directive.
|
|
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
; *=$2000
|
|
.res $2000-* ; reserve memory up to $2000
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
|
|
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.
|
|
</LI>
|
|
<LI>Conditional assembly (<CODE>.ifeq</CODE>/<CODE>.endif</CODE>/<CODE>.goto</CODE> etc.) must be
|
|
rewritten to match ca65 syntax. Most importantly notice that due to the lack
|
|
of <CODE>.goto</CODE>, everything involving loops must be replaced by
|
|
<CODE>
|
|
<A HREF="ca65-10.html#.REPEAT">.REPEAT</A></CODE>.
|
|
</LI>
|
|
<LI>To assemble code to a different address than it is executed at, use the
|
|
<CODE>
|
|
<A HREF="ca65-10.html#.ORG">.ORG</A></CODE> directive instead of
|
|
<CODE>.offs</CODE>-constructs.
|
|
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
.org $1800
|
|
|
|
[floppy code here]
|
|
|
|
.reloc ; back to normal
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
</LI>
|
|
<LI>Then assemble like this:
|
|
|
|
<BLOCKQUOTE><CODE>
|
|
<PRE>
|
|
cl65 --start-addr 0x0ffe -t none myprog.s -o myprog.prg
|
|
</PRE>
|
|
</CODE></BLOCKQUOTE>
|
|
|
|
|
|
Note that you need to use the actual start address minus two, since two bytes
|
|
are used for the cbm load address.
|
|
</LI>
|
|
</OL>
|
|
</P>
|
|
|
|
|
|
<HR>
|
|
<A HREF="ca65-17.html">Next</A>
|
|
<A HREF="ca65-15.html">Previous</A>
|
|
<A HREF="ca65.html#toc16">Contents</A>
|
|
</BODY>
|
|
</HTML>
|