diff --git a/build/buildtools/commondefs.sysmenu b/build/buildtools/commondefs.sysmenu index d074838a..83eb4dba 100644 --- a/build/buildtools/commondefs.sysmenu +++ b/build/buildtools/commondefs.sysmenu @@ -62,12 +62,14 @@ SYSMENU_LIBS ?= \ libsettings$(TWL_LIBSUFFIX).a \ libmbloader$(TWL_LIBSUFFIX).a \ libacsign$(TWL_LIBSUFFIX).a \ + libboot$(TWL_LIBSUFFIX).a \ # libcardboot$(TWL_LIBSUFFIX).a else # ($(CODEGEN_PROC),ARM7) SYSMENU_LIBS ?= \ libmbloader_sp$(TWL_LIBSUFFIX).a \ + libboot_sp$(TWL_LIBSUFFIX).a \ libcardboot_sp$(TWL_LIBSUFFIX).a endif diff --git a/build/components/hyena.TWL/src/main.c b/build/components/hyena.TWL/src/main.c index 1edc6e03..c6734d0a 100644 --- a/build/components/hyena.TWL/src/main.c +++ b/build/components/hyena.TWL/src/main.c @@ -34,11 +34,7 @@ #include #include #include -#include -#include - -#include -#include +#include #include "nvram_sp.h" /*---------------------------------------------------------------------------* diff --git a/build/libraries_sysmenu/boot/ARM7/src/boot.c b/build/libraries_sysmenu/boot/ARM7/src/boot.c index e055c441..a8b9259c 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/boot.c +++ b/build/libraries_sysmenu/boot/ARM7/src/boot.c @@ -16,8 +16,7 @@ *---------------------------------------------------------------------------*/ #include -#include -#include +#include //#include "loader.h" //#include "mb_child.h" diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index a663c597..f71fc659 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -16,13 +16,13 @@ *---------------------------------------------------------------------------*/ #include -#include +#include #include "reboot.h" -//#include "loader.h" -//#include "mb_child.h" + // define data------------------------------------------------------- #define MAINP_SEND_IF 0x2000 +#define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) ) // extern data------------------------------------------------------- @@ -50,20 +50,17 @@ BOOL BOOT_WaitStart( void ) SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM7_MMEM_ADDR_END - SYSM_OWN_ARM7_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM9_MMEM_ADDR_END - SYSM_OWN_ARM9_MMEM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR, - -// HW_PRV_WRAM_END - 0x600, 0x600, + SYSM_OWN_ARM7_WRAM_ADDR, SYSM_OWN_ARM7_WRAM_ADDR_END - SYSM_OWN_ARM7_WRAM_ADDR, #ifdef ISDBG_MB_CHILD_ HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600), HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20), #endif - //SYSM_BOOTCODE_ARM7_ADDR, ClearMemory - SYSM_BOOTCODE_ARM7_ADDR, -// 0x02fff000, 0x800, -// 0xda0, 0x60, -// 0xf80, 0x80, - + HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED, + HW_ARENA_INFO_BUF, HW_ROM_HEADER_BUF - HW_ARENA_INFO_BUF, + HW_PXI_SIGNAL_PARAM_ARM9, HW_MAIN_MEM_SYSTEM_END - HW_PXI_SIGNAL_PARAM_ARM9, NULL }; - + (void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。 (void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。 /* @@ -74,11 +71,11 @@ BOOL BOOT_WaitStart( void ) InsertWLPatch(); } */ + BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。 reg_MI_MBK9 = 0; // 全WRAMのロック解除 reg_PXI_MAINPINTF = MAINP_SEND_IF | 0x0100; // ARM9に対してブートするようIRQで要求+ARM7のステートを1にする。 - // BOOT_Core(); // never return - + // SDK共通リブート OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list ); } @@ -89,11 +86,16 @@ static void BOOTi_ClearREG_RAM( void ) { int i ; -// SVC_CpuClearFast(0x0000, IPL2_PRV_WRAM_ARENA_LO, RETURN_FROM_MAIN_ARM7_FUNCP - IPL2_PRV_WRAM_ARENA_LO ); - // アリーナのクリア for( i = 0; i <= MI_DMA_MAX_NUM; i++ ) { // DMAの停止 MI_StopDma( (u16)i ); } + +#ifdef DEBUG_USED_CARD_SLOT_B_ + reg_MI_MC_SWP = 0x80; // カードスロットのスワップ +#endif + *(u32 *)HW_BOOT_CHECK_INFO_BUF = SYSMi_GetWork()->nCardID; // カード抜けチェックバッファにカードIDをセット + *(u32 *)HW_RED_RESERVED = SYSMi_GetWork()->nCardID; + // レジスタのクリア SVC_CpuClearFast( 0x0000, (void*)(HW_REG_BASE + 0x0b0), (0x13c - 0x0b0) ); // DMA0SAD 〜 RCNT1 diff --git a/build/libraries_sysmenu/boot/ARM9/src/boot.c b/build/libraries_sysmenu/boot/ARM9/src/boot.c index 5e33d6fb..f436be6a 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/boot.c +++ b/build/libraries_sysmenu/boot/ARM9/src/boot.c @@ -16,7 +16,7 @@ *---------------------------------------------------------------------------*/ #include -#include +#include //#include //#include "IPL2_work.h" //#include "define.h" diff --git a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c index f12709da..75b9ba66 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c @@ -17,12 +17,9 @@ #include #include -#include +#include #include #include "reboot.h" -//#include -//#include "IPL2_work.h" -//#include "define.h" // define data------------------------------------------------------- @@ -38,8 +35,6 @@ static void BOOTi_ClearREG_RAM( void ); static void BOOTi_StartBOOT( void ); -static void ResetCP15( void ); - // global variables-------------------------------------------------- // static variables-------------------------------------------------- @@ -102,12 +97,7 @@ void BOOT_Ready( void ) reg_GX_VRAMCNT_D = pWRAMREGS->main_vrambnk_d; reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01; } - - //BOOT_Core(); // never return - - // プロテクションユニットの初期化 - ResetCP15(); - + // SDK共通リブート OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list ); } @@ -143,32 +133,3 @@ static void BOOTi_ClearREG_RAM( void ) // クリアしていないレジスタは、VCOUNT, PIFCNT, MC-, EXMEMCNT, IME, RBKCNT1, PAUSE, POWLCDCNT, 全3D系。 } -//----------------------------------------------------------------------- -// システム制御コプロセッサ リセット -//----------------------------------------------------------------------- -#include -asm static void ResetCP15( void ) -{ - // プロテクションユニット&キャッシュ&ITCM無効。DTCMは有効(スタックをクリアするため) - ldr r0, = C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET - mcr p15, 0, r0, c1, c0, 0 - - // ITCMの割り当てを解除 - mov r0, #0 - mcr p15, 0, r0, c6, c5, 0 - - // DTCMの割り当てを解除 -// mov r0,#0 -// mcr p15, 0, r0, c9, c1, 0 - - // キャッシュ無効化 - mov r0, #0 - mcr p15, 0, r0, c7, c5, 0 // 命令キャッシュ - mcr p15, 0, r0, c7, c6, 0 // データキャッシュ - - // ライトバッファ エンプティ待ち - mcr p15, 0, r0, c7, c10, 4 - - bx lr -} -#include diff --git a/build/libraries_sysmenu/card/ARM7/src/Card.c b/build/libraries_sysmenu/card/ARM7/src/Card.c index f34ec98e..d5e7d9c9 100644 --- a/build/libraries_sysmenu/card/ARM7/src/Card.c +++ b/build/libraries_sysmenu/card/ARM7/src/Card.c @@ -267,7 +267,9 @@ BOOL Card_Boot(void) // ※最終的にはカードIDをHW_BOOT_CHECK_INFO_BUFに入れないと、アプリ起動後のカード抜け処理が上手く動作しないので注意。 // 今はスロットBを使用しているので、ノーケアでOK. // *(u32 *)HW_BOOT_CHECK_INFO_BUF = s_cbData.id_gam; - +// *(u32 *)HW_RED_RESERVED = s_cbData.id_gam; + SYSMi_GetWork()->nCardID = s_cbData.id_gam; + OS_TPrintf("-----------------------------------------------\n\n"); } else{ diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 2e7694ba..6d6165b7 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -17,7 +17,6 @@ #include #include -#include #include "sysmenu_define.h" #include "spi.h" @@ -63,7 +62,71 @@ static TWLBannerFile s_bannerBuf[ LAUNCHER_TITLE_LIST_NUM ] ATTRIBUTE_ALIGN(32); // const data------------------------------------------------------------------ +#if 0 +typedef enum RomSegmentName { + ROM_HEADER = 0, + ARM9_STATIC, + ARM7_STATIC, + ARM9_LTD_STATIC, + ARM7_LTD_STATIC +}RomSegmentName; +typedef struct RomSegmentRange { + u32 start; + u32 end; +}RomSegmentRange; + +typedef struct RomReloadInfo { + void *pSrc; + void *pDst; + u32 length; + BOOL revCopy; +}RomReloadInfo; + +static RomSegmentRange romSegmentRange[] = { + { HW_TWL_ROM_HEADER_BUF, HW_TWL_ROM_HEADER_BUF_END }, + { SYSM_NTR_ARM9_LOAD_MMEM, SYSM_NTR_ARM9_LOAD_MMEM_END }, + { SYSM_NTR_ARM7_LOAD_MMEM, SYSM_NTR_ARM7_LOAD_MMEM_END }, + { SYSM_TWL_ARM9_LTD_LOAD_MMEM, SYSM_TWL_ARM9_LTD_LOAD_MMEM_END }, + { SYSM_TWL_ARM7_LTD_LOAD_MMEM, SYSM_TWL_ARM7_LTD_LOAD_MMEM_END }, +}; + + +static RomReloadInfo romReloadInfo[] = { + +}; + +static BOOL SYSMi_OutOfRangeRomSegment( u32 start, u32 length, RomSegmentRange *pRange, ReloadInfo *pReload ) +{ + BOOL isReload = FALSE; + u32 end = (u32)start + length; + + if( start < pRange->start ) { + if( end <= pRange->start ) { + isReload = TRUE; + pReload->revCopy = FALSE; + }else { + isReload = TRUE; + pReload->revCopy = TRUE; + } + }else if( start <= pRange->end ) { + if( end <= pRange->end ) { + if(u32)( pRange->start + length ) ) + }else if( end > pRange->end ) { + isReload = TRUE; + pReload->revCopy = FALSE; + } + }else if( start > pRange->end ) { + isReload = TRUE; + } + + if( isReload ) { + pReload->pDst = (void *)start; + pReload->pSrc = (void *)pRange->start; + pReload->length = length; + } +} +#endif // ============================================================================ // diff --git a/build/systemMenu_RED/Launcher/ARM9/Makefile b/build/systemMenu_RED/Launcher/ARM9/Makefile index a0aab21f..4264caf7 100644 --- a/build/systemMenu_RED/Launcher/ARM9/Makefile +++ b/build/systemMenu_RED/Launcher/ARM9/Makefile @@ -45,18 +45,17 @@ SRCS_LOGO = logoDemo.c logoData.c SRCS = main.c launcher.c \ $(addprefix $(LOGO_DIR)/, $(SRCS_LOGO)) \ $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c \ - $(BG_DIR)/BGData_Launcher.c + $(BG_DIR)/BGData_Launcher.c LINCLUDES = $(MISC_DIR)/include \ $(SRCDIR)/$(LOGO_DIR) LLIBRARIES += libnam$(TWL_LIBSUFFIX).a \ - libese$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a + libese$(TWL_LIBSUFFIX).a ADDRESS_DTCM = 0x0e000000 -DEFAULT_COMP_ARM7 = hyena +DEFAULT_COMP_ARM7 = hyena MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)' @@ -69,7 +68,7 @@ INSTALL_DIR = $(SDK_NMENU_DATADIR) #---------------------------------------------------------------------------- -do-build : $(FONT_OBJS) $(TARGETS) +do-build : $(TARGETS) include $(TWLIPL_ROOT)/build/buildtools/modulerules diff --git a/doc/NAND繝輔Λ繝繧キ繝・繝槭ャ繝&繝輔か繝ォ繝繝繝ェ繝シ.vsd b/doc/NAND繝輔Λ繝繧キ繝・繝槭ャ繝&繝輔か繝ォ繝繝繝ェ繝シ.vsd index d2578668..96f1817b 100644 Binary files a/doc/NAND繝輔Λ繝繧キ繝・繝槭ャ繝&繝輔か繝ォ繝繝繝ェ繝シ.vsd and b/doc/NAND繝輔Λ繝繧キ繝・繝槭ャ繝&繝輔か繝ォ繝繝繝ェ繝シ.vsd differ diff --git a/include/sysmenu.h b/include/sysmenu.h index d64426c7..6c2cc419 100644 --- a/include/sysmenu.h +++ b/include/sysmenu.h @@ -28,6 +28,7 @@ #include #include +#include #include #include #include diff --git a/include/sysmenu/boot/common/boot.h b/include/sysmenu/boot/common/boot_api.h similarity index 93% rename from include/sysmenu/boot/common/boot.h rename to include/sysmenu/boot/common/boot_api.h index a301245c..e36cf4bf 100644 --- a/include/sysmenu/boot/common/boot.h +++ b/include/sysmenu/boot/common/boot_api.h @@ -1,6 +1,6 @@ /*---------------------------------------------------------------------------* Project: TwlIPL - File: boot.h + File: boot_api.h Copyright 2007 Nintendo. All rights reserved. @@ -16,7 +16,7 @@ *---------------------------------------------------------------------------*/ #if !defined(_SYSMENU_BOOT_H_) -#define _SYSMENU_BOOT_H_ +#define _SYSMENU_BOOT_API_H_ #include @@ -80,4 +80,4 @@ void BOOT_Ready( void ); } #endif -#endif /* _SYSMENU_BOOT_H_ */ +#endif /* _SYSMENU_BOOT_API_H_ */ diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h index 53336cc9..7204ab76 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_work.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_work.h @@ -115,11 +115,11 @@ typedef struct SYSM_work { u16 cardHeaderCrc16_bak; // カード検出時に算出したROMヘッダCRC16(ARM7側ライブラリでダイレクトに書き換わる側) OSLockWord lockCardRsc; // カードリソース排他制御用 int cloneBootMode; + u32 nCardID; // カードID ResetParam resetParam; // NTR-IPL2のレガシー 最終的には消すと思う - u32 nCardID; BOOL enableCardNormalOnly; u8 rtcStatus; }SYSM_work;