mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
add original crt0 includes to initialize main memory
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@19 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
4fcb10bb96
commit
0bcd0c250a
@ -163,7 +163,7 @@ ifeq ($(CODEGEN_PROC),ARM9)
|
||||
|
||||
FIRM_LIBS_BASE ?= \
|
||||
libos \
|
||||
# libmi \
|
||||
libmi \
|
||||
# libgcd \
|
||||
# libacsign \
|
||||
|
||||
|
||||
@ -23,9 +23,9 @@ include $(TWLFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
SUBDIRS = \
|
||||
os \
|
||||
mi \
|
||||
init \
|
||||
# syscall \
|
||||
# init \
|
||||
# mi \
|
||||
# nvram \
|
||||
# gcd \
|
||||
# aes \
|
||||
|
||||
58
build/libraries/init/ARM7/Makefile
Normal file
58
build/libraries/init/ARM7/Makefile
Normal file
@ -0,0 +1,58 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlIPL - 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.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev:$
|
||||
# $Author:$
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS =
|
||||
#SUBMAKES = Makefile.CALLTRACE \
|
||||
# Makefile.FUNCTIONCOST
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# build ARM & THUMB libraries
|
||||
FIRM_CODEGEN_ALL ?= TRUE
|
||||
|
||||
# Codegen for sub processer
|
||||
FIRM_PROC = ARM7
|
||||
|
||||
SRCS = crt0.c \
|
||||
|
||||
TARGET_OBJ = crt0.o
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# DEBUG版ビルドの場合、RELEASE版でビルドして
|
||||
# DEBUG版のライブラリを装います。
|
||||
|
||||
ifdef NITRO_DEBUG
|
||||
NITRO_BUILD_TYPE = RELEASE
|
||||
endif
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(FIRM_INSTALL_LIBDIR)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build: $(TARGETS)
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
266
build/libraries/init/ARM7/crt0.c
Normal file
266
build/libraries/init/ARM7/crt0.c
Normal file
@ -0,0 +1,266 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL - libraries - 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.
|
||||
|
||||
$Date:: $
|
||||
$Rev$
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <nitro/code32.h>
|
||||
#include <firm.h>
|
||||
|
||||
extern void TwlMain(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 unsigned long SDK_IRQ_STACKSIZE[];
|
||||
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]
|
||||
|
||||
//---- 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
|
||||
|
||||
#if 0
|
||||
// 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
|
||||
#endif
|
||||
|
||||
//---- 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 TwlSpStartUp
|
||||
bl __call_static_initializers
|
||||
#endif
|
||||
|
||||
//---- start (to 16bit code)
|
||||
ldr r1, =TwlSpMain
|
||||
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
|
||||
#if 1
|
||||
mov dest, dest_end
|
||||
#else
|
||||
@1:
|
||||
cmp dest, dest_end
|
||||
ldrmi tmp, [src], #4 // [dest++] <- [src++]
|
||||
strmi tmp, [dest], #4
|
||||
bmi @1
|
||||
#endif
|
||||
//---- 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: TwlSpStartUp
|
||||
|
||||
Description: hook for user start up
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
SDK_WEAK_SYMBOL void TwlSpStartUp(void)
|
||||
{
|
||||
}
|
||||
54
build/libraries/init/ARM9/Makefile
Normal file
54
build/libraries/init/ARM9/Makefile
Normal file
@ -0,0 +1,54 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlIPL - 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.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev:$
|
||||
# $Author:$
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS =
|
||||
#SUBMAKES = Makefile.CALLTRACE \
|
||||
# Makefile.FUNCTIONCOST
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# build ARM & THUMB libraries
|
||||
FIRM_CODEGEN_ALL ?= TRUE
|
||||
|
||||
SRCS = crt0.c \
|
||||
|
||||
TARGET_OBJ = crt0.o
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# DEBUG版ビルドの場合、RELEASE版でビルドして
|
||||
# DEBUG版のライブラリを装います。
|
||||
|
||||
ifdef NITRO_DEBUG
|
||||
NITRO_BUILD_TYPE = RELEASE
|
||||
endif
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(FIRM_INSTALL_LIBDIR)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build: $(TARGETS)
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
647
build/libraries/init/ARM9/crt0.c
Normal file
647
build/libraries/init/ARM9/crt0.c
Normal file
@ -0,0 +1,647 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL - libraries - 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.
|
||||
|
||||
$Date:: $
|
||||
$Rev$
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <nitro/code32.h>
|
||||
#include <firm.h>
|
||||
|
||||
extern void TwlMain(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 unsigned long SDK_IRQ_STACKSIZE[];
|
||||
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 Main Memory
|
||||
bl MIi_InitMainMemCR
|
||||
|
||||
//---- 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 TwlStartUp
|
||||
bl __call_static_initializers
|
||||
#endif
|
||||
//---- start (to 16bit code)
|
||||
ldr r1, =TwlMain
|
||||
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 *)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
|
||||
#if 1
|
||||
mov dest, dest_end
|
||||
#else
|
||||
@1:
|
||||
cmp dest, dest_end
|
||||
ldrmi tmp, [src], #4 // [dest++] <- [src++]
|
||||
strmi tmp, [dest], #4
|
||||
bmi @1
|
||||
#endif
|
||||
|
||||
//---- 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, 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
|
||||
|
||||
// wait writebuffer empty
|
||||
mcr p15, 0, tmp, c7, c10, 4
|
||||
|
||||
@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+WRAM: Base = 0x02000000, Size = 32MB*, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||
; Region 1Dbg: MAIN_MEM+WRAM: Base = 0x02000000, Size = 32MB, 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: MAIN_MEM_HI: Base = 0x08000000, Size = 256MB, I:Cach Buf / D:Cach Buf, I:RW / D:RW
|
||||
; 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, 32MB )
|
||||
SET_PROTECTION_B( c1, HW_MAIN_MEM_MAIN, 32MB )
|
||||
|
||||
//---- サウンドデータ領域
|
||||
#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_MAIN_MEM_HI, 32MB )
|
||||
//SET_PROTECTION_B( c3, HW_MAIN_MEM_HI, 32MB )
|
||||
SET_PROTECTION_A( c3, HW_TWL_MAIN_MEM_IMAGE, 32MB )
|
||||
SET_PROTECTION_B( c3, HW_TWL_MAIN_MEM_IMAGE, 32MB )
|
||||
|
||||
//---- データ 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 + WRAM
|
||||
// 3: MAIN_MEM_HI (or CTRDG)
|
||||
// 6: BIOS
|
||||
//
|
||||
mov r0, #REGION_BIT(0,1,0,1,0,0,1,0)
|
||||
mcr p15, 0, r0, c2, c0, 1
|
||||
|
||||
//
|
||||
// データキャッシュ イネーブル (リージョン設定)
|
||||
// 1: MAIN_MEM + WRAM
|
||||
// 3: MAIN_MEM_HI (or CTRDG)
|
||||
// 6: BIOS
|
||||
//
|
||||
mov r0, #REGION_BIT(0,1,0,1,0,0,1,0)
|
||||
mcr p15, 0, r0, c2, c0, 0
|
||||
|
||||
//
|
||||
// ライトバッファ イネーブル(リージョン設定)
|
||||
// 1: MAIN_MEM + WRAM
|
||||
// 3: MAIN_MEM_HI (or CTRDG)
|
||||
//
|
||||
mov r0, #REGION_BIT(0,1,0,1,0,0,0,0)
|
||||
mcr p15, 0, r0, c3, c0, 0
|
||||
|
||||
//
|
||||
// 命令アクセス許可 (リージョン設定)
|
||||
// IO_VRAM : RW
|
||||
// MAIN_MEM_MAIN : RW
|
||||
// MAIN_MEM_SUB : NA
|
||||
// MAIN_MEM_HI : RW
|
||||
// DTCM : NA
|
||||
// ITCM : RW
|
||||
// BIOS : RO
|
||||
// SHARED : NA
|
||||
//
|
||||
ldr r0, =REGION_ACC(RW,RW,NA,RW,NA,RW,RO,NA)
|
||||
mcr p15, 0, r0, c5, c0, 3
|
||||
|
||||
//
|
||||
// データアクセス許可(リージョン設定)
|
||||
// IO_VRAM : RW
|
||||
// MAIN_MEM_MAIN : RW
|
||||
// MAIN_MEM_SUB : NA
|
||||
// MAIN_MEM_HI : 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: TwlStartUp
|
||||
|
||||
Description: hook for user start up
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
SDK_WEAK_SYMBOL void TwlStartUp(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)
|
||||
}
|
||||
32
build/libraries/init/Makefile
Normal file
32
build/libraries/init/Makefile
Normal file
@ -0,0 +1,32 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlIPL - 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.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev:$
|
||||
# $Author:$
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9 \
|
||||
ARM7 \
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
58
build/libraries/mi/ARM9/Makefile
Normal file
58
build/libraries/mi/ARM9/Makefile
Normal file
@ -0,0 +1,58 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlFirm - 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.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev:$
|
||||
# $Author:$
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS =
|
||||
SUBMAKES =
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
# build ARM & THUMB libraries
|
||||
FIRM_CODEGEN_ALL ?= TRUE
|
||||
|
||||
SRCDIR = .
|
||||
|
||||
SRCS = \
|
||||
mi_init_mainMemory.c \
|
||||
|
||||
TARGET_LIB = libmi$(FIRM_LIBSUFFIX).a
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
INSTALL_TARGETS = $(TARGETS)
|
||||
INSTALL_DIR = $(FIRM_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 $(TWLFIRM_ROOT)/build/buildtools/modulerules
|
||||
|
||||
#===== End of Makefile =====
|
||||
81
build/libraries/mi/ARM9/mi_init_mainMemory.c
Normal file
81
build/libraries/mi/ARM9/mi_init_mainMemory.c
Normal file
@ -0,0 +1,81 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL - libraries - mi
|
||||
File: mi_init_mainMemory.c
|
||||
|
||||
Copyright 2007 Nintendo. All rights reserved.
|
||||
|
||||
These coded instructions, statements, and computer programs contain
|
||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
Company Ltd., and are protected by Federal copyright law. They may
|
||||
not be disclosed to third parties or copied or duplicated in any form,
|
||||
in whole or in part, without the prior written consent of Nintendo.
|
||||
|
||||
$Date:: $
|
||||
$Rev$
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <firm/mi.h>
|
||||
#include <nitro/code32.h>
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: MIi_InitMainMemCR
|
||||
|
||||
Description: change mainmem into the burst mode
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
asm void MIi_InitMainMemCR( void )
|
||||
{
|
||||
mov r12, lr
|
||||
|
||||
mov r0, #0x8000 // low period 0.97ms
|
||||
bl OS_SpinWait
|
||||
|
||||
ldr r3, =REG_EXMEMCNT_ADDR
|
||||
mov r1, #REG_MI_EXMEMCNT_CE2_MASK
|
||||
ldrh r2, [r3]
|
||||
tst r2, r1
|
||||
bxne r12
|
||||
|
||||
strh r1, [r3]
|
||||
|
||||
mov r0, #0x8000 // high period 0.97ms
|
||||
bl OS_SpinWait
|
||||
|
||||
ldr r3, =HW_WRAM_AREA - 2
|
||||
#if PLATFORM == BB
|
||||
ldr r0, =MMEM_DCR0_BURST_MODE | MMEM_DCR0_BURST_CONTINUOUS \
|
||||
| MMEM_DCR0_PARTIAL_REFRESH_NONE | MMEM_DCR0_SB1
|
||||
ldr r1, =MMEM_DCR1_1ST_R4_W3 | MMEM_DCR1_BURST_WRITE | MMEM_DCR1_BURST_LINER \
|
||||
| MMEM_DCR1_CLOCK_TRIGGER_UP | MMEM_DCR1_SB1
|
||||
ldr r2, =HW_MAIN_MEM | MMEM_DCR2_CLOCK_TRIGGER_UP \
|
||||
| MMEM_DCR2_BURST_MODE | MMEM_DCR2_BURST_CONTINUOUS \
|
||||
| MMEM_DCR2_1ST_R4_W3 | MMEM_DCR2_BURST_WRITE | MMEM_DCR2_BURST_LINER \
|
||||
| MMEM_DCR2_PARTIAL_REFRESH_NONE | MMEM_DCR2_SB1
|
||||
ldrh lr, [r3]
|
||||
strh lr, [r3]
|
||||
strh lr, [r3]
|
||||
strh r0, [r3]
|
||||
strh r1, [r3]
|
||||
ldrh lr, [r2]
|
||||
#else // PLATFORM == TS
|
||||
ldr r0, =MMEM_TCR0
|
||||
ldr r1, =MMEM_TCR1
|
||||
ldr r2, =MMEM_TCR2
|
||||
ldrh lr, [r3]
|
||||
strh lr, [r3]
|
||||
strh lr, [r3]
|
||||
strh r0, [r3]
|
||||
strh r1, [r3]
|
||||
strh r2, [r3]
|
||||
#endif // PLATFORM == TS
|
||||
|
||||
ldr r3, =REG_EXMEMCNT_ADDR
|
||||
mov r1, #REG_MI_EXMEMCNT_IFM_MASK | REG_MI_EXMEMCNT_CE2_MASK
|
||||
strh r1, [r3]
|
||||
|
||||
bx r12
|
||||
}
|
||||
|
||||
31
build/libraries/mi/Makefile
Normal file
31
build/libraries/mi/Makefile
Normal file
@ -0,0 +1,31 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlIPL - 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.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev:$
|
||||
# $Author:$
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/commondefs
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLFIRM_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
@ -20,9 +20,9 @@
|
||||
#include <twl.h>
|
||||
|
||||
#include <firm/os.h>
|
||||
#include <firm/mi.h>
|
||||
/*
|
||||
#include <firm/memorymap.h>
|
||||
#include <firm/mi.h>
|
||||
#include <firm/nvram.h>
|
||||
#include <firm/pm.h>
|
||||
#include <firm/gcd.h>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user