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
|
@ -1,4 +1,15 @@
|
||||||
CONTIKI_SOURCEFILES += log-asm.S pfs.S
|
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
|
CONTIKI_CPU = $(CONTIKI)/cpu/6502
|
||||||
include $(CONTIKI_CPU)/Makefile.6502
|
include $(CONTIKI_CPU)/Makefile.6502
|
||||||
|
|
|
@ -4,42 +4,47 @@
|
||||||
# The applications coming with Contiki run even with a $100 byte stack.
|
# The applications coming with Contiki run even with a $100 byte stack.
|
||||||
# - Expanded RAM size: Allow applications to overlay BASIC.SYSTEM if needed.
|
# - 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
|
# 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 {
|
FEATURES {
|
||||||
STARTADDRESS: default = $0800;
|
STARTADDRESS: default = $0803;
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: start = $0080, size = $001A, define = yes;
|
ZP: start = $0080, size = $001A, define = yes;
|
||||||
HEADER: start = $0000, size = $0004, file = %O;
|
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 {
|
SEGMENTS {
|
||||||
EXEHDR: load = HEADER, type = ro;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
STARTUP: load = RAM, type = ro, define = yes;
|
EXEHDR: load = HEADER, type = ro;
|
||||||
LOWCODE: load = RAM, type = ro, optional = yes;
|
STARTUP: load = RAM, type = ro;
|
||||||
INIT: load = RAM, type = ro, define = yes, optional = yes;
|
LOWCODE: load = RAM, type = ro;
|
||||||
CODE: load = RAM, type = ro;
|
CODE: load = RAM, type = ro;
|
||||||
RODATA: load = RAM, type = ro;
|
RODATA: load = RAM, type = ro;
|
||||||
DATA: load = RAM, type = rw;
|
DATA: load = RAM, type = rw;
|
||||||
BSS: load = RAM, type = bss, define = yes;
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
HEAP: load = RAM, type = bss, optional = yes; # must sit just below stack
|
INIT: load = MOVE, run = RAM, type = ro, define = yes;
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
HIGHCODE: load = MOVE, run = LC, type = ro, optional = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: segment = INIT,
|
CONDES: segment = INIT,
|
||||||
type = constructor,
|
type = constructor,
|
||||||
label = __CONSTRUCTOR_TABLE__,
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
count = __CONSTRUCTOR_COUNT__;
|
count = __CONSTRUCTOR_COUNT__;
|
||||||
CONDES: segment = RODATA,
|
CONDES: segment = RODATA,
|
||||||
type = destructor,
|
type = destructor,
|
||||||
label = __DESTRUCTOR_TABLE__,
|
label = __DESTRUCTOR_TABLE__,
|
||||||
count = __DESTRUCTOR_COUNT__;
|
count = __DESTRUCTOR_COUNT__;
|
||||||
CONDES: type = interruptor,
|
CONDES: type = interruptor,
|
||||||
segment = RODATA,
|
segment = RODATA,
|
||||||
label = __INTERRUPTOR_TABLE__,
|
label = __INTERRUPTOR_TABLE__,
|
||||||
count = __INTERRUPTOR_COUNT__;
|
count = __INTERRUPTOR_COUNT__;
|
||||||
}
|
}
|
||||||
SYMBOLS {
|
SYMBOLS {
|
||||||
__STACKSIZE__ = $200; # 1/2K instead of 2K stack
|
__STACKSIZE__ = $0200; # 1/2K instead of 2K stack
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue