From a012d1555081b3febe9300ab2f20a00c59414184 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Mon, 19 May 2008 08:19:31 +0000 Subject: [PATCH] =?UTF-8?q?(=E6=9B=B4=E6=96=B0:Akabane=20Jumpei)=20ARM9?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=82=82=E3=80=81=E3=82=B3=E3=83=9E=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=82=92=E9=80=81=E3=81=A3=E3=81=A6Game=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E3=82=AB=E3=83=BC=E3=83=89=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=82=BF=E8=AA=AD=E3=81=BF=E3=81=8C=E5=87=BA=E6=9D=A5?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1399 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../hotsw/ARM9/src/hotsw_ctrl.c | 97 +++++++++++++++++++ include/sysmenu/hotsw/common/hotsw.h | 3 + 2 files changed, 100 insertions(+) diff --git a/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c b/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c index 5cb98dc4..93de0eb6 100644 --- a/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c +++ b/build/libraries_sysmenu/hotsw/ARM9/src/hotsw_ctrl.c @@ -17,6 +17,9 @@ #include #include +#include +#include <../ARM7/include/hotswTypes.h> + // define ------------------------------------------------------------------- #define HOTSW_READ_MSG_NUM 1 #define HOTSW_CARD_GAME_MODE_CALLBACK 1 @@ -35,6 +38,8 @@ static OSMessageQueue s_HotswQueue; static BOOL s_ReadBusy; static OSIrqFunction s_HotswFuncTable[HOTSW_CALLBACK_FUNCTION_NUM]; +static u16 s_CardLockID; + // =========================================================================== // Function Describe @@ -47,6 +52,14 @@ static OSIrqFunction s_HotswFuncTable[HOTSW_CALLBACK_FUNCTION_NUM]; #ifdef USE_WRAM_LOAD void HOTSW_Init() { + s32 tempLockID; + + // カードアクセス用のロックIDの取得 + while((tempLockID = OS_GetLockID()) == OS_LOCK_ID_ERROR){ + // do nothing + } + s_CardLockID = (u16)tempLockID; + // メッセージキューの初期化 OS_InitMessageQueue( &s_HotswQueue, &s_HotswMsgBuffer[0], HOTSW_READ_MSG_NUM ); @@ -322,3 +335,87 @@ void HOTSW_SetCardPullOutCallBackFunction(OSIrqFunction function) s_HotswFuncTable[HOTSW_CARD_PULLOUT_CALLBACK] = function; } #endif + + +/*---------------------------------------------------------------------------* + Name: HOTSW_ReadPageGame + + Description: GameモードのPage読み関数 + *---------------------------------------------------------------------------*/ +CardDataReadState HOTSW_ReadPageGame(u32 start_addr, void* buf, u32 size) +{ + 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; + + // カードのロック +#ifndef DEBUG_USED_CARD_SLOT_B_ + CARD_LockRom(s_CardLockID); +#else + LockExCard(s_CardLockID); +#endif + + for(i=0; igameCommondParam | START_MASK | HOTSW_PAGE_1; + +#ifndef USE_CPU_COPY + // メッセージ受信 + OS_ReceiveMessage(&HotSwThreadData.hotswDmaQueue, (OSMessage *)&s_Msg, OS_MESSAGE_BLOCK); +#else + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + *((u32 *)buf + counter++) = reg_HOTSW_MCD1; + } +#endif + } + + // 100ns Wait + OS_SpinWait( OS_NSEC_TO_CPUCYC(100) ); + + // カードのロック開放(※ロックIDは開放せずに持ち続ける) +#ifndef DEBUG_USED_CARD_SLOT_B_ + CARD_UnlockRom(s_CardLockID); +#else + UnlockExCard(s_CardLockID); +#endif + + return CARD_READ_SUCCESS; +} diff --git a/include/sysmenu/hotsw/common/hotsw.h b/include/sysmenu/hotsw/common/hotsw.h index ab6cca51..c39a8cb9 100644 --- a/include/sysmenu/hotsw/common/hotsw.h +++ b/include/sysmenu/hotsw/common/hotsw.h @@ -131,6 +131,9 @@ void HOTSW_SetCardPullOutCallBackFunction(OSIrqFunction function); // カードがゲームモードになったかどうか BOOL HOTSW_isGameMode(void); + +// GameモードのPage読み関数 +CardDataReadState HOTSW_ReadPageGame(u32 start_addr, void* buf, u32 size); #endif // --- ARM7