Homebrew ARM9Loader -- Technical Details and Discussion

  • Thread starter Thread starter Selver
  • Start date Start date
  • Views Views 572,367
  • Replies Replies 4,025
  • Likes Likes 42
Thank you
i am sad that i won't be able to use that feature, as my home button is dead, and according to this "Special HID status flags: bit0 = power button pressed, bit1 = power button pressed long, bit2 = home button pressed, bit3 = home button released, bit4 = wifi slider enabled, bit5 = shell got closed, bit6 = shell got opened. If nothing has changed this register is 0." there isn't really any other usable flag, bit0 would be on all the time, bit1 shouldnt have enough time to be set before the status is checked (?), bits 2-3 can't really help, bit 4 doesn't help with my N3DS and bits 5-6, according to the description, only get set when the action is done, => closing or opening the lid, so doesn't seem possible to lauch at boot. anything i misinterpreted ?
 
Last edited by capito27,
  • Like
Reactions: Madridi
That much I understand, but it would make arm9hax a bit pointless for me. A whole lot of work, just for brick protection. I've never bricked a 3DS in my life so the chances are really low.

The best use of arm9hax is to primarily use sysnand 10.6, delete emunand, and just stick to using sysnand.
Since my main focus is Gateway, I'll be in emunand pretty much always, until Gateway fully supports coldbooting, making use of sysnand.

Until I can fully abandon emunand, I'll never be making use of arm9hax at all. So no benefits of getting my OTP.
To be honest, having brick protection is a great thing to have especially if you're a gateway user, given that in the past they've bricked users 3dses not only for using competitor products, but also for "incorrectly" using their products.
 
Which is the safest way to update arm9loaderhax? I think I have the earliest version. Also, which are the benefits of updating it?
 
Last edited by tatundria,
@dark_samus3

I've trouble to get it working. I've tested to insert decrypt9a9lh.bin
and bootctr so far, but it ignores them and loads the default 0x5C000
even i've installed otp using your latest git.

0x5a000ctjl4.png


Any suggestions?
 
Which is the safest way to update arm9loaderhax? I think I have the earliest version. Also, which are the benefits of updating it?
 
@dark_samus3 With your new commit, would it be possible to trigger a button to start SysNand even without SD card in the 3DS ? That would be a great feature.
 
@dark_samus3

I've tested a littlebit, but i guess its this thats not working:

Code:
if(i2cReadRegister(I2C_DEV_MCU, 0x10) & 0x4) //if home button is pressed
  {
  //Jump to alternate stage2
  sdmmc_nand_readsectors(0x5A000, 0x20, (u8*)0x08006000);
  }

As test i've changed it to:
Code:
  if(i2cReadRegister(I2C_DEV_MCU, 0x10) & 0x4) //if home button is pressed
  {
  //Jump to alternate stage2
  sdmmc_nand_readsectors(0x5C000, 0x20, (u8*)0x08006000);
  }
  else
  {
  //jump to normal stage2
  sdmmc_nand_readsectors(0x5A000, 0x20, (u8*)0x08006000);
  }

That worked to load my self inserted loader pointing to bootctr, but i was unable to start from 5C000 with home button.
 
Last edited by liomajor,
@dark_samus3

I've tested a littlebit, but i guess its this thats not working:

Code:
if(i2cReadRegister(I2C_DEV_MCU, 0x10) & 0x4) //if home button is pressed
  {
  //Jump to alternate stage2
  sdmmc_nand_readsectors(0x5A000, 0x20, (u8*)0x08006000);
  }

As test i've changed it to:
Code:
  if(i2cReadRegister(I2C_DEV_MCU, 0x10) & 0x4) //if home button is pressed
  {
  //Jump to alternate stage2
  sdmmc_nand_readsectors(0x5C000, 0x20, (u8*)0x08006000);
  }
  else
  {
  //jump to normal stage2
  sdmmc_nand_readsectors(0x5A000, 0x20, (u8*)0x08006000);
  }

That worked to load my self inserted loader pointing to bootctr, but i was unable to start from 5C000 with home button.
There's no payload that launches from home button atm anyway.
 
I've inserted a modified stage as test.
It's been working great here and for a few other people with hardmods who've tried it out... Are you sure you put it at the right address? Keep in mind that sector size is 0x200 bytes per sector so 0x5A000 * 0x200 = 0xB400000 just to be sure you have all of that right ;) lastly the home button is kind of strange, so make sure you are holding it before turning on the console.... also, keep in mind that D9 and other payloads WILL NOT have screen init, as screen init is embedded in stage 2, which we aren't launching from ;) anyways, hope you get it worked out :) also, one last thing, the updater that I previously put out won't update stage 1, so you'll have to reinstall by the .3dsx to get it working properly :)
 
Last edited by dark_samus3,
  • Like
Reactions: peteruk
It's been working great here and for a few other people with hardmods who've tried it out... Are you sure you put it at the right address? Keep in mind that sector size is 0x200 bytes per sector so 0x5A000 * 0x200 = 0xB400000 just to be sure you have all of that right ;) lastly the home button is kind of strange, so make sure you are holding it before turning on the console.... also, keep in mind that D9 and other payloads WILL NOT have screen init, as screen init is embedded in stage 2, which we aren't launching from ;) anyways, hope you get it worked out :) also, one last thing, the updater that I previously put out won't update stage 1, so you'll have to reinstall by the .3dsx to get it working properly :)

Look @ my picture, it was @B400000 (sector 5A000) and it didn't work to press home button while booting :/

For a fast insert you can open the disk drive while 3ds is connected via usb either with Hex Workshop or HxD.

I've tried to switch home button to something else, but i don't know the button code.
 
Look @ my picture, it was @B400000 (sector 5A000) and it didn't work to press home button while booting :/

For a fast insert you can open the disk drive while 3ds is connected via usb either with Hex Workshop or HxD.

I've tried to switch home button to something else, but i don't know the button code.
just because it says 0x5A000 does NOT by any means mean it is correct... The block size can vary, so make sure the block size is 0x200 bytes (512 bytes) per sector... also, just to be sure, how did you update your stage 1 payload?


EDIT: doing the math, if you have a new 3ds, with the 2GB chip in it then it looks like your block size is correct, however, if you have an o3ds, or a new 3ds with the 1.2 GB chip then your blocksize is clearly off in that pic, which means you are putting your payload in the wrong spot. Is there any way to specify blocksize in your hex editor? If there is make sure it's set to 512 bytes
 
Last edited by dark_samus3,
  • Like
Reactions: peteruk

Site & Scene News

Popular threads in this forum