最新SDK対応

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@236 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yutaka 2007-11-21 04:25:09 +00:00
parent 53bc5f01d3
commit 20d3856cb6
2 changed files with 71 additions and 69 deletions

View File

@ -45,12 +45,14 @@ Autoload WRAM
libmath_sp.TWL$(CODEGEN).a \ libmath_sp.TWL$(CODEGEN).a \
libscfg_sp.TWL$(CODEGEN).a \ libscfg_sp.TWL$(CODEGEN).a \
libtp_sp.TWL$(CODEGEN).a \ libtp_sp.TWL$(CODEGEN).a \
libmic_sp.TWL$(CODEGEN).a \
libfs_sp.TWL$(CODEGEN).a \ libfs_sp.TWL$(CODEGEN).a \
libcard_sp.TWL$(CODEGEN).a \ libcard_sp.TWL$(CODEGEN).a \
libi2c_sp.TWL$(CODEGEN).a \ libi2c_sp.TWL$(CODEGEN).a \
libcamera_sp.TWL$(CODEGEN).a \ libcamera_sp.TWL$(CODEGEN).a \
libcdc_sp.TWL$(CODEGEN).a \ libcdc_sp.TWL$(CODEGEN).a \
libtpex_sp.TWL$(CODEGEN).a \ libtpex_sp.TWL$(CODEGEN).a \
libmicex_sp.TWL$(CODEGEN).a \
libnvram_sp.TWL$(CODEGEN).a \ libnvram_sp.TWL$(CODEGEN).a \
librtc_sp.TWL$(CODEGEN).a \ librtc_sp.TWL$(CODEGEN).a \
libwvr_sp.TWL$(CODEGEN).a \ libwvr_sp.TWL$(CODEGEN).a \

View File

@ -30,15 +30,15 @@
#include <twl/rtc.h> #include <twl/rtc.h>
#include <nitro/hw/common/lcd.h> #include <nitro/hw/common/lcd.h>
#include <nitro/gx.h> #include <nitro/gx.h>
#include <twl/os/ARM7/codecmode.h> #include <twl/os/common/codecmode.h>
#include <twl/cdc.h> #include <twl/cdc.h>
#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_lib/common/sysmenu_work.h> #include <sysmenu/sysmenu_lib/common/sysmenu_work.h>
#include <sysmenu/card/common/blowfish.h> #include <sysmenu/card/common/blowfish.h>
#include <sysmenu/card/common/Card.h> #include <sysmenu/card/common/Card.h>
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
@ -82,27 +82,27 @@ void
TwlSpMain(void) TwlSpMain(void)
{ {
OSHeapHandle heapHandle; OSHeapHandle heapHandle;
// SYSMワークのクリア // SYSMワークのクリア
MI_CpuClear32( SYSMi_GetWork(), sizeof(SYSM_work) ); MI_CpuClear32( SYSMi_GetWork(), sizeof(SYSM_work) );
// OS 初期化 // OS 初期化
OS_Init(); OS_Init();
PrintDebugInfo(); PrintDebugInfo();
// Cold/Hotスタート判定 // Cold/Hotスタート判定
ReadResetParameter(); ReadResetParameter();
SYSMi_GetWork()->isARM9Start = TRUE; // ※HW_RED_RESERVEDはNANDファームでクリアしておいて欲しい SYSMi_GetWork()->isARM9Start = TRUE; // ※HW_RED_RESERVEDはNANDファームでクリアしておいて欲しい
// ヒープ領域設定 // ヒープ領域設定
{ {
void *wram = OS_GetWramSubPrivArenaHi(); void *wram = OS_GetWramSubPrivArenaHi();
void *mmem = OS_GetSubPrivArenaHi(); void *mmem = OS_GetSubPrivArenaHi();
OS_SetSubPrivArenaHi( (void*)SYSM_OWN_ARM7_MMEM_ADDR_END ); // メモリ配置をいじっているので、アリーナHiも変更しないとダメ OS_SetSubPrivArenaHi( (void*)SYSM_OWN_ARM7_MMEM_ADDR_END ); // メモリ配置をいじっているので、アリーナHiも変更しないとダメ
OS_SetWramSubPrivArenaHi( (void*)SYSM_OWN_ARM7_WRAM_ADDR_END ); OS_SetWramSubPrivArenaHi( (void*)SYSM_OWN_ARM7_WRAM_ADDR_END );
OS_TPrintf( "MMEM SUBPRV ARENA HI : %08x -> %08x\n", mmem, OS_GetSubPrivArenaHi() ); OS_TPrintf( "MMEM SUBPRV ARENA HI : %08x -> %08x\n", mmem, OS_GetSubPrivArenaHi() );
OS_TPrintf( "WRAM SUBPRV ARENA HI : %08x -> %08x\n", wram, OS_GetWramSubPrivArenaHi() ); OS_TPrintf( "WRAM SUBPRV ARENA HI : %08x -> %08x\n", wram, OS_GetWramSubPrivArenaHi() );
} }
heapHandle = InitializeAllocateSystem(); heapHandle = InitializeAllocateSystem();
// ボタン入力サーチ初期化 // ボタン入力サーチ初期化
@ -125,7 +125,7 @@ TwlSpMain(void)
AES_Init(); // AES 初期化 AES_Init(); // AES 初期化
} }
if (OS_IsCodecTwlMode() == TRUE) if (OSi_IsCodecTwlMode() == TRUE)
{ {
// CODEC 初期化 // CODEC 初期化
InitializeCdc(); InitializeCdc();
@ -144,11 +144,11 @@ TwlSpMain(void)
// SPI 初期化 // SPI 初期化
SPI_Init(THREAD_PRIO_SPI); SPI_Init(THREAD_PRIO_SPI);
BOOT_Init(); BOOT_Init();
// 活栓挿抜機能初期化 // 活栓挿抜機能初期化
Cardm_Init(); Cardm_Init();
// カードがささっていたらブート開始 // カードがささっていたらブート開始
Card_Boot(); Card_Boot();
@ -169,32 +169,32 @@ TwlSpMain(void)
// Hot/Coldスタート判定およびリセットパラメータのリード // Hot/Coldスタート判定およびリセットパラメータのリード
static void ReadResetParameter( void ) static void ReadResetParameter( void )
{ {
// Hot/Coldスタート判定 // Hot/Coldスタート判定
#ifdef SDK_FINALROM #ifdef SDK_FINALROM
if( SYSMi_GetMCUFreeRegisterValue() == 0 ) // マイコンフリーレジスタ値が"0"ならColdスタート if( SYSMi_GetMCUFreeRegisterValue() == 0 ) // マイコンフリーレジスタ値が"0"ならColdスタート
#else #else
if( 1 ) // ISデバッガでのデバッグ動作時に常にホットスタート判定されるのを防ぐ if( 1 ) // ISデバッガでのデバッグ動作時に常にホットスタート判定されるのを防ぐ
#endif #endif
{ {
u8 data = 1; u8 data = 1;
MCU_SetFreeRegisters( 0, &data, 1 ); // マイコンフリーレジスタにホットスタートフラグをセット MCU_SetFreeRegisters( 0, &data, 1 ); // マイコンフリーレジスタにホットスタートフラグをセット
SYSMi_GetWork()->isHotStart = FALSE; SYSMi_GetWork()->isHotStart = FALSE;
}else { }else {
SYSMi_GetWork()->isHotStart = TRUE; SYSMi_GetWork()->isHotStart = TRUE;
// リセットパラメータ有効判定 // リセットパラメータ有効判定
if( ( STD_StrNCmp( (const char *)&SYSMi_GetResetParamAddr()->header.magicCode, if( ( STD_StrNCmp( (const char *)&SYSMi_GetResetParamAddr()->header.magicCode,
SYSM_RESET_PARAM_MAGIC_CODE, SYSM_RESET_PARAM_MAGIC_CODE,
SYSM_RESET_PARAM_MAGIC_CODE_LEN ) == 0 ) && SYSM_RESET_PARAM_MAGIC_CODE_LEN ) == 0 ) &&
( SYSMi_GetResetParamAddr()->header.bodyLength > 0 ) && ( SYSMi_GetResetParamAddr()->header.bodyLength > 0 ) &&
( SVC_GetCRC16( 65535, &SYSMi_GetResetParamAddr()->body, SYSMi_GetResetParamAddr()->header.bodyLength ) ) ( SVC_GetCRC16( 65535, &SYSMi_GetResetParamAddr()->body, SYSMi_GetResetParamAddr()->header.bodyLength ) )
) { ) {
// リセットパラメータが有効なら、ワークに退避 // リセットパラメータが有効なら、ワークに退避
MI_CpuCopy32 ( SYSMi_GetResetParamAddr(), &SYSMi_GetWork()->resetParam, sizeof(ResetParam) ); MI_CpuCopy32 ( SYSMi_GetResetParamAddr(), &SYSMi_GetWork()->resetParam, sizeof(ResetParam) );
SYSMi_GetWork()->isValidResetParam = TRUE; SYSMi_GetWork()->isValidResetParam = TRUE;
} }
} }
// メインメモリのリセットパラメータをクリアしておく // メインメモリのリセットパラメータをクリアしておく
MI_CpuClear32( SYSMi_GetResetParamAddr(), 0x100 ); MI_CpuClear32( SYSMi_GetResetParamAddr(), 0x100 );
} }
@ -305,7 +305,7 @@ InitializeAllocateSystem(void)
void* basicHi = (void*)OS_GetSubPrivArenaHi(); void* basicHi = (void*)OS_GetSubPrivArenaHi();
void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDMAIN_BSS_END, 32); void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDMAIN_BSS_END, 32);
void* extraHi = (void*)MATH_ROUNDDOWN(HW_MAIN_MEM_SUB, 32); void* extraHi = (void*)MATH_ROUNDDOWN(HW_MAIN_MEM_SUB, 32);
#if SDK_DEBUG #if SDK_DEBUG
// debug information // debug information
OS_TPrintf("ARM7: MAIN arena basicLo = %p\n", basicLo); OS_TPrintf("ARM7: MAIN arena basicLo = %p\n", basicLo);
@ -313,11 +313,11 @@ InitializeAllocateSystem(void)
OS_TPrintf("ARM7: MAIN arena extraLo = %p\n", extraLo); OS_TPrintf("ARM7: MAIN arena extraLo = %p\n", extraLo);
OS_TPrintf("ARM7: MAIN arena extraHi = %p\n", extraHi); OS_TPrintf("ARM7: MAIN arena extraHi = %p\n", extraHi);
#endif #endif
// アリーナを 0 クリア // アリーナを 0 クリア
MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo);
MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo);
// メモリ割り当て初期化 // メモリ割り当て初期化
if ((u32)basicLo < (u32)extraLo) if ((u32)basicLo < (u32)extraLo)
{ {
@ -329,15 +329,15 @@ InitializeAllocateSystem(void)
{ {
extraLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, extraLo, basicHi, 1); extraLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, extraLo, basicHi, 1);
} }
// ヒープ作成 // ヒープ作成
hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, basicLo, basicHi); hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, basicLo, basicHi);
if (hh < 0) if (hh < 0)
{ {
OS_Panic("ARM7: Failed to create MAIN heap.\n"); OS_Panic("ARM7: Failed to create MAIN heap.\n");
} }
// ヒープに拡張ブロックを追加 // ヒープに拡張ブロックを追加
OS_AddToHeap(OS_ARENA_MAIN_SUBPRIV, hh, extraLo, extraHi); OS_AddToHeap(OS_ARENA_MAIN_SUBPRIV, hh, extraLo, extraHi);
} }
@ -346,18 +346,18 @@ InitializeAllocateSystem(void)
{ {
void* lo = (void*)OS_GetSubPrivArenaLo(); void* lo = (void*)OS_GetSubPrivArenaLo();
void* hi = (void*)OS_GetSubPrivArenaHi(); void* hi = (void*)OS_GetSubPrivArenaHi();
// アリーナを 0 クリア // アリーナを 0 クリア
MI_CpuClear8(lo, (u32)hi - (u32)lo); MI_CpuClear8(lo, (u32)hi - (u32)lo);
// メモリ割り当て初期化 // メモリ割り当て初期化
lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1); lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1);
// アリーナ下位アドレスを設定 // アリーナ下位アドレスを設定
OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo); OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo);
// ヒープ作成 // ヒープ作成
hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, lo, hi); hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, lo, hi);
if (hh < 0) if (hh < 0)
{ {
OS_Panic("ARM7: Failed to MAIN create heap.\n"); OS_Panic("ARM7: Failed to MAIN create heap.\n");
@ -368,7 +368,7 @@ InitializeAllocateSystem(void)
// ヒープサイズの確認 // ヒープサイズの確認
{ {
u32 heapSize; u32 heapSize;
heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh);
OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize); OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize);
} }
@ -379,7 +379,7 @@ InitializeAllocateSystem(void)
void* basicHi = (void*)OS_GetWramSubPrivArenaHi(); void* basicHi = (void*)OS_GetWramSubPrivArenaHi();
void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDWRAM_BSS_END, 32); void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDWRAM_BSS_END, 32);
void* extraHi = (void*)MATH_ROUNDDOWN(HW_WRAM_A_HYB_END, 32); void* extraHi = (void*)MATH_ROUNDDOWN(HW_WRAM_A_HYB_END, 32);
#if SDK_DEBUG #if SDK_DEBUG
// debug information // debug information
OS_TPrintf("ARM7: WRAM arena basicLo = %p\n", basicLo); OS_TPrintf("ARM7: WRAM arena basicLo = %p\n", basicLo);
@ -387,11 +387,11 @@ InitializeAllocateSystem(void)
OS_TPrintf("ARM7: WRAM arena extraLo = %p\n", extraLo); OS_TPrintf("ARM7: WRAM arena extraLo = %p\n", extraLo);
OS_TPrintf("ARM7: WRAM arena extraHi = %p\n", extraHi); OS_TPrintf("ARM7: WRAM arena extraHi = %p\n", extraHi);
#endif #endif
// アリーナを 0 クリア // アリーナを 0 クリア
MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo);
MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo);
// メモリ割り当て初期化 // メモリ割り当て初期化
if ((u32)basicLo < (u32)extraLo) if ((u32)basicLo < (u32)extraLo)
{ {
@ -403,15 +403,15 @@ InitializeAllocateSystem(void)
{ {
extraLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, extraLo, basicHi, 1); extraLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, extraLo, basicHi, 1);
} }
// ヒープ作成 // ヒープ作成
hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, basicLo, basicHi); hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, basicLo, basicHi);
if (hh < 0) if (hh < 0)
{ {
OS_Panic("ARM7: Failed to WRAM create heap.\n"); OS_Panic("ARM7: Failed to WRAM create heap.\n");
} }
// ヒープに拡張ブロックを追加 // ヒープに拡張ブロックを追加
OS_AddToHeap(OS_ARENA_WRAM_SUBPRIV, hh, extraLo, extraHi); OS_AddToHeap(OS_ARENA_WRAM_SUBPRIV, hh, extraLo, extraHi);
} }
@ -420,18 +420,18 @@ InitializeAllocateSystem(void)
{ {
void* lo = (void*)OS_GetWramSubPrivArenaLo(); void* lo = (void*)OS_GetWramSubPrivArenaLo();
void* hi = (void*)OS_GetWramSubPrivArenaHi(); void* hi = (void*)OS_GetWramSubPrivArenaHi();
// アリーナを 0 クリア // アリーナを 0 クリア
MI_CpuClear8(lo, (u32)hi - (u32)lo); MI_CpuClear8(lo, (u32)hi - (u32)lo);
// メモリ割り当て初期化 // メモリ割り当て初期化
lo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, lo, hi, 1); lo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, lo, hi, 1);
// アリーナ下位アドレスを設定 // アリーナ下位アドレスを設定
OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, lo); OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, lo);
// ヒープ作成 // ヒープ作成
hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, lo, hi); hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, lo, hi);
if (hh < 0) if (hh < 0)
{ {
OS_Panic("ARM7: Failed to WRAM create heap.\n"); OS_Panic("ARM7: Failed to WRAM create heap.\n");