mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・ランチャーでバックライト輝度変更が行えるよう変更。
・リセットパラメータ取得部分の整備。(SDKの対応待ち) git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@189 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
8b0e7bf9d9
commit
0d5ce3f4a5
@ -35,7 +35,7 @@
|
|||||||
#include <twl/aes.h>
|
#include <twl/aes.h>
|
||||||
#include <twl/mcu.h>
|
#include <twl/mcu.h>
|
||||||
#include <sysmenu/boot/common/boot.h>
|
#include <sysmenu/boot/common/boot.h>
|
||||||
#include <sysmenu/sysmenu_work.h>
|
#include <sysmenu/sysmenu_lib/common/sysmenu_work.h>
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
定数定義
|
定数定義
|
||||||
@ -78,20 +78,29 @@ void
|
|||||||
TwlSpMain(void)
|
TwlSpMain(void)
|
||||||
{
|
{
|
||||||
OSHeapHandle heapHandle;
|
OSHeapHandle heapHandle;
|
||||||
|
|
||||||
|
// SYSMワークのクリア
|
||||||
|
MI_CpuClear32( SYSMi_GetWork(), sizeof(SYSM_work) );
|
||||||
|
|
||||||
// OS 初期化
|
// OS 初期化
|
||||||
OS_Init();
|
OS_Init();
|
||||||
PrintDebugInfo();
|
PrintDebugInfo();
|
||||||
|
|
||||||
// Cold/Hotスタート判定
|
// Cold/Hotスタート判定
|
||||||
if( *(vu32 *)HW_RESET_PARAMETER_BUF == 0 ) { // NANDファームが毎回このバッファにマイコンフリーレジスタ値をセットしてくれる
|
if( *(vu32 *)HW_RESET_PARAMETER_BUF == 0 ) { // NANDファームが毎回このバッファにマイコンフリーレジスタ値をセットしてくれる
|
||||||
u32 data = 1;
|
u32 data = 1;
|
||||||
MCU_SetFreeRegisters( 0, (u8 *)&data, 4 ); // マイコンフリーレジスタにホットスタートフラグをセット
|
MCU_SetFreeRegisters( 0, (u8 *)&data, 4 ); // マイコンフリーレジスタにホットスタートフラグをセット
|
||||||
SYSM_GetWork()->isHotStart = FALSE;
|
SYSMi_GetWork()->isHotStart = FALSE;
|
||||||
}else {
|
}else {
|
||||||
SYSM_GetWork()->isHotStart = TRUE;
|
MI_CpuCopy32 ( SYSMi_GetResetParam(), &SYSMi_GetWork()->resetParam, sizeof(ResetParam) );
|
||||||
|
SYSMi_GetWork()->isHotStart = TRUE;
|
||||||
}
|
}
|
||||||
SYSM_GetWork()->isARM9Start = TRUE; // ※HW_RED_RESERVEDはNANDファームでクリアしておいて欲しい
|
#ifdef SYSM_RESET_PARAM_READY_
|
||||||
|
MI_CpuClear32( SYSMi_GetResetParam(), sizeof(ResetParam) );
|
||||||
|
#else
|
||||||
|
MI_CpuClear32( &SYSMi_GetWork()->resetParam, sizeof(ResetParam) );
|
||||||
|
#endif
|
||||||
|
SYSMi_GetWork()->isARM9Start = TRUE; // ※HW_RED_RESERVEDはNANDファームでクリアしておいて欲しい
|
||||||
|
|
||||||
// ヒープ領域設定
|
// ヒープ領域設定
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,46 +0,0 @@
|
|||||||
#! make -f
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
# Project: TwlIPL
|
|
||||||
# File: Makefile
|
|
||||||
#
|
|
||||||
# Copyright 2007 Nintendo. All rights reserved.
|
|
||||||
#
|
|
||||||
# These coded instructions, statements, and computer programs contain
|
|
||||||
# proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
||||||
# Company Ltd., and are protected by Federal copyright law. They may
|
|
||||||
# not be disclosed to third parties or copied or duplicated in any form,
|
|
||||||
# in whole or in part, without the prior written consent of Nintendo.
|
|
||||||
#
|
|
||||||
# $Date:: 2007-10-03#$
|
|
||||||
# $Rev: 1319 $
|
|
||||||
# $Author: kitase_hirotake $
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
SUBDIRS =
|
|
||||||
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
TARGET_PLATFORM = TWL
|
|
||||||
TWL_ARCHGEN = LIMITED
|
|
||||||
TWL_PROC = ARM9
|
|
||||||
|
|
||||||
SRCS = crt1.c
|
|
||||||
|
|
||||||
TARGET_OBJ = crt1.o
|
|
||||||
|
|
||||||
LINCLUDES = $(COMMON_DIR)
|
|
||||||
|
|
||||||
include $(TWLIPL_ROOT)/build/buildtools/commondefs.sysmenu
|
|
||||||
|
|
||||||
INSTALL_TARGETS = $(TARGETS)
|
|
||||||
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
do-build: $(TARGETS)
|
|
||||||
|
|
||||||
include $(TWLIPL_ROOT)/build/buildtools/modulerules.sysmenu
|
|
||||||
|
|
||||||
|
|
||||||
#===== End of Makefile =====
|
|
||||||
@ -26,7 +26,7 @@ TARGET_PLATFORM = TWL
|
|||||||
TWL_ARCHGEN = LIMITED
|
TWL_ARCHGEN = LIMITED
|
||||||
TWL_PROC = ARM9
|
TWL_PROC = ARM9
|
||||||
|
|
||||||
SRCS = sysmenu_lib.c sysmenu_card.c sysmenu_util.c gameBoot.c ninLogoFunc.c \
|
SRCS = sysmenu_lib.c sysmenu_card.c sysmenu_util.c ninLogoFunc.c \
|
||||||
settingsAPI.c mountInfo.c
|
settingsAPI.c mountInfo.c
|
||||||
|
|
||||||
TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a
|
TARGET_LIB = libsysmenu$(TWL_LIBSUFFIX).a
|
||||||
|
|||||||
@ -1,559 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Project: TwlIPL
|
|
||||||
File: crt1.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 <twl/code32.h>
|
|
||||||
#include <twl.h>
|
|
||||||
#include <sysmenu/sysmenu_work.h> // SYSM changed.
|
|
||||||
|
|
||||||
#define SDK_NOCOMPRESS // SYSM changed.
|
|
||||||
|
|
||||||
|
|
||||||
extern void NitroMain( void );
|
|
||||||
extern void OS_IrqHandler( void );
|
|
||||||
static void do_autoload( void );
|
|
||||||
static void init_cp15( void );
|
|
||||||
void _start( void );
|
|
||||||
extern void* const _start_ModuleParams[];
|
|
||||||
void _start_AutoloadDoneCallback( void* argv[] );
|
|
||||||
|
|
||||||
extern void __call_static_initializers( void );
|
|
||||||
extern void _fp_init( void );
|
|
||||||
|
|
||||||
// from LCF
|
|
||||||
extern u32 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
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: _start
|
|
||||||
|
|
||||||
Description: Start up
|
|
||||||
|
|
||||||
Arguments: None
|
|
||||||
|
|
||||||
Returns: None.
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
#define INITi_HW_DTCM SDK_AUTOLOAD_DTCM_START
|
|
||||||
|
|
||||||
__declspec ( weak ) 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
|
|
||||||
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
|
|
||||||
|
|
||||||
//---- load autoload block and initialize bss
|
|
||||||
#ifndef SDK_NOCOMPRESS
|
|
||||||
ldr r1, =_start_ModuleParams
|
|
||||||
ldr r0, [r1, #20] // r0 = bottom of compressed data
|
|
||||||
bl MIi_UncompressBackward
|
|
||||||
#endif
|
|
||||||
bl do_autoload
|
|
||||||
|
|
||||||
//---- clear memory
|
|
||||||
// DTCM (16KB)
|
|
||||||
mov r0, #0
|
|
||||||
ldr r1, =INITi_HW_DTCM
|
|
||||||
mov r2, #HW_DTCM_SIZE
|
|
||||||
bl MIi_CpuClear32
|
|
||||||
|
|
||||||
/* // BG/OBJ palette (1KB) // SYSM changed.
|
|
||||||
mov r0, #0
|
|
||||||
ldr r1, =HW_PLTT
|
|
||||||
mov r2, #HW_PLTT_SIZE
|
|
||||||
bl MIi_CpuClear32
|
|
||||||
|
|
||||||
// OAM (1KB)
|
|
||||||
mov r0, #0x0200
|
|
||||||
ldr r1, =HW_OAM
|
|
||||||
mov r2, #HW_OAM_SIZE
|
|
||||||
bl MIi_CpuClear32
|
|
||||||
*/
|
|
||||||
//---- 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
|
|
||||||
ldr lr, =RETURN_FROM_MAIN_ARM9_FUNCP // SYSM changed.
|
|
||||||
|
|
||||||
bx r1
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
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,
|
|
||||||
#ifndef SDK_NOCOMPRESS
|
|
||||||
(void*)0, // CompressedStaticEnd
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: MIi_UncompressBackward
|
|
||||||
|
|
||||||
Description: Uncompress special archive for module compression
|
|
||||||
|
|
||||||
Arguments: bottom = Bottom adrs of packed archive + 1
|
|
||||||
bottom[-12] = offset for top of compressed data
|
|
||||||
inp_top = bottom + bottom[-12]
|
|
||||||
bottom[ -8] = offset for bottom of compressed data
|
|
||||||
inp = bottom + bottom[ -8]
|
|
||||||
bottom[ -4] = offset for bottom of original data
|
|
||||||
outp = bottom + bottom[ -4]
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
int bufferTop;
|
|
||||||
int compressBottom;
|
|
||||||
int 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
|
|
||||||
bic inp, inp_top, #HW_CACHE_LINE_SIZE - 1
|
|
||||||
@cacheflush:
|
|
||||||
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_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
|
|
||||||
|
|
||||||
@2:
|
|
||||||
cmp infop, infop_end // reach to end?
|
|
||||||
beq @fill_bss
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
//---- fill static static bss with 0
|
|
||||||
@fill_bss:
|
|
||||||
ldr dest, [ptable, #12] // BSS segment start
|
|
||||||
ldr dest_end, [ptable, #16] // BSS segment end
|
|
||||||
mov tmp, #0
|
|
||||||
@3:
|
|
||||||
cmp dest, dest_end
|
|
||||||
strcc tmp, [dest], #4
|
|
||||||
bcc @3
|
|
||||||
|
|
||||||
// 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.
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
__declspec ( weak ) 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 = 4MB, 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
|
|
||||||
; 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, 4MB )
|
|
||||||
SET_PROTECTION_B( c1, HW_MAIN_MEM_MAIN, 4MB )
|
|
||||||
|
|
||||||
/* //---- サウンドデータ領域 // SYSM changed.
|
|
||||||
#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.
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
__declspec ( weak ) void NitroStartUp( void )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@ -1,247 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Project: TwlIPL
|
|
||||||
File: gameBoot.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 <twl.h>
|
|
||||||
#include <sysmenu/memorymap.h>
|
|
||||||
|
|
||||||
// define data-------------------------------------------------------
|
|
||||||
#define C1_DTCM_ENABLE 0x00010000 // データTCM イネーブル
|
|
||||||
#define C1_EXCEPT_VEC_UPPER 0x00002000 // 例外ベクタ 上位アドレス(こちらに設定して下さい)
|
|
||||||
#define C1_SB1_BITSET 0x00000078 // レジスタ1用1固定ビット列(後期アボートモデル、DATA32構成シグナル制御、PROG32構成シグナル制御、ライトバッファイネーブル)
|
|
||||||
|
|
||||||
#define INITi_HW_DTCM SDK_AUTOLOAD_DTCM_START
|
|
||||||
|
|
||||||
// extern data-------------------------------------------------------
|
|
||||||
|
|
||||||
// from LCF
|
|
||||||
extern u32 SDK_IRQ_STACKSIZE[];
|
|
||||||
|
|
||||||
// function's prototype----------------------------------------------
|
|
||||||
void ReturnFromMain(void);
|
|
||||||
void ResetCP15(void);
|
|
||||||
void ClearBankregAndStack(void);
|
|
||||||
void CpuClear32Byte(void);
|
|
||||||
void BootFuncEnd(void);
|
|
||||||
|
|
||||||
// global variables--------------------------------------------------
|
|
||||||
|
|
||||||
// static variables--------------------------------------------------
|
|
||||||
|
|
||||||
// const data--------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
#include <twl/code32.h> // このソースはデフォルトではARMでコンパイルされる。
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// メインルーチンからのリターン
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
/*
|
|
||||||
※ReturnFromMainをRamの後方にコピーする方法が、今はReturnFromMainアドレスから、
|
|
||||||
(BootFuncEnd - ReturnFromMain)サイズ分だけコピーとしているが、
|
|
||||||
この方法だと、コンパイラの最適化仕様で関数並びが変わってしまった時におかしくなる。
|
|
||||||
何か他にいい方法はないか?
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
asm void ReturnFromMain(void)
|
|
||||||
{
|
|
||||||
//---------------------------------------
|
|
||||||
// データキャッシュを全て無効に。(DC_InvalidateAllを抜き出して実装)
|
|
||||||
//---------------------------------------
|
|
||||||
mov r0, #0
|
|
||||||
mcr p15, 0, r0, c7, c6, 0
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
// ARM7との同期をとる(subp_stateが2になるのを待って、mainp_stateを2にする。)
|
|
||||||
//---------------------------------------
|
|
||||||
ldr r1, =REG_SUBPINTF_ADDR
|
|
||||||
@0 ldrh r0, [r1]
|
|
||||||
and r0, r0, #0x000f
|
|
||||||
cmp r0, #0x0002
|
|
||||||
bne @0
|
|
||||||
mov r0, #0x0200
|
|
||||||
strh r0, [r1]
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
// ISデバッガ動作フラグの格納
|
|
||||||
//---------------------------------------
|
|
||||||
#ifdef __IS_DEBUGGER_BUILD
|
|
||||||
ldr r3, =HW_MAIN_MEM_EX_END
|
|
||||||
sub r0, r3, #0x400
|
|
||||||
ldrh r11, [r0, #0x14] // r11 = GetMovedInfoFromIPL1Addr()->isOnDebugger
|
|
||||||
#endif
|
|
||||||
//---------------------------------------
|
|
||||||
// ARM7との同期をとる(subp_stateが1になるのを待って、mainp_stateを1にする。)
|
|
||||||
//---------------------------------------
|
|
||||||
ldr r1, =REG_SUBPINTF_ADDR
|
|
||||||
@1 ldrh r0, [r1]
|
|
||||||
and r0, r0, #0x000f
|
|
||||||
cmp r0, #0x0001
|
|
||||||
bne @1
|
|
||||||
mov r0, #0x0100
|
|
||||||
strh r0, [r1]
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
// バンクレジスタ&スタッククリア
|
|
||||||
//---------------------------------------
|
|
||||||
bl ClearBankregAndStack
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
// プロテクションユニットの解除
|
|
||||||
//---------------------------------------
|
|
||||||
bl ResetCP15
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
// ARM7との最終同期をとる(subp_stateが0になるのを待って、mainp_stateを0にする)
|
|
||||||
//---------------------------------------
|
|
||||||
ldr r1, =REG_SUBPINTF_ADDR
|
|
||||||
@2 ldrh r0, [r1]
|
|
||||||
and r0, r0, #0x000f
|
|
||||||
cmp r0, #0x0001
|
|
||||||
beq @2
|
|
||||||
ldr r3, =REG_VCOUNT_ADDR // Vカウンタを全IPL2バージョンで同一値(=0)でアプリに引き渡すようにする。
|
|
||||||
@3 ldrh r0, [r3]
|
|
||||||
cmp r0, #0
|
|
||||||
bne @3
|
|
||||||
// mov r0, #0 // R0に読んだVカウント値が"0"なので、これはいらない
|
|
||||||
strh r0, [r1]
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
// R11の値をもとにブートアドレス取得
|
|
||||||
//---------------------------------------
|
|
||||||
ldr r3, =HW_MAIN_MEM_EX_END // ゲーム・エントリポイント 獲得
|
|
||||||
ldr r12, [r3, #-(0x200 - 0x24)] // rmhp->arm9->entryAddr
|
|
||||||
mov lr, r12
|
|
||||||
|
|
||||||
#ifdef __IS_DEBUGGER_BUILD
|
|
||||||
cmp r11, #1 // if (!GetMovedInfoFromIPL1Addr()->isOnDebugger)
|
|
||||||
ldreq r12, [r3, #-(0x200 - 0x168)] // デバッガ・エントリポイント 獲得
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
// 汎用レジスタクリア
|
|
||||||
//---------------------------------------
|
|
||||||
ldr r11, =INITi_HW_DTCM // クリアしたDTCMからデータを読み出して、汎用レジスタをクリアする。
|
|
||||||
ldmia r11, {r0-r10}
|
|
||||||
mov r11, #0
|
|
||||||
|
|
||||||
//---------------------------------------
|
|
||||||
// ゲームブート
|
|
||||||
//---------------------------------------
|
|
||||||
bx r12
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// システム制御コプロセッサ リセット
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
asm void ResetCP15(void)
|
|
||||||
{
|
|
||||||
// プロテクションユニット&キャッシュ&ITCM無効。DTCMは有効(スタックをクリアするため)
|
|
||||||
ldr r0, = C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET
|
|
||||||
mcr p15, 0, r0, c1, c0, 0
|
|
||||||
|
|
||||||
// ITCMの割り当てを解除
|
|
||||||
mov r0, #0
|
|
||||||
mcr p15, 0, r0, c6, c5, 0
|
|
||||||
|
|
||||||
// DTCMの割り当てを解除
|
|
||||||
// mov r0,#0
|
|
||||||
// mcr p15, 0, r0, c9, c1, 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
|
|
||||||
|
|
||||||
bx lr
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// バンクレジスタ リセット & スタック領域 クリア
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
asm void ClearBankregAndStack(void)
|
|
||||||
{
|
|
||||||
mov r12, lr
|
|
||||||
|
|
||||||
#ifndef IPL2_ONLYMULTIBOOT
|
|
||||||
mov r0, #0xc0 | HW_PSR_SVC_MODE // SVCモードへ切り換え & IRQ/FIQ不許可
|
|
||||||
msr cpsr_cxsf, r0
|
|
||||||
ldr r0, =INITi_HW_DTCM
|
|
||||||
add r0, r0, #0x3fc0
|
|
||||||
mov sp, r0 // SP のセット
|
|
||||||
mov lr, #0
|
|
||||||
msr spsr_csxf, lr
|
|
||||||
|
|
||||||
mov r0, #0xc0 | HW_PSR_IRQ_MODE // IRQモードへ切り換え & IRQ/FIQ不許可
|
|
||||||
msr cpsr_cxsf, r0
|
|
||||||
ldr r0, =INITi_HW_DTCM
|
|
||||||
add r0, r0, #0x3fc0
|
|
||||||
sub r0, r0, #HW_SVC_STACK_SIZE
|
|
||||||
mov sp, r0 // SP のセット
|
|
||||||
mov lr, #0
|
|
||||||
msr spsr_cxsf, lr
|
|
||||||
|
|
||||||
ldr r1, =SDK_IRQ_STACKSIZE
|
|
||||||
sub r1, r0, r1
|
|
||||||
mov r0, #0xc0 | HW_PSR_SYS_MODE // システムモードへ切り換え & IRQ/FIQ不許可
|
|
||||||
msr cpsr_cxsf, r0
|
|
||||||
sub sp, r1, #4 // SP のセット & 4byte for stack check code
|
|
||||||
#endif // IPL2_ONLYMULTIBOOT
|
|
||||||
|
|
||||||
ldr r0, =HW_ITCM // ITCMのクリア
|
|
||||||
mov r1, #HW_ITCM_SIZE
|
|
||||||
bl CpuClear32Byte
|
|
||||||
|
|
||||||
ldr r0, =INITi_HW_DTCM // スタックを含めたDTCMのクリア
|
|
||||||
mov r1, #HW_DTCM_SIZE
|
|
||||||
bl CpuClear32Byte
|
|
||||||
|
|
||||||
bx r12
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 32byte単位のメモリクリア r0 dstp,r1 byteSize
|
|
||||||
asm void CpuClear32Byte(void)
|
|
||||||
{
|
|
||||||
add r2, r0, r1 // 終了アドレスの算出
|
|
||||||
mov r1, r1, lsr #5 // サイズは32byte単位
|
|
||||||
mov r3, #0
|
|
||||||
mov r4, r3
|
|
||||||
mov r5, r3
|
|
||||||
mov r6, r3
|
|
||||||
mov r7, r3
|
|
||||||
mov r8, r3
|
|
||||||
mov r9, r3
|
|
||||||
mov r10, r3
|
|
||||||
@0 cmp r0, r2 // クリア終了?
|
|
||||||
stmltia r0!, {r3-r10}
|
|
||||||
blt @0
|
|
||||||
bx lr
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BootFuncEnd(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#include <twl/codereset.h> // ここまで。
|
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ BOOL SYSM_IsCardPulledOut(void)
|
|||||||
case CARD_DETECTING:
|
case CARD_DETECTING:
|
||||||
if (SYSMi_IsCardDataReady()) {
|
if (SYSMi_IsCardDataReady()) {
|
||||||
u32 cardID = *(vu32 *)REG_CARD_DATA;
|
u32 cardID = *(vu32 *)REG_CARD_DATA;
|
||||||
if ( ( cardID != SYSM_GetWork()->nCardID ) &&
|
if ( ( cardID != SYSMi_GetWork()->nCardID ) &&
|
||||||
SYSM_IsExistCard() )
|
SYSM_IsExistCard() )
|
||||||
{
|
{
|
||||||
cpw.detectPullOut = TRUE;
|
cpw.detectPullOut = TRUE;
|
||||||
|
|||||||
@ -19,9 +19,7 @@
|
|||||||
#include <sysmenu.h>
|
#include <sysmenu.h>
|
||||||
#include <sysmenu/boot/common/boot.h>
|
#include <sysmenu/boot/common/boot.h>
|
||||||
#include "sysmenu_define.h"
|
#include "sysmenu_define.h"
|
||||||
#include "sysmenu_card.h"
|
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
#include "mb_child.h"
|
|
||||||
|
|
||||||
// define data-----------------------------------------------------------------
|
// define data-----------------------------------------------------------------
|
||||||
|
|
||||||
@ -51,9 +49,7 @@ void *(*SYSM_Alloc)( u32 size );
|
|||||||
void (*SYSM_Free )( void *ptr );
|
void (*SYSM_Free )( void *ptr );
|
||||||
|
|
||||||
#ifdef __SYSM_DEBUG
|
#ifdef __SYSM_DEBUG
|
||||||
SharedWork *swp; // デバッガでのIPL1SharedWorkのウォッチ用
|
|
||||||
SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用
|
SYSM_work *pSysm; // デバッガでのSYSMワークのウォッチ用
|
||||||
NitroConfigData *ncdp; // デバッガでのNCデータ のウォッチ用
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// static variable-------------------------------------------------------------
|
// static variable-------------------------------------------------------------
|
||||||
@ -80,8 +76,7 @@ static BannerCheckParam s_bannerCheckList[ NTR_BNR_VER_MAX ] = {
|
|||||||
void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
||||||
{
|
{
|
||||||
#ifdef __SYSM_DEBUG
|
#ifdef __SYSM_DEBUG
|
||||||
pSysm = SYSM_GetWork();
|
pSysm = SYSMi_GetWork();
|
||||||
ncdp = GetTSD();
|
|
||||||
#endif /* __SYSM_DEBUG */
|
#endif /* __SYSM_DEBUG */
|
||||||
|
|
||||||
// ARM7コンポーネント用プロテクションユニット領域変更
|
// ARM7コンポーネント用プロテクションユニット領域変更
|
||||||
@ -96,7 +91,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
|||||||
// MI_SetMainMemoryPriority(MI_PROCESSOR_ARM7);
|
// MI_SetMainMemoryPriority(MI_PROCESSOR_ARM7);
|
||||||
// MI_SetWramBank(MI_WRAM_ARM7_ALL);
|
// MI_SetWramBank(MI_WRAM_ARM7_ALL);
|
||||||
|
|
||||||
SVC_CpuClearFast(0x0000, (u16 *)SYSM_GetWork(), sizeof(SYSM_work)); // SYSMワークのクリア
|
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -117,7 +112,10 @@ void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
|||||||
// パラメータリード
|
// パラメータリード
|
||||||
void SYSM_ReadParameters( void )
|
void SYSM_ReadParameters( void )
|
||||||
{
|
{
|
||||||
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
// ARM7のリセットパラメータ取得が完了するのを待つ
|
||||||
|
while( !SYSMi_GetWork()->isARM9Start ) {
|
||||||
|
SVC_WaitByLoop( 0x1000 );
|
||||||
|
}
|
||||||
|
|
||||||
if( SYSM_ReadTWLSettingsFile() ) { // NANDからTWL本体設定データをリード
|
if( SYSM_ReadTWLSettingsFile() ) { // NANDからTWL本体設定データをリード
|
||||||
SYSM_SetBackLightBrightness( (u8)TSD_GetBacklightBrightness() ); // 読み出したTWL本体設定データをもとにバックライト輝度設定
|
SYSM_SetBackLightBrightness( (u8)TSD_GetBacklightBrightness() ); // 読み出したTWL本体設定データをもとにバックライト輝度設定
|
||||||
@ -279,6 +277,12 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// リセットパラメータの取得
|
||||||
|
const ResetParam *SYSM_GetResetParam( void )
|
||||||
|
{
|
||||||
|
return (const ResetParam *)&SYSMi_GetWork()->resetParam;
|
||||||
|
}
|
||||||
|
|
||||||
// ロゴデモスキップか?
|
// ロゴデモスキップか?
|
||||||
BOOL SYSM_IsLogoDemoSkip( void )
|
BOOL SYSM_IsLogoDemoSkip( void )
|
||||||
{
|
{
|
||||||
@ -292,7 +296,7 @@ BOOL SYSM_IsLogoDemoSkip( void )
|
|||||||
static BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
static BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
||||||
{
|
{
|
||||||
#ifdef __IS_DEBUGGER_BUILD
|
#ifdef __IS_DEBUGGER_BUILD
|
||||||
return ( SYSM_GetWork()->isOnDebugger &&
|
return ( SYSMi_GetWork()->isOnDebugger &&
|
||||||
SYSMi_IsValidCard() &&
|
SYSMi_IsValidCard() &&
|
||||||
SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE;
|
SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE;
|
||||||
#else
|
#else
|
||||||
@ -303,7 +307,7 @@ static BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
|||||||
// 有効なTWL/NTRカードが差さっているか?
|
// 有効なTWL/NTRカードが差さっているか?
|
||||||
BOOL SYSM_IsExistCard( void )
|
BOOL SYSM_IsExistCard( void )
|
||||||
{
|
{
|
||||||
return SYSM_GetWork()->isExistCard;
|
return SYSMi_GetWork()->isExistCard;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -493,12 +497,13 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
|||||||
// デバイス制御
|
// デバイス制御
|
||||||
//
|
//
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
#define BACKLIGHT_LEVEL_MAX 22
|
||||||
|
|
||||||
// バックライト輝度調整
|
// バックライト輝度調整
|
||||||
void SYSM_SetBackLightBrightness( u8 brightness )
|
void SYSM_SetBackLightBrightness( u8 brightness )
|
||||||
{
|
{
|
||||||
|
( void )PMi_WriteRegister( 0x20, (u16)( 8 + brightness * 2 ) ); // 輝度調整はとりあえず適当(※ハード担当に消費電力面から適当な値を確認する)
|
||||||
TSD_SetBacklightBrightness( brightness );
|
TSD_SetBacklightBrightness( brightness );
|
||||||
( void )PMi_WriteRegister( 4, (u16)brightness );
|
|
||||||
SYSM_WriteTWLSettingsFile();
|
SYSM_WriteTWLSettingsFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -550,7 +555,6 @@ static void SYSMi_WriteAdjustRTC( void )
|
|||||||
// バナーファイルの読み込みの実体
|
// バナーファイルの読み込みの実体
|
||||||
static void SYSMi_ReadCardBannerFile( void )
|
static void SYSMi_ReadCardBannerFile( void )
|
||||||
{
|
{
|
||||||
s32 lockCardID;
|
|
||||||
NTRBannerFile *pBanner = &s_bannerBuf;
|
NTRBannerFile *pBanner = &s_bannerBuf;
|
||||||
|
|
||||||
if( ( !SYSMi_IsValidCard() ) || ( *(void** )BANNER_ROM_OFFSET == NULL ) ) {
|
if( ( !SYSMi_IsValidCard() ) || ( *(void** )BANNER_ROM_OFFSET == NULL ) ) {
|
||||||
@ -559,13 +563,8 @@ static void SYSMi_ReadCardBannerFile( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ROMカードからのバナーデータのリード
|
// ROMカードからのバナーデータのリード
|
||||||
if ( ( lockCardID = OS_GetLockID() ) > 0 ) {
|
DC_FlushRange( pBanner, sizeof(NTRBannerFile) );
|
||||||
( void )OS_LockCard( (u16 )lockCardID );
|
CARD_ReadRom( 4, *(void** )BANNER_ROM_OFFSET, pBanner, sizeof(NTRBannerFile) );
|
||||||
DC_FlushRange( pBanner, sizeof(NTRBannerFile) );
|
|
||||||
SYSM_ReadCard(*(void** )BANNER_ROM_OFFSET, pBanner, sizeof(NTRBannerFile) );
|
|
||||||
( void )OS_UnLockCard( (u16 )lockCardID );
|
|
||||||
OS_ReleaseLockID( (u16 )lockCardID );
|
|
||||||
}
|
|
||||||
|
|
||||||
// バナーデータの正誤チェック
|
// バナーデータの正誤チェック
|
||||||
{
|
{
|
||||||
@ -621,7 +620,7 @@ BOOL SYSM_IsNTRCard( void )
|
|||||||
static int SYSMi_IsValidCard( void )
|
static int SYSMi_IsValidCard( void )
|
||||||
{
|
{
|
||||||
if( ( SYSM_GetCardRomHeader()->nintendo_logo_crc16 == 0xcf56 ) &&
|
if( ( SYSM_GetCardRomHeader()->nintendo_logo_crc16 == 0xcf56 ) &&
|
||||||
( SYSM_GetCardRomHeader()->header_crc16 == SYSM_GetWork()->cardHeaderCrc16 ) ) {
|
( SYSM_GetCardRomHeader()->header_crc16 == SYSMi_GetWork()->cardHeaderCrc16 ) ) {
|
||||||
return TRUE; // NTR,TWLカードあり(NintendoロゴCRC、カードヘッダCRCが正しい場合)
|
return TRUE; // NTR,TWLカードあり(NintendoロゴCRC、カードヘッダCRCが正しい場合)
|
||||||
// ※Nintendoロゴデータのチェックは、特許の都合上、ロゴ表示ルーチン起動後に行います。
|
// ※Nintendoロゴデータのチェックは、特許の都合上、ロゴ表示ルーチン起動後に行います。
|
||||||
}else {
|
}else {
|
||||||
@ -656,7 +655,6 @@ static BOOL SYSMi_CheckEntryAddress( void )
|
|||||||
// クローンブート判定
|
// クローンブート判定
|
||||||
static void SYSMi_CheckCardCloneBoot( void )
|
static void SYSMi_CheckCardCloneBoot( void )
|
||||||
{
|
{
|
||||||
s32 lockCardID;
|
|
||||||
u8 *buffp = (u8 *)&s_bannerBuf; // バナー用バッファをテンポラリとして使用
|
u8 *buffp = (u8 *)&s_bannerBuf; // バナー用バッファをテンポラリとして使用
|
||||||
u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000;
|
u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000;
|
||||||
u32 file_offset = total_rom_size & 0xFFFFFE00;
|
u32 file_offset = total_rom_size & 0xFFFFFE00;
|
||||||
@ -665,19 +663,14 @@ static void SYSMi_CheckCardCloneBoot( void )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ( lockCardID = OS_GetLockID() ) > 0 ) {
|
DC_FlushRange( buffp, BNR_IMAGE_SIZE );
|
||||||
( void )OS_LockCard( (u16 )lockCardID );
|
CARD_ReadRom( 4, (void *)file_offset, buffp, BNR_IMAGE_SIZE );
|
||||||
DC_FlushRange( buffp, BNR_IMAGE_SIZE );
|
|
||||||
SYSM_ReadCard( (void *)file_offset, buffp, BNR_IMAGE_SIZE );
|
|
||||||
( void )OS_UnLockCard( (u16 )lockCardID );
|
|
||||||
OS_ReleaseLockID( (u16 )lockCardID );
|
|
||||||
}
|
|
||||||
|
|
||||||
buffp += total_rom_size & 0x000001FF;
|
buffp += total_rom_size & 0x000001FF;
|
||||||
if( *buffp++ == 'a' && *buffp == 'c' ) {
|
if( *buffp++ == 'a' && *buffp == 'c' ) {
|
||||||
SYSM_GetWork()->cloneBootMode = CLONE_BOOT_MODE;
|
SYSMi_GetWork()->cloneBootMode = CLONE_BOOT_MODE;
|
||||||
}else {
|
}else {
|
||||||
SYSM_GetWork()->cloneBootMode = OTHER_BOOT_MODE;
|
SYSMi_GetWork()->cloneBootMode = OTHER_BOOT_MODE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -694,7 +687,7 @@ static void SYSMi_CheckRTC( void )
|
|||||||
!SYSM_CheckRTCTime( &time )
|
!SYSM_CheckRTCTime( &time )
|
||||||
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
|
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
|
||||||
||
|
||
|
||||||
( SYSM_GetWork()->rtcStatus & 0x01 )
|
( SYSMi_GetWork()->rtcStatus & 0x01 )
|
||||||
#endif
|
#endif
|
||||||
) { // RTCの異常を検出したら、rtc入力フラグ&rtcOffsetを0にしてNVRAMに書き込み。
|
) { // RTCの異常を検出したら、rtc入力フラグ&rtcOffsetを0にしてNVRAMに書き込み。
|
||||||
OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n");
|
OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n");
|
||||||
|
|||||||
@ -853,9 +853,9 @@ static void CallbackChild_MB( u32 status, void *arg )
|
|||||||
|
|
||||||
case MB_COMM_CSTATE_BOOT_READY: // ブート準備完了
|
case MB_COMM_CSTATE_BOOT_READY: // ブート準備完了
|
||||||
OS_Printf("CB: boot ready.\n");
|
OS_Printf("CB: boot ready.\n");
|
||||||
// SYSM_GetWork()->mb_flag = 1;
|
// SYSMi_GetWork()->mb_flag = 1;
|
||||||
// SYSM_GetWork()->mb_ggid = *(u32 *)( MB_GetBeaconRecvStatus()->list[ pCwork->connectTargetNo ].bssDesc.gameInfo.ggid );
|
// SYSMi_GetWork()->mb_ggid = *(u32 *)( MB_GetBeaconRecvStatus()->list[ pCwork->connectTargetNo ].bssDesc.gameInfo.ggid );
|
||||||
// SYSM_GetWork()->mb_ggid = MB_GetBeaconRecvStatus()->list[ pCwork->connectTargetNo ].gameInfo.ggid;
|
// SYSMi_GetWork()->mb_ggid = MB_GetBeaconRecvStatus()->list[ pCwork->connectTargetNo ].gameInfo.ggid;
|
||||||
(void)SetPrgNextSeqQue( PSEQ_BOOT_READY );
|
(void)SetPrgNextSeqQue( PSEQ_BOOT_READY );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@ -18,8 +18,8 @@
|
|||||||
|
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
../../../libraries_sysmenu/sysmenu \
|
../../../libraries_sysmenu/sysmenu \
|
||||||
# ../../../libraries_sysmenu/boot \
|
../../../libraries_sysmenu/boot \
|
||||||
# ../../../components/hyena.TWL
|
../../../components/hyena.TWL
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -22,12 +22,12 @@
|
|||||||
|
|
||||||
|
|
||||||
// define data------------------------------------------
|
// define data------------------------------------------
|
||||||
#define LAUNCHER_ELEMENT_NUM 4 // ƒ<>ƒSƒ<53>ƒjƒ…<C692>[‚Ì<E2809A>€–Ú<E28093>”
|
#define LAUNCHER_ELEMENT_NUM 4 // ƒ<>ƒSƒ<53>ƒjƒ…<C692>[‚Ì<E2809A>€–Ú<E28093>”
|
||||||
|
|
||||||
#define B_LIGHT_BUTTON_TOP_X 24
|
#define B_LIGHT_BUTTON_TOP_X ( 0 )
|
||||||
#define B_LIGHT_BUTTON_TOP_Y 21
|
#define B_LIGHT_BUTTON_TOP_Y ( 22 * 8 )
|
||||||
#define B_LIGHT_BUTTON_BOTTOM_X ( B_LIGHT_BUTTON_TOP_X + 7 )
|
#define B_LIGHT_BUTTON_BOTTOM_X ( B_LIGHT_BUTTON_TOP_X + 32 )
|
||||||
#define B_LIGHT_BUTTON_BOTTOM_Y ( B_LIGHT_BUTTON_TOP_Y + 2 )
|
#define B_LIGHT_BUTTON_BOTTOM_Y ( B_LIGHT_BUTTON_TOP_Y + 16 )
|
||||||
|
|
||||||
#define CURSOR_PER_SELECT 14
|
#define CURSOR_PER_SELECT 14
|
||||||
|
|
||||||
@ -55,11 +55,6 @@ static u64 old_titleIdArray[ LAUNCHER_TITLE_LIST_NUM ];
|
|||||||
// Launcher.c
|
// Launcher.c
|
||||||
//===============================================
|
//===============================================
|
||||||
|
|
||||||
static const u16 *const str_backlight[] = {
|
|
||||||
(const u16 *)L"BLT:ON ",
|
|
||||||
(const u16 *)L"BLT:OFF",
|
|
||||||
};
|
|
||||||
|
|
||||||
//======================================================
|
//======================================================
|
||||||
// ランチャー
|
// ランチャー
|
||||||
//======================================================
|
//======================================================
|
||||||
@ -275,7 +270,7 @@ void LauncherInit( TitleProperty *pTitleList )
|
|||||||
|
|
||||||
DrawBackLightSwitch();
|
DrawBackLightSwitch();
|
||||||
|
|
||||||
PrintfSJIS( 0, 0, TXT_COLOR_BLUE, "TWL-SYSTEM MENU ver.%06x", SYSMENU_VER );
|
PrintfSJIS( 0, 0, TXT_COLOR_BLUE, "TWL-SYSTEM MENU ver.", SYSMENU_VER );
|
||||||
|
|
||||||
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
||||||
|
|
||||||
@ -294,9 +289,9 @@ void LauncherInit( TitleProperty *pTitleList )
|
|||||||
// ランチャーメイン
|
// ランチャーメイン
|
||||||
TitleProperty *LauncherMain( TitleProperty *pTitleList )
|
TitleProperty *LauncherMain( TitleProperty *pTitleList )
|
||||||
{
|
{
|
||||||
static BOOL touch_bl = FALSE;
|
static BOOL touch_bl_bak = FALSE;
|
||||||
BOOL tp_bl_on_off = FALSE;
|
BOOL touch_bl_trg = FALSE;
|
||||||
BOOL tp_select = FALSE;
|
BOOL tp_select = FALSE;
|
||||||
static int csr_v = 0;
|
static int csr_v = 0;
|
||||||
static int selected = 0;
|
static int selected = 0;
|
||||||
|
|
||||||
@ -307,19 +302,16 @@ TitleProperty *LauncherMain( TitleProperty *pTitleList )
|
|||||||
// バックライトON,OFF制御
|
// バックライトON,OFF制御
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
if(tpd.disp.touch) {
|
if(tpd.disp.touch) {
|
||||||
BOOL range = WithinRangeTP( B_LIGHT_BUTTON_TOP_X * 8, B_LIGHT_BUTTON_TOP_Y * 8 - 4,
|
BOOL touch_bl = WithinRangeTP( B_LIGHT_BUTTON_TOP_X, B_LIGHT_BUTTON_TOP_Y,
|
||||||
B_LIGHT_BUTTON_BOTTOM_X * 8, B_LIGHT_BUTTON_BOTTOM_Y * 8 - 4, &tpd.disp );
|
B_LIGHT_BUTTON_BOTTOM_X, B_LIGHT_BUTTON_BOTTOM_Y, &tpd.disp );
|
||||||
if( range && !touch_bl ) {
|
touch_bl_trg = ( touch_bl && tpd.disp.touch && !touch_bl_bak ) ;
|
||||||
touch_bl = TRUE;
|
touch_bl_bak = tpd.disp.touch;
|
||||||
tp_bl_on_off = TRUE;
|
|
||||||
}
|
|
||||||
}else {
|
}else {
|
||||||
touch_bl = FALSE;
|
touch_bl_bak = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( (pad.trg & PAD_BUTTON_R) || (tp_bl_on_off) ) {
|
if( (pad.trg & PAD_BUTTON_START) || touch_bl_trg ) {
|
||||||
// TSD_SetBacklightBrightness( TSD_GetBacklightBrightness() ^ 0x01 );
|
SYSM_SetBackLightBrightness( (u8)( ( TSD_GetBacklightBrightness() + 1 ) & 0x07 ) );
|
||||||
DrawBackLightSwitch();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
@ -386,16 +378,7 @@ static void DrawLauncher(u16 nowCsr, const MenuParam *pMenu)
|
|||||||
// バックライトスイッチの表示
|
// バックライトスイッチの表示
|
||||||
static void DrawBackLightSwitch(void)
|
static void DrawBackLightSwitch(void)
|
||||||
{
|
{
|
||||||
u16 color;
|
PrintfSJIS( B_LIGHT_BUTTON_TOP_X, B_LIGHT_BUTTON_TOP_Y, TXT_COLOR_RED,
|
||||||
|
"BL:%d\n", TSD_GetBacklightBrightness() );
|
||||||
// if( GetNCDWork()->option.backLightOffFlag ) {
|
|
||||||
if ( 1 ) {
|
|
||||||
color = TXT_COLOR_BLACK;
|
|
||||||
}else {
|
|
||||||
color = TXT_COLOR_RED;
|
|
||||||
}
|
|
||||||
|
|
||||||
PutStringUTF16( B_LIGHT_BUTTON_TOP_X, B_LIGHT_BUTTON_TOP_Y, color,
|
|
||||||
str_backlight[ 0 ] );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -25,11 +25,12 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// define data----------------------------------------------------------
|
// define data-------------------------------------------------------
|
||||||
|
#define SYSMENU_VER 0x071115
|
||||||
|
|
||||||
// global variables--------------------------------------------------
|
// global variables--------------------------------------------------
|
||||||
|
|
||||||
// function-------------------------------------------------------------
|
// function----------------------------------------------------------
|
||||||
void LauncherInit( TitleProperty *pTitleList );
|
void LauncherInit( TitleProperty *pTitleList );
|
||||||
TitleProperty *LauncherMain( TitleProperty *pTitleList );
|
TitleProperty *LauncherMain( TitleProperty *pTitleList );
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,6 @@
|
|||||||
// define data-----------------------------------------------------------------
|
// define data-----------------------------------------------------------------
|
||||||
|
|
||||||
// function's prototype-------------------------------------------------------
|
// function's prototype-------------------------------------------------------
|
||||||
static BOOL CheckBootStatus( void );
|
|
||||||
static void INTR_VBlank( void );
|
static void INTR_VBlank( void );
|
||||||
|
|
||||||
// global variable-------------------------------------------------------------
|
// global variable-------------------------------------------------------------
|
||||||
@ -139,86 +138,6 @@ void TwlMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ブート状態を確認し、ロゴ表示有無を判断する-------
|
|
||||||
static BOOL CheckBootStatus(void)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
BOOL boot_decision = FALSE; // 「ブート内容未定」に
|
|
||||||
BOOL other_shortcut_off = FALSE;
|
|
||||||
|
|
||||||
//-----------------------------------------------------
|
|
||||||
// デバッグ用コンパイルスイッチによる挙動
|
|
||||||
//-----------------------------------------------------
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef __LOGO_SKIP // ※デバッグ用ロゴスキップ
|
|
||||||
SetLogoEnable( FALSE ); // ロゴ表示スキップ
|
|
||||||
#endif /* __LOGO_SKIP */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------
|
|
||||||
// NITRO設定データ未入力時の設定メニューショートカット起動
|
|
||||||
//-----------------------------------------------------
|
|
||||||
#ifdef __DIRECT_BOOT_BMENU_ENABLE // ※NITRO設定データ未入力時のブートメニュー直接起動スイッチがONか?
|
|
||||||
if( !TSD_IsSetTP() ||
|
|
||||||
!TSD_IsSetLanguage() ||
|
|
||||||
!TSD_IsSetDateTime() ||
|
|
||||||
!TSD_IsSetUserColor() ||
|
|
||||||
!TSD_IsSetNickname() ) { // TP,言語,RTC,ニックネームがセットされていなければ、ロゴ表示もゲームロードも行わず、ブートメニューをショートカット起動。
|
|
||||||
|
|
||||||
if( ( pad.cont & PAD_PRODUCTION_NITRO_SHORTCUT ) == PAD_PRODUCTION_NITRO_SHORTCUT ) {
|
|
||||||
other_shortcut_off = TRUE; // 量産工程用のキーショートカットが押されていたら、設定メニュー起動はなし。
|
|
||||||
}else if( !SYSM_IsInspectNITROCard() ) { // 但し、量産用のキーショートカットが押されている時か、NITRO検査カードがささっている時は、ブートメニューへのショートカット起動は行わない。
|
|
||||||
SYSM_SetBootFlag( BFLG_BOOT_BMENU );
|
|
||||||
SetLogoEnable( FALSE );
|
|
||||||
return TRUE; // 「ブート内容決定」でリターン
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* __DIRECT_BOOT_BMENU_ENABLE */
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------
|
|
||||||
// キーショートカット起動
|
|
||||||
//-----------------------------------------------------
|
|
||||||
if( !other_shortcut_off
|
|
||||||
// && !TSD_IsAutoBoot()
|
|
||||||
) {
|
|
||||||
// 他ショートカットONかつオート起動OFFの時
|
|
||||||
u32 nowBootFlag = 0;
|
|
||||||
|
|
||||||
if(pad.cont & PAD_BUTTON_R){ // Rボタン押下起動なら、ロゴ表示なしでAGBゲームへ
|
|
||||||
SetLogoEnable( FALSE );
|
|
||||||
nowBootFlag = BFLG_BOOT_AGB;
|
|
||||||
}else if(pad.cont & PAD_BUTTON_L){ // Lボタン押下起動なら、ロゴ表示後にNITROゲームへ
|
|
||||||
nowBootFlag = BFLG_BOOT_NITRO;
|
|
||||||
}else if(pad.cont & PAD_BUTTON_B){ // Bボタン押下起動なら、ロゴ表示後にブートメニューへ
|
|
||||||
nowBootFlag = BFLG_BOOT_BMENU;
|
|
||||||
}
|
|
||||||
if( nowBootFlag ) {
|
|
||||||
SYSM_SetBootFlag( nowBootFlag );
|
|
||||||
return TRUE; // 「ブート内容決定」でリターン
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------
|
|
||||||
// 自動起動オプション有効時の挙動
|
|
||||||
//-----------------------------------------------------
|
|
||||||
#ifndef __SYSM_DEBUG
|
|
||||||
// if( TSD_IsAutoBoot() ) {
|
|
||||||
if( 0 ) {
|
|
||||||
if ( SYSM_IsExistCard() ) { // NITROカードのみの時はNITRO起動
|
|
||||||
SYSM_SetBootFlag( BFLG_BOOT_NITRO );
|
|
||||||
return TRUE; // 「ブート内容決定」でリターン
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* __SYSM_DEBUG */
|
|
||||||
#endif
|
|
||||||
return FALSE; // 「ブート内容未定」でリターン
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// 割り込み処理
|
// 割り込み処理
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|||||||
@ -408,7 +408,7 @@ int TP_CalibrationMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( ( pad.trg & PAD_BUTTON_A ) || tp_ok ) {
|
if( ( pad.trg & PAD_BUTTON_A ) || tp_ok ) {
|
||||||
SYSM_GetWork()->isValidTSD = 0;
|
SYSMi_GetWork()->isValidTSD = 0;
|
||||||
|
|
||||||
s_pTPC->calibTemp.data.raw_x1 = s_pTPC->sample[0].x;
|
s_pTPC->calibTemp.data.raw_x1 = s_pTPC->sample[0].x;
|
||||||
s_pTPC->calibTemp.data.raw_y1 = s_pTPC->sample[0].y;
|
s_pTPC->calibTemp.data.raw_y1 = s_pTPC->sample[0].y;
|
||||||
|
|||||||
@ -80,7 +80,7 @@ void SelectLanguageInit( void )
|
|||||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Select language." );
|
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Select language." );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( SYSM_GetWork()->isValidTSD ) ||
|
if( ( SYSMi_GetWork()->isValidTSD ) ||
|
||||||
( TSD_GetLanguage() >= TWL_LANG_CODE_MAX ) ) {
|
( TSD_GetLanguage() >= TWL_LANG_CODE_MAX ) ) {
|
||||||
s_langCode = TWL_LANG_ENGLISH;
|
s_langCode = TWL_LANG_ENGLISH;
|
||||||
}else {
|
}else {
|
||||||
@ -128,7 +128,7 @@ int SelectLanguageMain( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( ( pad.trg & PAD_BUTTON_A ) || tp_select ) { // メニュー項目への分岐
|
if( ( pad.trg & PAD_BUTTON_A ) || tp_select ) { // メニュー項目への分岐
|
||||||
SYSM_GetWork()->isValidTSD = 0;
|
SYSMi_GetWork()->isValidTSD = 0;
|
||||||
|
|
||||||
TSD_SetLanguage( s_langCode );
|
TSD_SetLanguage( s_langCode );
|
||||||
TSD_SetFlagLanguage( TRUE ); // 言語入力フラグを立てる
|
TSD_SetFlagLanguage( TRUE ); // 言語入力フラグを立てる
|
||||||
|
|||||||
@ -113,7 +113,7 @@ void SetRTCInit( void )
|
|||||||
PutStringUTF16( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L" RETURN " );
|
PutStringUTF16( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L" RETURN " );
|
||||||
|
|
||||||
if( g_initialSet ) {
|
if( g_initialSet ) {
|
||||||
if( SYSM_GetWork()->rtcStatus & 0x01) {
|
if( SYSMi_GetWork()->rtcStatus & 0x01) {
|
||||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"RTC reset is detected!" );
|
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"RTC reset is detected!" );
|
||||||
}else {
|
}else {
|
||||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Set RTC." );
|
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Set RTC." );
|
||||||
@ -379,7 +379,7 @@ static int InputRtcDateTimeMain( void )
|
|||||||
TSD_SetRTCOffset( SYSM_CalcRTCOffsetAndSetDateTime( &date, &s_pWork->dtp.Time ) );
|
TSD_SetRTCOffset( SYSM_CalcRTCOffsetAndSetDateTime( &date, &s_pWork->dtp.Time ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSM_GetWork()->isValidTSD = 0;
|
SYSMi_GetWork()->isValidTSD = 0;
|
||||||
TSD_SetFlagDateTime( TRUE ); // RTC入力フラグを立てる。
|
TSD_SetFlagDateTime( TRUE ); // RTC入力フラグを立てる。
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルへの書き込み
|
// TWL設定データファイルへの書き込み
|
||||||
|
|||||||
@ -20,14 +20,13 @@
|
|||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include <twl/os/common/format_rom.h>
|
#include <twl/os/common/format_rom.h>
|
||||||
|
|
||||||
|
#include <sysmenu/sysmenu_lib.h>
|
||||||
#include <sysmenu/banner.h>
|
#include <sysmenu/banner.h>
|
||||||
#include <sysmenu/settings.h>
|
#include <sysmenu/settings.h>
|
||||||
#include <sysmenu/sysmenu_work.h>
|
|
||||||
#include <sysmenu/memorymap.h>
|
#include <sysmenu/memorymap.h>
|
||||||
|
|
||||||
#include <sysmenu/acsign.h>
|
#include <sysmenu/acsign.h>
|
||||||
#include <sysmenu/mb_loader.h>
|
#include <sysmenu/mb_loader.h>
|
||||||
#include <sysmenu/sysmenu_lib.h>
|
|
||||||
|
|
||||||
/* SYSMENU_H_ */
|
/* SYSMENU_H_ */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -22,6 +22,9 @@
|
|||||||
#include <sysmenu/sysmenu_lib/ARM9/sysmenu_api.h>
|
#include <sysmenu/sysmenu_lib/ARM9/sysmenu_api.h>
|
||||||
#endif // SDK_ARM9
|
#endif // SDK_ARM9
|
||||||
|
|
||||||
|
#include <sysmenu/sysmenu_lib/common/sysmenu_work.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -19,11 +19,11 @@
|
|||||||
#define __SYSM_LIB_H__
|
#define __SYSM_LIB_H__
|
||||||
|
|
||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include <twl/os/common/format_rom.h>
|
|
||||||
#include <twl/nam.h>
|
#include <twl/nam.h>
|
||||||
|
#include <twl/os/common/format_rom.h>
|
||||||
#include <sysmenu/banner.h>
|
#include <sysmenu/banner.h>
|
||||||
#include <sysmenu/sysmenu_work.h>
|
|
||||||
#include <sysmenu/settings.h>
|
#include <sysmenu/settings.h>
|
||||||
|
#include <sysmenu/sysmenu_lib/common/sysmenu_work.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -31,8 +31,17 @@ extern "C" {
|
|||||||
|
|
||||||
// define data----------------------------------------------------------
|
// define data----------------------------------------------------------
|
||||||
|
|
||||||
#define CARD_SLOT_NUM 1 // カードスロット数
|
#ifndef SDK_FINALROM
|
||||||
#define LAUNCHER_TITLE_LIST_NUM 40 // ランチャーのタイトルリスト数
|
//#define __SYSM_DEBUG // デバッグコード用ビルドスイッチ
|
||||||
|
#endif // SDK_FINALROM
|
||||||
|
|
||||||
|
#define CARD_SLOT_NUM 1 // カードスロット数
|
||||||
|
#define LAUNCHER_TITLE_LIST_NUM 40 // ランチャーのタイトルリスト数
|
||||||
|
|
||||||
|
|
||||||
|
#define PAD_PRODUCTION_SKIP_INITIAL_SHORTCUT ( PAD_BUTTON_A | PAD_BUTTON_B \
|
||||||
|
| PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R )
|
||||||
|
// 量産工程で使用する初回起動設定をキャンセルするショートカットキー
|
||||||
|
|
||||||
typedef enum PlatformCode {
|
typedef enum PlatformCode {
|
||||||
PLATFORM_NTR = 0,
|
PLATFORM_NTR = 0,
|
||||||
@ -40,15 +49,6 @@ typedef enum PlatformCode {
|
|||||||
}PlatformCode;
|
}PlatformCode;
|
||||||
|
|
||||||
|
|
||||||
// タイトル情報フラグ
|
|
||||||
typedef struct TitleFlags {
|
|
||||||
u16 platform : 4;
|
|
||||||
u16 media : 4;
|
|
||||||
u16 isLogoSkip : 1;
|
|
||||||
u16 rsv : 7;
|
|
||||||
}TitleFlags;
|
|
||||||
|
|
||||||
|
|
||||||
// タイトル情報
|
// タイトル情報
|
||||||
typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。
|
typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。
|
||||||
NAMTitleId titleID; // タイトルID(TitleID_Hiで起動メディアは判定できる?)
|
NAMTitleId titleID; // タイトルID(TitleID_Hiで起動メディアは判定できる?)
|
||||||
@ -57,16 +57,6 @@ typedef struct TitleProperty { //
|
|||||||
u8 rsv[ 2 ];
|
u8 rsv[ 2 ];
|
||||||
}TitleProperty;
|
}TitleProperty;
|
||||||
|
|
||||||
|
|
||||||
// リセットパラメータ
|
|
||||||
typedef struct ResetParam {
|
|
||||||
NAMTitleId bootTitleID; // 起動するタイトルがあるか?あるならそのタイトルID
|
|
||||||
u32 rsv_A;
|
|
||||||
TitleFlags flags;
|
|
||||||
u8 rsv_B[ 2 ];
|
|
||||||
}ResetParam;
|
|
||||||
|
|
||||||
|
|
||||||
// アプリ認証結果
|
// アプリ認証結果
|
||||||
typedef enum AuthResult {
|
typedef enum AuthResult {
|
||||||
AUTH_PROCESSING = 0,
|
AUTH_PROCESSING = 0,
|
||||||
@ -105,6 +95,7 @@ extern BOOL SYSM_IsInspectCard( void ); //
|
|||||||
extern BOOL SYSM_IsTPReadable( void ); // TPリード可能か?
|
extern BOOL SYSM_IsTPReadable( void ); // TPリード可能か?
|
||||||
extern BOOL SYSM_IsLogoDemoSkip( void ); // ロゴデモ飛ばし状態か?
|
extern BOOL SYSM_IsLogoDemoSkip( void ); // ロゴデモ飛ばし状態か?
|
||||||
extern void SYSM_SetLogoDemoSkip( BOOL skip ); // ロゴデモ飛ばし状態を設定する。
|
extern void SYSM_SetLogoDemoSkip( BOOL skip ); // ロゴデモ飛ばし状態を設定する。
|
||||||
|
extern const ResetParam *SYSM_GetResetParam( void ); // リセットパラメータの取得
|
||||||
|
|
||||||
// 本体設定データアクセス
|
// 本体設定データアクセス
|
||||||
extern BOOL SYSM_ReadTWLSettingsFile( void ); // TWL設定データのリード
|
extern BOOL SYSM_ReadTWLSettingsFile( void ); // TWL設定データのリード
|
||||||
|
|||||||
@ -19,65 +19,72 @@
|
|||||||
#define __SYSMENU_WORK_H__
|
#define __SYSMENU_WORK_H__
|
||||||
|
|
||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
|
#include <twl/nam.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// compile switch ---------------------------------
|
// compile switch ---------------------------------
|
||||||
#ifndef SDK_FINALROM
|
//#define SYSM_RESET_PARAM_READY_
|
||||||
|
|
||||||
//#define __SYSM_DEBUG
|
|
||||||
|
|
||||||
#endif // SDK_FINALROM
|
|
||||||
|
|
||||||
|
|
||||||
// define data ------------------------------------
|
// define data ------------------------------------
|
||||||
#define SYSMENU_VER 0x071113 // SystemMenuバージョン
|
|
||||||
|
|
||||||
#define PAD_PRODUCTION_SKIP_INITIAL_SHORTCUT ( PAD_BUTTON_A | PAD_BUTTON_B \
|
|
||||||
| PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R )
|
|
||||||
// 量産工程で使用する初回起動設定をキャンセルするショートカットキー
|
|
||||||
|
|
||||||
#define CLONE_BOOT_MODE 1
|
#define CLONE_BOOT_MODE 1
|
||||||
#define OTHER_BOOT_MODE 2
|
#define OTHER_BOOT_MODE 2
|
||||||
|
|
||||||
|
|
||||||
|
// タイトル情報フラグ
|
||||||
|
typedef struct TitleFlags {
|
||||||
|
u16 platform : 4;
|
||||||
|
u16 media : 4;
|
||||||
|
u16 isLogoSkip : 1;
|
||||||
|
u16 rsv : 7;
|
||||||
|
}TitleFlags;
|
||||||
|
|
||||||
|
|
||||||
|
// リセットパラメータ
|
||||||
|
typedef struct ResetParam {
|
||||||
|
NAMTitleId bootTitleID; // 起動するタイトルがあるか?あるならそのタイトルID
|
||||||
|
u32 rsv_A;
|
||||||
|
TitleFlags flags;
|
||||||
|
u8 rsv_B[ 2 ];
|
||||||
|
}ResetParam;
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// データ型定義
|
// データ型定義
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
// SYSM共有ワーク構造体
|
// SYSM共有ワーク構造体
|
||||||
typedef struct SYSM_work {
|
typedef struct SYSM_work {
|
||||||
BOOL isValidTSD; // NITRO設定データ無効フラグ
|
volatile BOOL isARM9Start; // ARM9スタートフラグ
|
||||||
BOOL isOnDebugger; // デバッガ動作か?
|
BOOL isHotStart; // Hot/Coldスタート判定
|
||||||
BOOL isExistCard; // 有効なNTR/TWLカードが存在するか?
|
BOOL isValidTSD; // NITRO設定データ無効フラグ
|
||||||
BOOL isHotStart; // Hot/Coldスタート判定
|
BOOL isOnDebugger; // デバッガ動作か?
|
||||||
BOOL isARM9Start; // ARM9スタートフラグ
|
BOOL isExistCard; // 有効なNTR/TWLカードが存在するか?
|
||||||
u16 cardHeaderCrc16; // システムメニューで計算したROMヘッダCRC16
|
u16 cardHeaderCrc16; // システムメニューで計算したROMヘッダCRC16
|
||||||
int cloneBootMode;
|
int cloneBootMode;
|
||||||
|
ResetParam resetParam;
|
||||||
|
|
||||||
// NTR-IPL2のレガシー 最終的には消すと思う
|
// NTR-IPL2のレガシー 最終的には消すと思う
|
||||||
u32 nCardID;
|
u32 nCardID;
|
||||||
BOOL enableCardNormalOnly;
|
BOOL enableCardNormalOnly;
|
||||||
u8 rtcStatus;
|
u8 rtcStatus;
|
||||||
}SYSM_work;
|
}SYSM_work;
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// SYSM共有ワーク領域のアドレス獲得
|
// SYSM共有ワーク領域のアドレス獲得
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
#if 1
|
#ifdef SYSM_RESET_PARAM_READY_
|
||||||
#define SYSM_GetResetParam() ( (ResetParam *)HW_RED_RESERVED )
|
// SYSMリセットパラメータの取得(※ライブラリ向け。ARM9側はSYSM_GetResetParamを使用して下さい。)
|
||||||
|
#define SYSMi_GetResetParam() ( (ResetParam *)0x02000100 )
|
||||||
#define SYSM_GetWork() ( (SYSM_work *)( HW_RED_RESERVED + 0x40 ) )
|
|
||||||
#else
|
|
||||||
// SYSMリセットパラメータの取得
|
|
||||||
#define SYSM_GetResetParam() ( (ResetParam *)0x02000100 )
|
|
||||||
|
|
||||||
// SYSM共有ワークの取得
|
// SYSM共有ワークの取得
|
||||||
#define SYSM_GetWork() ( (SYSM_work *)HW_RED_RESERVED )
|
#define SYSMi_GetWork() ( (SYSM_work *)HW_RED_RESERVED )
|
||||||
#endif
|
#else // SYSM_RESET_PARAM_READY_
|
||||||
|
#define SYSMi_GetResetParam() ( (ResetParam *)HW_RED_RESERVED )
|
||||||
|
#define SYSMi_GetWork() ( (SYSM_work *)( HW_RED_RESERVED + 0x40 ) )
|
||||||
|
#endif // SYSM_RESET_PARAM_READY_
|
||||||
|
|
||||||
// カードROMヘッダワークの取得
|
// カードROMヘッダワークの取得
|
||||||
#define SYSM_GetCardRomHeader() ( (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF )
|
#define SYSM_GetCardRomHeader() ( (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF )
|
||||||
@ -86,5 +93,5 @@ typedef struct SYSM_work {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // __SYSMENU_WORK_H__
|
#endif // __SYSMENU_WORK_H__
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user