Starting with the cc65-snapshot-2.11.9.20080316 the Apple2 C-library supports placing code in the Apple2 Language Card by choosing the code segment 'HIGHCODE'. By default the memory area 0xD400 - 0xE000 is used for HIGHCODE. If the application doesn't need the ProDOS 8 QUIT code then the memory area used for HIGHCODE may be extended to 0xD000 - 0xE000.
Contiki now leverages that feature to place process.o, etimer.o and uip_arp.o in HIGHCODE. These files were carefully chosen as: - they are necessary for all Ethernet apps - their size doesn't depend on configuration macros - they fill the available space nicely (with a little reserve for changes in the source or the compiler)
This commit is contained in:
parent
5901bf977a
commit
85edbc01db
2 changed files with 40 additions and 24 deletions
|
@ -1,4 +1,15 @@
|
|||
CONTIKI_SOURCEFILES += log-asm.S pfs.S
|
||||
|
||||
HIGHCODE_SOURCEFILES = process.c etimer.c uip_arp.c
|
||||
|
||||
define highcode_template
|
||||
$(OBJECTDIR)/$(1:.c=.o): $(1)
|
||||
$$(CC) --code-name HIGHCODE $$(CFLAGS) --create-dep $$< -o $$(@:.o=.s)
|
||||
@$$(AS) $$(ASFLAGS) $$(@:.o=.s) -o $$@
|
||||
@sed 's!.s:!.o:!' < $$(@:.o=.u) > $$(@:.o=.d)
|
||||
@rm -f $$(@:.o=.s) $$(@:.o=.u)
|
||||
endef
|
||||
${foreach OBJECT,$(HIGHCODE_SOURCEFILES),${eval ${call highcode_template,$(OBJECT)}}}
|
||||
|
||||
CONTIKI_CPU = $(CONTIKI)/cpu/6502
|
||||
include $(CONTIKI_CPU)/Makefile.6502
|
||||
|
|
|
@ -4,42 +4,47 @@
|
|||
# The applications coming with Contiki run even with a $100 byte stack.
|
||||
# - Expanded RAM size: Allow applications to overlay BASIC.SYSTEM if needed.
|
||||
# In that case the binary must be loaded with the ProDOS 8 loader available
|
||||
# at: ftp://ftp.musoftware.de/pub/uz/cc65/contrib/loader-1.2.zip
|
||||
# at: ftp://ftp.musoftware.de/pub/uz/cc65/contrib/loader-1.3.zip
|
||||
# - Expanded LC size: Allow applications to overlay the ProDOS 8 QUIT code.
|
||||
# In that case the binary must reboot on exit. There's a ProDOS 8 loader
|
||||
# variant available at the URL above that does just this.
|
||||
|
||||
FEATURES {
|
||||
STARTADDRESS: default = $0800;
|
||||
STARTADDRESS: default = $0803;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: start = $0080, size = $001A, define = yes;
|
||||
ZP: start = $0080, size = $001A, define = yes;
|
||||
HEADER: start = $0000, size = $0004, file = %O;
|
||||
RAM: start = %S, size = $BF00 - %S, file = %O; # $BF00 instead of $9600
|
||||
RAM: start = %S, size = $BF00 - %S, file = %O, define = yes; # $BF00 instead of $9600
|
||||
MOVE: start = $0000, size = $FFFF, file = %O, define = yes;
|
||||
LC: start = $D000, size = $1000, define = yes; # $D000/$1000 instead of $D400/$0C00
|
||||
}
|
||||
SEGMENTS {
|
||||
EXEHDR: load = HEADER, type = ro;
|
||||
STARTUP: load = RAM, type = ro, define = yes;
|
||||
LOWCODE: load = RAM, type = ro, optional = yes;
|
||||
INIT: load = RAM, type = ro, define = yes, optional = yes;
|
||||
CODE: load = RAM, type = ro;
|
||||
RODATA: load = RAM, type = ro;
|
||||
DATA: load = RAM, type = rw;
|
||||
BSS: load = RAM, type = bss, define = yes;
|
||||
HEAP: load = RAM, type = bss, optional = yes; # must sit just below stack
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
EXEHDR: load = HEADER, type = ro;
|
||||
STARTUP: load = RAM, type = ro;
|
||||
LOWCODE: load = RAM, type = ro;
|
||||
CODE: load = RAM, type = ro;
|
||||
RODATA: load = RAM, type = ro;
|
||||
DATA: load = RAM, type = rw;
|
||||
BSS: load = RAM, type = bss, define = yes;
|
||||
INIT: load = MOVE, run = RAM, type = ro, define = yes;
|
||||
HIGHCODE: load = MOVE, run = LC, type = ro, optional = yes;
|
||||
}
|
||||
FEATURES {
|
||||
CONDES: segment = INIT,
|
||||
type = constructor,
|
||||
label = __CONSTRUCTOR_TABLE__,
|
||||
count = __CONSTRUCTOR_COUNT__;
|
||||
type = constructor,
|
||||
label = __CONSTRUCTOR_TABLE__,
|
||||
count = __CONSTRUCTOR_COUNT__;
|
||||
CONDES: segment = RODATA,
|
||||
type = destructor,
|
||||
label = __DESTRUCTOR_TABLE__,
|
||||
count = __DESTRUCTOR_COUNT__;
|
||||
type = destructor,
|
||||
label = __DESTRUCTOR_TABLE__,
|
||||
count = __DESTRUCTOR_COUNT__;
|
||||
CONDES: type = interruptor,
|
||||
segment = RODATA,
|
||||
label = __INTERRUPTOR_TABLE__,
|
||||
count = __INTERRUPTOR_COUNT__;
|
||||
segment = RODATA,
|
||||
label = __INTERRUPTOR_TABLE__,
|
||||
count = __INTERRUPTOR_COUNT__;
|
||||
}
|
||||
SYMBOLS {
|
||||
__STACKSIZE__ = $200; # 1/2K instead of 2K stack
|
||||
__STACKSIZE__ = $0200; # 1/2K instead of 2K stack
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue