{"id":21711857,"url":"https://github.com/gemarcano/arm9launcher","last_synced_at":"2026-02-12T10:33:44.341Z","repository":{"id":75914177,"uuid":"61470319","full_name":"gemarcano/arm9launcher","owner":"gemarcano","description":"Nintendo 3DS ARM9 bootloader","archived":false,"fork":false,"pushed_at":"2017-01-16T23:18:40.000Z","size":72,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-24T15:00:26.891Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gemarcano.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"COPYING.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-19T08:04:12.000Z","updated_at":"2024-01-19T16:16:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"45f33dde-c683-4fae-8103-2c38db3e6c96","html_url":"https://github.com/gemarcano/arm9launcher","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/gemarcano/arm9launcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemarcano%2Farm9launcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemarcano%2Farm9launcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemarcano%2Farm9launcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemarcano%2Farm9launcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gemarcano","download_url":"https://codeload.github.com/gemarcano/arm9launcher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gemarcano%2Farm9launcher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29363170,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-25T23:30:11.988Z","updated_at":"2026-02-12T10:33:44.305Z","avatar_url":"https://github.com/gemarcano.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"________________________________________________________________________________\n\narm9launcher\n\nCopyright 2016 Gabriel Marcano\n________________________________________________________________________________\n\n\n--------------------------------------------------------------------------------\nLicensing\n--------------------------------------------------------------------------------\n\nThis project is licensed under the GPL 2 or later licenses, at your choice.\nRefer to COPYING for more licensing information and for the licensing for the\ncode borrowed from other sources.\n\n\n--------------------------------------------------------------------------------\nAbout\n--------------------------------------------------------------------------------\n\nThis set of programs form a 3DS ARM9 payload selector, or bootloader. This\nproject was started for two reasons: the author thought most ARM9 payload\nselectors in existence were too convoluted for their own good, and he wanted\nan application to showcase the usage of his general purpose libctr9 3DS ARM9\ncode library.\n\nCurrently arm9launcher supports the following:\n\n  -Button based payload selection, configurable via a configuration file\n\n  -Human readable configuration file, in JSON format\n\n  -Payloads can be launched from an external SD card, and internal CTRNAND,\n        TWLN, and TWLP partitions\n\n  -The configuration and bootloader files can be stored in CTRNAND or an SD\n    card.\n\nPlanned features:\n\n  -Menu based payload selection\n\n  --Author is open to suggestions\n\n\nNote that this project is still under active development. Please\n\n--------------------------------------------------------------------------------\nBuild dependencies\n--------------------------------------------------------------------------------\n\n - Autotools in general. These are used to create the build scripts.\n\n - https://github.com/gemarcano/libctr9 - Used for general 3DS ARM9\n    functionality.\n    See that repository for instruction on how to install it.\n\n  - https://github.com/gemarcano/libctr_core - Used by libctr9. See that\n    repository for instructions on how to install it.\n\n - Freetype2. Needed by libctr9.\n\n--------------------------------------------------------------------------------\nCompiling\n--------------------------------------------------------------------------------\n\nThe Autotools setup assumes that devkitarm is already in the PATH. It also\nassumes the environmental variable CTRARM9 is set to wherever the --prefix used\nto install libctr9 is.\n\n # this following line is if the 3ds compiler isn't in the path\n export PATH=${PATH}:${DEVKITPRO}/bin:${DEVKITARM}/bin\n export CTRARM9=[root path of libctr9 installation]\n autoreconf -if\n ./configure --host arm-none-eabi --prefix=$CTRARM9\n make\n\nExample:\n  export PATH=${PATH}:${DEVKITPRO}/bin:${DEVKITARM}/bin\n  export CTRARM9=~/.local/usr/arm-none-eabi-9\n  autoreconf -if\n  ./configure --host arm-none-eabi --prefix=$CTRARM9\n  make -j10\n\n\n--------------------------------------------------------------------------------\nInstallation\n--------------------------------------------------------------------------------\n\nIn the src/ directory after `make` is run, the files arm9loaderhax.bin and\narm9launcher.bin are the loader and bootloader, respectively. These can be\ncopied to the root of an SD card or the root of CTRNAND.\n\nBesides the executables, the loader needs a configuration file,\narm9launcher.cfg. An example configuration file is included on the root of the\narmlauncher repository. This configuration needs to be on the root of an SD\ncard or CTRNAND.\n\n\n--------------------------------------------------------------------------------\nConfiguration\n--------------------------------------------------------------------------------\n\nThe configuration file is in JSON. Every entry is in a key, value pair. The\nconfiguration JSON consists of a configuration entry with a value of an array\nof entries. Each configuration entry is a JSON object with some keys.\n\nEach entry requires the following keys with values:\n\n  - \"name\" : \"a string representing a name of a payload (unused currently)\"\n\n  - \"location : \"path to the payload. Use SD:/, CTRNAND:/, TWLN:/, TWLP:/\n    prefixes for accessing payloads in the different partitions.\"\n\n  - \"buttons\" : [ \"array of strings representing which buttons trigger a\n    particular choice. Multiple buttons for a single entry are supported.\"]\n      Buttons supported include (case sensitive):\n        \"None\" - Represents the payload chosen if no buttons are pressed\n        \"A\"\n        \"B\"\n        \"Select\"\n        \"Start\"\n        \"Right\"\n        \"Left\"\n        \"Up\"\n        \"Down\"\n        \"R\"\n        \"L\"\n        \"X\"\n        \"Y\"\n     Note that this list does not include the second shoulder buttons found on\n     the N3DS, nor the home menu button. Those are handled separately in the\n     3DS hardware than how the rest of the buttons are polled. This is something\n     the author can look into addressing at some later date.\n\nEntries support the following optional entries:\n\n  - \"offset\" : a numeric value (hex or decimal) specifying the offset from which\n    to load the actual payload from the given payload file. This is useful for\n    programs like CakesFW, which has the ARM9 binary in the Cakes.dat at offset\n    0x12000.\n\nSee the arm9launcher.cfg file included in the repository for an example\nconfiguration file.\n\n--------------------------------------------------------------------------------\nUsage\n--------------------------------------------------------------------------------\n\nWhen the arm9loaderhax.bin program is launched somehow, it will read the current\nHID input state (buttons) to determine which payload to load. It will then try\nto parse the configuration file it finds (either on the SD card or on the\nCTRNAND, in that order). If the HID state matched any of the payloads described\nin the configuration file, it will then try to hand off execution to the\narm9launcher.bin to actually launch the payload.\n\nIf an error occurs, like the SD card being really screwed up, or NAND is bad,\nor the configuration file is bad, or if the payload was not found, some error\nwill be reported. Pressing any button will cause the system to power off.\nCurrently error messages are not exactly user friendly.\n\n\n--------------------------------------------------------------------------------\nIssues/Bugs\n--------------------------------------------------------------------------------\n\nPlease report these to the issue tracker at the repository, and these will be\naddressed as soon as possible, if not at least acknowledged. The more detailed\nthe reports, the more likely they are to be addressed quickly. In particular,\nthe following information can be quite useful when debugging bugs:\n\n - Type of 2/3DS system\n - Operating system being used to compile\n - Release/commit of library in use\n - Steps to reproduce issue\n - Expected behavior\n - Actual behavior\n - ARM9 entry poin usedt\n - Any modifications or extensions\n - Version of libctr9 in use (or commit)\n\n\n--------------------------------------------------------------------------------\nContributing\n--------------------------------------------------------------------------------\n\nPull requests are welcome. All requests will be looked at in detail, and must be\ndocumented in a similar fashion as the rest of the code for this project. In\nparticular, it is unlikely (but not impossible) that code that emmits warnings\nwith the warnings in use by this library would be merged without first fixing/\naddressing what is causing the warnings to be emitted.\n\n\n--------------------------------------------------------------------------------\nCredits\n--------------------------------------------------------------------------------\n\n - #3dshacks @ Rizon for starting me on my path to 3DS homebrew development\n - #Cakey @ Freenode for the continued development support\n - #3dsdev @ EFNet for the occasional help answering questions\n - Everyone that has helped in the development of libctr9 (see the README of\n   libctr9 for more details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgemarcano%2Farm9launcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgemarcano%2Farm9launcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgemarcano%2Farm9launcher/lists"}