<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joel16</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joel16"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Joel16"/>
	<updated>2026-04-13T17:37:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Filesystem_services&amp;diff=4836</id>
		<title>Filesystem services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Filesystem_services&amp;diff=4836"/>
		<updated>2018-07-17T14:41:14Z</updated>

		<summary type="html">&lt;p&gt;Joel16: Add info on fsFsCleanDirectoryRecursively&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= fsp-ldr =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IFileSystemProxyForLoader&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Arguments || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenCodeFileSystem || u64 TitleId + X descriptor [[#ContentPath]] || Returns an [[#IFileSystem]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsArchivedProgram || u64 ProcessId || Returns a bool (1 if code is mounted).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] SetCurrentProcess || PID descriptor ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= fsp-pr =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IProgramRegistry&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#RegisterProgram]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UnregisterProgram]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] SetCurrentProcess ||&lt;br /&gt;
|-&lt;br /&gt;
| 256 || [[#SetEnabledProgramVerification]] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RegisterProgram ==&lt;br /&gt;
Takes a storageID, a pid, a titleID, a 0x1C type-A buffer for the [[NPDM#FS_Access_Header| FS Access Header]], and a 0x2C type-A buffer for the [[NPDM#FS_Access_Control| FS Access Control]]&lt;br /&gt;
&lt;br /&gt;
Final FS permissions are stored as (ACI0_perms &amp;amp; ACID_perms). Will panic(svcBreak) when buffer sizes from ipc-rawdata are invalid.&lt;br /&gt;
&lt;br /&gt;
== UnregisterProgram ==&lt;br /&gt;
Takes a pid. Removes registered FS permissions for that PID.&lt;br /&gt;
&lt;br /&gt;
== SetEnabledProgramVerification ==&lt;br /&gt;
Seems to sets a global flag to inputval &amp;amp; 1.&lt;br /&gt;
&lt;br /&gt;
When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key [[NPDM]] ACID signature fails. This also skips verifying the [[NCA_Format|NCA Header]] signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort.&lt;br /&gt;
&lt;br /&gt;
= fsp-srv =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IFileSystemProxy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [1.0.0] [[#OpenFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#SetCurrentProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || OpenDataFileSystemByCurrentProcess&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [2.0.0+] [[#OpenFileSystemWithPatch]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [2.0.0+] [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [3.0.0+] OpenDataFileSystemByApplicationId&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || InvalidateBisCache&lt;br /&gt;
|-&lt;br /&gt;
| 17 || OpenHostFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 18 || OpenSdCardFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [2.0.0+] FormatSdCardFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#DeleteSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#CreateSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#CreateSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || RegisterSaveDataFileSystemAtomicDeletion&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [2.0.0+] DeleteSaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [2.0.0+] FormatSdCardDryRun&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [2.0.0+] IsExFatSupported&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [[#OpenGameCardStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [[#OpenGameCardFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [3.0.0+] ExtendSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [5.0.0+] DeleteCacheStorage&lt;br /&gt;
|-&lt;br /&gt;
| 34 || [5.0.0+] GetCacheStorageSize&lt;br /&gt;
|-&lt;br /&gt;
| 51 || [[#OpenSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 52 || [[#OpenSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 53 || [2.0.0+] OpenReadOnlySaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 57 || [3.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| 58 || ReadSaveDataFileSystemExtraData&lt;br /&gt;
|-&lt;br /&gt;
| 59 || [2.0.0+] WriteSaveDataFileSystemExtraData&lt;br /&gt;
|-&lt;br /&gt;
| 60 || [[#OpenSaveDataInfoReader]]&lt;br /&gt;
|-&lt;br /&gt;
| 61 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 62 || [5.0.0+] OpenCacheStorageList&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [5.0.0+] OpenSaveDataInternalStorageFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 65 || [5.0.0+] UpdateSaveDataMacForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 66 || [5.0.0+] WriteSaveDataFileSystemExtraData2&lt;br /&gt;
|-&lt;br /&gt;
| 80 || OpenSaveDataMetaFile&lt;br /&gt;
|-&lt;br /&gt;
| 81 || [4.0.0+] OpenSaveDataTransferManager&lt;br /&gt;
|-&lt;br /&gt;
| 82 || [5.0.0+] OpenSaveDataTransferManagerVersion2&lt;br /&gt;
|-&lt;br /&gt;
| 100 || OpenImageDirectoryFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 110 || [[#OpenContentStorageFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || OpenDataStorageByCurrentProcess&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [3.0.0+] OpenDataStorageByProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#OpenDataStorageByDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || OpenPatchDataStorageByCurrentProcess&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [[#OpenDeviceOperator]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [[#OpenSdCardDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| 501 || [[#OpenGameCardDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [5.0.0+] OpenSystemDataUpdateEventNotifier&lt;br /&gt;
|-&lt;br /&gt;
| 511 || [5.0.0+] NotifySystemDataUpdateEvent&lt;br /&gt;
|-&lt;br /&gt;
| 600 || [1.0.0-3.0.2] SetCurrentPosixTime&lt;br /&gt;
|-&lt;br /&gt;
| 601 || QuerySaveDataTotalSize&lt;br /&gt;
|-&lt;br /&gt;
| 602 || [[#VerifySaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 603 || CorruptSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 604 || CreatePaddingFile&lt;br /&gt;
|-&lt;br /&gt;
| 605 || DeleteAllPaddingFiles&lt;br /&gt;
|-&lt;br /&gt;
| 606 || [2.0.0+] GetRightsId&lt;br /&gt;
|-&lt;br /&gt;
| 607 || [2.0.0+] RegisterExternalKey&lt;br /&gt;
|-&lt;br /&gt;
| 608 || [2.0.0+] UnregisterAllExternalKey&lt;br /&gt;
|-&lt;br /&gt;
| 609 || [2.0.0+] GetRightsIdByPath&lt;br /&gt;
|-&lt;br /&gt;
| 610 || [3.0.0+] GetRightsIdAndKeyGenerationByPath&lt;br /&gt;
|-&lt;br /&gt;
| 611 || [4.0.0+] SetCurrentPosixTimeWithTimeDifference&lt;br /&gt;
|-&lt;br /&gt;
| 612 || [4.0.0+] GetFreeSpaceSizeForSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 613 || [4.0.0+] VerifySaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| 614 || [4.0.0+] CorruptSaveDataFileSystemBySaveDataSpaceId&lt;br /&gt;
|-&lt;br /&gt;
| 615 || [5.0.0+] QuerySaveDataInternalStorageTotalSize&lt;br /&gt;
|-&lt;br /&gt;
| 620 || [2.0.0+] [[#SetSdCardEncryptionSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| 630 || [4.0.0+] SetSdCardAccessibility&lt;br /&gt;
|-&lt;br /&gt;
| 631 || [4.0.0+] IsSdCardAccessible&lt;br /&gt;
|-&lt;br /&gt;
| 640 || [4.0.0+] IsSignedSystemPartitionOnSdCardValid&lt;br /&gt;
|-&lt;br /&gt;
| 700 || [5.0.0+] OpenAccessFailureResolver&lt;br /&gt;
|-&lt;br /&gt;
| 701 || [5.0.0+] GetAccessFailureDetectionEvent&lt;br /&gt;
|-&lt;br /&gt;
| 702 || [5.0.0+] IsAccessFailureDetected&lt;br /&gt;
|-&lt;br /&gt;
| 710 || [5.0.0+] ResolveAccessFailure&lt;br /&gt;
|-&lt;br /&gt;
| 720 || [5.0.0+] AbandonAccessFailure&lt;br /&gt;
|-&lt;br /&gt;
| 800 || [2.0.0+] GetAndClearFileSystemProxyErrorInfo&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || SetBisRootForHost&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || SetSaveDataSize&lt;br /&gt;
|-&lt;br /&gt;
| 1002 || SetSaveDataRootPath&lt;br /&gt;
|-&lt;br /&gt;
| 1003 || DisableAutoSaveDataCreation&lt;br /&gt;
|-&lt;br /&gt;
| 1004 || [[#SetGlobalAccessLogMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 1005 || [[#GetGlobalAccessLogMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 1006 || [[#OutputAccessLogToSdCard]]&lt;br /&gt;
|-&lt;br /&gt;
| 1007 || [4.0.0+] RegisterUpdatePartition&lt;br /&gt;
|-&lt;br /&gt;
| 1008 || [4.0.0+] OpenRegisteredUpdatePartition&lt;br /&gt;
|-&lt;br /&gt;
| 1009 || [4.0.0+] GetAndClearMemoryReportInfo&lt;br /&gt;
|-&lt;br /&gt;
| 1010 || [5.1.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 1100 || [4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Every time permissions are checked, the process registration [[#fsp-pr]] is loaded using the session processID. The permission data is populated with data from the [[NPDM]].&lt;br /&gt;
&lt;br /&gt;
If the processID is &amp;lt;= 6 (which happens only for built-in sysmodules), it will use a hardcoded registration data. The default mask in this case is 0x8000000000000000.&lt;br /&gt;
&lt;br /&gt;
Note that the functions check whether or not at least one bit is set in the mask. This means that, you don&#039;t need to set 0xFFFFFFFFFFFFFFFF to get all permissions: it suffices to set 0x8000000000000000.&lt;br /&gt;
&lt;br /&gt;
If the code were to request an invalid input type, panic. But this never happens.&lt;br /&gt;
&lt;br /&gt;
=== RwPermissions ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type(s) || Mask || Name || Value || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8000000000000801 || MountLogo || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x8000000000000801 || MountContentMeta || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x8000000000000801 || MountContentControl || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x8000000000000801 || MountContentManual || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x8000000000000801 || MountContentData || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x8000000000000801 || MountApplicationPackage || 1 || [[#OpenFileSystem]], [[#OpenFileSystemWithPatch]], [[#OpenFileSystemWithId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x8000000000000000 || || 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x8000000000000800 || ContentStorageAccess || 3 || [[#OpenContentStorageFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8000000000001000 || ImageDirectoryAccess || 3 || [[#OpenImageDirectoryFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x8000000000000084 || OpenBisFileSystemType28, OpenBisFileSystemType32 || 3 || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x8000000000000080 || OpenBisFileSystemType29 || 3 || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x8000000000008080 || OpenBisFileSystemType30 || 3 || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x8000000000008080 || OpenBisFileSystemType31 || 3 || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 0x8000000000000080 || || 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x8000000000000080 ([1.0.0-2.3.0] 0xC000000000200000) || OpenBisFileSystemType33 || 3 || [[#OpenBisFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0xC000000000200000 ([1.0.0-2.3.0] 0x8000000000000010) || SdCardAccess || 3 || [[#OpenSdCardFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8000000000000010 ([1.0.0-2.3.0] 0x8000000000040020) || GameCardUser || 3 || [[#OpenGameCardFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x8000000000040020 ([1.0.0-2.3.0] 0x8000000000000028) || SaveDataAccess0 || 3 || [[#OpenSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x8000000000000028 ([1.0.0-2.3.0] 0x8000000000000020) || SystemSaveDataAccess0 || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x8000000000000020 || SaveDataAccess1 || 3 || [[#OpenSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x8000000000000020 ([1.0.0-2.3.0] 0x8000000000010082) || SystemSaveDataAccess1 || 3 || [[#OpenSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x8000000000010082 ([1.0.0-2.3.0] 0x8000000000010080) || BisPartition0 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x8000000000010080 || BisPartition10 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x8000000000000080 ([1.0.0-2.3.0] 0x8000000000010080) || BisPartition20 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x8000000000010080 || BisPartition21 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x8000000000010080 || BisPartition22 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x8000000000010080 || BisPartition23 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x8000000000010080 || BisPartition24 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x8000000000010080 || BisPartition25 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x8000000000010080 ([1.0.0-2.3.0] 0x8000000000000084) || BisPartition26 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x8000000000000084 || BisPartition27 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x8000000000000084 ([1.0.0-2.3.0] 0x8000000000000080) || BisPartition28 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x8000000000000080 || BisPartition29 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x8000000000000080 || BisPartition30 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x8000000000000080 || BisPartition31 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x8000000000000080 ([1.0.0-2.3.0] 0xC000000000200000) || BisPartition32 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x8000000000000080 ([1.0.0-2.3.0] 0x8000000000000100) || BisPartition33 || 3 || [[#OpenBisStorage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0xC000000000200000 ([1.0.0-2.3.0] 0x8000000000100008) || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x8000000000000100 ([1.0.0-2.3.0] 0xC000000000400000) || GameCard_System || 3 || [[#OpenGameCardStorage]],  [[#EraseGameCard]] (bit1), [[#WriteToGameCard]] (bit1), [[#GetGameCardErrorInfo]] (bit1), [[#EraseAndWriteParamDirectly]] (bit1), [[#ReadParamDirectly]] (bit1), [[#ForceEraseGameCard]] (bit1)&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x27 || 0x8000000000100008 || MountContent_System || 1 || [[#OpenFileSystem]], [[#OpenDataStorageByDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x28 || 0xC000000000400000 || HostAccess || 3 || [[#OpenHostFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x29 || 0x8000000000010000 || RegisteredUpdatePartitionAccess || 1 || [[#OpenRegisteredUpdatePartition]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2A || 0x8000000000000000 || SaveDataInternalStorageAccess || 3 || [[#OpenSaveDataInternalStorageFileSystem]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BoolPermissions ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type(s) || Mask || Name || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8000000000000080 || BisCache || [[#InvalidateBisCache]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x8000000000000080 || EraseMmc || [[#EraseMmc]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x8000000000000010 || GameCardCertificate || [[#GetGameCardDeviceCertificate]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x8000000000000010 || GameCardIdSet || [[#GetGameCardIdSet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x8000000000000200 || GameCardDriver || [[#FinalizeGameCardDriver]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x8000000000000200 || GameCardAsic || [[#GetGameCardAsicInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x8000000000002020 || SaveDataCreate || [[#CreateSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x8000000000000060 || SaveDataDelete0 || [[#DeleteSaveDataFileSystem]], [[#RegisterSaveDataFileSystemAtomicDeletion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8000000000000028 || SystemSaveDataCreate0 || [[#CreateSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x8000000000000020 || SystemSaveDataCreate1 || [[#CreateSaveDataFileSystemBySystemSaveDataId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x8000000000004028 || SaveDataDelete1 || [[#DeleteSaveDataFileSystem]], [[#RegisterSaveDataFileSystemAtomicDeletion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x8000000000000060 || SaveDataInfoReader0 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x8000000000004020 || SaveDataInfoReader1 || [[#OpenSaveDataInfoReaderBySaveDataSpaceId]], [[#OpenSaveDataInfoReader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 0x8000000000020000 || SaveDataMeta || [[#OpenSaveDataMetaFile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x8000000000000400 || PosixTime || [[#SetCurrentPosixTime]], [[#SetCurrentPosixTimeWithTimeDifference]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x8000000000004060 || SaveDataExtraData_Read || [[#ReadSaveDataFileSystemExtraData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8000000000080000 || GlobalAccessMode || [[#SetGlobalAccessMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x8000000000080000 || SpeedEmulationMode || [[#SetSpeedEmulationMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || Invalid || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0xC000000000800000 || PaddingFiles || [[#CreatePaddingFile]], [[#DeleteAllPaddingFiles]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xC000000001000000 || SaveDataCorrupt0 || [[#CorruptSaveDataFileSystem]], [[#CorruptSaveDataFileSystemBySaveDataSpaceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x8000000001000060 ([1.0.0-4.1.0] 0xC000000002000000) || SaveDataCorrupt1 || [[#CorruptSaveDataFileSystem]], [[#CorruptSaveDataFileSystemBySaveDataSpaceId]]&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x16 || 0x8000000000000060 ([1.0.0-4.1.0] 0x8000000004000000) || SaveDataVerify || [[#VerifySaveDataFileSystem]], [[#VerifySaveDataFileSystemBySaveDataSpaceId]]&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x17 || 0xC000000002000000 ([1.0.0-4.1.0] 0x8000000008000000) || SaveData_SystemManagement || [[#CreateSaveDataFileSystem]], [[#OpenSaveDataFileSystem]], [[#SetSaveDataRootPath]]&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x18 || 0x8000000004000000 ([1.0.0-4.1.0] 0x8000000010000000) || SdCardFormat || [[#FormatSdCardFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x19 || 0x8000000008000000 ([1.0.0-4.1.0] 0x8000000000000800) || RightsId || [[#GetRightsId]], [[#GetRightsIdAndKeyGenerationByPath]], [[#GetRightsIdByPath]]&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x1A || 0x8000000010000000 ([1.0.0-4.1.0] 0x8000000000004020) || ExternalKey || [[#RegisterExternalKey]], [[#UnregisterAllExternalKey]]&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x1B || 0x8000000000000800 ([1.0.0-4.1.0] 0x8000000000002020) || SdCardEncryptionSeed || [[#SetSdCardEncryptionSeed]]&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x1C || 0x8000000000004020 ([1.0.0-4.1.0] 0x8000000000000028) || SaveDataExtraData_Write0 || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]]&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x1D || 0x8000000000000000 ([1.0.0-4.1.0] 0x8000000020000000) || SaveDataExtraData_Write1 || [[#WriteSaveDataFileSystemExtraData]], [[#WriteSaveDataFileSystemExtraData2]]&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x1E || 0x8000000000002020 ([1.0.0-4.1.0] 0x8000000040000000) || SaveDataExtend0 || [[#ExtendSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x1F || 0x8000000000000028 ([1.0.0-4.1.0] 0x8000000000000000) || SaveDataExtend1 || [[#ExtendSaveDataFileSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x20 || 0x8000000020000000 ([1.0.0-4.1.0] 0x8000000000000000) || UpdatePartitionRegister || [[#RegisterUpdatePartition]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x21 || 0x8000000040000000 || SaveDataTransfer || [[#OpenSaveDataTransferManager]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x22 || 0x0000000080000002 || SaveDataTransferVersion2 || [[#OpenSaveDataTransferManagerVersion2]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x23 || 0x8000000000000000 || MmcPatrol || [[#SuspendMmcPatrol]], [[#ResumeMmcPatrol]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x24 || 0x8000000000000000 || SaveDataTransferKey || [[#OverrideSaveDataTransferTokenSignVerificationKey]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x25 || 0x8000000080200000 || SdCardDetectionEventNotifier || [[#OpenSdCardDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x26 || 0x8000000080000110 || GameCardDetectionEventNotifier || [[#OpenGameCardDetectionEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x27 || 0x8000000000100008 || SystemDataUpdateEventNotifier || [[#OpenSystemDataUpdateEventNotifier]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x28 || 0x8000000080010000 || SystemDataUpdateEventNotify || [[#NotifySystemDataUpdateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x29 || 0x0000000080000001 || AccessFailureResolver || [[#OpenAccessFailureResolver]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2A || 0x0000000080000001 || AccessFailureDetectionEvent || [[#GetAccessFailureDetectionEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2B || 0x0000000080000001 || AccessFailureDetected || [[#IsAccessFailureDetected]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2C || 0x0000000080000001 || AccessFailureResolve || [[#ResolveAccessFailure]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2D || 0x0000000080000001 || AccessFailureAbandon || [[#AbandonAccessFailure]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2E || 0x8000000040000000 || SaveDataInternalStorageTotalSize || [[#QuerySaveDataInternalStorageTotalSize]] &lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x2F || 0x8000000080200000 || SdCardAccessibility || [[#SetSdCardAccessibility]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.1.0+] 0x30 || 0x8000000080080000 || ||  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenFileSystem ==&lt;br /&gt;
Takes an input [[#FileSystemType]] and an u64 title-id. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This function was removed.&lt;br /&gt;
&lt;br /&gt;
== SetCurrentProcess ==&lt;br /&gt;
Takes a pid-descriptor.&lt;br /&gt;
&lt;br /&gt;
== OpenFileSystemWithPatch ==&lt;br /&gt;
Takes an input [[#FileSystemType]] and an u64 title-id. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Web-applet loads the [[#FileSystemType]] (which must be &#039;&#039;&#039;ContentManual&#039;&#039;&#039;) from u32_table[inparam].&lt;br /&gt;
&lt;br /&gt;
Note: web-applet strings refer to both this cmd and [[#OpenFileSystemWithId]] as &amp;quot;MountContent&amp;quot;, but official nn_sf_sync symbols use &amp;quot;OpenXX&amp;quot; names.&lt;br /&gt;
&lt;br /&gt;
== OpenFileSystemWithId ==&lt;br /&gt;
Takes a type-0x19 input buffer, an [[#FileSystemType]] and an u64 title-id. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
The [[#IFileSystem]] must be &#039;&#039;&#039;ContentMeta&#039;&#039;&#039; if the NCA type is 0 (control).&lt;br /&gt;
&lt;br /&gt;
The input buffer is the output string path from [[NS_Services#GetApplicationContentPath|GetApplicationContentPath]].&lt;br /&gt;
&lt;br /&gt;
May return errors when attempting to access NCA-paths for an update-title with a gamecard, when the gamecard isn&#039;t inserted. May return error 0x7D402 in some cases with update-titles. Non-val2 in32 values with NCA-type1 are unusable, even for normal titles.&lt;br /&gt;
&lt;br /&gt;
The official &amp;quot;MountApplicationPackage&amp;quot; func uses this with in64=0 and [[#FileSystemType]] &#039;&#039;&#039;ApplicationPackage&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After the [[#FileSystemType]] specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0.&lt;br /&gt;
&lt;br /&gt;
When [[#FileSystemType]] is &#039;&#039;&#039;ContentMeta&#039;&#039;&#039;, it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it&#039;s compared with the NCA titleID, then an error is thrown on mismatch.&lt;br /&gt;
&lt;br /&gt;
== OpenBisFileSystem ==&lt;br /&gt;
Takes a type-0x19 input buffer string and a u32 [[Flash_Filesystem|Bis partitionID]]. Official user-process code sets instr[0] = 0 normally. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Only partitionIDs for FAT partitions are usable with this, otherwise error 0x2EE202 is returned. Seems to be about the same as [[#OpenBisStorage]] except this mounts the partition filesystem instead of allowing direct access to the partition sectors.&lt;br /&gt;
&lt;br /&gt;
== OpenBisStorage ==&lt;br /&gt;
Takes a u32 partition ID, returns 0x2EE202 for partitions which do not exist, 0x320002 for partitions which cannot be opened and a valid [[#IStorage]] handle otherwise.&lt;br /&gt;
&lt;br /&gt;
== InvalidateBisCache ==&lt;br /&gt;
Seems to invalidate the Bis cache for MBR/GPT after overwriting that data via the OpenBisStorage IStorage. Used by [[SystemInitializer]].&lt;br /&gt;
&lt;br /&gt;
== DeleteSaveDataFileSystem ==&lt;br /&gt;
Takes an input u64.&lt;br /&gt;
&lt;br /&gt;
== CreateSaveDataFileSystem ==&lt;br /&gt;
Takes a 0x40-byte Save-struct entry, a 0x40-byte SaveCreate-struct entry, and a 0x10-byte input struct.&lt;br /&gt;
&lt;br /&gt;
Only the first 0x5-bytes in the 0x10-byte struct are initialized: all-zero when automatically creating savedata during savecommon mount by official user-processes. In the dedicated save-creation code in official user-processes: +0 u32 = 0x40060, +4 u8 = 1.&lt;br /&gt;
&lt;br /&gt;
Creates regular savedata.&lt;br /&gt;
&lt;br /&gt;
== CreateSaveDataFileSystemBySystemSaveDataId ==&lt;br /&gt;
Takes a 0x40-byte Save-struct entry and a 0x40-byte SaveCreate-struct entry.&lt;br /&gt;
&lt;br /&gt;
Creates savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition.&lt;br /&gt;
&lt;br /&gt;
== OpenGameCardStorage ==&lt;br /&gt;
Takes two input u32s (gamecard handle, partition ID), and returns an [[#IStorage]] for the [[Gamecard_Format|partition]].&lt;br /&gt;
&lt;br /&gt;
== OpenGameCardFileSystem ==&lt;br /&gt;
Takes two input u32s, with the second u32 located at +4 in rawdata after the first u32. Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Mounts a [[Gamecard_Partition|gamecard partition]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataFileSystem ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte Save-struct entry. Official user-process code is only known to use value 1 for the u8.&lt;br /&gt;
&lt;br /&gt;
Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Permissions aren&#039;t checked until the specified save is successfully found.&lt;br /&gt;
&lt;br /&gt;
Only one process (specifically only one [[#IFileSystem]] session) can mount a given savedata at any given time (this includes SystemSaveData).&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataFileSystemBySystemSaveDataId ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]] and a 0x40-byte Save-struct entry. Web-applet only uses value0 for the input u8.&lt;br /&gt;
&lt;br /&gt;
Returns an [[#IFileSystem]].&lt;br /&gt;
&lt;br /&gt;
Mounts savedata in the SYSTEM [[Flash_Filesystem|NAND]] partition.&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataInfoReader ==&lt;br /&gt;
No input, returns an output [[#ISaveDataInfoReader]].&lt;br /&gt;
&lt;br /&gt;
== OpenSaveDataInfoReaderBySaveDataSpaceId ==&lt;br /&gt;
Takes an input u8 [[#SaveDataSpaceId]], returns an output [[#ISaveDataInfoReader]].&lt;br /&gt;
&lt;br /&gt;
== OpenContentStorageFileSystem ==&lt;br /&gt;
Takes a [[#ContentStorageId]]. Invalid values return 0x2EE202.&lt;br /&gt;
&lt;br /&gt;
Returns an [[#IFileSystem]] with NCA files. The read data from these files is identical to the data read by [[Content_Manager_services#ReadEntryRaw]].&lt;br /&gt;
&lt;br /&gt;
== OpenDataStorageByDataId ==&lt;br /&gt;
Takes a [[#StorageId]] and a TitleID.&lt;br /&gt;
&lt;br /&gt;
Returns a [[IPC_Marshalling#Domain_message|domain object ID]] implementing the [[#IStorage]] interface for data archives.&lt;br /&gt;
&lt;br /&gt;
== OpenDeviceOperator ==&lt;br /&gt;
This command returns a session to a port implementing the [[#IDeviceOperator]] interface.&lt;br /&gt;
&lt;br /&gt;
== OpenSdCardDetectionEventNotifier ==&lt;br /&gt;
This command returns a session to a port implementing the [[#IEventNotifier]] interface.&lt;br /&gt;
&lt;br /&gt;
== OpenGameCardDetectionEventNotifier ==&lt;br /&gt;
This command returns a session to a port implementing the [[#IEventNotifier]] interface.&lt;br /&gt;
&lt;br /&gt;
== VerifySaveDataFileSystem ==&lt;br /&gt;
Takes an unknown input u64 and a type-0x6 output buffer.&lt;br /&gt;
&lt;br /&gt;
The input u64 high-byte must be non-zero, otherwise an [[Error_codes|error]] is returned(0xE02).&lt;br /&gt;
&lt;br /&gt;
== SetSdCardEncryptionSeed ==&lt;br /&gt;
Takes in the 0x10 byte SD card encryption seed, and loads it into FS-module state.&lt;br /&gt;
&lt;br /&gt;
[[NS_Services|NS]]-module reads the 0x10 bytes from SdCard:/Nintendo/Contents/private, and compares them to the first 0x10 bytes of the ns_appman:/private (in [[Flash_Filesystem#System_Savegames|system savedata]] 0x8000000000000043). If they match, NS calls this command using bytes 0x10-0x20 from ns_appman:/private. The rest of this file (0x1F0 bytes total) is (usually/always?) all-zero.&lt;br /&gt;
&lt;br /&gt;
== SetGlobalAccessLogMode ==&lt;br /&gt;
Takes an input u32.&lt;br /&gt;
&lt;br /&gt;
== GetGlobalAccessLogMode ==&lt;br /&gt;
Returns an output u32.&lt;br /&gt;
&lt;br /&gt;
GlobalAccessLogMode is normally 0.&lt;br /&gt;
&lt;br /&gt;
== OutputAccessLogToSdCard ==&lt;br /&gt;
Takes a type-0x5 input buffer.&lt;br /&gt;
&lt;br /&gt;
The input buffer is the string to output to the log. User-processes normally include a newline at the end.&lt;br /&gt;
&lt;br /&gt;
User-processes only use this when the value previously loaded from [[#GetGlobalAccessLogMode]] has bit1 set.&lt;br /&gt;
&lt;br /&gt;
When bit1 in GlobalAccessLogMode is clear, FS-module will just return 0 for OutputAccessLogToSdCard. However even with that set the log doesn&#039;t show up SD, unknown why.&lt;br /&gt;
&lt;br /&gt;
The input buffer is written to the &amp;quot;$FsAccessLog:/FsAccessLog.txt&amp;quot; file, where &amp;quot;$FsAccessLog&amp;quot; is the SD-card mount-name. It&#039;s written to the current end of the file(appended).&lt;br /&gt;
&lt;br /&gt;
= IStorage =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IStorage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is the interface for a raw device, usually a block device.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Read || Takes a type-0x46 buffer, an offset and length &lt;br /&gt;
|-&lt;br /&gt;
| 1 || Write || Takes a type-0x45 buffer, an offset and length &lt;br /&gt;
|-&lt;br /&gt;
| 2 || Flush || None&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSize || Takes a size&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetSize || None&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [4.0.0+] OperateRange ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IFileSystem =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IFileSystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are two main implementations of this interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RomFS&#039;&#039;&#039;: Filesystem implementation statically linked in the binary. Uses an [[#IStorage]] interface as underlying raw device.&lt;br /&gt;
* &#039;&#039;&#039;IPC proxy&#039;&#039;&#039;: Used for all non-RomFS filesystems. In this case, actual filesystem implementation is in the FS process.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateFile&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeleteFile&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CreateDirectory&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeleteDirectory&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeleteDirectoryRecursively&lt;br /&gt;
|-&lt;br /&gt;
| 5 || RenameFile&lt;br /&gt;
|-&lt;br /&gt;
| 6 || RenameDirectory&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetEntryType]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || OpenFile&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#OpenDirectory]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Commit]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetFreeSpaceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetTotalSpaceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#CleanDirectoryRecursively]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [3.0.0+] GetFileTimeStampRaw&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [4.0.0+] QueryEntry&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetEntryType ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and returns [[#DirectoryEntryType]] as an output u32.&lt;br /&gt;
&lt;br /&gt;
== OpenDirectory ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and an u64 &#039;&#039;&#039;filter_flags&#039;&#039;&#039;. &#039;&#039;&#039;filter_flags&#039;&#039;&#039; controls what type of entries are read by the [[#IDirectory]]: bitmask 0x1 = directories, bitmask 0x2 = files.&lt;br /&gt;
&lt;br /&gt;
== Commit ==&lt;br /&gt;
Like [https://3dbrew.org/wiki/FS:ControlArchive 3DS], this has to be used after writing to savedata for the changes to take affect.&lt;br /&gt;
&lt;br /&gt;
== GetFreeSpaceSize ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total free space with this FS.&lt;br /&gt;
&lt;br /&gt;
== GetTotalSpaceSize ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total space available with this FS(free+used).&lt;br /&gt;
&lt;br /&gt;
== CleanDirectoryRecursively ==&lt;br /&gt;
Takes a type-0x9 input buffer for the path and clears the contents of the directory specified in the path.&lt;br /&gt;
&lt;br /&gt;
= IDirectory =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IDirectory&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetEntryCount]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Read ==&lt;br /&gt;
Takes a type-0x6 output buffer and an input u64. Unknown what the u64 is for, doesn&#039;t(?) seem to affect output. Returns an output u64(?) for the total number of read entries, this is 0 when no more entries are available.&lt;br /&gt;
&lt;br /&gt;
The output buffer contains the read array of [[#DirectoryEntry]]. This doesn&#039;t include entries for &amp;quot;.&amp;quot; and &amp;quot;..&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== GetEntryCount ==&lt;br /&gt;
Returns an u64 for the total number of readable entries.&lt;br /&gt;
&lt;br /&gt;
= DirectoryEntry =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x300 || Path&lt;br /&gt;
|-&lt;br /&gt;
| 0x300 || 0x4 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x304 || 0x1 || [[#DirectoryEntryType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x305 || 0x3 || Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x308 || 0x8? || Filesize, 0 for directories.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DirectoryEntryType =&lt;br /&gt;
s8 type: 0 = directory, 1 = file.&lt;br /&gt;
&lt;br /&gt;
= IFile =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IFile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Read&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Write&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Flush&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSize&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetSize&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [4.0.0+] OperateRange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ISaveDataInfoReader =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::ISaveDataInfoReader&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ReadSaveDataInfo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ReadSaveDataInfo ==&lt;br /&gt;
Takes a type-0x6 output buffer. Returns an output u64 for total output entries. This buffer contains an array of [[#SaveDataInfo]].&lt;br /&gt;
&lt;br /&gt;
This is used to get [[#SaveDataInfo]] for all savedata on the system (or all savedata for the current [[#SaveDataSpaceId]]). When used multiple times, it will resume reading where it left off, until no more entries are available (in that case the out u64 is value 0).&lt;br /&gt;
&lt;br /&gt;
= IDeviceOperator =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IDeviceOperator&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsSdCardInserted&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetSdCardSpeedMode&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [2.0.0+] GetSdCardCid&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] GetSdCardUserAreaSize&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [2.0.0+] GetSdCardProtectedAreaSize&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [2.0.0+] GetAndClearSdCardErrorInfo&lt;br /&gt;
|-&lt;br /&gt;
| 100 || GetMmcCid&lt;br /&gt;
|-&lt;br /&gt;
| 101 || GetMmcSpeedMode&lt;br /&gt;
|-&lt;br /&gt;
| 110 || EraseMmc&lt;br /&gt;
|-&lt;br /&gt;
| 111 || GetMmcPartitionSize&lt;br /&gt;
|-&lt;br /&gt;
| 112 || [2.0.0+] GetMmcPatrolCount&lt;br /&gt;
|-&lt;br /&gt;
| 113 || [2.0.0+] GetAndClearMmcErrorInfo&lt;br /&gt;
|-&lt;br /&gt;
| 114 || [2.0.0+] GetMmcExtendedCsd&lt;br /&gt;
|-&lt;br /&gt;
| 115 || [4.0.0+] SuspendMmcPatrol&lt;br /&gt;
|-&lt;br /&gt;
| 116 || [4.0.0+] ResumeMmcPatrol&lt;br /&gt;
|-&lt;br /&gt;
| 200 || IsGameCardInserted&lt;br /&gt;
|-&lt;br /&gt;
| 201 || EraseGameCard&lt;br /&gt;
|-&lt;br /&gt;
| 202 || GetGameCardHandle&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#GetGameCardUpdatePartitionInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || FinalizeGameCardDriver&lt;br /&gt;
|-&lt;br /&gt;
| 205 || GetGameCardAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 206 || GetGameCardDeviceCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 207 || GetGameCardAsicInfo&lt;br /&gt;
|-&lt;br /&gt;
| 208 || GetGameCardIdSet&lt;br /&gt;
|-&lt;br /&gt;
| 209 || WriteToGameCard&lt;br /&gt;
|-&lt;br /&gt;
| 210 || SetVerifyWriteEnalbleFlag&lt;br /&gt;
|-&lt;br /&gt;
| 211 || GetGameCardImageHash&lt;br /&gt;
|-&lt;br /&gt;
| 212 || [2.0.0+] GetGameCardErrorInfo&lt;br /&gt;
|-&lt;br /&gt;
| 213 || [2.0.0+] EraseAndWriteParamDirectly&lt;br /&gt;
|-&lt;br /&gt;
| 214 || [2.0.0+] ReadParamDirectly&lt;br /&gt;
|-&lt;br /&gt;
| 215 || [2.0.0+] ForceEraseGameCard&lt;br /&gt;
|-&lt;br /&gt;
| 216 || [2.0.0+] GetGameCardErrorInfo&lt;br /&gt;
|-&lt;br /&gt;
| 217 || [2.1.0+] GetGameCardErrorReportInfo&lt;br /&gt;
|-&lt;br /&gt;
| 218 || [3.0.0+] GetGameCardDeviceId&lt;br /&gt;
|-&lt;br /&gt;
| 300 || SetSpeedEmulationMode&lt;br /&gt;
|-&lt;br /&gt;
| 301 || GetSpeedEmulationMode&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [5.0.0+] SuspendSdmmcControl&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [5.0.0+] ResumeSdmmcControl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetGameCardUpdatePartitionInfo ==&lt;br /&gt;
Returns a titleID and the title-version for it.&lt;br /&gt;
&lt;br /&gt;
* Output u32 with ARMS-gamecard: title-version v131162. This is the title-version for [[2.1.0]], which is the sysupdate included with this gamecard. Launch-day gamecards return title-version v450.&lt;br /&gt;
* Output u64 with ARMS-gamecard: titleID 0100000000000816.&lt;br /&gt;
&lt;br /&gt;
[[NS_Services|NS]] appears to only use this with [[Content_Manager_services#GetTitleIdInfo]] and [[Content_Manager_services#GetUpdateTitleList]] with storageid=nandsys, for checking whether a sysupdate is required.&lt;br /&gt;
&lt;br /&gt;
= IEventNotifier =&lt;br /&gt;
This is &amp;quot;nn::fssrv::sf::IEventNotifier&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FileSystemType =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Logo&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ContentControl&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ContentManual&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ContentMeta&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContentData&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ApplicationPackage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= StorageId =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Host&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GameCard&lt;br /&gt;
|-&lt;br /&gt;
| 3 || NandSystem&lt;br /&gt;
|-&lt;br /&gt;
| 4 || NandUser&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SdCard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ContentStorageId =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NandSystem&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NandUser&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SdCard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SaveDataSpaceId =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NandSystem&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NandUser&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SdCard&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] TemporaryStorage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Determines the storage where the savedata is stored.&lt;br /&gt;
&lt;br /&gt;
= SaveDataType =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SystemSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SaveData&lt;br /&gt;
|-&lt;br /&gt;
| 2 || BcatDeliveryCacheStorage&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceSaveData&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [3.0.0+] TemporaryStorage&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [3.0.0+] CacheStorage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ContentPath =&lt;br /&gt;
These are the 0x300 paths to NCA files for the various filesystems FS can access, beginning with @. They&#039;re passed via X descriptors, and returned via various [[Location Resolver services|ncm/lr]] commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Path || Notes&lt;br /&gt;
|-&lt;br /&gt;
| @SystemContent ||&lt;br /&gt;
|- &lt;br /&gt;
| @UserContent ||&lt;br /&gt;
|-&lt;br /&gt;
| @SdCardContent ||&lt;br /&gt;
|-&lt;br /&gt;
| @CalibFile ||&lt;br /&gt;
|-&lt;br /&gt;
| @Safe ||&lt;br /&gt;
|-&lt;br /&gt;
| @User ||&lt;br /&gt;
|-&lt;br /&gt;
| @System ||&lt;br /&gt;
|-&lt;br /&gt;
| @Sdcard ||&lt;br /&gt;
|-&lt;br /&gt;
| @Host ||&lt;br /&gt;
|-&lt;br /&gt;
| @GcApp || Gamecard App partition (Partition 2)&lt;br /&gt;
|-&lt;br /&gt;
| @GcS00000001 || Gamecard Contents.&lt;br /&gt;
|-&lt;br /&gt;
| @upp || Gamecard update partition (Partition 0)&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] @RegUpdate || Registered update partition&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Save Struct =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0 for SystemSaveData. SaveData: 0 can be used for accessing the savedata associated with the current FS session titleID, otherwise when set this is the titleID associated with the savedata to access.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| userID for user-specific savedata(saveuser) when set, otherwise when zero this indicates the common savedata(savecommon). This is loaded from [[Account_services]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| u64 [[Flash_Filesystem|saveID]]. 0 for SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 0x7&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0 for SystemSaveData/SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0 for SystemSaveData/SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0 for SystemSaveData/SaveData.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Total size is 0x40-bytes.&lt;br /&gt;
&lt;br /&gt;
For DeviceSaveData, this struct is all-zero except for the [[#SaveDataType]] field.&lt;br /&gt;
&lt;br /&gt;
= SaveCreate Struct =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[Savegames|IVFC]] level4 size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Same as offset 0x0 normally? Hard-coded to 0x80000 for BcatSaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4000 for SystemSaveData/SaveData/DeviceSaveData/BcatSaveData. [[Savegames|IVFC]] level4 block-size in bytes?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Official user-processes only uses 0 here for SystemSaveData/SaveData. For the dedicated save-creation code with SaveData/DeviceSaveData, this value comes from an input param with official user-processes. For BcatSaveData, this is the hard-coded [[Title_list|titleID]] of the bcat-sysmodule.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Written using an input param for official user-processes. Hard-coded 0 for BcatSaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x1&lt;br /&gt;
| Official user-processes only uses 0 here for SystemSaveData, 1 for SaveData/DeviceSaveData/BcatSaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0 for SystemSaveData/SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x26&lt;br /&gt;
| 0x1A&lt;br /&gt;
| Not initialized for SystemSaveData/SaveData.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Total size is 0x40-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceSaveData =&lt;br /&gt;
This is accessed using the same commands for SaveData with the same input u8, the only difference compared to SaveData is the Save-struct.&lt;br /&gt;
&lt;br /&gt;
= BcatSaveData =&lt;br /&gt;
This is accessed using the same commands for SaveData with the same input u8. The Save-struct is the same as DeviceSaveData, except that the titleID field is set to &amp;lt;input titleID&amp;gt;. See above regarding SaveCreate-struct.&lt;br /&gt;
&lt;br /&gt;
The 0x10-byte struct passed to [[#CreateSaveDataFileSystem]] has the first 0x5-bytes set to all-zero.&lt;br /&gt;
&lt;br /&gt;
= SaveDataInfo =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown saveID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataSpaceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#SaveDataType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x6&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| userID&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| saveID, 0 for regular SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Application titleID, for regular SaveData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x8&lt;br /&gt;
| Raw saveimage size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x28&lt;br /&gt;
| Unknown. Usually zeros?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a 0x60-byte struct.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Joel16</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Homebrew_Applications&amp;diff=4702</id>
		<title>Homebrew Applications</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Homebrew_Applications&amp;diff=4702"/>
		<updated>2018-05-28T00:45:23Z</updated>

		<summary type="html">&lt;p&gt;Joel16: /* Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installing ==&lt;br /&gt;
Applications are installed by copying the necessary files directly to the &amp;lt;code&amp;gt;switch/&amp;lt;/code&amp;gt; folder in the root of the SD card, or in a subdirectory of &amp;lt;code&amp;gt;switch/&amp;lt;/code&amp;gt;, in which case said subfolder must be named identically to its executable. Normally the former should be used. The latter should be used if the application uses anything from FS current-working-directory (directory where the NRO is located). Applications come with the following:&lt;br /&gt;
* &amp;lt;code&amp;gt;[appname].nro&amp;lt;/code&amp;gt;: The executable.&lt;br /&gt;
&lt;br /&gt;
The Homebrew Menu will scan the SD card for all &amp;lt;code&amp;gt;.nro&amp;lt;/code&amp;gt; files, but will only display an icon for those who have one according to the format described above. You can also freely navigate the filesystem to select an application.&lt;br /&gt;
&lt;br /&gt;
Icon/metadata for each application is loaded from data embedded in the NRO (custom assets section), if available.&lt;br /&gt;
&lt;br /&gt;
== List ==&lt;br /&gt;
&lt;br /&gt;
=== Launchers ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/switchbrew/nx-hbmenu Homebrew Menu]&lt;br /&gt;
| Run homebrew on your Switch!&lt;br /&gt;
| [[User:Yellows8|Yellows8]], [[User:plutooo|plutooo]]&lt;br /&gt;
| [https://github.com/switchbrew/nx-hbmenu/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/yellows8/switch_sysmodule switch_sysmodule]&lt;br /&gt;
| RPC over USB, etc. Originally a sysmodule, however this can also be used as a regular application.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pynx&lt;br /&gt;
| Allows you to run homebrew applications written in Python on the Switch.&lt;br /&gt;
| [[User:AileenLumina|AileenLumina]]&lt;br /&gt;
| [https://github.com/nx-python/Pynx/releases Here]&lt;br /&gt;
| [https://github.com/nx-python/Pynx/ Yes]&lt;br /&gt;
| 2018-03-19&lt;br /&gt;
|-&lt;br /&gt;
| Switch Brainfuck&lt;br /&gt;
| A brainfuck interpreter for the Nintendo Switch.&lt;br /&gt;
| TheKgg&lt;br /&gt;
| [https://github.com/TheKgg/switch-brainfuck/releases Here]&lt;br /&gt;
| [https://github.com/TheKgg/switch-brainfuck Yes]&lt;br /&gt;
| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| ScreenTester-NX&lt;br /&gt;
| Detect and repair dead/stuck pixels&lt;br /&gt;
| Marice&lt;br /&gt;
| [https://github.com/Marice/ScreenTester-NX/releases Here]&lt;br /&gt;
| [https://github.com/Marice/ScreenTester-NX/ Yes]&lt;br /&gt;
| 2018-05-19&lt;br /&gt;
|-&lt;br /&gt;
| NX-Shell&lt;br /&gt;
| Multipurpose File Manager&lt;br /&gt;
| Joel16&lt;br /&gt;
| [https://github.com/joel16/NX-Shell/releases Here]&lt;br /&gt;
| [https://github.com/joel16/NX-Shell/ Yes]&lt;br /&gt;
| 2018-05-26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game Engines ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name &lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description &lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source &lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated &lt;br /&gt;
|-&lt;br /&gt;
| Duke Nukem 3D&lt;br /&gt;
| EDuke32 is an awesome, free homebrew game engine and source port of the classic PC first person shooter Duke Nukem 3D&lt;br /&gt;
| Cpasjuste&lt;br /&gt;
| [https://github.com/Cpasjuste/eduke32/releases here]&lt;br /&gt;
| [https://github.com/Cpasjuste/eduke32 Yes]&lt;br /&gt;
| 2018-04-29&lt;br /&gt;
|-&lt;br /&gt;
| LovePotion&lt;br /&gt;
| [https://love2d.org Love2D] for Nintendo Switch&lt;br /&gt;
| TurtleP&lt;br /&gt;
| [https://github.com/TurtleP/LovePotion/releases here]&lt;br /&gt;
| [https://github.com/TurtleP/LovePotion/tree/switch Yes]&lt;br /&gt;
| 2018-05-14&lt;br /&gt;
|-&lt;br /&gt;
| [https://blog.easyrpg.org/2018/03/easyrpg-player-now-available-as-nintendo-switch-homebrew/ EasyRPG Player]&lt;br /&gt;
| RPG Maker 2000/2003 game interpreter&lt;br /&gt;
| Rinnegatamante &amp;amp; EasyRPG team&lt;br /&gt;
| [https://easyrpg.org/player/downloads/ here]&lt;br /&gt;
| [https://github.com/EasyRPG/Player Yes]&lt;br /&gt;
| 2018-05-15&lt;br /&gt;
|-&lt;br /&gt;
| Solarus Engine&lt;br /&gt;
| Zelda-like Action-RPG game engine&lt;br /&gt;
| [[User:carstene1ns|carstene1ns]]&lt;br /&gt;
| [https://f4ke.de/dev/switch/ here]&lt;br /&gt;
| [https://github.com/carstene1ns/solarus-engine Yes]&lt;br /&gt;
| 2018-05-20&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| Useless Homebrew&lt;br /&gt;
| A &amp;quot;useless machine&amp;quot;-like software, ported from DS&lt;br /&gt;
| Tcm0, Rydian (DS)&lt;br /&gt;
|&lt;br /&gt;
| Yes&lt;br /&gt;
| 2018-03-03&lt;br /&gt;
|-&lt;br /&gt;
| Space Game NX&lt;br /&gt;
| Space game is a graphical shooter game on the Switch ported from Wii U! &lt;br /&gt;
| vgmoose&lt;br /&gt;
| [https://github.com/vgmoose/spacenx/releases Here]&lt;br /&gt;
| [https://github.com/vgmoose/spacenx/ Yes]&lt;br /&gt;
| 2018-02-19&lt;br /&gt;
|-&lt;br /&gt;
| Pixel-Painter&lt;br /&gt;
| A simple drawing homebrew&lt;br /&gt;
| 8BitWonder&lt;br /&gt;
| [https://github.com/16BitWonder/Pixel-Painter-Switch/releases Here]&lt;br /&gt;
| [https://github.com/16BitWonder/Pixel-Painter-Switch Yes]&lt;br /&gt;
| 2018-02-21&lt;br /&gt;
|-&lt;br /&gt;
| Hamsters NX&lt;br /&gt;
| A breeding of Hamsters game in text mode.&lt;br /&gt;
| Cid2mizard&lt;br /&gt;
| [https://github.com/Cid2mizard/Hamsters_NX/releases Here]&lt;br /&gt;
| [https://github.com/Cid2mizard/Hamsters_NX Yes]&lt;br /&gt;
| 2018-02-28&lt;br /&gt;
|-&lt;br /&gt;
| OpenBOR&lt;br /&gt;
| OpenBOR is the ultimate 2D gaming engine with over 10+ years of active development behind it. With OpenBOR you can build anything from simple button mashers to elaborate projects rivaling the most lavish professional offerings. Download one of the dozens of ready to play game modules available here, or grab the development kit and start up one of your own!&lt;br /&gt;
| cpasjuste&lt;br /&gt;
| [https://github.com/Cpasjuste/openbor/releases Here]&lt;br /&gt;
| [https://github.com/Cpasjuste/openbor Yes]&lt;br /&gt;
| 2018-03-18&lt;br /&gt;
|-&lt;br /&gt;
| TicTacToe&lt;br /&gt;
| A Tic Tac Toe implementation for Switch.&lt;br /&gt;
| SH3RLOCK&lt;br /&gt;
| [https://sh3rlock.ch/ttt.nro Here]&lt;br /&gt;
| [https://sh3rlock.ch/ttt.zip Yes]&lt;br /&gt;
| 2018-02-23&lt;br /&gt;
|-&lt;br /&gt;
| SDLLopan&lt;br /&gt;
| A classic remake of Linux Lopan (a Mahjong solitaire clone) by Dave Ashley.&lt;br /&gt;
| nop90&lt;br /&gt;
| [https://github.com/Nop90-Switch/SDLLopan-SWITCH/releases Here]&lt;br /&gt;
| [https://github.com/Nop90-Switch/SDLLopan-SWITCH Yes]&lt;br /&gt;
| 2018-03-02&lt;br /&gt;
|-&lt;br /&gt;
| Tetriswitch&lt;br /&gt;
| A Tetris clone for Nintendo Switch.&lt;br /&gt;
| Ryuzaki_MrL&lt;br /&gt;
| [https://github.com/Ryuzaki-MrL/tetriswitch/releases Here]&lt;br /&gt;
| [https://github.com/Ryuzaki-MrL/tetriswitch Yes]&lt;br /&gt;
| 2018-03-13&lt;br /&gt;
|-&lt;br /&gt;
| Snake&lt;br /&gt;
| A minimalistic Snake clone for Switch made with LovePotion.&lt;br /&gt;
| Shrike&lt;br /&gt;
| [https://github.com/Ryuzaki-MrL/tetriswitch/releases Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-10&lt;br /&gt;
|-&lt;br /&gt;
| Meritous&lt;br /&gt;
| Top View Dungeon Game&lt;br /&gt;
| nop90&lt;br /&gt;
| [https://github.com/Nop90-Switch/Meritous-Switch/releases Here]&lt;br /&gt;
| [https://github.com/Nop90-Switch/Meritous-Switch Yes]&lt;br /&gt;
| 2018-03-17&lt;br /&gt;
|-&lt;br /&gt;
| REminiscence&lt;br /&gt;
| REminiscence is a re-implementation of the engine used in the game Flashback made by Delphine Software and released in 1992.&lt;br /&gt;
| Cpasjuste&lt;br /&gt;
| [https://github.com/Cpasjuste/REminiscence/releases Here]&lt;br /&gt;
| [https://github.com/Cpasjuste/REminiscence Yes]&lt;br /&gt;
| 2018-03-28&lt;br /&gt;
|-&lt;br /&gt;
| Super Methane Brothers&lt;br /&gt;
| An elimination platformer remake similar to Bubble Bobble (originally released for AMIGA in 1993). Blast baddies with your methane gun and survive 100 floors in the tower of time.&lt;br /&gt;
| [[User:carstene1ns|carstene1ns]]&lt;br /&gt;
| [https://f4ke.de/dev/switch/ Here]&lt;br /&gt;
| [https://github.com/carstene1ns/super-methane-brothers Yes]&lt;br /&gt;
| 2018-05-08&lt;br /&gt;
|-&lt;br /&gt;
| Switch Pong&lt;br /&gt;
| A port of pong for the Nintendo Switch&lt;br /&gt;
| TheKgg&lt;br /&gt;
| [https://github.com/TheKgg/switch-pong/releases Here]&lt;br /&gt;
| [https://github.com/TheKgg/switch-pong Yes]&lt;br /&gt;
| 2018-04-20&lt;br /&gt;
|-&lt;br /&gt;
| NXEngine&lt;br /&gt;
| Reimplementation of Cave Story / Doukutsu Monogatari, a Japanese freeware PC side-scrolling platformer game from 2004.&lt;br /&gt;
| [[User:carstene1ns|carstene1ns]]&lt;br /&gt;
| [https://f4ke.de/dev/switch/ Here]&lt;br /&gt;
| [https://github.com/carstene1ns/nxengine-evo/tree/switch-port Yes]&lt;br /&gt;
| 2018-05-20&lt;br /&gt;
|-&lt;br /&gt;
| 2048&lt;br /&gt;
| 2048 port for Switch homebrew&lt;br /&gt;
| Bernardo Giordano&lt;br /&gt;
| [https://github.com/BernardoGiordano/2048/releases Here]&lt;br /&gt;
| [https://github.com/BernardoGiordano/2048 Yes]&lt;br /&gt;
| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| Pickr&lt;br /&gt;
| Pickr webgame port for Switch homebrew&lt;br /&gt;
| Bernardo Giordano&lt;br /&gt;
| [https://github.com/BernardoGiordano/Pickr/releases Here]&lt;br /&gt;
| [https://github.com/BernardoGiordano/Pickr Yes]&lt;br /&gt;
| 2018-04-16&lt;br /&gt;
|-&lt;br /&gt;
| OpenTyrian&lt;br /&gt;
| OpenTyrian is a port of the DOS shoot-em-up Tyrian, which is an arcade-style vertical scrolling shooter.&lt;br /&gt;
| felixrg&lt;br /&gt;
| [https://github.com/felixrg/opentyrian/releases Here]&lt;br /&gt;
| [https://github.com/felixrg/opentyrian Yes]&lt;br /&gt;
| 2018-05-19&lt;br /&gt;
|-&lt;br /&gt;
| SDLPoP&lt;br /&gt;
| An open-source port of Prince of Persia, based on the disassembly of the DOS version.&lt;br /&gt;
| usineur&lt;br /&gt;
| [https://github.com/usineur/SDLPoP/releases Here]&lt;br /&gt;
| [https://github.com/usineur/SDLPoP Yes]&lt;br /&gt;
| 2018-05-14&lt;br /&gt;
|-&lt;br /&gt;
| Cannonball-NX&lt;br /&gt;
| An Enhanced OutRun Engine&lt;br /&gt;
| lantus/MVG&lt;br /&gt;
| [https://github.com/lantus/cannonball-nx/releases Here]&lt;br /&gt;
| [https://github.com/lantus/cannonball-nx Yes]&lt;br /&gt;
| 2018-05-23&lt;br /&gt;
|-&lt;br /&gt;
| Postal-NX&lt;br /&gt;
| An isometric top-down shooter video game from 1997&lt;br /&gt;
| lantus/MVG&lt;br /&gt;
| [https://github.com/lantus/postal-nx/releases Here]&lt;br /&gt;
| [https://github.com/lantus/postal-nx Yes]&lt;br /&gt;
| 2018-05-25&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emulators ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| ScummVM&lt;br /&gt;
| ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games...&lt;br /&gt;
| Cpasjuste&lt;br /&gt;
| [https://github.com/Cpasjuste/scummvm/releases Here]&lt;br /&gt;
| [https://github.com/Cpasjuste/scummvm/tree/switch Yes]&lt;br /&gt;
| 2018-03-01&lt;br /&gt;
|-&lt;br /&gt;
| pFBA&lt;br /&gt;
| A port of final burn alpha to multiple platforms&lt;br /&gt;
| Cpasjuste&lt;br /&gt;
| [https://github.com/Cpasjuste/pfba/releases Here]&lt;br /&gt;
| [https://github.com/Cpasjuste/pfba Yes]&lt;br /&gt;
| 2018-02-20&lt;br /&gt;
|-&lt;br /&gt;
| VBA Next Switch&lt;br /&gt;
| A port of VBA Next, the retroarch version of [https://github.com/libretro/vba-next VBA-M]&lt;br /&gt;
| RSDuck&lt;br /&gt;
| [https://github.com/RSDuck/vba-next-switch/releases Here]&lt;br /&gt;
| [https://github.com/RSDuck/vba-next-switch Yes]&lt;br /&gt;
| 2018-05-22&lt;br /&gt;
|-&lt;br /&gt;
| CHIP8-NX&lt;br /&gt;
| CHIP8 emulator&lt;br /&gt;
| Marice&lt;br /&gt;
| [https://github.com/Marice/CHIP8-NX/releases Here]&lt;br /&gt;
| [https://github.com/Marice/CHIP8-NX Yes]&lt;br /&gt;
| 2018-05-&lt;br /&gt;
|-&lt;br /&gt;
| LaiNESwitch&lt;br /&gt;
| Compact, cycle-accurate NES emulator in ~1000 lines of C++.&lt;br /&gt;
| Kevoot&lt;br /&gt;
| [https://github.com/Kevoot/LaiNESwitch/releases Here]&lt;br /&gt;
| [https://github.com/Kevoot/LaiNESwitch Yes]&lt;br /&gt;
| 2018-05-24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Title managers===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Save managers===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| Checkpoint&lt;br /&gt;
| Fast and simple save manager for 3DS and Switch written in C++.&lt;br /&gt;
| Bernardo Giordano&lt;br /&gt;
| [https://github.com/BernardoGiordano/Checkpoint/releases/latest Here]&lt;br /&gt;
| [https://github.com/BernardoGiordano/Checkpoint Yes]&lt;br /&gt;
| 2018-05-14&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File servers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| Ftpd&lt;br /&gt;
| A port of ftpd for 3DS.&lt;br /&gt;
| mtheall, TuxSH, WinterMute&lt;br /&gt;
| [https://github.com/WinterMute/ftpd/releases/latest Here]&lt;br /&gt;
| [https://github.com/TuxSH/ftpd/tree/switch_pr Yes]&lt;br /&gt;
| 2018-02-27&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Demos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| 34c3-demo&lt;br /&gt;
| Demo from the 34c3 for Homebrew on the Switch.&lt;br /&gt;
| [[User:plutoo|plutoo]]&lt;br /&gt;
| [https://github.com/switchbrew/34c3-demo Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2018-02-19&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Joel16</name></author>
	</entry>
</feed>