From c11de71a9fedd059fad673e5258850d5f472a526 Mon Sep 17 00:00:00 2001 From: kamikawa Date: Wed, 23 Jul 2008 13:38:28 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=9E=E3=82=A4=E3=82=AF=E5=85=A5=E5=8A=9B?= =?UTF-8?q?=E9=96=A2=E9=80=A3=E3=81=A7=E4=B8=8D=E5=85=B7=E5=90=88=E3=81=AE?= =?UTF-8?q?=E7=99=BA=E7=94=9F=E3=81=99=E3=82=8BDS=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E3=83=88=E3=83=AB=E3=81=AE=E3=81=9F=E3=82=81=E3=81=AB=E3=82=B9?= =?UTF-8?q?=E3=83=94=E3=83=BC=E3=82=AB=E9=9F=B3=E9=87=8F=E3=82=92=E4=B8=8B?= =?UTF-8?q?=E3=81=92=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=80=82=EF=BC=88=E5=86=8D=E8=AA=BF=E6=95=B4=EF=BC=89?= 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@1967 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../libraries_sysmenu/boot/ARM7/src/bootAPI.c | 4 +- .../libraries_sysmenu/ds/ARM7/src/ds_volume.c | 220 ++++++++++++++---- include/sysmenu/ds/common/ds.h | 2 +- 3 files changed, 183 insertions(+), 43 deletions(-) diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index 8eb60b72..07c0f94b 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -310,10 +310,10 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget* // CODEC-DSモードへの遷移 if ( isNtrMode || th->s.exFlags.codec_mode == OS_CODECMODE_NITRO ) { - // マイク不具合DSタイトルは音量を絞る + // DSタイトルのスピーカ設定を行う if ( *target == REBOOT_TARGET_DS_APP ) { - DS_CheckSpeakerVolume( dh ); + DS_SetSpeakerVolume( dh ); } CDC_GoDsMode(); } diff --git a/build/libraries_sysmenu/ds/ARM7/src/ds_volume.c b/build/libraries_sysmenu/ds/ARM7/src/ds_volume.c index 7f03806c..5272ba3a 100644 --- a/build/libraries_sysmenu/ds/ARM7/src/ds_volume.c +++ b/build/libraries_sysmenu/ds/ARM7/src/ds_volume.c @@ -20,67 +20,207 @@ #include #include +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ + +#define NUM_OF_MIC_PROBLEM_TITLE 128 + /*---------------------------------------------------------------------------* 型宣言 *---------------------------------------------------------------------------*/ -typedef struct _DsSpecialSpeakerVolumeTitle +typedef struct _DsMicProblemTitle { - u8 gamecode[6]; // NULL終端兼アライメント用に2バイト大きいサイズを与える - u8 rom_version; - u8 volume; -} DsSpecialSpeakerVolumeTitle; + u8 gamecode[4]; // NULL終端兼アライメント用に1バイト大きいサイズを与える + +} DsMicProblemTitle; /*---------------------------------------------------------------------------* 静的変数定義 *---------------------------------------------------------------------------*/ -static DsSpecialSpeakerVolumeTitle sList[] ATTRIBUTE_ALIGN(32) = +static DsMicProblemTitle sList[NUM_OF_MIC_PROBLEM_TITLE] ATTRIBUTE_ALIGN(32) = { - { "AKEJ", 0, 0x40 }, - { "ABXJ", 0, 0x40 }, - { "ALHJ", 0, 0x40 }, - { "YFSJ", 0, 0x40 }, - { "AY8E", 0, 0x40 }, - { "YONJ", 0, 0x40 }, - { "ACCE", 0, 0x40 }, - { "AN9E", 0, 0x40 }, - { "A5HE", 0, 0x40 }, - { "A5IE", 0, 0x40 }, - { "AMHE", 0, 0x40 }, - { "A3TX", 0, 0x40 }, - { "YCQE", 0, 0x40 }, - { "YBOE", 0, 0x40 }, - { "ADAE", 5, 0x40 }, - { "APAE", 5, 0x40 }, - { "ACZY", 0, 0x40 }, - { "APYJ", 0, 0x40 }, - { "AY7P", 0, 0x40 }, - { "AWHP", 0, 0x40 }, - { "AWHE", 0, 0x40 }, - { "AOIJ", 0, 0x40 }, - { "AOIJ", 1, 0x40 }, - { "YO9J", 0, 0x40 }, - { "YYKJ", 0, 0x40 } + "ABX", + "YO9", + "ALH", + "ACC", + "YCQ", + "YYK", + "AZW", + "AKA", + "AN9", + "AKE", + "YFS", + "YG8", + "AY7", + "YON", + "A5H", + "A5I", + "AMH", + "A3T", + "YBO", + "ADA", + "APA", + "CPU", + "APY", + "AWH", + "AXB", + + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + "000", + + "000", + "000", + "000" }; /*---------------------------------------------------------------------------* グローバル関数定義 *---------------------------------------------------------------------------*/ -void DS_CheckSpeakerVolume( void* romHeaderNTR ) +/*---------------------------------------------------------------------------* + Name: DS_SetSpeakerVolume + + Description: DSタイトルのスピーカ音量を設定します。 + マイク入力関係で問題の発生するタイトルは音量をNTRレベルに + 抑えます。 + + Arguments: romHeaderNTR: DSタイトルのROMヘッダ + + Returns: None + *---------------------------------------------------------------------------*/ +void DS_SetSpeakerVolume( void* romHeaderNTR ) { - ROM_Header* dh = romHeaderNTR; + ROM_Header* dh = romHeaderNTR; + u32 arg_gamecode = *(u32 *)dh->s.game_code & 0x00ffffff; + BOOL hit; int i; - int limit = sizeof(sList)/sizeof(sList[0]); - for (i=0;is.game_code && - sList[i].rom_version == dh->s.rom_version) + // リージョンに関係なく比較する + u32 list_gamecode = *(u32 *)sList[i].gamecode & 0x00ffffff; + if ( list_gamecode == arg_gamecode) { - CDC_WriteSpiRegisterEx( 1, REG_CDC1_SP_ANGVOL_L_ADDR, (u8)(CDC1_ANGVOL_E | sList[i].volume) ); - CDC_WriteSpiRegisterEx( 1, REG_CDC1_SP_ANGVOL_R_ADDR, (u8)(CDC1_ANGVOL_E | sList[i].volume) ); - break; + hit = TRUE; } } + + if (hit) + { + // NTR並のSP音量(マイク入力問題のあるDSタイトル) + CDC_WriteSpiRegisterEx( 1, REG_CDC1_SP_ANGVOL_L_ADDR, (u8)(CDC1_ANGVOL_E | CDC1_ANGVOL_GAIN_NTR_SP) ); + CDC_WriteSpiRegisterEx( 1, REG_CDC1_SP_ANGVOL_R_ADDR, (u8)(CDC1_ANGVOL_E | CDC1_ANGVOL_GAIN_NTR_SP) ); + } + else + { + // NTRよりもやや大きいSP音量 + CDC_WriteSpiRegisterEx( 1, REG_CDC1_SP_ANGVOL_L_ADDR, (u8)(CDC1_ANGVOL_E | CDC1_ANGVOL_GAIN_MAX_SP) ); + CDC_WriteSpiRegisterEx( 1, REG_CDC1_SP_ANGVOL_R_ADDR, (u8)(CDC1_ANGVOL_E | CDC1_ANGVOL_GAIN_MAX_SP) ); + } } + diff --git a/include/sysmenu/ds/common/ds.h b/include/sysmenu/ds/common/ds.h index 9081e3ae..5d4dd96c 100644 --- a/include/sysmenu/ds/common/ds.h +++ b/include/sysmenu/ds/common/ds.h @@ -29,7 +29,7 @@ extern "C" { #define DS_WLPATCH_COPYCODE_SIZE (10*4) void DS_InsertWLPatch( void* romHeaderNTR ); -void DS_CheckSpeakerVolume( void* romHeaderNTR ); +void DS_SetSpeakerVolume( void* romHeaderNTR ); #ifdef __cplusplus } /* extern "C" */