(更新:Akabane Jumpei)

・カードの状態を監視するスレッドを生成。割り込みで変化したカード状態と比較して、状態がずれていたらメッセージを送る。
・TWLカード対応。拡張常駐モジュールのハッシュチェックは通っているが、アプリを起動すると止まる。
・カード読みシーケンスの判定にボンディングオプションの条件も追加
・IFフラグをポーリングして活栓挿抜を実装できる関数を用意(デバッグ用)
・ローカルにKeyTable2を用意
・ソースの整理

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20080312_hotsw@930 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
(no author) 2008-03-24 10:38:09 +00:00
parent 5cac7ab7b1
commit 6025e2391d
10 changed files with 898 additions and 344 deletions

View File

@ -33,6 +33,7 @@ SRCS = blowfish.c \
hotsw.c \ hotsw.c \
dsCardCommon.c \ dsCardCommon.c \
romEmulation.c \ romEmulation.c \
twl_blowfish_table.c \
customNDma.c customNDma.c
TARGET_LIB = libhotsw_sp$(TWL_LIBSUFFIX).a TARGET_LIB = libhotsw_sp$(TWL_LIBSUFFIX).a

View File

@ -23,6 +23,7 @@ extern "C" {
/*************************************************************************/ /*************************************************************************/
extern BLOWFISH_CTX HotSwBlowfishInitTableBufDS; extern BLOWFISH_CTX HotSwBlowfishInitTableBufDS;
extern BLOWFISH_CTX HotSwBlowfishInitTableTWL;
// Function Prototype ------------------------------------------------------------------------ // Function Prototype ------------------------------------------------------------------------
// Blowfish <20>‰Šú‰» // Blowfish <20>‰Šú‰»

View File

@ -48,6 +48,9 @@ extern "C" {
#define SECURE_SEGMENT_SIZE 0x4000 #define SECURE_SEGMENT_SIZE 0x4000
#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE) #define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE)
// --- TWL Card
#define TWLCARD_BORDER_OFFSET 0x80000
// --- Page / Segment (Byte) // --- Page / Segment (Byte)
#define PAGE_SIZE 0x200 #define PAGE_SIZE 0x200
#define ONE_SEGMENT_SIZE 0x1000 #define ONE_SEGMENT_SIZE 0x1000
@ -284,13 +287,15 @@ typedef struct CardBootData{
BOOL twlFlg; BOOL twlFlg;
BOOL debuggerFlg; BOOL debuggerFlg;
BOOL illegalCardFlg;
u32 romStatus; BOOL isLoadTypeTwl;
u32 romEmuBuf[ROM_EMULATION_DATA_SIZE/sizeof(u32)]; u32 romEmuBuf[ROM_EMULATION_DATA_SIZE/sizeof(u32)];
u32 keyBuf[KEY_BUF_SIZE]; u32 keyBuf[KEY_BUF_SIZE];
u32 keyBuf2[KEY_BUF_SIZE]; u32 keyBuf2[KEY_BUF_SIZE];
u32 romStatus;
CardTypeEx cardType; CardTypeEx cardType;
ModeType modeType; ModeType modeType;
RomMode romMode; RomMode romMode;
@ -306,8 +311,10 @@ typedef struct CardBootData{
// スレッド・メッセージ関係をまとめた構造体 // スレッド・メッセージ関係をまとめた構造体
typedef struct CardThreadData{ typedef struct CardThreadData{
u64 stack[HOTSW_THREAD_STACK_SIZE / sizeof(u64)]; u64 hotswStack[HOTSW_THREAD_STACK_SIZE / sizeof(u64)];
OSThread thread; u64 monitorStack[HOTSW_THREAD_STACK_SIZE / sizeof(u64)];
OSThread hotswThread;
OSThread monitorThread;
u32 idx_insert; u32 idx_insert;
u32 idx_pulledOut; u32 idx_pulledOut;
@ -327,18 +334,12 @@ typedef struct CardThreadData{
} CardThreadData; } CardThreadData;
// カード起動用関数 // カード起動用関数
typedef struct CardBootFunction { typedef struct CardLoadFunction {
HotSwState (*ReadBootSegment_N)(CardBootData *cbd);
HotSwState (*ChangeMode_N)(CardBootData *cbd);
HotSwState (*ReadID_S)(CardBootData *cbd); HotSwState (*ReadID_S)(CardBootData *cbd);
HotSwState (*ReadSegment_S)(CardBootData *cbd); HotSwState (*ReadSegment_S)(CardBootData *cbd);
HotSwState (*SetPNG_S)(CardBootData *cbd); HotSwState (*SetPNG_S)(CardBootData *cbd);
HotSwState (*ChangeMode_S)(CardBootData *cbd); HotSwState (*ChangeMode_S)(CardBootData *cbd);
} CardLoadFunction;
HotSwState (*ReadID_G)(CardBootData *cbd);
HotSwState (*ReadPage_G)(CardBootData *cbd, u32 addr, void* buf, u32 size);
} CardBootFunction;
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */

View File

@ -21,11 +21,12 @@
// Function Prototype ------------------------------------------------------- // Function Prototype -------------------------------------------------------
static u32 F(const BLOWFISH_CTX *ctx, u32 x); static u32 F(const BLOWFISH_CTX *ctx, u32 x);
//*****************************************
// /*---------------------------------------------------------------------------*
// GCDm_MakeBlowfishTableDSŠÖ<C5A0> Name: GCDm_MakeBlowfishTableDS
//
//***************************************** Description: KeyTableÌ<EFBFBD><EFBFBD>¬
*---------------------------------------------------------------------------*/
void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen) void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen)
{ {
const BLOWFISH_CTX *initTable = &HotSwBlowfishInitTableBufDS; const BLOWFISH_CTX *initTable = &HotSwBlowfishInitTableBufDS;
@ -43,9 +44,13 @@ void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen)
else{ else{
keyBuf = cbd->keyBuf2; keyBuf = cbd->keyBuf2;
MI_CpuCopyFast((void *)((OSFromFirm7Buf *)HW_FIRM_FROM_FIRM_BUF)->twl_blowfish, (void *)ctx, sizeof(BLOWFISH_CTX)); MI_CpuCopyFast(&HotSwBlowfishInitTableTWL, (void *)ctx, sizeof(BLOWFISH_CTX));
// MI_CpuCopyFast((void *)((OSFromFirm7Buf *)HW_FIRM_FROM_FIRM_BUF)->twl_blowfish, (void *)ctx, sizeof(BLOWFISH_CTX));
return;
} }
// [TODO] KeyTable2—pÌ<E2809A>‰Šú‰»
keyBuf[0] = *RomHeaderGameCode; keyBuf[0] = *RomHeaderGameCode;
keyBuf[1] = *RomHeaderGameCode >> 1; keyBuf[1] = *RomHeaderGameCode >> 1;
keyBuf[2] = *RomHeaderGameCode << 1; keyBuf[2] = *RomHeaderGameCode << 1;
@ -60,11 +65,12 @@ void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen)
InitBlowfishKeyAndTableDS(ctx, keyBuf, keyLen); InitBlowfishKeyAndTableDS(ctx, keyBuf, keyLen);
} }
//*****************************************
// /*---------------------------------------------------------------------------*
// InitBlowfishKeyAndTableDSŠÖ<C5A0> Name: InitBlowfishKeyAndTableDS
//
//***************************************** Description:
*---------------------------------------------------------------------------*/
void InitBlowfishKeyAndTableDS(BLOWFISH_CTX *ctx, u32 *keyBufp, s32 keyLen) void InitBlowfishKeyAndTableDS(BLOWFISH_CTX *ctx, u32 *keyBufp, s32 keyLen)
{ {
EncryptByBlowfish(ctx, &(keyBufp)[2], &(keyBufp)[1]); EncryptByBlowfish(ctx, &(keyBufp)[2], &(keyBufp)[1]);
@ -72,11 +78,12 @@ void InitBlowfishKeyAndTableDS(BLOWFISH_CTX *ctx, u32 *keyBufp, s32 keyLen)
InitBlowfish(ctx, (u8 *)keyBufp, keyLen); InitBlowfish(ctx, (u8 *)keyBufp, keyLen);
} }
//*****************************************
// /*---------------------------------------------------------------------------*
// InitBlowfishŠÖ<C5A0> Name: InitBlowfish
//
//***************************************** Description:
*---------------------------------------------------------------------------*/
void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen) void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen)
{ {
int i, j, k; int i, j, k;
@ -113,11 +120,12 @@ void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen)
} }
//*****************************************
// /*---------------------------------------------------------------------------*
// EncryptByBlowfishŠÖ<C5A0> Name: EncryptByBlowfish
//
//***************************************** Description:
*---------------------------------------------------------------------------*/
void EncryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr) void EncryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr)
{ {
u32 Xl; u32 Xl;
@ -149,11 +157,12 @@ void EncryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr)
*xr = Xr; *xr = Xr;
} }
//*****************************************
// /*---------------------------------------------------------------------------*
// DecryptByBlowfishŠÖ<C5A0> Name: DecryptByBlowfish
//
//***************************************** Description:
*---------------------------------------------------------------------------*/
void DecryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr) void DecryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr)
{ {
u32 Xl; u32 Xl;
@ -187,11 +196,12 @@ void DecryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr)
*xr = Xr; *xr = Xr;
} }
//*****************************************
// /*---------------------------------------------------------------------------*
// FŠÖ<C5A0> Name: F
//
//***************************************** Description:
*---------------------------------------------------------------------------*/
static u32 F(const BLOWFISH_CTX *ctx, u32 x) { static u32 F(const BLOWFISH_CTX *ctx, u32 x) {
u32 a, b, c, d; u32 a, b, c, d;
u32 y; u32 y;
@ -214,5 +224,3 @@ static u32 F(const BLOWFISH_CTX *ctx, u32 x) {
return y; return y;
} }

View File

@ -19,22 +19,32 @@ static void HOTSWi_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 si
// =========================================================================== // ===========================================================================
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: HOTSW_NDmaCopy_Card Name: HOTSW_NDmaCopy_Card
Description: DMA転送する
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
void HOTSW_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 size) void HOTSW_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 size)
{ {
HOTSWi_NDmaCopy_Card(ndmaNo, src, dest, size, MI_NDMA_DEST_INC); HOTSWi_NDmaCopy_Card(ndmaNo, src, dest, size, MI_NDMA_DEST_INC);
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: HOTSW_NDmaPipe_Card Name: HOTSW_NDmaPipe_Card
Description: DMA転送で読み捨てる
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
void HOTSW_NDmaPipe_Card(u32 ndmaNo, const void *src, void *dest, u32 size) void HOTSW_NDmaPipe_Card(u32 ndmaNo, const void *src, void *dest, u32 size)
{ {
HOTSWi_NDmaCopy_Card(ndmaNo, src, dest, size, MI_NDMA_DEST_FIX); HOTSWi_NDmaCopy_Card(ndmaNo, src, dest, size, MI_NDMA_DEST_FIX);
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: HOTSWi_NDmaCopy_Card Name: HOTSWi_NDmaCopy_Card
Description: DMA転送の準備
DMA転送の準備をしてからstartフラグを上げてください
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static void HOTSWi_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 size, u32 dcont) static void HOTSWi_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 size, u32 dcont)
{ {

View File

@ -31,6 +31,11 @@ static void PreSendSecureCommand(CardBootData *cbd, u32 *scrambleMask);
// Function Describe // Function Describe
// =========================================================================== // ===========================================================================
/*---------------------------------------------------------------------------*
Name: HOTSWi_SetCommand
Description:
*---------------------------------------------------------------------------*/
void HOTSWi_SetCommand(GCDCmd64 *cndLE) void HOTSWi_SetCommand(GCDCmd64 *cndLE)
{ {
GCDCmd64 cndBE; GCDCmd64 cndBE;
@ -57,11 +62,11 @@ void HOTSWi_SetCommand(GCDCmd64 *cndLE)
// ■------------------------------------■ // ■------------------------------------■
// ■ ノーマルモードのコマンド ■ // ■ ノーマルモードのコマンド ■
// ■------------------------------------■ // ■------------------------------------■
/* ----------------------------------------------------------------- /*---------------------------------------------------------------------------*
* ReadIDNormal関数 Name: ReadIDNormal
*
* IDを読み込む関数 Description: IDを読み込む関数
* ----------------------------------------------------------------- */ *---------------------------------------------------------------------------*/
HotSwState ReadIDNormal(CardBootData *cbd) HotSwState ReadIDNormal(CardBootData *cbd)
{ {
GCDCmd64 cndLE; GCDCmd64 cndLE;
@ -87,6 +92,8 @@ HotSwState ReadIDNormal(CardBootData *cbd)
// DMAが終了するまで待つ // DMAが終了するまで待つ
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO); HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
// OS_TPrintf("Normal ID : 0x%08x\n", cbd->id_nml);
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
@ -165,11 +172,11 @@ HotSwState ReadBootSegNormal(CardBootData *cbd)
} }
/* ----------------------------------------------------------------- /*---------------------------------------------------------------------------*
* ReadStatusNormal関数 Name: ReadStatusNormal
*
* Description:
* ----------------------------------------------------------------- */ *---------------------------------------------------------------------------*/
HotSwState ReadStatusNormal(CardBootData *cbd) HotSwState ReadStatusNormal(CardBootData *cbd)
{ {
GCDCmd64 cndLE; GCDCmd64 cndLE;
@ -205,11 +212,11 @@ HotSwState ReadStatusNormal(CardBootData *cbd)
} }
/* ----------------------------------------------------------------- /*---------------------------------------------------------------------------*
* RefreshBadBlockNormal関数 Name: RefreshBadBlockNormal
*
* Description:
* ----------------------------------------------------------------- */ *---------------------------------------------------------------------------*/
HotSwState RefreshBadBlockNormal(CardBootData *cbd) HotSwState RefreshBadBlockNormal(CardBootData *cbd)
{ {
GCDCmd64 cndLE; GCDCmd64 cndLE;
@ -249,6 +256,7 @@ HotSwState ChangeModeNormal(CardBootData *cbd)
return HOTSWi_ChangeModeNormal(cbd, HSWOP_N_OP_CHG_MODE); return HOTSWi_ChangeModeNormal(cbd, HSWOP_N_OP_CHG_MODE);
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
* Name: ChangeModeNorma2 * Name: ChangeModeNorma2
* *
@ -291,14 +299,14 @@ static HotSwState HOTSWi_ChangeModeNormal(CardBootData *cbd, u64 cmd)
} }
/* ----------------------------------------------------------------- /*---------------------------------------------------------------------------*
* LoadTable関数 Name: LoadTable
*
* Key Table Description: Key Table
*
*
*  
* ----------------------------------------------------------------- */ *---------------------------------------------------------------------------*/
HotSwState LoadTable(void) HotSwState LoadTable(void)
{ {
GCDCmd64 cndLE; GCDCmd64 cndLE;
@ -328,6 +336,7 @@ HotSwState LoadTable(void)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: ReadRomEmulationData Name: ReadRomEmulationData
@ -377,7 +386,7 @@ HotSwState ReadRomEmulationData(CardBootData *cbd)
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: SetSecureCommand Name: SetSecureCommand
Description: Description: Blowfishで暗号化してレジスタにセット
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static void SetSecureCommand(SecureCommandType type, CardBootData *cbd) static void SetSecureCommand(SecureCommandType type, CardBootData *cbd)
{ {
@ -490,6 +499,7 @@ HotSwState ReadIDSecure(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
* Name: ReadSegSecure * Name: ReadSegSecure
* *
@ -565,6 +575,7 @@ HotSwState ReadSegSecure(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
* Name: SwitchONPNGSecure * Name: SwitchONPNGSecure
* *
@ -602,6 +613,7 @@ HotSwState SwitchONPNGSecure(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
* Name: SwitchOFFPNGSecure * Name: SwitchOFFPNGSecure
* *
@ -639,6 +651,7 @@ HotSwState SwitchOFFPNGSecure(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
* Name: ChangeModeSecure * Name: ChangeModeSecure
* *
@ -719,6 +732,7 @@ HotSwState ReadIDGame(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
* Name: ReadPageGame * Name: ReadPageGame
* *
@ -767,6 +781,7 @@ HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
* Name: ReadStatusGame * Name: ReadStatusGame
* *
@ -804,6 +819,7 @@ HotSwState ReadStatusGame(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/* ----------------------------------------------------------------- /* -----------------------------------------------------------------
* RefreshBadBlockGame関数 * RefreshBadBlockGame関数
* *

File diff suppressed because it is too large Load Diff

View File

@ -81,6 +81,7 @@ HotSwState ReadIDSecure_ROMEMU(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: ReadSegSecure_ROMEMU Name: ReadSegSecure_ROMEMU
@ -123,6 +124,7 @@ HotSwState ReadSegSecure_ROMEMU(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: SwitchONPNGSecure_ROMEMU Name: SwitchONPNGSecure_ROMEMU
@ -135,6 +137,7 @@ HotSwState SwitchONPNGSecure_ROMEMU(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: SwitchOFFPNGSecure_ROMEMU Name: SwitchOFFPNGSecure_ROMEMU
@ -147,6 +150,7 @@ HotSwState SwitchOFFPNGSecure_ROMEMU(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: ChangeModeSecure_ROMEMU Name: ChangeModeSecure_ROMEMU
@ -179,6 +183,7 @@ HotSwState ChangeModeSecure_ROMEMU(CardBootData *cbd)
return HOTSW_SUCCESS; return HOTSW_SUCCESS;
} }
// ■------------------------------------■ // ■------------------------------------■
// ■ ゲームモードのコマンド ■ // ■ ゲームモードのコマンド ■
// ■------------------------------------■ // ■------------------------------------■

View File

@ -0,0 +1,282 @@
/*---------------------------------------------------------------------------*
Project: TwlBrom - libraries - GCD
File: ds_blowfish_table.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.
*---------------------------------------------------------------------------*/
#include <hotswTypes.h>
const BLOWFISH_CTX HotSwBlowfishInitTableTWL = {
0x05526369, 0x040B421F, 0x04DAE16B, 0x03222EFA,
0x05EB3557, 0x0089EBE1, 0x03E13C75, 0x02BD8B6D,
0x071E6069, 0x0406B0C5, 0x0737814E, 0x04357C20,
0x06E70543, 0x02D6B325, 0x05F42EDC, 0x075FA408,
0x058CB61F, 0x0005B115,
0x04FB84D7, 0x00835937, 0x074D69B0, 0x03092EF8,
0x02C477AA, 0x02633C66, 0x021479EB, 0x02BE7290,
0x04254FE3, 0x041A18DE, 0x0011129E, 0x019209F3,
0x053751A3, 0x02B46D10, 0x02819FB4, 0x008B2FA5,
0x0720D1F8, 0x0314C7A2, 0x04B9AE7B, 0x04168028,
0x01AD742F, 0x02AA9574, 0x05A95800, 0x047A0DA5,
0x0279F093, 0x06FAA890, 0x06A3A9BD, 0x061142AB,
0x02D36BB5, 0x07D5B8CB, 0x01D5147F, 0x0185B4F2,
0x04329CCE, 0x04B1B5D8, 0x06E13A40, 0x04F0898C,
0x059B5707, 0x072D9FD8, 0x04A6A963, 0x0571C044,
0x050B1D95, 0x06B8DE98, 0x0253CAFF, 0x040F93D5,
0x024DE9A5, 0x016159BD, 0x04164C1E, 0x06039C0F,
0x0162BB3A, 0x037A6F5F, 0x023E1F80, 0x01BEDC47,
0x02E42CC4, 0x02BA1AD3, 0x009FCD4A, 0x01A09A64,
0x03D5F72F, 0x002F16F7, 0x061523C2, 0x019EDE98,
0x02FB4E21, 0x024ABA82, 0x035F324B, 0x043B186D,
0x046FD0BA, 0x03D84F7D, 0x01519C5F, 0x054FC637,
0x06443165, 0x00591465, 0x07D4856A, 0x05C847F1,
0x0749E7A2, 0x017D80EC, 0x0111BF2F, 0x02C920BE,
0x06D85623, 0x064ADF93, 0x03260CCC, 0x02C0F28D,
0x005BBE0C, 0x0371F35E, 0x00407119, 0x06075C7B,
0x06CB6DC2, 0x0031CB12, 0x05220DB5, 0x03D235D9,
0x0736EB35, 0x0716448C, 0x02B9E4E9, 0x06C408D8,
0x0282D902, 0x052586A3, 0x0775A47F, 0x056CA10B,
0x028F164F, 0x03365948, 0x07BBDB4D, 0x034217C7,
0x00FDF4DB, 0x0278BE82, 0x056B2EE3, 0x003A57F4,
0x026E44DA, 0x0587D6DF, 0x0699B381, 0x05DD58DD,
0x0099C34B, 0x07FE334F, 0x061682A1, 0x075F48DC,
0x05A95910, 0x07C8D2F2, 0x0701F13E, 0x01F92114,
0x051F55EB, 0x03158B95, 0x06A4CBEB, 0x0688C7D5,
0x0439631E, 0x006448FE, 0x01AB7B3F, 0x03DCD3B0,
0x0735B15D, 0x01045A14, 0x047CF4D0, 0x01BFE119,
0x065976D4, 0x06BF4287, 0x0054D2BF, 0x037E281A,
0x0474DC3E, 0x01DDF533, 0x07FD249E, 0x0696FF5C,
0x06FC83EF, 0x00895986, 0x077FAD53, 0x02A0D475,
0x0589CF47, 0x0463060D, 0x04F58C53, 0x018C0184,
0x0416EF7F, 0x0148B8E7, 0x00665F46, 0x06B15F0E,
0x07DD76B3, 0x07592BBE, 0x02C752F9, 0x035B639A,
0x07B561AB, 0x055A02C1, 0x032C87F4, 0x074DF8C9,
0x04DE7E08, 0x01779DD0, 0x04B0A183, 0x02CD73F1,
0x015C106E, 0x070EEBBC, 0x0055BB03, 0x02651FA2,
0x06CE6DD3, 0x065B3BAC, 0x05B18A61, 0x01843559,
0x00F1600A, 0x035B2893, 0x0119BA0F, 0x0311E24C,
0x0076A1DC, 0x075E5486, 0x02651C67, 0x02B0FAB2,
0x029CED3A, 0x03E9DDAB, 0x03B35437, 0x03D30D6D,
0x03629908, 0x070B253C, 0x0403FD6E, 0x0631AE1B,
0x04C6E55B, 0x05CFEA46, 0x00F78239, 0x04C31E56,
0x02AC48EA, 0x02DA5793, 0x07D7EE80, 0x01A58DD0,
0x0440BC8E, 0x047FA958, 0x04A120AE, 0x07A48C2F,
0x0490D631, 0x04205C1B, 0x074491E1, 0x03DC8737,
0x05AA7B91, 0x028149A0, 0x02D15368, 0x02B857B2,
0x03352071, 0x013F2B3F, 0x02A32234, 0x00AD5A5F,
0x02C1BB07, 0x0746B1A8, 0x016F1BC5, 0x008EEC53,
0x011F6374, 0x0236DEF8, 0x01F5F136, 0x015E1206,
0x07E815F6, 0x042879C6, 0x033AD57D, 0x0558442A,
0x0243F9F1, 0x00B50791, 0x04632BED, 0x008CE746,
0x02BA47B9, 0x04DC953D, 0x0230C520, 0x028B8A44,
0x034E4AAD, 0x05F4404A, 0x05C02F9A, 0x049C2098,
0x05738F11, 0x07341FBB, 0x01845FDA, 0x043ED01F,
0x0497A307, 0x055FF998, 0x04DDD428, 0x05DDFDA4,
0x07442F72, 0x0607229D, 0x052FD116, 0x00E528D3,
0x01E3D7AA, 0x02EBBA09, 0x06E3C252, 0x04F17067,
0x070622BB, 0x0308860B, 0x039D045B, 0x04DD8848,
0x01D9105D, 0x0389C9AA, 0x00B06AAE, 0x034DCAAC,
0x01C5E8E5, 0x02834663, 0x07BC04DB, 0x046C0F43,
0x05795C2C, 0x00C3A9D0, 0x0698646D, 0x0441E7DA,
0x0104EC07, 0x04CF09C4, 0x01FA3B1F, 0x07A3A818,
0x00C3492F, 0x059E41C5, 0x020C91CC, 0x04F45D15,
0x0462532F, 0x05B0B06B, 0x03B77F77, 0x071208FD,
0x00BDB01C, 0x068A9386, 0x047F4C10, 0x0028A7F0,
0x06A27510, 0x056F2B43, 0x0005764C, 0x056E9195,
0x0267997F, 0x04018898, 0x0535EE95, 0x07027559,
0x067491B6, 0x02F34209, 0x034E47BB, 0x02E492E6,
0x013A1C03, 0x0253A5C4, 0x0664E84A, 0x0069A5E6,
0x000D2E8F, 0x06C4DAA8, 0x06FA8774, 0x04D3A4C8,
0x02ABC317, 0x05144060, 0x021120E9, 0x072E4B71,
0x073C25AF, 0x0591407E, 0x00D96350, 0x02DF7B1D,
0x0025231F, 0x03D6E660, 0x03DC62BF, 0x06F28B61,
0x02AF873D, 0x077DBF4C, 0x06BC320E, 0x07D9B25B,
0x079FF100, 0x035304BC, 0x06FB6C25, 0x017E04F0,
0x04B879DA, 0x02472768, 0x06B05478, 0x07F9296D,
0x06D3A241, 0x00E9D0EE, 0x06C4FF27, 0x055F65D9,
0x02551093, 0x04067917, 0x038B524D, 0x07405D23,
0x053FDCBE, 0x04A6A73D, 0x03529F18, 0x041DCA50,
0x069A923E, 0x06564436, 0x003CA4E0, 0x07E422B6,
0x059D37DA, 0x06E48164, 0x0137BA88, 0x038B9355,
0x008E1D46, 0x005426EA, 0x06B67424, 0x02C58519,
0x04AF2FE5, 0x0032FC6F, 0x006ED904, 0x0596BDC2,
0x061A29F2, 0x023A9D03, 0x00439E06, 0x00348DD2,
0x01DCF8CE, 0x075688E9, 0x04D29E0A, 0x03BD448C,
0x05AB97F3, 0x050BE3BB, 0x05C07374, 0x01BEB46C,
0x035D666C, 0x05A7A7FF, 0x0327E38A, 0x05802A3D,
0x0145D043, 0x0444FF08, 0x03C2E090, 0x042EF1AB,
0x0620D57B, 0x07F6E013, 0x06FBA530, 0x030C14A8,
0x01215A38, 0x03BE914A, 0x05FFB3D2, 0x028478DC,
0x0726564B, 0x00537D65, 0x006161DE, 0x07AEB02B,
0x020D6D8E, 0x01C4FA66, 0x05F12500, 0x046868EF,
0x02174F3B, 0x02255533, 0x071AE436, 0x014A54F7,
0x07DB3334, 0x041BDA53, 0x0283D946, 0x053130DA,
0x01ABA660, 0x07360D56, 0x0056855C, 0x00CE94BD,
0x0406CDD9, 0x06E6E008, 0x004D36E0, 0x051C6286,
0x0270346E, 0x05AD0969, 0x07D0E274, 0x00E5991E,
0x0286B221, 0x056319CA, 0x0084E10B, 0x050CBD59,
0x0683D539, 0x034B03AA, 0x069ADBB5, 0x013F16D2,
0x01EA112A, 0x037C0DB8, 0x070F9266, 0x026BE5C1,
0x04E4E47C, 0x021DC174, 0x049F4368, 0x030BA52B,
0x04A7E825, 0x02869122, 0x02986850, 0x02501755,
0x03B99C06, 0x00960EB8, 0x07DAFE1F, 0x03C1F644,
0x0423E828, 0x032C4A38, 0x0602F748, 0x06AA625E,
0x07587950, 0x02964BF0, 0x03A6B633, 0x03627E34,
0x03BF74E4, 0x03DA2A2F, 0x04AAB440, 0x01028113,
0x03860A5C, 0x04874576, 0x078C31ED, 0x0048BC9C,
0x01544842, 0x019922EA, 0x03D13432, 0x072E4602,
0x05947F38, 0x045059D9, 0x03BCB4B1, 0x04D1196E,
0x003EA37F, 0x031AB679, 0x049F4941, 0x03B29D99,
0x048F5356, 0x0776CD4B, 0x0313BA85, 0x0200BBA3,
0x00B8AB81, 0x005AC364, 0x0454D94F, 0x0097FA8A,
0x06CF6FF2, 0x02596050, 0x0542E364, 0x00CBF046,
0x03D9624A, 0x05B68507, 0x04FC61A1, 0x05BE5A73,
0x023ACFF7, 0x06CFCFE3, 0x02639FBA, 0x057B3C8F,
0x017CFE6C, 0x01CB94D3, 0x0328D69B, 0x02ECFEE7,
0x070258F0, 0x021799B6, 0x02FEB4CB, 0x0511A362,
0x0089C6AB, 0x06A305D4, 0x05B8A852, 0x0231138C,
0x03C30AB5, 0x043E510D, 0x06565249, 0x0421DCF4,
0x04D58857, 0x05D10658, 0x05EEA869, 0x04404D1D,
0x010E0C8F, 0x04B64F11, 0x005E881E, 0x0683A890,
0x031B0717, 0x02A38461, 0x01EB6C9B, 0x055CE3B8,
0x0414733D, 0x060C602F, 0x00F033FF, 0x05167B33,
0x04A9DC78, 0x0077F324, 0x03791527, 0x062A6309,
0x03291611, 0x022F9818, 0x07452BDE, 0x06F92768,
0x010C5DA6, 0x07675065, 0x0332B09A, 0x00856009,
0x02993788, 0x06F81E49, 0x0036CA92, 0x07AA2EEA,
0x0458BD2F, 0x004DD8AC, 0x026BEC7E, 0x03278664,
0x075581CF, 0x01E96321, 0x0113EE6C, 0x04303FCB,
0x0242F3CA, 0x00B08BDD, 0x050F5CF8, 0x0504A197,
0x07FE5BFB, 0x07BDF90B, 0x01C65BB1, 0x00921436,
0x007202F5, 0x04CA4249, 0x034FB69E, 0x0283DB7B,
0x03C7C61A, 0x06B3EA14, 0x077B885A, 0x07752D31,
0x037ED1C8, 0x04A5CE3D, 0x06D3F995, 0x00DCC24B,
0x047072D0, 0x01C166DB, 0x01860647, 0x07489365,
0x00EE5F88, 0x063F8882, 0x06D77198, 0x0145A590,
0x0291187A, 0x006E4606, 0x069550A6, 0x06224C8C,
0x068BB1CE, 0x01519F5D, 0x01F1A883, 0x06309385,
0x06C653E2, 0x01AB6E47, 0x0541D01E, 0x00A21869,
0x038F42FA, 0x04F8BCE5, 0x07AC3407, 0x049FC3B5,
0x07F4902B, 0x03CF9275, 0x05526F3D, 0x05E28B23,
0x00EEEA3A, 0x03982C33, 0x04124282, 0x0396F250,
0x0195A14C, 0x072E5EAE, 0x00E6E717, 0x003DC85E,
0x038B6FF8, 0x04C7B6FE, 0x076F853B, 0x05BAA978,
0x030EDF53, 0x04F1AEAB, 0x03A3D1B0, 0x0207BA9D,
0x03928189, 0x006E3DFD, 0x012EDB63, 0x062116C3,
0x0786305B, 0x065C3FAD, 0x044AE49B, 0x0431138D,
0x068963C6, 0x07CDC08C, 0x0179CBEE, 0x04E823B2,
0x03F919C6, 0x04B360F1, 0x06E5AC3C, 0x0540C334,
0x06A9102C, 0x061CB509, 0x013B8536, 0x00D5B3D6,
0x04838C80, 0x066308A8, 0x076AE7EA, 0x0613968A,
0x054EC14E, 0x05BC0854, 0x034602A9, 0x068FB55C,
0x04D5A55B, 0x02FC18B0, 0x044B9B70, 0x05BF28AF,
0x07FE89F2, 0x0452207A, 0x03AFAA4F, 0x0288FEA8,
0x0426C60C, 0x034D6F1D, 0x053EA274, 0x06F5631E,
0x0349AF3E, 0x048ABC15, 0x026E0937, 0x03C69B8B,
0x03CA94DE, 0x02F36D84, 0x01ABC96A, 0x01C5C9E1,
0x05B3C1A6, 0x0025E14B, 0x033E0FD8, 0x07BABDEF,
0x06FFC780, 0x02ED1E95, 0x04B92564, 0x075B4238,
0x078FEF49, 0x04A1024B, 0x00AA6C24, 0x01310C32,
0x067B8D0D, 0x059D38EC, 0x06411603, 0x039D4F50,
0x0003471B, 0x002F1F45, 0x027AF1F8, 0x061E6850,
0x055AB734, 0x036E99E3, 0x07014475, 0x069B10C3,
0x068BE51A, 0x02C006C5, 0x0288E7B8, 0x075B45DB,
0x016F1C65, 0x03465E48, 0x043C68CA, 0x05E77E8D,
0x0051F731, 0x012DC2FF, 0x01C11914, 0x02ADA6A1,
0x02456B10, 0x0365049F, 0x013F80A6, 0x03B4AD28,
0x01C480E2, 0x06C2F6DB, 0x06512084, 0x00E5DC11,
0x02DC1915, 0x01840696, 0x034087A0, 0x07C40C20,
0x03963E03, 0x062BAEE1, 0x07BC9556, 0x02DF2044,
0x009823EE, 0x027671B0, 0x051C0806, 0x0479E463,
0x0241414B, 0x0524582B, 0x06077E70, 0x02969905,
0x01480578, 0x02AF230F, 0x07A9D824, 0x03955F39,
0x04416164, 0x035E768D, 0x02DBEB41, 0x031AC25E,
0x01B43DA1, 0x040FF3CC, 0x02B93B42, 0x00D0CD63,
0x05C34037, 0x05E17F9D, 0x06D4006B, 0x06216274,
0x00536CF2, 0x003C9402, 0x006B6BCA, 0x02C4975A,
0x022B10A4, 0x05711925, 0x0155CE98, 0x038C6B67,
0x02A06A0C, 0x060FAC1C, 0x02AB5B25, 0x038FB9A3,
0x011261EC, 0x00A391B5, 0x07DB8671, 0x04FA631C,
0x0739EFBE, 0x06EDC12A, 0x04F4C770, 0x003DD114,
0x00888C03, 0x00FFF95C, 0x02EFBD4E, 0x029C2CCC,
0x02D3F3C3, 0x029B853C, 0x02603C10, 0x00F8431D,
0x03250BE4, 0x0460FEF8, 0x0250E2D5, 0x0439722E,
0x02513A6E, 0x05D82FCD, 0x064894C2, 0x05492769,
0x03266680, 0x047E0475, 0x02FA0EB6, 0x06BA3C61,
0x047FA9A9, 0x02C1A9FE, 0x025ACFB7, 0x02985ED2,
0x04441BAC, 0x060D6E18, 0x04D5A4D7, 0x042A7F2E,
0x06902DAB, 0x00E87B20, 0x017F6ECE, 0x0134312A,
0x054D7CCE, 0x04C49F48, 0x03E33BA0, 0x00990CF1,
0x00BD21BD, 0x01466B0D, 0x0702E278, 0x038ED06C,
0x04BC7EB9, 0x07D59BF7, 0x04572039, 0x02C0EF14,
0x00B3DEDC, 0x0560B71B, 0x04EE3D97, 0x018816E1,
0x06185D9B, 0x01D91E3E, 0x0333A02E, 0x0287192F,
0x02052CC5, 0x06E702F5, 0x044385D7, 0x03C0D8EC,
0x03EAA772, 0x0495D684, 0x029CBCAD, 0x051DB4F4,
0x0413BD8A, 0x057B06E4, 0x02650B62, 0x04683194,
0x07CDCE28, 0x05815B81, 0x02BF630C, 0x0408C8CD,
0x07F1D99C, 0x04D9DB4D, 0x07E2FCA1, 0x067F15BE,
0x034C32D2, 0x07A5E06F, 0x0349D642, 0x06475323,
0x05104EAB, 0x04FD4462, 0x03750461, 0x02B1D943,
0x061EA9C7, 0x067BC97D, 0x02619A6B, 0x0654F1A7,
0x0153E670, 0x00E597C0, 0x05F234AB, 0x04F7C459,
0x026DD557, 0x06A0FC01, 0x0705E313, 0x05056DFE,
0x018DD524, 0x033F7EBE, 0x02075A2E, 0x05BF99F2,
0x00AA1078, 0x00C6B82E, 0x0194A559, 0x06AC62BB,
0x03187480, 0x024316BE, 0x035B674C, 0x069C78DA,
0x0698BE5B, 0x079353F3, 0x02AE3CD4, 0x00CAC9D4,
0x006DBF93, 0x061BCE6F, 0x04B74C88, 0x07E0113E,
0x013EC74C, 0x035AD6BE, 0x0360215D, 0x07F3B0E0,
0x01B37B6A, 0x05B2A0CC, 0x03D32F5D, 0x016BB94D,
0x01A374D1, 0x06A8F973, 0x0181AC19, 0x04176B01,
0x0785C98E, 0x0013DB53, 0x075247CE, 0x0767FF49,
0x00B29434, 0x061FDEB3, 0x05C57CF0, 0x07D1FDA2,
0x030968E5, 0x01C01BA4, 0x03BAC374, 0x0744CDE1,
0x07E9CDBA, 0x0199E71A, 0x012481EA, 0x07D1712E,
0x01CD4CCB, 0x01377B6D, 0x05605B0E, 0x002FEAD2,
0x02B2337B, 0x07622D30, 0x00A04AD9, 0x02D3BE46,
0x07F02949, 0x0424A261, 0x076585B5, 0x078816BE,
0x07154117, 0x01C11842, 0x050029F9, 0x07928B4E,
0x04F89976, 0x0458082C, 0x0119CF5D, 0x01B54C8A,
0x04F5282C, 0x02095F82, 0x01DFDB26, 0x06B7BC89,
0x0582A656, 0x075A623D, 0x04BDB794, 0x0637A962,
0x057A662D, 0x046B8EC7, 0x0621680F, 0x025175A7,
0x0021CB4A, 0x009B3215, 0x015F1CAD, 0x06589BDD,
0x06C0168B, 0x0362B7F9, 0x07300782, 0x06B22353,
0x06540788, 0x01160327, 0x023E8711, 0x05014033,
0x000405D7, 0x028C4AD2, 0x0236D242, 0x05F2E721,
0x067CF60A, 0x05BB8ACD, 0x0060EF1A, 0x05AC708E,
0x07E2BC7D, 0x07C99786, 0x00E49260, 0x01E5411A,
0x047D51FB, 0x05CD01A8, 0x071081EB, 0x04CD0F64,
0x039818D2, 0x0333096C, 0x04B686D1, 0x0399D633,
0x0774C73D, 0x07CE7E4A, 0x03E8FB45, 0x07F00496,
0x07909622, 0x047701B7, 0x0527C8D1, 0x07E9318D,
0x00629C06, 0x00C79873, 0x024C1C1C, 0x0743B797,
0x05B1E662, 0x01542F00, 0x02AC058C, 0x0178AE04,
0x0153DC07, 0x07D617F5, 0x05BC22B3, 0x054658D6,
0x07E328D1, 0x04769750, 0x041DCC6A, 0x04C55E9F,
0x025F562F, 0x012AD3D9, 0x07E16C24, 0x079177C2,
0x04FCA8EF, 0x02D93386, 0x05161E69, 0x06B39D9D,
0x008699E0, 0x0405519F, 0x029FB6BA, 0x038F33FF,
0x0443ED1D, 0x04608C08, 0x02426B87, 0x0662A078,
0x05A748EC, 0x0305A6CE, 0x04E1841B, 0x0171FE26,
0x057ADCFA, 0x00F46C0A, 0x00052EC8, 0x051F0984,
0x06E385FF, 0x01173F10, 0x05166DF2, 0x07793AE8,
0x013C3393, 0x006135F5, 0x06C00900, 0x04D5F763,
0x02C7993D, 0x07049AEE, 0x0272F2BD, 0x021D5CB5,
0x05A53EFE, 0x06466AB1, 0x077FDD2B, 0x03976DA3,
0x05EEBAC3, 0x0315E29B, 0x000D8D97, 0x00E0292F,
0x01AC4A30, 0x05D468EA, 0x07F92E7A, 0x04790EB8,
0x00416DE1, 0x01C0269C, 0x06564FC0, 0x064D8FD1
};

View File

@ -63,6 +63,9 @@ BOOL HOTSW_IsCardExist(void);
// カードにアクセスできる状態か判定 // カードにアクセスできる状態か判定
BOOL HOTSW_IsCardAccessible(void); BOOL HOTSW_IsCardAccessible(void);
// デバッグ用
void HOTSW_CardIF_Polling(void);
// Romエミュレーション情報を格納しているバッファのポインタを返す // Romエミュレーション情報を格納しているバッファのポインタを返す
#ifdef SDK_ARM7 #ifdef SDK_ARM7
void* HOTSW_GetRomEmulationBuffer(void); void* HOTSW_GetRomEmulationBuffer(void);