mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei)
・カードType1とType2の関数で、共通化できるところを修正 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@753 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
d4086b0c54
commit
9d4aa3c538
@ -45,8 +45,7 @@ HotSwState ChangeModeSecure_DSType2(CardBootData *cbd);
|
|||||||
#define ReadIDGame_DSType2 ReadIDGame_DSType1
|
#define ReadIDGame_DSType2 ReadIDGame_DSType1
|
||||||
|
|
||||||
// DSカードType2のゲームモードの指定ページ読み込み
|
// DSカードType2のゲームモードの指定ページ読み込み
|
||||||
HotSwState ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size);
|
#define ReadPageGame_DSType2 ReadPageGame_DSType1
|
||||||
//#define ReadPageGame_DSType2 ReadPageGame_DSType1
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|||||||
@ -378,9 +378,11 @@ HotSwState ReadIDGame_DSType1(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ReadPageGame_DSType1
|
* Name: ReadPageGame_DSType1
|
||||||
|
*
|
||||||
Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
* Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
||||||
|
*
|
||||||
|
* CT=150ns Pagecount=1page Latency=RomHeaderで指定の値
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||||
{
|
{
|
||||||
@ -400,6 +402,9 @@ HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u3
|
|||||||
return HOTSW_PULLED_OUT_ERROR;
|
return HOTSW_PULLED_OUT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewDMA転送の準備
|
||||||
|
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, (u32 *)buf + (u32)(PAGE_WORD_SIZE*i), PAGE_SIZE );
|
||||||
|
|
||||||
// ƒ[ƒ<>ƒNƒŠƒA
|
// ƒ[ƒ<>ƒNƒŠƒA
|
||||||
MI_CpuClear8(&cndLE, sizeof(GCDCmd64));
|
MI_CpuClear8(&cndLE, sizeof(GCDCmd64));
|
||||||
|
|
||||||
@ -425,12 +430,9 @@ HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u3
|
|||||||
reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.game_cmd_param |
|
reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.game_cmd_param |
|
||||||
START_MASK | (PC_MASK & (0x1 << PC_SHIFT));
|
START_MASK | (PC_MASK & (0x1 << PC_SHIFT));
|
||||||
|
|
||||||
// MCCNTレジスタのRDYフラグをポーリングして、フラグが立ったらデータをMCD1レジスタに再度セット。スタートフラグが0になるまでループ。
|
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||||
while(reg_HOTSW_MCCNT1 & START_FLG_MASK){
|
OS_SleepThread(NULL);
|
||||||
while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){}
|
|
||||||
*((u32 *)buf + counter++) = reg_HOTSW_MCD1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return HOTSW_SUCCESS;
|
return HOTSW_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -427,61 +427,8 @@ HotSwState ChangeModeSecure_DSType2(CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ReadPageGame_DSType1
|
* Name: ReadPageGame_DSType2
|
||||||
*
|
*
|
||||||
* Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
* Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
||||||
*
|
|
||||||
* CT=150ns Latency1=0x657 Latency2=0x1 Pagecount=1page
|
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
HotSwState ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
// Type1と同じ
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDMA転送の準備
|
|
||||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, (u32 *)buf + (u32)(PAGE_WORD_SIZE*i), PAGE_SIZE );
|
|
||||||
|
|
||||||
// ゼロクリア
|
|
||||||
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 W/R = 0 PC = 001(1ページリード) その他Romヘッダの情報におまかせ)
|
|
||||||
reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.game_cmd_param |
|
|
||||||
START_MASK | (PC_MASK & (0x1 << PC_SHIFT));
|
|
||||||
|
|
||||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
|
||||||
OS_SleepThread(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return HOTSW_SUCCESS;
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user