the newer PET machines (not 2001), Atari 8bit, and the Apple ][ (thanks to
Kevin Ruland, who did the port).
+C16: Works with unexpanded or memory expanded C16 and C116 machines.
+ However, a maximum of 32KB from the total memory is used. The Plus/4
+ target supports up to 64K of memory, but has a small code overhead
+ because of the banking routines involved. Apart from this additional
+ overhead, the Plus/4 target and the C16 target are the same. 16K
+ machines (unexpanded C16) have 12K of memory for C programs available,
+ machines with 32K or more have 28K available. The actual amount of
+ memory is auto detected.
+
C64: The program runs in a memory configuration, where only the kernal ROM
is enabled. The text screen is expected at the usual place ($400), so
50K of memory are available to the program.
free memory is reduced to 12K).
CBM 500:
- The C program runs in bank #0 and has a total of 48K memory available.
- This is less than what is available on its bigger brothers (CBM
+ The C program runs in bank #0 and has a total of 48K memory available.
+ This is less than what is available on its bigger brothers (CBM
600/700) because the character data and video RAM is placed in the
execution bank (#0) to allow the use of sprites.
Example, insert a break instruction into the code:
- asm ("\t.byte\t$00")
-
-Note: The \t in the string is replaced by the tab character, as in all other
-strings.
+ asm ("brk")
Beware: Be careful when inserting inline code since this may collide with
the work of the optimizer.
This feature is useful with inline assembly and macros. For example, a macro
that reads a CRTC register may be written like this:
-#define wr(idx) (__AX__=(idx), \
- asm("\tsta\t$2000\n\tlda\t$2000\n\tldx\t#$00"), \
+#define wr(idx) (__AX__=(idx), \
+ asm ("sta $2000"), \
+ asm ("lda $2000"), \
+ asm ("ldx #$00"), \
__AX__)
<itemize>
<item>none
+ <item>apple2
<item>atari
+ <item>atmos
+ <item>c16 (works also for the c116 with memory up to 32K)
<item>c64
<item>c128
<item>plus4
<item>cbm510 (CBM-II series with 40 column video)
<item>cbm610 (all CBM series-II computers with 80 column video)
<item>pet (all CBM PET systems except the 2001)
- <item>apple2
<item>geos
</itemize>
}
</verb></tscreen>
+<tag><tt>atmos</tt></tag>
+<tscreen><verb>
+ MEMORY {
+ ZP: start = $02, size = $1A, type = rw, define = yes;
+ RAM: start = $0600, size = $9200, define = yes, file = %O;
+ }
+ SEGMENTS {
+ CODE: load = RAM, type = wprot;
+ RODATA: load = RAM, type = wprot;
+ DATA: load = RAM, type = rw;
+ BSS: load = RAM, type = bss, define = yes;
+ ZEROPAGE: load = ZP, type = zp;
+ }
+ FEATURES {
+ CONDES: segment = RODATA,
+ type = constructor,
+ label = __CONSTRUCTOR_TABLE__,
+ count = __CONSTRUCTOR_COUNT__;
+ CONDES: segment = RODATA,
+ type = destructor,
+ label = __DESTRUCTOR_TABLE__,
+ count = __DESTRUCTOR_COUNT__;
+ }
+ SYMBOLS {
+ __STACKSIZE__ = $800; # 2K stack
+ }
+</verb></tscreen>
+
+<tag><tt>c16</tt></tag>
+<tscreen><verb>
+ MEMORY {
+ ZP: start = $02, size = $1A, type = rw;
+ RAM: start = $0fff, size = $7001, file = %O;
+ }
+ SEGMENTS {
+ CODE: load = RAM, type = wprot;
+ RODATA: load = RAM, type = wprot;
+ DATA: load = RAM, type = rw;
+ BSS: load = RAM, type = bss, define = yes;
+ ZEROPAGE: load = ZP, type = zp;
+ }
+ FEATURES {
+ CONDES: segment = RODATA,
+ type = constructor,
+ label = __CONSTRUCTOR_TABLE__,
+ count = __CONSTRUCTOR_COUNT__;
+ CONDES: segment = RODATA,
+ type = destructor,
+ label = __DESTRUCTOR_TABLE__,
+ count = __DESTRUCTOR_COUNT__;
+ }
+ SYMBOLS {
+ __STACKSIZE__ = $800; # 2K stack
+ }
+</verb></tscreen>
+
<tag><tt>c64</tt></tag>
<tscreen><verb>
MEMORY {
CONDES: segment = RODATA,
type = constructor,
label = __CONSTRUCTOR_TABLE__,
- count = __CONSTRUCTOR_COUNT__;
+ count = __CONSTRUCTOR_COUNT__;
CONDES: segment = RODATA,
type = destructor,
label = __DESTRUCTOR_TABLE__,
FEATURES {
CONDES: segment = RODATA,
type = constructor,
- label = __CONSTRUCTOR_TABLE__,
+ label = __CONSTRUCTOR_TABLE__,
count = __CONSTRUCTOR_COUNT__;
CONDES: segment = RODATA,
type = destructor,