From aa112334d7639807091f05b420d80f1c7a2e3482 Mon Sep 17 00:00:00 2001 From: yosiokat Date: Wed, 14 Nov 2007 03:11:04 +0000 Subject: [PATCH] =?UTF-8?q?SYSM=5Fwork=E3=81=AE=E4=B8=8D=E8=A6=81=E8=A6=81?= =?UTF-8?q?=E7=B4=A0=E3=82=92=E6=95=B4=E7=90=86=E4=B8=AD=E3=80=82?= 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@169 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/sysmenu_lib.c | 6 +- build/systemMenu_RED/Launcher/ARM9/src/main.c | 21 +-- .../MachineSettings/ARM9/src/calibrationTP.c | 2 +- .../MachineSettings/ARM9/src/selectLanguage.c | 4 +- .../MachineSettings/ARM9/src/setRTC.c | 2 +- include/sysmenu/sysmenu_work.h | 143 ++++-------------- 6 files changed, 44 insertions(+), 134 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 1a23f2fc..5cff0423 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -543,7 +543,7 @@ static void SYSMi_WriteAdjustRTC( void ) #ifndef __IS_DEBUGGER_BUILD // デバッガ用ビルド時は補正しない。 RTCRawAdjust raw; raw.adjust = 0; -// raw.adjust = GetTSD()->rtcClockAdjust; // ncd_invalid時にはrtcClockAdjustは +// raw.adjust = GetTSD()->rtcClockAdjust; // isValidTSD時にはrtcClockAdjustは // 0クリアされているため補正機能は使用されない ( void )RTCi_SetRegAdjust( &raw ); #endif /* __IS_DEBUGGER_BUILD */ @@ -632,9 +632,9 @@ static void SYSMi_CheckCardCloneBoot( void ) buffp += total_rom_size & 0x000001FF; if( *buffp++ == 'a' && *buffp == 'c' ) { - GetSYSMWork()->clone_boot_mode = CLONE_BOOT_MODE; + GetSYSMWork()->CloneBootMode = cloneBootMode; }else { - GetSYSMWork()->clone_boot_mode = OTHER_BOOT_MODE; + GetSYSMWork()->CloneBootMode = OTHER_BOOT_MODE; } } diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index 9ad50602..9054df36 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -54,6 +54,10 @@ void TwlMain( void ) TitleProperty *pBootTitle = NULL; TitleProperty pTitleList[ LAUNCHER_TITLE_LIST_NUM ]; + // システムメニュー初期化---------- +// SYSM_Init( Alloc, Free ); // OS_Initの前でコール。 + + // OS初期化------------------------ OS_Init(); (void)OS_EnableIrq(); @@ -61,10 +65,9 @@ void TwlMain( void ) FS_Init( FS_DMA_NOT_USE ); GX_Init(); + TP_Init(); + RTC_Init(); - // プロテクションユニット領域変更 - OS_SetProtectionRegion( 2, 0x02280000, 512KB ); - // 割り込み許可-------------------- (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); (void)OS_EnableIrqMask(OS_IE_V_BLANK); @@ -74,8 +77,9 @@ void TwlMain( void ) InitAllocator( &g_allocator ); CMN_InitFileSystem( &g_allocator ); - // システムメニュー初期化---------- - SYSM_Init( Alloc, Free ); // OS_Initの後でコール。 + + SYSM_Init( Alloc, Free ); // OS_Initの前でコール。 +// SYSM_ReadParameters(); // リセットパラメータの取得-------- if( SYSM_GetResetParam()->flags.isLogoSkip ) { @@ -176,6 +180,7 @@ void Free( void *pBuffer ) // ブート状態を確認し、ロゴ表示有無を判断する------- static BOOL CheckBootStatus(void) { +#if 0 BOOL boot_decision = FALSE; // 「ブート内容未定」に BOOL other_shortcut_off = FALSE; @@ -183,10 +188,6 @@ static BOOL CheckBootStatus(void) // デバッグ用コンパイルスイッチによる挙動 //----------------------------------------------------- { -#ifdef __FORCE_BOOT_BMENU // ※ブートメニュー強制起動スイッチがONか? - SYSM_SetBootFlag( BFLG_BOOT_BMENU ); - return TRUE; // 「ブート内容決定」でリターン -#endif /* __FORCE_BOOT_BMENU */ #ifdef __LOGO_SKIP // ※デバッグ用ロゴスキップ SetLogoEnable( FALSE ); // ロゴ表示スキップ @@ -251,7 +252,7 @@ static BOOL CheckBootStatus(void) } } #endif /* __SYSM_DEBUG */ - +#endif return FALSE; // 「ブート内容未定」でリターン } diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c b/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c index 00919cf7..392c6cb8 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/calibrationTP.c @@ -408,7 +408,7 @@ int TP_CalibrationMain( void ) } if( ( pad.trg & PAD_BUTTON_A ) || tp_ok ) { - GetSYSMWork()->ncd_invalid = 0; + GetSYSMWork()->isValidTSD = 0; s_pTPC->calibTemp.data.raw_x1 = s_pTPC->sample[0].x; s_pTPC->calibTemp.data.raw_y1 = s_pTPC->sample[0].y; diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c b/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c index 2b564e22..f90ccec7 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c @@ -80,7 +80,7 @@ void SelectLanguageInit( void ) PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Select language." ); } - if( ( GetSYSMWork()->ncd_invalid ) || + if( ( GetSYSMWork()->isValidTSD ) || ( TSD_GetLanguage() >= TWL_LANG_CODE_MAX ) ) { s_langCode = TWL_LANG_ENGLISH; }else { @@ -128,7 +128,7 @@ int SelectLanguageMain( void ) } if( ( pad.trg & PAD_BUTTON_A ) || tp_select ) { // メニュー項目への分岐 - GetSYSMWork()->ncd_invalid = 0; + GetSYSMWork()->isValidTSD = 0; TSD_SetLanguage( s_langCode ); TSD_SetFlagLanguage( TRUE ); // 言語入力フラグを立てる diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c b/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c index 05463abe..8899f3d1 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c @@ -380,7 +380,7 @@ static int InputRtcDateTimeMain( void ) TSD_SetRTCOffset( SYSM_CalcRTCOffsetAndSetDateTime( &date, &s_pWork->dtp.Time ) ); } - GetSYSMWork()->ncd_invalid = 0; + GetSYSMWork()->isValidTSD = 0; TSD_SetFlagDateTime( TRUE ); // RTC入力フラグを立てる。 // :::::::::::::::::::::::::::::::::::::::::::::: // TWL設定データファイルへの書き込み diff --git a/include/sysmenu/sysmenu_work.h b/include/sysmenu/sysmenu_work.h index 579e5817..bbd38f9c 100644 --- a/include/sysmenu/sysmenu_work.h +++ b/include/sysmenu/sysmenu_work.h @@ -36,99 +36,20 @@ extern "C" { // define data ------------------------------------ -#define SYSMENU_VER 0x071029 // SystemMenuバージョン +#define SYSMENU_VER 0x071113 // SystemMenuバージョン -#define PXI_FIFO_TAG_SYSM PXI_FIFO_TAG_USER_1 // SystemMenu用のFIFOタグ - -#define PAD_PRODUCTION_NITRO_SHORTCUT ( PAD_BUTTON_A | PAD_BUTTON_B \ - | PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R ) -#define PAD_PRODUCTION_AGB_SHORTCUT ( PAD_BUTTON_A | PAD_BUTTON_B \ - | PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_L ) - // 量産工程で使用するNITRO初回起動設定をキャンセルするショートカットキー +#define PAD_PRODUCTION_SKIP_INITIAL_SHORTCUT ( PAD_BUTTON_A | PAD_BUTTON_B \ + | PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R ) + // 量産工程で使用する初回起動設定をキャンセルするショートカットキー // bootFlagの値 -#define BFLG_EXIST_AGB_CARTRIDGE 0x00000001 -#define BFLG_EXIST_NITRO_CARD 0x00000002 -#define BFLG_ILLEGAL_NITRO_CARD 0x00000004 -#define BFLG_ILLEGAL_BMENU 0x00000008 -#define BFLG_BOOT_AGB 0x00000010 -#define BFLG_BOOT_NITRO 0x00000020 -#define BFLG_BOOT_BMENU 0x00000040 -#define BFLG_BOOT_PICT_CHAT 0x00000080 -#define BFLG_BOOT_WIRELESS_BOOT 0x00000100 -#define BFLG_LOAD_CARD_COMPLETED 0x00000200 -#define BFLG_LOAD_BMENU_COMPLETED 0x00000400 -#define BFLG_LOAD_SYSM_DATA_COMPLETED 0x00000800 -#define BFLG_REQ_UNCOMP_BMENU 0x00001000 -#define BFLG_REQ_UNCOMP_SYSM_DATA 0x00002000 -#define BFLG_ARM7_INIT_COMPLETED 0x00004000 -#define BFLG_READ_NCD_COMPLETED 0x00008000 -#define BFLG_SHORTCUT_CHECK_COMPLETED 0x00010000 -#define BFLG_HOT_START 0x00020000 -#define BFLG_BOOT_1SEG 0x00040000 -#define BFLG_PERMIT_TO_BOOT 0x08000000 -#define BFLG_SYSM_DATA_ENABLE 0x10000000 -#define BFLG_CARD_CHECKED 0x20000000 -#define BFLG_WM_INITIALIZED 0x40000000 -#define BFLG_BOOT_DECIDED 0x80000000 +#define BFLG_EXIST_CARD 0x00000001 -#define CLONE_BOOT_MODE 1 + +#define cloneBootMode 1 #define OTHER_BOOT_MODE 2 - // mainp_stateの値 -typedef enum MainpState { - MAINP_STATE_INIT = 1, - MAINP_STATE_START, - MAINP_STATE_WAIT_BOOT_DECISION, - MAINP_STATE_WAIT_NITRO_GAME_LOAD, - MAINP_STATE_WAIT_READY_CHANGE_AGB, - MAINP_STATE_WAIT_BMENU_LOAD, - MAINP_STATE_WAIT_BOOT_REQ, - MAINP_STATE_WAIT_START_NITRO_GAME_REQ, - MAINP_STATE_BOOT_SELECTED_TARGET, - MAINP_STATE_BOOT_AGB_REQ -}MainpState; - - - // subp_stateの値 -typedef enum SubpState { - SUBP_STATE_INIT = 1, - SUBP_STATE_STAY, - SUBP_STATE_CLEAR_MAIN_MEMORY, - SUBP_STATE_BOOT_NITRO_GAME_INIT, - SUBP_STATE_LOAD_NITRO_GAME, - SUBP_STATE_LOAD_BMENU, - SUBP_STATE_BOOT_NITRO_GAME, - SUBP_STATE_WAIT_START_BMENU_REQ, - SUBP_STATE_START_BMENU, - SUBP_STATE_BOOT_AGB, - SUBP_STATE_BOOT_AGB_ACK, - SUBP_STATE_BOOT_FAILED, - SUBP_STATE_MB_BOOT, - SUBP_STATE_TERMINATE_WM -}SubpState; - - - // SYSMi_SendMessageToARM7(int msg)でARM9からARM7に通知するメッセージ - // ARM7からのメッセージも含む -typedef enum SYSMMsg { - MSG_INVALID = 0, // 無効データ。 - - MSG_UNCOMP_SYSM_DATA, // ARM9にSYSM_dataを圧縮展開するよう要求。 - MSG_UNCOMP_BMENU, // ARM9にbmenuを圧縮展開するよう要求。 - - MSG_BOOT_TYPE_NITRO, // ARM7に「NITROゲーム起動」を通知。 - MSG_BOOT_TYPE_AGB, // ARM7に「AGB起動」を通知。 -#ifndef __DS_CHAT_OFF - MSG_BOOT_TYPE_PICT_CHAT, // ARM7に「絵チャット起動」を通知。 -#endif - MSG_BOOT_TYPE_WIRELESS_BOOT, // ARM7に「無線マルチブート起動」を通知。 - MSG_BOOT_TYPE_BMENU, // ARM7に「ブートメニュー起動」を通知。 - MSG_START_BMENU, // ARM7に「ブートメニュー開始」を通知。 - MSG_TERMINATE_WM // ARM7に「WM終了」を通知。 -}SYSMMsg; - //---------------------------------------------------------------------- // データ型定義 @@ -147,51 +68,39 @@ typedef struct RtcDateTime { }RtcDateTime; // SYSM共有ワーク構造体 -typedef struct SYSM_work{ - u32 card_arm7_ram_adr; // NITROカードARM7初期ブートコードのRAMロードアドレス - int ncd_invalid; // NITRO設定データ無効フラグ - u32 ncd_rom_adr; // NITRO設定データのROMアドレス - u32 bm_arm7_ram_adr; // ブートメニューARM9RAMアドレス - u32 bm_arm7_comp_adr; // ブートメニューARM7の圧縮バイナリRAMアドレス - u16 sysm_data_crc16; - u16 bm_crc16; - u8 sysm_type; - u8 pmic_type; // デバッガのみで使用。 - u8 clone_boot_mode; +typedef struct SYSM_work { + BOOL isValidTSD; // NITRO設定データ無効フラグ + BOOL isOnDebugger; // デバッガ動作か? + BOOL isExistCard; // 有効なNTR/TWLカードが存在するか? + u16 cardHeaderCrc16; // システムメニューで計算したROMヘッダCRC16 + u8 CloneBootMode; - - u8 rtcStatus; - u16 cardHeaderCrc16; - u16 rsv; - BOOL isOnDebugger; + // NTR-IPL2のレガシー 最終的には消すと思う + u32 nCardID; BOOL enableCardNormalOnly; - u32 nCardID; // NORMALカードID(LoadCardHeader() で取得) - - volatile MainpState mainp_state; // ARM9プログラムステート - volatile SubpState subp_state; // ARM7プログラムステート - LockVariable boot_flag; // ブート状態フラグ(SYSM_GetBootFlag(),SetBootFlag()でアクセスを行います。) - RtcDateTime rtc[2]; // RTC時間データ([0]:起動時の値、[1]:ゲームブート直前の値) -// u32 mb_flag; -// u32 mb_ggid; + u8 rtcStatus; }SYSM_work; //---------------------------------------------------------------------- // SYSM共有ワーク領域のアドレス獲得 //---------------------------------------------------------------------- - +#if 1 #define SYSM_GetResetParam() ( (ResetParam *)HW_RED_RESERVED ) #define GetSYSMWork() ( (SYSM_work *)( HW_RED_RESERVED + sizeof(ResetParam) ) ) +#else +// SYSMリセットパラメータの取得 +#define SYSM_GetResetParam() ( (ResetParam *)0x02000100 ) -//・SYSM共有ワーク領域のアドレスを獲得します。 +// SYSM共有ワークの取得 +#define SYSM_GetWork() ( (SYSM_work *)HW_RED_RESERVED ) +#endif + +// カードROMヘッダワークの取得 +#define SYSM_GetCardRomHeader() ( (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF ) -//---------------------------------------------------------------------- -// bootFlagのリード -//---------------------------------------------------------------------- -#define SYSM_GetBootFlag() ( *(vu32 *)&GetSYSMWork()->boot_flag.value ) -//・bootFlag値を獲得します。 inline void SYSM_SetBootFlag( u32 flag ) {