DS無線パッチ暫定対応(クローンブートはHOTSWによる署名データロード待ち)。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@695 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-02-19 05:49:50 +00:00
parent 9b5f69cd66
commit 45ec74a6c4
13 changed files with 555 additions and 17 deletions

View File

@ -70,6 +70,7 @@ SYSMENU_LIBS ?= \
libmbloader$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libboot$(TWL_LIBSUFFIX).a \
libds$(TWL_LIBSUFFIX).a \
else # ($(CODEGEN_PROC),ARM7)
@ -78,6 +79,7 @@ SYSMENU_LIBS ?= \
libsysmmcu_sp$(TWL_LIBSUFFIX).a \
libmbloader_sp$(TWL_LIBSUFFIX).a \
libboot_sp$(TWL_LIBSUFFIX).a \
libds_sp$(TWL_LIBSUFFIX).a \
libhotsw_sp$(TWL_LIBSUFFIX).a \
endif

View File

@ -22,7 +22,7 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS_P = reloc_info sysmenu mb_loader acsign boot hotsw namut mcu
SUBDIRS_P = reloc_info sysmenu mb_loader acsign boot hotsw namut mcu ds
#----------------------------------------------------------------------------

View File

@ -32,7 +32,7 @@ INCDIR = ../common/include \
$(ROOT)/build/libraries/fatfs/ARM7.TWL/include \
$(ROOT)/build/libraries/fatfs/ARM7.TWL/include/twl/fatfs/ARM7 \
SRCS = bootAPI.c
SRCS = bootAPI.c \
TARGET_LIB = libboot_sp$(TWL_LIBSUFFIX).a

View File

@ -19,6 +19,7 @@
#include <twl/mcu.h>
#include <twl/cdc.h>
#include <sysmenu.h>
#include <sysmenu/ds.h>
#include "reboot.h"
@ -35,8 +36,6 @@
#define COPY_NUM_MAX (4*3)
#define POST_CLEAR_NUM_MAX (12 + 4*2)
#define SYSMi_ARM9_BOOT_CODE_BUF 0x023fee00
// extern data-------------------------------------------------------
// function's prototype----------------------------------------------
@ -51,8 +50,8 @@ static void BOOTi_CutAwayRegionList( u32 *regionlist, u32 start, u32 end );
static u32 twl_post_clear_list[POST_CLEAR_NUM_MAX + 1] =
{
HW_PARAM_RESERVED_END, SYSM_OWN_ARM7_MMEM_ADDR,
SYSM_OWN_ARM7_MMEM_ADDR_END, SYSMi_ARM9_BOOT_CODE_BUF,
SYSMi_ARM9_BOOT_CODE_BUF + OS_BOOT_CODE_SIZE, SYSM_OWN_ARM9_MMEM_ADDR,
SYSM_OWN_ARM7_MMEM_ADDR_END, OS_BOOT_A9CODE_BUF,
OS_BOOT_A9CODE_BUF + OS_BOOT_CODE_SIZE, SYSM_OWN_ARM9_MMEM_ADDR,
SYSM_OWN_ARM9_MMEM_ADDR_END, HW_TWL_MAIN_MEM_SHARED,
NULL,
};
@ -61,7 +60,7 @@ static u32 nitro_post_clear_list[POST_CLEAR_NUM_MAX + 1] =
{
HW_PARAM_DELIVER_ARG, HW_PARAM_DELIVER_ARG_END,
HW_PARAM_RESERVED_END, SYSM_OWN_ARM7_MMEM_ADDR,
SYSM_OWN_ARM7_MMEM_ADDR_END, SYSMi_ARM9_BOOT_CODE_BUF,
SYSM_OWN_ARM7_MMEM_ADDR_END, OS_BOOT_A9CODE_BUF,
SYSM_TWL_ARM9_LTD_LOAD_MMEM, SYSM_DBG_NTR_SYSTEM_BUF,
SYSM_OWN_ARM9_MMEM_ADDR_END, HW_TWL_MAIN_MEM_SHARED,
NULL,
@ -81,14 +80,6 @@ BOOL BOOT_WaitStart( void )
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
(void)OS_SetIrqMaskEx(0);
/*
#ifdef ISDBG_MB_CHILD_
if( ( GetIpl2WorkAddr()->ipl2_type != 0xff ) && ( GetIpl2WorkAddr()->ipl2_type & 0x28 ) )
#endif // ISDBG_MB_CHILD_ // USG or NATなら無線パッチを当てる
{
InsertWLPatch();
}
*/
BOOTi_ClearREG_RAM(); // ARM7側のメモリレジスタクリア。
reg_MI_MBK9 = 0; // 全WRAMのロック解除

View File

@ -19,6 +19,7 @@
#include <twl/camera.h>
#include <twl/os/common/format_rom.h>
#include <sysmenu.h>
#include <sysmenu/ds.h>
#include <firm/format/wram_regs.h>
#include "reboot.h"
@ -147,6 +148,13 @@ void BOOT_Ready( void )
}
#endif // FIRM_USE_SDK_KEYS || SYSMENU_DISABLE_RETAIL_BOOT
// USG以前のDSアプリには無線パッチを適用
// キャッシュ領域の排他制御簡略化のためARM9で行う
if ( ds )
{
DS_InsertWLPatch();
}
// デバッガによるROMエミュレーション時はNTR-ROMヘッダバッファの
// ゲームコマンドパラメータをスクランブルOFF設定に書き換える
dh->s.game_cmd_param = SYSMi_GetWork()->gameCommondParam;

View File

@ -0,0 +1,52 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlIPL
# File: Makefile
#
# Copyright 2008 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.
#
# $Date:: 2008-02-07#$
# $Rev: 612 $
# $Author: yutaka $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM7
#----------------------------------------------------------------------------
SRCDIR = ../common/src
INCDIR = ../common/include \
$(ROOT)/build/libraries/mb/common/include \
SRCS = ds_wlpatch.c \
TARGET_LIB = libds_sp$(TWL_LIBSUFFIX).a
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,52 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlIPL
# File: Makefile
#
# Copyright 2008 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.
#
# $Date:: 2008-02-07#$
# $Rev: 612 $
# $Author: yutaka $
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM9
#----------------------------------------------------------------------------
SRCDIR = ../common/src
INCDIR = ../common/include \
$(ROOT)/build/libraries/mb/common/include \
SRCS = ds_wlpatch.c \
TARGET_LIB = libds$(TWL_LIBSUFFIX).a
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -0,0 +1,358 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: ds_wlpatch.c
Copyright 2008 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.
$Date:: #$
$Rev: $
$Author: $
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <sysmenu.h>
#include <sysmenu/ds.h>
#include "mb_fileinfo.h"
// define data----------------------------------------------------------
#define _PATCH3_SHORT_ // パッチ3のサーチパターン削減スイッチ
#define SWI_NO_CPU_SET_FAST ( 12 << 16 ) // SVC_CpuSetFast()
#define WL_PATCH_SIZE 20
#define RED_RSV_PATCH_FUNC_ADDR ( HW_RED_RESERVED + 0x1c )
#define SDK_VER_30 0x03000000
#define SDK_VER_22_RELEASE_PLUS_3 0x02027533
#define SDK_VER_30_RC3 0x03004f4c
#define SDKVER_OFFSET_IN_PATTERN -4
#define PATCH1_OFFSET_IN_PATTERN 0x18
#ifdef _PATCH3_SHORT_
#define PATCH3_OFFSET_IN_PATTERN 0x04
#else
#define PATCH3_OFFSET_IN_PATTERN 0x40
#endif
// function's prototype-------------------------------------------------
void DS_InsertWLPatch( void );
static int DSi_ExistNitroCard(void);
static void* DSi_GetPatchBaseAddr( void );
static BOOL DSi_IsPatchedSDKVersion( void );
static u32 DSi_SearchBinaryCore( const u32 *patp, int pat_word_size, int patch_offset );
static void DSi_SetPatchCodeToREDRsvArea( u32 patch_addr, const u32 *patchp );
void DSi_WLPatchCore( void );
// extern data----------------------------------------------------------
// const data-----------------------------------------------------------
// SDKバージョン検出用マジックコード
static const u32 sdk_ver_magic_code[] = {
0xdec00621,
0x2106c0de,
};
// パッチ1対象コード
static const u32 patch1_org[] = {
0xe59f1028, 0xe59f2028, 0xe1d200b0, 0xe2100001,
0x1afffffc, 0xe1d100b0, 0xe3500006, 0x0afffff9,
0xe1d100b0, 0xe3500005, 0x0afffff6, 0xe12fff1e,
0x04808214, 0x0480819c,
};
// パッチ3対象コード
static const u32 patch3_org[] = {
#ifndef _PATCH3_SHORT_
0xE92D4000, 0xE24DD004, 0xE3A02000, 0xE59F10A8,
0xE5910000, 0xE2800C03, 0xE1C0FFFF, 0xE5910000,
0xE2800B01, 0xE1C0FFFF, 0xE59F1090, 0xE59F2090,
0xE1D200B0, 0xE2100001, 0x1AFFFFFC,
#endif
0xE1D100B0,
0xE3500006, 0x0AFFFFF9, 0xE1D100B0, 0xE3500005, // patch target( top 20bytes )
0x0AFFFFF6, 0xE3A01000, 0xE59F0068, 0xE1C010B0,
0xE59F0064, 0xE1C010B0, 0xE59F004C, 0xE5900000,
0xE2800C03,
#ifndef _PATCH3_SHORT_
0xE1D0FFFF, 0xE3500000, 0x0A00000B,
0xEB00FFFF, 0xE59F0030, 0xE5900000, 0xE2800C03,
0xE1D0FFFF, 0xE3A01020, 0xEB00FFFF, 0xE3A01000,
0xE59F0014, 0xE5900000, 0xE2800C03, 0xE1C0FFFF,
0xE28DD004, 0xE8BD4000, 0xE12FFF1E, 0x0380FFF4,
0x04808214, 0x0480819C, 0x04808028, 0x0480802A,
#endif
};
// パッチ1コード
static const u32 patch1_code[] = {
0xe3500005,
0x312fff1e,
0xe1d100b0,
0xe3500008,
0x9afffff6,
};
// パッチ3コード
static const u32 patch3_code[] = {
0xE3500005,
0x3A000002,
0xE1D100B0,
0xE3500008,
0x9AFFFFF6,
};
// static variables-----------------------------------------------------
static u32 mbSignBuf[MB_AUTHCODE_SIZE / sizeof(u32)] __attribute__ ((aligned(32)));
// function's description-----------------------------------------------
//----------------------------------------------------------------------
//
// USG-CPU以降におけるARM7コード無線不具合へのパッチ処理
// ※ゲームのロードが完了した後に本関数をコールして下さい。
//
//----------------------------------------------------------------------
// パッチコードの挿入
void DS_InsertWLPatch( void )
{
// SDKバージョンがパッチ対象
if( DSi_IsPatchedSDKVersion() ) {
// patch1, patch3をサーチ
const u32 *patchp = patch1_code;
u32 patch_addr = DSi_SearchBinaryCore( patch1_org, sizeof( patch1_org ) / sizeof( u32 ), PATCH1_OFFSET_IN_PATTERN );
if( patch_addr == 0 ) {
patchp = patch3_code;
patch_addr = DSi_SearchBinaryCore( patch3_org, sizeof( patch3_org ) / sizeof( u32 ), PATCH3_OFFSET_IN_PATTERN );
}
// パッチ対象コードが見つかったら、パッチコードをセット。
if( patch_addr ) {
ROM_Header *dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
if( SYSMi_GetWork()->cloneBootMode == IPL2_CLONE_BOOT_MODE ) { // ※クローンブートかどうかは、ARM9側で事前に調査。
// クローンブートならば、直パッチ
SVC_CpuCopyFast( patchp, patch_addr, WL_PATCH_SIZE );
}else {
// それ以外ならば、RED_RSVにパッチコードを挿入。
// ※パッチアドレスをIPL2の一時格納バッファアドレスから実際のARM7ロードアドレスに変換。
patch_addr = patch_addr + ((u32)dh->s.sub_entry_address - (u32)DSi_GetPatchBaseAddr());
DSi_SetPatchCodeToREDRsvArea( patch_addr, patchp );
dh->s.sub_entry_address = (void *)RED_RSV_PATCH_FUNC_ADDR;
}
}
}
}
// パッチベースアドレスの取得
static void* DSi_GetPatchBaseAddr( void )
{
ROM_Header *dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
void* p = (void*)SYSMi_GetWork()->romRelocateInfo[1].src;
if ( ! p )
{
void* h = dh->s.sub_ram_address;
if ( h >= (void*)SYSM_NTR_ARM7_LOAD_MMEM && h < (void*)(SYSM_NTR_ARM7_LOAD_MMEM_END - WL_PATCH_SIZE) )
{
p = h;
}
}
return p;
}
// パッチ対象のSDKバージョンかどうか判定
static BOOL DSi_IsPatchedSDKVersion( void )
{
u32 addr;
u32 sdk_ver;
// SDKバージョンのサーチ
addr = DSi_SearchBinaryCore( sdk_ver_magic_code, sizeof( sdk_ver_magic_code ) / sizeof( u32 ), SDKVER_OFFSET_IN_PATTERN );
if( addr == 0 ) {
return FALSE;
}
// SDKバージョンの判定
sdk_ver = *(u32 *)addr;
if( sdk_ver >= SDK_VER_30 ) {
if( sdk_ver >= SDK_VER_30_RC3 ) {
return FALSE;
}
}else if( sdk_ver >= SDK_VER_22_RELEASE_PLUS_3 ) {
return FALSE;
}
return TRUE;
}
// バイナリサーチ
static u32 DSi_SearchBinaryCore( const u32 *patp, int pat_word_size, int patch_offset )
{
ROM_Header *dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
u32 *tgtp;
int tgt_word_size;
if( patp == sdk_ver_magic_code ) {
tgtp = dh->s.main_entry_address;
tgt_word_size = (int)( dh->s.main_size
- ( (int)dh->s.main_entry_address - (int)dh->s.main_ram_address ) ) >> 2;
}else {
tgtp = DSi_GetPatchBaseAddr();
tgt_word_size = (int)dh->s.sub_size >> 2;
}
while( tgt_word_size-- ) {
if( *tgtp++ == *patp ) {
const u32 *srcp = patp + 1;
u32 *checkp = tgtp;
int i = pat_word_size - 1;
if( tgt_word_size < i ) {
break;
}
while( i-- ) {
#ifndef _PATCH3_SHORT_
if( ( *srcp & 0x0000ffff ) == 0x0000ffff ) {
*checkp |= 0x0000ffff;
}
#endif
if( *srcp++ != *checkp++ ) break;
}
if( i < 0 ) {
return (u32)( (u32)( tgtp - 1 ) + patch_offset );
}
}
}
return 0;
}
//----------------------------------------------------------------------
//
// パッチコードのセットおよびパッチ処理の実体
//
//----------------------------------------------------------------------
// パッチコードをシステムのRED予約領域にセット
static void DSi_SetPatchCodeToREDRsvArea( u32 patch_addr, const u32 *patchp )
{
#define PATCH_WORD_NUM 5
#define WL_PATCH_CORE_WORD_NUM 10
ROM_Header *dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
u32 *dstp = (u32 *)HW_RED_RESERVED;
u32 *srcp = (u32 *)&DSi_WLPatchCore;
int i;
for( i = 0; i < PATCH_WORD_NUM; i++ ) {
*dstp++ = *patchp++;
}
*dstp++ = patch_addr;
*dstp++ = (u32)dh->s.sub_entry_address;
for( i = 0; i < WL_PATCH_CORE_WORD_NUM; i++ ) {
*dstp++ = *srcp++;
}
}
#include <nitro/code32.h>
#if 0
#define SWI_NO_CPU_SET_FAST (12<<16)
// 他プログラムへ組み込んでテストする時のダミーパッド
asm void WLPatch_Dummy( void )
{
nop // patch code (20bytes)
nop
nop
nop
nop
nop // target addr
nop // ARM7 entry addr
}
#endif
// WLへパッチを当てるコード実体
asm void DSi_WLPatchCore( void )
{
add r0, pc, #-0x24 // R0 <- patch1 code addr
ldr r1, [ pc, #-0x14 ] // R1 <- target addr
mov r2, #( 20 / 4 ) // R2 <- copy size / sizeof(u32)
swi SWI_NO_CPU_SET_FAST // SVC_CpuSetFast
ldr r12, [ pc, #-0x1c ] // ARM7 entry address
mov lr, r12
mov r0, #0
mov r1, r0
mov r2, r0
bx r12
}
#include <nitro/codereset.h>
/*
#define DMA_SRC_INC 0x00000000 // 転送元 インクリメント 選択
#define SVC_CpuCopyFast(srcp, destp, size) \
\
SVC_CpuSetFast( (u8 *)(srcp), \
(u8 *)(destp), \
( DMA_SRC_INC | ( (size)/(32/8) & 0x1fffff ) ) )
*/
// クローンブート判定
void DS_CheckROMCloneBoot( void )
{
ROM_Header *dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
s32 lockCardID;
u8 *buffp = (u8 *)&mbSignBuf;
u32 auth_offset = dh->s.rom_valid_size ? dh->s.rom_valid_size : 0x01000000;
u32 page_offset = auth_offset & 0xFFFFFE00;
if( !DSi_ExistNitroCard() ) {
return;
}
if ((lockCardID = OS_GetLockID()) > 0) {
(void)OS_LockCard( (u16 )lockCardID );
// DC_FlushRange( buffp, sizeof(mbSignBuf) );
// IPL2_ReadCard( (void *)page_offset, buffp, sizeof(mbSignBuf) );
(void)OS_UnLockCard( (u16 )lockCardID );
OS_ReleaseLockID( (u16 )lockCardID );
}
buffp += auth_offset & 0x000001FF;
if( *buffp++ == 'a' && *buffp == 'c' ) {
SYSMi_GetWork()->cloneBootMode = CLONE_BOOT_MODE;
}else {
SYSMi_GetWork()->cloneBootMode = OTHER_BOOT_MODE;
}
}
// NITROカード存在チェック 「リターン 1カード認識 0カードなし」
static int DSi_ExistNitroCard(void)
{
ROM_Header *dh = (ROM_Header *)HW_ROM_HEADER_BUF; // DS互換ROMヘッダ
if((dh->s.nintendo_logo_crc16 == 0xcf56)
&&(dh->s.header_crc16 == SYSMi_GetWork()->cardHeaderCrc16)) {
return TRUE; // NITROカードありNintendoロゴCRC、カードヘッダCRCが正しい場合
// ※Nintendoロゴデータのチェックは、特許の都合上、ロゴ表示ルーチン起動後に行います。
}else {
return FALSE; // NITROカードなし
}
}

View File

@ -58,7 +58,6 @@ void SYSM_SetBackLightBrightness( u8 brightness )
{
( void )SYSM_WriteMcuRegisterAsync( MCU_REG_BL_ADDR, brightness, NULL, NULL );
}
// ( void )SYSMi_SendPXICommand( SYSM_PXI_COMM_BL_BRIGHT, brightness );
LCFG_TSD_SetBacklightBrightness( brightness );

View File

@ -23,6 +23,7 @@ SUBDIRS = \
# ../../../libraries_sysmenu/reloc_info \
# ../../../libraries_sysmenu/boot \
# ../../../libraries_sysmenu/mcu \
# ../../../libraries_sysmenu/ds \
# $(TWLSDK_ROOT)/build/libraries/reboot \
#----------------------------------------------------------------------------

32
include/sysmenu/ds.h Normal file
View File

@ -0,0 +1,32 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - DS
File: ds.h
Copyright 2008 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.
$Date:: #$
$Rev: $
$Author: $
*---------------------------------------------------------------------------*/
#ifndef SYSM_DS_H_
#define SYSM_DS_H_
#include <sysmenu/ds/common/ds.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_DS_H_ */
#endif

View File

@ -0,0 +1,43 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - DS - include
File: dsemu.h
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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#ifndef FIRM_DS_COMMON_DS_H_
#define FIRM_DS_COMMON_DS_H_
#include <sysmenu/memorymap.h>
#ifdef __cplusplus
extern "C" {
#endif
#define IPL2_CLONE_BOOT_MODE 1
#define IPL2_OTHER_BOOT_MODE 2
void DS_CheckROMCloneBoot( void );
void DS_InsertWLPatch( void );
void DSi_SetEntry( void* entry );
void DSi_SetComponentSize( size_t size );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_DS_COMMON_DS_H_ */
#endif

View File

@ -115,9 +115,9 @@ typedef struct SYSM_work {
u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16ARM7側ライブラリでダイレクトに書き換わる側
OSLockWord lockCardRsc; // カードリソース排他制御用
OSLockWord lockHotSW; // カードリソース排他制御用
int cloneBootMode;
u32 nCardID; // カードID
u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする)
u8 cloneBootMode;
LauncherParam launcherParam;
ISD_RomEmuInfo romEmuInfo;