Skip to content

Releases: dleicht/open_agb_firm

20260905

Choose a tag to compare

@dleicht dleicht released this 05 Sep 18:51

This release implements proper GBA (SWI 03h) and 3DS (PDN) sleep modes.

It does so by persisting the 32‑byte BIOS vector overlay, including the SWI instruction.
After GBA is stopped, the 3DS will then gracefully shut down its gfx and audio pipelines and set CORES 0 and 1 into the low power DORMANT state, initiating the low power PDN sleep.

Depending on your hardware, sleep modes are triggered by closing the lid (O3DS up to N3DSXL) or the manual sleep switch (O2DS).

On lid open, or resetting the sleep switch, the cores are fired up, gfx and audio pipelines are rebuilt, and GBA will resume normal gameplay.

Earlier concepts of dynamically patching a sleep handler into the rom image have been abandoned because they are superseded by this.

Key features:

  • low power sleep mode in virtually every GBA game
  • no changes to the game rom or memory
  • ips patches supported as usual
  • reuse of existing original code structures as much as possible

Battery life:

# profi200 dleicht
battery drain 12 %/h 1,5 %/h
battery life ~ 8 hours ~ 3 days

Stable fully featured release

Choose a tag to compare

@dleicht dleicht released this 19 Aug 22:16
7195a73
  • ARM7 SWI 03h
  • ARM11 PDN Sleep
  • Core1/colorProfile support
  • border.bgr support/restore
  • IRQ vector lid sleep -> no false in game button inputs

Core1 really gave me a hard time. I'm actually glad it works now 😅

Important

The release build is broken on O2DS systems. I thought it was smart to switch the backlight of the lower screen off as soon as the game starts. This works on 3DS systems, but unfortunately affects both screens on O2DS screens, so the screens will turn black as the game starts. While im fixing this for the next release, the debug build here should be fine.

Universal lid sleep and full screen stretch

Choose a tag to compare

@dleicht dleicht released this 13 Aug 16:37
0d40837

This release adds the implementation of SWI 03h low power sleep and an optional full screen stretch scaler.

open_agb_firm_debug.firm -> Debug build that will show some additional info during runtime on the lower screen.
open_agb_firm_release.firm -> Release build, prolly meant for most users. The lower screen will not be used.

Technically they are the same.

Put any of these in /luma/payloads/ on your 3DS.

gba_sleep_test.gba -> Tiny test game built with butano. The game will count frames and increase the number on the display by one every 60 frames, meaning it's counting seconds. Roughly. Take note of the current number, close the lid, wait 10 seconds, open the lid, compare both numbers.