{"id":16123280,"url":"https://github.com/kitlith/powersaves_ntrboot","last_synced_at":"2025-03-18T11:31:07.156Z","repository":{"id":85474441,"uuid":"91997216","full_name":"kitlith/powersaves_ntrboot","owner":"kitlith","description":"A tool that reads and writes firmware for the acekard 2i and clones.","archived":false,"fork":false,"pushed_at":"2017-08-15T16:00:27.000Z","size":12,"stargazers_count":21,"open_issues_count":1,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-02-28T09:17:53.645Z","etag":null,"topics":["nintendo-3ds","nintendo-ds"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kitlith.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2017-05-22T00:45:36.000Z","updated_at":"2023-10-21T20:23:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"78377755-0be8-45b0-9e80-b476d1fec97a","html_url":"https://github.com/kitlith/powersaves_ntrboot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitlith%2Fpowersaves_ntrboot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitlith%2Fpowersaves_ntrboot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitlith%2Fpowersaves_ntrboot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitlith%2Fpowersaves_ntrboot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kitlith","download_url":"https://codeload.github.com/kitlith/powersaves_ntrboot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243926046,"owners_count":20369911,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["nintendo-3ds","nintendo-ds"],"created_at":"2024-10-09T21:15:17.095Z","updated_at":"2025-03-18T11:31:07.151Z","avatar_url":"https://github.com/kitlith.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ak2itool\nAn expanded version of the example originally packaged with powerslaves.\nThis rewritten version was created with the express purpose of supporting clones\nas well as the acecard 2i.\n\nIt should be noted that this code is brand new, compared to the old example and\ntherefore needs testing which it has not recieved yet.\n\n## Usage\n```bash\nak2itool dump \u003cfile\u003e [length [address] ]\n```\nReads the card's flash and dumps it to \u003cfile\u003e. If *length* is provided, then the\noutput wil be truncated to *length* bytes. If *address* is provided, then it\nstarts reading from that address.\n\nAliases: `ak2itool read \u003cfile\u003e [length [address] ]`\n\n```bash\nak2itool flash \u003cfile\u003e [length [address] ]\n```\nFlashes the contents of \u003cfile\u003e to the card's flash. If *length* is provided,\nthen only *length* bytes will be flashed. If address is provided, then it starts\nflashing to that address in flash.\n\nAliases: `ak2itool write \u003cfile\u003e [length [address] ]`\n\nIn general, only the first character of a command is checked at the moment, so\na command like `ak2itool f flash.bin` would work. This *is* subject to change,\nas soon as I find a good cross-platform argument parser. A length of 0 produces\nthe default length.\n\n## Supported Cards\n - Acekard 2i revision 44\n - Acekard 2i revision 81\n - R4i Ultra -- This appears to be identical to the ak2i, meaning it'll be caught by the same code.\n - R4i Gold 3DS -- Untested, I heard from someone that the powersaves doesn't like communicating with it?\n\nIf you have a cart that you think could be supported, open an issue! Please\nprovide a way of obtaining the software used to write the firmware, if you do so.\n\n## Hacking\nThe architecture is a little bit weird. Instantiated instances of the Flashcart\nclass are automatically added to a vector which is iterated over to find the\ncard that is currently inserted. It's designed so that you can make as few\nchanges as possible to get a new card up and running.\n\nYou need to provide the following methods:\n - `bool setup()`\n - `void cleanup()`\n - `void formatReadCommand(uint8_t *cmdbuf, uint32_t address)`\n - `void formatEraseCommand(uint8_t *cmdbuf, uint32_t address)`\n - `void formatWriteCommand(uint8_t *cmdbuf, uint32_t address, uint8_t value)`\n\n`setup` preforms basic initialization, such as unlocking the flash, and returns\ntrue if the card present is what it handles. This is the only function in your\nclass that will be called if it returns false.\n\n`cleanup` cleans up. Does stuff like locking the flash afterwards.\n\nThe `format*Command` family of fumctions expect you to take a pointer to a\nbuffer, as well as some arguments, and write the equivilant command into the\nbuffer.\n\nAlternatively, you should be able to override the `*Flash` functions if the card\nreally does act that different from the default. This is untested though, and\nit's quite possible I did something wrong to make that difficult. I don't\nnormally write C++.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkitlith%2Fpowersaves_ntrboot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkitlith%2Fpowersaves_ntrboot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkitlith%2Fpowersaves_ntrboot/lists"}