https://switchbrew.org/w/api.php?action=feedcontributions&user=Fincs&feedformat=atomNintendo Switch Brew - User contributions [en]2024-03-28T18:20:45ZUser contributionsMediaWiki 1.35.8https://switchbrew.org/w/index.php?title=Homebrew_ABI&diff=11973Homebrew ABI2022-10-12T17:35:22Z<p>Fincs: Added SyscallAvailableHint2</p>
<hr />
<div>=== Entrypoint ===<br />
Entrypoint is at binary_ptr+0. At this offset, there is a branch instruction that jumps past the NRO0 header. This is for (.text) file format polyglot compatibility with NSO0.<br />
<br />
Every application should clean itself up before returning to loader.<br />
<br />
This includes tasks like:<br />
* Not leaking handles<br />
* Resetting MemoryState<br />
* No leftover threads running in the background<br />
<br />
Original LR given to entrypoint should be returned to, X0 contains an error code. If original LR is NULL, svcExitProcess should be used.<br />
<br />
=== Entrypoint Arguments ===<br />
'''NSO0:''' the system executes binary_ptr+0 with X0=NULL, X1=main_thread_handle.<br />
<br />
'''NRO0:''' the homebrew loader puts X0=loader_config_ptr, X1=0xFFFFFFFFFFFFFFFF.<br />
<br />
When X0 is non-zero and X1 is not 0xFFFFFFFFFFFFFFFF, the application must handle userland [[SVC#Exception_Handling|exceptions]] (with the same entrypoint args described there). This must be done without corrupting registers for this (x8..x29).<br />
<br />
The loader should forward exceptions to the mapped NRO by just jumping to the NRO entrypoint, without the above register corruption. When the NRO is not mapped the loader can run: <code>svcReturnFromException(0xf801); while(1);</code><br />
<br />
=== Loader Config ===<br />
Loader config allows overriding functionality to workaround limitations in a limited homebrew environment.<br />
<br />
It is an array of tuples:<br />
struct LoaderConfig {<br />
LoaderConfigEntry Entries[];<br />
};<br />
<br />
Each entry is key-value pair:<br />
<br />
struct LoaderConfigEntry {<br />
u32 Key;<br />
u32 Flags;<br />
u64 Value[2];<br />
};<br />
<br />
enum LoaderConfigFlags {<br />
IsMandatory = BIT(0),<br />
};<br />
<br />
=== Loader Config Keys ===<br />
A loader key can be marked as mandatory or not in its <code>Flags</code> field.<br />
<br />
If a key is marked as mandatory it means that the application cannot safely ignore it.<br />
<br />
Thus if said key is not recognized by the application, it should exit with <code>result_code=346 | ((100 + key) << 9);</code>, as the default behaviour may be unsafe.<br />
<br />
If a key that is required is not found (for example with an outdated loader), use <code>result_code=346 | ((200 + key) << 9);</code>.<br />
<br />
If there is some error encountered while validating an entry's values, use <code>result_code = 346 | ((300 + key) << 9);</code>.<br />
<br />
* 0: [[#EndOfList]]: Must be present<br />
<br />
* 1: [[#MainThreadHandle]]: Must be present<br />
<br />
* 2: [[#NextLoadPath]]<br />
<br />
* 3: [[#OverrideHeap]]: If present, must not be ignored<br />
<br />
* 4: [[#OverrideService]]<br />
<br />
* 5: [[#Argv]]<br />
<br />
* 6: [[#SyscallAvailableHint]]<br />
<br />
* 7: [[#AppletType]]: Must be present<br />
<br />
* 8: [[#AppletWorkaround]]: If present, must not be ignored<br />
<br />
* 9: [[#Reserved9]]<br />
<br />
* 10: [[#ProcessHandle]]<br />
<br />
* 11: [[#LastLoadResult]]<br />
<br />
* 12: [[#AllocPages]]<br />
<br />
* 13: [[#LockRegion]]: If present, must not be ignored<br />
<br />
* 14: [[#RandomSeed]]<br />
<br />
* 15: [[#UserIdStorage]]<br />
<br />
* 16: [[#HosVersion]]<br />
<br />
* 17: [[#SyscallAvailableHint2]]<br />
<br />
==== EndOfList ====<br />
EndOfList is the final entry in the LoaderConfig. It also provides optional human readable information about the Homebrew loader.<br />
<br />
* '''Key:''' 0<br />
* '''Value[0]:''' Pointer to loader information string, or zero if not present.<br />
* '''Value[1]:''' Size in bytes of the information string, or zero if not present.<br />
<br />
==== MainThreadHandle ====<br />
This is the handle to the thread that is executing the entrypoint. Required for mutex to function.<br />
<br />
* '''Key:''' 1<br />
* '''Value[0]:''' Handle to the main thread.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
* '''DefaultBehavior:''' Use main thread handle from entry function arguments.<br />
<br />
==== NextLoadPath ====<br />
Homebrew menu uses this pointer to write the path of next NRO to load, before returning back to Homebrew loader.<br />
<br />
* '''Key:''' 2<br />
* '''Value[0]:''' Pointer to buffer of size 512. NRO file path, should start with "sdmc:/".<br />
* '''Value[1]:''' Pointer to buffer of size 2048. Argv string to boot NRO with.<br />
<br />
==== OverrideHeap ====<br />
If the NRO loader has reserved some space in the heap for itself, the application must not manipulate the heap. If an [[#AllocPages]] key is present, the region this points to should be accepted by <code>free_pages</code>.<br />
<br />
* '''Key:''' 3<br />
* '''Value[0]:''' Base address of heap. Must be MemoryType 4, 5, or 9 with all reference counts being zero.<br />
* '''Value[1]:''' Size of heap.<br />
* '''DefaultBehavior:''' Allocates heap using svcSetHeapSize instead.<br />
<br />
==== OverrideService ====<br />
The NRO loader should be able to steal handles from more priliveged processes. In this case, homebrew should use this handle instead of the normal one.<br />
<br />
Homebrew should allow at least 32 service overrides.<br />
<br />
Note: Overridden service handles should not be converted to domains or closed. If they are domain, they should be converted to sessions before passed to the homebrew application.<br />
<br />
Note: For services that authenticate with pid, the app should not attempt re-authentication with an overridden handle.<br />
<br />
Note: There needs be special handling for the file system service. If the original fsp-srv handle doesn't allow MountSdcard, it shall fallback to the stolen one, etc etc.<br />
<br />
* '''Key:''' 4<br />
* '''Value[0]:''' Name of service, same format as for sm.<br />
* '''Value[1]:''' Lower 32-bits: Service handle<br />
* '''DefaultBehavior:''' Fetches service from "sm:" named port.<br />
<br />
==== Argv ====<br />
The NRO loader should be able to send argv.<br />
<br />
* '''Key:''' 5<br />
* '''Value[0]:''' Reserved/should be zero.<br />
* '''Value[1]:''' Argv string pointer.<br />
* '''DefaultBehavior:''' Setting (argc == 1, argv[0] == "", argv[1] == NULL), or argv parsed in NSO0 fashion.<br />
<br />
==== SyscallAvailableHint ====<br />
Homebrew doesn't know if any privileged syscalls are available.<br />
<br />
This entry allows loader to give hints about having access to rare syscalls (such as JIT).<br />
<br />
* '''Key:''' 6<br />
* '''Value[0]:''' 64-bit mask for the 0-0x3F SVC range. n:th bit set means SVC is accessible.<br />
* '''Value[1]:''' 64-bit mask for the 0x40-0x7F SVC range.<br />
* '''DefaultBehavior:''' If NSO0, assume kernelhax thus all rare syscalls are allowed. If NRO0, assume all rare syscalls are inaccessible.<br />
<br />
==== AppletType ====<br />
Specifies the [[AM_services|AM]] AppletType, used for selecting which Open*Proxy command to use.<br />
<br />
* '''Key:''' 7<br />
* '''Value[0]:''' AppletType<br />
* '''Value[1]:''' AppletFlags<br />
<br />
AppletFlags ApplicationOverride: Use AppletType_Application instead of AppletType_SystemApplication, only when AppletType is SystemApplication. This should only be handled when AppletType_Application is properly supported where applet may have been previously initialized in the context of the current process, for AppletType_Application. This avoids breaking backwards-compatibility with apps which don't support AppletType_Application as previously described.<br />
<br />
enum LoaderConfigAppletType {<br />
LoaderConfigAppletType_Application = 0,<br />
LoaderConfigAppletType_SystemApplet = 1,<br />
LoaderConfigAppletType_LibraryApplet = 2,<br />
LoaderConfigAppletType_OverlayApplet = 3,<br />
LoaderConfigAppletType_SystemApplication = 4,<br />
};<br />
<br />
enum LoaderConfigAppletFlags {<br />
LoaderConfigAppletFlags_ApplicationOverride = BIT(0),<br />
};<br />
<br />
==== AppletWorkaround ====<br />
This flag means that AM services is broken, and must not be used.<br />
<br />
* '''Key:''' 8<br />
* '''Value[0]:''' AppletResourceUserId<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== Reserved9 ====<br />
This key has been deleted/reserved for future use.<br />
<br />
==== ProcessHandle ====<br />
Handle to self process.<br />
<br />
* '''Key:''' 10<br />
* '''Value[0]:''' Process handle.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== LastLoadResult ====<br />
This is used to feed the last NRO error code back to the Homebrew Menu so that an error dialog can be displayed.<br />
<br />
* '''Key:''' 11<br />
* '''Value[0]:''' Result.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== AllocPages ====<br />
This key is used to provide function pointers for a memory allocator. If an [[#OverrideHeap]] key is present and this key is recognized, <code>free_pages</code> may be called with the address of the overridden heap as an argument. There may not be more than one [[#AllocPages]] key.<br />
<br />
If this key is recognized, applications should not attempt to use heap regions without first obtaining them through <code>alloc_pages</code>.<br />
If applications should not manage the heap themselves, an [[#OverrideHeap]] key should be passed in case this key is not recognized.<br />
If an [[#OverrideHeap]] key is not present, applications may attempt to manage the heap themselves. Any regions of memory within the heap that would be unsafe for an application to overwrite (such as the application's own stack) must be specified by a [[#LockRegion]] key.<br />
<br />
:<code>void *alloc_pages(size_t min, size_t max, size_t *actual)</code>:<br />
<br />
::This function shall allocate a page-aligned region of memory with a page-aligned size between <code>min</code> and <code>max</code> bytes (inclusive). If a failure is encountered, it shall return NULL. If <code>actual</code> is not NULL, the value it points to shall be overwritten with the actual size of the allocated region. Regions of memory allocated by this function may be passed to <code>free_pages</code> to mark them as eligible to be allocated again.<br />
<br />
::Regions of memory returned from this function must be read/write type-5 (HEAP) pages with no memory attributes set.<br />
<br />
:<code>bool free_pages(void *pages)</code>:<br />
<br />
::This function shall mark a region of memory either previously returned by <code>alloc_pages</code> or passed by the [[#OverrideHeap]] key as being eligible for future allocations. If any failure is encountered, a value of <code>TRUE</code> shall be returned. Otherwise, a value of <code>FALSE</code> is returned.<br />
<br />
* '''Key''': 12<br />
* '''Value[0]:''' <code>void *(*alloc_pages)(size_t min, size_t max, size_t *actual)</code><br />
* '''Value[1]:''' <code>bool (*free_pages)(void *pages)</code><br />
<br />
==== LockRegion ====<br />
This key is used to hint to the application that a certain region of the heap is unsafe to overwrite. There is no limit on the number of [[#LockRegion]] keys that may be passed. If an application is unable to process the number of regions that are locked, it must exit before overwriting any heap memory. It is an error for this key to be present in the same configuration as an [[#OverrideHeap]] or [[#AllocPages]] key.<br />
<br />
* '''Key''': 13<br />
* '''Value[0]:''' Pointer to region to lock<br />
* '''Value[1]:''' Size of region to lock<br />
<br />
==== RandomSeed ====<br />
This key is used to provide an extra entropy source to the application (in addition to the seed provided by the kernel), allowing it to generate different pseudo-random numbers every time it's launched from within the same process.<br />
<br />
* '''Key''': 14<br />
* '''Value[0]:''' Random data.<br />
* '''Value[1]:''' More random data.<br />
<br />
==== UserIdStorage ====<br />
This key is used to provide persistent storage space for the preselected user id when launching homebrew under an application that has an account selection screen.<br />
<br />
* '''Key''': 15<br />
* '''Value[0]:''' Pointer to a buffer containing enough space (16 bytes) to store a user id.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== HosVersion ====<br />
This key provides information about the currently running version of Horizon OS. This is used in order to determine the compatible ABI/API (both kernel and userland) available to homebrew applications.<br />
<br />
* '''Key''': 16<br />
* '''Value[0]:''' HOS version, formatted using libnx's [https://github.com/switchbrew/libnx/blob/master/nx/include/switch/runtime/hosversion.h#L11 MAKEHOSVERSION macro].<br />
* '''Value[1]:''' Magic value indicating the current implementation of Horizon OS.<br />
<br />
==== SyscallAvailableHint2 ====<br />
Supplement to [[#SyscallAvailableHint]] for the extended SVC range.<br />
<br />
* '''Key:''' 17<br />
* '''Value[0]:''' 64-bit mask for the 0x80-0xBF SVC range. n:th bit set means SVC is accessible.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
* '''DefaultBehavior:''' See [[#SyscallAvailableHint]].<br />
<br />
{| class="wikitable" border="1"<br />
! Value<br />
! Description<br />
|-<br />
| 0<br />
| Unspecified implementation/official stock firmware by Nintendo.<br />
|-<br />
| 0x41544d4f53504852 (ATMOSPHR)<br />
| [https://github.com/Atmosphere-NX/Atmosphere Atmosphère-NX customized firmware].<br />
|}</div>Fincshttps://switchbrew.org/w/index.php?title=Homebrew_Applications&diff=11836Homebrew Applications2022-08-18T14:24:05Z<p>Fincs: Removed unwanted entries</p>
<hr />
<div>== Installing ==<br />
Applications are installed by copying the necessary files directly to the <code>switch/</code> folder in the root of the SD card, or in a subdirectory of <code>switch/</code>, 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:<br />
* <code>[appname].nro</code>: The executable.<br />
<br />
The Homebrew Menu will scan the SD card for all <code>.nro</code> 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.<br />
<br />
Icon/metadata for each application is loaded from data embedded in the NRO (custom assets section), if available.<br />
<br />
== Notes ==<br />
<br />
Distribution and promotion of tools to create or work with commercial game dumps is illegal under DMCA and EUCD provisions. Such tools risk legal repercussions and should not be linked or promoted here.<br />
<br />
== List ==<br />
<br />
=== Launchers ===<br />
<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| [[Homebrew Menu]]<br />
| Run homebrew on your Switch!<br />
| [[User:Yellows8|Yellows8]], plutooo<br />
| [https://github.com/switchbrew/nx-hbmenu/releases Here]<br />
| [https://github.com/switchbrew/nx-hbmenu Yes]<br />
| 2022-07-14<br />
|}<br />
<br />
=== Applications ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| switch_sysmodule<br />
| RPC over USB, etc. Originally a sysmodule, however this can also be used as a regular application.<br />
| [[User:Yellows8|Yellows8]]<br />
| [https://github.com/yellows8/switch_sysmodule/ Here]<br />
| Yes<br />
| 2019-10-17<br />
|-<br />
| pPlay<br />
| A video player for the Nintendo Switch<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/pplay/releases Here]<br />
| [https://github.com/Cpasjuste/pplay/ Yes]<br />
| 2021-03-12<br />
|-<br />
| Switch Lan Play<br />
| Allows you to play Lan supported games online<br />
| spacemeowx2<br />
| [https://github.com/spacemeowx2/switch-lan-play/releases Here]<br />
| [https://github.com/spacemeowx2/switch-lan-play/ Yes]<br />
| 2020-06-21<br />
|-<br />
| Ldn_mitm<br />
| Allows you to play Wireless supported games online (Requires Switch Lan Play)<br />
| spacemeowx2<br />
| [https://github.com/spacemeowx2/ldn_mitm/releases Here]<br />
| [https://github.com/spacemeowx2/ldn_mitm/ Yes]<br />
| 2022-04-16<br />
|-<br />
| PyNX<br />
| Allows you to run homebrew applications written in Python on the Switch. <br />
| AileenLumina<br />
| [https://github.com/nx-python/Pynx/releases Here]<br />
| [https://github.com/nx-python/Pynx/ Yes]<br />
| 2018-08-09<br />
|-<br />
| Switch Brainfuck<br />
| A brainfuck interpreter for the Nintendo Switch.<br />
| TheKgg<br />
| [https://github.com/TheKgg/switch-brainfuck/releases Here]<br />
| [https://github.com/TheKgg/switch-brainfuck Yes]<br />
| 2018-04-21<br />
|-<br />
| ScreenTester-NX<br />
| Detect and repair dead/stuck pixels<br />
| Marice<br />
| [https://github.com/Marice/ScreenTester-NX/releases Here]<br />
| [https://github.com/Marice/ScreenTester-NX/ Yes]<br />
| 2018-05-19<br />
|-<br />
| NX-Shell<br />
| Multipurpose File Manager<br />
| Joel16<br />
| [https://github.com/joel16/NX-Shell/releases Here]<br />
| [https://github.com/joel16/NX-Shell/ Yes]<br />
| 2022-08-07<br />
|-<br />
| Gag Order<br />
| SuperNag remover<br />
| Adubbz<br />
| [https://github.com/Adubbz/Gag-Order/releases Here]<br />
| [https://github.com/Adubbz/Gag-Order Yes]<br />
| 2018-05-30<br />
|-<br />
| In-Home-Switching<br />
| Stream games from PC to the Nintendo Switch<br />
| jakibaki, D-VAmpire<br />
| [https://github.com/jakibaki/In-Home-Switching/releases Here]<br />
| [https://github.com/jakibaki/In-Home-Switching Yes]<br />
| 2018-12-31<br />
|-<br />
| vgedit<br />
| Text editor with touch/controller/usb support<br />
| vgmoose<br />
| [https://github.com/vgmoose/vgedit/releases Here]<br />
| [https://github.com/vgmoose/vgedit Yes]<br />
| 2020-06-14<br />
|-<br />
| OJDS-NX<br />
| Stream controller inputs to your PC to be displayed on Open Joystick Display<br />
| [[User:NicholeMattera|NicholeMattera]]<br />
| [https://git.nicholemattera.com/NicholeMattera/OJDS-NX/releases/latest Here]<br />
| [https://git.nicholemattera.com/NicholeMattera/OJDS-NX Yes]<br />
| 2021-01-30<br />
|-<br />
| SkyNX<br />
| A fork of In-Home-Switching, stream games from PC to the Nintendo Switch<br />
| DevL0rd<br />
| [https://github.com/DevL0rd/SkyNX/release Here]<br />
| [https://github.com/DevL0rd/SkyNX Yes]<br />
| 2022-03-15<br />
|-<br />
| ComicNX<br />
| NSFW comic-browser<br />
| HookedBehemoth<br />
| [https://github.com/HookedBehemoth/ComicNX/releases Here]<br />
| [https://github.com/HookedBehemoth/ComicNX Yes]<br />
| 2019-10-16<br />
|}<br />
<br />
=== Game Engines ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name <br />
! width="50%" | Description <br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source <br />
! width="15%" | Last Updated <br />
|-<br />
| Duke Nukem 3D<br />
| EDuke32 is an awesome, free homebrew game engine and source port of the classic PC first person shooter Duke Nukem 3D<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/eduke32/releases Here]<br />
| [https://github.com/Cpasjuste/eduke32 Yes]<br />
| 2021-07-13<br />
|-<br />
| LÖVE-NX<br />
| Direct port of [https://love2d.org LÖVE] for the Nintendo Switch<br />
| p-sam<br />
| [https://github.com/retronx-team/love-nx/releases Here]<br />
| [https://github.com/retronx-team/love-nx Yes]<br />
| 2022-04-04<br />
|-<br />
| LÖVE Potion<br />
| [https://love2d.org LÖVE] for Nintendo Switch<br />
| TurtleP<br />
| [https://github.com/lovebrew/LovePotion/releases Here]<br />
| [https://github.com/lovebrew/LovePotion Yes]<br />
| 2022-05-21<br />
|-<br />
| [https://blog.easyrpg.org/2018/03/easyrpg-player-now-available-as-nintendo-switch-homebrew/ EasyRPG Player]<br />
| RPG Maker 2000/2003 game interpreter<br />
| Rinnegatamante & EasyRPG team<br />
| [https://easyrpg.org/player/downloads/ Here]<br />
| [https://github.com/EasyRPG/Player Yes]<br />
| 2021-10-29<br />
|-<br />
| MegaZeux<br />
| A game creation system originally released in 1994 with text mode-like graphics and a [https://www.digitalmzx.com large library of games].<br />
| Lachesis<br />
| [https://github.com/AliceLR/megazeux/releases Here]<br />
| [https://github.com/AliceLR/megazeux/ Yes]<br />
| 2020-11-22<br />
|-<br />
| Solarus Engine<br />
| Zelda-like Action-RPG game engine<br />
| capsterx<br />
| [https://github.com/capsterx/solarus/releases Here]<br />
| [https://github.com/capsterx/solarus Yes]<br />
| 2021-02-21<br />
|-<br />
| [https://raylib.com/ raylib-nx]<br />
| A simple and easy-to-use library to enjoy videogames programming.<br />
| [[User:LucaSkyer|LucaSkyer]]<br />
| [https://github.com/lucaskyer/raylib-nx/releases Here]<br />
| [https://github.com/lucaskyer/raylib-nx Yes]<br />
| 2022-03-10<br />
|-<br />
|}<br />
<br />
=== Games ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| 2048<br />
| 2048 port for Switch homebrew<br />
| Bernardo Giordano<br />
| [https://github.com/BernardoGiordano/2048/releases Here]<br />
| [https://github.com/BernardoGiordano/2048 Yes]<br />
| 2018-07-17<br />
|-<br />
| Cannonball-NX<br />
| An Enhanced OutRun Engine<br />
| lantus/MVG<br />
| [https://github.com/lantus/cannonball-nx/releases Here]<br />
| [https://github.com/lantus/cannonball-nx Yes]<br />
| 2018-05-22<br />
|-<br />
| Chocolate Doom<br />
| Chocolate Doom port for Switch<br />
| WinterMute<br />
| [https://github.com/WinterMute/chocolate-doom/releases/latest Here]<br />
| [https://github.com/WinterMute/chocolate-doom Yes]<br />
| 2018-07-15<br />
|-<br />
| Chocolate Doom NX<br />
| Chocolate Doom port for Switch<br />
| [[User:NicholeMattera|NicholeMattera]]<br />
| [https://git.nicholemattera.com/NicholeMattera/Chocolate-Doom-NX/releases/latest Here]<br />
| [https://git.nicholemattera.com/NicholeMattera/Chocolate-Doom-NX Yes]<br />
| 2021-01-30<br />
|-<br />
| Hamsters NX<br />
| A breeding of Hamsters game in text mode.<br />
| Cid2mizard<br />
| [https://github.com/Cid2mizard/Hamsters_NX/releases Here]<br />
| [https://github.com/Cid2mizard/Hamsters_NX Yes]<br />
| 2022-06-05<br />
|-<br />
| HEXGEM<br />
| A match 3 (or more) board game<br />
| [[User:carstene1ns|carstene1ns]]<br />
| [https://github.com/carstene1ns/hexgem/tree/switch-port Here]<br />
| Yes<br />
| 2018-07-25<br />
|-<br />
| Hot Pocolate<br />
| Alternative music visualizer<br />
| illteteka<br />
| [https://illteteka.itch.io/hot-pocolate Here]<br />
| [https://github.com/illteteka/hot-pocolate Yes]<br />
| 2018-08-15<br />
|-<br />
| [https://www.winterworks.de/project/hurrican/ Hurrican]<br />
| Port of POKE53280 Classic Turrican reimagination<br />
| rsn8887<br />
| [https://github.com/rsn8887/Hurrican/releases Here]<br />
| [https://github.com/rsn8887/Hurrican Yes]<br />
| 2021-05-22<br />
|-<br />
| InvadersNX<br />
| Space Invaders type game<br />
| MaesterRowen<br />
| [https://github.com/MaesterRowen/InvadersNX/releases/latest Here]<br />
| [https://github.com/MaesterRowen/InvadersNX Yes]<br />
| 2018-07-09<br />
|-<br />
| Ken's Labyrinth<br />
| Classic MS-DOS shooter with enhanced features such as HD textures and 60fps support<br />
| Nightfox<br />
| [https://github.com/sacredbanana/lab3d-sdl/releases/latest Here]<br />
| [https://github.com/sacredbanana/lab3d-sdl Yes]<br />
| 2019-10-05<br />
|-<br />
| Mario NES<br />
| Super Mario Bros port to Switch<br />
| 24ratcma<br />
| [https://github.com/sverigeunit/MarioNES-for-Switch/releases Here]<br />
| [https://github.com/sverigeunit/MarioNES-for-Switch Yes]<br />
| 2022-07-14<br />
|-<br />
| MCOsu<br />
| [https://osu.ppy.sh/home Osu!] Port for Switch<br />
| McKay42<br />
| [https://github.com/McKay42/McOsu-NX/releases Here]<br />
| [https://github.com/McKay42/McOsu-NX Yes]<br />
| 2022-01-23<br />
|-<br />
| Meritous<br />
| Top View Dungeon Game<br />
| nop90<br />
| [https://github.com/Nop90-Switch/Meritous-Switch/releases Here]<br />
| [https://github.com/Nop90-Switch/Meritous-Switch Yes]<br />
| 2018-03-17<br />
|-<br />
| Noodles!<br />
| A clone of the iOS puzzle game Noodles!<br />
| [[User:MrJPGames|MrJPGames]]<br />
| [https://github.com/MrJPGames/Noodles-/releases Here]<br />
| [https://github.com/MrJPGames/Noodles- Yes]<br />
| 2019-07-24<br />
|-<br />
| NXEngine<br />
| Reimplementation of Cave Story / Doukutsu Monogatari, a Japanese freeware PC side-scrolling platformer game from 2004.<br />
| isage<br />
| [https://github.com/nxengine/nxengine-evo/releases/latest/ Here]<br />
| [https://github.com/nxengine/nxengine-evo Yes]<br />
| 2022-08-04<br />
|-<br />
| NXQuake<br />
| TyrQuake is a source port of id Software's Quake<br />
| fgsfds<br />
| [https://github.com/fgsfdsfgs/nxquake/releases Here]<br />
| [https://github.com/fgsfdsfgs/nxquake Yes]<br />
| 2018-09-15<br />
|-<br />
| NXQuake2<br />
| Yamagi Quake II is a source port of id Software's Quake II<br />
| fgsfds<br />
| [https://github.com/fgsfdsfgs/nxquake2/releases Here]<br />
| [https://github.com/fgsfdsfgs/nxquake2 Yes]<br />
| 2018-09-04<br />
|-<br />
| NX-VVVVVV<br />
| VVVVVV port for Switch<br />
| [[User:NicholeMattera|NicholeMattera]]<br />
| [https://git.nicholemattera.com/NicholeMattera/NX-VVVVVV/releases/latest Here]<br />
| [https://git.nicholemattera.com/NicholeMattera/NX-VVVVVV Yes]<br />
| 2021-01-30<br />
|-<br />
| OpenBOR<br />
| 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!<br />
| cpasjuste<br />
| [https://github.com/Cpasjuste/openbor/releases Here]<br />
| [https://github.com/Cpasjuste/openbor Yes]<br />
| 2018-03-18<br />
|-<br />
| OpenTyrian<br />
| OpenTyrian is a port of the DOS shoot-em-up Tyrian, which is an arcade-style vertical scrolling shooter.<br />
| felixrg<br />
| [https://github.com/felixrg/opentyrian/releases Here]<br />
| [https://github.com/felixrg/opentyrian Yes]<br />
| 2018-05-19<br />
|-<br />
| Pickr<br />
| Pickr webgame port for Switch homebrew<br />
| Bernardo Giordano<br />
| [https://github.com/BernardoGiordano/Pickr/releases Here]<br />
| [https://github.com/BernardoGiordano/Pickr Yes]<br />
| 2018-04-16<br />
|-<br />
| Pixel-Painter<br />
| A simple drawing homebrew<br />
| 8BitWonder<br />
| [https://github.com/16BitWonder/Pixel-Painter-Switch/releases Here]<br />
| [https://github.com/16BitWonder/Pixel-Painter-Switch Yes]<br />
| 2020-08-19<br />
|-<br />
| Postal-NX<br />
| An isometric top-down shooter video game from 1997<br />
| lantus/MVG<br />
| [https://github.com/lantus/postal-nx/releases Here]<br />
| [https://github.com/lantus/postal-nx Yes]<br />
| 2018-05-25<br />
|-<br />
| powder-nx<br />
| Physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.<br />
| VelocityRa<br />
| [https://github.com/VelocityRa/powder-nx/releases Here]<br />
| [https://github.com/VelocityRa/powder-nx Yes]<br />
| 2019-09-15<br />
|-<br />
| REminiscence<br />
| REminiscence is a re-implementation of the engine used in the game Flashback made by Delphine Software and released in 1992.<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/REminiscence/releases Here]<br />
| [https://github.com/Cpasjuste/REminiscence Yes]<br />
| 2018-03-28<br />
|-<br />
| SDLLopan<br />
| A classic remake of Linux Lopan (a Mahjong solitaire clone) by Dave Ashley.<br />
| nop90<br />
| [https://github.com/Nop90-Switch/SDLLopan-SWITCH/releases Here]<br />
| [https://github.com/Nop90-Switch/SDLLopan-SWITCH Yes]<br />
| 2018-03-02<br />
|-<br />
| SDLPoP<br />
| An open-source port of Prince of Persia, based on the disassembly of the DOS version.<br />
| usineur<br />
| [https://github.com/usineur/SDLPoP/releases Here]<br />
| [https://github.com/usineur/SDLPoP Yes]<br />
| 2018-05-14<br />
|-<br />
| Space Game NX<br />
| Space game is a graphical shooter game on the Switch ported from Wii U! <br />
| vgmoose<br />
| [https://github.com/vgmoose/spacenx/releases Here]<br />
| [https://github.com/vgmoose/spacenx/ Yes]<br />
| 2018-02-19<br />
|-<br />
| Snake<br />
| A minimalistic Snake clone for Switch made with LovePotion.<br />
| Shrike<br />
| [https://github.com/Ryuzaki-MrL/tetriswitch/releases Here]<br />
| [https://github.com/Ryuzaki-MrL/tetriswitch Yes]<br />
| 2018-03-10<br />
|-<br />
|Stepmania 5.x<br />
|A port of the Stepmania 5.x PC game to the switch<br />
|retronx-team<br />
|[https://github.com/retronx-team/stepmania-nx/releases Here]<br />
|[https://github.com/retronx-team/stepmania-nx Yes]<br />
|<br />
|-<br />
| SuperTuxKart<br />
| Port of [https://supertuxkart.net SuperTuxKart] to the Nintendo Switch<br />
| [[User:Mary|Mary]]<br />
| [https://github.com/supertuxkart/stk-code/releases/tag/preview Here]<br />
| [https://github.com/supertuxkart/stk-code Yes]<br />
| 2021-07-20<br />
|-<br />
| Super Methane Brothers<br />
| 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.<br />
| [[User:carstene1ns|carstene1ns]]<br />
| [https://f4ke.de/dev/switch/ Here]<br />
| [https://github.com/carstene1ns/super-methane-brothers Yes]<br />
| 2018-05-08<br />
|-<br />
| Switch Pong<br />
| A port of pong for the Nintendo Switch<br />
| TheKgg<br />
| [https://github.com/TheKgg/switch-pong/releases Here]<br />
| [https://github.com/TheKgg/switch-pong Yes]<br />
| 2018-04-20<br />
|-<br />
| Taisei<br />
| A port of taisei for the Nintendo Switch<br />
| Taisei Project <br />
| [https://github.com/taisei-project/taisei/releases Here]<br />
| [https://github.com/taisei-project/taisei/ Yes]<br />
| 2021-01-01<br />
|-<br />
| Tetriswitch<br />
| A Tetris clone for Nintendo Switch.<br />
| Ryuzaki_MrL<br />
| [https://github.com/Ryuzaki-MrL/tetriswitch/releases Here]<br />
| [https://github.com/Ryuzaki-MrL/tetriswitch Yes]<br />
| 2018-03-13<br />
|-<br />
| TicTacToe<br />
| A Tic Tac Toe implementation for Switch.<br />
| SH3RLOCK<br />
| [https://sh3rlock.ch/ttt.nro Here]<br />
| [https://sh3rlock.ch/ttt.zip Yes]<br />
| 2018-02-23<br />
|-<br />
| Useless Homebrew<br />
| A "useless machine"-like software, ported from DS<br />
| Tcm0, Rydian (DS)<br />
| [https://drive.google.com/file/d/1r5pi5G20yEAT9eEckCJeyROsC3fn5MaJ/view Here]<br />
| [https://drive.google.com/file/d/1CDTMoUi6HnayhWUd_edmyzcJcP-mvpw3/view Yes]<br />
| 2018-03-03<br />
|}<br />
<br />
=== Emulators ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| ScummVM<br />
| ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games...<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/scummvm/releases Here]<br />
| [https://github.com/Cpasjuste/scummvm/tree/switch Yes]<br />
| 2018-05-18<br />
|-<br />
<br />
|-<br />
| mGBA<br />
| Standalone version of mGBA for Switch<br />
| endrift<br />
| [https://github.com/mgba-emu/mgba/releases/ Here]<br />
| [https://github.com/mgba-emu/mgba/ Yes]<br />
|<br />
|-<br />
| pFBA<br />
| A port of final burn alpha to multiple platforms<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/pfba/releases Here]<br />
| [https://github.com/Cpasjuste/pfba Yes]<br />
| 2018-08-25<br />
|-<br />
| PPSSPP<br />
| Port of the standalone PSP Emulator "PPSSPP" for the Switch<br />
| m4xw, Henrik Rydgård<br />
| [https://ppsspp.org/downloads.html Here]<br />
| No<br />
|<br />
|-<br />
| CHIP8-NX<br />
| CHIP8 emulator<br />
| Marice<br />
| [https://github.com/Marice/CHIP8-NX/releases Here]<br />
| [https://github.com/Marice/CHIP8-NX Yes]<br />
| 2018-05-25<br />
|-<br />
| LaiNESwitch<br />
| Compact, cycle-accurate NES emulator in ~1000 lines of C++.<br />
| Kevoot<br />
| [https://github.com/Kevoot/LaiNESwitch/releases Here]<br />
| [https://github.com/Kevoot/LaiNESwitch Yes]<br />
| 2018-07-26<br />
|-<br />
| pSNES<br />
| snes9x 1.56.2<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/psnes/releases Here]<br />
| [https://github.com/Cpasjuste/psnes Yes]<br />
| 2018-08-24<br />
|-<br />
| RetroArch<br />
| RetroArch has advanced features like shaders, netplay, rewinding, and next-frame response times.<br />
|<br />
| [https://github.com/libretro/RetroArch/releases Here]<br />
| [https://github.com/libretro/RetroArch Yes]<br />
| 2018-10-01<br />
|-<br />
|}<br />
<br />
=== Save managers===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| Checkpoint<br />
| Fast and simple save manager for 3DS and Switch written in C++.<br />
| Bernardo Giordano<br />
| [https://github.com/BernardoGiordano/Checkpoint/releases/latest Here]<br />
| [https://github.com/BernardoGiordano/Checkpoint Yes]<br />
| 2018-05-14<br />
|-<br />
| JKSV<br />
| WIP save manager for more advanced users<br />
| JK_<br />
| [https://github.com/J-D-K/JKSV/releases Here]<br />
| [https://github.com/J-D-K/JKSV Yes]<br />
| 2018-06-25<br />
|-<br />
| EdiZon<br />
| Save file manager and editor with JSON+Lua plugin support for easy creation of new save editors for any game.<br />
| WerWolv<br />
| [https://github.com/thomasnet-mc/EdiZon/releases/latest Here]<br />
| [https://github.com/thomasnet-mc/EdiZon Yes]<br />
| 2018-08-19<br />
|}<br />
<br />
=== File servers ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| Ftpd<br />
| A port of ftpd for 3DS.<br />
| mtheall, TuxSH, WinterMute<br />
| [https://github.com/mtheall/ftpd/releases/latest Here]<br />
| [https://github.com/mtheall/ftpd Yes]<br />
| 2018-09-24<br />
|-<br />
| sys-ftpd<br />
| A port of ftpd for 3DS that's running in the background.<br />
| mtheall, TuxSH, WinterMute, jakibaki<br />
| [https://github.com/jakibaki/sys-ftpd/releases/latest Here]<br />
| [https://github.com/jakibaki/sys-ftpd Yes]<br />
| 2018-09-24<br />
|-<br />
| mtp-server-nx<br />
| A port of [https://manpages.ubuntu.com/manpages/xenial/man1/mtp-server.1.html mtp-server] for Android.<br />
| Gillou68310<br />
| [https://github.com/retronx-team/mtp-server-nx/releases/latest Here]<br />
| [https://github.com/retronx-team/mtp-server-nx Yes]<br />
| 2019-09-19<br />
|-<br />
| nxmtp<br />
| A MTP implementation.<br />
| liuervehc<br />
| [https://github.com/liuervehc/nxmtp/releases/latest Here]<br />
| No<br />
| 2019-01-13<br />
|}<br />
<br />
=== Demos ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| 34c3-demo<br />
| Demo from the 34c3 for Homebrew on the Switch.<br />
| [[User:plutoo|plutoo]]<br />
| [https://github.com/switchbrew/34c3-demo Here]<br />
| Yes<br />
| 2018-02-19<br />
|-<br />
| Dokkaebi Hack<br />
| Animated Demo using SDL on the Switch.<br />
| [[User:NicholeMattera|NicholeMattera]]<br />
| [https://git.nicholemattera.com/NicholeMattera/Dokkaebi-Hack/releases/latest Here]<br />
| [https://git.nicholemattera.com/NicholeMattera/Dokkaebi-Hack Yes]<br />
| 2020-06-27<br />
|-<br />
|}</div>Fincshttps://switchbrew.org/w/index.php?title=EMMC_pinout&diff=11198EMMC pinout2021-09-26T21:15:28Z<p>Fincs: Undo revision 11197 by ColeJByrne (talk)</p>
<hr />
<div>=== Front ===<br />
[[File:HAC-EMMC-Side-B.png|600px]]<br />
<br />
=== Back ===<br />
[[File:HAC-EMMC-Side-A.png|600px]]<br />
<br />
Supply power via the VCC 3.3V and 1.8V pins, and solder the CLK, CMD, and DAT0 pins to an SD Card reader in order to extract the data off the eMMC chip.<br />
<br />
=== eMMC Connector ===<br />
<br />
[[File:Jackpinassignment.png|200px|thumb|right|eMMC Board Connector Pinout]]<br />
[[File:Plugpinassignment.png|200px|thumb|right|eMMC Motherboard connector pinout]]<br />
<br />
{| class="wikitable" border="1"<br />
! Pin #<br />
! Name<br />
! Type<br />
|-<br />
| 1<br />
| 3.3v<br />
| PWR<br />
|-<br />
| 2<br />
| GND<br />
| PWR<br />
|-<br />
| 3<br />
| CMD<br />
| BI<br />
|-<br />
| 4<br />
| GND<br />
| PWR<br />
|-<br />
| 5<br />
| DAT_STRB(?)<br />
| OUT<br />
|-<br />
| 6<br />
| GND<br />
| PWR<br />
|-<br />
| 7<br />
| DAT4<br />
| BI<br />
|-<br />
| 8<br />
| GND<br />
| PWR<br />
|-<br />
| 9<br />
| DAT5<br />
| BI<br />
|-<br />
| 10<br />
| GND<br />
| PWR<br />
|-<br />
| 11<br />
| DAT6<br />
| BI<br />
|-<br />
| 12<br />
| GND<br />
| PWR<br />
|-<br />
| 13<br />
| DAT7<br />
| BI<br />
|-<br />
| 14<br />
| GND<br />
| PWR<br />
|-<br />
| 15<br />
| 1.8v<br />
| PWR<br />
|-<br />
| 16<br />
| 1.8v<br />
| PWR<br />
|-<br />
| 17<br />
| GND<br />
| PWR<br />
|-<br />
| 18<br />
| GND<br />
| PWR<br />
|-<br />
| 19<br />
| DAT2<br />
| BI<br />
|-<br />
| 20<br />
| GND<br />
| PWR<br />
|-<br />
| 21<br />
| DAT1<br />
| BI<br />
|-<br />
| 22<br />
| GND<br />
| PWR<br />
|-<br />
| 23<br />
| DAT0<br />
| BI<br />
|-<br />
| 24<br />
| GND<br />
| PWR<br />
|-<br />
| 25<br />
| DAT3<br />
| BI<br />
|-<br />
| 26<br />
| GND<br />
| PWR<br />
|-<br />
| 27<br />
| CLK<br />
| IN<br />
|-<br />
| 28<br />
| GND<br />
| PWR<br />
|-<br />
| 29<br />
| RESET<br />
| IN<br />
|-<br />
| 30<br />
| 3.3v<br />
| PWR<br />
|}<br />
<br />
The eMMC connector plug on the board mates with the receptacle on the Switch motherboard. The receptacle is a [http://www.molex.com/molex/products/datasheet.jsp?part=active/5009130302_PCB_RECEPTACLES.xml&channel=Products&Lang=en-US Molex 5009130302], and is available from retailers such as [https://www.digikey.com/product-detail/en/molex-llc/5009130302/WM6833CT-ND/3045233 Digi-Key].</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=10989News2021-06-12T15:58:09Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''12 June 21''' [https://devkitpro.org/viewtopic.php?f=13&t=9226&p=17113#p17113 libnx v4.1.0 released].<br />
*'''8 June 21''' Nintendo released system update [[12.0.3]].<br />
*'''12 May 21''' Nintendo released system update [[12.0.2]].<br />
*'''20 April 21''' Nintendo released system update [[12.0.1]].</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=10988News/Archive2021-06-12T15:57:37Z<p>Fincs: </p>
<hr />
<div>*'''9 March 21''' Nintendo released system update [[12.0.0]].<br />
*'''11 December 20''' Nintendo released system update [[11.0.1]].<br />
*'''1 December 20''' Nintendo released system update [[11.0.0]].<br />
*'''15 September 20''' Nintendo released system update [[10.2.0]].<br />
*'''28 July 20''' Nintendo released system update [[10.1.1]].<br />
*'''14 July 20''' Nintendo released system update [[10.1.0]].<br />
*'''5 June 20''' Nintendo released system update [[10.0.4]].<br />
*'''26 May 20''' Nintendo released system update [[10.0.3]].<br />
*'''11 May 20''' [https://devkitpro.org/viewtopic.php?f=13&t=9058 devkitA64 r15, libnx v3.2.0, deko3d v0.2.0, switch-examples v20200511] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.3.2 nx-hbloader v2.3.2] released.<br />
*'''30 April 20''' Nintendo released system update [[10.0.2]].<br />
*'''22 April 20''' Nintendo released system update [[10.0.1]].<br />
*'''14 April 20''' Nintendo released system update [[10.0.0]].<br />
*'''4 April 20''' [https://devkitpro.org/viewtopic.php?f=13&t=9035 libnx v3.1.0, switch-examples v20200404 and deko3d v0.1.0 released]. On the 6th nx-hbmenu v3.3.0 was [https://github.com/switchbrew/nx-hbmenu/releases/latest released].<br />
*'''2 April 20''' [https://github.com/switchbrew/nssu-updater nssu-updater] and [https://github.com/switchbrew/contents-delivery-manager contents-delivery-manager] were released.<br />
*'''3 March 20''' Nintendo released system update [[9.2.0]].<br />
*'''10 December 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8989 libnx v3.0.0, switch-examples v20191211, Atmosphère v0.10.1, nx-hbmenu v3.2.0, and nx-hbloader v2.3.0 released].<br />
*'''4 December 19''' Nintendo released system update [[9.1.0]].<br />
*'''30 September 19''' Nintendo released system update [[9.0.1]].<br />
*'''14 September 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8964 libnx v2.5.0 and switch-examples v20190914 released]. nx-hbmenu v3.1.1 [https://github.com/switchbrew/nx-hbmenu/releases/tag/v3.1.1 released]. [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.9.4 Atmosphère 0.9.4 released with support for 9.0.0].<br />
*'''9 September 19''' Nintendo released system update [[9.0.0]].<br />
*'''10 July 19''' Nintendo [https://twitter.com/NintendoAmerica/status/1148934589026455552 announced] the Nintendo Switch Lite system.<br />
*'''17 June 19''' Nintendo released system update [[8.1.0]].<br />
*'''1 May 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8908 libnx v2.2.0 and switch-examples v20190501] released.<br />
*'''23 April 19''' Nintendo released system update [[8.0.1]].<br />
*'''15 April 19''' Nintendo released system update [[8.0.0]].<br />
*'''29 March 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8891 devkitA64 r13] and [https://github.com/switchbrew/libnx/releases/tag/v2.1.0 libnx v2.1.0] released with pthread/std::thread support.<br />
*'''26 March 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.6 Atmosphère v0.8.6] released with lots of bugfixes, more cheat stuff and web applet homebrew support.<br />
*'''21 February 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.4 Atmosphère v0.8.4] released with 7.0.x support.<br />
*'''18 February 19''' Nintendo released system update [[7.0.1]].<br />
*'''28 January 19''' Nintendo released system update [[7.0.0]].<br />
*'''24 January 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.3 Atmosphère v0.8.3] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.1.0 nx-hbloader v2.1.0] were released.<br />
*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.<br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=Homebrew_ABI&diff=10844Homebrew ABI2021-04-11T12:40:59Z<p>Fincs: /* HosVersion */</p>
<hr />
<div>=== Entrypoint ===<br />
Entrypoint is at binary_ptr+0. At this offset, there is a branch instruction that jumps past the NRO0 header. This is for (.text) file format polyglot compatibility with NSO0.<br />
<br />
Every application should clean itself up before returning to loader.<br />
<br />
This includes tasks like:<br />
* Not leaking handles<br />
* Resetting MemoryState<br />
* No leftover threads running in the background<br />
<br />
Original LR given to entrypoint should be returned to, X0 contains an error code. If original LR is NULL, svcExitProcess should be used.<br />
<br />
=== Entrypoint Arguments ===<br />
'''NSO0:''' the system executes binary_ptr+0 with X0=NULL, X1=main_thread_handle.<br />
<br />
'''NRO0:''' the homebrew loader puts X0=loader_config_ptr, X1=0xFFFFFFFFFFFFFFFF.<br />
<br />
When X0 is non-zero and X1 is not 0xFFFFFFFFFFFFFFFF, the application must handle userland [[SVC#Exception_Handling|exceptions]] (with the same entrypoint args described there). This must be done without corrupting registers for this (x8..x29).<br />
<br />
The loader should forward exceptions to the mapped NRO by just jumping to the NRO entrypoint, without the above register corruption. When the NRO is not mapped the loader can run: <code>svcReturnFromException(0xf801); while(1);</code><br />
<br />
=== Loader Config ===<br />
Loader config allows overriding functionality to workaround limitations in a limited homebrew environment.<br />
<br />
It is an array of tuples:<br />
struct LoaderConfig {<br />
LoaderConfigEntry Entries[];<br />
};<br />
<br />
Each entry is key-value pair:<br />
<br />
struct LoaderConfigEntry {<br />
u32 Key;<br />
u32 Flags;<br />
u64 Value[2];<br />
};<br />
<br />
enum LoaderConfigFlags {<br />
IsMandatory = BIT(0),<br />
};<br />
<br />
=== Loader Config Keys ===<br />
A loader key can be marked as mandatory or not in its <code>Flags</code> field.<br />
<br />
If a key is marked as mandatory it means that the application cannot safely ignore it.<br />
<br />
Thus if said key is not recognized by the application, it should exit with <code>result_code=346 | ((100 + key) << 9);</code>, as the default behaviour may be unsafe.<br />
<br />
If a key that is required is not found (for example with an outdated loader), use <code>result_code=346 | ((200 + key) << 9);</code>.<br />
<br />
If there is some error encountered while validating an entry's values, use <code>result_code = 346 | ((300 + key) << 9);</code>.<br />
<br />
* 0: [[#EndOfList]]: Must be present<br />
<br />
* 1: [[#MainThreadHandle]]: Must be present<br />
<br />
* 2: [[#NextLoadPath]]<br />
<br />
* 3: [[#OverrideHeap]]: If present, must not be ignored<br />
<br />
* 4: [[#OverrideService]]<br />
<br />
* 5: [[#Argv]]<br />
<br />
* 6: [[#SyscallAvailableHint]]<br />
<br />
* 7: [[#AppletType]]: Must be present<br />
<br />
* 8: [[#AppletWorkaround]]: If present, must not be ignored<br />
<br />
* 9: [[#Reserved9]]<br />
<br />
* 10: [[#ProcessHandle]]<br />
<br />
* 11: [[#LastLoadResult]]<br />
<br />
* 12: [[#AllocPages]]<br />
<br />
* 13: [[#LockRegion]]: If present, must not be ignored<br />
<br />
* 14: [[#RandomSeed]]<br />
<br />
* 15: [[#UserIdStorage]]<br />
<br />
* 16: [[#HosVersion]]<br />
<br />
==== EndOfList ====<br />
EndOfList is the final entry in the LoaderConfig. It also provides optional human readable information about the Homebrew loader.<br />
<br />
* '''Key:''' 0<br />
* '''Value[0]:''' Pointer to loader information string, or zero if not present.<br />
* '''Value[1]:''' Size in bytes of the information string, or zero if not present.<br />
<br />
==== MainThreadHandle ====<br />
This is the handle to the thread that is executing the entrypoint. Required for mutex to function.<br />
<br />
* '''Key:''' 1<br />
* '''Value[0]:''' Handle to the main thread.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
* '''DefaultBehavior:''' Use main thread handle from entry function arguments.<br />
<br />
==== NextLoadPath ====<br />
Homebrew menu uses this pointer to write the path of next NRO to load, before returning back to Homebrew loader.<br />
<br />
* '''Key:''' 2<br />
* '''Value[0]:''' Pointer to buffer of size 512. NRO file path, should start with "sdmc:/".<br />
* '''Value[1]:''' Pointer to buffer of size 2048. Argv string to boot NRO with.<br />
<br />
==== OverrideHeap ====<br />
If the NRO loader has reserved some space in the heap for itself, the application must not manipulate the heap. If an [[#AllocPages]] key is present, the region this points to should be accepted by <code>free_pages</code>.<br />
<br />
* '''Key:''' 3<br />
* '''Value[0]:''' Base address of heap. Must be MemoryType 4, 5, or 9 with all reference counts being zero.<br />
* '''Value[1]:''' Size of heap.<br />
* '''DefaultBehavior:''' Allocates heap using svcSetHeapSize instead.<br />
<br />
==== OverrideService ====<br />
The NRO loader should be able to steal handles from more priliveged processes. In this case, homebrew should use this handle instead of the normal one.<br />
<br />
Homebrew should allow at least 32 service overrides.<br />
<br />
Note: Overridden service handles should not be converted to domains or closed. If they are domain, they should be converted to sessions before passed to the homebrew application.<br />
<br />
Note: For services that authenticate with pid, the app should not attempt re-authentication with an overridden handle.<br />
<br />
Note: There needs be special handling for the file system service. If the original fsp-srv handle doesn't allow MountSdcard, it shall fallback to the stolen one, etc etc.<br />
<br />
* '''Key:''' 4<br />
* '''Value[0]:''' Name of service, same format as for sm.<br />
* '''Value[1]:''' Lower 32-bits: Service handle<br />
* '''DefaultBehavior:''' Fetches service from "sm:" named port.<br />
<br />
==== Argv ====<br />
The NRO loader should be able to send argv.<br />
<br />
* '''Key:''' 5<br />
* '''Value[0]:''' Reserved/should be zero.<br />
* '''Value[1]:''' Argv string pointer.<br />
* '''DefaultBehavior:''' Setting (argc == 1, argv[0] == "", argv[1] == NULL), or argv parsed in NSO0 fashion.<br />
<br />
==== SyscallAvailableHint ====<br />
Homebrew doesn't know if any privileged syscalls are available.<br />
<br />
This entry allows loader to give hints about having access to rare syscalls (such as JIT).<br />
<br />
* '''Key:''' 6<br />
* '''Value[0]:''' 64-bit mask for the 0-0x3F SVC range. n:th bit set means SVC is accessible.<br />
* '''Value[1]:''' 64-bit mask for the 0x40-0x7F SVC range.<br />
* '''DefaultBehavior:''' If NSO0, assume kernelhax thus all rare syscalls are allowed. If NRO0, assume all rare syscalls are inaccessible.<br />
<br />
==== AppletType ====<br />
Specifies the [[AM_services|AM]] AppletType, used for selecting which Open*Proxy command to use.<br />
<br />
* '''Key:''' 7<br />
* '''Value[0]:''' AppletType<br />
* '''Value[1]:''' AppletFlags<br />
<br />
AppletFlags ApplicationOverride: Use AppletType_Application instead of AppletType_SystemApplication, only when AppletType is SystemApplication. This should only be handled when AppletType_Application is properly supported where applet may have been previously initialized in the context of the current process, for AppletType_Application. This avoids breaking backwards-compatibility with apps which don't support AppletType_Application as previously described.<br />
<br />
enum LoaderConfigAppletType {<br />
LoaderConfigAppletType_Application = 0,<br />
LoaderConfigAppletType_SystemApplet = 1,<br />
LoaderConfigAppletType_LibraryApplet = 2,<br />
LoaderConfigAppletType_OverlayApplet = 3,<br />
LoaderConfigAppletType_SystemApplication = 4,<br />
};<br />
<br />
enum LoaderConfigAppletFlags {<br />
LoaderConfigAppletFlags_ApplicationOverride = BIT(0),<br />
};<br />
<br />
==== AppletWorkaround ====<br />
This flag means that AM services is broken, and must not be used.<br />
<br />
* '''Key:''' 8<br />
* '''Value[0]:''' AppletResourceUserId<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== Reserved9 ====<br />
This key has been deleted/reserved for future use.<br />
<br />
==== ProcessHandle ====<br />
Handle to self process.<br />
<br />
* '''Key:''' 10<br />
* '''Value[0]:''' Process handle.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== LastLoadResult ====<br />
This is used to feed the last NRO error code back to the Homebrew Menu so that an error dialog can be displayed.<br />
<br />
* '''Key:''' 11<br />
* '''Value[0]:''' Result.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== AllocPages ====<br />
This key is used to provide function pointers for a memory allocator. If an [[#OverrideHeap]] key is present and this key is recognized, <code>free_pages</code> may be called with the address of the overridden heap as an argument. There may not be more than one [[#AllocPages]] key.<br />
<br />
If this key is recognized, applications should not attempt to use heap regions without first obtaining them through <code>alloc_pages</code>.<br />
If applications should not manage the heap themselves, an [[#OverrideHeap]] key should be passed in case this key is not recognized.<br />
If an [[#OverrideHeap]] key is not present, applications may attempt to manage the heap themselves. Any regions of memory within the heap that would be unsafe for an application to overwrite (such as the application's own stack) must be specified by a [[#LockRegion]] key.<br />
<br />
:<code>void *alloc_pages(size_t min, size_t max, size_t *actual)</code>:<br />
<br />
::This function shall allocate a page-aligned region of memory with a page-aligned size between <code>min</code> and <code>max</code> bytes (inclusive). If a failure is encountered, it shall return NULL. If <code>actual</code> is not NULL, the value it points to shall be overwritten with the actual size of the allocated region. Regions of memory allocated by this function may be passed to <code>free_pages</code> to mark them as eligible to be allocated again.<br />
<br />
::Regions of memory returned from this function must be read/write type-5 (HEAP) pages with no memory attributes set.<br />
<br />
:<code>bool free_pages(void *pages)</code>:<br />
<br />
::This function shall mark a region of memory either previously returned by <code>alloc_pages</code> or passed by the [[#OverrideHeap]] key as being eligible for future allocations. If any failure is encountered, a value of <code>TRUE</code> shall be returned. Otherwise, a value of <code>FALSE</code> is returned.<br />
<br />
* '''Key''': 12<br />
* '''Value[0]:''' <code>void *(*alloc_pages)(size_t min, size_t max, size_t *actual)</code><br />
* '''Value[1]:''' <code>bool (*free_pages)(void *pages)</code><br />
<br />
==== LockRegion ====<br />
This key is used to hint to the application that a certain region of the heap is unsafe to overwrite. There is no limit on the number of [[#LockRegion]] keys that may be passed. If an application is unable to process the number of regions that are locked, it must exit before overwriting any heap memory. It is an error for this key to be present in the same configuration as an [[#OverrideHeap]] or [[#AllocPages]] key.<br />
<br />
* '''Key''': 13<br />
* '''Value[0]:''' Pointer to region to lock<br />
* '''Value[1]:''' Size of region to lock<br />
<br />
==== RandomSeed ====<br />
This key is used to provide an extra entropy source to the application (in addition to the seed provided by the kernel), allowing it to generate different pseudo-random numbers every time it's launched from within the same process.<br />
<br />
* '''Key''': 14<br />
* '''Value[0]:''' Random data.<br />
* '''Value[1]:''' More random data.<br />
<br />
==== UserIdStorage ====<br />
This key is used to provide persistent storage space for the preselected user id when launching homebrew under an application that has an account selection screen.<br />
<br />
* '''Key''': 15<br />
* '''Value[0]:''' Pointer to a buffer containing enough space (16 bytes) to store a user id.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== HosVersion ====<br />
This key provides information about the currently running version of Horizon OS. This is used in order to determine the compatible ABI/API (both kernel and userland) available to homebrew applications.<br />
<br />
* '''Key''': 16<br />
* '''Value[0]:''' HOS version, formatted using libnx's [https://github.com/switchbrew/libnx/blob/master/nx/include/switch/runtime/hosversion.h#L11 MAKEHOSVERSION macro].<br />
* '''Value[1]:''' Magic value indicating the current implementation of Horizon OS.<br />
<br />
{| class="wikitable" border="1"<br />
! Value<br />
! Description<br />
|-<br />
| 0<br />
| Unspecified implementation/official stock firmware by Nintendo.<br />
|-<br />
| 0x41544d4f53504852 (ATMOSPHR)<br />
| [https://github.com/Atmosphere-NX/Atmosphere Atmosphère-NX customized firmware].<br />
|}</div>Fincshttps://switchbrew.org/w/index.php?title=Homebrew_Applications&diff=10522Homebrew Applications2020-12-17T22:12:17Z<p>Fincs: </p>
<hr />
<div>== Installing ==<br />
Applications are installed by copying the necessary files directly to the <code>switch/</code> folder in the root of the SD card, or in a subdirectory of <code>switch/</code>, 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:<br />
* <code>[appname].nro</code>: The executable.<br />
<br />
The Homebrew Menu will scan the SD card for all <code>.nro</code> 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.<br />
<br />
Icon/metadata for each application is loaded from data embedded in the NRO (custom assets section), if available.<br />
<br />
== Notes ==<br />
<br />
Distribution and promotion of tools to create or work with commercial game dumps is illegal under DMCA and EUCD provisions. Such tools risk legal repercussions and should not be linked or promoted here.<br />
<br />
== List ==<br />
<br />
=== Launchers ===<br />
<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="10%" | Open-Source<br />
|-<br />
| [[Homebrew Menu]]<br />
| Run homebrew on your Switch!<br />
| [[User:Yellows8|Yellows8]], [[User:plutooo|plutooo]]<br />
| [https://github.com/switchbrew/nx-hbmenu/releases Here]<br />
| Yes<br />
|}<br />
<br />
=== Applications ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| [https://github.com/yellows8/switch_sysmodule switch_sysmodule]<br />
| RPC over USB, etc. Originally a sysmodule, however this can also be used as a regular application.<br />
| [[User:Yellows8|Yellows8]]<br />
| <br />
| Yes<br />
|<br />
|-<br />
| pPlay<br />
| A video player for the Nintendo Switch<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/pplay/releases Here]<br />
| [https://github.com/Cpasjuste/pplay/ Yes]<br />
| 2018-12-19<br />
|-<br />
| Switch Lan Play<br />
| Allows you to play Lan supported games online,<br />
| spacemeowx2<br />
| [https://github.com/spacemeowx2/switch-lan-play/releases Here]<br />
| [https://github.com/spacemeowx2/switch-lan-play/ Yes]<br />
| 2018-03-19<br />
|-<br />
| Ldn_mitm<br />
| Allows you to play Wireless supported games online,(Requires Switch Lan Play)<br />
| spacemeowx2<br />
| [https://github.com/spacemeowx2/ldn_mitm/releases Here]<br />
| [https://github.com/spacemeowx2/ldn_mitm/ Yes]<br />
| 2018-12-07<br />
|-<br />
| Pynx<br />
| Allows you to run homebrew applications written in Python on the Switch.<br />
| [[User:AileenLumina|AileenLumina]]<br />
| [https://github.com/nx-python/Pynx/releases Here]<br />
| [https://github.com/nx-python/Pynx/ Yes]<br />
| 2018-03-19<br />
|-<br />
| Switch Brainfuck<br />
| A brainfuck interpreter for the Nintendo Switch.<br />
| TheKgg<br />
| [https://github.com/TheKgg/switch-brainfuck/releases Here]<br />
| [https://github.com/TheKgg/switch-brainfuck Yes]<br />
| 2018-04-21<br />
|-<br />
| ScreenTester-NX<br />
| Detect and repair dead/stuck pixels<br />
| Marice<br />
| [https://github.com/Marice/ScreenTester-NX/releases Here]<br />
| [https://github.com/Marice/ScreenTester-NX/ Yes]<br />
| 2018-05-19<br />
|-<br />
| NX-Shell<br />
| Multipurpose File Manager<br />
| Joel16<br />
| [https://github.com/joel16/NX-Shell/releases Here]<br />
| [https://github.com/joel16/NX-Shell/ Yes]<br />
| 2018-05-26<br />
|-<br />
| Gag Order<br />
| SuperNag remover<br />
| Adubbz<br />
| [https://github.com/Adubbz/Gag-Order/releases Here]<br />
| [https://github.com/Adubbz/Gag-Order Yes]<br />
| 2018-05-30<br />
|-<br />
| Switch Reader<br />
| E-Hentai gallery viewer<br />
| Colin969<br />
| [https://github.com/colin969/switch-reader/releases Here]<br />
| [https://github.com/colin969/switch-reader Yes]<br />
| 2018-11-21<br />
|-<br />
| In-Home-Switching<br />
| Stream games from PC to the Nintendo Switch<br />
| jakibaki, D-VAmpire<br />
| [https://github.com/jakibaki/In-Home-Switching/releases Here]<br />
| [https://github.com/jakibaki/In-Home-Switching Yes]<br />
| 2018-12-31<br />
|-<br />
| vgedit<br />
| Text editor with touch/controller/usb support<br />
| vgmoose<br />
| [https://github.com/vgmoose/vgedit/releases Here]<br />
| [https://github.com/vgmoose/vgedit Yes]<br />
| 2020-06-15<br />
|}<br />
<br />
=== Game Engines ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name <br />
! width="50%" | Description <br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source <br />
! width="15%" | Last Updated <br />
|-<br />
| Duke Nukem 3D<br />
| EDuke32 is an awesome, free homebrew game engine and source port of the classic PC first person shooter Duke Nukem 3D<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/eduke32/releases Here]<br />
| [https://github.com/Cpasjuste/eduke32 Yes]<br />
| 2018-04-29<br />
|-<br />
| LovePotion<br />
| [https://love2d.org Love2D] for Nintendo Switch<br />
| TurtleP<br />
| [https://github.com/TurtleP/LovePotion/releases Here]<br />
| [https://github.com/TurtleP/LovePotion/tree/switch Yes]<br />
| 2019-01-03<br />
|-<br />
| [https://blog.easyrpg.org/2018/03/easyrpg-player-now-available-as-nintendo-switch-homebrew/ EasyRPG Player]<br />
| RPG Maker 2000/2003 game interpreter<br />
| Rinnegatamante & EasyRPG team<br />
| [https://easyrpg.org/player/downloads/ Here]<br />
| [https://github.com/EasyRPG/Player Yes]<br />
| 2019-03-03<br />
|-<br />
| MegaZeux<br />
| A game creation system originally released in 1994 with text mode-like graphics and a [https://www.digitalmzx.com large library of games].<br />
| Lachesis<br />
| [https://github.com/AliceLR/megazeux/releases Here]<br />
| [https://github.com/AliceLR/megazeux/ Yes]<br />
| 2020-11-22<br />
|-<br />
| Solarus Engine<br />
| Zelda-like Action-RPG game engine<br />
| [[User:carstene1ns|carstene1ns]]<br />
| [https://f4ke.de/dev/switch/ Here]<br />
| [https://github.com/carstene1ns/solarus-engine Yes]<br />
| 2018-05-20<br />
|-<br />
|}<br />
<br />
=== Games ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| 2048<br />
| 2048 port for Switch homebrew<br />
| Bernardo Giordano<br />
| [https://github.com/BernardoGiordano/2048/releases Here]<br />
| [https://github.com/BernardoGiordano/2048 Yes]<br />
| 2018-04-21<br />
|-<br />
| Cannonball-NX<br />
| An Enhanced OutRun Engine<br />
| lantus/MVG<br />
| [https://github.com/lantus/cannonball-nx/releases Here]<br />
| [https://github.com/lantus/cannonball-nx Yes]<br />
| 2018-05-23<br />
|-<br />
| Chocolate Doom<br />
| Chocolate Doom port for Switch<br />
| WinterMute<br />
| [https://github.com/WinterMute/chocolate-doom/releases/latest Here]<br />
| [https://github.com/WinterMute/chocolate-doom Yes]<br />
| 2018-06-22<br />
|-<br />
| Hamsters NX<br />
| A breeding of Hamsters game in text mode.<br />
| Cid2mizard<br />
| [https://github.com/Cid2mizard/Hamsters_NX/releases Here]<br />
| [https://github.com/Cid2mizard/Hamsters_NX Yes]<br />
| 2018-02-28<br />
|-<br />
| HEXGEM<br />
| A match 3 (or more) board game<br />
| [[User:carstene1ns|carstene1ns]]<br />
| [https://f4ke.de/dev/switch/ Here]<br />
| [https://github.com/carstene1ns/hexgem/tree/switch-port Yes]<br />
| 2018-07-25<br />
|-<br />
| Hot Pocolate<br />
| Alternative music visualizer<br />
| [[User:illteteka|illteteka]]<br />
| [https://illteteka.itch.io/hot-pocolate Here]<br />
| [https://github.com/illteteka/hot-pocolate Yes]<br />
| 2018-08-15<br />
|-<br />
|Hurrican<br />
|Port of POKE53280 Classic Turrican reimagination<br />
|[[User:rsn8887|rsn8887]]<br />
|[https://github.com/rsn8887/Hurrican Here]<br />
|[https://www.winterworks.de/project/hurrican/ Yes]<br />
|2019-05-09<br />
|-<br />
| InvadersNX<br />
| Space Invaders type game<br />
| MaesterRowen<br />
| [https://github.com/MaesterRowen/InvadersNX/releases/latest Here]<br />
| [https://github.com/MaesterRowen/InvadersNX Yes]<br />
| 2018-07-09<br />
|-<br />
| Ken's Labyrinth<br />
| Classic MS-DOS shooter with enhanced features such as HD textures and 60fps support<br />
| Nightfox<br />
| [https://github.com/sacredbanana/lab3d-sdl/releases/latest Here]<br />
| [https://github.com/sacredbanana/lab3d-sdl Yes]<br />
| 2019-01-19<br />
|-<br />
| MCOsu<br />
| Osu! Port for Switch<br />
| McKay42<br />
| [https://github.com/McKay42/McOsu-NX/releases Here]<br />
| [https://github.com/McKay42/McOsu-NX Yes]<br />
|<br />
|-<br />
| Meritous<br />
| Top View Dungeon Game<br />
| nop90<br />
| [https://github.com/Nop90-Switch/Meritous-Switch/releases Here]<br />
| [https://github.com/Nop90-Switch/Meritous-Switch Yes]<br />
| 2018-03-17<br />
|-<br />
| Noodles!<br />
| A clone of the iOS puzzle game Noodles!<br />
| [[User:MrJPGames|MrJPGames]]<br />
| [https://github.com/MrJPGames/Noodles-/releases Here]<br />
| [https://github.com/MrJPGames/Noodles- Yes]<br />
| 2019-07-24<br />
|-<br />
| NXEngine<br />
| Reimplementation of Cave Story / Doukutsu Monogatari, a Japanese freeware PC side-scrolling platformer game from 2004.<br />
| [[User:carstene1ns|carstene1ns]]<br />
| [https://f4ke.de/dev/switch/ Here]<br />
| [https://github.com/carstene1ns/nxengine-evo/tree/switch-port Yes]<br />
| 2018-05-20<br />
|-<br />
| NXQuake<br />
| TyrQuake is a source port of id Software's Quake<br />
| fgsfds<br />
| [https://github.com/fgsfdsfgs/nxquake/releases Here]<br />
| [https://github.com/fgsfdsfgs/nxquake Yes]<br />
| 2018-09-15<br />
|-<br />
| NXQuake2<br />
| Yamagi Quake II is a source port of id Software's Quake II<br />
| fgsfds<br />
| [https://github.com/fgsfdsfgs/nxquake2/releases Here]<br />
| [https://github.com/fgsfdsfgs/nxquake2 Yes]<br />
| 2018-09-04<br />
|-<br />
| OpenBOR<br />
| 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!<br />
| cpasjuste<br />
| [https://github.com/Cpasjuste/openbor/releases Here]<br />
| [https://github.com/Cpasjuste/openbor Yes]<br />
| 2018-03-18<br />
|-<br />
| OpenTyrian<br />
| OpenTyrian is a port of the DOS shoot-em-up Tyrian, which is an arcade-style vertical scrolling shooter.<br />
| felixrg<br />
| [https://github.com/felixrg/opentyrian/releases Here]<br />
| [https://github.com/felixrg/opentyrian Yes]<br />
| 2018-05-19<br />
|-<br />
| Pickr<br />
| Pickr webgame port for Switch homebrew<br />
| Bernardo Giordano<br />
| [https://github.com/BernardoGiordano/Pickr/releases Here]<br />
| [https://github.com/BernardoGiordano/Pickr Yes]<br />
| 2018-04-16<br />
|-<br />
| Pixel-Painter<br />
| A simple drawing homebrew<br />
| 8BitWonder<br />
| [https://github.com/16BitWonder/Pixel-Painter-Switch/releases Here]<br />
| [https://github.com/16BitWonder/Pixel-Painter-Switch Yes]<br />
| 2020-08-19<br />
|-<br />
| Postal-NX<br />
| An isometric top-down shooter video game from 1997<br />
| lantus/MVG<br />
| [https://github.com/lantus/postal-nx/releases Here]<br />
| [https://github.com/lantus/postal-nx Yes]<br />
| 2018-05-25<br />
|-<br />
| powder-nx<br />
| Physics sandbox game, which simulates air pressure and velocity, heat, gravity and a countless number of interactions between different substances.<br />
| VelocityRa<br />
| [https://github.com/VelocityRa/powder-nx/releases Here]<br />
| [https://github.com/VelocityRa/powder-nx Yes]<br />
| 2019-09-15<br />
|-<br />
| REminiscence<br />
| REminiscence is a re-implementation of the engine used in the game Flashback made by Delphine Software and released in 1992.<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/REminiscence/releases Here]<br />
| [https://github.com/Cpasjuste/REminiscence Yes]<br />
| 2018-03-28<br />
|-<br />
| SDLLopan<br />
| A classic remake of Linux Lopan (a Mahjong solitaire clone) by Dave Ashley.<br />
| nop90<br />
| [https://github.com/Nop90-Switch/SDLLopan-SWITCH/releases Here]<br />
| [https://github.com/Nop90-Switch/SDLLopan-SWITCH Yes]<br />
| 2018-03-02<br />
|-<br />
| SDLPoP<br />
| An open-source port of Prince of Persia, based on the disassembly of the DOS version.<br />
| usineur<br />
| [https://github.com/usineur/SDLPoP/releases Here]<br />
| [https://github.com/usineur/SDLPoP Yes]<br />
| 2018-05-14<br />
|-<br />
| Space Game NX<br />
| Space game is a graphical shooter game on the Switch ported from Wii U! <br />
| vgmoose<br />
| [https://github.com/vgmoose/spacenx/releases Here]<br />
| [https://github.com/vgmoose/spacenx/ Yes]<br />
| 2018-02-19<br />
|-<br />
| Snake<br />
| A minimalistic Snake clone for Switch made with LovePotion.<br />
| Shrike<br />
| [https://github.com/Ryuzaki-MrL/tetriswitch/releases Here]<br />
| [https://github.com/Ryuzaki-MrL/tetriswitch Yes]<br />
| 2018-03-10<br />
|-<br />
|Stepmania 5.x<br />
|A port of the Stepmania 5.x PC game to the switch<br />
|retronx-team<br />
|[https://github.com/retronx-team/stepmania-nx/releases Here]<br />
|[https://github.com/retronx-team/stepmania-nx Yes]<br />
|<br />
|-<br />
| Super Methane Brothers<br />
| 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.<br />
| [[User:carstene1ns|carstene1ns]]<br />
| [https://f4ke.de/dev/switch/ Here]<br />
| [https://github.com/carstene1ns/super-methane-brothers Yes]<br />
| 2018-05-08<br />
|-<br />
| Switch Pong<br />
| A port of pong for the Nintendo Switch<br />
| TheKgg<br />
| [https://github.com/TheKgg/switch-pong/releases Here]<br />
| [https://github.com/TheKgg/switch-pong Yes]<br />
| 2018-04-20<br />
|-<br />
| Tetriswitch<br />
| A Tetris clone for Nintendo Switch.<br />
| Ryuzaki_MrL<br />
| [https://github.com/Ryuzaki-MrL/tetriswitch/releases Here]<br />
| [https://github.com/Ryuzaki-MrL/tetriswitch Yes]<br />
| 2018-03-13<br />
|-<br />
| TicTacToe<br />
| A Tic Tac Toe implementation for Switch.<br />
| SH3RLOCK<br />
| [https://sh3rlock.ch/ttt.nro Here]<br />
| [https://sh3rlock.ch/ttt.zip Yes]<br />
| 2018-02-23<br />
|-<br />
| Useless Homebrew<br />
| A "useless machine"-like software, ported from DS<br />
| Tcm0, Rydian (DS)<br />
| [https://drive.google.com/file/d/1r5pi5G20yEAT9eEckCJeyROsC3fn5MaJ/view Here]<br />
| [https://drive.google.com/file/d/1CDTMoUi6HnayhWUd_edmyzcJcP-mvpw3/view Yes]<br />
| 2018-03-03<br />
|}<br />
<br />
=== Emulators ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| ScummVM<br />
| ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games...<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/scummvm/releases Here]<br />
| [https://github.com/Cpasjuste/scummvm/tree/switch Yes]<br />
| 2018-05-18<br />
|-<br />
<br />
|-<br />
| mGBA<br />
| Standalone version of mGBA for Switch<br />
| endrift<br />
| [https://github.com/mgba-emu/mgba/releases/ Here]<br />
| [https://github.com/mgba-emu/mgba/ Yes]<br />
|<br />
|-<br />
| pFBA<br />
| A port of final burn alpha to multiple platforms<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/pfba/releases Here]<br />
| [https://github.com/Cpasjuste/pfba Yes]<br />
| 2018-08-25<br />
|-<br />
| PPSSPP<br />
| Port of the standalone PSP Emulator "PPSSPP" for the Switch<br />
| m4xw, Henrik Rydgård<br />
| [https://ppsspp.org/downloads.html Here]<br />
| No<br />
|<br />
|-<br />
| CHIP8-NX<br />
| CHIP8 emulator<br />
| Marice<br />
| [https://github.com/Marice/CHIP8-NX/releases Here]<br />
| [https://github.com/Marice/CHIP8-NX Yes]<br />
| 2018-05-25<br />
|-<br />
| LaiNESwitch<br />
| Compact, cycle-accurate NES emulator in ~1000 lines of C++.<br />
| Kevoot<br />
| [https://github.com/Kevoot/LaiNESwitch/releases Here]<br />
| [https://github.com/Kevoot/LaiNESwitch Yes]<br />
| 2018-07-26<br />
|-<br />
| pSNES<br />
| snes9x 1.56.2<br />
| Cpasjuste<br />
| [https://github.com/Cpasjuste/psnes/releases Here]<br />
| [https://github.com/Cpasjuste/psnes Yes]<br />
| 2018-08-24<br />
|-<br />
| RetroArch<br />
| RetroArch has advanced features like shaders, netplay, rewinding, and next-frame response times.<br />
|<br />
| [https://github.com/libretro/RetroArch/releases Here]<br />
| [https://github.com/libretro/RetroArch Yes]<br />
| 2018-10-01<br />
|-<br />
|}<br />
<br />
===Title managers===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
|}<br />
<br />
=== Save managers===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| Checkpoint<br />
| Fast and simple save manager for 3DS and Switch written in C++.<br />
| Bernardo Giordano<br />
| [https://github.com/BernardoGiordano/Checkpoint/releases/latest Here]<br />
| [https://github.com/BernardoGiordano/Checkpoint Yes]<br />
| 2018-05-14<br />
|-<br />
| JKSV<br />
| WIP save manager for more advanced users<br />
| JK_<br />
| [https://github.com/J-D-K/JKSV/releases Here]<br />
| [https://github.com/J-D-K/JKSV Yes]<br />
| 2018-06-25<br />
|-<br />
| EdiZon<br />
| Save file manager and editor with JSON+Lua plugin support for easy creation of new save editors for any game.<br />
| WerWolv<br />
| [https://github.com/thomasnet-mc/EdiZon/releases/latest Here]<br />
| [https://github.com/thomasnet-mc/EdiZon Yes]<br />
| 2018-08-19<br />
|}<br />
<br />
=== File servers ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| Ftpd<br />
| A port of ftpd for 3DS.<br />
| mtheall, TuxSH, WinterMute<br />
| [https://github.com/mtheall/ftpd/releases/latest Here]<br />
| [https://github.com/mtheall/ftpd Yes]<br />
| 2018-09-24<br />
|-<br />
| sys-ftpd<br />
| A port of ftpd for 3DS that's running in the background.<br />
| mtheall, TuxSH, WinterMute, jakibaki<br />
| [https://github.com/jakibaki/sys-ftpd/releases/latest Here]<br />
| [https://github.com/jakibaki/sys-ftpd Yes]<br />
| 2018-09-24<br />
|-<br />
| mtp-server-nx<br />
| A port of [https://manpages.ubuntu.com/manpages/xenial/man1/mtp-server.1.html mtp-server] for Android.<br />
| Gillou68310<br />
| [https://github.com/retronx-team/mtp-server-nx/releases/latest Here]<br />
| [https://github.com/retronx-team/mtp-server-nx Yes]<br />
| 2019-09-19<br />
|-<br />
| nxmtp<br />
| A MTP implementation.<br />
| liuervehc<br />
| [https://github.com/liuervehc/nxmtp/releases/latest Here]<br />
| No<br />
| 2019-01-13<br />
|}<br />
<br />
=== Demos ===<br />
{| class="wikitable" border="1"<br />
! width="20%" | Name<br />
! width="50%" | Description<br />
! width="10%" | Author<br />
! width="10%" | Download<br />
! width="5%" | Open-Source<br />
! width="15%" | Last Updated<br />
|-<br />
| 34c3-demo<br />
| Demo from the 34c3 for Homebrew on the Switch.<br />
| [[User:plutoo|plutoo]]<br />
| [https://github.com/switchbrew/34c3-demo Here]<br />
| Yes<br />
| 2018-02-19<br />
|-<br />
| Dokkaebi Hack<br />
| Animated Demo using SDL on the Switch.<br />
| [[User:NicholeMattera|NicholeMattera]]<br />
| [https://git.nicholemattera.com/NicholeMattera/Dokkaebi-Hack Here]<br />
| Yes<br />
| 2019-06-14<br />
|-<br />
|}</div>Fincshttps://switchbrew.org/w/index.php?title=Homebrew_Menu&diff=10521Homebrew Menu2020-12-17T22:06:08Z<p>Fincs: Reverted edits by Hallowizer (talk) to last revision by Yellows8</p>
<hr />
<div>The [https://github.com/switchbrew/nx-hbmenu Homebrew Menu] (hbmenu) is the menu for launching homebrew applications. Applications are launched using the Homebrew ABI, hence normally [https://github.com/switchbrew/nx-hbloader nx-hbloader] will do the actual launching.<br />
<br />
= Usage =<br />
See [[Homebrew Applications]] for SD layout etc.<br />
<br />
= Controls =<br />
Use the D-Pad/joystick to select the app/directory, up/down can be used for faster scrolling. Press A to launch the app. Navigating directories is supported, press A to enter a directory and press B to leave the current directory. Press Y to activate netloader and press B to deactivate netloader.<br />
<br />
Press the - button to enter Theme Menu. Press X to (un)star the current menu entry.<br />
<br />
== Touch controls ==<br />
To navigate through the list of folders and applications you can swipe left and right on the bottom list. To open an item you can tap on it in the list or with it highlighted tap the <code>Open</code> or <code>Launch</code> button prompt in the bottom right. To go back (a folder) you can swipe up or tap the <code>Back</code> button prompt in the bottom right (the latter is only available when no message-box is shown / netloader isn't active). To activate the netloader you can swipe down on the screen. To enter Theme Menu you can swipe left on the screen.<br />
<br />
To (un)star the current menu entry you can touch the (un)star button prompt.<br />
<br />
= Status =<br />
The battery/charge/temperature status can be displayed, however this is only displayed when the required services are available/accessible.<br />
<br />
The local-time and network status are also displayed.<br />
<br />
= Netloader =<br />
With netloader activated as described above you can load apps over the network with nxlink. With the [[Setting_up_Development_Environment|toolchain]] setup run <code>nxlink <nrofile></code> if your network can handle UDP broadcast messages. If nxlink fails with "No response from Switch!" you can use <code>-a <ip address></code> before <code><nrofile></code> for the address to send the app to. See nxlink help for more options.<br />
<br />
= Themes =<br />
Themes can be optionally loaded from SD "/config/nx-hbmenu/themes/". The theme (or the default) can be selected using the Theme Menu via the - button. This uses [https://hyperrealm.github.io/libconfig/libconfig_manual.html libconfig]. Default settings will be used for any settings not specified in the theme (including themeInfo).<br />
<br />
The file extension is .cfg. .romfs is also supported, this is RomFs. With the [[Setting_up_Development_Environment|toolchain]] setup you can run the following to build a .romfs: <code>build_romfs {input directory} {out name}.romfs</code>. The .romfs (and therefore the input directory) contains: '/theme.cfg', optionally '/icon.jpg' for the menu-entry in Theme Menu, and any assets.<br />
<br />
See [[Homebrew Themes]] for a list of themes.<br />
<br />
The string used for displaying the buttons/stars can be set with buttonAText, buttonBText, buttonXText, buttonYText, buttonMText, labelStarOnText, and labelStarOffText, but normally these can be left at the defaults. Change the value of the enableWaveBlending field to 1 to enable wave blending.<br />
<br />
There's also borderColor, borderTextColor, and progressBarColor fields which can be set like the other color fields. logoColor can be used to set the RGB color of the logo, the alpha component is loaded from the logo image. highlightGradientEdgeColor is also available.<br />
<br />
The color fields are RGBA.<br />
<br />
Sample theme file:<br />
<br />
themeInfo={<br />
name="Theme Name";<br />
author="Theme Author Name";<br />
version="1.0.0";<br />
};<br />
<br />
lightTheme={<br />
textColor=(0,0,0,255);<br />
frontWaveColor=(255,102,204,255);<br />
middleWaveColor=(255,51,153,255);<br />
backWaveColor=(204,0,153,255);<br />
backgroundColor=(233,236,241,255);<br />
highlightColor=(255,77,166,255);<br />
separatorColor=(128,0,128,255);<br />
enableWaveBlending=0;<br />
};<br />
<br />
darkTheme={<br />
textColor=(255,255,255,255);<br />
frontWaveColor=(255,51,153,255);<br />
middleWaveColor=(255,102,204,255);<br />
backWaveColor=(204,0,153,255);<br />
backgroundColor=(0,0,0,255);<br />
highlightColor=(255,77,166,255);<br />
separatorColor=(255,255,255,255);<br />
enableWaveBlending=0;<br />
};<br />
<br />
layout={<br />
<object name>={<br />
visible=true;<br />
posType=true;<br />
posStart = (100,400);<br />
posEnd = (170,0);<br />
size = (0,680);<br />
};<br />
<br />
// Any other objects here.<br />
<br />
};<br />
<br />
assets={<br />
<object name>={<br />
path = "relative_path_in_romfs";<br />
imageSize = (256,256);<br />
};<br />
<br />
// Any other objects here.<br />
};<br />
<br />
The 'layout' group is optional. Each group within this is for a layout object, these and the settings contained within the objects are all optional (defaults are used when not specified). How each setting in the layout objects' are handled are specific to each object. The 'visible' field controls whether the object is displayed, however this is ignored from config for some objects / unused for certain other objects. posType controls the handling for pos* fields: generally this does nothing, however with some objects this controls whether the pos is absolute (false) / relative to {base-pos} or special-handling (true). When posType is absolute the pos* fields must not be negative. The content of 'size' must not be negative.<br />
<br />
Note that increasing *Wave height compared to the defaults can result in slowdown since sw-rendering is used.<br />
<br />
Layout objects:<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Layout object name<br />
! Description<br />
! 'visible' from config ignored / field used<br />
! Used fields (besides 'visible')<br />
|-<br />
| logo || Hbmenu logo image. || Yes, yes || posStart<br />
|-<br />
| hbmenuVersion || Hbmenu version text. || Yes, yes || posStart<br />
|-<br />
| loaderInfo || Loader info text (displayed next to hbmenuVersion with the defaults).<br />
When the loader-info string doesn't contain a space, posStart is used directly for the text position, otherwise the right-justified position from posEnd is used.<br />
| Yes, yes || posStart, posEnd<br />
|-<br />
| attentionText || Attention text (Applet Mode text). When posType is relative (the default), the base position is the final position used by 'status'. || Yes, yes || posType, posStart<br />
|-<br />
| logInfo || Logging info for debug enabled via a build define. || Yes, yes || posStart<br />
|-<br />
| infoMsg || Text for NoAppsFound_Msg. || Yes, yes || posStart<br />
|-<br />
| menuPath || Menu path text. || No, yes || posStart, size[0]<br />
|-<br />
| menuTypeMsg || Text for the current type of menu (such as "Theme Menu"). Position is right-justified from posStart. || No, yes || posStart<br />
|-<br />
| msgBoxSeparator || Message-box separator. Position is relative to the bottom of the box. || No, no || posStart[1]<br />
|-<br />
| msgBoxBottomText || Message-box text displayed at the bottom below the separator. Position is relative to the bottom of the box. || No, no || posStart[1]<br />
|-<br />
| backgroundImage || Background image, not set with the defaults. Requires assets.background_image to be setup. This is drawn after backgroundColor, the maximum drawn y-pos is the same as backgroundColor (drawing where the waves are located is skipped). Note that this can result in slowdown since sw-rendering is used, especially with an image which covers the entire screen (besides where the waves are displayed). || No, yes || posStart<br />
|-<br />
| backWave || Back wave. The height is controlled by size[1], relative to the bottom of the screen. || No, yes || size[1]<br />
|-<br />
| middleWave || Middle wave. The height is controlled by size[1], relative to the bottom of the screen. || No, yes || size[1]<br />
|-<br />
| frontWave || Front wave. The height is controlled by size[1], relative to the bottom of the screen. || No, yes || size[1]<br />
|-<br />
| buttonA || Button A, displayed with the string from theme*.buttonAText. With posType=relative (default is absolute) the position is relative to buttonAText. || No, yes || posType, posStart<br />
|-<br />
| buttonAText || Button A text. posType=true is the same as absolute since the base-pos is 0. || No, yes || posType, posStart<br />
|-<br />
| buttonB || Button B, displayed with the string from theme*.buttonBText. With posType=relative the base position is buttonBText. || No, yes || posType, posStart<br />
|-<br />
| buttonBText || Button B text. With posType=relative the base position is buttonA. When buttonA is displayed with non-empty-directory, posStart is used, otherwise posEnd is used (buttonA not displayed). || No, yes || posType, posStart<br />
|-<br />
| buttonY || Button Y, displayed with the string from theme*.buttonYText. With posType=relative the base position is buttonYText. || No, yes || posType, posStart<br />
|-<br />
| buttonYText || Button Y text. With posType=relative the base position is buttonB, or if that's not displayed (menu path is in the root directory) the base is buttonA instead. || No, yes || posType, posStart<br />
|-<br />
| buttonM || Button '-', displayed with the string from theme*.buttonMText. With posType=relative the base position is buttonMText. || No, yes || posType, posStart<br />
|-<br />
| buttonMText || Button '-' text. With posType=relative the base position is buttonY. || No, yes || posType, posStart<br />
|-<br />
| buttonX || Button X, displayed with the string from theme*.buttonXText. With posType=relative the base position is buttonXText. || No, yes || posType, posStart<br />
|-<br />
| buttonXText || Button X text. With posType=relative the base position is buttonM. || No, yes || posType, posStart<br />
|-<br />
| networkIcon || Network status icon. With posType=relative the final position from 'status' is used for the base X-coordinate, however posStart[1] is used directly as the Y-coordinate regardless. || No, yes || posType, posStart<br />
|-<br />
| batteryCharge || Battery charge text. The position from posStart is right-justified. || No, yes || posStart<br />
|-<br />
| batteryIcon || Battery icon. || No, yes || posStart<br />
|-<br />
| chargingIcon || Battery charging icon. || No, yes || posStart<br />
|-<br />
| status || Text displayed for the time. The position from posStart is right-justified. || No, yes || posStart<br />
|-<br />
| temperature || Temperature text. || No, yes || posStart<br />
|-<br />
| menuList || Menu list. posStart is the absolute position for the first tile. posEnd is the relative position for the next tile, relative to the current tile (outline not included). The size doesn't include the outline. || No, no || posStart, posEnd, size<br />
|-<br />
| menuListTiles || posEnd[0] is the the maximum number of tile entries to adjust the currently selected entry index by, for example with HID input for DPad Up/Down. || No, no || posEnd[0]<br />
|-<br />
| menuListIcon || Menu entry icon. posStart is relative to the current tile entry (see menuList), regardless of posType. size must be >0 and <=256x256, otherwise 256x256 is used. || No, no || posStart, size<br />
|-<br />
| menuListName || Menu entry name text. posStart is relative to the current tile entry (see menuList), regardless of posType. || No, no || posStart, size<br />
|-<br />
| menuActiveEntryIcon || Icon for the currently active menu entry. size must be >0 and <=256x256, otherwise 256x256 is used. || No, yes || posStart, size<br />
|-<br />
| menuActiveEntryName || Name text for the currently active menu entry. || No, yes || posStart, size<br />
|-<br />
| menuActiveEntryAuthor || Author text for the currently active menu entry. || No, yes || posStart<br />
|-<br />
| menuActiveEntryVersion || Version text for the currently active menu entry. || No, yes || posStart<br />
|-<br />
|}<br />
<br />
The 'assets' group is optional, it is only used with .romfs themes. The 'path' and 'imageSize' settings are required. imageSize[0-1] must be >0, and <= 1280x720. For some objects, the imageSize must match the internal imageSize for certain layout objects. The 'path' is the file-path to load the asset from, this is relative to "{mount-name}:/". imageSize is the size of the image, for non-.bin this must match the image size for the loaded file.<br />
<br />
When an asset object is not specified, the settings are invalid, or loading the file fails, the default asset is used (if any).<br />
<br />
The 'path' must have one of the below extensions:<br />
* ".bin": Raw image without a header (the default images also use this). imageSize directly controls the size to load from here, the filesize must match width*height*{pixel-byte-size}.<br />
* ".jpg"/".jpeg": JPEG, if you need transparency use PNG instead.<br />
* ".png": PNG, background-color is black(all-zero) when the input PNG uses alpha and the target format is RGB24.<br />
<br />
The pixel formats listed below are the formats used internally, the image-loading libraries handle converting the image to the required format where needed (except for .bin which uses the listed format directly).<br />
<br />
Asset objects:<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Layout object name<br />
! Description<br />
! Pixel format<br />
! Only alpha component is used, with RGB from textColor used instead<br />
! Size which the imageSize must match, from the internal layout object field<br />
|-<br />
| battery_icon || Battery icon. || RGBA32 || Yes || None<br />
|-<br />
| charging_icon || Battery charging icon. || RGBA32 || Yes || None<br />
|-<br />
| folder_icon || Folder/directory icon. || RGB24 || No || 256x256<br />
|-<br />
| invalid_icon || Icon displayed when loading the app's icon failed. || RGB24 || No || 256x256<br />
|-<br />
| theme_icon_dark || Default icon displayed in the Theme Menu for darkTheme. || RGB24 || No || 256x256<br />
|-<br />
| theme_icon_light || Default icon displayed in the Theme Menu for lightTheme. || RGB24 || No || 256x256<br />
|-<br />
| airplane_icon || Icon displayed when nifmGetInternetConnectionStatus fails. || RGBA32 || Yes || None<br />
|-<br />
| wifi_none_icon || Icon displayed for wifi with signal strength 0. || RGBA32 || Yes || None<br />
|-<br />
| wifi1_icon || Icon displayed for wifi with signal strength 1. || RGBA32 || Yes || None<br />
|-<br />
| wifi2_icon || Icon displayed for wifi with signal strength 2. || RGBA32 || Yes || None<br />
|-<br />
| wifi3_icon || Icon displayed for wifi with signal strength 3. || RGBA32 || Yes || None<br />
|-<br />
| eth_icon || Icon displayed when connected to the Internet via Ethernet. || RGBA32 || Yes || None<br />
|-<br />
| eth_none_icon || Icon displayed when using Ethernet, with no Internet connection. || RGBA32 || Yes || None<br />
|-<br />
| background_image || Background image. Optional, not set with the defaults. See layout.backgroundImage. || RGB24 || No || None<br />
|}<br />
<br />
= File Associations =<br />
File-association cfg files can optionally be loaded from SD "/config/nx-hbmenu/fileassoc/" during startup. There's 1 .cfg file for each app. During normal menu scanning, hbmenu will check for file_extensions/filenames from fileassoc cfg with the dir-list filename, when the file is not recognized otherwise (likewise for directories). This is processed in the same order that the cfg was loaded from SD / same order specified in the cfg file.<br />
<br />
When processing directories where no NRO was detected, hbmenu will go through the dir-listing and use the first entry where the filename matches a fileassoc entry where <code>filename</code> is specified (file_extension entries are skipped).<br />
<br />
The generated menu entry launches the specified app_path where the first passed argument (argv[1] in the launched app) is the absolute filepath for the associated file. See below regarding the icon used for the menu entry. The author and version fields for the menu entry are loaded from app_path, while the name is the filename (unless a directory is being processed, in this case the directory name is used). When {$FILEPATH with extension changed to .nacp} exists, the aforementioned strings will be loaded from there instead.<br />
<br />
The only optional setting is icon_path and app_args. All paths are absolute. Icon will attempted to be loaded from the following: {$FILEPATH with extension changed to .jpg} -> icon_path setting if it exists (target setting -> main file_assoc setting) -> icon from app_path.<br />
<br />
If you have targets where file_extension and filename both have the same extension, the filename target should be located before that file_extension target in the cfg. Targets which have both file_extension and filename settings are ignored. Each target must have either a file_extension or filename setting.<br />
<br />
app_args specifies the args to pass following argv[0](app-path). This is an array of strings for each argv[N+1]. If a "%f" token is found (only one per array index is handled), it's replaced with the path for the fileassoc. If no "%f" token is specified or app_args is not specified, the fileassoc path is passed to argv[1].<br />
<br />
Sample fileassoc file:<br />
<br />
fileassoc={<br />
app_path="/switch/myapp/app.nro";<br />
icon_path="/switch/myapp/myicon.jpg";<br />
app_args = ["arg1", "arg2", "%f"];<br />
<br />
targets=(<br />
{<br />
file_extension=".ext3";<br />
icon_path="/switch/myapp/myicon2.jpg";<br />
app_args = ["arg1", "arg2", "--path=%f"]; // Optional, overrides fileassoc.app_args.<br />
},<br />
{<br />
file_extension=".ext4";<br />
icon_path="/switch/myapp/myicon3.jpg";<br />
},<br />
{<br />
filename="main.py";<br />
icon_path="/switch/myapp/myicon4.jpg";<br />
}<br />
);<br />
};</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=9455News2020-05-11T22:05:43Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''11 May 20''' [https://devkitpro.org/viewtopic.php?f=13&t=9058 devkitA64 r15, libnx v3.2.0, deko3d v0.2.0, switch-examples v20200511] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.3.2 nx-hbloader v2.3.2] released.<br />
*'''30 April 20''' Nintendo released system update [[10.0.2]].<br />
*'''22 April 20''' Nintendo released system update [[10.0.1]].<br />
*'''14 April 20''' Nintendo released system update [[10.0.0]].</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=9452News/Archive2020-05-11T20:39:21Z<p>Fincs: </p>
<hr />
<div>*'''4 April 20''' [https://devkitpro.org/viewtopic.php?f=13&t=9035 libnx v3.1.0, switch-examples v20200404 and deko3d v0.1.0 released]. On the 6th nx-hbmenu v3.3.0 was [https://github.com/switchbrew/nx-hbmenu/releases/latest released].<br />
*'''2 April 20''' [https://github.com/switchbrew/nssu-updater nssu-updater] and [https://github.com/switchbrew/contents-delivery-manager contents-delivery-manager] were released.<br />
*'''3 March 20''' Nintendo released system update [[9.2.0]].<br />
*'''10 December 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8989 libnx v3.0.0, switch-examples v20191211, Atmosphère v0.10.1, nx-hbmenu v3.2.0, and nx-hbloader v2.3.0 released].<br />
*'''4 December 19''' Nintendo released system update [[9.1.0]].<br />
*'''30 September 19''' Nintendo released system update [[9.0.1]].<br />
*'''14 September 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8964 libnx v2.5.0 and switch-examples v20190914 released]. nx-hbmenu v3.1.1 [https://github.com/switchbrew/nx-hbmenu/releases/tag/v3.1.1 released]. [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.9.4 Atmosphère 0.9.4 released with support for 9.0.0].<br />
*'''9 September 19''' Nintendo released system update [[9.0.0]].<br />
*'''10 July 19''' Nintendo [https://twitter.com/NintendoAmerica/status/1148934589026455552 announced] the Nintendo Switch Lite system.<br />
*'''17 June 19''' Nintendo released system update [[8.1.0]].<br />
*'''1 May 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8908 libnx v2.2.0 and switch-examples v20190501] released.<br />
*'''23 April 19''' Nintendo released system update [[8.0.1]].<br />
*'''15 April 19''' Nintendo released system update [[8.0.0]].<br />
*'''29 March 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8891 devkitA64 r13] and [https://github.com/switchbrew/libnx/releases/tag/v2.1.0 libnx v2.1.0] released with pthread/std::thread support.<br />
*'''26 March 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.6 Atmosphère v0.8.6] released with lots of bugfixes, more cheat stuff and web applet homebrew support.<br />
*'''21 February 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.4 Atmosphère v0.8.4] released with 7.0.x support.<br />
*'''18 February 19''' Nintendo released system update [[7.0.1]].<br />
*'''28 January 19''' Nintendo released system update [[7.0.0]].<br />
*'''24 January 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.3 Atmosphère v0.8.3] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.1.0 nx-hbloader v2.1.0] were released.<br />
*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.<br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=9451News2020-05-11T20:39:11Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''11 May 20''' [https://devkitpro.org/viewtopic.php?f=13&t=9058 devkitA64 r15, libnx v3.2.0, deko3d v0.2.0, switch-examples v20200511 released].<br />
*'''30 April 20''' Nintendo released system update [[10.0.2]].<br />
*'''22 April 20''' Nintendo released system update [[10.0.1]].<br />
*'''14 April 20''' Nintendo released system update [[10.0.0]].</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=9032News2020-04-05T01:35:41Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''4 April 20''' [https://devkitpro.org/viewtopic.php?f=13&t=9035 libnx v3.1.0, switch-examples v20200404 and deko3d v0.1.0 released].<br />
*'''2 April 20''' [https://github.com/switchbrew/nssu-updater nssu-updater] and [https://github.com/switchbrew/contents-delivery-manager contents-delivery-manager] were released.<br />
*'''3 March 20''' Nintendo released system update [[9.2.0]].<br />
*'''10 December 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8989 libnx v3.0.0, switch-examples v20191211, Atmosphère v0.10.1, nx-hbmenu v3.2.0, and nx-hbloader v2.3.0 released].</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=9031News/Archive2020-04-05T01:35:05Z<p>Fincs: </p>
<hr />
<div>*'''4 December 19''' Nintendo released system update [[9.1.0]].<br />
*'''30 September 19''' Nintendo released system update [[9.0.1]].<br />
*'''14 September 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8964 libnx v2.5.0 and switch-examples v20190914 released]. nx-hbmenu v3.1.1 [https://github.com/switchbrew/nx-hbmenu/releases/tag/v3.1.1 released]. [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.9.4 Atmosphère 0.9.4 released with support for 9.0.0].<br />
*'''9 September 19''' Nintendo released system update [[9.0.0]].<br />
*'''10 July 19''' Nintendo [https://twitter.com/NintendoAmerica/status/1148934589026455552 announced] the Nintendo Switch Lite system.<br />
*'''17 June 19''' Nintendo released system update [[8.1.0]].<br />
*'''1 May 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8908 libnx v2.2.0 and switch-examples v20190501] released.<br />
*'''23 April 19''' Nintendo released system update [[8.0.1]].<br />
*'''15 April 19''' Nintendo released system update [[8.0.0]].<br />
*'''29 March 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8891 devkitA64 r13] and [https://github.com/switchbrew/libnx/releases/tag/v2.1.0 libnx v2.1.0] released with pthread/std::thread support.<br />
*'''26 March 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.6 Atmosphère v0.8.6] released with lots of bugfixes, more cheat stuff and web applet homebrew support.<br />
*'''21 February 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.4 Atmosphère v0.8.4] released with 7.0.x support.<br />
*'''18 February 19''' Nintendo released system update [[7.0.1]].<br />
*'''28 January 19''' Nintendo released system update [[7.0.0]].<br />
*'''24 January 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.3 Atmosphère v0.8.3] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.1.0 nx-hbloader v2.1.0] were released.<br />
*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.<br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=Setting_up_Development_Environment&diff=8289Setting up Development Environment2019-11-10T18:50:52Z<p>Fincs: Protected "Setting up Development Environment": Counter-productive edit warring ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))</p>
<hr />
<div>= Setup =<br />
Install [https://devkitpro.org/ devkitA64]. If it's already installed, update it using sudo (dkp-)pacman -Syu. On Windows, there's a [https://github.com/devkitPro/installer/releases/latest graphical installer]. On Unix-like platforms such as Linux/macOS, there's [https://github.com/devkitPro/pacman/releases/latest pacman].<br />
<br />
[https://devkitpro.org devkitPro] also provides a set of [https://hub.docker.com/u/devkitpro/ Docker images] which come pre-installed with all the portlibs packages.<br />
<br />
'''Please note: devkitPro is the organisation that provides the tools. They are not a software package, they don't have version numbers and the only way to have them compile your code is to pay them (or maybe if you ask nicely when you need help figuring out an issue)'''<br />
<br />
==Windows==<br />
devkitPro provides 64-bit precompiled Windows binaries of devkitA64 which can be run directly on Windows.<br />
<br />
* If you already use msys2 then you can follow the instructions at https://github.com/devkitPro/pacman/releases/latest to add the devkitPro repositories.<br />
<br />
Otherwise<br />
<br />
* [https://github.com/devkitPro/installer/releases download the latest version of the graphical installer] from github and run it, following the instructions as you go.<br />
* An Internet connection is required.<br />
* Ensure at least "Switch Development" is ticked - you can also leave the other options ticked if you wish.<br />
* Once the installer has finished, launch MSYS from:<br />
** Windows 7 and earlier: Start -> All Programs -> devkitPro -> MSYS<br />
** Windows 8 and 8.1: Right click on the Start screen and select 'All Apps'. You should find MSYS there.<br />
** Windows 10 (pre-Anniversary Update): Start -> All Apps -> devkitPro -> MSYS<br />
** Windows 10 (post-Anniversary Update): Start -> devkitPro -> MSYS<br />
<br />
==Unix-like platforms==<br />
Currently devkitPro provides precompiled versions of devkitA64 for the following Unix-like platforms: Linux (x86_64), macOS (x86_64). Note that Linux x86_64 binaries are usable under WSL.<br />
<br />
* Follow the instructions to install pacman found at https://github.com/devkitPro/pacman/releases/latest<br />
* run sudo (dkp-)pacman -S switch-dev to install the tools and libraries for switch development<br />
* logout and login again to get the environment settings needed.<br />
<br />
= Building the examples =<br />
Switch examples are still being created; however, there are a growing number of examples available from the [https://github.com/switchbrew/switch-examples switchbrew/switch-examples GitHub repository]. These are downloaded by the installer and can be found in $DEVKITPRO/examples/switch<br />
<br />
These can be built from the command line.<br />
<br />
To start a new homebrew project from the <code>bash</code> shell, simply type the following (replacing <code>'''~/projects/myswitchproject'''</code> with the place you would like your project to be stored, with <code>~</code> meaning your HOME directory):<br />
cp -r $DEVKITPRO/examples/switch/templates/application '''~/projects/myswitchproject'''<br />
cd '''~/projects/myswitchproject'''<br />
<br />
The standard Makefile will use the folder as the name of the .nro that will be built. You can keep that behaviour or simply change the <code>TARGET := $(notdir $(CURDIR))</code> line in the Makefile to explicitly name your project.<br />
<br />
To compile it, type <code>make</code> in the project directory.</div>Fincshttps://switchbrew.org/w/index.php?title=Setting_up_Development_Environment&diff=8288Setting up Development Environment2019-11-10T18:50:13Z<p>Fincs: </p>
<hr />
<div>= Setup =<br />
Install [https://devkitpro.org/ devkitA64]. If it's already installed, update it using sudo (dkp-)pacman -Syu. On Windows, there's a [https://github.com/devkitPro/installer/releases/latest graphical installer]. On Unix-like platforms such as Linux/macOS, there's [https://github.com/devkitPro/pacman/releases/latest pacman].<br />
<br />
[https://devkitpro.org devkitPro] also provides a set of [https://hub.docker.com/u/devkitpro/ Docker images] which come pre-installed with all the portlibs packages.<br />
<br />
'''Please note: devkitPro is the organisation that provides the tools. They are not a software package, they don't have version numbers and the only way to have them compile your code is to pay them (or maybe if you ask nicely when you need help figuring out an issue)'''<br />
<br />
==Windows==<br />
devkitPro provides 64-bit precompiled Windows binaries of devkitA64 which can be run directly on Windows.<br />
<br />
* If you already use msys2 then you can follow the instructions at https://github.com/devkitPro/pacman/releases/latest to add the devkitPro repositories.<br />
<br />
Otherwise<br />
<br />
* [https://github.com/devkitPro/installer/releases download the latest version of the graphical installer] from github and run it, following the instructions as you go.<br />
* An Internet connection is required.<br />
* Ensure at least "Switch Development" is ticked - you can also leave the other options ticked if you wish.<br />
* Once the installer has finished, launch MSYS from:<br />
** Windows 7 and earlier: Start -> All Programs -> devkitPro -> MSYS<br />
** Windows 8 and 8.1: Right click on the Start screen and select 'All Apps'. You should find MSYS there.<br />
** Windows 10 (pre-Anniversary Update): Start -> All Apps -> devkitPro -> MSYS<br />
** Windows 10 (post-Anniversary Update): Start -> devkitPro -> MSYS<br />
<br />
==Unix-like platforms==<br />
Currently devkitPro provides precompiled versions of devkitA64 for the following Unix-like platforms: Linux (x86_64), macOS (x86_64). Note that Linux x86_64 binaries are usable under WSL.<br />
<br />
* Follow the instructions to install pacman found at https://github.com/devkitPro/pacman/releases/latest<br />
* run sudo (dkp-)pacman -S switch-dev to install the tools and libraries for switch development<br />
* logout and login again to get the environment settings needed.<br />
<br />
= Building the examples =<br />
Switch examples are still being created; however, there are a growing number of examples available from the [https://github.com/switchbrew/switch-examples switchbrew/switch-examples GitHub repository]. These are downloaded by the installer and can be found in $DEVKITPRO/examples/switch<br />
<br />
These can be built from the command line.<br />
<br />
To start a new homebrew project from the <code>bash</code> shell, simply type the following (replacing <code>'''~/projects/myswitchproject'''</code> with the place you would like your project to be stored, with <code>~</code> meaning your HOME directory):<br />
cp -r $DEVKITPRO/examples/switch/templates/application '''~/projects/myswitchproject'''<br />
cd '''~/projects/myswitchproject'''<br />
<br />
The standard Makefile will use the folder as the name of the .nro that will be built. You can keep that behaviour or simply change the <code>TARGET := $(notdir $(CURDIR))</code> line in the Makefile to explicitly name your project.<br />
<br />
To compile it, type <code>make</code> in the project directory.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=7888News2019-09-14T17:46:14Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''14 September 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8964 libnx v2.5.0 and switch-examples v20190914 released].<br />
*'''9 September 19''' Nintendo released system update [[9.0.0]].<br />
*'''10 July 19''' Nintendo [https://twitter.com/NintendoAmerica/status/1148934589026455552 announced] the Nintendo Switch Lite system.<br />
*'''17 June 19''' Nintendo released system update [[8.1.0]].</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=7887News/Archive2019-09-14T17:45:38Z<p>Fincs: </p>
<hr />
<div>*'''1 May 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8908 libnx v2.2.0 and switch-examples v20190501] released.<br />
*'''23 April 19''' Nintendo released system update [[8.0.1]].<br />
*'''15 April 19''' Nintendo released system update [[8.0.0]].<br />
*'''29 March 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8891 devkitA64 r13] and [https://github.com/switchbrew/libnx/releases/tag/v2.1.0 libnx v2.1.0] released with pthread/std::thread support.<br />
*'''26 March 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.6 Atmosphère v0.8.6] released with lots of bugfixes, more cheat stuff and web applet homebrew support.<br />
*'''21 February 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.4 Atmosphère v0.8.4] released with 7.0.x support.<br />
*'''18 February 19''' Nintendo released system update [[7.0.1]].<br />
*'''28 January 19''' Nintendo released system update [[7.0.0]].<br />
*'''24 January 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.3 Atmosphère v0.8.3] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.1.0 nx-hbloader v2.1.0] were released.<br />
*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.<br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=Homebrew_ABI&diff=7291Homebrew ABI2019-07-29T18:07:17Z<p>Fincs: </p>
<hr />
<div>=== Entrypoint ===<br />
Entrypoint is at binary_ptr+0. At this offset, there is a branch instruction that jumps past the NRO0 header. This is for (.text) file format polyglot compatibility with NSO0.<br />
<br />
Every application should clean itself up before returning to loader.<br />
<br />
This includes tasks like:<br />
* Not leaking handles<br />
* Resetting MemoryState<br />
* No leftover threads running in the background<br />
<br />
Original LR given to entrypoint should be returned to, X0 contains an error code. If original LR is NULL, svcExitProcess should be used.<br />
<br />
=== Entrypoint Arguments ===<br />
'''NSO0:''' the system executes binary_ptr+0 with X0=NULL, X1=main_thread_handle.<br />
<br />
'''NRO0:''' the homebrew loader puts X0=loader_config_ptr, X1=0xFFFFFFFFFFFFFFFF.<br />
<br />
When X0 is non-zero and X1 is not 0xFFFFFFFFFFFFFFFF, the application must handle userland [[SVC#Exception_Handling|exceptions]] (with the same entrypoint args described there). This must be done without corrupting registers for this (x8..x29).<br />
<br />
The loader should forward exceptions to the mapped NRO by just jumping to the NRO entrypoint, without the above register corruption. When the NRO is not mapped the loader can run: <code>svcReturnFromException(0xf801); while(1);</code><br />
<br />
=== Loader Config ===<br />
Loader config allows overriding functionality to workaround limitations in a limited homebrew environment.<br />
<br />
It is an array of tuples:<br />
struct LoaderConfig {<br />
LoaderConfigEntry Entries[];<br />
};<br />
<br />
Each entry is key-value pair:<br />
<br />
struct LoaderConfigEntry {<br />
u32 Key;<br />
u32 Flags;<br />
u64 Value[2];<br />
};<br />
<br />
enum LoaderConfigFlags {<br />
IsMandatory = BIT(0),<br />
};<br />
<br />
=== Loader Config Keys ===<br />
A loader key can be marked as mandatory or not in its <code>Flags</code> field.<br />
<br />
If a key is marked as mandatory it means that the application cannot safely ignore it.<br />
<br />
Thus if said key is not recognized by the application, it should exit with <code>result_code=346 | ((100 + key) << 9);</code>, as the default behaviour may be unsafe.<br />
<br />
If a key that is required is not found (for example with an outdated loader), use <code>result_code=346 | ((200 + key) << 9);</code>.<br />
<br />
If there is some error encountered while validating an entry's values, use <code>result_code = 346 | ((300 + key) << 9);</code>.<br />
<br />
* 0: [[#EndOfList]]: Must be present<br />
<br />
* 1: [[#MainThreadHandle]]: Must be present<br />
<br />
* 2: [[#NextLoadPath]]<br />
<br />
* 3: [[#OverrideHeap]]: If present, must not be ignored<br />
<br />
* 4: [[#OverrideService]]<br />
<br />
* 5: [[#Argv]]<br />
<br />
* 6: [[#SyscallAvailableHint]]<br />
<br />
* 7: [[#AppletType]]: Must be present<br />
<br />
* 8: [[#AppletWorkaround]]: If present, must not be ignored<br />
<br />
* 9: [[#Reserved9]]<br />
<br />
* 10: [[#ProcessHandle]]<br />
<br />
* 11: [[#LastLoadResult]]<br />
<br />
* 12: [[#AllocPages]]<br />
<br />
* 13: [[#LockRegion]]: If present, must not be ignored<br />
<br />
* 14: [[#RandomSeed]]<br />
<br />
* 15: [[#UserIdStorage]]<br />
<br />
* 16: [[#HosVersion]]<br />
<br />
==== EndOfList ====<br />
EndOfList is the final entry in the LoaderConfig. It also provides optional human readable information about the Homebrew loader.<br />
<br />
* '''Key:''' 0<br />
* '''Value[0]:''' Pointer to loader information string, or zero if not present.<br />
* '''Value[1]:''' Size in bytes of the information string, or zero if not present.<br />
<br />
==== MainThreadHandle ====<br />
This is the handle to the thread that is executing the entrypoint. Required for mutex to function.<br />
<br />
* '''Key:''' 1<br />
* '''Value[0]:''' Handle to the main thread.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
* '''DefaultBehavior:''' Use main thread handle from entry function arguments.<br />
<br />
==== NextLoadPath ====<br />
Homebrew menu uses this pointer to write the path of next NRO to load, before returning back to Homebrew loader.<br />
<br />
* '''Key:''' 2<br />
* '''Value[0]:''' Pointer to buffer of size 512. NRO file path, should start with "sdmc:/".<br />
* '''Value[1]:''' Pointer to buffer of size 2048. Argv string to boot NRO with.<br />
<br />
==== OverrideHeap ====<br />
If the NRO loader has reserved some space in the heap for itself, the application must not manipulate the heap. If an [[#AllocPages]] key is present, the region this points to should be accepted by <code>free_pages</code>.<br />
<br />
* '''Key:''' 3<br />
* '''Value[0]:''' Base address of heap. Must be MemoryType 4, 5, or 9 with all reference counts being zero.<br />
* '''Value[1]:''' Size of heap.<br />
* '''DefaultBehavior:''' Allocates heap using svcSetHeapSize instead.<br />
<br />
==== OverrideService ====<br />
The NRO loader should be able to steal handles from more priliveged processes. In this case, homebrew should use this handle instead of the normal one.<br />
<br />
Homebrew should allow at least 32 service overrides.<br />
<br />
Note: Overridden service handles should not be converted to domains or closed. If they are domain, they should be converted to sessions before passed to the homebrew application.<br />
<br />
Note: For services that authenticate with pid, the app should not attempt re-authentication with an overridden handle.<br />
<br />
Note: There needs be special handling for the file system service. If the original fsp-srv handle doesn't allow MountSdcard, it shall fallback to the stolen one, etc etc.<br />
<br />
* '''Key:''' 4<br />
* '''Value[0]:''' Name of service, same format as for sm.<br />
* '''Value[1]:''' Lower 32-bits: Service handle<br />
* '''DefaultBehavior:''' Fetches service from "sm:" named port.<br />
<br />
==== Argv ====<br />
The NRO loader should be able to send argv.<br />
<br />
* '''Key:''' 5<br />
* '''Value[0]:''' Reserved/should be zero.<br />
* '''Value[1]:''' Argv string pointer.<br />
* '''DefaultBehavior:''' Setting (argc == 1, argv[0] == "", argv[1] == NULL), or argv parsed in NSO0 fashion.<br />
<br />
==== SyscallAvailableHint ====<br />
Homebrew doesn't know if any privileged syscalls are available.<br />
<br />
This entry allows loader to give hints about having access to rare syscalls (such as JIT).<br />
<br />
* '''Key:''' 6<br />
* '''Value[0]:''' 64-bit mask for the 0-0x3F SVC range. n:th bit set means SVC is accessible.<br />
* '''Value[1]:''' 64-bit mask for the 0x40-0x7F SVC range.<br />
* '''DefaultBehavior:''' If NSO0, assume kernelhax thus all rare syscalls are allowed. If NRO0, assume all rare syscalls are inaccessible.<br />
<br />
==== AppletType ====<br />
Specifies the [[AM_services|AM]] AppletType, used for selecting which Open*Proxy command to use.<br />
<br />
* '''Key:''' 7<br />
* '''Value[0]:''' AppletType<br />
* '''Value[1]:''' AppletFlags<br />
<br />
AppletFlags ApplicationOverride: Use AppletType_Application instead of AppletType_SystemApplication, only when AppletType is SystemApplication. This should only be handled when AppletType_Application is properly supported where applet may have been previously initialized in the context of the current process, for AppletType_Application. This avoids breaking backwards-compatibility with apps which don't support AppletType_Application as previously described.<br />
<br />
enum LoaderConfigAppletType {<br />
LoaderConfigAppletType_Application = 0,<br />
LoaderConfigAppletType_SystemApplet = 1,<br />
LoaderConfigAppletType_LibraryApplet = 2,<br />
LoaderConfigAppletType_OverlayApplet = 3,<br />
LoaderConfigAppletType_SystemApplication = 4,<br />
};<br />
<br />
enum LoaderConfigAppletFlags {<br />
LoaderConfigAppletFlags_ApplicationOverride = BIT(0),<br />
};<br />
<br />
==== AppletWorkaround ====<br />
This flag means that AM services is broken, and must not be used.<br />
<br />
* '''Key:''' 8<br />
* '''Value[0]:''' AppletResourceUserId<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== Reserved9 ====<br />
This key has been deleted/reserved for future use.<br />
<br />
==== ProcessHandle ====<br />
Handle to self process.<br />
<br />
* '''Key:''' 10<br />
* '''Value[0]:''' Process handle.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== LastLoadResult ====<br />
This is used to feed the last NRO error code back to the Homebrew Menu so that an error dialog can be displayed.<br />
<br />
* '''Key:''' 11<br />
* '''Value[0]:''' Result.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== AllocPages ====<br />
This key is used to provide function pointers for a memory allocator. If an [[#OverrideHeap]] key is present and this key is recognized, <code>free_pages</code> may be called with the address of the overridden heap as an argument. There may not be more than one [[#AllocPages]] key.<br />
<br />
If this key is recognized, applications should not attempt to use heap regions without first obtaining them through <code>alloc_pages</code>.<br />
If applications should not manage the heap themselves, an [[#OverrideHeap]] key should be passed in case this key is not recognized.<br />
If an [[#OverrideHeap]] key is not present, applications may attempt to manage the heap themselves. Any regions of memory within the heap that would be unsafe for an application to overwrite (such as the application's own stack) must be specified by a [[#LockRegion]] key.<br />
<br />
:<code>void *alloc_pages(size_t min, size_t max, size_t *actual)</code>:<br />
<br />
::This function shall allocate a page-aligned region of memory with a page-aligned size between <code>min</code> and <code>max</code> bytes (inclusive). If a failure is encountered, it shall return NULL. If <code>actual</code> is not NULL, the value it points to shall be overwritten with the actual size of the allocated region. Regions of memory allocated by this function may be passed to <code>free_pages</code> to mark them as eligible to be allocated again.<br />
<br />
::Regions of memory returned from this function must be read/write type-5 (HEAP) pages with no memory attributes set.<br />
<br />
:<code>bool free_pages(void *pages)</code>:<br />
<br />
::This function shall mark a region of memory either previously returned by <code>alloc_pages</code> or passed by the [[#OverrideHeap]] key as being eligible for future allocations. If any failure is encountered, a value of <code>TRUE</code> shall be returned. Otherwise, a value of <code>FALSE</code> is returned.<br />
<br />
* '''Key''': 12<br />
* '''Value[0]:''' <code>void *(*alloc_pages)(size_t min, size_t max, size_t *actual)</code><br />
* '''Value[1]:''' <code>bool (*free_pages)(void *pages)</code><br />
<br />
==== LockRegion ====<br />
This key is used to hint to the application that a certain region of the heap is unsafe to overwrite. There is no limit on the number of [[#LockRegion]] keys that may be passed. If an application is unable to process the number of regions that are locked, it must exit before overwriting any heap memory. It is an error for this key to be present in the same configuration as an [[#OverrideHeap]] or [[#AllocPages]] key.<br />
<br />
* '''Key''': 13<br />
* '''Value[0]:''' Pointer to region to lock<br />
* '''Value[1]:''' Size of region to lock<br />
<br />
==== RandomSeed ====<br />
This key is used to provide an extra entropy source to the application (in addition to the seed provided by the kernel), allowing it to generate different pseudo-random numbers every time it's launched from within the same process.<br />
<br />
* '''Key''': 14<br />
* '''Value[0]:''' Random data.<br />
* '''Value[1]:''' More random data.<br />
<br />
==== UserIdStorage ====<br />
This key is used to provide persistent storage space for the preselected user id when launching homebrew under an application that has an account selection screen.<br />
<br />
* '''Key''': 15<br />
* '''Value[0]:''' Pointer to a buffer containing enough space (16 bytes) to store a user id.<br />
* '''Value[1]:''' Reserved/should be zero.<br />
<br />
==== HosVersion ====<br />
This key provides the currently running version of Horizon OS.<br />
<br />
* '''Key''': 16<br />
* '''Value[0]:''' HOS version, formatted using libnx's [https://github.com/switchbrew/libnx/blob/master/nx/include/switch/runtime/hosversion.h#L11 MAKEHOSVERSION macro].<br />
* '''Value[1]:''' Reserved/should be zero.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=6773News2019-05-01T17:55:51Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''1 May 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8908 libnx v2.2.0 and switch-examples v20190501] released.<br />
*'''23 April 19''' Nintendo released system update [[8.0.1]].<br />
*'''15 April 19''' Nintendo released system update [[8.0.0]].<br />
*'''29 March 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8891 devkitA64 r13] and [https://github.com/switchbrew/libnx/releases/tag/v2.1.0 libnx v2.1.0] released with pthread/std::thread support.</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=6772News/Archive2019-05-01T17:55:09Z<p>Fincs: </p>
<hr />
<div>*'''26 March 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.6 Atmosphère v0.8.6] released with lots of bugfixes, more cheat stuff and web applet homebrew support.<br />
*'''21 February 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.4 Atmosphère v0.8.4] released with 7.0.x support.<br />
*'''18 February 19''' Nintendo released system update [[7.0.1]].<br />
*'''28 January 19''' Nintendo released system update [[7.0.0]].<br />
*'''24 January 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.3 Atmosphère v0.8.3] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.1.0 nx-hbloader v2.1.0] were released.<br />
*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.<br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=6463News2019-03-29T20:37:39Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''29 March 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8891 devkitA64 r13] and [https://github.com/switchbrew/libnx/releases/tag/v2.1.0 libnx v2.1.0] released with pthread/std::thread support.<br />
*'''26 March 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.6 Atmosphère v0.8.6] released with lots of bugfixes, more cheat stuff and web applet homebrew support.<br />
*'''21 February 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.4 Atmosphère v0.8.4] released with 7.0.x support.<br />
*'''18 February 19''' Nintendo released system update [[7.0.1]].</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=6462News/Archive2019-03-29T20:36:02Z<p>Fincs: </p>
<hr />
<div>*'''28 January 19''' Nintendo released system update [[7.0.0]].<br />
*'''24 January 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.3 Atmosphère v0.8.3] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.1.0 nx-hbloader v2.1.0] were released.<br />
*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.<br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=6278News2019-02-21T20:26:44Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''21 February 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.4 Atmosphère v0.8.4] released with 7.0.x support.<br />
*'''18 February 19''' Nintendo released system update [[7.0.1]].<br />
*'''28 January 19''' Nintendo released system update [[7.0.0]].<br />
*'''24 January 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.3 Atmosphère v0.8.3] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.1.0 nx-hbloader v2.1.0] were released.</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=6277News/Archive2019-02-21T20:26:09Z<p>Fincs: </p>
<hr />
<div>*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.<br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=Talk:Homebrew_ABI&diff=6212Talk:Homebrew ABI2019-02-12T22:13:06Z<p>Fincs: </p>
<hr />
<div>== StdioSockets ==<br />
<br />
Currently, there's a broken link in the [[Homebrew_ABI#Loader_Config_Keys|Loader Config Keys]] section on the StdioSockets key, caused by a [http://switchbrew.org/index.php?title=Homebrew_ABI&curid=284&diff=4772&oldid=3846 recent removal of the section]. I understand the temptation to remove StdioSockets, since it wasn't very well designed in the first place, and nobody uses it anymore, but I don't think that it makes sense to remove it from the ABI specification. The key shouldn't be erased entirely, because that would indicate that it is unreserved. A backwards-incompatible change like that defeats one of the purposes of the ABI. Removing the link and adding a label that the key is deprecated would be acceptable, but it'd leave no specification on the key. I think that, unless I'm misinterpreting the original intent of the edit, it should be reverted and labels should be added to the key's specification that it is deprecated and no longer in use.<br />
<br />
Mentioning [[User:WinterMute|WinterMute]].<br />
<br />
--[[User:Misson20000|Misson20000]] ([[User talk:Misson20000|talk]]) 17:50, 18 June 2018 (CDT)<br />
<br />
Probably better to just reserve it for future use I guess. Had someone interrogate me about why nxlink didn't use the homebrew ABI "properly" so it seemed better to remove it rather than leave it there confusing people.<br />
<br />
[[User:WinterMute|WinterMute]] ([[User talk:WinterMute|talk]]) 04:26, 19 June 2018 (CDT)<br />
<br />
== RomFS Override ==<br />
<br />
The current strategy for providing RomFS to homebrew applications depends on the application being able to find and open its own NRO file via argv[0] and load RomFS from ASET. This is not practical for several use cases that I am encountering:<br />
<br />
- The NRO file is not persisted to the SD card.<br />
<br />
- The NRO file is not stored somewhere that the homebrew library knows how to access.<br />
<br />
- The application does not exist as an NRO file at all.<br />
<br />
I'd like to propose a new HBABI key to allow homebrew applications to access RomFS without needing to open their own NRO file via argv[0].<br />
<br />
==== RomFSOverride ====<br />
This is used to override an application's RomFS. If this key is passed and recognized, the application shall make no attempt to open itself via fopen(argv[0]).<br />
<br />
* '''Key:''' 15<br />
* '''Value[0]:''' Handle to a session implementing [[Filesystem_services#IFileSystem]] for the application's RomFS.<br />
* '''Value[1]:''' Ignored.<br />
<br />
The given handle must respond to IFileSystem commands 0-12.<br />
<br />
Possible alternatives include instead passing IFile/IStorage for the RomFS section, or IFile/IStorage for the entire ASET section.<br />
<br />
Concerns include ownership of the session handle. Should the application be required to close the handle or leave it open? Personally, I'm inclined to require that the application borrow the session from the loader and leave it open in case closing the handle is not something desirable. This also simplifies the logic in the loader, since if the handle needs to be closed, the loader can always just close it instead of having to figure out whether it was recognized or not. Possible alternatives to this ownership scheme include either adding flags to HBABI entries for which words contain handles that should be closed if not recognized, or a flag that the application sets on each entry it recognizes so that the loader can take care of closing the handle if the application did not recognize it.<br />
<br />
--[[User:Misson20000|Misson20000]] ([[User talk:Misson20000|talk]]) 00:36, 6 November 2018 (UTC)<br />
<br />
:"- The NRO file is not persisted to the SD card." "- The NRO file is not stored somewhere that the homebrew library knows how to access." "- The application does not exist as an NRO file at all." The ABI requires the NRO to located on SD in the first place... --[[User:Yellows8|Yellows8]] ([[User talk:Yellows8|talk]]) 19:34, 8 November 2018 (UTC)<br />
<br />
:Like yellows8 said, the homebrew ABI is designed around NRO files stored on SD card. If we ever support other filesystems (such as hostio access), we'd just add support for host:/ paths being passed through argv (as well as support code in libnx which would be trivial) - homebrew apps would need a recompile anyway with or without new ABI keys. Also, for that use case (hostio), romfs doesn't really make sense because you could just use assets in a folder inside the host filesystem instead of having to go through the trouble of building romfs (which can get pretty large). Finally, homebrew by definition is NRO formatted. Other formats should not be supported or promoted. --[[User:Fincs|Fincs]] ([[User talk:Fincs|talk]]) 19:47, 8 November 2018 (UTC)<br />
<br />
yellows8: It says nowhere in the homebrew ABI document that the NRO is required to be located on the SD card. If you are absolutely convinced that that should be an HBABI requirement, I would encourage you to add it to the document. I very much think that should not be an HBABI requirement though. The only things keeping homebrew on the SD card are libnx's behavior of reading its own executable combined with the small set of default-mounted filesystems that libnx understands. Aside from this behavior (which I'm trying to get changed), there is no reason to require that homebrew applications be located on the SD card.<br />
<br />
fincs: Apologies if I was unclear. When I said RomFS, I meant the filesystem that is visible to libnx applications under <code>romfs:/*</code> paths. For the hostio use case, if hostio were to be mounted under <code>hostio:</code>, the application would need to be written to tell whether it's on hostio or not and adjust its asset loading paths accordingly, whereas it would be significantly more convenient if the homebrew loader could override the <code>romfs:</code> mountpoint to use a hostio IFileSystem. I also disagree that homebrew is "by definition" NRO formatted. By convention, sure, and I'd even accept that this ABI does not apply to non-NRO formatted homebrew. I invite you to ignore that use case.<br />
<br />
Here's a different idea for you.<br />
<br />
==== Mount ====<br />
This is used to request that a filesystem be mounted by the homebrew application.<br />
<br />
* '''Key:''' 15<br />
* '''Value[0]:''' Pointer to a NULL-terminated string representing the desired mountpoint.<br />
* '''Value[1]:''' Handle to a session implementing [[Filesystem_services#IFileSystem]].<br />
<br />
The length of the mountpoint shall be no longer than 32 characters, including the NULL terminator.<br />
This key may be combined with the Argv key to specify the location of an application's executable.<br />
<br />
This way, we can still override <code>romfs:/</code> with Mount["romfs", <IFileSystem>], or we can mount an arbitrary filesystem (Mount["myfs", <IFileSystem>]) and set argv[0] to a path on that new mountpoint (<code>myfs:/application.nro</code>) so that the application can still find its NRO file and read it back to provide the <code>romfs:/</code> mount even if the NRO is not located on the SD card. I've even specified a length limit to match fsdev requirements.<br />
<br />
--[[User:Misson20000|Misson20000]] ([[User talk:Misson20000|talk]]) 23:42, 9 November 2018 (UTC)<br />
<br />
[[Homebrew_ABI#NextLoadPath]] "NRO" "should start with "sdmc:/". Of course nx-hbloader doesn't enforce the latter besides only having sdmc mounted. --[[User:Yellows8|Yellows8]] ([[User talk:Yellows8|talk]]) 00:05, 10 November 2018 (UTC)<br />
<br />
For NextLoadPath? Sure, if you want to use NextLoadPath, it's best to give it a path to an NRO starting with "sdmc:/" ''because that's all that nx-hbloader understands'' and all that you want it to understand, which makes sense. But HBABI doesn't require that homebrew needs to be loaded by passing NextLoadPath back to the loader. After all, nx-hbmenu isn't loaded that way. That's besides the point, anyway. The point is that whether or not this restriction is actually documented on the HBABI page, I want you to evaluate why this restriction exists and whether it's necessary or not.<br />
<br />
--[[User:Misson20000|Misson20000]] ([[User talk:Misson20000|talk]]) 00:27, 10 November 2018 (UTC)<br />
<br />
Where does this "IFilesystem" come from? --[[User:Yellows8|Yellows8]] ([[User talk:Yellows8|talk]]) 01:47, 10 November 2018 (CET)<br />
<br />
Doesn't much matter as far as the application is concerned. Could be some save data that the loader opened from FS, could be some BIS filesystem, or, in my case, a custom IFileSystem implementation that came from a custom service. Just as long as it implements the IFileSystem interface.<br />
<br />
--[[User:Misson20000|Misson20000]] ([[User talk:Misson20000|talk]]) 00:57, 10 November 2018 (UTC)<br />
<br />
Workarounds (which only exist for a debugger) don't belong in the HBABI. --[[User:Yellows8|Yellows8]] ([[User talk:Yellows8|talk]]) 19:17, 12 February 2019 (UTC)<br />
<br />
Almost all of HBABI is workarounds to facilitate running homebrew applications in dirty environments:<br />
- bad entrypoint arguments (MainThreadHandle)<br />
- reusing the same process (OverrideHeap, Argv (can't use loader-args), AllocPages, LockRegion, RandomSeed)<br />
- legacy exploits (OverrideService, AppletWorkaround)<br />
- working around 0xffff8001 check in SVCs (ProcessHandle)<br />
<br />
And although it's not specified in the HBABI, reading back argv[0] for ASET is also a way to work around not being installed as a real application and being able to access romfs like official applications do.<br />
<br />
The only thing I'm working around here is the ASET workaround that needlessly ties homebrew to the SD card. Even if this is a workaround for a debugger, I don't think that's grounds for not belonging in the HBABI. It's not like Nintendo doesn't do anything similar ("Redirect*" commands in lr).<br />
--[[User:Misson20000|Misson20000]] ([[User talk:Misson20000|talk]]) 21:42, 12 February 2019 (UTC)<br />
<br />
Reusing the same process is the approach selected for nx-hbloader which is the standard way to load homebrew, and I see no reason why they would be labeled as "workarounds". AllocPages and LockRegion were unilaterally added by you several months ago and nx-hbloader has no use for them. OverrideService and AppletWorkaround are not presently used by anything and they were mostly added for future-proofing in case we need to support a more restrictive environment where we need to pass stolen service handles, they don't exist for "legacy" exploits.<br />
<br />
I see no reason to add a romfs override key. If we want to support non-SD card paths, we will add other device name prefixes to argv[0] (such as host:/) and add support for these devices in libnx.<br />
<br />
--[[User:Fincs|Fincs]] ([[User talk:Fincs|talk]]) 22:12, 12 February 2019 (UTC)</div>Fincshttps://switchbrew.org/w/index.php?title=FirmwareNews&diff=6129FirmwareNews2019-01-29T15:12:50Z<p>Fincs: Restore update warning for 7.x (will be removed eventually)</p>
<hr />
<div>As of this writing, the latest firmware is '''[[7.0.0]]'''.<br />
<br />
<span style="color:red">'''WARNING: Firmware version 7.0.0 currently breaks compatibility with any and all CFW. Do not update!'''</span><br />
<br />
See [[Version Table]].</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=6083News2019-01-24T18:13:06Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''24 January 19''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.3 Atmosphère v0.8.3] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.1.0 nx-hbloader v2.1.0] were released.<br />
*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=6082News/Archive2019-01-24T18:12:18Z<p>Fincs: </p>
<hr />
<div>*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=5925News2019-01-02T01:03:23Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''2 January 19''' [https://devkitpro.org/viewtopic.php?f=13&t=8826 libnx 2.0.0, switch-mesa 18.3 and switch-examples 20190102] were released.<br />
*'''29 November 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.8.0 Atmosphère v0.8.0] was released.<br />
*'''29 November 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu v3.0.1] was released.<br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=5924News/Archive2019-01-02T01:02:20Z<p>Fincs: </p>
<hr />
<div>*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=5667News2018-11-28T01:36:28Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''28 November 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=5666News2018-11-28T01:29:34Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''28 December 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8813 libnx 1.6.0 and switch-examples 20181128] were released.<br />
*'''19 November 18''' Nintendo released system update [[6.2.0]].<br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=5665News/Archive2018-11-28T01:29:07Z<p>Fincs: </p>
<hr />
<div>*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=Talk:Homebrew_ABI&diff=5491Talk:Homebrew ABI2018-11-08T19:50:18Z<p>Fincs: </p>
<hr />
<div>== StdioSockets ==<br />
<br />
Currently, there's a broken link in the [[Homebrew_ABI#Loader_Config_Keys|Loader Config Keys]] section on the StdioSockets key, caused by a [http://switchbrew.org/index.php?title=Homebrew_ABI&curid=284&diff=4772&oldid=3846 recent removal of the section]. I understand the temptation to remove StdioSockets, since it wasn't very well designed in the first place, and nobody uses it anymore, but I don't think that it makes sense to remove it from the ABI specification. The key shouldn't be erased entirely, because that would indicate that it is unreserved. A backwards-incompatible change like that defeats one of the purposes of the ABI. Removing the link and adding a label that the key is deprecated would be acceptable, but it'd leave no specification on the key. I think that, unless I'm misinterpreting the original intent of the edit, it should be reverted and labels should be added to the key's specification that it is deprecated and no longer in use.<br />
<br />
Mentioning [[User:WinterMute|WinterMute]].<br />
<br />
--[[User:Misson20000|Misson20000]] ([[User talk:Misson20000|talk]]) 17:50, 18 June 2018 (CDT)<br />
<br />
Probably better to just reserve it for future use I guess. Had someone interrogate me about why nxlink didn't use the homebrew ABI "properly" so it seemed better to remove it rather than leave it there confusing people.<br />
<br />
[[User:WinterMute|WinterMute]] ([[User talk:WinterMute|talk]]) 04:26, 19 June 2018 (CDT)<br />
<br />
== RomFS Override ==<br />
<br />
The current strategy for providing RomFS to homebrew applications depends on the application being able to find and open its own NRO file via argv[0] and load RomFS from ASET. This is not practical for several use cases that I am encountering:<br />
<br />
- The NRO file is not persisted to the SD card.<br />
<br />
- The NRO file is not stored somewhere that the homebrew library knows how to access.<br />
<br />
- The application does not exist as an NRO file at all.<br />
<br />
I'd like to propose a new HBABI key to allow homebrew applications to access RomFS without needing to open their own NRO file via argv[0].<br />
<br />
==== RomFSOverride ====<br />
This is used to override an application's RomFS. If this key is passed and recognized, the application shall make no attempt to open itself via fopen(argv[0]).<br />
<br />
* '''Key:''' 15<br />
* '''Value[0]:''' Handle to a session implementing [[Filesystem_services#IFileSystem]] for the application's RomFS.<br />
* '''Value[1]:''' Ignored.<br />
<br />
The given handle must respond to IFileSystem commands 0-12.<br />
<br />
Possible alternatives include instead passing IFile/IStorage for the RomFS section, or IFile/IStorage for the entire ASET section.<br />
<br />
Concerns include ownership of the session handle. Should the application be required to close the handle or leave it open? Personally, I'm inclined to require that the application borrow the session from the loader and leave it open in case closing the handle is not something desirable. This also simplifies the logic in the loader, since if the handle needs to be closed, the loader can always just close it instead of having to figure out whether it was recognized or not. Possible alternatives to this ownership scheme include either adding flags to HBABI entries for which words contain handles that should be closed if not recognized, or a flag that the application sets on each entry it recognizes so that the loader can take care of closing the handle if the application did not recognize it.<br />
<br />
--[[User:Misson20000|Misson20000]] ([[User talk:Misson20000|talk]]) 00:36, 6 November 2018 (UTC)<br />
<br />
:"- The NRO file is not persisted to the SD card." "- The NRO file is not stored somewhere that the homebrew library knows how to access." "- The application does not exist as an NRO file at all." The ABI requires the NRO to located on SD in the first place... --[[User:Yellows8|Yellows8]] ([[User talk:Yellows8|talk]]) 19:34, 8 November 2018 (UTC)<br />
<br />
:Like yellows8 said, the homebrew ABI is designed around NRO files stored on SD card. If we ever support other filesystems (such as hostio access), we'd just add support for host:/ paths being passed through argv (as well as support code in libnx which would be trivial) - homebrew apps would need a recompile anyway with or without new ABI keys. Also, for that use case (hostio), romfs doesn't really make sense because you could just use assets in a folder inside the host filesystem instead of having to go through the trouble of building romfs (which can get pretty large). Finally, homebrew by definition is NRO formatted. Other formats should not be supported or promoted. --[[User:Fincs|Fincs]] ([[User talk:Fincs|talk]]) 19:47, 8 November 2018 (UTC)</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=5446News2018-10-31T22:38:05Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''31 October 18''' [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.1 nx-hbloader v2.0.1] was released.<br />
*'''29 October 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v3.0.0 was released.<br />
*'''29 October 18''' Nintendo released system update [[6.1.0]].<br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=5445News/Archive2018-10-31T22:37:46Z<p>Fincs: </p>
<hr />
<div>*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].<br />
*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=Version_Table&diff=5390Version Table2018-10-30T02:35:49Z<p>Fincs: Atmosphère is already released</p>
<hr />
<div>{| class="wikitable" style="text-align: center;<br />
! From<br />
! To<br />
! Instructions<br />
|-<br />
| [[1.0.0]]<br />
| [[1.0.0]]<br />
| Use [https://github.com/Atmosphere-NX/Atmosphere Atmosphère], or see below for updating to 3.0.0.<br />
|-<br />
| [[2.0.0]]<br />
| [[2.3.0]]<br />
| Update to version [[3.0.0]]. See [[How to update to 3.0.0]].<br />
|-<br />
| [[3.0.0]]<br />
| [[3.0.0]]<br />
| You can run homebrew. See [https://switchbrew.github.io/nx-hbl/ nx-hbl].<br />
|-<br />
| [[3.0.1]]<br />
| [[4.1.0]]<br />
| You can update to or stay on 4.1.0. <br />
If you are beyond 4.1.0 you won't be able to have a non-tethered exploit<br />
|-<br />
| [[5.0.0]]<br />
| {latest}<br />
| Feel free to update to latest version if not already. Use [https://github.com/Atmosphere-NX/Atmosphere Atmosphère].<br />
|-<br />
|}<br />
<br />
[https://github.com/Atmosphere-NX/Atmosphere Atmosphère] is usable on ''all'' system versions, for all Switch systems with the original hardware revision (via bootromhax).</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=5361News2018-10-27T16:12:56Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''27 October 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8798 libnx 1.5.0 and switch-examples 20181027] were released.<br />
*'''17 October 18''' [https://github.com/Atmosphere-NX/Atmosphere/releases/tag/0.7.0 Atmosphère v0.7.0] and [https://github.com/switchbrew/nx-hbloader/releases/tag/v2.0.0 nx-hbloader v2.0.0] were released.<br />
*'''8 October 18''' Nintendo released system update [[6.0.1]].<br />
*'''18 September 18''' Nintendo released system update [[6.0.0]].</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=5360News/Archive2018-10-27T16:12:15Z<p>Fincs: </p>
<hr />
<div>*'''18 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8784 libnx 1.4.1, switch-mesa v18.2β and switch-examples 20180918] were released.<br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=Homebrew_ABI&diff=5218Homebrew ABI2018-10-18T00:24:38Z<p>Fincs: Add RandomSeed</p>
<hr />
<div>=== Entrypoint ===<br />
Entrypoint is at binary_ptr+0. At this offset, there is a branch instruction that jumps past the NRO0 header. This is for (.text) file format polyglot compatibility with NSO0.<br />
<br />
Every application should clean itself up before returning to loader.<br />
<br />
This includes tasks like:<br />
* Not leaking handles<br />
* Resetting MemoryState<br />
* No leftover threads running in the background<br />
<br />
Original LR given to entrypoint should be returned to, X0 contains an error code. If original LR is NULL, svcExitProcess should be used.<br />
<br />
=== Entrypoint Arguments ===<br />
'''NSO0:''' the system executes binary_ptr+0 with X0=NULL, X1=main_thread_handle.<br />
<br />
'''NRO0:''' the homebrew loader puts X0=loader_config_ptr, X1=0xFFFFFFFFFFFFFFFF.<br />
<br />
=== Loader Config ===<br />
Loader config allows overriding functionality to workaround limitations in a limited homebrew environment.<br />
<br />
It is an array of tuples:<br />
struct LoaderConfig {<br />
LoaderConfigEntry Entries[];<br />
};<br />
<br />
Each entry is key-value pair:<br />
<br />
struct LoaderConfigEntry {<br />
u32 Key;<br />
u32 Flags;<br />
u64 Value[2];<br />
};<br />
<br />
enum LoaderConfigFlags {<br />
IsMandatory = BIT(0),<br />
};<br />
<br />
=== Loader Config Keys ===<br />
A loader key can be marked as mandatory or not in its <code>Flags</code> field.<br />
<br />
If a key is marked as mandatory it means that the application cannot safely ignore it.<br />
<br />
Thus if said key is not recognized by the application, it should exit with <code>result_code=346 | ((100 + key) << 9);</code>, as the default behaviour may be unsafe.<br />
<br />
If a key that is required is not found (for example with an outdated loader), use <code>result_code=346 | ((200 + key) << 9);</code>.<br />
<br />
If there is some error encountered while validating an entry's values, use <code>result_code = 346 | ((300 + key) << 9);</code>.<br />
<br />
* 0: [[#EndOfList]]: Must be present<br />
<br />
* 1: [[#MainThreadHandle]]: Must be present<br />
<br />
* 2: [[#NextLoadPath]]<br />
<br />
* 3: [[#OverrideHeap]]: If present, must not be ignored<br />
<br />
* 4: [[#OverrideService]]<br />
<br />
* 5: [[#Argv]]<br />
<br />
* 6: [[#SyscallAvailableHint]]<br />
<br />
* 7: [[#AppletType]]: Must be present<br />
<br />
* 8: [[#AppletWorkaround]]: If present, must not be ignored<br />
<br />
* 9: [[#Reserved9]]<br />
<br />
* 10: [[#ProcessHandle]]<br />
<br />
* 11: [[#LastLoadResult]]<br />
<br />
* 12: [[#AllocPages]]<br />
<br />
* 13: [[#LockRegion]]: If present, must not be ignored<br />
<br />
* 14: [[#RandomSeed]]<br />
<br />
==== EndOfList ====<br />
EndOfList is the final entry in the LoaderConfig.<br />
<br />
* '''Key:''' 0<br />
* '''Value[0]:''' Ignored.<br />
* '''Value[1]:''' Ignored.<br />
<br />
==== MainThreadHandle ====<br />
This is the handle to the thread that is executing the entrypoint. Required for mutex to function.<br />
<br />
* '''Key:''' 1<br />
* '''Value[0]:''' Handle to the main thread.<br />
* '''Value[1]:''' Ignored.<br />
* '''DefaultBehavior:''' Use main thread handle from entry function arguments.<br />
<br />
==== NextLoadPath ====<br />
Homebrew menu uses this pointer to write the path of next NRO to load, before returning back to Homebrew loader.<br />
<br />
* '''Key:''' 2<br />
* '''Value[0]:''' Pointer to buffer of size 512. NRO file path, should start with "sdmc:/".<br />
* '''Value[1]:''' Pointer to buffer of size 2048. Argv string to boot NRO with.<br />
<br />
==== OverrideHeap ====<br />
If the NRO loader has reserved some space in the heap for itself, the application must not manipulate the heap. If an [[#AllocPages]] key is present, the region this points to should be accepted by <code>free_pages</code>.<br />
<br />
* '''Key:''' 3<br />
* '''Value[0]:''' Base address of heap. Must be MemoryType 4, 5, or 9 with all reference counts being zero.<br />
* '''Value[1]:''' Size of heap.<br />
* '''DefaultBehavior:''' Allocates heap using svcSetHeapSize instead.<br />
<br />
==== OverrideService ====<br />
The NRO loader should be able to steal handles from more priliveged processes. In this case, the homebrew should use this handle instead of the normal one.<br />
<br />
Homebrew should allow up to 32 service overrides.<br />
<br />
Note: Overridden service handles should not be converted to domains or closed. If they are domain, they should be converted to sessions before passed to the homebrew application.<br />
<br />
Note: For services that authenticate with pid, the app should not attempt re-authentication with an overridden handle.<br />
<br />
Note: There needs be special handling for the file system service. If the original fsp-srv handle doesn't allow MountSdcard, it shall fallback to the stolen one, etc etc.<br />
<br />
* '''Key:''' 4<br />
* '''Value[0]:''' Name of service, same format as for sm.<br />
* '''Value[1]:''' Lower 32-bits: Service handle<br />
* '''DefaultBehavior:''' Fetches service from "sm:" named port.<br />
<br />
==== Argv ====<br />
The NRO loader should be able to send argv.<br />
<br />
* '''Key:''' 5<br />
* '''Value[0]:''' Ignored.<br />
* '''Value[1]:''' Argv string pointer.<br />
* '''DefaultBehavior:''' Setting (argc == 1, argv[0] == "", argv[1] == NULL), or argv parsed in NSO0 fashion.<br />
<br />
==== SyscallAvailableHint ====<br />
Homebrew doesn't know if any privileged syscalls are available.<br />
<br />
This entry allows loader to give hints about having access to rare syscalls (such as JIT).<br />
<br />
* '''Key:''' 6<br />
* '''Value[0]:''' 64-bit mask for the 0-0x3F SVC range. n:th bit set means SVC is accessible.<br />
* '''Value[1]:''' 64-bit mask for the 0x40-0x7F SVC range.<br />
* '''DefaultBehavior:''' If NSO0, assume kernelhax thus all rare syscalls are allowed. If NRO0, assume all rare syscalls are inaccessible.<br />
<br />
==== AppletType ====<br />
Specifies the [[AM_services|AM]] AppletType, used for selecting which Open*Proxy command to use.<br />
<br />
* '''Key:''' 7<br />
* '''Value[0]:''' AppletType<br />
* '''Value[1]:''' AppletFlags<br />
<br />
AppletFlags ApplicationOverride: Use AppletType_Application instead of AppletType_SystemApplication, only when AppletType is SystemApplication. This should only be handled when AppletType_Application is properly supported where applet may have been previously initialized in the context of the current process, for AppletType_Application. This avoids breaking backwards-compatibility with apps which don't support AppletType_Application as previously described.<br />
<br />
enum LoaderConfigAppletType {<br />
LoaderConfigAppletType_Application = 0,<br />
LoaderConfigAppletType_SystemApplet = 1,<br />
LoaderConfigAppletType_LibraryApplet = 2,<br />
LoaderConfigAppletType_OverlayApplet = 3,<br />
LoaderConfigAppletType_SystemApplication = 4,<br />
};<br />
<br />
enum LoaderConfigAppletFlags {<br />
LoaderConfigAppletFlags_ApplicationOverride = BIT(0),<br />
};<br />
<br />
==== AppletWorkaround ====<br />
This flag means that AM services is broken, and must not be used.<br />
<br />
* '''Key:''' 8<br />
* '''Value[0]:''' AppletResourceUserId<br />
* '''Value[1]:''' Ignored.<br />
<br />
==== Reserved9 ====<br />
This was originally stdiosockets which couldn't work long term in clean environments the way this was designed. Now reserved for future use.<br />
<br />
==== ProcessHandle ====<br />
Handle to self process.<br />
<br />
* '''Key:''' 10<br />
* '''Value[0]:''' Process handle.<br />
* '''Value[1]:''' Ignored.<br />
<br />
==== LastLoadResult ====<br />
This is used to feed the last NRO error code back to the Homebrew Menu so that an error dialog can be displayed.<br />
<br />
* '''Key:''' 11<br />
* '''Value[0]:''' Result.<br />
* '''Value[1]:''' Ignored.<br />
<br />
==== AllocPages ====<br />
This key is used to provide function pointers for a memory allocator. If an [[#OverrideHeap]] key is present and this key is recognized, <code>free_pages</code> may be called with the address of the overridden heap as an argument. There may not be more than one [[#AllocPages]] key.<br />
<br />
If this key is recognized, applications should not attempt to use heap regions without first obtaining them through <code>alloc_pages</code>.<br />
If applications should not manage the heap themselves, an [[#OverrideHeap]] key should be passed in case this key is not recognized.<br />
If an [[#OverrideHeap]] key is not present, applications may attempt to manage the heap themselves. Any regions of memory within the heap that would be unsafe for an application to overwrite (such as the application's own stack) must be specified by a [[#LockRegion]] key.<br />
<br />
:<code>void *alloc_pages(size_t min, size_t max, size_t *actual)</code>:<br />
<br />
::This function shall allocate a page-aligned region of memory with a page-aligned size between <code>min</code> and <code>max</code> bytes (inclusive). If a failure is encountered, it shall return NULL. If <code>actual</code> is not NULL, the value it points to shall be overwritten with the actual size of the allocated region. Regions of memory allocated by this function may be passed to <code>free_pages</code> to mark them as eligible to be allocated again.<br />
<br />
::Regions of memory returned from this function must be read/write type-5 (HEAP) pages with no memory attributes set.<br />
<br />
:<code>bool free_pages(void *pages)</code>:<br />
<br />
::This function shall mark a region of memory either previously returned by <code>alloc_pages</code> or passed by the [[#OverrideHeap]] key as being eligible for future allocations. If any failure is encountered, a value of <code>TRUE</code> shall be returned. Otherwise, a value of <code>FALSE</code> is returned.<br />
<br />
* '''Key''': 12<br />
* '''Value[0]:''' <code>void *(*alloc_pages)(size_t min, size_t max, size_t *actual)</code><br />
* '''Value[1]:''' <code>bool (*free_pages)(void *pages)</code><br />
<br />
==== LockRegion ====<br />
This key is used to hint to the application that a certain region of the heap is unsafe to overwrite. There is no limit on the number of [[#LockRegion]] keys that may be passed. If an application is unable to process the number of regions that are locked, it must exit before overwriting any heap memory. It is an error for this key to be present in the same configuration as an [[#OverrideHeap]] or [[#AllocPages]] key.<br />
<br />
* '''Key''': 13<br />
* '''Value[0]:''' Pointer to region to lock<br />
* '''Value[1]:''' Size of region to lock<br />
<br />
==== RandomSeed ====<br />
This key is used to provide an extra entropy source to the application (in addition to the seed provided by the kernel), allowing it to generate different pseudo-random numbers every time it's launched from within the same process.<br />
<br />
* '''Key''': 14<br />
* '''Value[0]:''' Random data.<br />
* '''Value[1]:''' More random data.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=4984News2018-09-09T20:13:34Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''9 September 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8780 libnx v1.4.0] was released alongside a Switch port of mesa/nouveau (GPU library).<br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=4983News/Archive2018-09-09T20:12:16Z<p>Fincs: </p>
<hr />
<div>*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=4853News2018-07-28T16:35:37Z<p>Fincs: </p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''28 July 18''' [https://devkitpro.org/viewtopic.php?f=13&t=8761 devkitA64] r12 and [https://github.com/switchbrew/libnx/releases/tag/v1.3.1 libnx] v1.3.1 were released.<br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=4852News/Archive2018-07-28T16:34:52Z<p>Fincs: </p>
<hr />
<div>*'''26 March 18''' Nintendo released system update [[5.0.1]].<br />
*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=News/Archive&diff=4819News/Archive2018-07-08T16:24:06Z<p>Fincs: </p>
<hr />
<div>*'''12 March 18''' Nintendo released system update [[5.0.0]].<br />
*'''2 March 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.1.0 libnx] v1.1.0 was released.<br />
*'''28 February 18''' [https://github.com/switchbrew/nx-hbmenu/releases/latest nx-hbmenu] v2.0.0 was released.<br />
*'''22 February 18''' [http://devkitpro.org devkitPro] released [https://devkitpro.org/viewtopic.php?f=13&t=8693 devkitA64 alpha7]<br />
*'''18 February 18''' [https://switchbrew.github.io/nx-hbl/ nx-hbl] and [https://github.com/switchbrew/nx-hbmenu nx-hbmenu] were released.<br />
*'''28 December 17''' The 34c3 Switch [https://events.ccc.de/congress/2017/Fahrplan/events/8941.html talk] took place, video available [https://media.ccc.de/v/34c3-8941-console_security_-_switch here].<br />
*'''4 December 17''' Nintendo released system update [[4.1.0]].<br />
*'''25 October 17''' Nintendo released system update [[4.0.1]].<br />
*'''18 October 17''' Nintendo released system update [[4.0.0]].<br />
*'''17 September 17''' [https://github.com/switchbrew/libnx libnx] was made public, with examples available [https://github.com/switchbrew/switch-examples here].<br />
*'''5 September 17''' Nintendo released system update [[3.0.2]].<br />
*'''31 July 17''' Nintendo released system update [[3.0.1]].<br />
*'''19 June 17''' Nintendo released system update [[3.0.0]].<br />
*'''15 May 17''' Nintendo released system update [[2.3.0]].<br />
*'''17 April 17''' Nintendo released system update [[2.2.0]].<br />
*'''27 March 17''' Nintendo released system update [[2.1.0]].<br />
*'''2 March 17''' Nintendo released system update [[2.0.0]].<br />
*'''3 March 17''' Nintendo Switch global release.</div>Fincshttps://switchbrew.org/w/index.php?title=News&diff=4818News2018-07-08T16:23:58Z<p>Fincs: libnx 1.3.0</p>
<hr />
<div><noinclude><br />
==Adding an item==<br />
* Log in to the wiki. Editing is disabled if you don't have an account.<br />
* Add the news event to the top of the list, using this format for the date: <tt><nowiki>'''</nowiki>{{#time: d F y}}<nowiki>''' </nowiki></tt>. Please include the application's creator, version number, and a link to a page on 3DBrew about the application. No external links please.<br />
* '''Move the last entry to the [[:News/Archive|news archive]]. There should be no more than 4 entries in the list.'''<br />
<br />
==Archives==<br />
For older news, see the [[:News/Archive|news archive]].<br />
<br />
=== News ===<br />
<!-- Add news below --></noinclude><br />
*'''8 July 18''' [https://github.com/switchbrew/libnx/releases/tag/v1.3.0 libnx] v1.3.0 was released.<br />
*'''30 May 18''' Nintendo released system update [[5.1.0]].<br />
*'''16 April 18''' Nintendo released system update [[5.0.2]].<br />
*'''26 March 18''' Nintendo released system update [[5.0.1]].</div>Fincshttps://switchbrew.org/w/index.php?title=Setting_up_Development_Environment&diff=4817Setting up Development Environment2018-07-08T16:06:36Z<p>Fincs: /* Setup */</p>
<hr />
<div>= Setup =<br />
Install [https://devkitpro.org/ devkitA64]. If it's already installed, update it using sudo (dkp-)pacman -Syu. On Windows, there's a [https://github.com/devkitPro/installer/releases/latest graphical installer]. On Unix-like platforms such as Linux/macOS, there's [https://github.com/devkitPro/pacman/releases/latest pacman].<br />
<br />
[https://devkitpro.org devkitPro] also provides a set of [https://hub.docker.com/u/devkitpro/ Docker images] which come pre-installed with all the portlibs packages.<br />
<br />
'''Please note: devkitPro is the organisation that provides the tools. They are not a software package, they don't have version numbers and the only way to have them compile your code is to pay them (or maybe if you ask nicely when you need help figuring out an issue)'''<br />
<br />
==Windows==<br />
devkitPro provides 64-bit precompiled Windows binaries of devkitA64 which can be run directly on Windows.<br />
<br />
* If you already use msys2 then you can follow the instructions at https://github.com/devkitPro/pacman/releases/latest to add the devkitPro repositories.<br />
<br />
Otherwise<br />
<br />
* [https://github.com/devkitPro/installer/releases download the latest version of the graphical installer] from github and run it, following the instructions as you go.<br />
* An Internet connection is required.<br />
* Ensure at least "Switch Development" is ticked - you can also leave the other options ticked if you wish.<br />
* Once the installer has finished, launch MSYS from:<br />
** Windows 7 and earlier: Start -> All Programs -> devkitPro -> MSYS<br />
** Windows 8 and 8.1: Right click on the Start screen and select 'All Apps'. You should find MSYS there.<br />
** Windows 10 (pre-Anniversary Update): Start -> All Apps -> devkitPro -> MSYS<br />
** Windows 10 (post-Anniversary Update): Start -> devkitPro -> MSYS<br />
<br />
==Unix-like platforms==<br />
Currently devkitPro provides precompiled versions of devkitA64 for the following Unix-like platforms: Linux (x86_64), macOS (x86_64). Note that Linux x86_64 binaries are usable under WSL.<br />
<br />
* Follow the instructions to install pacman found at https://github.com/devkitPro/pacman/releases/latest<br />
* run sudo (dkp-)pacman -S switch-dev to install the tools and libraries for switch development<br />
* logout and login again to get the environment settings needed.<br />
<br />
= Building the examples =<br />
Switch examples are still being created; however, there are a growing number of examples available from the [https://github.com/switchbrew/switch-examples switchbrew/switch-examples GitHub repository]. These are downloaded by the installer and can be found in $DEVKITPRO/examples/switch<br />
<br />
These can be built from the command line.<br />
<br />
To start a new homebrew project from the <code>bash</code> shell, simply type the following (replacing <code>'''~/projects/myswitchproject'''</code> with the place you would like your project to be stored, with <code>~</code> meaning your HOME directory):<br />
cp -r $DEVKITPRO/examples/switch/templates/application '''~/projects/myswitchproject'''<br />
cd '''~/projects/myswitchproject'''<br />
<br />
The standard Makefile will use the folder as the name of the .nro that will be built. You can keep that behaviour or simply change the <code>TARGET := $(notdir $(CURDIR))</code> line in the Makefile to explicitly name your project.<br />
<br />
To compile it, type <code>make</code> in the project directory.</div>Fincshttps://switchbrew.org/w/index.php?title=Shared_Database_services&diff=3985Shared Database services2018-03-12T22:33:48Z<p>Fincs: /* GetSharedMemoryNativeHandle */</p>
<hr />
<div><br />
= pl:u (Shared Font Manager) =<br />
This is "nn::pl::detail::ISharedFontManager".<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Cmd || Name<br />
|-<br />
| 0 || [[#RequestLoad]]<br />
|-<br />
| 1 || [[#GetLoadState]]<br />
|-<br />
| 2 || [[#GetSize]]<br />
|-<br />
| 3 || [[#GetSharedMemoryAddressOffset]]<br />
|-<br />
| 4 || [[#GetSharedMemoryNativeHandle]]<br />
|-<br />
| 5 || [[#GetSharedFontInOrderOfPriority]]<br />
|}<br />
<br />
== RequestLoad ==<br />
<br />
Takes a [[#SharedFontType]] (uint32), no output.<br />
<br />
== GetLoadState ==<br />
<br />
Takes a [[#SharedFontType]] (uint32), returns the [[#LoadState]] (uint32).<br />
<br />
=== LoadState ===<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Value || Description<br />
|-<br />
| 0x00 || Loading<br />
|-<br />
| 0x01 || Loaded<br />
|}<br />
<br />
== GetSize ==<br />
<br />
Takes a [[#SharedFontType]] (uint32), returns the Font Size (uint32).<br />
<br />
== GetSharedMemoryAddressOffset ==<br />
<br />
Takes a [[#SharedFontType]] (uint32), returns the offset (uint32) to the Font Address.<br />
<br />
== GetSharedMemoryNativeHandle ==<br />
No input, returns an output SharedMemory handle.<br />
<br />
User-processes map this SharedMemory with size=0x1100000 and permissions=R--.<br />
<br />
Font data is TTF, located at the offset returned by [[#GetSharedMemoryAddressOffset]].<br />
<br />
== GetSharedFontInOrderOfPriority ==<br />
Takes an input u64 [[Settings_services#LanguageCode|LanguageCode]] and 3 type-0x6 output buffers, returns an output u8 and u32.<br />
<br />
== SharedFontType ==<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Value || Description<br />
|-<br />
| 0x00 || Japan, US and Europe (Standard)<br />
|-<br />
| 0x01 || Chinese Simplified<br />
|-<br />
| 0x02 || Extended Chinese Simplified<br />
|-<br />
| 0x03 || Chinese Traditional<br />
|-<br />
| 0x04 || Korean (Hangul)<br />
|-<br />
| 0x05 || Nintendo Extended<br />
|}<br />
<br />
= mii:u, mii:e =<br />
This is "nn::mii::detail::IStaticService".<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Cmd || Name<br />
|-<br />
| 0 || GetDatabaseServiceSharedPointer<br />
|}</div>Fincshttps://switchbrew.org/w/index.php?title=Shared_Database_services&diff=3984Shared Database services2018-03-12T22:33:21Z<p>Fincs: /* GetSharedMemoryNativeHandle */</p>
<hr />
<div><br />
= pl:u (Shared Font Manager) =<br />
This is "nn::pl::detail::ISharedFontManager".<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Cmd || Name<br />
|-<br />
| 0 || [[#RequestLoad]]<br />
|-<br />
| 1 || [[#GetLoadState]]<br />
|-<br />
| 2 || [[#GetSize]]<br />
|-<br />
| 3 || [[#GetSharedMemoryAddressOffset]]<br />
|-<br />
| 4 || [[#GetSharedMemoryNativeHandle]]<br />
|-<br />
| 5 || [[#GetSharedFontInOrderOfPriority]]<br />
|}<br />
<br />
== RequestLoad ==<br />
<br />
Takes a [[#SharedFontType]] (uint32), no output.<br />
<br />
== GetLoadState ==<br />
<br />
Takes a [[#SharedFontType]] (uint32), returns the [[#LoadState]] (uint32).<br />
<br />
=== LoadState ===<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Value || Description<br />
|-<br />
| 0x00 || Loading<br />
|-<br />
| 0x01 || Loaded<br />
|}<br />
<br />
== GetSize ==<br />
<br />
Takes a [[#SharedFontType]] (uint32), returns the Font Size (uint32).<br />
<br />
== GetSharedMemoryAddressOffset ==<br />
<br />
Takes a [[#SharedFontType]] (uint32), returns the offset (uint32) to the Font Address.<br />
<br />
== GetSharedMemoryNativeHandle ==<br />
No input, returns an output SharedMemory handle.<br />
<br />
User-processes map this SharedMemory with size=0x1100000 and permissions=R--.<br />
<br />
Font data is TTF, located at the offset returned by #GetSharedMemoryAddressOffset.<br />
<br />
== GetSharedFontInOrderOfPriority ==<br />
Takes an input u64 [[Settings_services#LanguageCode|LanguageCode]] and 3 type-0x6 output buffers, returns an output u8 and u32.<br />
<br />
== SharedFontType ==<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Value || Description<br />
|-<br />
| 0x00 || Japan, US and Europe (Standard)<br />
|-<br />
| 0x01 || Chinese Simplified<br />
|-<br />
| 0x02 || Extended Chinese Simplified<br />
|-<br />
| 0x03 || Chinese Traditional<br />
|-<br />
| 0x04 || Korean (Hangul)<br />
|-<br />
| 0x05 || Nintendo Extended<br />
|}<br />
<br />
= mii:u, mii:e =<br />
This is "nn::mii::detail::IStaticService".<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Cmd || Name<br />
|-<br />
| 0 || GetDatabaseServiceSharedPointer<br />
|}</div>Fincshttps://switchbrew.org/w/index.php?title=Version_Table&diff=3898Version Table2018-02-26T21:12:13Z<p>Fincs: Grammar</p>
<hr />
<div>{| class="wikitable" style="text-align: center;<br />
!From<br />
!To<br />
!Instructions<br />
|-<br />
|[[1.0.0]]<br />
|[[1.0.0]]<br />
|Wait for customized firmware.<br />
|-<br />
|[[2.0.0]]<br />
|[[2.3.0]]<br />
|Update to version [[3.0.0]]. See [[How to update to 3.0.0]].<br />
|-<br />
|[[3.0.0]]<br />
|[[3.0.0]]<br />
|You can run homebrew. See [https://switchbrew.github.io/nx-hbl/ nx-hbl] or [https://github.com/switchbrew/nx-hbmenu nx-hbmenu].<br />
|-<br />
|[[3.0.1]]<br />
|[[4.1.0]]<br />
|Wait for a while for a compatible Homebrew Launcher or customized firmware.<br/>Feel free to update to [[4.1.0]] from [[3.0.1]] or up.<br />
|- <br />
|colspan="3"|In any cases you need to block updates.<br />
|}</div>Fincs