・コメントアウトしていたSystemMenu関係のLIMITEDビルドを全て有効に戻す。

・SystemMenu用コンポーネントhyena.TWLを追加。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@112 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2007-11-08 02:04:16 +00:00
parent 8039e160f7
commit 502fd6c741
15 changed files with 1511 additions and 9 deletions

View File

@ -26,6 +26,7 @@ SUBDIRS = \
libraries \
nandfirm \
nand_formatter \
components \
libraries_sysmenu\
systemmenu_RED

32
build/components/Makefile Normal file
View File

@ -0,0 +1,32 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlFirm - build
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Date:: $
# $Rev:$
# $Author:$
#----------------------------------------------------------------------------
include $(TWLIPL_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = \
hyena.TWL
#----------------------------------------------------------------------------
include $(TWLIPL_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,66 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - components - hyena.TWL
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Date:: 2007-10-09#$
# $Rev: 1499 $
# $Author: hatamoto_minoru $
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
override TARGET_PLATFORM = TWL
override TWL_PROC = ARM7
override TWL_ARCHGEN = LIMITED
TWL_NO_STD_PCHDR = True
TWL_CODEGEN ?= ARM
#----------------------------------------------------------------------------
SRCS = main.c
TARGET_NAME = hyena
TARGET_NEF = $(TARGET_NAME).tef
LCFILE_SPEC = $(TARGET_NAME).lsf
LCFILE_TEMPLATE = $(TARGET_NAME).lcf.template
LDRES_TEMPLATE = $(TWLSDK_ROOT)/build/components/racoon.TWL/racoon.response.template
CRT0_O = crt0.LTD.TWL.o
#----------------------------------------------------------------------------
include $(TWLIPL_ROOT)/build/buildtools/commondefs
#MACRO_FLAGS += -DSDK_ARM7COMP_LTD
MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -DCRT0_O='$(CRT0_O)'
MAKELCF_FLAGS += -DISTD_LIBS='$(ISTD_LIBS)'
#--------------------------------
# install target
#--------------------------------
INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \
$(BINDIR)/$(TARGET_NAME).FLX.TWL.sbin \
$(BINDIR)/$(TARGET_NAME)_defs.FLX.TWL.sbin \
$(BINDIR)/$(TARGET_NAME).LTD.TWL.sbin \
$(BINDIR)/$(TARGET_NAME)_defs.LTD.TWL.sbin
INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE)
LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include
LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES)
do-build: $(TARGETS)
#----------------------------------------------------------------------------
include $(TWLIPL_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,925 @@
#---------------------------------------------------------------------------
# Project: TwlSDK - components - racoon.TWL
# File: racoon.lcf.template
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Date:: $
# $Rev$
# $Author$
#---------------------------------------------------------------------------
MEMORY
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.FLXSUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYDEFS>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYTABLE>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.FLXSUFFIX>
<END.OVERLAYS>
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x50000 > workram.check
binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.LTDSUFFIX>
<FOREACH.LTDAUTOLOADS>
<LTDAUTOLOAD.NAME> (RWX) : ORIGIN = <LTDAUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<END.LTDAUTOLOADS>
binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYDEFS>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYTABLE>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>
<FOREACH.LTDOVERLAYS>
<LTDOVERLAY.NAME> (RWXO): ORIGIN = <LTDOVERLAY.ADDRESS>, LENGTH = 0x0 > <LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>
<END.LTDOVERLAYS>
check.LTDMAIN (RWX) : ORIGIN = 0x02280000, LENGTH = 0x74000 > ltdmain.check
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sinit>
<STATIC.OBJECT=.sinit:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sinit>
<STATIC.LIBRARY=.sinit:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
. = ALIGN(4);
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
#:::::::::: data
SDK_STATIC_DATA_END =.;
. = ALIGN(4);
SDK_STATIC_END =.;
SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START;
SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START;
SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START;
__sinit__ = SDK_STATIC_SINIT_START; # for static initializer
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
#:::::::::: bss
. = ALIGN(4);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.WRAM.START = 0x037c0000;
SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.SIZE = 0;
SDK_AUTOLOAD.WRAM.BSS_SIZE = 0;
SDK_AUTOLOAD_START = SDK_STATIC_END;
SDK_AUTOLOAD_SIZE = 0;
SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>;
<FOREACH.AUTOLOADS>
.<AUTOLOAD.NAME>:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
#
# TEXT BLOCK: READ ONLY
#
SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.AUTOLOAD.OBJECTS=.text>
<AUTOLOAD.OBJECT=.text:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.text>
<AUTOLOAD.LIBRARY=.text:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.etable>
<AUTOLOAD.OBJECT=.exception:t>
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
__exception_table_start__ =.;
EXCEPTION
__exception_table_end__ =.;
SDK_STATIC_ETABLE_END =.;
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.init>
<AUTOLOAD.OBJECT=.init:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.init>
<AUTOLOAD.LIBRARY=.init:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.AUTOLOAD.OBJECTS=.ctor>
<AUTOLOAD.OBJECT=.ctor:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.ctor>
<AUTOLOAD.LIBRARY=.ctor:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.sinit>
<AUTOLOAD.OBJECT=.sinit:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sinit>
<AUTOLOAD.LIBRARY=.sinit:t>
<END.AUTOLOAD.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_END =.;
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
. = ALIGN(4);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.wram>
<AUTOLOAD.OBJECT=.wram:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.wram>
<AUTOLOAD.LIBRARY=.wram:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.ltdwram>
<AUTOLOAD.OBJECT=.ltdwram:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.ltdwram>
<AUTOLOAD.LIBRARY=.ltdwram:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
#:::::::::: data
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
. = ALIGN(4);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
} > <AUTOLOAD.NAME>
.<AUTOLOAD.NAME>.bss:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.wram>
<AUTOLOAD.OBJECT=.wram.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.wram>
<AUTOLOAD.LIBRARY=.wram.bss:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.ltdwram>
<AUTOLOAD.OBJECT=.ltdwram.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.ltdwram>
<AUTOLOAD.LIBRARY=.ltdwram.bss:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
#:::::::::: bss
. = ALIGN(4);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
} >> <AUTOLOAD.NAME>
<END.AUTOLOADS>
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
SDK_AUTOLOAD_WRAM_BSS_END = SDK_AUTOLOAD.WRAM.BSS_END;
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO:
{
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_START;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
} > binary.AUTOLOAD_INFO
SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
############################ STATIC_FOOTER ##########################
.binary.STATIC_FOOTER:
{
WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE
WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST
WRITEW _start_LtdModuleParams - ADDR(.<STATIC.NAME>);
} > binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<OVERLAY.NAME>
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
#
# TEXT BLOCK: READ ONLY
#
SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID
SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>;
SDK_OVERLAY.<OVERLAY.NAME>.START =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.OVERLAY.OBJECTS=.text>
<OVERLAY.OBJECT=.text:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.text>
<OVERLAY.LIBRARY=.text:t>
<END.OVERLAY.LIBRARIES>
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
<FOREACH.OVERLAY.OBJECTS=.init>
<OVERLAY.OBJECT=.init:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.init>
<OVERLAY.LIBRARY=.init:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.OVERLAY.OBJECTS=.ctor>
<OVERLAY.OBJECT=.ctor:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.ctor>
<OVERLAY.LIBRARY=.ctor:t>
<END.OVERLAY.LIBRARIES>
<FOREACH.OVERLAY.OBJECTS=.sinit>
<OVERLAY.OBJECT=.sinit:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sinit>
<OVERLAY.LIBRARY=.sinit:t>
<END.OVERLAY.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.OVERLAY.OBJECTS=.sdata>
<OVERLAY.OBJECT=.sdata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sdata>
<OVERLAY.LIBRARY=.sdata:t>
<END.OVERLAY.LIBRARIES>
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
#:::::::::: data
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.END =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START;
} > <OVERLAY.NAME>
.<OVERLAY.NAME>.bss:<OVERLAY.NAME>
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.OVERLAY.OBJECTS=.bss>
<OVERLAY.OBJECT=.bss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.bss>
<OVERLAY.LIBRARY=.bss:t>
<END.OVERLAY.LIBRARIES>
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
#:::::::::: bss
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .;
SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
} >> <OVERLAY.NAME>
<END.OVERLAYS>
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(4);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>F:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.FLXSUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>F
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>F:
{
<FOREACH.OVERLAYS>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>F
############################ OTHERS #################################
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD.WRAM.BSS_END;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.WORKRAM:
{
. = . + SDK_AUTOLOAD.WRAM.BSS_END - SDK_AUTOLOAD.WRAM.START + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.WORKRAM
########################### LTDAUTOLOADS ############################
SDK_LTDAUTOLOAD.LTDMAIN.START = SDK_STATIC_BSS_END;
SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD.LTDMAIN.BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0;
SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0;
SDK_LTDAUTOLOAD_TOP_START = 0x02e80000;
SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC 領域が無い代わりに 4 bytes のダミーがバイナリファイルの先頭に入る #
SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE;
SDK_LTDAUTOLOAD_SIZE = 0;
SDK_LTDAUTOLOAD_NUMBER = <NUMBER.LTDAUTOLOADS>;
.binary.LTDAUTOLOAD_TOP:
{
WRITEW 0;
} > binary.LTDAUTOLOAD_TOP
<FOREACH.LTDAUTOLOADS>
.<LTDAUTOLOAD.NAME>:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.LTDAUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <LTDAUTOLOAD.SEARCHSYMBOL>;
<END.LTDAUTOLOAD.SEARCHSYMBOLS>
SDK_LTDAUTOLOAD_<LTDAUTOLOAD.NAME>_ID =<LTDAUTOLOAD.ID>;
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.ID =<LTDAUTOLOAD.ID>;
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.START =.;
#
# TEXT BLOCK: READ ONLY
#
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.LTDAUTOLOAD.OBJECTS=.text>
<LTDAUTOLOAD.OBJECT=.text:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.text>
<LTDAUTOLOAD.LIBRARY=.text:t>
<END.LTDAUTOLOAD.LIBRARIES>
<FOREACH.LTDAUTOLOAD.OBJECTS=.rodata>
<LTDAUTOLOAD.OBJECT=.rodata:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.rodata>
<LTDAUTOLOAD.LIBRARY=.rodata:t>
<END.LTDAUTOLOAD.LIBRARIES>
<FOREACH.LTDAUTOLOAD.OBJECTS=.init>
<LTDAUTOLOAD.OBJECT=.init:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.init>
<LTDAUTOLOAD.LIBRARY=.init:t>
<END.LTDAUTOLOAD.LIBRARIES>
. = ALIGN(4);
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.LTDAUTOLOAD.OBJECTS=.ctor>
<LTDAUTOLOAD.OBJECT=.ctor:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.ctor>
<LTDAUTOLOAD.LIBRARY=.ctor:t>
<END.LTDAUTOLOAD.LIBRARIES>
<FOREACH.LTDAUTOLOAD.OBJECTS=.sinit>
<LTDAUTOLOAD.OBJECT=.sinit:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.sinit>
<LTDAUTOLOAD.LIBRARY=.sinit:t>
<END.LTDAUTOLOAD.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_END =.;
#:::::::::: text/rodata
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
. = ALIGN(4);
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.LTDAUTOLOAD.OBJECTS=.sdata>
<LTDAUTOLOAD.OBJECT=.sdata:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.sdata>
<LTDAUTOLOAD.LIBRARY=.sdata:t>
<END.LTDAUTOLOAD.LIBRARIES>
<FOREACH.LTDAUTOLOAD.OBJECTS=.data>
<LTDAUTOLOAD.OBJECT=.data:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.data>
<LTDAUTOLOAD.LIBRARY=.data:t>
<END.LTDAUTOLOAD.LIBRARIES>
<FOREACH.LTDAUTOLOAD.OBJECTS=.ltdmain>
<LTDAUTOLOAD.OBJECT=.ltdmain:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.ltdmain>
<LTDAUTOLOAD.LIBRARY=.ltdmain:t>
<END.LTDAUTOLOAD.LIBRARIES>
#:::::::::: data
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_END =.;
. = ALIGN(4);
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.END =.;
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_SIZE = SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_END - SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.TEXT_START;
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_SIZE = SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_END - SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.DATA_START;
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE = SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.END - SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.START;
SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE;
} > <LTDAUTOLOAD.NAME>
.<LTDAUTOLOAD.NAME>.bss:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.LTDAUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <LTDAUTOLOAD.SEARCHSYMBOL>;
<END.LTDAUTOLOAD.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_START =.;
#:::::::::: bss
<FOREACH.LTDAUTOLOAD.OBJECTS=.sbss>
<LTDAUTOLOAD.OBJECT=.sbss:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.sbss>
<LTDAUTOLOAD.LIBRARY=.sbss:t>
<END.LTDAUTOLOAD.LIBRARIES>
<FOREACH.LTDAUTOLOAD.OBJECTS=.bss>
<LTDAUTOLOAD.OBJECT=.bss:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.bss>
<LTDAUTOLOAD.LIBRARY=.bss:t>
<END.LTDAUTOLOAD.LIBRARIES>
<FOREACH.LTDAUTOLOAD.OBJECTS=.ltdmain>
<LTDAUTOLOAD.OBJECT=.ltdmain.bss:t>
<END.LTDAUTOLOAD.OBJECTS>
<FOREACH.LTDAUTOLOAD.LIBRARIES=.ltdmain>
<LTDAUTOLOAD.LIBRARY=.ltdmain.bss:t>
<END.LTDAUTOLOAD.LIBRARIES>
#:::::::::: bss
. = ALIGN(4);
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_END =.;
SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_SIZE = SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_END - SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_START;
} >> <LTDAUTOLOAD.NAME>
<END.LTDAUTOLOADS>
SDK_LTDAUTOLOAD_LTDMAIN_START = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD_LTDMAIN_END = SDK_LTDAUTOLOAD.LTDMAIN.END;
SDK_LTDAUTOLOAD_LTDMAIN_BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END;
SDK_LTDAUTOLOAD_LTDMAIN_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.SIZE;
SDK_LTDAUTOLOAD_LTDMAIN_BSS_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE;
######################### LTDAUTOLOAD_INFO ##########################
.binary.LTDAUTOLOAD_INFO:
{
<FOREACH.LTDAUTOLOADS>
WRITEW ADDR(.<LTDAUTOLOAD.NAME>);
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE;
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_START;
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_SIZE;
<END.LTDAUTOLOADS>
} > binary.LTDAUTOLOAD_INFO
SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE;
SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO);
SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO);
########################### LTDOVERLAYS #############################
SDK_LTDOVERLAY_NUMBER = <NUMBER.LTDOVERLAYS>;
<FOREACH.LTDOVERLAYS>
.<LTDOVERLAY.NAME>:<LTDOVERLAY.NAME>
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.LTDOVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <LTDOVERLAY.SEARCHSYMBOL>;
<END.LTDOVERLAY.SEARCHSYMBOLS>
SDK_LTDOVERLAY_<LTDOVERLAY.NAME>_ID =<LTDOVERLAY.ID>;
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.ID =<LTDOVERLAY.ID>;
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.START =.;
#
# TEXT BLOCK: READ ONLY
#
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.LTDOVERLAY.OBJECTS=.text>
<LTDOVERLAY.OBJECT=.text:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.text>
<LTDOVERLAY.LIBRARY=.text:t>
<END.LTDOVERLAY.LIBRARIES>
<FOREACH.LTDOVERLAY.OBJECTS=.rodata>
<LTDOVERLAY.OBJECT=.rodata:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.rodata>
<LTDOVERLAY.LIBRARY=.rodata:t>
<END.LTDOVERLAY.LIBRARIES>
<FOREACH.LTDOVERLAY.OBJECTS=.init>
<LTDOVERLAY.OBJECT=.init:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.init>
<LTDOVERLAY.LIBRARY=.init:t>
<END.LTDOVERLAY.LIBRARIES>
. = ALIGN(4);
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.LTDOVERLAY.OBJECTS=.ctor>
<LTDOVERLAY.OBJECT=.ctor:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.ctor>
<LTDOVERLAY.LIBRARY=.ctor:t>
<END.LTDOVERLAY.LIBRARIES>
<FOREACH.LTDOVERLAY.OBJECTS=.sinit>
<LTDOVERLAY.OBJECT=.sinit:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.sinit>
<LTDOVERLAY.LIBRARY=.sinit:t>
<END.LTDOVERLAY.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
. = ALIGN(4);
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.LTDOVERLAY.OBJECTS=.sdata>
<LTDOVERLAY.OBJECT=.sdata:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.sdata>
<LTDOVERLAY.LIBRARY=.sdata:t>
<END.LTDOVERLAY.LIBRARIES>
<FOREACH.LTDOVERLAY.OBJECTS=.data>
<LTDOVERLAY.OBJECT=.data:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.data>
<LTDOVERLAY.LIBRARY=.data:t>
<END.LTDOVERLAY.LIBRARIES>
#:::::::::: data
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_END =.;
. = ALIGN(4);
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.END =.;
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_SIZE = SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_END - SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.TEXT_START;
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_SIZE = SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_END - SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.DATA_START;
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SIZE = SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.END - SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.START;
} > <LTDOVERLAY.NAME>
.<LTDOVERLAY.NAME>.bss:<LTDOVERLAY.NAME>
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.LTDOVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <LTDOVERLAY.SEARCHSYMBOL>;
<END.LTDOVERLAY.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_START =.;
#:::::::::: bss
<FOREACH.LTDOVERLAY.OBJECTS=.bss>
<LTDOVERLAY.OBJECT=.bss:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.bss>
<LTDOVERLAY.LIBRARY=.bss:t>
<END.LTDOVERLAY.LIBRARIES>
<FOREACH.LTDOVERLAY.OBJECTS=.sbss>
<LTDOVERLAY.OBJECT=.sbss:t>
<END.LTDOVERLAY.OBJECTS>
<FOREACH.LTDOVERLAY.LIBRARIES=.sbss>
<LTDOVERLAY.LIBRARY=.sbss:t>
<END.LTDOVERLAY.LIBRARIES>
#:::::::::: bss
. = ALIGN(4);
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_END =.;
SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_SIZE = SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_END - SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_START;
} >> <LTDOVERLAY.NAME>
<END.LTDOVERLAYS>
########################## LTDOVERLAYDEFS ###########################
.<PROPERTY.LTDOVERLAYDEFS>L:
{
### TWL limited extended static module information
WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address
WRITEW 0; # padding
WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module
WRITEW 0; # padding
### TWL limited overlay filename
<FOREACH.LTDOVERLAYS>
WRITES ("<LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>");
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYDEFS>L
######################### LTDOVERLAYTABLE ###########################
.<PROPERTY.LTDOVERLAYTABLE>L:
{
<FOREACH.LTDOVERLAYS>
WRITES <LTDOVERLAY.ID> # overlay ID
WRITEW ADDR(.<LTDOVERLAY.NAME>); # load address
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <LTDOVERLAY.ID> # ROM file ID
WRITEW 0; # Reserved
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYTABLE>L
############################ OTHERS #################################
SDK_SUBPRIV_ARENA_LO = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END;
.check.LTDMAIN:
{
. = SDK_SUBPRIV_ARENA_LO;
} > check.LTDMAIN
}

View File

@ -0,0 +1,77 @@
#----------------------------------------------------------------------------
# Project: TwlSDK - components - racoon.TWL
# File: racoon.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Date:: $
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# Nitro LCF SPEC FILE
#
#--------
Static $(TARGET_NAME)
{
Address 0x02280000
Library $(CRT0_O)
StackSize 1024 1024
}
#--------
Autoload WRAM
{
Address $(ADDRESS_LTDWRAM)
Library libsubpsyscall.a \
libsyscall_sp.twl.a \
$(CW_LIBS) \
libos_sp.TWL$(CODEGEN).a \
libmi_sp.TWL$(CODEGEN).a \
libpad_sp.TWL$(CODEGEN).a \
libpxi_sp.TWL$(CODEGEN).a \
libstd_sp.TWL$(CODEGEN).a \
libexi_sp.TWL$(CODEGEN).a \
libsnd_sp.TWL$(CODEGEN).a \
libspi_sp.TWL$(CODEGEN).a \
libpm_sp.TWL$(CODEGEN).a \
libmath_sp.TWL$(CODEGEN).a \
libscfg_sp.TWL$(CODEGEN).a \
libtp_sp.TWL$(CODEGEN).a \
libfs_sp.TWL$(CODEGEN).a \
libcard_sp.TWL$(CODEGEN).a \
libi2c_sp.TWL$(CODEGEN).a \
libcamera_sp.TWL$(CODEGEN).a \
libcdc_sp.TWL$(CODEGEN).a \
libtpex_sp.TWL$(CODEGEN).a \
libnvram_sp.TWL$(CODEGEN).a \
librtc_sp.TWL$(CODEGEN).a \
libwvr_sp.TWL$(CODEGEN).a \
libaes_sp.TWL$(CODEGEN).a \
$(ISTD_LIBS)
Library libsdio_hcd_twl.TWL$(CODEGEN).a \
libsdio_busdriver.TWL$(CODEGEN).a \
libsdio_lib.TWL$(CODEGEN).a \
Object * (.etable)
Object * (.wram)
Object * (.ltdwram)
Object $(OBJDIR)/main.o
}
#--------
Ltdautoload LTDMAIN
{
After $(TARGET_NAME)
Object * (.ltdmain)
Library libfatfs_sp.TWL$(CODEGEN).a
}

View File

@ -0,0 +1,401 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - components - mongoose.TWL
File: main.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <nitro/types.h>
#include <twl/init/crt0.h>
#include <twl/memorymap_sp.h>
#include <twl/os.h>
#include <twl/spi.h>
#include <twl/fatfs.h>
#include <nitro/pad.h>
#include <nitro/std.h>
#include <nitro/snd.h>
#include <nitro/wvr.h>
#include <twl/nwm.h>
#include <twl/camera.h>
#include <twl/rtc.h>
#include <nitro/hw/common/lcd.h>
#include <nitro/gx.h>
#include <twl/os/ARM7/codecmode.h>
#include <twl/cdc.h>
#include <twl/aes.h>
#include "nvram_sp.h"
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
/* Priorities of each threads */
#define THREAD_PRIO_SPI 2
#define THREAD_PRIO_SND 6
#define THREAD_PRIO_FATFS 8
#define THREAD_PRIO_RTC 12
#define THREAD_PRIO_FS 15
/* OS_THREAD_LAUNCHER_PRIORITY 16 */
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
static void PrintDebugInfo(void);
static OSHeapHandle InitializeAllocateSystem(void);
static void InitializeFatfs(void);
static void InitializeCdc(void);
static void DummyThread(void* arg);
static void VBlankIntr(void);
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
#ifdef SDK_TWLHYB
extern void SDK_LTDAUTOLOAD_LTDWRAM_BSS_END(void);
extern void SDK_LTDAUTOLOAD_LTDMAIN_BSS_END(void);
#endif
/*---------------------------------------------------------------------------*
Name: TwlSpMain
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void
TwlSpMain(void)
{
OSHeapHandle heapHandle;
// OS 初期化
OS_Init();
PrintDebugInfo();
// ヒープ領域設定
heapHandle = InitializeAllocateSystem();
// ボタン入力サーチ初期化
(void)PAD_InitXYButton();
// 割り込み許可
(void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr);
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
(void)GX_VBlankIntr(TRUE);
(void)OS_EnableIrq();
(void)OS_EnableInterrupts();
// ファイルシステム初期化
FS_Init(FS_DMA_NOT_USE);
FS_CreateReadServerThread(THREAD_PRIO_FS);
if (OS_IsRunOnTwl() == TRUE)
{
InitializeFatfs(); // FATFS 初期化
AES_Init(); // AES 初期化
}
if (OS_IsCodecTwlMode() == TRUE)
{
// CODEC 初期化
InitializeCdc();
// カメラ初期化
CAMERA_Init();
/* CODEC が TWL モードでないとシャッター音を強制的に鳴らす
使CODEC TWL
使 */
}
// サウンド初期化
SND_Init(THREAD_PRIO_SND);
// RTC 初期化
RTC_Init(THREAD_PRIO_RTC);
// SPI 初期化
SPI_Init(THREAD_PRIO_SPI);
while (TRUE)
{
OS_Halt();
//---- check reset
if (OS_IsResetOccurred())
{
OS_ResetSystem();
}
}
}
/*---------------------------------------------------------------------------*
Name: PrintDebugInfo
Description: ARM7
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void
PrintDebugInfo(void)
{
if(OS_IsRunOnTwl())
{
OS_TPrintf("ARM7: This component is running on TWL.\n");
}
else
{
OS_TPrintf("ARM7: This component is running on NITRO.\n");
}
#ifdef SDK_TWLLTD
OS_TPrintf("ARM7: This component is \"racoon.TWL\"\n");
#else /* SDK_TWLHYB */
#ifdef SDK_WIRELESS_IN_VRAM
OS_TPrintf("ARM7: This component is \"ichneumon.TWL\"\n");
#else
OS_TPrintf("ARM7: This component is \"mongoose.TWL\"\n");
#endif
#endif
}
#include <twl/ltdwram_begin.h>
/*---------------------------------------------------------------------------*
Name: InitializeFatfs
Description: FATFSライブラリを初期化する
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void
InitializeFatfs(void)
{
// FATFSライブラリの初期化
if (FATFS_Init(FATFS_DMA_NOT_USE, THREAD_PRIO_FATFS))
{
// do nothing
}
}
#include <twl/ltdwram_end.h>
#include <twl/ltdwram_begin.h>
/*---------------------------------------------------------------------------*
Name: InitializeCdc
Description: CDCライブラリを初期化するCDC初期化関数内でスレッド休止する
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void
InitializeCdc(void)
{
OSThread thread;
u32 stack[18];
// ダミースレッド作成
OS_CreateThread(&thread, DummyThread, NULL,
(void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX);
OS_WakeupThreadDirect(&thread);
// CODEC 初期化
CDC_Init();
// CDCi_DumpRegisters();
// ダミースレッド破棄
OS_KillThread(&thread, NULL);
}
/*---------------------------------------------------------------------------*
Name: DummyThread
Description: CDCライブラリを初期化する際に立てるダミーのスレッド
Arguments: arg - 使
Returns: None.
*---------------------------------------------------------------------------*/
static void
DummyThread(void* arg)
{
#pragma unused(arg)
while (TRUE)
{
}
}
#include <twl/ltdwram_end.h>
/*---------------------------------------------------------------------------*
Name: InitializeAllocateSystem
Description:
Arguments: None.
Returns: OSHeapHandle - WRAM
*---------------------------------------------------------------------------*/
static OSHeapHandle
InitializeAllocateSystem(void)
{
OSHeapHandle hh;
#ifdef SDK_TWLHYB
if (OS_IsRunOnTwl() == TRUE)
{
void* basicLo = (void*)OS_GetSubPrivArenaLo();
void* basicHi = (void*)OS_GetSubPrivArenaHi();
void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDMAIN_BSS_END, 32);
void* extraHi = (void*)MATH_ROUNDDOWN(HW_MAIN_MEM_SUB, 32);
#if SDK_DEBUG
// debug information
OS_TPrintf("ARM7: MAIN arena basicLo = %p\n", basicLo);
OS_TPrintf("ARM7: MAIN arena basicHi = %p\n", basicHi);
OS_TPrintf("ARM7: MAIN arena extraLo = %p\n", extraLo);
OS_TPrintf("ARM7: MAIN arena extraHi = %p\n", extraHi);
#endif
// アリーナを 0 クリア
MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo);
MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo);
// メモリ割り当て初期化
if ((u32)basicLo < (u32)extraLo)
{
basicLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, basicLo, extraHi, 1);
// アリーナ下位アドレスを設定
OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, basicLo);
}
else
{
extraLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, extraLo, basicHi, 1);
}
// ヒープ作成
hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, basicLo, basicHi);
if (hh < 0)
{
OS_Panic("ARM7: Failed to create MAIN heap.\n");
}
// ヒープに拡張ブロックを追加
OS_AddToHeap(OS_ARENA_MAIN_SUBPRIV, hh, extraLo, extraHi);
}
else
#endif
{
void* lo = (void*)OS_GetSubPrivArenaLo();
void* hi = (void*)OS_GetSubPrivArenaHi();
// アリーナを 0 クリア
MI_CpuClear8(lo, (u32)hi - (u32)lo);
// メモリ割り当て初期化
lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1);
// アリーナ下位アドレスを設定
OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo);
// ヒープ作成
hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, lo, hi);
if (hh < 0)
{
OS_Panic("ARM7: Failed to MAIN create heap.\n");
}
}
// カレントヒープに設定
(void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh);
// ヒープサイズの確認
{
u32 heapSize;
heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh);
OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize);
}
#ifdef SDK_TWLHYB
if (OS_IsRunOnTwl() == TRUE)
{
void* basicLo = (void*)OS_GetWramSubPrivArenaLo();
void* basicHi = (void*)OS_GetWramSubPrivArenaHi();
void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDWRAM_BSS_END, 32);
void* extraHi = (void*)MATH_ROUNDDOWN(HW_WRAM_A_HYB_END, 32);
#if SDK_DEBUG
// debug information
OS_TPrintf("ARM7: WRAM arena basicLo = %p\n", basicLo);
OS_TPrintf("ARM7: WRAM arena basicHi = %p\n", basicHi);
OS_TPrintf("ARM7: WRAM arena extraLo = %p\n", extraLo);
OS_TPrintf("ARM7: WRAM arena extraHi = %p\n", extraHi);
#endif
// アリーナを 0 クリア
MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo);
MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo);
// メモリ割り当て初期化
if ((u32)basicLo < (u32)extraLo)
{
basicLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, basicLo, extraHi, 1);
// アリーナ下位アドレスを設定
OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, basicLo);
}
else
{
extraLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, extraLo, basicHi, 1);
}
// ヒープ作成
hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, basicLo, basicHi);
if (hh < 0)
{
OS_Panic("ARM7: Failed to WRAM create heap.\n");
}
// ヒープに拡張ブロックを追加
OS_AddToHeap(OS_ARENA_WRAM_SUBPRIV, hh, extraLo, extraHi);
}
else
#endif
{
void* lo = (void*)OS_GetWramSubPrivArenaLo();
void* hi = (void*)OS_GetWramSubPrivArenaHi();
// アリーナを 0 クリア
MI_CpuClear8(lo, (u32)hi - (u32)lo);
// メモリ割り当て初期化
lo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, lo, hi, 1);
// アリーナ下位アドレスを設定
OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, lo);
// ヒープ作成
hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, lo, hi);
if (hh < 0)
{
OS_Panic("ARM7: Failed to WRAM create heap.\n");
}
}
// カレントヒープに設定
(void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh);
return hh;
}
/*---------------------------------------------------------------------------*
Name: VBlankIntr
Description: V
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
extern BOOL PMi_Initialized;
void PM_SelfBlinkProc(void);
static void
VBlankIntr(void)
{
if (PMi_Initialized)
{
PM_SelfBlinkProc();
}
}

View File

@ -24,7 +24,7 @@ SUBDIRS =
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM9
INCDIR = include \

View File

@ -21,7 +21,7 @@ SUBDIRS =
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM7
#----------------------------------------------------------------------------

View File

@ -21,7 +21,7 @@ SUBDIRS =
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM9
#----------------------------------------------------------------------------

View File

@ -23,7 +23,7 @@ MYSUBDIRS = ./
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM9
SRCS = NTRSettings.c TWLSettings.c

View File

@ -23,7 +23,7 @@ MYSUBDIRS = ./
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM9
SRCS = sysmenu_lib.c sysmenu_card.c sysmenu_util.c gameBoot.c ninLogoFunc.c cmn.c \

View File

@ -17,7 +17,7 @@
#----------------------------------------------------------------------------
TARGET_PLATFORM = TWL
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM7
TWL_NO_STD_PCHDR = TRUE

View File

@ -19,7 +19,7 @@
TARGET_PLATFORM = TWL
TWL_PROC = ARM9
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TARGET_BIN = formatter.srl
MAKEROM_ARM7_BASE = ../ARM7/bin/$(TWL_BUILDTYPE_ARM7)/formatter_sub

View File

@ -22,7 +22,7 @@ SUBDIRS =
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TARGET_BIN = main.srl

View File

@ -22,7 +22,7 @@ SUBDIRS = ../../../libraries_sysmenu/sysmenu
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
#TWL_ARCHGEN = LIMITED
TWL_ARCHGEN = LIMITED
TARGET_BIN = main.srl