DSのマイク不具合タイトルリストに基づきスピーカー音量を小さくする処理を追加。(音量は暫定)

CDC_GoDsModeの前にCDC_Initを実行してパラメータを初期化するように変更(IIRなどのパラメータが汚れている可能性があるため)

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1881 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-07-14 12:15:56 +00:00
parent 47fb758e6a
commit 1fd070e985
4 changed files with 99 additions and 8 deletions

View File

@ -309,16 +309,19 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget*
// I2S停止MCLKは動作継続
reg_SND_SMX_CNT &= ~REG_SND_SMX_CNT_E_MASK;
// CODEC再初期化
CDC_Init();
// CODEC-DSモードへの遷移
if ( isNtrMode || th->s.exFlags.codec_mode == OS_CODECMODE_NITRO )
{
// CODEC-DSモード
// マイク不具合DSタイトルは音量を絞る
if ( *target == REBOOT_TARGET_DS_APP )
{
DS_CheckSpeakerVolume( dh );
}
CDC_GoDsMode();
}
else
{
// 再初期化CODEC-TWLモード
CDC_Init();
}
// I2S再開
// DSサウンドDSP = 8:0

View File

@ -26,12 +26,14 @@ TWL_PROC = ARM7
#----------------------------------------------------------------------------
SRCDIR = ../common/src
SRCDIR = ./src \
../common/src
INCDIR = ../common/include \
$(ROOT)/build/libraries/mb/common/include \
SRCS = ds_wlpatch.c \
ds_volume.c
TARGET_LIB = libds_sp$(TWL_LIBSUFFIX).a

View File

@ -0,0 +1,86 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: ds_volume.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 <twl/cdc.h>
#include <sysmenu.h>
#include <sysmenu/ds.h>
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
typedef struct _DsSpecialSpeakerVolumeTitle
{
u8 gamecode[6]; // NULL終端兼アライメント用に2バイト大きいサイズを与える
u8 rom_version;
u8 volume;
} DsSpecialSpeakerVolumeTitle;
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
static DsSpecialSpeakerVolumeTitle sList[] 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 }
};
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
void DS_CheckSpeakerVolume( void* romHeaderNTR )
{
ROM_Header* dh = romHeaderNTR;
int i;
int limit = sizeof(sList)/sizeof(sList[0]);
for (i=0;i<limit;i++)
{
if (*(u32 *)sList[i].gamecode == *(u32 *)dh->s.game_code &&
sList[i].rom_version == dh->s.rom_version)
{
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;
}
}
}

View File

@ -29,7 +29,7 @@ extern "C" {
#define DS_WLPATCH_COPYCODE_SIZE (10*4)
void DS_InsertWLPatch( void* romHeaderNTR );
void DS_CheckSpeakerVolume( void* romHeaderNTR );
#ifdef __cplusplus
} /* extern "C" */