ゲームモード関数統一に伴うコードの整理。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@785 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-03-03 06:13:57 +00:00
parent 339352192e
commit 436cdb8f2e
2 changed files with 16 additions and 100 deletions

View File

@ -1,8 +1,8 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK
Project: TwlIPL
File: hotsw.c
Copyright 2007 Nintendo. All rights reserved.
Copyright 2007-2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
@ -422,7 +422,7 @@ static HotSwState LoadCardData(void)
// ---------------------- Game Mode ----------------------
// ID読み込み
state = s_funcTable[s_cbData.cardType].ReadID_G(&s_cbData);
state = ReadIDGame(&s_cbData);
retval = (retval == HOTSW_SUCCESS) ? state : retval;
// バナーファイルの読み込み
@ -497,8 +497,7 @@ static HotSwState LoadBannerData(void)
// バナーリード
if( s_cbData.pBootSegBuf->rh.s.banner_offset ) {
retval = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
s_cbData.pBootSegBuf->rh.s.banner_offset,
retval = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.banner_offset,
(u32 *)SYSM_CARD_BANNER_BUF,
sizeof(TWLBannerFile) );
@ -544,10 +543,9 @@ static HotSwState LoadStaticModule(void)
s_cbData.arm9Stc = (u32)s_cbData.pBootSegBuf->rh.s.main_ram_address;
// 配置先と再配置情報を取得 & Arm9の常駐モジュール残りを指定先に転送
SYSM_CheckLoadRegionAndSetRelocateInfo( ARM9_STATIC, &s_cbData.arm9Stc, s_cbData.pBootSegBuf->rh.s.main_size, &SYSMi_GetWork()->romRelocateInfo[ARM9_STATIC] , s_cbData.twlFlg);
retval = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
s_cbData.pBootSegBuf->rh.s.main_rom_offset + SECURE_SEGMENT_SIZE,
(u32 *)(s_cbData.arm9Stc + SECURE_SEGMENT_SIZE),
s_cbData.pBootSegBuf->rh.s.main_size - SECURE_SEGMENT_SIZE);
retval = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_rom_offset + SECURE_SEGMENT_SIZE,
(u32 *)(s_cbData.arm9Stc + SECURE_SEGMENT_SIZE),
s_cbData.pBootSegBuf->rh.s.main_size - SECURE_SEGMENT_SIZE);
if(retval != HOTSW_SUCCESS){
return retval;
@ -556,7 +554,7 @@ static HotSwState LoadStaticModule(void)
s_cbData.arm7Stc = (u32)s_cbData.pBootSegBuf->rh.s.sub_ram_address;
// 配置先と再配置情報を取得 & Arm7の常駐モジュールを指定先に転送
SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_STATIC, &s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_STATIC] , s_cbData.twlFlg);
state = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_rom_offset, (u32 *)s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size);
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_rom_offset, (u32 *)s_cbData.arm7Stc, s_cbData.pBootSegBuf->rh.s.sub_size);
retval = (retval == HOTSW_SUCCESS) ? state : retval;
if(retval != HOTSW_SUCCESS){
@ -570,14 +568,13 @@ static HotSwState LoadStaticModule(void)
s_cbData.arm9Ltd = (u32)s_cbData.pBootSegBuf->rh.s.main_ltd_ram_address;
// 配置先と再配置情報を取得 & Arm9の常駐モジュールを指定先に転送※TWLカード対応していないので、注意
SYSM_CheckLoadRegionAndSetRelocateInfo( ARM9_LTD_STATIC, &s_cbData.arm9Ltd, s_cbData.pBootSegBuf->rh.s.main_ltd_size, &SYSMi_GetWork()->romRelocateInfo[ARM9_LTD_STATIC] , TRUE);
state = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset, (u32 *)SYSM_CARD_TWL_SECURE_BUF, size);
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset, (u32 *)SYSM_CARD_TWL_SECURE_BUF, size);
retval = (retval == HOTSW_SUCCESS) ? state : retval;
if( s_cbData.pBootSegBuf->rh.s.main_ltd_size > SECURE_SEGMENT_SIZE ) {
state = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData,
s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset + SECURE_SEGMENT_SIZE,
(u32 *)(s_cbData.arm9Ltd + SECURE_SEGMENT_SIZE),
s_cbData.pBootSegBuf->rh.s.main_ltd_size - size);
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.main_ltd_rom_offset + SECURE_SEGMENT_SIZE,
(u32 *)(s_cbData.arm9Ltd + SECURE_SEGMENT_SIZE),
s_cbData.pBootSegBuf->rh.s.main_ltd_size - size);
retval = (retval == HOTSW_SUCCESS) ? state : retval;
}
@ -588,7 +585,7 @@ static HotSwState LoadStaticModule(void)
s_cbData.arm7Ltd = (u32)s_cbData.pBootSegBuf->rh.s.sub_ltd_ram_address;
// 配置先と再配置情報を取得 & Arm7の常駐モジュールを指定先に転送
SYSM_CheckLoadRegionAndSetRelocateInfo( ARM7_LTD_STATIC, &s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size, &SYSMi_GetWork()->romRelocateInfo[ARM7_LTD_STATIC], TRUE);
state = s_funcTable[s_cbData.cardType].ReadPage_G(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset, (u32 *)s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size);
state = ReadPageGame(&s_cbData, s_cbData.pBootSegBuf->rh.s.sub_ltd_rom_offset, (u32 *)s_cbData.arm7Ltd, s_cbData.pBootSegBuf->rh.s.sub_ltd_size);
retval = (retval == HOTSW_SUCCESS) ? state : retval;
if(retval != HOTSW_SUCCESS){
@ -671,7 +668,7 @@ static HotSwState CheckCardAuthCode(void)
return HOTSW_PULLED_OUT_ERROR;
}
retval = s_funcTable[s_cbData.cardType].ReadPage_G( &s_cbData, page_offset, authBuf, MB_AUTHCODE_SIZE );
retval = ReadPageGame( &s_cbData, page_offset, authBuf, MB_AUTHCODE_SIZE );
p += auth_offset & 0x000001FF;
if( *p++ == 'a' && *p == 'c' ) {

View File

@ -287,97 +287,16 @@ HotSwState ChangeModeSecure_ROMEMU(CardBootData *cbd)
// ■------------------------------------■
// ■ ゲームモードのコマンド ■
// ■------------------------------------■
#if 0
/*---------------------------------------------------------------------------*
Name: ReadIDGame_ROMEMU
Description: IDを読み込む
*---------------------------------------------------------------------------*/
HotSwState ReadIDGame_ROMEMU(CardBootData *cbd)
{
#pragma unused( cbd )
if(!HOTSW_IsCardAccessible()){
return HOTSW_PULLED_OUT_ERROR;
}
// カード割り込みによるDMAコピー
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_gam, sizeof(cbd->id_gam) );
// MCCMD レジスタ設定
reg_HOTSW_MCCMD0 = 0x000000B8;
reg_HOTSW_MCCMD1 = 0x00000000;
// MCCNT0 レジスタ設定 (E = 1 I = 1 SEL = 0に)
reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & 0x0fff) | 0xc000);
// MCCNT1 レジスタ設定 (START = 1 PC = 111(ステータスリード) latency1 = 1 に)
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | (0x1 & LATENCY1_MASK);
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
OS_SleepThread(NULL);
return HOTSW_SUCCESS;
}
// 共通
/*---------------------------------------------------------------------------*
Name: ReadPageGame_ROMEMU
Description:
*---------------------------------------------------------------------------*/
HotSwState ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
{
#pragma unused( cbd )
u32 loop, counter=0;
u64 i, page;
GCDCmd64 cndLE, cndBE;
page = (u32)(start_addr / PAGE_SIZE);
loop = (u32)(size / PAGE_SIZE);
loop = (size % PAGE_SIZE) ? loop + 1 : loop;
OS_TPrintf("Src Addr : 0x%08x Dst Addr : 0x%08x\n", start_addr, buf);
OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size);
for(i=0; i<loop; i++){
if(!HOTSW_IsCardAccessible()){
return HOTSW_PULLED_OUT_ERROR;
}
// ゼロクリア
MI_CpuClear8(&cndLE, sizeof(GCDCmd64));
// コマンド作成
cndLE.dw = (page + i) << 33;
cndLE.dw |= 0xB700000000000000;
// ビッグエンディアンに直す(暗号化後)
cndBE.b[7] = cndLE.b[0];
cndBE.b[6] = cndLE.b[1];
cndBE.b[5] = cndLE.b[2];
cndBE.b[4] = cndLE.b[3];
cndBE.b[3] = cndLE.b[4];
cndBE.b[2] = cndLE.b[5];
cndBE.b[1] = cndLE.b[6];
cndBE.b[0] = cndLE.b[7];
// MCCMD レジスタ設定
reg_HOTSW_MCCMD0 = *(u32*)cndBE.b;
reg_HOTSW_MCCMD1 = *(u32*)&cndBE.b[4];
// MCCNT1 レジスタ設定 (START = 1 PC = 111(ステータスリード) latency1 = d に)
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x1 << PC_SHIFT) | (0xd & LATENCY1_MASK);
// MCCNTレジスタのRDYフラグをポーリングして、フラグが立ったらデータをMCD1レジスタに再度セット。スタートフラグが0になるまでループ。
while(reg_HOTSW_MCCNT1 & START_FLG_MASK){
while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){}
*((u32 *)buf + counter++) = reg_HOTSW_MCD1;
}
}
return HOTSW_SUCCESS;
}
#endif
// 共通