diff --git a/trunk/SkipFirstLaunch/InitialSequenceSkipTool.desc b/trunk/SkipFirstLaunch/InitialSequenceSkipTool.desc new file mode 100644 index 0000000..8213f0b --- /dev/null +++ b/trunk/SkipFirstLaunch/InitialSequenceSkipTool.desc @@ -0,0 +1,234 @@ +AccessControlDescriptor: + AffinityMask: 1 + AutoGen: true + CoreVersion: 2 + DescVersion: 2 + Descriptor: | + AHaADwAABAACAAAAAAAFGJ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAD//wIAAAAAAAAAAAAAAAAAiJAAAAAAAABBUFQ6VQAAACRo + aW9GSU8AJGhvc3RpbzAkaG9zdGlvMWNhbTp1AAAAY2VjZDp1AABkbHA6RktD + TGRscDpTUlZSZHNwOjpEU1BmcmQ6dQAAAGZzOlVTRVIAZ3NwOjpHcHVodHRw + OkMAAG1pYzp1AAAAbmRtOnUAAABud206OlVEU3B4aTpkZXYAc29jOlUAAABz + c2w6QwAAAHkycjp1AAAAbGRyOnJvAABpcjpVU0VSAGNmZzpub3IAbnM6cwAA + AABhbTpzeXMAAGNmZzppAAAAYWM6aQAAAABib3NzOlAAAG5ld3M6cwAAcHRt + OnN5c21oaWQ6U1BWUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABOn/rw/7//8ec/APIA8JH/APaR/1D/gf9Y/4H/cP+B/3j/gf8B + AQD/AAIA/iECAPz///////////////////////////////////////////// + ////////////////////////////////////////AAAAAAAAAAAAAAAAAAAA + AAADAAAAAAAAAAAAAAAAAAI= + DisableDebug: false + EnableInterruptNumbers: [] + EnableSystemCalls: + ArbitrateAddress: 34 + Break: 60 + CancelTimer: 28 + ClearEvent: 25 + ClearTimer: 29 + CloseHandle: 35 + ConnectToPort: 45 + ControlMemory: 1 + CreateAddressArbiter: 33 + CreateEvent: 23 + CreateMemoryBlock: 30 + CreateMutex: 19 + CreateSemaphore: 21 + CreateThread: 8 + CreateTimer: 26 + DuplicateHandle: 39 + ExitProcess: 3 + ExitThread: 9 + GetCurrentProcessorNumber: 17 + GetHandleInfo: 41 + GetProcessId: 53 + GetProcessIdOfThread: 54 + GetProcessIdealProcessor: 6 + GetProcessInfo: 43 + GetResourceLimit: 56 + GetResourceLimitCurrentValues: 58 + GetResourceLimitLimitValues: 57 + GetSystemInfo: 42 + GetSystemTick: 40 + GetThreadContext: 59 + GetThreadId: 55 + GetThreadIdealProcessor: 15 + GetThreadInfo: 44 + GetThreadPriority: 11 + MapMemoryBlock: 31 + OutputDebugString: 61 + QueryMemory: 2 + ReleaseMutex: 20 + ReleaseSemaphore: 22 + SendSyncRequest1: 46 + SendSyncRequest2: 47 + SendSyncRequest3: 48 + SendSyncRequest4: 49 + SendSyncRequest: 50 + SetThreadPriority: 12 + SetTimer: 27 + SignalEvent: 24 + SleepThread: 10 + UnmapMemoryBlock: 32 + WaitSynchronization1: 36 + WaitSynchronizationN: 37 + FileSystemAccess: + - Debug + - DirectSdmc + - DirectSdmcWrite + - CategorySystemSettings + HandleTableSize: 512 + IORegisterMapping: + - 1ff50000-1ff57fff + - 1ff70000-1ff77fff + IdealProcessor: 1 + IoAccessControl: + - UseDirectSdmc + - SdApplication + MemoryMapping: + - 1f000000-1f5fffff:r + MemoryType: Application + Priority: 24 + ProgramId: 0x000400000f807600L + ReleaseKernelMajor: "02" + ReleaseKernelMinor: "33" + ServiceAccessControl: + - APT:U + - $hioFIO + - $hostio0 + - $hostio1 + - cam:u + - cecd:u + - dlp:FKCL + - dlp:SRVR + - dsp::DSP + - frd:u + - fs:USER + - gsp::Gpu + - http:C + - mic:u + - ndm:u + - nwm::UDS + - pxi:dev + - soc:U + - ssl:C + - y2r:u + - ldr:ro + - ir:USER + - cfg:nor + - ns:s + - am:sys + - cfg:i + - ac:i + - boss:P + - news:s + - ptm:sysm + - hid:SPVR + Signature: | + f5buXSG9F2psF4jrmI5Psx7DMLMn3sx1gD3kS+oIiNOnxiql83pbQZwgZPtv + sQX6ahmxv3zwJ9pEekaqChijlLFacVlWezzT29xG2qWxJ0Pbt4ezzuGzfoMv + v9LimWkY0WXe0RlPWPYkxRAnPkYUK30bkyYScRWS9sENnQHrLrTqI+trzTWE + RVgiHbtEoCarYkMEaHo0vPVtdtcZUInBv5p57C6Mfvs5uJfepz7RQMVeO2CG + dHtTsvxdfMMe59FdizphMQmK7Jcn6s/IQKo0o4U0Qsch9m1GAggsa3DCeIBr + OQT5lJKi2D4TKm5+KO+iiGyTJP32BMptlXyynpBDhg== + StorageId: + - 0 + SystemSaveDataId1: "0x0002ffff" +CommonHeaderKey: + D: | + azg4d2QdHd6LQBZIICKfUlWir4VPjX0r0olOFAvckuVBkO8aHbZwHa0AM3z3 + ZmTHzmudQ1kfnpB+SzUiWZzvPt4lQ2VgDJyuoFuvVyB9rJqVBqDe91I9WDWP + Cgmr1T/bRyI/t2884aT5h7lnMAUHgOwSjZXgrV4zR7RtUtwF/zzSIKXzak8y + fXNnIkpz/qii0EkVE8lyEVcZRHmbC0f2p0Cc56/BC0dRsNfba1y7JysYlKpl + sjBAsb427ifKly6AiesmfKKQaof7MhTAIpHkOd0K1KQJx36KdpxKcE5RiaUo + kI20BOsx86V7yyylNdiv1Fq7mBycYpYs5j6Lk5qyOQ== + DP: | + Kt6M0JtDmMtLeQKgr7eeYHzgNFe9SVJkvLynxwsLkeIsU5fEqbbRB5y+fiCR + XxoaOR3JIe+loix6gTzE5G3CtGnuCeQJUFO67PBKxSEpDnXXSecub6zoY2E3 + x6S82g0zwa9xGnkj0+IIwZuBoMe2nr3EPugvi5DiumTxhc0O42U= + DQ: | + D/RVyDNZFW3HimLrxI/c+AD66+ezqBMZUTOi19dRtgXJaXmdoEl8V1Oe5GWU + Mbvk+I4qDlAcSKZfCNNlolAdul+t3kClE079zO3kFKssT8GPTpMLBlofESkR + BknRg3lgWWDdg/gkyYVnxx1K3UM87LNod0TyTEdlX9L+YUKFTlM= + Exponent: | + AQAB + InverseQ: | + dXdwo20DUakiICTLyZ/Do48grRsOHCWIAQEVzsFOrb0y0A3HArbsYeR38B+C + sdAiapI/g7hxoKzVPlLBqdnAYtIUMjoajv8789VhHjdlVeUVD5rVDcfhzsc4 + xjvlOVLFhLuzfXWgMLp6bX4nQVrureosVEIwVminhbpYtuyACYM= + Modulus: | + rzPfPYdaaf4hbM6G/SBGZaKSwDckfwzlP06B7TvbTZITgec3JbUdSr6rgyhN + E3z8P4To3je3YsbIVSUDAtk98e2a8U3f4Yub3w2msf5Blc1x4rBe03LQXfmm + jA8GSwXeiMUzFJ3WyOHsvaSGljEOXh6y0mWRGSXfwLsGurwVsn9X2enFEjkS + 5wZY8tlknLKd0w7vIACnQa2rPr517v5AY8Ghqhu7IYyFMse1fCDjAy8fLxrp + iTDWqmg4lIuFoJl/61PGd21ZUnP3sUKFgRfo64jHe5fNPQjjgITJOQUMf8JA + xASR5AIgTy7+9WG8nnPKI+3tL9YGoVxcN9k/Om3IIw== + P: | + 1heFKbCHina6semZZWM82MFfyYiHA6RGmd17OXdhOaPtdozjzR0ZvTN7ozPw + dySaVHf6OGR+1faIUIOGD55xxcMlCqwU61yWsNeECVzDTdV33rqeG348XM9j + zIJ6NjuIq0MkOWWBLkAJb0v3u/uyVD3v0lw9y7BMEO0iaBrHLs0= + Q: | + 0X+M7XBYQzy6geVV/Z8i0hc7Sb0x5V3iktj4BdsL6teAWMnXKpQP1vbUdCZl + oEsGiYWLl0UEzybqKNnPkK7ObOocT1MB/32Rt6l4aWszL6TbVTbp3KrGDdsU + OjVvus0OwnXQIsI7Rtg2ZYLYe2oiKFU0gb1MO2F9KiE/diwj8q8= +DefaultSpec: + AccessControlInfo: + AffinityMask: 1 + FirmwareVersion: 2 + HandleTableSize: 512 + IORegisterMapping: + - 1ff50000-1ff57fff + - 1ff70000-1ff77fff + IdealProcessor: 0 + MemoryMapping: + - 1f000000-1f5fffff:r + Priority: 16 + BasicInfo: + CompanyCode: "00" + Logo: Nintendo + Title: default + ExeFs: + ReadOnly: + - RO + ReadWrite: + - RW + Text: + - STUP_ENTRY + PlainRegion: + - .module_id + Rom: + DefaultReject: + - .* + File: + - "*" + SystemControlInfo: + Dependency: + ac: 0x0004013000002402L + am: 0x0004013000001502L + boss: 0x0004013000003402L + camera: 0x0004013000001602L + cecd: 0x0004013000002602L + cfg: 0x0004013000001702L + codec: 0x0004013000001802L + csnd: 0x0004013000002702L + dlp: 0x0004013000002802L + dsp: 0x0004013000001a02L + friends: 0x0004013000003202L + gpio: 0x0004013000001b02L + gsp: 0x0004013000001c02L + hid: 0x0004013000001d02L + http: 0x0004013000002902L + i2c: 0x0004013000001e02L + ir: 0x0004013000003302L + mcu: 0x0004013000001f02L + mic: 0x0004013000002002L + ndm: 0x0004013000002b02L + news: 0x0004013000003502L + nim: 0x0004013000002c02L + nwm: 0x0004013000002d02L + pdn: 0x0004013000002102L + ps: 0x0004013000003102L + ptm: 0x0004013000002202L + ro: 0x0004013000003702L + socket: 0x0004013000002e02L + spi: 0x0004013000002302L + ssl: 0x0004013000002f02L + StackSize: 262144 diff --git a/trunk/SkipFirstLaunch/OMakefile b/trunk/SkipFirstLaunch/OMakefile index 69cdd87..793d852 100644 --- a/trunk/SkipFirstLaunch/OMakefile +++ b/trunk/SkipFirstLaunch/OMakefile @@ -16,7 +16,7 @@ SUPPORTED_TARGETS = CTR-T*.Process.MPCore.fast CTR_APPTYPE = CARD -TARGET_PROGRAM = SkipFirstLaunch +TARGET_PROGRAM = UserSettingManager ROMFS_ROOT = romfiles CTR_BANNER_SPEC = AutoBoot.bsf @@ -24,6 +24,7 @@ CTR_BANNER_SPEC = AutoBoot.bsf SAMPLED_DEMOS_COMMON_INCLUDE_DIR = $(dir $(HORIZON_ROOT)/../CTR/SampleDemos/common/include) INCLUDES += $(SAMPLED_DEMOS_COMMON_INCLUDE_DIR) \ idb/include \ + ImageDb/include \ $(dir $(NW4C_ROOT)/include/) \ SOURCES[] = @@ -47,12 +48,13 @@ CCFLAGS += --restrict ROM_SPEC_FILE = $(TARGET_PROGRAM).rsf # DESC -DESCRIPTOR = $(HORIZON_ROOT)/resources/specfiles/systemapplications/Mset_US.desc +DESCRIPTOR = InitialSequenceSkipTool.desc LIBS += lib_demo \ libnn_ns \ libnn_am \ lib_scene \ +LIBFILES += $`(addprefix ImageDb$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), ImageDb.fast.a) include $(ROOT_OMAKE)/modulerules diff --git a/trunk/SkipFirstLaunch/Readme.txt b/trunk/SkipFirstLaunch/Readme.txt index 86c351b..d5f05b4 100644 --- a/trunk/SkipFirstLaunch/Readme.txt +++ b/trunk/SkipFirstLaunch/Readme.txt @@ -1,4 +1,4 @@ 【ビルド環境】 ・SDK -Horizon 2_3 branch r38025 +Horizon 4.0.2 branch diff --git a/trunk/SkipFirstLaunch/SkipFirstLaunch.rsf b/trunk/SkipFirstLaunch/UserSettingManager.rsf similarity index 69% rename from trunk/SkipFirstLaunch/SkipFirstLaunch.rsf rename to trunk/SkipFirstLaunch/UserSettingManager.rsf index 06cf5f3..a62ee88 100644 --- a/trunk/SkipFirstLaunch/SkipFirstLaunch.rsf +++ b/trunk/SkipFirstLaunch/UserSettingManager.rsf @@ -1,12 +1,10 @@ BasicInfo: - Title : SkipFirstLaunch - ProductCode: SkipFirstLaunch - BackupMemoryType: 128KB + Title : UserSettingManager + ProductCode: CTR-P-26EA TitleInfo: - Use: System - Category: SystemApplication - UniqueId: 0x00210 + Use: Evaluation + UniqueId: 0xF8076 Version: 0 SystemControlInfo: @@ -28,8 +26,6 @@ AccessControlInfo: DisableDebug : true FileSystemAccess: - - Debug - - CategorySystemApplication - CategorySystemSettings SystemSaveDataId1: 0x00020210 @@ -42,4 +38,5 @@ CardInfo: Rom: # ROM に含めるファイルシステムのルートパスを指定します。 + SaveDataSize: 128KB HostRoot: "$(ROMFS_ROOT)" \ No newline at end of file diff --git a/trunk/SkipFirstLaunch/idb/src/IDBi.cpp b/trunk/SkipFirstLaunch/idb/src/IDBi.cpp index 2f129e7..0f4fb86 100644 --- a/trunk/SkipFirstLaunch/idb/src/IDBi.cpp +++ b/trunk/SkipFirstLaunch/idb/src/IDBi.cpp @@ -91,7 +91,7 @@ void IDBi_Initialize( u8 * buffer, bool onMemory, bool readOnly ) spIconBuf = NULL; }else{ spIconBuf = (IDBi_IconData *)(buffer+sizeof(IDBi_TableFile)+sizeof(IDBi_IconData) ); // reinterpret_cast - spDataBuf = NULL; + spDataBuf = NULL; } nn::Result res; @@ -117,9 +117,9 @@ void IDBi_Initialize( u8 * buffer, bool onMemory, bool readOnly ) fileCreated = true; NN_LOG("IDB::CreateFile start\n"); - res = nn::fs::TryCreateFile( sDataFileName, sizeof(IDBi_DataFile) ); + res = nn::fs::TryCreateFile( sDataFileName, sizeof(IDBi_DataFile) ); NN_LOG("IDB::CreateFile done\n"); - + if ( res.IsSuccess() ) { res = os.TryInitialize( sDataFileName, false ); @@ -145,7 +145,7 @@ void IDBi_Initialize( u8 * buffer, bool onMemory, bool readOnly ) }else{ // オンメモリでは無い場合のフォーマットはかなり遅い NN_LOG("IDB::Format start (small memory) %d\n", IDBi_GetBufferSize(false) ); - + const s32 max = IDB_ICON_DATA_MAX * sizeof(IDBi_IconData ); const s32 chunk = IDBi_GetBufferSize(false); s32 current = 0; @@ -195,7 +195,7 @@ u8 * IDBi_Finalize( void ) if ( spTmpIconBuf == NULL ) return NULL; u8 * ret = (u8 *)spTable; // reinterpret_cast - + if ( !sReadOnly ) { IDBi_Save(); @@ -294,7 +294,7 @@ BOOL IDBi_Select( IDB_Icon * outIcon, IDB_Key * key, BOOL updateLastAccess ) // アプレットのプログラムIDに対して下位8ビットを無視するようにする IDBi_MaskProgramID( &key->programID ); - + IDBi_Index index = IDBi_GetIndex( key ); if ( index == IDBi_INDEX_INVALID ) return FALSE; @@ -315,7 +315,7 @@ BOOL IDBi_SelectFromIndex( IDB_Icon * outIcon, IDBi_Index index, BOOL updateLast if ( index == IDBi_INDEX_INVALID ) return FALSE; IDBi_IconTable * const restrict pTable = &spTable->iconTable[index]; - + IDBi_IconData * restrict pData; if ( spDataBuf ) { @@ -333,7 +333,7 @@ BOOL IDBi_SelectFromIndex( IDB_Icon * outIcon, IDBi_Index index, BOOL updateLast outIcon->key.programID = pTable->programID; outIcon->key.remasterVersion = pTable->remasterVersion; - + memset( outIcon->key.padding, 0, sizeof(outIcon->key.padding) ); memcpy( outIcon->info, pData->info, sizeof( pData->info ) ); @@ -353,13 +353,13 @@ BOOL IDBi_SelectFromIndex( IDB_Icon * outIcon, IDBi_Index index, BOOL updateLast BOOL IDBi_IsContains( IDB_Key *key ) { NN_NULL_ASSERT( spTable ); // Initialize済 - + if ( spTable==NULL ) return FALSE; if ( key->programID == sInvalidProgramID ){ return FALSE; } // アプレットのプログラムIDに対して下位8ビットを無視するようにする IDBi_MaskProgramID( &key->programID ); - + return IDBi_GetIndex( key ) != IDBi_INDEX_INVALID; } @@ -381,7 +381,7 @@ IDBi_Division IDBi_GetDivision( const IDB_Key * restrict key ) IDBi_Division IDBi_GetDivisionFromIndex( IDBi_Index index ) { if ( index == IDBi_INDEX_INVALID ) return IDBi_DIVISION_NONE; - + NN_ASSERT( 0<=index && indexiconTable[i]; - + table->programID = sInvalidProgramID; // 無効ID table->lastAccess = 0; // IDBi_Time lastAccess : 最終アクセス日時 table->remasterVersion = 0; // ソフトバージョン @@ -566,7 +566,7 @@ IDBi_Index IDBi_AppendCore( const IDB_Icon * restrict inIcon, IDBi_Division divi { // 追い出されたデータをフレンド枠に移動する IDBi_Index fIndex = IDBi_GetEmptyIndex( IDBi_DIVISION_FRIEND ); - + IDBi_Move( fIndex, index ); IDBi_SetFromIndex( inIcon, index ); }else{ @@ -836,11 +836,11 @@ void IDBi_WriteData(IDBi_Index index) nn::fs::FileOutputStream os(sDataFileName, false); os.Seek( index * sizeof(IDBi_IconData) ,nn::fs::POSITION_BASE_BEGIN ); - if ( spDataBuf ) + if ( spDataBuf ) { - os.Write( &spDataBuf->iconData[index], sizeof(IDBi_IconData) ); + os.Write( &spDataBuf->iconData[index], sizeof(IDBi_IconData), true ); }else{ - os.Write( spIconBuf, sizeof(IDBi_IconData) ); + os.Write( spIconBuf, sizeof(IDBi_IconData), true ); } os.Finalize(); } @@ -873,7 +873,7 @@ void IDBi_Save(void) } s32 size; - res = os.TryWrite( &size, spTable, sizeof(*spTable) ); + res = os.TryWrite( &size, spTable, sizeof(*spTable), true); os.Finalize(); } @@ -882,7 +882,7 @@ void IDBi_Load(void) { nn::Result res; nn::fs::FileInputStream is; - + res = is.TryInitialize( sTableFileName ); if ( res.IsSuccess() ) { diff --git a/trunk/SkipFirstLaunch/sysFile.cpp b/trunk/SkipFirstLaunch/sysFile.cpp index 3ab8bdc..f63d39c 100644 --- a/trunk/SkipFirstLaunch/sysFile.cpp +++ b/trunk/SkipFirstLaunch/sysFile.cpp @@ -579,7 +579,7 @@ nn::fs::FileWriter fileWriter; if( result.IsSuccess() ) { s32 out = 0; - result = fileWriter.TryWrite( &out, saveData, size ); + result = fileWriter.TryWrite( &out, saveData, size, true ); if( result.IsSuccess() ) { result = nn::fs::CommitSystemSaveData( mMmenSysArcName ); @@ -672,7 +672,7 @@ nn::fs::FileOutputStream fileWriter; } s32 out = 0; - result = fileWriter.TryWrite( &out, saveData, size ); + result = fileWriter.TryWrite( &out, saveData, size, true ); if( result.IsFailure() ) { // このときどうしようもない @@ -810,7 +810,7 @@ nn::fs::FileOutputStream fileWriter; } s32 out = 0; - result = fileWriter.TryWrite( &out, saveData, size ); + result = fileWriter.TryWrite( &out, saveData, size, true ); if( result.IsFailure() ) { // このときどうしようもない