git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@1 4ee2a332-4b2b-5046-8439-1ba90f034370

This commit is contained in:
nakasima 2007-03-30 02:18:37 +00:00
commit b3e43b27d9
57 changed files with 18117 additions and 0 deletions

31
Makefile Normal file
View File

@ -0,0 +1,31 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = \
build \
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

32
build/Makefile Normal file
View File

@ -0,0 +1,32 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = \
libraries \
tests \
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

194
build/buildtools/commondefs Normal file
View File

@ -0,0 +1,194 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - commondefs - common definitions for build system
# File: commondefs
#
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
ifndef TWLSDK_COMMONDEFS_
TWLSDK_COMMONDEFS_ = TRUE
NITRO_NO_STD_PCHDR = TRUE # プリコンパイルヘッダ抑止
EMPTY ?=
SPACE ?= $(EMPTY) $(EMPTY)
#
# SDK Major Version
#
TWLSDK_VERSION_MAJOR ?= 0
#
# CodeGen Target
#
# TWL_PLATFORM = [TEG/TS]
# TWL_MEMSIZE = [4M/8M]
# TWL_CODEGEN = [ARM/THUMB]
# TWL_PROC = [ARM9/ARM7]
#
TWL_PLATFORM ?= TS
TWL_MEMSIZE ?= 8M
TWL_CODEGEN ?= ARM
TWL_PROC ?= ARM9
NITRO_PLATFORM = $(TWL_PLATFORM)
NITRO_MEMSIZE = $(TWL_MEMSIZE)
NITRO_CODEGEN = $(TWL_CODEGEN)
NITRO_PROC = $(TWL_PROC)
ifndef TWL_CODEGEN_PROC
TWL_CODEGEN_PROC := $(TWL_PROC)
endif
ifeq ($(TWL_CODEGEN),ALL)
TWL_CODEGEN_ALL ?= TRUE
override TWL_CODEGEN = ARM
endif
ifeq ($(TWL_CODEGEN),ARM)
TWL_CODEGEN_ARCH =
else # ($(TWL_CODEGEN),THUMB)
TWL_CODEGEN_ARCH = .thumb
endif
#
# Debugger Type
#
# one of [ISD/KMC/ARM]
#
TWL_DEBUGGER ?= KMC
#----------------------------------------------------------------------------
# TWL-SDK path settings
#
TWL_ROOT := $(subst $(SPACE),\ ,$(subst \,/,$(TWLSDK_ROOT)))
TWL_BUILDTOOLSDIR := $(TWL_ROOT)/build/buildtools
TWL_BUILDSETUPDIR := $(TWL_ROOT)/build/buildsetup
TWL_INCDIR := $(TWL_ROOT)/include
TWL_TOOLSDIR := $(TWL_ROOT)/tools
TWL_COMPONENTSDIR := $(TWL_ROOT)/components
TWL_ADDINS ?= $(TWL_ROOT)/add-ins
TWL_NITROSDK_ROOT ?=$(shell cygpath -w $(NITROSDK_ROOT))
TWL_BUILDARCH ?= $(TWL_CODEGEN_PROC)-$(TWL_PLATFORM)$(TWL_CODEGEN_ARCH)
TWL_BUILDARCH_ARM9 := ARM9-$(TWL_PLATFORM)$(TWL_CODEGEN_ARCH)
TWL_BUILDARCH_ARM7 := ARM7-$(TWL_PLATFORM)$(TWL_CODEGEN_ARCH)
TWL_BUILDTYPE ?= $(TWL_BUILDARCH)/$(TWL_BUILD_DIR)
TWL_BUILDTYPE_ARM9 := $(TWL_BUILDARCH_ARM9)/$(TWL_BUILD_DIR)
TWL_BUILDTYPE_ARM7 := $(TWL_BUILDARCH_ARM7)/$(TWL_BUILD_DIR)
TWL_LIBARCH := $(TWL_CODEGEN_PROC)-$(TWL_PLATFORM)
TWL_LIBTYPE := $(TWL_LIBARCH)/$(TWL_BUILD_DIR)
TWL_LIBDIR := $(TWL_ROOT)/lib/$(TWL_LIBTYPE)
TWL_LIBSYSCALLDIR := $(TWL_ROOT)/lib/$(TWL_LIBARCH)/etc
TWL_LIBSUFFIX := .twl$(TWL_CODEGEN_ARCH)
TWL_SPECDIR := $(TWL_INCDIR)/twl/specfiles
DEFAULT_TWL_LCFILE := $(TWL_SPECDIR)/$(TWL_LIBARCH).lcf
DEFAULT_TWL_LCFILE_TEMPLATE := $(TWL_SPECDIR)/$(TWL_LIBARCH)$(LCF_SUFFIX_).lcf.template
DEFAULT_TWL_LCFILE_SPEC := $(TWL_SPECDIR)/$(TWL_LIBARCH).lsf
DEFAULT_TWL_ROM_SPEC := $(TWL_SPECDIR)/ROM-$(TWL_PLATFORM).rsf
### Compiler & Linker settings
LCFILE_TEMPLATE ?= $(DEFAULT_TWL_LCFILE_TEMPLATE)
LCFILE_SPEC ?= $(DEFAULT_TWL_LCFILE_SPEC)
### SDK Library settings
CRT0_O ?= crt0.o
ifeq ($(TWL_CODEGEN_PROC),ARM9)
TWL_LIBS ?= \
libos$(TWL_LIBSUFFIX).a \
libmi$(TWL_LIBSUFFIX).a \
libvlink$(TWL_LIBSUFFIX).a \
ifdef TWL_PROFILE_TYPE
TWL_LIBS += libos.$(TWL_PROFILE_TYPE)$(TWL_LIBSUFFIX).a
endif
else # ($(TWL_CODEGEN_PROC),ARM7)
TWL_LIBS ?= \
libos_sp$(TWL_LIBSUFFIX).a \
libmi_sp$(TWL_LIBSUFFIX).a \
libvlink_sp$(TWL_LIBSUFFIX).a \
ifdef TWL_PROFILE_TYPE
TWL_LIBS += libos_sp.$(TWL_PROFILE_TYPE)$(TWL_LIBSUFFIX).a
endif
endif
#----------------------------------------------------------------------------
### NITRO-commondefs
#
include $(NITROSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
### Global Library resettings
GINCLUDES := $(TWL_INCDIR) $(GINCLUDES)
GLIBRARY_DIRS := $(TWL_LIBDIR) $(GLIBRARY_DIRS)
GLIBRARIES := $(TWL_LIBS) \
$(filter-out libos$(NITRO_LIBSUFFIX).a libos_sp$(NITRO_LIBSUFFIX).a \
libmi$(NITRO_LIBSUFFIX).a libmi_sp$(NITRO_LIBSUFFIX).a \
,$(GLIBRARIES))
#----------------------------------------------------------------------------
# TWLSDK_INSTALL_ROOT
#
ifdef TWLSDK_INSTALL_ROOT
TWLSDK_INSTALL_ROOT_ := $(TWLSDK_INSTALL_ROOT)
else
TWLSDK_INSTALL_ROOT_ := $(TWLSDK_ROOT)
endif
TWL_INSTALL_ROOT := $(subst $(SPACE),\ ,$(subst \,/,$(TWLSDK_INSTALL_ROOT_)))
TWL_INSTALL_INCDIR := $(TWL_INSTALL_ROOT)/include
TWL_INSTALL_TOOLSDIR := $(TWL_INSTALL_ROOT)/tools
TWL_INSTALL_LIBDIR := $(TWL_INSTALL_ROOT)/lib/$(TWL_LIBTYPE)
TWL_INSTALL_COMPONENTSDIR := $(TWL_INSTALL_ROOT)/components
TWL_INSTALL_ADDINS := $(TWL_INSTALL_ROOT)/add-ins
#----------------------------------------------------------------------------
# Compiler flags
#
MACRO_FLAGS += -DSDK_DEBUGGER_$(TWL_DEBUGGER)
#----------------------------------------------------------------------------
### Work-around
#
# TEGではバイトアクセス不可のため
CCFLAGS_PROC += $(CW_AVOID_STRB)
#----------------------------------------------------------------------------
endif # TWLSDK_COMMONDEFS_
#----- End of commondefs -----

View File

@ -0,0 +1,31 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - modulerules - common rules for build system
# File: modulerules
#
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
ifndef TWLSDK_MODULERULES_
#----------------------------------------------------------------------------
### NITRO-modulerules
#
include $(NITROSDK_ROOT)/build/buildtools/modulerules
# .axf
$(BINDIR)/$(TARGET_BIN_BASENAME).axf: $(OBJS) $(LCFILE) $(MAKEFILE) $(LDEPENDS_NEF) $(EDEPENDS_NEF) $(ALIBRARIES) $(LDRES_FILE) $(CW_LIBCXX)
$(LD) $(LDFLAGS) $(LIBRARY_DIRS) @$(LDRES_FILE) $(LCFILE) -o $@
#----------------------------------------------------------------------------
TWLSDK_MODULERULES_ = TRUE
endif # TWLSDK_MODULERULES_
#----- End of modulerules -----

38
build/libraries/Makefile Normal file
View File

@ -0,0 +1,38 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = \
init \
os \
mi \
vlink \
#----------------------------------------------------------------------------
export NITRO_BLXCHECKED = yes
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,59 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries_sp - init
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
TWL_CODEGEN_ALL ?= True
# Codegen for sub processer
TWL_PROC = ARM7
SRCS = crt0.c
TARGET_OBJ = crt0.o
#----------------------------------------------------------------------------
# DEBUG版ビルドの場合、RELEASE版でビルドして
# DEBUG版のライブラリを装います。
ifdef NITRO_DEBUG
NITRO_BUILD_TYPE = RELEASE
endif
include $(TWLSDK_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
MACRO_FLAGS += -DSDK_NOINIT
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,274 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - library - init
File: crt0.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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <nitro/code32.h>
#include <twl.h>
extern void NitroSpMain(void);
extern void OS_IrqHandler(void);
extern void *const _start_ModuleParams[];
static void do_autoload(void);
static void detect_main_memory_size(void);
void _start(void);
void _start_AutoloadDoneCallback(void *argv[]);
extern void __call_static_initializers(void);
extern void _fp_init(void);
// from LCF
extern void SDK_IRQ_STACKSIZE(void);
extern void SDK_STATIC_BSS_START(void); // static bss start address
extern void SDK_STATIC_BSS_END(void); // static bss start address
extern void SDK_AUTOLOAD_START(void); // autoload data will start from here
extern void SDK_AUTOLOAD_LIST(void); // start pointer to autoload information
extern void SDK_AUTOLOAD_LIST_END(void); // end pointer to autoload information
// volatile parameters in IPL's work memory
#define IPL_PARAM_CARD_ROM_HEADER 0x023FE940
#define IPL_PARAM_DOWNLOAD_PARAMETER 0x023FE904
//---- IRQ+SVC stack size in boot (this area is not cleared)
#define INITi_Initial_Stack 0x100
/*---------------------------------------------------------------------------*
Name: _start
Description: Start up
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
SDK_WEAK_SYMBOL asm void _start( void )
{
//---- set IME = 0
// ( use that LSB of HW_REG_BASE equal to 0 )
mov r12, #HW_REG_BASE
str r12, [r12, #REG_IME_OFFSET]
//---- clear memory
// private-WRAM (except program area)
ldr r1, =SDK_STATIC_BSS_END // r1= max(__bss_end__, #HW_PRV_WRAM)
mov r0, #HW_PRV_WRAM
cmp r0, r1
movpl r1, r0
ldr r2, =HW_PRV_WRAM_END - INITi_Initial_Stack
// r2= WRAM_END - r1 - svc+irq stack in boot
mov r0, #0 // r0= clear value
@1:
cmp r1, r2
stmltia r1!, {r0}
blt @1
//---- initialize stack pointer
// SVC mode
mov r0, #HW_PSR_SVC_MODE
msr cpsr_c, r0
ldr sp, =HW_PRV_WRAM_SVC_STACK_END
// IRQ mode
mov r0, #HW_PSR_IRQ_MODE
msr cpsr_c, r0
ldr r0, =HW_PRV_WRAM_IRQ_STACK_END
mov sp, r0
// System mode
ldr r1, =SDK_IRQ_STACKSIZE
sub r1, r0, r1
mov r0, #HW_PSR_SYS_MODE
msr cpsr_csfx, r0
sub sp, r1, #4 // 4byte for stack check code
// move parameters from IPL's work memory to shared area
ldr r0, =IPL_PARAM_CARD_ROM_HEADER
ldr r1, =HW_CARD_ROM_HEADER
add r2, r1, #HW_CARD_ROM_HEADER_SIZE
@1_1:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
bmi @1_1
ldr r0, =IPL_PARAM_DOWNLOAD_PARAMETER
add r2, r1, #HW_DOWNLOAD_PARAMETER_SIZE
@1_2:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
bmi @1_2
//---- load autoload block and initialize bss
// bl do_autoload
//---- fill static static bss with 0
ldr r0, =_start_ModuleParams
ldr r1, [r0, #12] // BSS segment start
ldr r2, [r0, #16] // BSS segment end
mov r0, #0
@2: cmp r1, r2
strcc r0, [r1], #4
bcc @2
//---- detect main memory size
bl detect_main_memory_size
//---- set interrupt vector
ldr r1, =HW_INTR_VECTOR_BUF
ldr r0, =OS_IrqHandler
str r0, [r1, #0]
#ifndef SDK_NOINIT
//---- for C++
bl _fp_init
bl NitroSpStartUp
bl __call_static_initializers
#endif
//---- start (to 16bit code)
ldr r1, =NitroSpMain
ldr lr, =HW_RESET_VECTOR
bx r1
}
/*---------------------------------------------------------------------------*
Name: do_autoload
Description: put autoload data block according to autoload information,
and clear static bss by filling with 0.
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void *const _start_ModuleParams[] = {
(void *)SDK_AUTOLOAD_LIST,
(void *)SDK_AUTOLOAD_LIST_END,
(void *)SDK_AUTOLOAD_START,
(void *)SDK_STATIC_BSS_START,
(void *)SDK_STATIC_BSS_END,
};
static asm void do_autoload( void )
{
#define ptable r0
#define infop r1
#define infop_end r2
#define src r3
#define dest r4
#define dest_size r5
#define dest_end r6
#define tmp r7
ldr ptable, =_start_ModuleParams
ldr infop, [ptable, #0] // r1 = start pointer to autoload_info
ldr infop_end, [ptable, #4] // r2 = end pointer to autoload_info
ldr src, [ptable, #8] // r3 = autoload block
//---- put each blocks according to autoload information
@2:
cmp infop, infop_end // reach to end?
beq @skipout
ldr dest, [infop], #4 // dest
ldr dest_size, [infop], #4 // size
add dest_end, dest, dest_size // dest_end
@1:
cmp dest, dest_end
ldrmi tmp, [src], #4 // [dest++] <- [src++]
strmi tmp, [dest], #4
bmi @1
//---- fill bss with 0
ldr dest_size, [infop], #4 // size
add dest_end, dest, dest_size // bss end
mov tmp, #0
@4:
cmp dest, dest_end
strcc tmp, [dest], #4
bcc @4
beq @2
@skipout:
// r0 = autoload_params
b _start_AutoloadDoneCallback // Jump into the callback
}
/*---------------------------------------------------------------------------*
Name: _start_AutoloadDoneCallback
Description: hook for end of autoload (This is dummy target for DEBUGGER)
Arguments: argv: pointer for autoload parameters
argv[0] = SDK_AUTOLOAD_LIST
argv[1] = SDK_AUTOLOAD_LIST_END
argv[2] = SDK_AUTOLOAD_START
argv[3] = SDK_STATIC_BSS_START
argv[4] = SDK_STATIC_BSS_END
Returns: None.
*---------------------------------------------------------------------------*/
SDK_WEAK_SYMBOL asm void _start_AutoloadDoneCallback( void* argv[] )
{
bx lr
}
/*---------------------------------------------------------------------------*
Name: detect_main_memory_size
Description: detect main memory size.
result is written into (u32*)HW_MMEMCHECKER_SUB.
value is [OS_CONSOLE_SIZE_4MB|OS_CONSOLE_SIZE_8MB]
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
#define OSi_IMAGE_DIFFERENCE 0x400000
static asm void detect_main_memory_size( void )
{
mov r0, #OS_CONSOLE_SIZE_4MB
mov r1, #0
ldr r2, =HW_MMEMCHECKER_SUB
sub r3, r2, #OSi_IMAGE_DIFFERENCE
@1:
strh r1, [r2]
ldrh r12, [r3]
cmp r1, r12
movne r0, #OS_CONSOLE_SIZE_8MB
bne @2
add r1, r1, #1
cmp r1, #2 // check 2 loop
bne @1
@2:
strh r0, [r2]
bx lr
}
/*---------------------------------------------------------------------------*
Name: NitroSpStartUp
Description: hook for user start up
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
SDK_WEAK_SYMBOL void NitroSpStartUp(void)
{
}

View File

@ -0,0 +1,43 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries - init
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
TWL_CODEGEN_ALL ?= True
SRCS = crt0.c
TARGET_OBJ = crt0.o
include $(TWLSDK_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,631 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - library - init
File: crt0.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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <nitro/code32.h>
#include <twl.h>
extern void NitroMain(void);
extern void OS_IrqHandler(void);
static void do_autoload(void);
static void init_cp15(void);
void _start(void);
static void INITi_CpuClear32(register u32 data, register void *destp, register u32 size);
extern void *const _start_ModuleParams[];
void _start_AutoloadDoneCallback(void *argv[]);
extern void __call_static_initializers(void);
extern void _fp_init(void);
// from LCF
extern void SDK_IRQ_STACKSIZE(void);
extern void SDK_AUTOLOAD_START(void); // autoload data will start from here
extern void SDK_AUTOLOAD_LIST(void); // start pointer to autoload information
extern void SDK_AUTOLOAD_LIST_END(void); // end pointer to autoload information
extern void SDK_STATIC_BSS_START(void); // static bss start address
extern void SDK_STATIC_BSS_END(void); // static bss end address
#include <nitro/version.h>
#define SDK_VERSION_ID ((u32)SDK_VERSION_MAJOR<<24|\
(u32)SDK_VERSION_MINOR<<16|\
(u32)SDK_VERSION_RELSTEP)
#define SDK_NITROCODE_LE 0x2106c0de
#define SDK_NITROCODE_BE 0xdec00621
/*---------------------------------------------------------------------------*
Name: _start
Description: Start up
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
#define INITi_HW_DTCM SDK_AUTOLOAD_DTCM_START
SDK_WEAK_SYMBOL asm void _start( void )
{
//---- set IME = 0
// ( use that LSB of HW_REG_BASE equal to 0 )
mov r12, #HW_REG_BASE
str r12, [r12, #REG_IME_OFFSET]
//---- initialize cp15
bl init_cp15
//---- initialize stack pointer
// SVC mode
mov r0, #HW_PSR_SVC_MODE
msr cpsr_c, r0
ldr r0, =INITi_HW_DTCM
add r0, r0, #0x3fc0
mov sp, r0
// IRQ mode
mov r0, #HW_PSR_IRQ_MODE
msr cpsr_c, r0
ldr r0, =INITi_HW_DTCM
add r0, r0, #0x3fc0
sub r0, r0, #HW_SVC_STACK_SIZE
sub sp, r0, #4 // 4byte for stack check code
tst sp, #4
subeq sp, sp, #4 // for 8byte-alignment
// System mode
ldr r1, =SDK_IRQ_STACKSIZE
sub r1, r0, r1
mov r0, #HW_PSR_SYS_MODE
msr cpsr_csfx, r0
sub sp, r1, #4 // 4byte for stack check code
//---- clear memory
// DTCM (16KB)
mov r0, #0
ldr r1, =INITi_HW_DTCM
mov r2, #HW_DTCM_SIZE
bl INITi_CpuClear32
// BG/OBJ palette (1KB)
mov r0, #0
ldr r1, =HW_PLTT
mov r2, #HW_PLTT_SIZE
bl INITi_CpuClear32
// OAM (1KB)
mov r0, #0x0200
ldr r1, =HW_OAM
mov r2, #HW_OAM_SIZE
bl INITi_CpuClear32
//---- load autoload block and initialize bss
ldr r1, =_start_ModuleParams
ldr r0, [r1, #20] // r0 = bottom of compressed data
bl MIi_UncompressBackward
// bl do_autoload
//---- fill static static bss with 0
ldr r0, =_start_ModuleParams
ldr r1, [r0, #12] // BSS segment start
ldr r2, [r0, #16] // BSS segment end
mov r3, r1 // for next step(flush bss)
mov r0, #0
@1: cmp r1, r2
strcc r0, [r1], #4
bcc @1
//---- flush static bss region
// (r0 == #0, r3 == _start_ModuleParams::BSS_segment_start)
bic r1, r3, #HW_CACHE_LINE_SIZE - 1
@cacheflush:
mcr p15, 0, r0, c7, c10, 4 // wait writebuffer empty
mcr p15, 0, r1, c7, c5, 1 // ICache
mcr p15, 0, r1, c7, c14, 1 // DCache
add r1, r1, #HW_CACHE_LINE_SIZE
cmp r1, r2
blt @cacheflush
// print buffer (used for ARM7's printing)
ldr r1, =HW_COMPONENT_PARAM
str r0, [r1, #0]
//---- set interrupt vector
ldr r1, =INITi_HW_DTCM
add r1, r1, #0x3fc0
add r1, r1, #HW_DTCM_SYSRV_OFS_INTR_VECTOR
ldr r0, =OS_IrqHandler
str r0, [r1, #0]
#ifndef SDK_NOINIT
//---- for C++
bl _fp_init
bl NitroStartUp
bl __call_static_initializers
#endif
//---- start (to 16bit code)
ldr r1, =NitroMain
ldr lr, =HW_RESET_VECTOR
tst sp, #4
subne sp, sp, #4 // for 8byte-alignment
bx r1
}
/*---------------------------------------------------------------------------*
Name: INITi_CpuClear32
Description: fill memory with specified data.
32bit version
Arguments: data : fill data
destp : destination address
size : size (byte)
Returns: None
*---------------------------------------------------------------------------*/
static asm void INITi_CpuClear32( register u32 data, register void *destp, register u32 size )
{
add r12, r1, r2 // r12: destEndp = destp + size
@20:
cmp r1, r12 // while (destp < destEndp)
stmltia r1!, {r0} // *((vu32 *)(destp++)) = data
blt @20
bx lr
}
/*---------------------------------------------------------------------------*
Name: _start_ModuleParams
Description: autoload/compress/arguments data block
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void *const _start_ModuleParams[] = {
(void *)SDK_AUTOLOAD_LIST,
(void *)SDK_AUTOLOAD_LIST_END,
(void *)SDK_AUTOLOAD_START,
(void *)SDK_STATIC_BSS_START,
(void *)SDK_STATIC_BSS_END,
(void *)0, // CompressedStaticEnd
(void *)0, //SDK_VERSION_ID, // SDK version info
(void *)SDK_NITROCODE_BE, // Checker 1
(void *)SDK_NITROCODE_LE, // Checker 2
};
/*---------------------------------------------------------------------------*
Name: MIi_UncompressBackward
Description: Uncompress special archive for module compression
Arguments: bottom = Bottom adrs of packed archive + 1
bottom[-8..-6] = offset for top of compressed data
inp_top = bottom - bottom[-8..-6]
bottom[-5] = offset for bottom of compressed data
inp = bottom - bottom[-5]
bottom[-4..-1] = offset for bottom of original data
outp = bottom + bottom[-4..-1]
typedef struct
{
u32 bufferTop:24;
u32 compressBottom:8;
u32 originalBottom;
} CompFooter;
Returns: None.
*---------------------------------------------------------------------------*/
asm void MIi_UncompressBackward( register void* bottom )
{
#define data r0
#define inp_top r1
#define outp r2
#define inp r3
#define outp_save r4
#define flag r5
#define count8 r6
#define index r7
#define len r12
cmp bottom, #0
beq @exit
stmfd sp!, {r4-r7}
ldmdb bottom, {r1-r2}
add outp, bottom, outp
sub inp, bottom, inp_top, LSR #24
bic inp_top, inp_top, #0xff000000
sub inp_top, bottom, inp_top
mov outp_save, outp
@loop:
cmp inp, inp_top // exit if inp==inp_top
ble @end_loop
ldrb flag, [inp, #-1]! // r4 = compress_flag = *--inp
mov count8, #8
@loop8:
subs count8, count8, #1
blt @loop
tst flag, #0x80
bne @blockcopy
@bytecopy:
ldrb data, [inp, #-1]!
#ifdef SDK_TEG
sub outp, outp, #1
swpb data, data, [outp]
#else
strb data, [outp, #-1]! // Copy 1 byte
#endif
b @joinhere
@blockcopy:
ldrb len, [inp, #-1]!
ldrb index, [inp, #-1]!
orr index, index, len, LSL #8
bic index, index, #0xf000
add index, index, #0x0002
add len, len, #0x0020
@patterncopy:
ldrb data, [outp, index]
#ifdef SDK_TEG
sub outp, outp, #1
swpb data, data, [outp]
#else
strb data, [outp, #-1]!
#endif
subs len, len, #0x0010
bge @patterncopy
@joinhere:
cmp inp, inp_top
mov flag, flag, LSL #1
bgt @loop8
@end_loop:
// DC_FlushRange & IC_InvalidateRange
mov r0, #0
bic inp, inp_top, #HW_CACHE_LINE_SIZE - 1
@cacheflush:
mcr p15, 0, r0, c7, c10, 4 // wait writebuffer empty
mcr p15, 0, inp, c7, c5, 1 // ICache
mcr p15, 0, inp, c7, c14, 1 // DCache
add inp, inp, #HW_CACHE_LINE_SIZE
cmp inp, outp_save
blt @cacheflush
ldmfd sp!, {r4-r7}
@exit bx lr
}
/*---------------------------------------------------------------------------*
Name: do_autoload
Description: put autoload data block according to autoload information,
and clear static bss by filling with 0.
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static asm void do_autoload( void )
{
#define ptable r0
#define infop r1
#define infop_end r2
#define src r3
#define dest r4
#define dest_begin r5
#define dest_end r6
#define tmp r7
ldr ptable, =_start_ModuleParams
ldr infop, [ptable, #0] // r1 = start pointer to autoload_info
ldr infop_end, [ptable, #4] // r2 = end pointer to autoload_info
ldr src, [ptable, #8] // r3 = autoload block
@2:
cmp infop, infop_end // reach to end?
beq @skipout
ldr dest_begin,[infop], #4 // dest_begin
ldr tmp, [infop], #4 // size
add dest_end, dest_begin, tmp // dest_end
mov dest, dest_begin // dest working pointer
@1:
cmp dest, dest_end
ldrmi tmp, [src], #4 // [dest++] <- [src++]
strmi tmp, [dest], #4
bmi @1
//---- fill bss with 0
ldr tmp, [infop], #4 // size
add dest_end, dest, tmp // bss end
mov tmp, #0
@3:
cmp dest, dest_end
strcc tmp, [dest], #4
bcc @3
//---- cache work (DC_FlushRange & IC_InvalidateRange)
bic dest, dest_begin, #HW_CACHE_LINE_SIZE - 1
@cacheflush:
mcr p15, 0, tmp, c7, c10, 4 /* wait writebuffer empty */
mcr p15, 0, dest, c7, c5, 1 // ICache
mcr p15, 0, dest, c7, c14, 1 // DCache
add dest, dest, #HW_CACHE_LINE_SIZE
cmp dest, dest_end
blt @cacheflush
b @2
@skipout:
// r0 = _start_ModuleParams
b _start_AutoloadDoneCallback // Jump into the callback
}
/*---------------------------------------------------------------------------*
Name: _start_AutoloadDoneCallback
Description: hook for end of autoload (This is dummy target for DEBUGGER)
Arguments: argv: pointer for autoload parameters
argv[0] = SDK_AUTOLOAD_LIST
argv[1] = SDK_AUTOLOAD_LIST_END
argv[2] = SDK_AUTOLOAD_START
argv[3] = SDK_STATIC_BSS_START
argv[4] = SDK_STATIC_BSS_END
Returns: None.
*---------------------------------------------------------------------------*/
SDK_WEAK_SYMBOL asm void _start_AutoloadDoneCallback( void* argv[] )
{
bx lr
}
//-----------------------------------------------------------------------
// システム制御コプロセッサ 初期化
//-----------------------------------------------------------------------
static asm void init_cp15(void)
{
// プロテクションユニット/キャッシュ/TCM ディセーブル
mrc p15, 0, r0, c1, c0, 0
ldr r1, =HW_C1_ICACHE_ENABLE | HW_C1_DCACHE_ENABLE \
| HW_C1_ITCM_ENABLE | HW_C1_DTCM_ENABLE \
| HW_C1_ITCM_LOAD_MODE | HW_C1_DTCM_LOAD_MODE \
| HW_C1_LD_INTERWORK_DISABLE \
| HW_C1_PROTECT_UNIT_ENABLE
bic r0, r0, r1
mcr p15, 0, r0, c1, c0, 0
// キャッシュ無効化
mov r0, #0
mcr p15, 0, r0, c7, c5, 0 // 命令キャッシュ
mcr p15, 0, r0, c7, c6, 0 // データキャッシュ
// ライトバッファ エンプティ待ち
mcr p15, 0, r0, c7, c10, 4
/*
; Region G: BACK_GROUND: Base = 0x0, Size = 4GB, I:NC NB / D:NC NB, I:NA / D:NA
; Region 0: IO_VRAM: Base = 0x04000000, Size = 64MB, I:NC NB / D:NC NB, I:RW / D:RW
; Region 1Rel: MAIN_MEM: Base = 0x02000000, Size = 8MB*, I:Cach Buf / D:Cach Buf, I:RW / D:RW
; Region 1Dbg: MAIN_MEM: Base = 0x02000000, Size = 8MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
; (* Size will be arranged in OS_InitArena(). )
; Region 2Rel: SOUND_DATA: Base = 0x02380000, Size = 512KB, I:NC NB / D:NC NB, I:NA / D:NA
; Region 2D4M: SOUND_DATA: Base = 0x02300000, Size = 1MB, I:NC NB / D:NC NB, I:NA / D:NA
; Region 2D8M: SOUND_DATA: Base = 0x02600000, Size = 2MB, I:NC NB / D:NC NB, I:NA / D:NA
; Region 3: CARTRIDGE: Base = 0x08000000, Size = 128MB, I:NC NB / D:NC NB, I:NA / D:RW
; Region 4: DTCM: Base = SOUND_DATA, Size = 16KB, I:NC NB / D:NC NB, I:NA / D:RW
; Region 5: ITCM: Base = 0x01000000, Size = 16MB, I:NC NB / D:NC NB, I:RW / D:RW
; Region 6: BIOS: Base = 0xffff0000, Size = 32KB, I:Cach NB / D:Cach NB, I:RO / D:RO
; Region 7: SHARE_WORK: Base = 0x027ff000, Size = 4KB, I:NC NB / D:NC NB, I:NA / D:RW
;(Region 7: DBG_RESERVE: Base = 0x02700000, Size = 1MB, I:NC NB / D:NC NB, I:RW / D:RW)
*/
#define SET_PROTECTION_A( id, adr, siz ) ldr r0, =(adr|HW_C6_PR_##siz|HW_C6_PR_ENABLE)
#define SET_PROTECTION_B( id, adr, siz ) mcr p15, 0, r0, c6, id, 0
#define REGION_BIT(a,b,c,d,e,f,g,h) (((a)<<0)|((b)<<1)|((c)<<2)|((d)<<3)|((e)<<4)|((f)<<5)|((g)<<6)|((h)<<7))
#define REGION_ACC(a,b,c,d,e,f,g,h) (((a)<<0)|((b)<<4)|((c)<<8)|((d)<<12)|((e)<<16)|((f)<<20)|((g)<<24)|((h)<<28))
#define NA 0
#define RW 1
#define RO 5
//
// メモリリージョン初期化
//
//---- I/O レジスタ & VRAM 等
SET_PROTECTION_A( c0, HW_IOREG, 64MB )
SET_PROTECTION_B( c0, HW_IOREG, 64MB )
//---- メインメモリ
SET_PROTECTION_A( c1, HW_MAIN_MEM_MAIN, 8MB )
SET_PROTECTION_B( c1, HW_MAIN_MEM_MAIN, 8MB )
//---- サウンドデータ領域
#if HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x1000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 4KB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 4KB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x2000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 8KB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 8KB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x4000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 16KB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 16KB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x8000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 32KB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 32KB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x10000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 64KB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 64KB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x20000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 128KB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 128KB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x40000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 256KB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 256KB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x80000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 512KB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 512KB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x100000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 1MB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 1MB )
#elif HW_MAIN_MEM_SUB_SIZE+HW_MAIN_MEM_SHARED_SIZE == 0x200000
SET_PROTECTION_A( c2, HW_MAIN_MEM_SUB, 2MB )
SET_PROTECTION_B( c2, HW_MAIN_MEM_SUB, 2MB )
#else
#pragma message(ERROR: Size unmatch HW_MAIN_MEM_SUB_SIZE)
#endif
//---- カートリッジ又は他の用途
// CPU 内部ワーク RAM 等
SET_PROTECTION_A( c3, HW_CTRDG_ROM, 128MB )
SET_PROTECTION_B( c3, HW_CTRDG_ROM, 128MB )
//---- データ TCM
// + CPU 内部ワーク RAM の場合あり
//#if (HW_DTCM & 0x3FFF) != 0
//#pragma message(ERROR: HW_DTCM need to be aligned 16KB!)
//#endif
// SET_PROTECTION_A( c4, HW_DTCM, 16KB )
ldr r0, =SDK_AUTOLOAD_DTCM_START
orr r0, r0, #HW_C6_PR_16KB
orr r0, r0, #HW_C6_PR_ENABLE
SET_PROTECTION_B( c4, HW_DTCM, 16KB )
//---- 命令 TCM
// データ TCM より優先が高い、メインメモリ領域までのイメージ
SET_PROTECTION_A( c5, HW_ITCM_IMAGE, 16MB )
SET_PROTECTION_B( c5, HW_ITCM_IMAGE, 16MB )
//---- BIOS
SET_PROTECTION_A( c6, HW_BIOS, 32KB )
SET_PROTECTION_B( c6, HW_BIOS, 32KB )
//---- SHARED CPU 間通信ワーク領域
SET_PROTECTION_A( c7, HW_MAIN_MEM_SHARED, 4KB )
SET_PROTECTION_B( c7, HW_MAIN_MEM_SHARED, 4KB )
#if HW_MAIN_MEM_SHARED_SIZE != 0x1000
#pragma message(ERROR: Size unmatch HW_MAIN_MEM_SHARED_SIZE)
#endif
//
// 命令TCM 設定
//
mov r0, #HW_C9_TCMR_32MB
mcr p15, 0, r0, c9, c1, 1
//
// データTCM 設定
//
ldr r0, =INITi_HW_DTCM
orr r0, r0, #HW_C9_TCMR_16KB
mcr p15, 0, r0, c9, c1, 0
//
// 命令キャッシュ イネーブル (リージョン設定)
// 1: MAIN_MEM
// 6: BIOS
//
mov r0, #REGION_BIT(0,1,0,0,0,0,1,0)
mcr p15, 0, r0, c2, c0, 1
//
// データキャッシュ イネーブル (リージョン設定)
// 1: MAIN_MEM
// 6: BIOS
//
mov r0, #REGION_BIT(0,1,0,0,0,0,1,0)
mcr p15, 0, r0, c2, c0, 0
//
// ライトバッファ イネーブル(リージョン設定)
// 1: MAIN_MEM
//
mov r0, #REGION_BIT(0,1,0,0,0,0,0,0)
mcr p15, 0, r0, c3, c0, 0
//
// 命令アクセス許可 (リージョン設定)
// IO_VRAM : RW
// MAIN_MEM_MAIN : RW
// MAIN_MEM_SUB : NA
// CTRDG : NA
// DTCM : NA
// ITCM : RW
// BIOS : RO
// SHARED : NA
//
ldr r0, =REGION_ACC(RW,RW,NA,NA,NA,RW,RO,NA)
mcr p15, 0, r0, c5, c0, 3
//
// データアクセス許可(リージョン設定)
// IO_VRAM : RW
// MAIN_MEM_MAIN : RW
// MAIN_MEM_SUB : NA
// CTRDG : RW
// DTCM : RW
// ITCM : RW
// BIOS : RO
// SHARED : RW
//
ldr r0, =REGION_ACC(RW,RW,NA,RW,RW,RW,RO,RW)
mcr p15, 0, r0, c5, c0, 2
//
// システム制御コプロセッサ マスター設定
//
mrc p15, 0, r0, c1, c0, 0
ldr r1,=HW_C1_ICACHE_ENABLE | HW_C1_DCACHE_ENABLE | HW_C1_CACHE_ROUND_ROBIN \
| HW_C1_ITCM_ENABLE | HW_C1_DTCM_ENABLE \
| HW_C1_SB1_BITSET | HW_C1_EXCEPT_VEC_UPPER \
| HW_C1_PROTECT_UNIT_ENABLE
orr r0, r0, r1
mcr p15, 0, r0, c1, c0, 0
bx lr
}
/*---------------------------------------------------------------------------*
Name: NitroStartUp
Description: hook for user start up
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
SDK_WEAK_SYMBOL void NitroStartUp(void)
{
}
/*---------------------------------------------------------------------------*
Name: OSi_ReferSymbol
Description: used by SDK_REFER_SYMBOL macro to avoid dead-strip.
Arguments: symbol unused
Returns: None.
*---------------------------------------------------------------------------*/
void OSi_ReferSymbol(void *symbol)
{
#pragma unused(symbol)
}

View File

@ -0,0 +1,34 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries - init
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = ARM9
#ifdef TWL_WITH_ARM7
SUBDIRS += ARM7
#endif
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,75 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries - mi/ARM7
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
TWL_CODEGEN_ALL ?= True
# Codegen for sub processer
TWL_PROC = ARM7
SRCDIR = ../common .
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/mi/common/src \
$(TWL_NITROSDK_ROOT)/build/libraries/mi/ARM7/src \
INCDIR = ../common
INCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/mi/common/include \
SRCS = mi_dma.c \
mi_dma_hblank.c \
mi_dma_vblank.c \
mi_dma_mainmem.c \
mi_dma_gxcommand.c \
mi_memory.c \
mi_swap.c \
mi_uncompress.c \
mi_byteAccess.c \
mi_stream.c \
mi_card.c \
mi_dma_card.c \
mi_exMemory.c
TARGET_LIB = libmi_sp$(TWL_LIBSUFFIX).a
#----------------------------------------------------------------------------
# DEBUG版ビルドの場合、RELEASE版でビルドして
# DEBUG版のライブラリを装います。
ifdef NITRO_DEBUG
NITRO_BUILD_TYPE = RELEASE
endif
include $(TWLSDK_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,66 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries - mi/ARM9
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
TWL_CODEGEN_ALL ?= True
SRCDIR = ../common .
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/mi/common/src \
$(TWL_NITROSDK_ROOT)/build/libraries/mi/ARM9/src \
INCDIR = ../common
INCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/mi/common/include \
SRCS = mi_wram.c \
mi_dma.c \
mi_dma_hblank.c \
mi_dma_vblank.c \
mi_dma_mainmem.c \
mi_dma_gxcommand.c \
mi_memory.c \
mi_swap.c \
mi_uncompress.c \
mi_byteAccess.c \
mi_stream.c \
mi_card.c \
mi_dma_card.c \
mi_uncomp_stream.c \
mi_compress.c \
mi_exMemory.c \
mi_init.c
TARGET_LIB = libmi$(TWL_LIBSUFFIX).a
include $(TWLSDK_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,34 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries - mi
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = ARM9
#ifdef TWL_WITH_ARM7
SUBDIRS += ARM7
#endif
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,85 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries_sp - os
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#SUBMAKES = Makefile.CALLTRACE \
# Makefile.FUNCTIONCOST
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
TWL_CODEGEN_ALL ?= TRUE
# Codegen for sub processer
TWL_PROC = ARM7
SRCDIR = ../common .
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/os/common/src \
$(TWL_NITROSDK_ROOT)/build/libraries/os/ARM7/src \
SRCS = \
os_init_twl.c \
os_spinLock_twl.c \
os_printf_twl.c \
os_system_twl.c \
os_entropy_twl.c \
os_terminate_twl_sp.c \
os_irqHandler.c \
os_irqTable.c \
os_interrupt.c \
os_thread.c \
os_context.c \
os_emulator.c \
os_message.c \
os_mutex.c \
os_arena.c \
os_alloc.c \
os_exception.c \
os_timer.c \
os_tick.c \
os_alarm.c \
os_valarm.c \
os_profile.c \
os_reset.c \
os_ownerInfo.c \
TARGET_LIB = libos_sp$(TWL_LIBSUFFIX).a
#----------------------------------------------------------------------------
# DEBUG版ビルドの場合、RELEASE版でビルドして
# DEBUG版のライブラリを装います。
ifdef NITRO_DEBUG
NITRO_BUILD_TYPE = RELEASE
endif
include $(TWLSDK_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,87 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - OS
File: os_terminate_sp.c
Copyright 2006 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.
$Log: os_terminate_sp.c,v $
Revision 1.2 2006/01/18 02:11:30 kitase_hirotake
do-indent
Revision 1.1 2006/01/10 05:58:35 okubata_ryoma
os_terminate_sp.cÌÇÁ
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <nitro/os/common/system.h>
#include <nitro/ctrdg/ARM7/ctrdg_sp.h>
//============================================================================
// TERMINATE and HALT
//============================================================================
/*---------------------------------------------------------------------------*
Name: OS_Terminate
Description: Halt CPU and loop
Arguments: None
Returns: -- (Never return)
*---------------------------------------------------------------------------*/
SDK_WEAK_SYMBOL void OS_Terminate(void)
{
//VIB_STOP
CTRDG_VibPulseEdgeUpdate(NULL);
while (1)
{
(void)OS_DisableInterrupts();
OS_Halt();
}
}
/*---------------------------------------------------------------------------*
Name: OS_Exit
Description: Display exit string and Terminate.
This is useful for 'loadrun' tool command.
Arguments: status : exit status
Returns: -- (Never return)
*---------------------------------------------------------------------------*/
SDK_WEAK_SYMBOL void OS_Exit(int status)
{
#ifdef SDK_FINALROM
#pragma unused( status )
#endif
(void)OS_DisableInterrupts();
OS_Printf("\n" OS_EXIT_STRING, status);
OS_Terminate();
}
/*---------------------------------------------------------------------------*
Name: OS_Halt
Description: Halt CPU
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
#ifdef SDK_DEBUGGER_ARM
#include <nitro/code32.h>
SDK_WEAK_SYMBOL asm void OS_Halt( void )
{
mov r0, #0
mcr p15, 0, r0, c7, c0, 4
bx lr
}
#include <nitro/codereset.h>
#endif

View File

@ -0,0 +1,99 @@
#! make -f
#----------------------------------------------------------------------------
# Project: NitroSDK - libraries - os
# File: Makefile
#
# Copyright 2003-2005 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.
#
# $Log: Makefile,v $
# Revision 1.3 2005/05/25 11:42:54 terui
# Makefile.CORE ‚ð include ·éæ¤É<E2809A>C<EFBFBD>³
#
# Revision 1.2 2004/09/13 05:37:28 yasu
# merged with NitroSDK_2_00pr6_branch
#
# Revision 1.1.2.1 2004/09/13 04:39:29 yasu
# build libos for TS_VERSION=0,100 and 200
#
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
SUBMAKES =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
TWL_CODEGEN_ALL ?= True
SRCDIR = ../common .
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/os/common/src \
$(TWL_NITROSDK_ROOT)/build/libraries/os/ARM9/src \
SRCS = \
os_init_twl.c \
os_spinLock_twl.c \
os_printf_twl.c \
os_system_twl.c \
os_entropy_twl.c \
os_irqHandler.c \
os_irqTable.c \
os_interrupt.c \
os_thread.c \
os_context.c \
os_emulator.c \
os_message.c \
os_mutex.c \
os_cache.c \
os_arena.c \
os_alloc.c \
os_tcm.c \
os_protectionUnit.c \
os_protectionRegion.c \
os_exception.c \
os_timer.c \
os_tick.c \
os_alarm.c \
os_valarm.c \
os_profile.c \
os_reset.c \
os_ownerInfo.c \
os_vramExclusive.c \
os_china.c \
os_argument.c \
os_terminate_proc.c \
TARGET_LIB = libos$(TWL_LIBSUFFIX).a
include $(TWLSDK_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
ifdef NITRO_CALLTRACE
CCFLAGS += -DOS_PROFILE_AVAILABLE -DOS_PROFILE_CALL_TRACE
endif
ifdef NITRO_FUNCTIONCOST
CCFLAGS += -DOS_PROFILE_AVAILABLE -DOS_PROFILE_FUNCTION_COST
endif
ifdef NITRO_TCM_APPLY
CCFLAGS += -DSDK_TCM_APPLY
endif
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,34 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries - os
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = ARM9
#ifdef TWL_WITH_ARM7
SUBDIRS += ARM7
#endif
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,59 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - OS
File: os_entropy.c
Copyright 2003-2006 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.
$Log: os_entropy.c,v $
Revision 1.3 2006/01/18 02:11:30 kitase_hirotake
do-indent
Revision 1.2 2005/07/27 12:15:36 seiki_masashi
MAC
Revision 1.1 2005/07/27 07:36:41 seiki_masashi
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <nitro/os.h>
#include <nitro/gx.h>
//----------------------------------------------------------------------
extern vu64 OSi_TickCounter;
/*---------------------------------------------------------------------------*
Name: OS_GetLowEntropyData
Description:
Arguments: buffer -
Returns: None.
*---------------------------------------------------------------------------*/
void OS_GetLowEntropyData(u32 buffer[OS_LOW_ENTROPY_DATA_SIZE / sizeof(u32)])
{
// System Work Memory 上の RTC のワーク領域
const OSSystemWork *work = OS_GetSystemWork();
const u8 *macAddress =
(u8 *)((u32)(work->nvramUserInfo) + ((sizeof(NVRAMConfig) + 3) & ~0x00000003));
buffer[0] = (u32)((GX_GetVCount() << 16) | OS_GetTickLo());
buffer[1] = (u32)(*(u16 *)(macAddress + 4) << 16) ^ (u32)(OSi_TickCounter);
buffer[2] = (u32)(OSi_TickCounter >> 32) ^ *(u32 *)macAddress ^ work->vblankCount;
#ifdef reg_G3X_GXSTAT
buffer[2] ^= reg_G3X_GXSTAT;
#endif
buffer[3] = *(u32 *)(&work->real_time_clock[0]);
buffer[4] = *(u32 *)(&work->real_time_clock[4]);
buffer[5] = (((u32)work->mic_sampling_data) << 16) ^ work->mic_last_address;
buffer[6] = (u32)((*(u16 *)(&work->touch_panel[0]) << 16) | *(u16 *)(&work->touch_panel[2]));
buffer[7] = (u32)((work->wm_rssi_pool << 16) | (reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF));
}

View File

@ -0,0 +1,300 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - OS
File: os_init.c
Copyright 2003-2006 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.
$Log: os_init.c,v $
Revision 1.50 2006/01/18 02:11:30 kitase_hirotake
do-indent
Revision 1.49 2005/11/22 09:11:28 yosizaki
support SDK_ENABLE_ARM7_PRINT.
Revision 1.48 2005/07/19 06:06:11 yada
add irq stack check
Revision 1.47 2005/04/26 06:54:22 terui
Fix comment
Revision 1.46 2005/04/18 12:26:59 terui
OSi_CheckOwnerInfo関数を削除
Revision 1.45 2005/04/12 10:49:15 terui
Revision 1.44 2005/02/28 05:26:28 yosizaki
do-indent.
Revision 1.43 2005/02/10 07:46:57 yada
let call MI_Init()
Revision 1.42 2005/02/09 09:17:48 terui
ARM9における初期化時にVRAMの排他制御を初期化する機能を追加
Revision 1.41 2004/10/12 08:01:04 yada
delete OS_InitPrintServer()
Revision 1.40 2004/10/08 07:49:13 yada
consider for the situation of not calling OS_InitPrintServer()
Revision 1.39 2004/09/29 06:06:42 yada
OS_InitReset() is not called if SDK_SMALL_BUILD defined
Revision 1.38 2004/09/29 06:02:34 yada
CARD_Init() is not called if SDK_SMALL_BUILD defined
Revision 1.37 2004/09/28 00:03:36 yada
add CARD_Init() in OS_Init() on ARM9
Revision 1.36 2004/09/15 06:15:20 yada
in SDK_TEG release, PM_Init() not called.
Revision 1.35 2004/09/15 01:01:08 yada
in case SDK_TEG, CTRDG_Init() not called
Revision 1.34 2004/09/13 10:48:24 yada
add CTRDG_Init()
Revision 1.33 2004/09/02 06:18:22 yada
only change comment
Revision 1.32 2004/09/01 04:20:03 yada
add OS_InitReset()
Revision 1.31 2004/08/26 12:17:23 yada
always call PM_Init()
Revision 1.30 2004/08/16 04:22:04 yada
in ensata, not call PM_Init()
Revision 1.29 2004/08/09 02:12:10 yada
add PM_Init in case of ARM9
Revision 1.28 2004/07/27 06:39:55 yada
add checker for system shared validity
Revision 1.27 2004/07/10 04:07:46 yasu
Add short comment
Revision 1.26 2004/07/08 02:30:35 yada
add calling OS_InitArenaEx()
Revision 1.25 2004/05/24 04:50:08 yada
fix profile pragma
Revision 1.24 2004/05/20 02:56:46 yada
add profile off
Revision 1.23 2004/05/20 02:51:26 yada
add OS_InitThread()
Revision 1.22 2004/03/18 12:59:15 yada
ARM7ではException初期化を呼ばないようにした()
Revision 1.21 2004/03/09 07:26:18 yada
PXI_Init() OS_InitLock()
Revision 1.20 2004/03/08 01:55:49 yasu
add PXI_Init()
Revision 1.19 2004/03/01 11:57:31 yada
comment作成
Revision 1.18 2004/02/25 11:31:18 yada
systemClockTick
Revision 1.17 2004/02/24 11:50:34 yada
OS_Init() A7側から PAD_InitXYButton()
Revision 1.16 2004/02/24 04:50:59 yada
A9側に OS_InitValarm
Revision 1.15 2004/02/20 12:24:21 yada
A7のOS_Init()
Revision 1.14 2004/02/20 08:29:18 yasu
Temporary fix
Revision 1.13 2004/02/19 08:42:11 yada
A7側アリーナの初期化追加
Revision 1.12 2004/02/18 08:56:56 yada
A7 OS_InitArea()
Revision 1.11 2004/02/18 01:20:04 yada
ARM7にsystemClock,Alarm,XYButtonのinitを入れた
Revision 1.10 2004/02/13 02:29:59 yada
ARM9とAMR7
Revision 1.9 2004/02/05 10:51:53 yada
OS_InitException()
Revision 1.8 2004/02/05 07:09:02 yasu
change SDK prefix iris -> nitro
Revision 1.7 2004/01/30 11:45:06 yada
OS_InitException()
Revision 1.6 2004/01/30 08:06:14 yada
OS_Init()
Revision 1.5 2004/01/18 02:25:37 yada
Revision 1.4 2004/01/07 01:43:51 yada
OS_InitArena()
Revision 1.3 2003/12/26 05:52:45 yada
Revision 1.2 2003/12/24 07:54:20 yada
wram
Revision 1.1 2003/12/22 01:35:52 yada
OS_Init() init.h
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <nitro/os.h>
#include <nitro/mi/wram.h>
#include <nitro/pxi.h>
#include <nitro/spi.h>
#ifndef SDK_TEG
#include <nitro/ctrdg.h>
#endif
/*---------------------------------------------------------------------------*
Name: OS_Init
Description: initialize sdk os
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
#pragma profile off
void OS_Init(void)
{
#ifdef SDK_ARM9
//---- system shared area check
SDK_ASSERT((u32)&(OS_GetSystemWork()->command_area) == HW_CMD_AREA);
//----------------------------------------------------------------
// for ARM9
#ifdef SDK_ENABLE_ARM7_PRINT
// Init PrintServer for ARM7 (if specified)
OS_InitPrintServer();
#endif
//---- Init Arena (arenas except SUBPRIV-WRAM)
OS_InitArena();
//---- Init interProcessor I/F
// Sync with ARM7 to enable OS_GetConsoleType()
// PXI_Init() must be called before OS_InitArenaEx()
PXI_Init();
//---- Init Spinlock
OS_InitLock();
//---- Init Arena (extended main)
OS_InitArenaEx();
//---- Init IRQ Table
OS_InitIrqTable();
//---- Init IRQ Stack checker
OS_SetIrqStackChecker();
//---- Init Exception System
OS_InitException();
//---- Init MI (Wram bank and DMA0 arranged)
MI_Init();
//---- Init VCountAlarm
OS_InitVAlarm();
//---- Init VRAM exclusive System
OSi_InitVramExclusive();
//---- Init Thread System
#ifndef SDK_NO_THREAD
OS_InitThread();
#endif
//---- Init Reset System
#ifndef SDK_SMALL_BUILD
OS_InitReset();
#endif
//---- Init Cartridge
#ifndef SDK_TEG
// CTRDG_Init();
#endif
//---- Init Card
#ifndef SDK_SMALL_BUILD
// CARD_Init();
#endif
//---- Init Power Manager
#ifndef SDK_TEG
// PM_Init();
#endif
#else // SDK_ARM9
//----------------------------------------------------------------
// for ARM7
//---- Init Arena (SUBPRIV-WRAM arena)
OS_InitArena();
//---- Init interProcessor I/F
PXI_Init();
//---- Init Spinlock
OS_InitLock();
//---- Init IRQ Table
OS_InitIrqTable();
#define SDK_EXCEPTION_BUG
#ifndef SDK_EXCEPTION_BUG
//---- Init Exception System
OS_InitException();
#endif
//---- Init Tick
OS_InitTick();
//---- Init Alarm System
OS_InitAlarm();
//---- Init Thread System
OS_InitThread();
//---- Init Reset System
#ifndef SDK_SMALL_BUILD
OS_InitReset();
#endif
//---- Init Cartridge
#ifndef SDK_TEG
// CTRDG_Init();
#endif
#endif // SDK_ARM9
}
#pragma profile reset

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,932 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - OS -
File: os_spinLock.c
Copyright 2003-2006 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.
$Log: os_spinLock.c,v $
Revision 1.40 2006/01/18 02:11:30 kitase_hirotake
do-indent
Revision 1.39 2005/11/21 05:42:31 yasu
OSi_WaitByLoop inline
Revision 1.38 2005/11/17 10:11:36 yasu
OS_SpinWait SVC_WaitByLoop
Revision 1.37 2005/03/04 10:06:01 yasu
volatile
Revision 1.36 2005/03/01 01:57:00 yosizaki
copyright .
Revision 1.35 2005/02/28 05:26:29 yosizaki
do-indent.
Revision 1.34 2004/07/23 04:27:47 yada
OS_UnLock* restored for compatibility
Revision 1.33 2004/07/23 00:57:17 yada
rename OS_UnLock* -> OS_Unlock*
Revision 1.32 2004/07/22 08:21:17 yada
change some lockID's type u32->u16
Revision 1.31 2004/07/08 07:56:14 yosizaki
change around OS_LockCard in (TEG && ARM9)
Revision 1.30 2004/07/06 04:45:28 yosizaki
add assertion (TEG && ARM9)
Revision 1.29 2004/06/21 11:03:25 yada
fix comment. incorrect about return value.
Revision 1.28 2004/05/20 06:37:03 yasu
fix in Wait
Revision 1.27 2004/04/30 07:37:44 yada
HW_LOCKIDFLAG_MAIN/SUB -> HW_LOCK_ID_FLAG_MAIN/SUB
Revision 1.26 2004/04/30 00:18:00 yada
put HW_LOCKID_FLAG_MAIN/SUB
Revision 1.25 2004/04/20 06:56:11 yada
OS_TryLockCartridge() _ISDbgLib_AllocateEmualtor()
Revision 1.24 2004/03/30 06:09:29 yada
ldconst lda ldr = 使
Revision 1.23 2004/03/26 10:37:23 yada
OS_GetLockID(), OS_ReleaseLockID()
Revision 1.22 2004/03/25 09:44:24 yada
unlock, tryLock ARM7はSVC呼ぶように
Revision 1.21 2004/03/25 09:22:39 yada
FIQフラグの順序を変え効率をよくした
Cardのロック
Revision 1.20 2004/03/25 07:25:05 yada
OS_LockCard()
Revision 1.19 2004/03/25 02:38:30 yada
MI_SetMainMemoryPriority(), MI_SetCardProcessor(),MI_SetCartridgeProcessor()
MI_MIi_
Revision 1.18 2004/03/04 09:47:50 yada
IRQ/FIQ禁止にした
Revision 1.17 2004/02/13 08:58:52 yasu
nitro_sp.h -> nitro.h
Revision 1.16 2004/02/13 01:33:58 yada
ARM9とAMR7
Revision 1.15 2004/02/10 02:04:23 yada
subp include修正
Revision 1.14 2004/02/10 01:25:06 yada
UTL_* MI_
Revision 1.13 2004/02/05 07:09:02 yasu
change SDK prefix iris -> nitro
Revision 1.12 2004/02/05 02:00:37 yada
UTL_SwapWord os_utility.c
Revision 1.11 2004/01/18 02:25:37 yada
Revision 1.10 2004/01/14 01:44:01 yada
lockやunlockの途中実行関数を設定出来るようにしたことへの対応
Revision 1.9 2003/12/25 07:31:26 yada
Revision 1.8 2003/12/22 13:40:59 yasu
memorymap.h
Revision 1.7 2003/12/22 01:37:27 yada
WRAM, VRAM-c,d
Revision 1.6 2003/12/18 07:17:09 yada
red-sdk
Revision 1.5 2003/12/17 08:21:56 yasu
ARM7
Revision 1.4 2003/12/12 05:04:22 yasu
_ISDbgLib_*
Revision 1.3 2003/12/10 10:56:18 yasu
ISDPrint SpinLock
OS_LockWord() -> OS_LockByWord()
volatile LockWord -> OS_LockWord
Revision 1.2 2003/12/08 12:20:43 yada
12/3 REDSDK
Revision 1.1 2003/11/29 01:25:46 yada
Revision 1.2 2003/11/28 01:56:22 yada
REDSDKの03-11-27
Revision 1.1 2003/11/06 09:30:39 yada
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <nitro.h>
void _ISDbgLib_Initialize(void);
void _ISDbgLib_AllocateEmualtor(void);
void _ISDbgLib_FreeEmulator(void);
s32 OS_LockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void));
s32 OS_UnlockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void));
s32 OS_TryLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*crtlFuncp) (void));
static s32 OSi_DoLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
BOOL disableFiq);
static s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
BOOL disableFIQ);
static s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
BOOL disableFIQ);
static void OSi_AllocateCartridgeBus(void);
static void OSi_FreeCartridgeBus(void);
static void OSi_AllocateCardBus(void);
static void OSi_FreeCardBus(void);
static void OSi_WaitByLoop(void);
#ifdef SDK_ARM9
#define OSi_ASSERT_ID( id ) SDK_ASSERTMSG( id >= OS_MAINP_LOCK_ID_START && id <= OS_MAINP_SYSTEM_LOCK_ID, \
"lock ID %d is out of bounds", id )
#else
#define OSi_ASSERT_ID( id ) SDK_ASSERTMSG( id >= OS_SUBP_LOCK_ID_START && id <= OS_SUBP_SYSTEM_LOCK_ID, \
"lock ID %d is out of bounds", id )
#endif
#define OSi_LOCKID_INITIAL_FLAG_0 0xffffffff
#define OSi_LOCKID_INITIAL_FLAG_1 0xffff0000
#ifdef SDK_ARM9
#define OSi_ANYP_LOCK_ID_FLAG HW_LOCK_ID_FLAG_MAIN
#define OSi_ANYP_LOCK_ID_START OS_MAINP_LOCK_ID_START
#else
#define OSi_ANYP_LOCK_ID_FLAG HW_LOCK_ID_FLAG_SUB
#define OSi_ANYP_LOCK_ID_START OS_SUBP_LOCK_ID_START
#endif
//======================================================================
// DUMMY LOOP
//======================================================================
/*---------------------------------------------------------------------------*
Name: OSi_WaitByLoop
Description: wait by for() loop
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static inline void OSi_WaitByLoop(void)
{
#ifdef SDK_DEBUGGER_ARM
OS_SpinWait(0x1000);
#else
SVC_WaitByLoop(0x1000 / 4);
#endif
}
//======================================================================
// INITIALIZE
//======================================================================
/*---------------------------------------------------------------------------*
Name: OS_InitLock
Description: initialize system lock variable
and privilege to access shared resources
* cartridge exclusive control area is not cleared
because debugger uses.
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void OS_InitLock(void)
{
static BOOL isInitialized = FALSE;
OSLockWord *lockp;
if (isInitialized)
return; // do it only once
isInitialized = TRUE;
lockp = (OSLockWord *)HW_INIT_LOCK_BUF;
#ifdef SDK_ARM9
{
//
// Code for MAIN PROCESSOR
//
lockp->lockFlag = 0;
(void)OS_LockByWord(OS_MAINP_SYSTEM_LOCK_ID - 1, lockp, NULL);
// サブプロセッサによる共有リソース未使用チェック
while (lockp->extension != 0)
{
OSi_WaitByLoop();
}
// ロックIDカウンタ用フラグ 初期化
((u32 *)OSi_ANYP_LOCK_ID_FLAG)[0] = OSi_LOCKID_INITIAL_FLAG_0;
((u32 *)OSi_ANYP_LOCK_ID_FLAG)[1] = OSi_LOCKID_INITIAL_FLAG_1;
// ロックバッファ クリア(カートリッジ領域以外)
MI_CpuClear32((void *)HW_SHARED_LOCK_BUF, HW_CTRDG_LOCK_BUF - HW_SHARED_LOCK_BUF);
// NITRO カードアクセス権 → サブプロセッサ
MIi_SetCardProcessor(MI_PROCESSOR_ARM7);
// カートリッジアクセス権 → サブプロセッサ
MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7);
#ifndef SDK_FINALROM
_ISDbgLib_Initialize();
#endif
(void)OS_UnlockByWord(OS_MAINP_SYSTEM_LOCK_ID - 1, lockp, NULL);
(void)OS_LockByWord(OS_MAINP_SYSTEM_LOCK_ID, lockp, NULL);
}
#else // SDK_ARM7
{
//
// Code for SUB PROCESSOR
//
lockp->extension = 0;
while (lockp->ownerID != OS_MAINP_SYSTEM_LOCK_ID)
{
OSi_WaitByLoop();
}
#ifndef SDK_FINALROM
_ISDbgLib_Initialize();
#endif
// ロックIDカウンタ用フラグ 初期化
((u32 *)OSi_ANYP_LOCK_ID_FLAG)[0] = OSi_LOCKID_INITIAL_FLAG_0;
((u32 *)OSi_ANYP_LOCK_ID_FLAG)[1] = OSi_LOCKID_INITIAL_FLAG_1;
// メインプロセッサとの初期化終了の同期
lockp->extension = OS_SUBP_SYSTEM_LOCK_ID;
}
#endif
}
//======================================================================
// LOCK
//======================================================================
/*---------------------------------------------------------------------------*
Name: OSi_DoLockByWord
Description: do spinlock. keep to try till success
Arguments: lockID lock ID
lockp pointer to lock variable
ctrlFuncp function
disableFiq whether do disable fiq
Returns: OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
static s32 OSi_DoLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
BOOL disableFiq)
{
s32 lastLockFlag;
while ((lastLockFlag =
OSi_DoTryLockByWord(lockID, lockp, ctrlFuncp, disableFiq)) > OS_LOCK_SUCCESS)
{
OSi_WaitByLoop();
}
return lastLockFlag;
}
/*---------------------------------------------------------------------------*
Name: OS_LockByWord
Description: do spinlock. keep to try till success.
Arguments: lockID lock ID
lockp pointer to lock variable
ctrlFuncp function
Returns: OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
s32 OS_LockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
{
return OSi_DoLockByWord(lockID, lockp, ctrlFuncp, FALSE);
}
/*---------------------------------------------------------------------------*
Name: OS_LockByWord_IrqAndFiq
Description: do spinlock. keep to try till success.
disable irq and fiq
Arguments: lockID lock ID
lockp pointer to lock variable
ctrlFuncp function
Returns: OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
s32 OS_LockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
{
return OSi_DoLockByWord(lockID, lockp, ctrlFuncp, TRUE);
}
//======================================================================
// UNLOCK
//======================================================================
/*---------------------------------------------------------------------------*
Name: OSi_DoUnlockByWord
Description: do unlock lock.
Arguments: lockID lock ID
lockp pointer to unlock variable
ctrlFuncp function
disableFiq whether do disable fiq
Returns: OS_UNLOCK_SUCCESS success
OS_UNLOCK_ERROR error of unlocking lock
*---------------------------------------------------------------------------*/
static s32 OSi_DoUnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
BOOL disableFIQ)
{
OSIntrMode lastInterrupts;
OSi_ASSERT_ID(lockID);
if (lockID != lockp->ownerID)
{
return OS_UNLOCK_ERROR;
}
//---- Disable irq/fiq or irq
lastInterrupts = (disableFIQ) ? OS_DisableInterrupts_IrqAndFiq() : OS_DisableInterrupts();
lockp->ownerID = 0;
if (ctrlFuncp)
{
ctrlFuncp();
}
lockp->lockFlag = 0;
//---- Restore irq/fiq or irq
if (disableFIQ)
{
(void)OS_RestoreInterrupts_IrqAndFiq(lastInterrupts);
}
else
{
(void)OS_RestoreInterrupts(lastInterrupts);
}
return OS_UNLOCK_SUCCESS;
}
/*---------------------------------------------------------------------------*
Name: OS_UnlockByWord
Description: do unlock lock.
disable irq and fiq
Arguments: lockID lock ID
lockp pointer to unlock variable
ctrlFuncp function
Returns: OS_UNLOCK_SUCCESS success
OS_UNLOCK_ERROR error of unlocking lock
*---------------------------------------------------------------------------*/
s32 OS_UnlockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
{
return OSi_DoUnlockByWord(lockID, lockp, ctrlFuncp, FALSE);
}
//---- for compatibility to old name ('UnLock' <-> 'Unlock')
s32 OS_UnLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
{
return OSi_DoUnlockByWord(lockID, lockp, ctrlFuncp, FALSE);
}
/*---------------------------------------------------------------------------*
Name: OS_UnlockByWord_IrqAndFiq
Description: do unlock lock.
Arguments: lockID lock ID
lockp pointer to unlock variable
ctrlFuncp function
Returns: OS_UNLOCK_SUCCESS success
OS_UNLOCK_ERROR error of unlocking lock
*---------------------------------------------------------------------------*/
s32 OS_UnlockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
{
return OSi_DoUnlockByWord(lockID, lockp, ctrlFuncp, TRUE);
}
//======================================================================
// TRY LOCK
//======================================================================
/*---------------------------------------------------------------------------*
Name: OSi_DoTryLockByWord
Description: try to lock spinlock only once.
Arguments: lockID lock ID
lockp pointer to trying to lock variable
ctrlFuncp function
disableFiq whether do disable fiq
Returns: >0 value previous locked id
OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
static s32 OSi_DoTryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void),
BOOL disableFIQ)
{
s32 lastLockFlag;
OSIntrMode lastInterrupts;
OSi_ASSERT_ID(lockID);
//---- Disable irq/fiq or irq
lastInterrupts = (disableFIQ) ? OS_DisableInterrupts_IrqAndFiq() : OS_DisableInterrupts();
lastLockFlag = (s32)MI_SwapWord(lockID, &lockp->lockFlag);
if (lastLockFlag == OS_LOCK_SUCCESS)
{
if (ctrlFuncp)
{
ctrlFuncp();
}
lockp->ownerID = lockID;
}
//---- Restore irq/fiq or irq
if (disableFIQ)
{
(void)OS_RestoreInterrupts_IrqAndFiq(lastInterrupts);
}
else
{
(void)OS_RestoreInterrupts(lastInterrupts);
}
return lastLockFlag;
}
/*---------------------------------------------------------------------------*
Name: OS_TryLockByWord
Description: try to lock spinlock only once.
Arguments: lockID lock ID
lockp pointer to trying to lock variable
ctrlFuncp function
Returns: >0 value previous locked id
OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
s32 OS_TryLockByWord(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
{
return OSi_DoTryLockByWord(lockID, lockp, ctrlFuncp, FALSE);
}
/*---------------------------------------------------------------------------*
Name: OS_TryLockByWord_IrqAndFiq
Description: try to lock spinlock only once.
Arguments: lockID lock ID
lockp pointer to trying to lock variable
ctrlFuncp function
Returns: >0 value previous locked id
OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
s32 OS_TryLockByWord_IrqAndFiq(u16 lockID, OSLockWord *lockp, void (*ctrlFuncp) (void))
{
return OSi_DoTryLockByWord(lockID, lockp, ctrlFuncp, TRUE);
}
//======================================================================
// CARTRIDGE
//======================================================================
/*---------------------------------------------------------------------------*
Name: OS_LockCartridge
Description: lock cartridge
Arguments: lockID lock ID
Returns: OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
s32 OS_LockCartridge(u16 lockID)
{
s32 lastLockFlag;
OSi_ASSERT_ID(lockID);
lastLockFlag =
OSi_DoLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus, TRUE);
#ifndef SDK_FINALROM
_ISDbgLib_AllocateEmualtor();
#endif
return lastLockFlag;
}
/*---------------------------------------------------------------------------*
Name: OS_UnlockCartridge
Description: unlock cartridge
Arguments: lockID lock ID
Returns: OS_UNLOCK_SUCCESS success
OS_UNLOCK_ERROR error of unlocking lock
*---------------------------------------------------------------------------*/
s32 OS_UnlockCartridge(u16 lockID)
{
s32 lastLockFlag;
OSi_ASSERT_ID(lockID);
#ifndef SDK_FINALROM
_ISDbgLib_FreeEmulator();
#endif
lastLockFlag =
OSi_DoUnlockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_FreeCartridgeBus, TRUE);
return lastLockFlag;
}
//---- for compatibility to old name ('UnLock' <-> 'Unlock')
asm s32 OS_UnLockCartridge( u16 lockID )
{
ldr r1, =OS_UnlockCartridge
bx r1
}
/*---------------------------------------------------------------------------*
Name: OS_TryLockCartridge
Description: try to lock cartridge
Arguments: lockID lock ID
Returns: >0 value previous locked id
OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
s32 OS_TryLockCartridge(u16 lockID)
{
s32 lastLockFlag;
lastLockFlag =
OSi_DoTryLockByWord(lockID, (OSLockWord *)HW_CTRDG_LOCK_BUF, OSi_AllocateCartridgeBus,
TRUE);
#ifndef SDK_FINALROM
if (lastLockFlag == OS_LOCK_SUCCESS)
{
_ISDbgLib_AllocateEmualtor();
}
#endif
return lastLockFlag;
}
//----------------
static void OSi_AllocateCartridgeBus(void)
{
#ifdef SDK_ARM9
MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM9); // Cartridge for MAIN
#endif
}
//----------------
static void OSi_FreeCartridgeBus(void)
{
#ifdef SDK_ARM9
MIi_SetCartridgeProcessor(MI_PROCESSOR_ARM7); // Cartridge for SUB
#endif
}
//======================================================================
// CARD
//======================================================================
/*
* 20040708:yosizaki
* TEG ARM9 ARM7 .
* ARM9 ARM 7 .
* , ID .
*/
#if defined(SDK_TEG)
static u32 osi_card_lock = OS_LOCK_ID_ERROR;
static s32 OSi_LockCardID(u16 lockID, BOOL blocking)
{
s32 ret = OS_LOCK_ID_ERROR;
for (;;)
{
OSIntrMode bak_psr = OS_DisableInterrupts();
ret = osi_card_lock;
if (ret == OS_LOCK_ID_ERROR)
{
osi_card_lock = lockID;
ret = OS_LOCK_SUCCESS;
}
(void)OS_RestoreInterrupts(bak_psr);
if ((ret != OS_LOCK_SUCCESS) && blocking)
{
OSi_WaitByLoop();
continue;
}
break;
}
return ret;
}
static s32 OSi_UnlockCardID(u16 lockID)
{
if (osi_card_lock != lockID)
return OS_UNLOCK_ERROR;
osi_card_lock = OS_LOCK_ID_ERROR;
return OS_UNLOCK_SUCCESS;
}
#endif
/*---------------------------------------------------------------------------*
Name: OS_LockCard
Description: lock card
Arguments: lockID lock ID
Returns: OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
s32 OS_LockCard(u16 lockID)
{
OSi_ASSERT_ID(lockID);
#if defined(SDK_TEG)
return OSi_LockCardID(lockID, TRUE);
#else
return OS_LockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_AllocateCardBus);
#endif
}
/*---------------------------------------------------------------------------*
Name: OS_UnlockCard
Description: unlock card
Arguments: lockID lock ID
Returns: OS_UNLOCK_SUCCESS success
OS_UNLOCK_ERROR error of unlocking lock
*---------------------------------------------------------------------------*/
s32 OS_UnlockCard(u16 lockID)
{
OSi_ASSERT_ID(lockID);
#if defined(SDK_TEG)
return OSi_UnlockCardID(lockID);
#else
return OS_UnlockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_FreeCardBus);
#endif
}
//---- for compatibility to old name ('UnLock' <-> 'Unlock')
asm s32 OS_UnLockCard( u16 lockID )
{
ldr r1, =OS_UnlockCard
bx r1
}
/*---------------------------------------------------------------------------*
Name: OS_TryLockCard
Description: try to lock card
Arguments: lockID lock ID
Returns: >0 value previous locked id
OS_LOCK_SUCCESS success to lock
*---------------------------------------------------------------------------*/
s32 OS_TryLockCard(u16 lockID)
{
#if defined(SDK_TEG)
return OSi_LockCardID(lockID, FALSE);
#else
return OS_TryLockByWord(lockID, (OSLockWord *)HW_CARD_LOCK_BUF, OSi_AllocateCardBus);
#endif
}
//----------------
static void OSi_AllocateCardBus(void)
{
#ifdef SDK_ARM9
MIi_SetCardProcessor(MI_PROCESSOR_ARM9); // Card for MAIN
#endif
}
//----------------
static void OSi_FreeCardBus(void)
{
#ifdef SDK_ARM9
MIi_SetCardProcessor(MI_PROCESSOR_ARM7); // Card for SUB
#endif
}
//======================================================================
// READ OWNER
//======================================================================
/*---------------------------------------------------------------------------*
Name: OS_ReadOwnerOfLockWord
Description: read owner id of lock
ID 0
ID 0
Arguments: lockp pointer to lock
Returns: owner id
*---------------------------------------------------------------------------*/
u16 OS_ReadOwnerOfLockWord(OSLockWord *lockp)
{
return lockp->ownerID;
}
//======================================================================
// LOCK ID
//======================================================================
/*---------------------------------------------------------------------------*
Name: OS_GetLockID
Description: get lock ID
Arguments: None.
Returns: OS_LOCK_ID_ERROR, if fail to get ID
if ARM9
0x400x6f lockID
else if ARM7
0x800xaf lockID
endif
*Notice: ID is allocated only 48 pattern at a highest.
IDは48種類までしか割り当てることができません
1IDを使用するようにして下さい
*---------------------------------------------------------------------------*/
#include <nitro/code32.h>
asm s32 OS_GetLockID( void )
{
//---- フラグの前32ビットに立っているフラグ(空きID)があるか
ldr r3, =OSi_ANYP_LOCK_ID_FLAG
ldr r1, [r3, #0]
#ifdef SDK_ARM9
clz r2, r1
#else
mov r2, #0
mov r0, #0x80000000
_lp1:
tst r1, r0
bne _ex1
add r2, r2, #1
cmp r2, #32
beq _ex1
mov r0, r0, lsr #1
b _lp1
_ex1:
#endif
cmp r2, #32
//---- 空きIDがあるとき
movne r0, #OSi_ANYP_LOCK_ID_START
bne _1
//---- 後ろ323ビットに立っているフラグ(空きID)があるか
add r3, r3, #4
ldr r1, [r3, #0]
#ifdef SDK_ARM9
clz r2, r1
#else
mov r2, #0
mov r0, #0x80000000
_lp2:
tst r1, r0
bne _ex2
add r2, r2, #1
cmp r2, #32
beq _ex2
mov r0, r0, lsr #1
b _lp2
_ex2:
#endif
cmp r2, #32
//---- 空きIDがない
ldr r0, =OS_LOCK_ID_ERROR
bxeq lr
//---- 空きIDがあるとき
mov r0, #OSi_ANYP_LOCK_ID_START+32
_1:
add r0, r0, r2
mov r1, #0x80000000
mov r1, r1, lsr r2
ldr r2, [r3, #0]
bic r2, r2, r1
str r2, [r3, #0]
bx lr
}
/*---------------------------------------------------------------------------*
Name: OS_ReleaseLockID
Description: release lock ID
Arguments: id to tend to release
Returns: None.
*---------------------------------------------------------------------------*/
asm void OS_ReleaseLockID( register u16 lockID )
{
#pragma unused( lockID )
ldr r3, =OSi_ANYP_LOCK_ID_FLAG
cmp r0, #OSi_ANYP_LOCK_ID_START+32
addpl r3, r3, #4
subpl r0, r0, #OSi_ANYP_LOCK_ID_START+32
submi r0, r0, #OSi_ANYP_LOCK_ID_START
mov r1, #0x80000000
mov r1, r1, lsr r0
ldr r2, [r3, #0]
orr r2, r2, r1
str r2, [r3, #0]
bx lr
}
#include <nitro/codereset.h>

View File

@ -0,0 +1,379 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - OS
File: os_system.c
Copyright 2003-2006 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.
$Log: os_system.c,v $
Revision 1.33 2006/01/18 02:11:30 kitase_hirotake
do-indent
Revision 1.32 2006/01/10 06:07:34 okubata_ryoma
OS_Terminate関連の関数を別ファイルへ移動
Revision 1.31 2005/12/08 07:06:09 okubata_ryoma
small fix
Revision 1.30 2005/11/28 04:26:56 seiki_masashi
small fix
Revision 1.29 2005/11/25 08:30:20 terui
OS_WaitVBlankIntr内でSVC_WaitByLoopを呼ぶように改定
Revision 1.28 2005/11/22 09:11:28 yosizaki
support SDK_ENABLE_ARM7_PRINT.
Revision 1.27 2005/10/07 08:21:16 yada
add OS_WaitVBlankIntr()
Revision 1.26 2005/09/09 04:36:22 yada
print "\n" before exit string
Revision 1.25 2005/09/01 00:31:19 yada
avoid warning at FINALROM build in OS_Exit()
Revision 1.24 2005/08/31 12:02:32 yada
add OS_Exit()
Revision 1.23 2005/03/04 11:09:27 yasu
__declspec(weak) SDK_WEAK_SYMBOL
Revision 1.22 2005/02/28 05:26:29 yosizaki
do-indent.
Revision 1.21 2005/02/18 08:51:35 yasu
Revision 1.20 2005/02/18 06:22:20 yasu
Signed/Unsigned
Revision 1.19 2004/11/24 10:55:51 yada
Let OS_Terminate() and OS_Halt() be weak symbols.
Revision 1.18 2004/11/24 04:33:51 yada
just fix typo
Revision 1.17 2004/09/02 06:22:17 yada
only change comment
Revision 1.16 2004/05/24 04:48:29 yada
OS_WaitIntr() -> OS_WaitInterrupt()
Revision 1.15 2004/05/20 06:36:24 yasu
ARM7: Use SVC_WaitByLoop in OS_SpinWait
Revision 1.14 2004/05/10 11:22:19 yada
add OS_WaitIntr()
Revision 1.13 2004/04/06 11:22:42 yada
add "bx lr" in OS_Halt() for ARM9
Revision 1.12 2004/04/06 01:37:45 yada
OS_Terminate()
Revision 1.11 2004/03/29 02:56:32 yada
OS_Halt() SVC_Halt()
Revision 1.10 2004/03/26 02:53:46 yasu
apply systemcall 2 for OS_Halt at ARM7
Revision 1.9 2004/03/04 09:47:04 yada
OSDisableInterrupt() IRQ
IRQ/FIQ
Revision 1.8 2004/02/27 01:55:00 yasu
add OS_SpinWait, move OS_Halt into os_system.c
Revision 1.7 2004/02/13 08:45:30 yasu
uncomment all if ARM7
Revision 1.6 2004/02/10 12:12:43 yada
OS_GetDTCMAddress, OS_GetITCMAddress os_tcm.cに移行
Revision 1.5 2004/02/10 11:21:47 yada
(none)
Revision 1.4 2004/02/10 11:19:56 yada
Interrupt inline
Revision 1.3 2004/02/10 02:29:27 yada
ARM9にしか有効でないコードのifdef
Revision 1.2 2004/02/10 01:25:30 yasu
include code32.h
Revision 1.1 2004/02/09 11:36:55 yada
OS_GetDTCMAddress, OS_GetITCMAddress
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <nitro/os.h>
#include <nitro/code32.h>
//============================================================================
// CONTROL INTERRUPT
//============================================================================
/*---------------------------------------------------------------------------*
Name: OS_EnableInterrupts
Description: Set CPSR to enable irq interrupts
Arguments: None.
Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/
asm OSIntrMode OS_EnableInterrupts( void )
{
mrs r0, cpsr
bic r1, r0, #HW_PSR_IRQ_DISABLE
msr cpsr_c, r1
and r0, r0, #HW_PSR_IRQ_DISABLE
bx lr
}
/*---------------------------------------------------------------------------*
Name: OS_DisableInterrupts
Description: Set CPSR to disable irq interrupts
Arguments: None.
Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/
asm OSIntrMode OS_DisableInterrupts( void )
{
mrs r0, cpsr
orr r1, r0, #HW_PSR_IRQ_DISABLE
msr cpsr_c, r1
and r0, r0, #HW_PSR_IRQ_DISABLE
bx lr
}
/*---------------------------------------------------------------------------*
Name: OS_RestoreInterrupts
Description: Restore CPSR irq interrupt
Arguments: state of irq interrupt bit
Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/
asm OSIntrMode OS_RestoreInterrupts( register OSIntrMode state )
{
mrs r1, cpsr
bic r2, r1, #HW_PSR_IRQ_DISABLE
orr r2, r2, r0
msr cpsr_c, r2
and r0, r1, #HW_PSR_IRQ_DISABLE
bx lr
}
/*---------------------------------------------------------------------------*
Name: OS_EnableInterrupts_IrqAndFiq
Description: Set CPSR to enable irq and fiq interrupts
Arguments: None.
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/
asm OSIntrMode OS_EnableInterrupts_IrqAndFiq( void )
{
mrs r0, cpsr
bic r1, r0, #HW_PSR_IRQ_FIQ_DISABLE
msr cpsr_c, r1
and r0, r0, #HW_PSR_IRQ_FIQ_DISABLE
bx lr
}
/*---------------------------------------------------------------------------*
Name: OS_DisableInterrupts_IrqAndFiq
Description: Set CPSR to disable irq and fiq interrupts
Arguments: None.
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/
asm OSIntrMode OS_DisableInterrupts_IrqAndFiq( void )
{
mrs r0, cpsr
orr r1, r0, #HW_PSR_IRQ_FIQ_DISABLE
msr cpsr_c, r1
and r0, r0, #HW_PSR_IRQ_FIQ_DISABLE
bx lr
}
/*---------------------------------------------------------------------------*
Name: OS_RestoreInterrupts_IrqAndFiq
Description: Restore CPSR irq and fiq interrupt
Arguments: state of irq and fiq interrupt bit
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/
asm OSIntrMode OS_RestoreInterrupts_IrqAndFiq( register OSIntrMode state )
{
mrs r1, cpsr
bic r2, r1, #HW_PSR_IRQ_FIQ_DISABLE
orr r2, r2, r0
msr cpsr_c, r2
and r0, r1, #HW_PSR_IRQ_FIQ_DISABLE
bx lr
}
/*---------------------------------------------------------------------------*
Name: OS_GetCpsrIrq
Description: Get current state of CPSR irq interrupt
Arguments: None
Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/
asm OSIntrMode_Irq OS_GetCpsrIrq( void )
{
mrs r0, cpsr
and r0, r0, #HW_PSR_IRQ_DISABLE
bx lr
}
//============================================================================
// PROCESSER MODE
//============================================================================
/*---------------------------------------------------------------------------*
Name: OS_GetProcMode
Description: Get processor mode from CPSR
Arguments: None.
Returns: CPU processor mode (field 0x10-0x1f)
*---------------------------------------------------------------------------*/
asm OSProcMode OS_GetProcMode( void )
{
mrs r0, cpsr
and r0, r0, #HW_PSR_CPU_MODE_MASK
bx lr
}
#include <nitro/codereset.h>
//============================================================================
// WAIT
//============================================================================
/*---------------------------------------------------------------------------*
Name: OS_SpinWait
Description: Spin and Wait for specified CPU cycles at least
Arguments: cycles waiting CPU cycle
Returns: None
*---------------------------------------------------------------------------*/
#if defined(SDK_ARM9) || defined(SDK_DEBUGGER_ARM)
#include <nitro/code32.h>
asm void OS_SpinWait( u32 cycle )
{
_1: subs r0, r0, #4 // 3 cycle
bcs _1 // 1 cycle
bx lr
}
#include <nitro/codereset.h>
#else
void OS_SpinWait(u32 cycle)
{
SVC_WaitByLoop((s32)cycle / 4);
}
#endif
/*---------------------------------------------------------------------------*
Name: OS_WaitInterrupt
Description: wait specifiled interrupt.
the difference between OS_WaitIrq and OS_WaitInterrupt is:
in waiting interrupt
OS_WaitIrq does switch thread,
OS_WaitInterrupt doesn't switch thread.
OS_WaitIrq wait by using OS_SleepThread() with threadQueue,
OS_WaitInterrupt wait by using OS_Halt().
if SDK_NO_THREAD defined, 2 functions become same.
Arguments: clear TRUE if want to clear interrupt flag before wait.
FALSE if not.
irqFlags bit of interrupts to wait for
Returns: None
*---------------------------------------------------------------------------*/
void OS_WaitInterrupt(BOOL clear, OSIrqMask irqFlags)
{
OSIntrMode cpsrIrq = OS_DisableInterrupts();
BOOL ime = OS_EnableIrq();
if (clear)
{
(void)OS_ClearIrqCheckFlag(irqFlags);
}
while (!(OS_GetIrqCheckFlag() & irqFlags))
{
OS_Halt();
(void)OS_EnableInterrupts();
(void)OS_DisableInterrupts();
}
(void)OS_ClearIrqCheckFlag(irqFlags);
(void)OS_RestoreIrq(ime);
(void)OS_RestoreInterrupts(cpsrIrq);
}
/*---------------------------------------------------------------------------*
Name: OS_WaitVBlankIntr
Description: wait till vblank interrupt occurred.
the difference between SVC_WaitVBlankIntr and OS_WaitVBlankIntr is:
OS_WaitVBlankIntr does switch thread,
SVC_WaitVBlankIntr doesn't switch thread.
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void OS_WaitVBlankIntr(void)
{
#ifdef SDK_DEBUGGER_ARM
OS_SpinWait(4);
#else
SVC_WaitByLoop(1);
#endif
#if defined(SDK_ENABLE_ARM7_PRINT) && defined(SDK_ARM9)
// PrintServer for ARM7 (if specified)
OS_PrintServer();
#endif
OS_WaitIrq(TRUE, OS_IE_V_BLANK);
}

View File

@ -0,0 +1,63 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries_sp - os
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#SUBMAKES = Makefile.CALLTRACE \
# Makefile.FUNCTIONCOST
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
TWL_CODEGEN_ALL ?= TRUE
# Codegen for sub processer
TWL_PROC = ARM7
SRCDIR = ../common .
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/os/common/src \
$(TWL_NITROSDK_ROOT)/build/libraries/os/ARM7/src \
SRCS = \
osemu.c \
osemu2.c \
TARGET_LIB = libvlink_sp$(TWL_LIBSUFFIX).a
#----------------------------------------------------------------------------
# DEBUG版ビルドの場合、RELEASE版でビルドして
# DEBUG版のライブラリを装います。
ifdef NITRO_DEBUG
NITRO_BUILD_TYPE = RELEASE
endif
include $(TWLSDK_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,61 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries - os
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
SUBMAKES =
#----------------------------------------------------------------------------
# build ARM & THUMB libraries
TWL_CODEGEN_ALL ?= True
SRCDIR = ../common .
SRCDIR += $(TWL_NITROSDK_ROOT)/build/libraries/os/common/src \
$(TWL_NITROSDK_ROOT)/build/libraries/os/ARM9/src \
SRCS = \
osemu.c \
osemu2.c \
TARGET_LIB = libvlink$(TWL_LIBSUFFIX).a
include $(TWLSDK_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(TWL_INSTALL_LIBDIR)
ifdef NITRO_CALLTRACE
CCFLAGS += -DOS_PROFILE_AVAILABLE -DOS_PROFILE_CALL_TRACE
endif
ifdef NITRO_FUNCTIONCOST
CCFLAGS += -DOS_PROFILE_AVAILABLE -DOS_PROFILE_FUNCTION_COST
endif
ifdef NITRO_TCM_APPLY
CCFLAGS += -DSDK_TCM_APPLY
endif
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,34 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - libraries - vlink
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = ARM9
#ifdef TWL_WITH_ARM7
SUBDIRS += ARM7
#endif
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,511 @@
//#include <kernel.h>
#include <twl.h>
#include <twl/vlink.h>
/****************************************/
// vsnprintf from NitroSDK
typedef struct dst_string_tag
{
size_t len;
char *cur;
char *base;
} dst_string;
static void string_put_char(dst_string * p, char c)
{
if (p->len > 0)
*p->cur = c, --p->len;
++p->cur;
}
static void string_fill_char(dst_string * p, char c, int n)
{
if (n > 0)
{
size_t i, k = p->len;
if (k > (size_t) n)
k = (size_t) n;
for (i = 0; i < k; ++i)
p->cur[i] = c;
p->len -= k;
p->cur += n;
}
}
static void string_put_string(dst_string * p, const char *s, int n)
{
if (n > 0)
{
size_t i, k = p->len;
if (k > (size_t) n)
k = (size_t) n;
for (i = 0; i < k; ++i)
p->cur[i] = s[i];
p->len -= k;
p->cur += n;
}
}
static int my_vsnprintf(char *dst, size_t len, const char *fmt, va_list vlist)
{
char buf[24];
int n_buf;
char prefix[2];
int n_prefix;
const char *s = fmt;
dst_string str;
str.len = len, str.cur = str.base = dst;
while (*s)
{
if ((unsigned int)(((unsigned char)*s ^ 0x20) - 0xA1) < 0x3C)
{
/* Shift JIS character */
string_put_char(&str, *s++);
if (*s)
string_put_char(&str, *s++);
}
else if (*s != '%')
{
/* normal ASCII character */
string_put_char(&str, *s++);
}
else
{
/* output with format */
enum
{
flag_blank = 000001, /* ' ' */
flag_plus = 000002, /* '+' */
flag_sharp = 000004, /* '#' */
flag_minus = 000010, /* '-' */
flag_zero = 000020, /* '0' */
flag_l1 = 000040, /* "l" */
flag_h1 = 000100, /* "h" */
flag_l2 = 000200, /* "ll" */
flag_h2 = 000400, /* "hh" */
flag_unsigned = 010000, /* 'o', 'u', ... */
flag_end
};
int flag = 0, width = 0, precision = -1, radix = 10;
char hex_char = 'a' - 10;
const char *p_start = s;
/* flags */
for (;;)
{
switch (*++s)
{
case '+':
if (s[-1] != ' ')
break;
flag |= flag_plus;
continue;
case ' ':
flag |= flag_blank;
continue;
case '-':
flag |= flag_minus;
continue;
case '0':
flag |= flag_zero;
continue;
}
break;
}
/* width */
if (*s == '*')
{
++s, width = va_arg(vlist, int);
if (width < 0)
width = -width, flag |= flag_minus;
}
else
{
while ((*s >= '0') && (*s <= '9'))
width = (width * 10) + *s++ - '0';
}
/* precision */
if (*s == '.')
{
++s, precision = 0;
if (*s == '*')
{
++s, precision = va_arg(vlist, int);
if (precision < 0)
precision = -1;
}
else
{
while ((*s >= '0') && (*s <= '9'))
precision = (precision * 10) + *s++ - '0';
}
}
/* option */
switch (*s)
{
case 'h':
if (*++s != 'h')
flag |= flag_h1;
else
++s, flag |= flag_h2;
break;
case 'l':
if (*++s != 'l')
flag |= flag_l1;
else
++s, flag |= flag_l2;
break;
}
/* type */
switch (*s)
{
case 'd': /* signed decimal */
case 'i': /* signed decimal */
goto put_integer;
case 'o': /* unsigned octal */
radix = 8;
flag |= flag_unsigned;
goto put_integer;
case 'u': /* unsigned decimal */
flag |= flag_unsigned;
goto put_integer;
case 'X': /* unsigned hexadecimal */
hex_char = 'A' - 10;
goto put_hexadecimal;
case 'x': /* unsigned hexadecimal */
goto put_hexadecimal;
case 'p': /* pointer */
/* equal to code warrior */
flag |= flag_sharp;
precision = 8;
goto put_hexadecimal;
case 'c': /* character */
if (precision >= 0)
goto put_invalid;
{
int c = va_arg(vlist, int);
width -= 1;
if (flag & flag_minus)
{
string_put_char(&str, (char)c);
string_fill_char(&str, ' ', width);
}
else
{
char pad = (char)((flag & flag_zero) ? '0' : ' ');
string_fill_char(&str, pad, width);
string_put_char(&str, (char)c);
}
++s;
}
break;
case 's': /* string */
{
int n_buf = 0;
const char *p_buf = va_arg(vlist, const char *);
if (precision < 0)
{
while (p_buf[n_buf])
++n_buf;
}
else
{
while ((n_buf < precision) && p_buf[n_buf])
++n_buf;
}
width -= n_buf;
if (flag & flag_minus)
{
string_put_string(&str, p_buf, n_buf);
string_fill_char(&str, ' ', width);
}
else
{
char pad = (char)((flag & flag_zero) ? '0' : ' ');
string_fill_char(&str, pad, width);
string_put_string(&str, p_buf, n_buf);
}
++s;
}
break;
case 'n': /* store the number of output */
{
int pos = str.cur - str.base;
if (flag & flag_h2)
;
else if (flag & flag_h1)
*va_arg(vlist, signed short *) = (signed short)pos;
else if (flag & flag_l2)
*va_arg(vlist, u64 *) = (u64)pos;
else
*va_arg(vlist, signed int *) = (signed int)pos;
}
++s;
break;
case '%': /* output '%' */
if (p_start + 1 != s)
goto put_invalid;
string_put_char(&str, *s++);
break;
default: /* invalid type */
goto put_invalid;
put_invalid:
string_put_string(&str, p_start, s - p_start);
break;
put_hexadecimal:
radix = 16;
flag |= flag_unsigned;
put_integer:
{
u64 val = 0;
n_prefix = 0;
if (flag & flag_minus)
flag &= ~flag_zero;
if (precision < 0)
precision = 1;
else
flag &= ~flag_zero;
if (flag & flag_unsigned)
{
if (flag & flag_h2)
val = (unsigned char)va_arg(vlist, int);
else if (flag & flag_h1)
val = (unsigned short)va_arg(vlist, int);
else if (flag & flag_l2)
val = va_arg(vlist, u64);
else
val = va_arg(vlist, unsigned long);
flag &= ~(flag_plus | flag_blank);
if (flag & flag_sharp)
{
if (radix == 16)
{
if (val != 0)
{
prefix[0] = (char)(hex_char + (10 + 'x' - 'a'));
prefix[1] = '0';
n_prefix = 2;
}
}
else if (radix == 8)
{
prefix[0] = '0';
n_prefix = 1;
}
}
}
else
{
if (flag & flag_h2)
val = (char)va_arg(vlist, int);
else if (flag & flag_h1)
val = (short)va_arg(vlist, int);
else if (flag & flag_l2)
val = va_arg(vlist, u64);
else
val = va_arg(vlist, long);
if ((val >> 32) & 0x80000000)
{
val = ~val + 1;
prefix[0] = '-';
n_prefix = 1;
}
else
{
if (val || precision)
{
if (flag & flag_plus)
{
prefix[0] = '+';
n_prefix = 1;
}
else if (flag & flag_blank)
{
prefix[0] = ' ';
n_prefix = 1;
}
}
}
}
n_buf = 0;
switch (radix)
{
case 8:
while (val != 0)
{
int d = (int)(val & 0x07);
val >>= 3;
buf[n_buf++] = (char)(d + '0');
}
break;
case 10:
if ((val >> 32) == 0)
{
u32 v = (u32)val;
while (v != 0)
{
// u32 と定数の除算であれば、コンパイラが自動的に
// マジックナンバーを使用した積算に変換する
u32 r = v / 10;
int d = (int)(v - (r * 10));
v = r;
buf[n_buf++] = (char)(d + '0');
}
}
else
{
while (val != 0)
{
u64 r = val / 10;
int d = (int)(val - (r * 10));
val = r;
buf[n_buf++] = (char)(d + '0');
}
}
break;
case 16:
while (val != 0)
{
int d = (int)(val & 0x0f);
val >>= 4;
buf[n_buf++] = (char)((d < 10) ? (d + '0') : (d + hex_char));
}
break;
}
if ((n_prefix > 0) && (prefix[0] == '0'))
{
n_prefix = 0;
buf[n_buf++] = '0';
}
}
goto put_to_stream;
put_to_stream:
{
int n_pad = precision - n_buf;
if (flag & flag_zero)
{
if (n_pad < width - n_buf - n_prefix)
n_pad = width - n_buf - n_prefix;
}
if (n_pad > 0)
width -= n_pad;
width -= n_prefix + n_buf;
if (!(flag & flag_minus))
string_fill_char(&str, ' ', width);
while (n_prefix > 0)
string_put_char(&str, prefix[--n_prefix]);
string_fill_char(&str, '0', n_pad);
while (n_buf > 0)
string_put_char(&str, buf[--n_buf]);
if (flag & flag_minus)
string_fill_char(&str, ' ', width);
++s;
}
break;
}
}
}
if (str.len > 0)
*str.cur = '\0';
else if (len > 0)
str.base[len - 1] = '\0';
return str.cur - str.base;
}
#if 0 // miya
static int my_snprintf(char *dst, size_t size, const char *fmt, ...)
{
int ret;
va_list va;
va_start(va, fmt);
ret = my_vsnprintf( dst, size, fmt, va );
va_end(va);
return ret;
}
static int my_sprintf(char *dst, const char *fmt, ...)
{
int ret;
va_list va;
va_start(va, fmt);
ret = my_vsprintf(dst, fmt, va);
va_end(va);
return ret;
}
static int my_vsprintf(char *dst, const char *fmt, va_list vlist)
{
return my_vsnprintf(dst, 0x7FFFFFFF, fmt, vlist);
}
#endif
#define PRINTF_LINE_BUF_SIZE 256
size_t my_strlen(char *s1)
{
int i = 0;
while( *s1 != '\0' ) {
i++;
s1++;
}
return i;
}
void vlink_dos_printf(const char *text, ...)
{
va_list vlist;
char temp[PRINTF_LINE_BUF_SIZE];
s32 len;
va_start(vlist, text);
(void)my_vsnprintf(temp, PRINTF_LINE_BUF_SIZE-1, text, vlist);
va_end(vlist);
len = my_strlen(temp);
if( len ) {
(void)vlink_dos_putstring_console(temp,len);
}
}
void vlink_dos_fprintf(int fd, const char *text, ...)
{
va_list vlist;
char temp[PRINTF_LINE_BUF_SIZE];
s32 len;
va_start(vlist, text);
(void)my_vsnprintf(temp, PRINTF_LINE_BUF_SIZE-1, text, vlist);
va_end(vlist);
len = my_strlen(temp);
if( len ) {
(void)vlink_dos_write(fd,temp,len);
}
}

31
build/tests/Makefile Normal file
View File

@ -0,0 +1,31 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlDK - tests
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = os
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

31
build/tests/os/Makefile Normal file
View File

@ -0,0 +1,31 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - tests
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS = alarm-1 _ARM7-alarm-2
#----------------------------------------------------------------------------
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,45 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - OS - demos - _ARM7-alarm-2
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
#TWL_CODEGEN = THUMB
TWL_CODEGEN = ARM
TWL_PROC = ARM7
TARGET_BIN = main.axf
SRCS = main.c
#SRCDIR = # using default
#LCFILE = # using default
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,241 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - OS - demos - _ARM7_alarm-2
File: main.c
Copyright 2003-2006 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.
$Log: main.c,v $
Revision 1.8 2006/01/18 02:11:29 kitase_hirotake
do-indent
Revision 1.7 2005/11/21 10:56:43 kitase_hirotake
SVC_WaitVBlankIntr OS_WaitVBlankIntr
Revision 1.6 2005/02/28 05:26:20 yosizaki
do-indent.
Revision 1.5 2004/04/15 06:51:12 yada
only arrange comment
Revision 1.4 2004/03/08 08:31:58 yada
fix top comment
Revision 1.3 2004/02/24 00:16:26 yada
(none)
Revision 1.2 2004/02/23 01:00:32 yada
(none)
Revision 1.1 2004/02/20 05:16:15 yada
firstRelease
Revision 1.5 2004/02/10 05:47:46 yasu
delete macro CODE32
Revision 1.4 2004/02/09 11:54:29 yasu
include code32.h
Revision 1.3 2004/02/05 07:09:03 yasu
change SDK prefix iris -> nitro
Revision 1.2 2004/02/04 07:37:45 yada
OS_GetSystemClock(), OS_SetSystemClock()
OS_GetTime(),OS_SetTime()
Revision 1.1 2004/02/03 12:03:20 yada
firstRelease
Revision 1.1 2004/02/03 11:25:17 yada
firstRelease
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <nitro.h>
void alarmCallback(void *arg);
void alarmDisp(u32 arg);
void alarmCallback2(void *arg);
void alarmDisp2(u32 arg);
void VBlankIntr(void);
static OSAlarm alarm;
static OSAlarm alarm2;
static BOOL called = FALSE;
static BOOL alarm2_sw = FALSE;
static int pushCounter = 0;
static u16 keyData;
#define ALARM_COUNT 0x20000
#define ALARM_COUNT_P1 0x10000
#define ALARM_COUNT_P2 0x400
#define TEST_DATA 0x12345678
#define TEST_DATA2 0x9abcdef0
int count;
//================================================================================
/*---------------------------------------------------------------------------*
Name: NitroMain
Description: main
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void NitroMain()
{
#ifdef SDK_DEBUGGER_ARM
OS_Printf("ARM7 before OS_Init.\n");
#endif
OS_Init();
// この2つは ARM7では os_init() でやる
// ---- システムクロック初期化
//OS_InitSystemClock();
// ---- アラームシステム初期化
//OS_InitAlarm();
//---- Vブランク設定
(void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr);
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
(void)OS_EnableIrq();
(void)GX_VBlankIntr(TRUE);
OS_Printf("ARM7 starts.\n");
while (1)
{
OS_WaitVBlankIntr();
keyData = PAD_Read();
//---- PUSH A to start alarm
if (keyData & PAD_BUTTON_A && !called)
{
pushCounter++;
called = TRUE;
//---- setting alarm
OS_CreateAlarm(&alarm);
OS_SetAlarm(&alarm, ALARM_COUNT, &alarmCallback, (void *)TEST_DATA);
OS_Printf("set alarm\n");
}
//---- PUSH UP to start periodic alarm
if (1 /*keyData & PAD_KEY_UP */ && !alarm2_sw)
{
alarm2_sw = TRUE;
//---- setting periodic alarm
OS_CreateAlarm(&alarm2);
// OS_SetPeriodicAlarm(&alarm2, OS_GetTime() + ALARM_COUNT_P1, ALARM_COUNT_P2,
// &alarmCallback2, (void *)TEST_DATA2);
OS_Printf("set periodic alarm\n");
}
//---- PUSH DOWN to stop periodic alarm
if (keyData & PAD_KEY_DOWN && alarm2_sw)
{
alarm2_sw = FALSE;
OS_CancelAlarm(&alarm2);
}
}
}
//----------------------------------------------------------------
// Alarm callback
// IRQ スタックが貧弱なので、スタックを変えて作業を行っています。
// エミュレータではここで OS_Printf() しても大丈夫ですが、
// IS-DEBUGGER ではスタック溢れします。
//
//
#include <nitro/code32.h>
asm void alarmCallback( void* arg )
{
ldconst r12, #0x3800400
stmfd r12!, {sp, lr}
mov sp, r12
bl alarmDisp
ldmfd sp!, {r12, lr}
mov sp, r12
bx lr
}
#include <nitro/codereset.h>
void alarmDisp(u32 arg)
{
OS_Printf(">>> called alarmCallback. arg=%x PUSH=%x\n", arg, pushCounter);
//OS_Printf( ">>> sp=%x\n", OSi_GetCurrentStackPointer() );
called = FALSE;
}
//----------------------------------------------------------------
// Alarm callback for periodic alarm
// IRQ スタックが貧弱なので、スタックを変えて作業を行っています。
// エミュレータではここで OS_Printf() しても大丈夫ですが、
// IS-DEBUGGER ではスタック溢れします。
//
//
#include <nitro/code32.h>
asm void alarmCallback2( void* arg )
{
ldconst r12, #0x3800400
stmfd r12!, {sp, lr}
mov sp, r12
bl alarmDisp2
ldmfd sp!, {r12, lr}
mov sp, r12
bx lr
}
#include <nitro/codereset.h>
void alarmDisp2(u32 arg)
{
static int cnt = 0;
if (cnt++ > 10)
{
OS_Panic("END\n");
}
// OS_Printf(">>> called alarmCallback2. arg=%x SYSCLOCK=%x\n", arg, OS_GetTime());
// OS_Printf( ">>> sp=%x\n", OSi_GetCurrentStackPointer() );
}
//----------------------------------------------------------------
// VBlank interrupt handler
void VBlankIntr(void)
{
//---- 割り込みチェックフラグ
OS_SetIrqCheckFlag(OS_IE_V_BLANK);
}
/*====== End of main.c ======*/

View File

@ -0,0 +1,42 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlSDK - OS - demos - alarm-1
# 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.
#
# $Log: $
# $NoKeywords: $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
TARGET_BIN = alerm.axf
SRCS = main.c
#SRCDIR = # using default
#LCFILE = # using default
include $(TWLSDK_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWLSDK_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,165 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - OS - demos - alarm-1
File: main.c
Copyright 2003-2006 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.
$Log: main.c,v $
Revision 1.14 2006/01/18 02:11:29 kitase_hirotake
do-indent
Revision 1.13 2005/11/21 10:53:49 kitase_hirotake
SVC_WaitVBlankIntr ð OS_WaitVBlankIntr ÉÏ<EFBFBD>X
Revision 1.12 2005/02/28 05:26:19 yosizaki
do-indent.
Revision 1.11 2004/09/30 05:08:02 yada
add OS_InitAlarm(). to remove it was mistake
Revision 1.10 2004/09/28 12:21:26 yada
not call OS_InitAlarm() or OS_InitVAlarm() because OS_Init() called
Revision 1.9 2004/06/08 00:16:05 yada
add '#pragma unused()' for FINALROM
Revision 1.8 2004/04/15 06:51:12 yada
only arrange comment
Revision 1.7 2004/03/08 08:31:58 yada
fix top comment
Revision 1.6 2004/03/04 11:16:30 yada
only fix comment
Revision 1.5 2004/02/25 11:35:21 yada
systemClock<EFBFBD>¨Tick ɺ¤Ï<EFBFBD>X
Revision 1.4 2004/02/10 05:47:46 yasu
delete macro CODE32
Revision 1.3 2004/02/09 11:18:07 yasu
include code32.h
Revision 1.2 2004/02/05 07:09:03 yasu
change SDK prefix iris -> nitro
Revision 1.1 2004/02/03 11:25:17 yada
firstRelease
$NoKeywords: $
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <twl/vlink.h>
void VBlankIntr(void);
void alarmCallback(void *arg);
static OSAlarm alarm;
static BOOL called = FALSE;
static int pushCounter = 0;
static u16 keyData;
#define ALARM_COUNT (OS_MilliSecondsToTicks(200))
#define TEST_DATA 0x12345678
//================================================================================
/*---------------------------------------------------------------------------*
Name: NitroMain
Description: main
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void NitroMain()
{
OS_InitPrintServer();
OS_Init();
GX_Init();
// ---- initialize tick system
OS_InitTick();
// ---- initialize alarm system
OS_InitAlarm();
//---- setup VBlank
(void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr);
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
(void)OS_EnableIrq();
(void)GX_VBlankIntr(TRUE);
OS_TPrintf("Push [A] to start alarm.\n");
while (1)
{
OS_PrintServer();
OS_WaitVBlankIntr();
keyData = PAD_Read();
if (keyData & PAD_BUTTON_A && !called)
{
pushCounter++;
called = TRUE;
//---- setting alarm
OS_CreateAlarm(&alarm);
OS_SetAlarm(&alarm, ALARM_COUNT, &alarmCallback, (void *)TEST_DATA);
OS_TPrintf("set alarm\n");
}
}
}
/*---------------------------------------------------------------------------*
Name: alarmCallback
Description: callback for alarm interrupt
Arguments: arg : user setting argument
Returns: None
*---------------------------------------------------------------------------*/
void alarmCallback(void *arg)
{
#ifdef SDK_FINALROM
#pragma unused( arg )
#endif
OS_Printf(">>> called alarmCallback. arg=%x\n", arg);
OS_Printf(">>> PUSH=%d\n", pushCounter);
OS_Printf(">>> sp=%x\n", OSi_GetCurrentStackPointer());
called = FALSE;
}
/*---------------------------------------------------------------------------*
Name: VBlankIntr
Description: VBlank interrupt handler
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void VBlankIntr(void)
{
//---- check interrupt flag
OS_SetIrqCheckFlag(OS_IE_V_BLANK);
}
/*====== End of main.c ======*/

View File

@ -0,0 +1,39 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - include
File: dtcm_begin.h
Copyright 2003-2006 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.
$Log: dtcm_begin.h,v $
Revision 1.4 2006/01/18 02:11:19 kitase_hirotake
do-indent
Revision 1.3 2005/07/11 05:00:42 yada
add include nitro/section.h
Revision 1.2 2005/02/28 05:26:02 yosizaki
do-indent.
Revision 1.1 2004/07/10 06:11:24 yasu
Support to select a section 'ITCM/DTCM/WRAM'
$NoKeywords: $
*---------------------------------------------------------------------------*/
//
// include this instead of using C99 pragma extensions for compatibility
//
#include <nitro/section.h>
#if defined(SDK_CW) || defined(__MWERKS__)
//#pragma section DTCM begin
#elif defined(SDK_ADS)
TO BE DEFINED
#elif defined(SDK_GCC)
TO BE DEFINED
#endif

34
include/nitro/dtcm_end.h Normal file
View File

@ -0,0 +1,34 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - include
File: dtcm_end.h
Copyright 2003-2006 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.
$Log: dtcm_end.h,v $
Revision 1.3 2006/01/18 02:11:19 kitase_hirotake
do-indent
Revision 1.2 2005/02/28 05:26:02 yosizaki
do-indent.
Revision 1.1 2004/07/10 06:11:24 yasu
Support to select a section 'ITCM/DTCM/WRAM'
$NoKeywords: $
*---------------------------------------------------------------------------*/
//
// include this instead of using C99 pragma extensions for compatibility
//
#if defined(SDK_CW) || defined(__MWERKS__)
//#pragma section DTCM end
#elif defined(SDK_ADS)
TO BE DEFINED
#elif defined(SDK_GCC)
TO BE DEFINED
#endif

View File

@ -0,0 +1,39 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - include
File: itcm_begin.h
Copyright 2003-2006 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.
$Log: itcm_begin.h,v $
Revision 1.4 2006/01/18 02:11:19 kitase_hirotake
do-indent
Revision 1.3 2005/07/11 05:00:42 yada
add include nitro/section.h
Revision 1.2 2005/02/28 05:26:02 yosizaki
do-indent.
Revision 1.1 2004/07/10 06:11:24 yasu
Support to select a section 'ITCM/DTCM/WRAM'
$NoKeywords: $
*---------------------------------------------------------------------------*/
//
// include this instead of using C99 pragma extensions for compatibility
//
#include <nitro/section.h>
#if defined(SDK_CW) || defined(__MWERKS__)
//#pragma section ITCM begin
#elif defined(SDK_ADS)
TO BE DEFINED
#elif defined(SDK_GCC)
TO BE DEFINED
#endif

34
include/nitro/itcm_end.h Normal file
View File

@ -0,0 +1,34 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - include
File: itcm_end.h
Copyright 2003-2006 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.
$Log: itcm_end.h,v $
Revision 1.3 2006/01/18 02:11:19 kitase_hirotake
do-indent
Revision 1.2 2005/02/28 05:26:02 yosizaki
do-indent.
Revision 1.1 2004/07/10 06:11:24 yasu
Support to select a section 'ITCM/DTCM/WRAM'
$NoKeywords: $
*---------------------------------------------------------------------------*/
//
// include this instead of using C99 pragma extensions for compatibility
//
#if defined(SDK_CW) || defined(__MWERKS__)
//#pragma section ITCM end
#elif defined(SDK_ADS)
TO BE DEFINED
#elif defined(SDK_GCC)
TO BE DEFINED
#endif

View File

@ -0,0 +1,377 @@
/*---------------------------------------------------------------------------*
Project: NitroSDK - OS - include
File: system.h
Copyright 2003-2006 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.
$Log: system.h,v $
Revision 1.30 2006/01/18 02:12:28 kitase_hirotake
do-indent
Revision 1.29 2005/10/07 08:22:03 yada
add OS_WaitVBlankIntr()
Revision 1.28 2005/08/31 12:03:27 yada
add OS_Exit()
Revision 1.27 2005/02/28 05:26:01 yosizaki
do-indent.
Revision 1.26 2004/11/24 04:36:10 yada
just fix typo
Revision 1.25 2004/09/02 06:27:05 yada
only change comment
Revision 1.24 2004/05/24 04:48:29 yada
OS_WaitIntr() -> OS_WaitInterrupt()
Revision 1.23 2004/05/10 11:21:49 yada
add OS_WaitIntr()
Revision 1.22 2004/04/07 02:03:17 yada
fix header comment
Revision 1.21 2004/04/06 01:38:13 yada
OS_Halt()
Revision 1.20 2004/03/04 09:48:20 yada
OSDisableInterrupt() IRQ
IRQ/FIQ
Revision 1.19 2004/02/27 01:55:00 yasu
add OS_SpinWait, move OS_Halt into os_system.c
Revision 1.18 2004/02/13 08:45:00 yasu
clean up comments
Revision 1.17 2004/02/13 02:16:43 yada
EnableInterrupts, GetProcMode for ARM7 (temporary)
Revision 1.16 2004/02/13 01:51:33 yada
DisableInterrupts, RestoreInterrupts for ARM7 (temporary)
Revision 1.15 2004/02/12 10:56:04 yasu
new location of include files ARM9/ARM7
Revision 1.14 2004/02/10 12:11:23 yada
OS_GetDTCMAddress, OS_GetITCMAddress tcm.hに移行
Revision 1.13 2004/02/10 11:35:06 yada
only arrange tab & space
Revision 1.12 2004/02/10 11:19:21 yada
Interrupt inline
Revision 1.11 2004/02/09 11:38:18 yada
OS_GetDTCMAddress, OS_GetITCMAddress
Revision 1.10 2004/02/09 11:17:22 yasu
include code32.h
Revision 1.9 2004/02/05 07:09:03 yasu
change SDK prefix iris -> nitro
Revision 1.8 2004/01/18 04:47:31 yada
Revision 1.7 2004/01/17 02:28:38 nishida_kenji
convert 'inline' to 'static inline' in header files
Revision 1.6 2004/01/14 08:41:19 yada
OSIntrMode_Irq
Revision 1.5 2004/01/14 01:41:35 yada
CPSRのinterrupt IRQのみから IRQとFIQ
Revision 1.4 2003/12/25 07:30:07 yada
Revision 1.3 2003/12/22 13:41:45 yasu
include
Revision 1.2 2003/12/12 05:06:39 yada
Revision 1.1 2003/12/12 01:25:31 yada
os/cpsr.h os/system.h
Revision 1.7 2003/12/08 12:08:02 yada
SDK_ASMが定義されているときは define以外含まれないようにした
Revision 1.6 2003/12/08 01:25:05 yasu
context SP_svc
Revision 1.5 2003/12/01 09:51:56 yasu
warning DEBUG
Revision 1.4 2003/12/01 04:15:53 yasu
OS_RestoreInterrupts
Revision 1.3 2003/11/30 10:24:09 yasu
Revision 1.2 2003/11/30 10:13:40 yasu
asm
Revision 1.1 2003/11/30 04:17:43 yasu
CPU CPSR
$NoKeywords: $
*---------------------------------------------------------------------------*/
#ifndef NITRO_OS_SYSTEM_H_
#define NITRO_OS_SYSTEM_H_
#ifndef SDK_ASM
#include <nitro/types.h>
#include <nitro/os/common/systemCall.h>
#endif
#include <nitro/hw/common/armArch.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------------
#ifndef SDK_ASM
#define OS_EXIT_STRING_1 "*** Exit nitro program (status="
#define OS_EXIT_STRING_2 "%d).\n"
#define OS_EXIT_STRING OS_EXIT_STRING_1 OS_EXIT_STRING_2
typedef enum
{
OS_PROCMODE_USER = HW_PSR_USER_MODE,
OS_PROCMODE_FIQ = HW_PSR_FIQ_MODE,
OS_PROCMODE_IRQ = HW_PSR_IRQ_MODE,
OS_PROCMODE_SVC = HW_PSR_SVC_MODE,
OS_PROCMODE_ABORT = HW_PSR_ABORT_MODE,
OS_PROCMODE_UNDEF = HW_PSR_UNDEF_MODE,
OS_PROCMODE_SYS = HW_PSR_SYS_MODE
}
OSProcMode;
typedef enum
{
OS_INTRMODE_IRQ_DISABLE = HW_PSR_IRQ_DISABLE,
OS_INTRMODE_IRQ_ENABLE = 0
}
OSIntrMode_Irq;
typedef enum
{
OS_INTRMODE_FIQ_DISABLE = HW_PSR_FIQ_DISABLE,
OS_INTRMODE_FIQ_ENABLE = 0
}
OSIntrMode_Fiq;
typedef u32 OSIntrMode;
//============================================================================
// CONTROL INTERRUPT
//============================================================================
/*---------------------------------------------------------------------------*
Name: OS_EnableInterrupts
Description: Set CPSR to enable irq interrupts
Arguments: None.
Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/
extern OSIntrMode OS_EnableInterrupts(void);
/*---------------------------------------------------------------------------*
Name: OS_DisableInterrupts
Description: Set CPSR to disable irq interrupts
Arguments: None.
Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/
extern OSIntrMode OS_DisableInterrupts(void);
/*---------------------------------------------------------------------------*
Name: OS_RestoreInterrupts
Description: Restore CPSR irq interrupt
Arguments: state of irq interrupt bit
Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/
extern OSIntrMode OS_RestoreInterrupts(OSIntrMode state);
/*---------------------------------------------------------------------------*
Name: OS_EnableInterrupts_IrqAndFiq
Description: Set CPSR to enable irq and fiq interrupts
Arguments: None.
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/
extern OSIntrMode OS_EnableInterrupts_IrqAndFiq(void);
/*---------------------------------------------------------------------------*
Name: OS_DisableInterrupts_IrqAndFiq
Description: Set CPSR to disable irq and fiq interrupts
Arguments: None.
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/
extern OSIntrMode OS_DisableInterrupts_IrqAndFiq(void);
/*---------------------------------------------------------------------------*
Name: OS_RestoreInterrupts_IrqAndFiq
Description: Restore CPSR irq and fiq interrupt
Arguments: state of irq and fiq interrupt bit
Returns: last state of HW_PSR_IRQ_DISABLE & HW_PSR_FIQ_DISABLE
*---------------------------------------------------------------------------*/
extern OSIntrMode OS_RestoreInterrupts_IrqAndFiq(OSIntrMode state);
/*---------------------------------------------------------------------------*
Name: OS_GetCpsrIrq
Description: Get current state of CPSR irq interrupt
Arguments: None
Returns: last state of HW_PSR_IRQ_DISABLE
*---------------------------------------------------------------------------*/
extern OSIntrMode_Irq OS_GetCpsrIrq(void);
//============================================================================
// PROCESSER MODE
//============================================================================
/*---------------------------------------------------------------------------*
Name: OS_GetProcMode
Description: Get processor mode from CPSR
Arguments: None.
Returns: CPU processor mode (field 0x10-0x1f)
*---------------------------------------------------------------------------*/
extern OSProcMode OS_GetProcMode(void);
//============================================================================
// TERMINATE and HALT
//============================================================================
/*---------------------------------------------------------------------------*
Name: OS_Terminate
Description: Halt CPU and loop
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
extern void OS_Terminate(void);
/*---------------------------------------------------------------------------*
Name: OS_Halt
Description: Halt CPU
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
#if defined(SDK_ARM9) || defined(SDK_DEBUGGER_ARM)
extern void OS_Halt(void);
#else
static inline void OS_Halt(void)
{
SVC_Halt();
}
#endif
/*---------------------------------------------------------------------------*
Name: OS_Exit
Description: Display exit string and Terminate.
This is useful for 'loadrun' tool command.
Arguments: status : exit status
Returns: -- (Never return)
*---------------------------------------------------------------------------*/
extern void OS_Exit(int status);
//============================================================================
// WAIT
//============================================================================
/*---------------------------------------------------------------------------*
Name: OS_SpinWait
Description: Spin and Wait for specified CPU cycles at least
Arguments: cycles waiting CPU cycle
Returns: None
*---------------------------------------------------------------------------*/
extern void OS_SpinWait(u32 cycle);
/*---------------------------------------------------------------------------*
Name: OS_WaitInterrupt
Description: wait specified interrupt
the difference between OS_WaitIrq and OS_WaitInterrupt,
in waiting interrupt
OS_WaitIrq does switch thread,
OS_WaitInterrupt doesn't switch thread.
OS_WaitIrq wait by using OS_SleepThread() with threadQueue,
OS_WaitInterrupt wait by using OS_Halt().
if SDK_NO_THREAD defined, 2 functions become same.
Arguments: clear TRUE if want to clear interrupt flag before wait.
FALSE if not.
irqFlags bit of interrupts to wait for
Returns: None
*---------------------------------------------------------------------------*/
#ifndef OSi_OSIRQMASK_DEFINED
typedef u32 OSIrqMask;
#define OSi_OSIRQMASK_DEFINED
#endif
extern void OS_WaitInterrupt(BOOL clear, OSIrqMask irqFlags);
/*---------------------------------------------------------------------------*
Name: OS_WaitVBlankIntr
Description: wait till vblank interrupt occurred.
the difference between SVC_WaitVBlankIntr and OS_WaitVBlankIntr is:
OS_WaitVBlankIntr does switch thread,
SVC_WaitVBlankIntr doesn't switch thread.
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
extern void OS_WaitVBlankIntr(void);
#endif /* SDK_ASM */
#ifdef __cplusplus
} /* extern "C" */
#endif
/*NITRO_OS_SYSTEM_H_*/
#endif

25
include/twl.h Normal file
View File

@ -0,0 +1,25 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK
File: twl.h
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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#ifndef TWL_H_
#define TWL_H_
#include <nitro.h>
//#include <twl/c_extension.h>
#include <twl/vlink.h>
/* TWL_H_ */
#endif

View File

@ -0,0 +1,606 @@
#---------------------------------------------------------------------------
# Project: NitroSDK - tools - makelcf
# File: ARM7-TEG.lcf.template
#
# Copyright 2003-2006 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.
#
# $Log: ARM7-TEG.lcf.template,v $
# Revision 1.31 2006/05/10 03:19:47 yasu
# CodeWarrior 2.x のオーバーレイ拡張への対応
#
# Revision 1.30 2006/03/30 00:43:20 yasu
# 著作年度の変更
#
# Revision 1.29 2006/03/29 13:19:14 yasu
# NUMBER_OVERLAYS -> NUMBER.OVERLAYS への修正
#
# Revision 1.28 2005/09/02 04:14:22 yasu
# SDK2.2 でも使用可能のように古いシンボルを再定義した
#
# Revision 1.27 2005/08/31 09:34:57 yasu
# section_BSS というようなセクション名を使ったときに正常に動作しない場合があるのを修正
#
# Revision 1.26 2005/06/20 12:29:20 yasu
# Surffix -> Suffix 修正
#
# Revision 1.25 2005/06/17 03:16:11 yasu
# fix copyright header
#
# Revision 1.24 2005/06/14 09:03:42 yada
# fix around minus value of SDK_STACKSIZE
#
# Revision 1.23 2004/09/08 01:27:18 yasu
# Add * (.wram) on static segment
#
# Revision 1.22 2004/08/18 02:00:34 yasu
# Fix address of SDK_AUTOLOAD.MAIN.START
#
# Revision 1.21 2004/08/18 01:50:40 yasu
# Support SDK_SUBPRIV_ARENA_LO
#
# Revision 1.20 2004/08/02 10:38:53 yasu
# Add autoload-done callback address in overlaydefs
#
# Revision 1.19 2004/07/26 00:08:27 yasu
# Fix label of exception table
#
# Revision 1.18 2004/07/24 05:42:25 yasu
# Set default values for SDK_AUTOGEN_xTCM_START
#
# Revision 1.17 2004/07/23 11:32:14 yasu
# Define labels for __exception_table_start__ and _end__
#
# Revision 1.16 2004/07/10 04:10:26 yasu
# Support command 'Library'
#
# Revision 1.15 2004/07/08 04:04:59 yasu
# fix small typo
#
# Revision 1.14 2004/07/02 08:13:02 yasu
# Support OBJECT( )
#
# Revision 1.13 2004/07/01 12:54:38 yasu
# support ITCM/DTCM/WRAM autoload
#
# Revision 1.12 2004/07/01 10:41:46 yasu
# support autoload
#
# Revision 1.11 2004/07/01 09:41:50 yasu
# support autoload
#
# Revision 1.10 2004/06/14 11:28:15 yasu
# support section filter "FOREACH.STATIC.OBJECTS=.sectionName"
#
# Revision 1.9 2004/05/27 04:06:42 yasu
# fix SDK_WRAM_ARENA_LO
#
# Revision 1.8 2004/04/26 11:41:38 yasu
# add KEEP_SECTION { .ctor }
#
# Revision 1.7 2004/04/19 06:39:41 yasu
# fix workram checker
#
# Revision 1.6 2004/04/19 04:27:30 yasu
# support WRAM overflow check
#
# Revision 1.5 2004/04/06 01:53:34 yasu
# move rodata section into text section
#
# Revision 1.4 2004/04/06 01:39:24 miya
# modify overlay module size
#
# Revision 1.3 2004/03/29 11:40:48 yasu
# delete ROM SIZE parameter on overlay table
#
# Revision 1.2 2004/03/26 09:32:48 yasu
# delete useless ALIGN
#
# Revision 1.1 2004/03/26 06:04:32 yasu
# move spec files
#
# Revision 1.3 2004/03/23 00:15:35 yasu
# add WRITEW 0 for the termination of __OVERLAY_static_init__
#
# Revision 1.2 2004/03/22 02:15:49 yasu
# set _start as entry address in rom header
#
# Revision 1.1 2004/03/16 10:06:07 yasu
# copy ARM9s template file
#
# $NoKeywords: $
#---------------------------------------------------------------------------
MEMORY
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 # > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 # > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 # > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.WORKRAM (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x10000 # > workram.check
}
KEEP_SECTION
{
.ctor
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(4); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
crt0.o (.text)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata: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>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.wram>
<STATIC.OBJECT=.wram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.wram>
<STATIC.LIBRARY=.wram:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
SDK_STATIC_DATA_END =.;
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.MAIN.START = 0x02380000;
SDK_AUTOLOAD.MAIN.END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.BSS_END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.SIZE = 0;
SDK_AUTOLOAD.MAIN.BSS_SIZE = 0;
SDK_AUTOLOAD.WRAM.START = 0x037f8000;
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);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
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>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
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);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: 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_MAIN_START = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD_MAIN_END = SDK_AUTOLOAD.MAIN.END;
SDK_AUTOLOAD_MAIN_BSS_END = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_AUTOLOAD_MAIN_SIZE = SDK_AUTOLOAD.MAIN.SIZE;
SDK_AUTOLOAD_MAIN_BSS_SIZE = SDK_AUTOLOAD.MAIN.BSS_SIZE;
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>.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);
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<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>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
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:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: 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>:
{
### <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.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
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>
############################ OTHERS #################################
SDK_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_WRAM_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
# work ram size checker
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.WORKRAM:
{
. = . + SDK_SECTION_ARENA_START - <STATIC.ADDRESS> + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.WORKRAM
}

View File

@ -0,0 +1,60 @@
#----------------------------------------------------------------------------
# Project: NitroSDK - include
# File: ARM7-TEG.lsf
#
# Copyright 2003,2004 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.
#
# $Log: ARM7-TEG.lsf,v $
# Revision 1.10 2004/07/10 12:17:51 yasu
# delete GROUP(ROOT)
#
# Revision 1.9 2004/07/10 04:11:17 yasu
# Add GROUP(xxx) as object group
#
# Revision 1.8 2004/07/02 08:33:49 yasu
# Add .wram
#
# Revision 1.7 2004/07/02 01:12:11 yasu
# clean up comments
#
# Revision 1.6 2004/07/01 10:41:46 yasu
# support autoload
#
# Revision 1.5 2004/06/28 10:46:45 yasu
# avoid to use '*' as wildcard
#
# Revision 1.4 2004/04/19 04:27:30 yasu
# support WRAM overflow check
#
# Revision 1.3 2004/04/14 10:25:09 yasu
# delete LIBRARIES group
#
# Revision 1.2 2004/03/26 13:16:17 yasu
# use variables
#
# Revision 1.1 2004/03/26 06:04:32 yasu
# move spec files
#
# Revision 1.2 2004/03/18 12:43:38 yasu
# set top address for static segment
#
# $NoKeywords: $
#----------------------------------------------------------------------------
#
# Nitro LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x037f8000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
Object * (.wram)
StackSize 1024 512
}

View File

@ -0,0 +1,578 @@
#---------------------------------------------------------------------------
# Project: NitroSDK - tools - makelcf
# File: ARM7-TS.lcf.template
#
# Copyright 2003-2006 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.
#
# $Log: ARM7-TS.lcf.template,v $
# Revision 1.24 2006/05/10 03:19:47 yasu
# CodeWarrior 2.x のオーバーレイ拡張への対応
#
# Revision 1.23 2006/04/07 04:45:14 kitase_hirotake
# .wram.bss の追加
#
# Revision 1.22 2006/03/30 00:43:20 yasu
# 著作年度の変更
#
# Revision 1.21 2006/03/29 13:19:14 yasu
# NUMBER_OVERLAYS -> NUMBER.OVERLAYS への修正
#
# Revision 1.20 2005/09/02 04:14:22 yasu
# SDK2.2 でも使用可能のように古いシンボルを再定義した
#
# Revision 1.19 2005/08/31 09:34:57 yasu
# section_BSS というようなセクション名を使ったときに正常に動作しない場合があるのを修正
#
# Revision 1.18 2005/06/20 12:29:20 yasu
# Surffix -> Suffix 修正
#
# Revision 1.17 2005/06/14 09:03:42 yada
# fix around minus value of SDK_STACKSIZE
#
# Revision 1.16 2005/04/14 00:04:17 terui
# Update copyright.
#
# Revision 1.15 2005/04/13 12:52:50 terui
# Change SDK_AUTOLOAD.MAIN.START 0x027c0000 -> 0x027e0000
#
# Revision 1.14 2004/09/08 01:27:18 yasu
# Add * (.wram) on static segment
#
# Revision 1.13 2004/08/18 01:50:40 yasu
# Support SDK_SUBPRIV_ARENA_LO
#
# Revision 1.12 2004/08/02 10:38:53 yasu
# Add autoload-done callback address in overlaydefs
#
# Revision 1.11 2004/07/26 00:08:27 yasu
# Fix label of exception table
#
# Revision 1.10 2004/07/24 05:42:25 yasu
# Set default values for SDK_AUTOGEN_xTCM_START
#
# Revision 1.9 2004/07/23 11:32:14 yasu
# Define labels for __exception_table_start__ and _end__
#
# Revision 1.8 2004/07/12 12:24:12 yasu
# Fix checking WRAM
#
# Revision 1.7 2004/07/10 04:10:26 yasu
# Support command 'Library'
#
# Revision 1.6 2004/07/02 08:13:02 yasu
# Support OBJECT( )
#
# Revision 1.5 2004/07/01 12:54:38 yasu
# support ITCM/DTCM/WRAM autoload
#
# Revision 1.4 2004/07/01 10:41:46 yasu
# support autoload
#
# Revision 1.3 2004/05/28 02:11:15 yasu
# set WRAM arena region correctly
#
# Revision 1.2 2004/04/26 12:17:49 yasu
# add KEEP_SECTIONS
#
# Revision 1.1 2004/04/06 01:59:54 yasu
# newly added
#
# $NoKeywords: $
#---------------------------------------------------------------------------
MEMORY
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.WORKRAM (RWX) : ORIGIN = 0x037f8000, LENGTH = 0x18000 > workram.check
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(4); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
crt0.o (.text)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata: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>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.wram>
<STATIC.OBJECT=.wram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.wram>
<STATIC.LIBRARY=.wram:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
SDK_STATIC_DATA_END =.;
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.MAIN.START = 0x027e0000;
SDK_AUTOLOAD.MAIN.END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.BSS_END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.SIZE = 0;
SDK_AUTOLOAD.MAIN.BSS_SIZE = 0;
SDK_AUTOLOAD.WRAM.START = 0x037f8000;
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);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
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>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
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);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.wram>
<AUTOLOAD.OBJECT=.wram.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.wram>
<AUTOLOAD.LIBRARY=.wram.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: 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_MAIN_START = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD_MAIN_END = SDK_AUTOLOAD.MAIN.END;
SDK_AUTOLOAD_MAIN_BSS_END = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_AUTOLOAD_MAIN_SIZE = SDK_AUTOLOAD.MAIN.SIZE;
SDK_AUTOLOAD_MAIN_BSS_SIZE = SDK_AUTOLOAD.MAIN.BSS_SIZE;
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>.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);
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<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>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
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:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: 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>:
{
### <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.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
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>
############################ OTHERS #################################
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD.WRAM.BSS_END;
SDK_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
# work ram size checker => check AUTOLOAD_WRAM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.WORKRAM:
{
. = . + SDK_AUTOLOAD.WRAM.BSS_END - 0x037f8000 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.WORKRAM
}

View File

@ -0,0 +1,76 @@
#----------------------------------------------------------------------------
# Project: NitroSDK - include
# File: ARM7-TS.lsf
#
# Copyright 2003-2005 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.
#
# $Log: ARM7-TS.lsf,v $
# Revision 1.12 2005/04/14 00:04:17 terui
# Update copyright.
#
# Revision 1.11 2005/04/13 12:49:24 terui
# Change Autoload MAIN Address 0x027c0000 -> 0x027e0000
#
# Revision 1.10 2004/08/18 01:51:02 yasu
# Rename autoload section name
#
# Revision 1.9 2004/07/26 02:21:48 yasu
# Add comment for autoload on 0x027c0000
#
# Revision 1.8 2004/07/12 12:23:14 yasu
# Delete GROUP(ROOT)
#
# Revision 1.7 2004/07/10 04:11:17 yasu
# Add GROUP(xxx) as object group
#
# Revision 1.6 2004/07/02 01:12:11 yasu
# clean up comments
#
# Revision 1.5 2004/07/01 12:54:38 yasu
# support ITCM/DTCM/WRAM autoload
#
# Revision 1.4 2004/07/01 10:41:46 yasu
# support autoload
#
# Revision 1.3 2004/06/28 10:46:45 yasu
# avoid to use '*' as wildcard
#
# Revision 1.2 2004/04/14 10:25:09 yasu
# delete LIBRARIES group
#
# Revision 1.1 2004/04/06 01:59:54 yasu
# newly added
#
# $NoKeywords: $
#----------------------------------------------------------------------------
#
# Nitro LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x02380000
Library crt0.o
StackSize 1024 512
}
#Objects on MAIN RAM # nothing for elf2bin
#Autoload MAIN
#{
# Address 0x027e0000
# Library
#}
Autoload WRAM
{
Address 0x037f8000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
Object * (.wram)
}

View File

@ -0,0 +1,692 @@
#---------------------------------------------------------------------------
# Project: NitroSDK - tools - makelcf
# File: ARM9-TEG.lcf.template
#
# Copyright 2003-2006 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.
#
# $Log: ARM9-TEG.lcf.template,v $
# Revision 1.31 2006/05/10 03:19:47 yasu
# CodeWarrior 2.x のオーバーレイ拡張への対応
#
# Revision 1.30 2006/03/30 00:31:29 yasu
# NUMBER_OVERLAYS を NUMBER.OVERLAYS に修正
#
# Revision 1.29 2006/03/29 13:19:14 yasu
# NUMBER_OVERLAYS -> NUMBER.OVERLAYS への修正
#
# Revision 1.28 2005/09/02 04:14:22 yasu
# SDK2.2 でも使用可能のように古いシンボルを再定義した
#
# Revision 1.27 2005/08/31 09:34:57 yasu
# section_BSS というようなセクション名を使ったときに正常に動作しない場合があるのを修正
#
# Revision 1.26 2005/08/26 11:22:16 yasu
# ITCM/DTCM への overlay の対応
#
# Revision 1.25 2005/06/20 12:29:20 yasu
# Surffix -> Suffix 修正
#
# Revision 1.24 2005/06/17 03:16:11 yasu
# fix copyright header
#
# Revision 1.23 2005/06/14 09:03:42 yada
# fix around minus value of SDK_STACKSIZE
#
# Revision 1.22 2004/10/03 02:00:56 yasu
# Output component file list for compstatic tool
#
# Revision 1.21 2004/09/09 11:49:20 yasu
# Support compstatic in default
#
# Revision 1.20 2004/09/09 03:15:36 yasu
# Support NITRO_COMPRESS on TEG
#
# Revision 1.19 2004/08/02 10:38:53 yasu
# Add autoload-done callback address in overlaydefs
#
# Revision 1.18 2004/07/26 00:08:27 yasu
# Fix label of exception table
#
# Revision 1.17 2004/07/24 05:42:25 yasu
# Set default values for SDK_AUTOGEN_xTCM_START
#
# Revision 1.16 2004/07/23 11:32:14 yasu
# Define labels for __exception_table_start__ and _end__
#
# Revision 1.15 2004/07/12 12:21:08 yasu
# Check size of ITCM/DTCM
#
# Revision 1.14 2004/07/10 04:10:26 yasu
# Support command 'Library'
#
# Revision 1.13 2004/07/08 04:04:59 yasu
# fix small typo
#
# Revision 1.12 2004/07/02 08:13:02 yasu
# Support OBJECT( )
#
# Revision 1.11 2004/07/01 12:54:38 yasu
# support ITCM/DTCM/WRAM autoload
#
# Revision 1.10 2004/07/01 09:41:50 yasu
# support autoload
#
# Revision 1.9 2004/06/14 11:28:15 yasu
# support section filter "FOREACH.STATIC.OBJECTS=.sectionName"
#
# Revision 1.8 2004/04/26 11:41:38 yasu
# add KEEP_SECTION { .ctor }
#
# Revision 1.7 2004/04/20 07:41:32 yasu
# Set STATICINIT instead of .ctor temporarily
#
# Revision 1.6 2004/04/14 07:13:20 yasu
# add ALIGN(32) for convenience to handle cache line
#
# Revision 1.5 2004/04/06 01:53:34 yasu
# move rodata section into text section
#
# Revision 1.4 2004/04/06 01:39:43 miya
# modify overlay module size
#
# Revision 1.3 2004/03/29 11:40:48 yasu
# delete ROM SIZE parameter on overlay table
#
# Revision 1.2 2004/03/26 09:32:48 yasu
# delete useless ALIGN
#
# Revision 1.1 2004/03/26 06:04:32 yasu
# move spec files
#
# Revision 1.9 2004/03/23 00:15:35 yasu
# add WRITEW 0 for the termination of __OVERLAY_static_init__
#
# Revision 1.8 2004/03/22 02:15:49 yasu
# set _start as entry address in rom header
#
# Revision 1.7 2004/03/16 10:05:14 yasu
# add ALIGN(4) at end of section
#
# Revision 1.6 2004/02/14 03:34:00 yasu
# exchange .bss and .sbss
#
# Revision 1.5 2004/02/13 07:13:16 yasu
# support SDK_IRQ_STACKSIZE
#
# Revision 1.4 2004/02/05 12:21:14 yasu
# change SDK prefix iris -> nitro
#
# Revision 1.3 2004/01/16 01:34:01 yasu
# Clean up lcf to support ARENA functions
#
# Revision 1.2 2004/01/15 13:10:03 yasu
# clean unused variables
#
# Revision 1.1 2004/01/15 10:52:51 yasu
# lcf template for OVERLAY
#
# Revision 1.1 2004/01/14 01:59:02 yasu
# Change filename
#
# Revision 1.2 2004/01/07 13:11:08 yasu
# change command casing
#
# Revision 1.1 2004/01/05 02:32:59 yasu
# Initial version
#
# $NoKeywords: $
#---------------------------------------------------------------------------
MEMORY
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 # > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 # > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 # > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
dummy.MAIN_EX (RW) : ORIGIN = 0x02400000, LENGTH = 0x0
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 # > component.files
check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 # > itcm.check
check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 # > dtcm.check
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(32); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
crt0.o (.text)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata: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>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(32);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
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>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY_DIGEST =.;
# NO DIGEST
SDK_OVERLAY_DIGEST_END =.;
#:::::::::: data
. = ALIGN(32);
SDK_STATIC_DATA_END =.;
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.ITCM.START = 0x01ff8000;
SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START;
SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START;
SDK_AUTOLOAD.ITCM.SIZE = 0;
SDK_AUTOLOAD.ITCM.BSS_SIZE = 0;
SDK_AUTOLOAD.DTCM.START = 0x02380000;
SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START;
SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START;
SDK_AUTOLOAD.DTCM.SIZE = 0;
SDK_AUTOLOAD.DTCM.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(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
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(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
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_ITCM_START = SDK_AUTOLOAD.ITCM.START;
SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END;
SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END;
SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE;
SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE;
SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START;
SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END;
SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END;
SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE;
SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE;
############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO:
{
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
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
} > binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<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>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
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:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
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>
############################ MAIN EX ##################################
.dummy.MAIN_EX:
{
. = ALIGN(32);
} > dummy.MAIN_EX
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(32);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
.arena.MAIN_EX:
{
. = ALIGN(32);
SDK_SECTION_ARENA_EX_START =.;
} > arena.MAIN_EX
.arena.ITCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_ITCM_START =.;
} > arena.ITCM
.arena.DTCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_DTCM_START =.;
} > arena.DTCM
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>:
{
### <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.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
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>
############################ OTHERS #################################
SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in DTCM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # when 0 means all remains of DTCM
# Module filelist
.binary.MODULE_FILES:
{
WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>");
} > binary.MODULE_FILES
# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
.check.ITCM:
{
. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
<FOREACH.OVERLAYS=ITCM>
. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
<END.OVERLAYS>
} > check.ITCM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.DTCM:
{
. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
<FOREACH.OVERLAYS=DTCM>
. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
<END.OVERLAYS>
. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.DTCM
}

View File

@ -0,0 +1,76 @@
#----------------------------------------------------------------------------
# Project: NitroSDK - include
# File: ARM9-TEG.lsf
#
# Copyright 2003,2004 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.
#
# $Log: ARM9-TEG.lsf,v $
# Revision 1.9 2004/07/10 12:17:51 yasu
# delete GROUP(ROOT)
#
# Revision 1.8 2004/07/10 04:11:17 yasu
# Add GROUP(xxx) as object group
#
# Revision 1.7 2004/07/08 04:04:59 yasu
# fix small typo
#
# Revision 1.6 2004/07/01 12:54:38 yasu
# support ITCM/DTCM/WRAM autoload
#
# Revision 1.5 2004/07/01 09:41:50 yasu
# support autoload
#
# Revision 1.4 2004/06/28 10:53:23 yasu
# Avoid to use '*' as wildcard
#
# Revision 1.3 2004/04/14 10:25:09 yasu
# delete LIBRARIES group
#
# Revision 1.2 2004/03/26 13:16:17 yasu
# use variables
#
# Revision 1.1 2004/03/26 06:04:32 yasu
# move spec files
#
# Revision 1.1 2004/03/18 12:42:34 yasu
# default.lsf -> default.ARM[9/7]-TEG.lsf
#
# Revision 1.2 2004/03/18 03:11:26 yasu
# rename segment default -> main
#
# Revision 1.1 2004/03/18 02:51:51 yasu
# default lcf spec file
#
# $NoKeywords: $
#----------------------------------------------------------------------------
#
# Nitro LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x02004000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
}
Autoload ITCM
{
Address 0x01ff8000
Object * (.itcm)
Object $(OBJS_AUTOLOAD) (.text)
}
Autoload DTCM
{
Address 0x02380000
Object * (.dtcm)
Object $(OBJS_AUTOLOAD) (.data)
Object $(OBJS_AUTOLOAD) (.bss)
}

View File

@ -0,0 +1,706 @@
#---------------------------------------------------------------------------
# Project: NitroSDK - tools - makelcf
# File: ARM9-TS.lcf.template
#
# Copyright 2003-2006 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.
#
# $Log: ARM9-TS.lcf.template,v $
# Revision 1.35 2006/05/10 03:19:47 yasu
# CodeWarrior 2.x のオーバーレイ拡張への対応
#
# Revision 1.34 2006/04/06 09:02:36 kitase_hirotake
# .itcm.bss .dtcm.bss に対応
#
# Revision 1.33 2006/03/30 23:59:22 yasu
# 著作年度の変更
#
# Revision 1.32 2006/03/29 13:14:22 yasu
# CWVER 2.x でのオーバーレイのサポート
#
# Revision 1.31 2005/11/24 01:16:47 yada
# change start address of mainEX arena from 0x2400000 to 0x23e0000
#
# Revision 1.30 2005/09/02 04:14:22 yasu
# SDK2.2 でも使用可能のように古いシンボルを再定義した
#
# Revision 1.29 2005/08/31 09:34:57 yasu
# section_BSS というようなセクション名を使ったときに正常に動作しない場合があるのを修正
#
# Revision 1.28 2005/08/26 11:22:16 yasu
# ITCM/DTCM への overlay の対応
#
# Revision 1.27 2005/06/20 12:29:20 yasu
# Surffix -> Suffix 修正
#
# Revision 1.26 2005/06/14 09:03:42 yada
# fix around minus value of SDK_STACKSIZE
#
# Revision 1.25 2005/04/13 12:51:00 terui
# Change SDK_AUTOLOAD.DTCM.START 0x027c0000 -> 0x027e0000
#
# Revision 1.24 2005/03/30 00:02:14 yosizaki
# fix copyright header.
#
# Revision 1.23 2005/03/25 12:54:59 yasu
# Include .version section
#
# Revision 1.22 2004/10/03 02:00:56 yasu
# Output component file list for compstatic tool
#
# Revision 1.21 2004/09/27 05:28:21 yasu
# Support .sinit
#
# Revision 1.20 2004/09/09 11:49:20 yasu
# Support compstatic in default
#
# Revision 1.19 2004/09/06 06:40:00 yasu
# Add labels for digest
#
# Revision 1.18 2004/08/20 06:19:59 yasu
# DTCM moves to 0x027c0000 at default
#
# Revision 1.17 2004/08/02 10:38:53 yasu
# Add autoload-done callback address in overlaydefs
#
# Revision 1.16 2004/07/26 02:22:32 yasu
# Change DTCM address to 0x023c0000
#
# Revision 1.15 2004/07/26 00:08:27 yasu
# Fix label of exception table
#
# Revision 1.14 2004/07/24 05:42:25 yasu
# Set default values for SDK_AUTOGEN_xTCM_START
#
# Revision 1.13 2004/07/23 11:32:14 yasu
# Define labels for __exception_table_start__ and _end__
#
# Revision 1.12 2004/07/12 12:21:08 yasu
# Check size of ITCM/DTCM
#
# Revision 1.11 2004/07/10 04:10:26 yasu
# Support command 'Library'
#
# Revision 1.10 2004/07/02 08:13:02 yasu
# Support OBJECT( )
#
# Revision 1.9 2004/07/01 12:54:38 yasu
# support ITCM/DTCM/WRAM autoload
#
# Revision 1.8 2004/07/01 10:41:46 yasu
# support autoload
#
# Revision 1.7 2004/06/02 07:35:37 yasu
# Set libsyscall.a in FORCE_ACTIVE
# Put NitroMain at the top of ROM image
#
# Revision 1.6 2004/06/02 04:56:28 yasu
# Change to fit to new ROM map of TS
#
# Revision 1.5 2004/06/01 06:12:00 miya
# add padding at top of ROM image.
#
# Revision 1.4 2004/04/26 12:16:48 yasu
# add KEEP_SECTIONS
#
# Revision 1.3 2004/04/20 07:41:32 yasu
# Set STATICINIT instead of .ctor temporarily
#
# Revision 1.2 2004/04/14 07:16:42 yasu
# add ALIGN(32) for convenience to handle cache line
#
# Revision 1.1 2004/04/06 01:59:54 yasu
# newly added
#
# $NoKeywords: $
#---------------------------------------------------------------------------
MEMORY
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files
check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check
check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check
}
FORCE_ACTIVE
{
SVC_SoftReset
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(32); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
libsyscall.a (.text)
crt0.o (.text)
crt0.o (.rodata)
* (.version)
OBJECT(NitroMain,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata: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
. = ALIGN(32);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
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>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY_DIGEST =.;
# NO DIGEST
SDK_OVERLAY_DIGEST_END =.;
#:::::::::: data
. = ALIGN(32);
SDK_STATIC_DATA_END =.;
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.ITCM.START = 0x01ff8000;
SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START;
SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START;
SDK_AUTOLOAD.ITCM.SIZE = 0;
SDK_AUTOLOAD.ITCM.BSS_SIZE = 0;
SDK_AUTOLOAD.DTCM.START = 0x027e0000;
SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START;
SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START;
SDK_AUTOLOAD.DTCM.SIZE = 0;
SDK_AUTOLOAD.DTCM.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(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
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(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
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_ITCM_START = SDK_AUTOLOAD.ITCM.START;
SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END;
SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END;
SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE;
SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE;
SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START;
SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END;
SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END;
SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE;
SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE;
############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO:
{
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
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
} > binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<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
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
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:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# 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>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
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>
############################ MAIN EX ##################################
# MAIN EX Area
.dummy.MAIN_EX:
{
. = ALIGN(32);
} > dummy.MAIN_EX
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(32);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
.arena.MAIN_EX:
{
. = ALIGN(32);
SDK_SECTION_ARENA_EX_START =.;
} > arena.MAIN_EX
.arena.ITCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_ITCM_START =.;
} > arena.ITCM
.arena.DTCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_DTCM_START =.;
} > arena.DTCM
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>:
{
### <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.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
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>
############################ OTHERS #################################
SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in DTCM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # when 0 means all remains of DTCM
# Module filelist
.binary.MODULE_FILES:
{
WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>");
} > binary.MODULE_FILES
# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
.check.ITCM:
{
. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
<FOREACH.OVERLAYS=ITCM>
. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
<END.OVERLAYS>
} > check.ITCM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.DTCM:
{
. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
<FOREACH.OVERLAYS=DTCM>
. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
<END.OVERLAYS>
. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.DTCM
}

View File

@ -0,0 +1,77 @@
#----------------------------------------------------------------------------
# Project: NitroSDK - include
# File: ARM9-TS.lsf
#
# Copyright 2003-2005 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.
#
# $Log: ARM9-TS.lsf,v $
# Revision 1.12 2005/04/14 00:04:16 terui
# Update copyright.
#
# Revision 1.11 2005/04/13 12:49:59 terui
# Change Autoload DTCM Address 0x027c0000 -> 0x027e0000
#
# Revision 1.10 2004/08/18 01:50:09 yasu
# DTCM moves to 0x027c0000
#
# Revision 1.9 2004/07/26 02:22:32 yasu
# Change DTCM address to 0x023c0000
#
# Revision 1.8 2004/07/10 12:17:51 yasu
# delete GROUP(ROOT)
#
# Revision 1.7 2004/07/10 04:11:17 yasu
# Add GROUP(xxx) as object group
#
# Revision 1.6 2004/07/01 12:54:38 yasu
# support ITCM/DTCM/WRAM autoload
#
# Revision 1.5 2004/07/01 10:41:46 yasu
# support autoload
#
# Revision 1.4 2004/06/28 10:46:45 yasu
# avoid to use '*' as wildcard
#
# Revision 1.3 2004/06/08 07:46:40 yasu
# move start address 0x02004000 -> 0x02000000
#
# Revision 1.2 2004/04/14 10:25:09 yasu
# delete LIBRARIES group
#
# Revision 1.1 2004/04/06 01:59:54 yasu
# newly added
#
# $NoKeywords: $
#----------------------------------------------------------------------------
#
# Nitro LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x02000000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
}
Autoload ITCM
{
Address 0x01ff8000
Object * (.itcm)
Object $(OBJS_AUTOLOAD) (.text)
}
Autoload DTCM
{
Address 0x027e0000
Object * (.dtcm)
Object $(OBJS_AUTOLOAD) (.data)
Object $(OBJS_AUTOLOAD) (.bss)
}

86
include/twl/vlink.h Normal file
View File

@ -0,0 +1,86 @@
#ifndef TWL_VLINK_H_
#define TWL_VLINK_H_
#ifndef _IOREAD
#define _IOREAD 0x01
#define _IOWRITE 0x02
#define _IORW 0x04
#define _IOEOF 0x08
#define _IOFLUSH 0x10
#define _IOERR 0x20
#define _IOSTRING 0x40
#endif
#ifdef __cplusplus
extern "C" {
#endif
void vlinkInit(void);
struct ffblk {
char ff_reserved[23];
char ff_attrib;
unsigned short ff_ftime;
unsigned short ff_fdate;
struct {
unsigned short low,high;
} ff_fsize;
char ff_name[255+1];
};
typedef struct {
unsigned year;
unsigned mon;
unsigned day;
unsigned hour;
unsigned min;
unsigned sec;
unsigned msec;
} Vlink_dos_time;
int vlink_dos_put_console(char c);
int vlink_dos_putstring_console(char *str,int size);
int vlink_dos_stat_console(void);
int vlink_dos_get_console(void);
int vlink_dos_open(char *fname,int mode);
int vlink_dos_creat(char *fname,int mode);
int vlink_dos_read(int fd,char *buf,int size);
int vlink_dos_write(int fd,char *buf,int size);
int vlink_dos_close(int fd);
int vlink_dos_lseek(int fd,int ofs,int pos);
int vlink_dos_file_mode(char *fname,int mode,int action);
int vlink_dos_set_dta(struct ffblk *fbp);
int vlink_dos_find_first(char *fname,unsigned attrib);
int vlink_dos_find_next(void);
int vlink_dos_find_close(void);
int vlink_dos_get_ioctl(int fd);
int vlink_dos_get_file_time(int fd,unsigned short *timep);
int vlink_dos_get_time(Vlink_dos_time *dtp);
int vlink_dos_set_file_time(int fd,unsigned short *timep);
int vlink_dos_mkdir(char *path);
int vlink_dos_rmdir(char *path);
int vlink_dos_remove(char *fname);
int vlink_dos_rename(char *old,char *new);
int vlink_dos_getcwd(char *path,int drvno);
int vlink_dos_chdir(char *path);
int vlink_dos_getcdrv(void);
int vlink_dos_dup(int fd);
int vlink_dos_dup2(int oldfd,int newfd);
int vlink_dos_version(void);
int vlink_dos_exit(int retcode);
int vlink_dos_sleep(int ms);
int vlinkRead_VIO_pt(void *dramAddr, int nbytes);
int vlinkWrite_VIO_pt(void *dramAddr,int nbytes);
int i_vlink_init_osemu(void);
void vlink_dos_printf(const char *text, ...);
void vlink_dos_fprintf(int fd, const char *text, ...);
#ifdef __cplusplus
}
#endif
#endif // TWL_VLINK_H_

22
include/twl_sp.h Normal file
View File

@ -0,0 +1,22 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - include
File: twl_sp.h
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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#ifndef SDK_ARM7
#define SDK_ARM7
#endif
#ifdef SDK_ARM9
#undef SDK_ARM9
#endif
#include <twl.h>

5
readme.txt Normal file
View File

@ -0,0 +1,5 @@
ビルドするには NitroSDK が必要です。
下記の環境変数を設定してください。
TWLSDK_ROOT=c:/TwlSDK

304
tools/axd/ARM7.ses Normal file
View File

@ -0,0 +1,304 @@
[CLI]
dwParse=1
dwEcho=1
dwUpdate=1
dwHistorySize=16
dwInstructionSize=1
dwMemBytes=32
dwMemSize=0
dwStepSize=0
Format=hex
FormatPar=-1
dwLogFile=0
dwRecordFile=0
[Console]
dwLogStatus=0
dwReadStatus=0
[Control]
dwActiveTab=0
[DebugEnvironment]
biDebugEnvironment=EECEFEDDABAAAAAABAAAAAAADEKDMFAFCHPGHGCHBGNGACGEJGMGFGDHMFBECFNEMFNEFHMGEHJGNCJEDEFEMFNEFHMGEHJGNCJEDEFEOCEGMGMGAANEFHMGEHJGNCJEDEFEAADCFJBAAAAANEFFMEEFJENCJEDEFEPFEECFJEGFFECFADPFOEBENEFENDBECFNEHDEFEENEJENAKANEFFMEEFJENCJEDEFEPFDEPEOEOEFEDEEFJEPEOEPFOEBENEFENDNAKANEFFMEEFJENCJEDEFEPFDFFECFGFFECFPFMEPEDEBEEFJEPEOENDMGPGDGBGMGIGPGDHEHNAKANEFFMEEFJENCJEDEFEPFEEMEMEPFDFFEEFEFJEOEHEDFNDADNAKAEFBECFHEFEEFPFEEJECFNDDEKDMFAFCHPGHGCHBGNGACGEJGMGFGDHMFBECFNEMFNEFHMGEHJGNCJEDEFENAKANEFFMEEFJENCJEDEFEPFIEBEOEEEMEFECFCEBEDFFEBEEEEECFNDGEGEADADADADADADNAKANEFFMEEFJENCJEDEFEPFDEMEFEBEOEDEPEEEFEBEEEEECFNDADADADADADADFDADNAKAEFCFBEDEFEEEMEMEPFEFCFBEDEFEDEPEOEEFCFPEMEMEJEDFEFJEEFFENEADNDNAKAEFCFBEDEFEEEMEMEPFEFCFBEDEFEDEPEOEEFCFPEMEOEBENEFENDNAKADEPEOEEFCFPEMEMEFECFPFCFEEJEGFFECFDFJEPEOENDBDFDBDNAKANEFFMEEFJENCJEDEFEPFIFDFIEPEEFAFMEFFHEHEJEOEHEFEOEBECEMEFEEENDEFCFFFFENAKACEJFEFFEDFFEIFNDMEJGEHEHMGFGNAKANEFFMEEFJENCJEDEFEPFEFBEAFADPFAFPEDFJEEFJEPEOENDBDNAKADCDCDC
[DebugInternals]
dwActiveTab=0
[DebugInternals\InternalVariables]
dwRefresh=1
[Docking]
biBarID_0=AMAAAAAABJAAAAAAAMAAAAAAIEAAAAAAAMAAAAAAACBAAAAAOPPPPPPPMEAAAAAAAAAAAAAAAAPBAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_4=AMAAAAAABJAAAAAAJLDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPJACAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_65539=LCCAAAAAKJBAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAABACAAAAAFOCAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_1114115=GHBAAAAAPNAAAAAAJMCAAAAABJAAAAAAMGAAAAAAAIAAAAAAPCBAAAAADPBAAAAACAAAAAAABAPCMKBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_65538=LMAAAAAAIGBAAAAAAMAAAAAAIEAAAAAAAMAAAAAAICAAAAAANCFAAAAADJAAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_1=AMAAAAAABJAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPCHBAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_65540=IMBAAAAADIBAAAAAILDAAAAAIEAAAAAAAMAAAAAAEMAAAAAAHHEAAAAAPLCAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_7=HIBAAAAABJAAAAAAJLDAAAAABJAAAAAAMGAAAAAAAIAAAAAALHDAAAAAOLBAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_6=AMAAAAAABJAAAAAAAMAAAAAAIEAAAAAAAMAAAAAAICAAAAAAOPPPPPPPMBAAAAAAAAAAAAAAAAPBAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_65543=AMAAAAAABJAAAAAAJLDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPCHBAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[Docking\OpenStates]
biBarID_0=BAAAAAAA
biBarID_4=BAAAAAAA
biBarID_6=BAAAAAAA
biBarID_7=BAAAAAAA
biBarID_65538=BAAAAAAA
biBarID_65539=BAAAAAAA
biBarID_65540=BAAAAAAA
biBarID_65543=BAAAAAAA
[Images\Image_0]
Filename=C:\twl\twlsdk_bak\build\tests\os\_ARM7-alarm-2\bin\ARM7-TS\Release\main.axf
Processor=ARM7TDMI_1
dwProfileState=0
[Interface\AutoRefresh]
dwEnabled=0
dwInterval=100
dwTerminateOnSuspend=0
[Interface\Formatting]
dwDecIsUser=0
DecFormat=%d
dwHexIsUser=0
HexFormat=%0X
dwFloatIsUser=0
FloatFormat=%.7g
dwDbleIsUser=0
DbleFormat=%.10g
dwQ15IsUser=0
Q15Format=%.6g
dwQ31IsUser=0
Q31Format=%.12g
dwArrayThreshold=16
[Interface\General]
dwTarget Connection=1
dwReport All Warnings=0
dwReport Exceptions=1
[Interface\SessionFiles]
dwReselect Target=1
dwReload Images=0
dwRun Config Script=0
Config Script Name=D:\Iris\geometry\geometry.ses
[Interface\Toolbars]
dwTBFile=1
dwTBSearch=1
dwTBExecute=1
dwTBSystemView=1
dwTBProcView=1
dwTBHelp=1
[Interface\Views]
biDefault Fixed Font=EPPPPPPPAAAAAAAAAAAAAAAAAAAAAAAAAJBAAAAAAAAAAAAADACABABBCIMGCICHACGJOLCJJKAAHHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biDefault General Font=EPPPPPPPAAAAAAAAAAAAAAAAAAAAAAAAAJBAAAAAAAAAAAAADACABABBCIMGCICHACGJOLCJJKAACHJGGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
dwTab Size=4
dwInterleave=0
dwShow Line Numbers=1
dwShow Margin=1
dwShow Tooltips=1
dwInitViewState=0
[MainWnd]
biWndPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPMBCAAAAAMCAAAAAANNFAAAAAFADAAAAA
[Memory]
dwActiveTab=0
dwApplyToAllTabs=0
[Memory\Tab_0]
dwStartAddress=58687488
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory\Tab_1]
dwStartAddress=58720256
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory\Tab_2]
dwStartAddress=41811968
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory\Tab_3]
dwStartAddress=67108864
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory1]
dwActiveTab=1
dwApplyToAllTabs=0
[Memory1\Tab_0]
dwStartAddress=58687488
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory1\Tab_1]
dwStartAddress=58720256
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory1\Tab_2]
dwStartAddress=41811968
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory1\Tab_3]
dwStartAddress=67108864
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Output]
dwActiveTab=0
[ProcessorRegisters\ARM7TDMI_1]
dwFormatID=-1
dwRefresh=0
[ProcessorRegisters\ARM7_1]
dwFormatID=-1
dwRefresh=1
[ProcessorRegisters\ARM9_0]
dwFormatID=-1
dwRefresh=1
[RecentFileList]
dwFileCount=4
[RecentImageList]
File_1=C:\twl\twlsdk_bak\build\tests\os\_ARM7-alarm-2\bin\ARM7-TS\Release\main.axf
File_2=D:\IrisSubp\IrisSubpMon\IrisSubpMon_Data\ThumbRelease\IrisSubpMon.axf
File_3=D:\Iris\IrisMon\IrisMon_Data\ThumbRelease\IrisMon.axf
File_4=D:\Iris\IrisMon\IrisMon_Data\ThumbDebugRel\IrisMon.axf
dwFileCount=4
[RecentSymbolsList]
dwFileCount=4
[Target\ARM7TDMI_1]
dwMode=1
dwCommsChannel=0
dwArmSWI=1193046
dwThumbSWI=171
dwSHVector=8
dwDCCSHVector=458752
dwECVector=26
dwTopOfMemory=524288
dwTopOfMemoryExists=1
[ToolBars\ToolBarID-Bar0]
dwBarID=59419
dwBars=12
dwBar#0=0
dwBar#1=171
dwBar#2=173
dwBar#3=175
dwBar#4=179
dwBar#5=177
dwBar#6=128
dwBar#7=65543
dwBar#8=65538
dwBar#9=65539
dwBar#10=65540
dwBar#11=0
[ToolBars\ToolBarID-Bar1]
dwBarID=59422
dwBars=4
dwBar#0=0
dwBar#1=7
dwBar#2=4
dwBar#3=0
[ToolBars\ToolBarID-Bar2]
dwBarID=59420
dwBars=3
dwBar#0=0
dwBar#1=6
dwBar#2=0
[ToolBars\ToolBarID-Bar3]
dwBarID=59423
dwHorz=1
dwFloating=1
dwXPos=895
dwYPos=466
dwBars=3
dwBar#0=0
dwBar#1=7
dwBar#2=0
[ToolBars\ToolBarID-Bar4]
dwBarID=59423
dwHorz=1
dwFloating=1
dwXPos=1329
dwYPos=167
dwBars=3
dwBar#0=0
dwBar#1=2
dwBar#2=0
[ToolBars\ToolBarID-Bar5]
dwBarID=59423
dwHorz=1
dwFloating=1
dwXPos=517
dwYPos=761
dwBars=3
dwBar#0=0
dwBar#1=3
dwBar#2=0
[ToolBars\ToolBarID-Bar6]
dwBarID=59423
dwHorz=1
dwFloating=1
dwXPos=1147
dwYPos=723
dwBars=3
dwBar#0=0
dwBar#1=4
dwBar#2=0
[ToolBars\ToolBarID-Summary]
dwBars=7
dwScreenCX=1600
dwScreenCY=1200
[Variables]
dwActiveTab=2
[Variables\Tab_0]
dwFormatID=-1
dwRefresh=1
[Variables\Tab_1]
dwFormatID=-1
dwRefresh=1
[Variables\Tab_2]
dwFormatID=-1
dwRefresh=1
[Views]
dwLastView=0
[Views\View_0]
UnitName=ARM7TDMI_1
ImageName=C:\twl\twlsdk_bak\build\tests\os\_ARM7-alarm-2\bin\ARM7-TS\Release\main.axf
dwDisassembly=0
FileName=C:\twl\twlsdk_bak\build\libraries\init\ARM7\crt0.c
dwMixedView=0
dwShowMargin=1
dwShowLineNumbers=1
biWndPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPAAAAAAAAAAAAAAAADICAAAAAONAAAAAA

253
tools/axd/ARM9.ses Normal file
View File

@ -0,0 +1,253 @@
[CLI]
dwParse=1
dwEcho=1
dwUpdate=1
dwHistorySize=16
dwInstructionSize=1
dwMemBytes=32
dwMemSize=0
dwStepSize=0
Format=hex
FormatPar=-1
dwLogFile=0
dwRecordFile=0
[Control]
dwActiveTab=0
[DebugEnvironment]
biDebugEnvironment=EECEFEDDABAAAAAABAAAAAAADEKDMFAFCHPGHGCHBGNGACGEJGMGFGDHMFBECFNEMFNEFHMGEHJGNCJEDEFEMFNEFHMGEHJGNCJEDEFEOCEGMGMGAANEFHMGEHJGNCJEDEFEAADCGJBAAAAACEJFEFFEDFFEIFNDMEJGEHEHMGFGNAKANEFFMEEFJENCJEDEFEPFDEPEOEOEFEDEEFJEPEOEPFOEBENEFENDNAKANEFFMEEFJENCJEDEFEPFDFFECFGFFECFPFMEPEDEBEEFJEPEOENDMGPGDGBGMGIGPGDHEHNAKANEFFMEEFJENCJEDEFEPFEEMEMEPFDFFEEFEFJEOEHEDFNDADNAKAEFBECFHEFEEFPFEEJECFNDDEKDMFAFCHPGHGCHBGNGACGEJGMGFGDHMFBECFNEMFNEFHMGEHJGNCJEDEFENAKANEFFMEEFJENCJEDEFEPFIEBEOEEEMEFECFCEBEDFFEBEEEEECFNDGEGEADADADADADADNAKANEFFMEEFJENCJEDEFEPFDEMEFEBEOEDEPEEEFEBEEEEECFNDADADADADADADFDADNAKAEFCFBEDEFEEEMEMEPFEFCFBEDEFEDEPEOEEFCFPEMEMEJEDFEFJEEFFENEADNDNAKAEFCFBEDEFEEEMEMEPFEFCFBEDEFEDEPEOEEFCFPEMEOEBENEFENDNAKADEPEOEEFCFPEMEMEFECFPFCFEEJEGFFECFDFJEPEOENDBDFDBDNAKANEFFMEEFJENCJEDEFEPFIFDFIEPEEFAFMEFFHEHEJEOEHEFEOEBECEMEFEEENDEFCFFFFENAKANEFFMEEFJENCJEDEFEPFEECFJEGFFECFADPFOEBENEFENDBECFNEJDEDGDFENCDFNAKANEFFMEEFJENCJEDEFEPFEFBEAFADPFAFPEDFJEEFJEPEOENDADNAKADCDC
[DebugInternals]
dwActiveTab=0
[DebugInternals\InternalVariables]
dwRefresh=1
[Docking]
biBarID_0=AMAAAAAABJAAAAAAAMAAAAAAIEAAAAAAAMAAAAAAHLBAAAAAOPPPPPPPMEAAAAAAAAAAAAAAAAPBAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_4=AMAAAAAABJAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPJACAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_65539=LCCAAAAAKJBAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOHCAAAAAPFCAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_1114115=AMAAAAAABJAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPJACAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_65538=BEBAAAAAIGBAAAAAAMAAAAAAIEAAAAAAAMAAAAAAICAAAAAAJDAAAAAAGKBAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_1=AMAAAAAABJAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAAOPPPPPPPCHBAAAAAAAAAAAAAAAPIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_65540=JCBAAAAAEKBAAAAAAMAAAAAAIEAAAAAAAMAAAAAAMGAAAAAALEDAAAAADHBAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_7=MFBAAAAAIKAAAAAAILDAAAAABJAAAAAAMGAAAAAAAIAAAAAADFDAAAAAEGCAAAAACAAAAAAABAPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biBarID_6=AMAAAAAABJAAAAAAAMAAAAAAIEAAAAAAAMAAAAAAICAAAAAAOPPPPPPPMBAAAAAAAAAAAAAAAAPBAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[Docking\OpenStates]
biBarID_0=BAAAAAAA
biBarID_4=BAAAAAAA
biBarID_6=BAAAAAAA
biBarID_7=BAAAAAAA
biBarID_65538=BAAAAAAA
biBarID_65539=BAAAAAAA
biBarID_65540=BAAAAAAA
[Images\Image_0]
Filename=C:\twl\twlsdk_bak\build\tests\os\alarm-1\bin\ARM9-TS\Release\alerm.axf
Processor=ARM946E_S_0
dwProfileState=0
[Interface\AutoRefresh]
dwEnabled=0
dwInterval=100
dwTerminateOnSuspend=0
[Interface\Formatting]
dwDecIsUser=0
DecFormat=%d
dwHexIsUser=0
HexFormat=%0X
dwFloatIsUser=0
FloatFormat=%.7g
dwDbleIsUser=0
DbleFormat=%.10g
dwQ15IsUser=0
Q15Format=%.6g
dwQ31IsUser=0
Q31Format=%.12g
dwArrayThreshold=16
[Interface\General]
dwTarget Connection=1
dwReport All Warnings=0
dwReport Exceptions=1
[Interface\SessionFiles]
dwReselect Target=1
dwReload Images=0
dwRun Config Script=0
Config Script Name=C:\Iris\geometry\geometry.ses
[Interface\Toolbars]
dwTBFile=1
dwTBSearch=1
dwTBExecute=1
dwTBSystemView=1
dwTBProcView=1
dwTBHelp=1
[Interface\Views]
biDefault Fixed Font=EPPPPPPPAAAAAAAAAAAAAAAAAAAAAAAAAJBAAAAAAAAAAAAADACABABBCIMGCICHACGJOLCJJKAAHHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
biDefault General Font=EPPPPPPPAAAAAAAAAAAAAAAAAAAAAAAAAJBAAAAAAAAAAAAADACABABBCIMGCICHACGJOLCJJKAACHJGGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
dwTab Size=4
dwInterleave=0
dwShow Line Numbers=1
dwShow Margin=1
dwShow Tooltips=1
dwInitViewState=0
[MainWnd]
biWndPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPEJAAAAAANKAAAAAAEFEAAAAAGIDAAAAA
[Memory]
dwActiveTab=1
dwApplyToAllTabs=0
[Memory\Tab_0]
dwStartAddress=33570560
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory\Tab_1]
dwStartAddress=41940992
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory\Tab_2]
dwStartAddress=41942016
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Memory\Tab_3]
dwStartAddress=67108864
Format=hex_noprefix_32
dwFormatID=-1
dwListBigEndian=0
dwDisplayOffset=0
dwPageSize=1024
dwListSize=4
dwTargetAccessSize=0
dwAutoRefresh=1
[Output]
dwActiveTab=0
[ProcessorRegisters\ARM946E_S_0]
dwFormatID=-1
dwRefresh=0
[ProcessorRegisters\ARM9_0]
dwFormatID=-1
dwRefresh=1
[RecentFileList]
dwFileCount=4
[RecentImageList]
File_1=C:\twl\twlsdk_bak\build\tests\os\alarm-1\bin\ARM9-TS\Release\alerm.axf
File_2=C:\Iris\IrisMon\IrisMon_Data\ThumbRelease\IrisMon.axf
File_3=C:\Iris\ipl2_test\ipl2_test_Data\ThumbDebugRel\ipl2_test.axf
File_4=C:\Iris\two_quads\two_quads_Data\ThumbDebugRel\two_quads.axf
dwFileCount=4
[RecentSymbolsList]
File_1=C:\IrisSubp\IrisSubpMon\IrisSubpMon_Data\ThumbRelease\IrisSubpMon.axf
dwFileCount=4
[Target\ARM946E_S_0]
dwMode=1
dwCommsChannel=0
dwArmSWI=1193046
dwThumbSWI=171
dwSHVector=-65528
dwDCCSHVector=458752
dwECVector=27
dwTopOfMemory=524288
dwTopOfMemoryExists=1
[ToolBars\ToolBarID-Bar0]
dwBarID=59419
dwBars=12
dwBar#0=0
dwBar#1=171
dwBar#2=173
dwBar#3=175
dwBar#4=179
dwBar#5=177
dwBar#6=128
dwBar#7=65543
dwBar#8=65538
dwBar#9=65539
dwBar#10=65540
dwBar#11=0
[ToolBars\ToolBarID-Bar1]
dwBarID=59422
dwBars=3
dwBar#0=0
dwBar#1=4
dwBar#2=0
[ToolBars\ToolBarID-Bar2]
dwBarID=59420
dwBars=3
dwBar#0=0
dwBar#1=6
dwBar#2=0
[ToolBars\ToolBarID-Bar3]
dwBarID=59423
dwHorz=1
dwFloating=1
dwXPos=855
dwYPos=632
dwBars=3
dwBar#0=0
dwBar#1=7
dwBar#2=0
[ToolBars\ToolBarID-Bar4]
dwBarID=59423
dwHorz=1
dwFloating=1
dwXPos=61
dwYPos=442
dwBars=3
dwBar#0=0
dwBar#1=2
dwBar#2=0
[ToolBars\ToolBarID-Bar5]
dwBarID=59423
dwHorz=1
dwFloating=1
dwXPos=642
dwYPos=627
dwBars=3
dwBar#0=0
dwBar#1=3
dwBar#2=0
[ToolBars\ToolBarID-Bar6]
dwBarID=59423
dwHorz=1
dwFloating=1
dwXPos=847
dwYPos=391
dwBars=3
dwBar#0=0
dwBar#1=4
dwBar#2=0
[ToolBars\ToolBarID-Summary]
dwBars=7
dwScreenCX=1600
dwScreenCY=1200
[Variables]
dwActiveTab=1
[Variables\Tab_0]
dwFormatID=-1
dwRefresh=1
[Variables\Tab_1]
dwFormatID=-1
dwRefresh=1
[Variables\Tab_2]
dwFormatID=-1
dwRefresh=1
[Views]
dwLastView=0
[Views\View_0]
UnitName=ARM946E_S_0
ImageName=C:\twl\twlsdk_bak\build\tests\os\alarm-1\bin\ARM9-TS\Release\alerm.axf
dwDisassembly=0
FileName=C:\twl\twlsdk_bak\build\libraries\init\ARM9\crt0.c
dwMixedView=0
dwShowMargin=1
dwShowLineNumbers=1
biWndPlacement=MCAAAAAAAAAAAAAABAAAAAAAPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPAAAAAAAAAAAAAAAAGFCAAAAAJEBAAAAA

9
tools/axd/readme.txt Normal file
View File

@ -0,0 +1,9 @@
デスクトップへ AXD-Debugger のショートカットを作成し、
「リンク先」に下記のように設定すると便利です。
ARM9側
%ARMBIN_AXD% -nologo -session %TWLSDK_ROOT%/tools/axd/ARM9.ses -debug %TWLSDK_ROOT%/起動時にロードするaxfファイル)
ARM7側は -session へ "ARM7.ses" を指定します。
-debug の代わりに -exec を使用すると起動直後に実行されます。

View File

@ -0,0 +1,136 @@
; ホストインタフェース
; ホストパソコンとPARTNER-CTRを接続するインタフェースの種類やアドレスを設定します。
; インタフェースの種類はUSB接続かNetwork接続が選択できます。Model10/20はUSB接続のみ。
; Ex. USB接続の場合(単体)
; PORT ADDRESS USB
; Ex. USB接続の場合(複数台のPARTNER-CTRが同一のPCに接続されている場合)
; PORT ADDRESS USB:本体シリアルナンバー
; 本体底面記載のシリアルナンバーを記述することで機器の選択ができます。
; Ex. Network接続の場合
; PORT ADDRESS NET:xxx.xxx.xxx.xxx
; NET: に続けて xxx部分にIPアドレスを記述します。
;
;PORT ADDRESS USB
;PORT ADDRESS USB:F0100010
;PORT ADDRESS NET:192.168.1.11
PORT ADDRESS USB
; J_FRQ
; JTAGクロック周波数を設定します。通常はAUTOを設定してください。
; 周波数のほかに、オプションでTDO信号のサンプルタイミングの指定もできます。
; Ex. 自動設定の場合
; J_FRQ AUTO
; Ex. アダプティブモードの場合
; RTCK信号が配線されている必要があります。JTAGクロック周波数はターゲット
; の状態に応じて自動追従します。
; J_FRQ ADPT ... 通常設定
; J_FRQ ADPTX ... SleepなどでRTCKが停止する場合
; Ex.マニュアル設定
; J_FRQ 16 ... 16MHz
; J_FRQ 200K,2 ... 200KHz , TDOサンプルモード2(立ち上がりエッジ)
; J_FRQ 50,1 ... 50MHz , TDOサンプルモード1(遅延)
; J_FRQ 6.6,0 ... 6.6MHz , TDOサンプルモード0(立下りエッジ)
; CTRでは、通常 ADPTX を設定してください
;J_FRQ AUTO
;J_FRQ ADPT
;J_FRQ 16,1
;J_FRQ 8
;J_FRQ 1
;J_FRQ 200K
;J_FRQ ADPTX
J_FRQ ADPTX
; J_VCC
; JTAG信号の電圧を指定します。1.8V/2.5V/3V/3.3V/5Vのいずれかを設定します。
; ターゲットCPUのJTAG端子のI/O電源電圧を設定してください。
; CTRのMG20メインプロセッサでは1.8Vを設定
; CTRのIOPIOプロセッサでは3.3Vを設定
; Ex.
; J_VCC 5
; J_VCC 3.3
; J_VCC 3.0
; J_VCC 2.5
; J_VCC 1.8
;J_VCC 3.3
;J_VCC 1.8
J_VCC 3.3
; CPU名の指定
; CTR MG20は 11MPC,0 を設定
; CTR IOPは 946T,1 を設定
;CPU CORE 946T,1
;CPU CORE 11MPC,0
;CPU CORE 70T,0
CPU CORE 946T,1
; JTAG chain config
; JTAG カスケード接続情報の設定
; J_CONFIG チップ数,チップ位置(TDO側=0),IR_lenビット数(TDO側),IR_lenビット数(TDI側)
; 単独で接続されている場合(通常)は、設定しません。
; CTRでJTAGカスケード接続の場合は以下のように設定します
; ex. J_CONFIG 2,0,0,5 -- カスケード IOP
; ex. J_CONFIG 2,1,4,0 -- カスケード MG20
;J_CONFIG 2,0,0,5
;J_CONFIG 2,1,4,0
;J_CONFIG 2,1,4,0 -- カスケード MG20
;J_CONFIG 2,1,4,4
;J_CONFIG 2,0,4,4
;J_CONFIG 2,0,0,4
J_CONFIG 2,1,4,0
; CARD_ID
; CARD ROM のIDを設定します。カードのタイプやROM容量の設定です。
; NTR TYPE1 64Mbit : 0x000007c2
; NTR TYPE1 128Mbit : 0x00000fc2
; NTR TYPE1 256Mbit : 0x00001fc2
; NTR TYPE1 512Mbit : 0x00003fc2
; NTR TYPE1 1Gbit : 0x00007fc2
; NTR TYPE1 2Gbit : 0x0000ffc2
; NTR TYPE1 4Gbit : 0x0000fec2
; NTR TYPE2 64Mbit : 0x800007c2
; NTR TYPE2 128Mbit : 0x80000fc2
; NTR TYPE2 256Mbit : 0x80001fc2
; NTR TYPE2 512Mbit : 0x80003fc2
; NTR TYPE2 1Gbit : 0x80007fc2
; NTR TYPE2 2Gbit : 0x8000ffc2
; NTR TYPE2 4Gbit : 0x8000fec2
;CTR_CARD_ID 0x0000ffc2
;CTR_CARD_ID 0x0000fec2
CTR_CARD_ID 0x0000ffc2
; CTR RST BOOT mode
; デバッガ起動時と初期化時に、JTAGポートが使用可能になるまでの待ち時間設定
; ex. CTR_RST_MODE WAIT ... ダイアログメッセージを出して wait
; ex. CTR_RST_MODE NO_SRST ... 初期化時にリセットを行わない
; ex. CTR_RST_MODE 1 ... 1秒の待ち時間設定
; 通常は 1 を設定
;CTR_RST_MODE WAIT
;CTR_RST_MODE NO_SRST
;CTR_RST_MODE 1
;CTR_RST_MODE 0
CTR_RST_MODE NO_SRST
; バーチャルリンク(VLINK)の指定です。
; VLINK OFF .. バーチャルリンクを使用しません
; VLINK CPU .. JTAGでバーチャルリンクを使用します
;VLINK CPU
;VLINK OFF
VLINK CPU
; PARTNERのコマンドでアクセス可能なメモリ領域(最大20領域)
; MAP 開始アドレス,終了アドレス
; PARTNERのコマンドでアクセス可能な範囲を開始アドレスと終了アドレスで指定します。
;
; EX. MAP 10000000,1000FFFF
; MAP FFF00000,FFFFFFFF
MAP 00000000,ffffffff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,142 @@
; ホストインタフェース
; ホストパソコンとPARTNER-CTRを接続するインタフェースの種類やアドレスを設定します。
; インタフェースの種類はUSB接続かNetwork接続が選択できます。Model10/20はUSB接続のみ。
; Ex. USB接続の場合(単体)
; PORT ADDRESS USB
; Ex. USB接続の場合(複数台のPARTNER-CTRが同一のPCに接続されている場合)
; PORT ADDRESS USB:本体シリアルナンバー
; 本体底面記載のシリアルナンバーを記述することで機器の選択ができます。
; Ex. Network接続の場合
; PORT ADDRESS NET:xxx.xxx.xxx.xxx
; NET: に続けて xxx部分にIPアドレスを記述します。
;
;PORT ADDRESS USB
;PORT ADDRESS USB:F0100010
;PORT ADDRESS NET:192.168.1.11
PORT ADDRESS USB
; J_FRQ
; JTAGクロック周波数を設定します。通常はAUTOを設定してください。
; 周波数のほかに、オプションでTDO信号のサンプルタイミングの指定もできます。
; Ex. 自動設定の場合
; J_FRQ AUTO
; Ex. アダプティブモードの場合
; RTCK信号が配線されている必要があります。JTAGクロック周波数はターゲット
; の状態に応じて自動追従します。
; J_FRQ ADPT ... 通常設定
; J_FRQ ADPTX ... SleepなどでRTCKが停止する場合
; Ex.マニュアル設定
; J_FRQ 16 ... 16MHz
; J_FRQ 200K,2 ... 200KHz , TDOサンプルモード2(立ち上がりエッジ)
; J_FRQ 50,1 ... 50MHz , TDOサンプルモード1(遅延)
; J_FRQ 6.6,0 ... 6.6MHz , TDOサンプルモード0(立下りエッジ)
; CTRでは、通常 ADPTX を設定してください
;J_FRQ AUTO
;J_FRQ ADPT
;J_FRQ 16,1
;J_FRQ 8
;J_FRQ 1
;J_FRQ 200K
;J_FRQ ADPTX
J_FRQ ADPTX
; J_VCC
; JTAG信号の電圧を指定します。1.8V/2.5V/3V/3.3V/5Vのいずれかを設定します。
; ターゲットCPUのJTAG端子のI/O電源電圧を設定してください。
; CTRのMG20メインプロセッサでは1.8Vを設定
; CTRのIOPIOプロセッサでは3.3Vを設定
; Ex.
; J_VCC 5
; J_VCC 3.3
; J_VCC 3.0
; J_VCC 2.5
; J_VCC 1.8
;J_VCC 3.3
;J_VCC 1.8
J_VCC 3.3
; CPU名の指定
; CTR MG20は 11MPC,0 を設定
; CTR IOPは 946T,1 を設定
;CPU CORE 946T,1
;CPU CORE 11MPC,0
;CPU CORE 70T,0
CPU CORE 70T,0
; JTAG chain config
; JTAG カスケード接続情報の設定
; J_CONFIG チップ数,チップ位置(TDO側=0),IR_lenビット数(TDO側),IR_lenビット数(TDI側)
; 単独で接続されている場合(通常)は、設定しません。
; CTRでJTAGカスケード接続の場合は以下のように設定します
; ex. J_CONFIG 2,0,0,5 -- カスケード IOP
; ex. J_CONFIG 2,1,4,0 -- カスケード MG20
;J_CONFIG 2,0,0,5
;J_CONFIG 2,1,4,0
;J_CONFIG 2,0,4,4
J_CONFIG 2,0,4,4
; CARD_ID
; CARD ROM のIDを設定します。カードのタイプやROM容量の設定です。
; NTR TYPE1 64Mbit : 0x000007c2
; NTR TYPE1 128Mbit : 0x00000fc2
; NTR TYPE1 256Mbit : 0x00001fc2
; NTR TYPE1 512Mbit : 0x00003fc2
; NTR TYPE1 1Gbit : 0x00007fc2
; NTR TYPE1 2Gbit : 0x0000ffc2
; NTR TYPE1 4Gbit : 0x0000fec2
; NTR TYPE2 64Mbit : 0x800007c2
; NTR TYPE2 128Mbit : 0x80000fc2
; NTR TYPE2 256Mbit : 0x80001fc2
; NTR TYPE2 512Mbit : 0x80003fc2
; NTR TYPE2 1Gbit : 0x80007fc2
; NTR TYPE2 2Gbit : 0x8000ffc2
; NTR TYPE2 4Gbit : 0x8000fec2
;CTR_CARD_ID 0x0000ffc2
;CTR_CARD_ID 0x0000fec2
CTR_CARD_ID 0x0000ffc2
; CTR RST BOOT mode
; デバッガ起動時と初期化時に、JTAGポートが使用可能になるまでの待ち時間設定
; ex. CTR_RST_MODE WAIT ... ダイアログメッセージを出して wait
; ex. CTR_RST_MODE NO_SRST ... 初期化時にリセットを行わない
; ex. CTR_RST_MODE 1 ... 1秒の待ち時間設定
; 通常は 1 を設定
;CTR_RST_MODE WAIT
;CTR_RST_MODE NO_SRST
;CTR_RST_MODE 1
;CTR_RST_MODE 0
CTR_RST_MODE NO_SRST
; バーチャルリンク(VLINK)の指定です。
; VLINK OFF .. バーチャルリンクを使用しません
; VLINK CPU .. JTAGでバーチャルリンクを使用します
;VLINK CPU
;VLINK OFF
VLINK CPU
; JTAG chain config
; JTAG カスケード接続情報の設定
; J_CONFIG チップ数,チップ位置(TDO側=0),IR_lenビット数(TDO側),IR_lenビット数(TDI側)
; 単独で接続されている場合(通常)は、設定しません。
;J_CONFIG 3,1,6,8
;J_CONFIG 2,1,4,0
J_CONFIG 2,0,4,4
; PARTNERのコマンドでアクセス可能なメモリ領域(最大20領域)
; MAP 開始アドレス,終了アドレス
; PARTNERのコマンドでアクセス可能な範囲を開始アドレスと終了アドレスで指定します。
;
; EX. MAP 10000000,1000FFFF
; MAP FFF00000,FFFFFFFF
MAP 00000000,ffffffff

File diff suppressed because it is too large Load Diff