Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Open agb firm 3DS: Difference between revisions

From GameBrew
No edit summary
No edit summary
Line 4: Line 4:
|description=A bare metal app for running GBA homebrew/games using the 3DS builtin GBA hardware.
|description=A bare metal app for running GBA homebrew/games using the 3DS builtin GBA hardware.
|author=profi200
|author=profi200
|lastupdated=2020/12/24
|lastupdated=2021/12/24
|type=System Tools
|type=System Tools
|version=alpha_2020-12-24
|version=alpha_2020-12-24
|license=Mixed
|license=GPL-3.0
|download=https://dlhb.gamebrew.org/3dshomebrew/open_agb_firm.rar
|download=https://dlhb.gamebrew.org/3dshomebrews/openagbfirm.7z
|website=https://github.com/profi200/open_agb_firm
|website=https://github.com/profi200/open_agb_firm
|source=https://github.com/profi200/open_agb_firm
|source=https://github.com/profi200/open_agb_firm
}}
}}
<youtube>wuvblSxILf4</youtube>
open_agb_firm is a bare metal interface for natively running GBA games and homebrew using the 3DS's built-in GBA hardware.


== open_agb_firm ==
'''Note:''' open_agb_firm is currently in alpha. While open_agb_firm is relatively stable and safe to use, some quirks that have not been fixed. Use at your own risk.


open_agb_firm is a bare metal app for running GBA homebrew/games using the 3DS builtin GBA hardware.
==Features==
* A complete and better alternative to GBA VC injects (AGB_FIRM).
* Launch GBA files directly from the SD card.
* Write save files directly to the SD card.
* Automatic save type configuration using an included database.
* User configuration, such as gamma settings.
* And more to come.


== Disclaimer ==
==Installation==
Download contains alpha version 2021-12-24 and [https://gbatemp.net/threads/open_agb_firm-discussion-thread.570844/post-9709423 a new build] (by stranno).


We are not responsible for any damage that may occur to your system as a direct or indirect result of you using open_agb_firm.
Copy the open_agb_firm.firm file to your 3DS's SD card at /luma/payloads/ if you're using Luma3DS or elsewhere if you're using fastboot3DS.


== How to build ==
Copy the 3ds folder to the root of your 3DS's SD card. Merge folders if asked.


To compile open_agb_firm you need
Launch open_agb_firm using Luma3DS by holding Start while booting your 3DS or assign it to a slot if you're using fastboot3DS.


* [https://sourceforge.net/projects/devkitpro/ devkitARM]
After open_agb_firm launches, use the file browser to navigate to a .gba ROM to run.
* [https://github.com/profi200/dma330as Corelink DMA-330 assembler]
* [https://github.com/derrekr/ctr_firm_builder CTR firm builder] installed in your system. Additionally you need 7-Zip or on Linux p7z installed to make release builds. Also make sure the CTR firm builder and dma330as binaries are in your $PATH environment variable and accessible to the Makefile. Build open_agb_firm as debug build via <code>make</code> or as release build via <code>make release</code>.


== Known issues ==
==User guide==
===Configuration===
Settings are stored in /3ds/open_agb_firm/config.ini.


This section is reserved for a listing of known issues. At present only this remains:
'''General settings:'''


* Sleep mode is not fully implemented.
* <code>u8 backlight</code> - Backlight brightness (default: 64, values ≤64 are recommended). Possible values are:
* Save type detection may still fail for certain games using EEPROM.
** Old 3DS - 20-117
* No settings (including brightness control), no cheats and other enhancements. If you happen to stumble over another bug, please open an issue in the [https://github.com/profi200/open_agb_firm/issues official open_agb_firm repo on GitHub] or contact me via other platforms.
** New 3DS - 16-142
* <code>bool directBoot</code> - Skip GBA BIOS intro at game startup (default: false)
* <code>bool useGbaDb</code> - Use gba_db.bin to get save types (default: true).
 
'''Video-related settings:'''
* <code>u8 scaler</code> - Video scaler. 0 = none, 1 = bilinear, 2 = hardware (default: 2).
* <code>float gbaGamma</code> - GBA input gamma (default: 2.2).
* <code>float lcdGamma </code> - Output LCD gamma (default : 1.54).
* <code>float contrast </code> - Screen gain (default: 1.0).
* <code>float brightness </code> - Screen lift (default: 0.0).
 
'''Game-specific settings:'''
* <code>u8 saveSlot</code> - Only intended to be used in the per-game settings (romName.ini in /3ds/open_agb_firm/saves). Savegame slot 0-9 (default: 0).
 
'''Advanced settings:'''
* <code>bool saveOverride</code> - Open save type override menu after selecting a game (default: false).
* <code>u16 defaultSave</code> - Change save type default when save type is not in gba_db.bin and cannot be autodetected. Possible values:
** 0, 1 - EEPROM 8k.
** 2, 3 - EEPROM 64k.
** 4, 6, 8 - Flash 512k RTC.
** 5, 7, 9 - Flash 512k.
** 10, 12 - Flash 1m RTC.
** 11, 13 - Flash 1m.
** 14 - SRAM 256k (default value).
** 15 - None.
 
===Hardware Limitations===
open_agb_firm using the 3DS's built-in GBA hardware. Unfortunately, this comes with limitations compared to GBA emulators. This is a list of limitations cannot be solved in software/difficult to work around:
* >32 MiB (>256 Mbit) games and homebrew.
* Games with extra hardware built into the cartridge (except real-time clocks). Patches are required.
* Proper save autodetection (can't find save type during gameplay).
* GBA serial port (aka Link Cable).
* >32 KiB (>256 Kbit) SRAM (homebrew games/emulators).
* Reboots are required for switching between games.
* No save states. Very difficult to implement because no direct hardware access.
* Sound has lots of aliasing issues. No known workaround (hardware bug).
 
===EEPROM Fixer===
Most emulators output EEPROM saves differently than what open_agb_firm expects, making them incompatible.
 
Fortunately, they are very easy to fix, using [https://exelotl.github.io/gba-eeprom-save-fix this tool] by exelotl.
 
The tool also works vise versa, if you want to use a save generated by open_agb_firm with an emulator.
 
===FAQ===
'''Q. Why isn't open_agb_firm a normal 3DS app?'''
 
To access the 3DS's GBA hardware, open_agb_firm needs to run with full hardware access, which can only be provided by running as a FIRM.
 
'''Q. Is this safe to use?'''
 
Of course! While open_agb_firm does run with full hardware access, a lot of work has been put in by several people to ensure that nothing unexpected happens.
 
Some backend code from open_agb_firm is actually used in fastboot3ds.
 
'''Q. What games work with open_agb_firm?'''
 
In theory, all of them, except those that fall within the hardware limitations.
 
'''Q. How can I increase the brightness?'''
 
Increase the value of the backlight setting in config.ini.
 
See Configuration for more information.
 
'''Q. Why do the colors look off?'''
 
The default gamma settings are intended to make up for the washed out colors the 3DS LCD has.
 
If they look weird to you, setting the outGamma setting to 2.2 might help.
 
'''Q. Why do some of my ROM hacks/homebrew games have saving issues?'''
 
open_agb_firm resorts to save autodetection when it can't find an entry for the game it's running in gba_db.bin (which only contains data for official games).
 
And it's a bit wonky for games that use EEPROM or misleading SDK save strings.
 
'''Q. Why doesn't my save file from an emulator work?'''
 
There's a good chance that the save you're having issues with is an EEPROM save, which most emulators output differently. See EEPROM Fixer.
 
'''Q. My game doesn't save properly!'''
 
First, please ensure that the GBA ROM you are playing is not modified in any way, and matches its No-Intro checksums.
 
Second, make sure you aren't using an existing .SAV file, because some may have issues for various reasons.
 
Third, make sure your gba_db.bin is up-to-date. If everything seems to be in order but the game still doesn't save properly, please open an issue so it can be fixed.
 
In the meantime, the useGbaDb and saveOverride settings may be useful (see Configuration for more information).
 
==Controls==
A/B/L/R/Start/Select - GBA buttons
 
Select+Y - Dump screen output to /3ds/open_agb_firm/texture_dump.bmp (press Home if it freezes)


== Hardware limitations ==
Hold Power button - Turn off the 3DS


This is a list of limitations we can't solve in software or are very hard to work around. This doesn't mean it will never happen (unless stated otherwise).
==Screenshots==
https://dlhb.gamebrew.org/3dshomebrews/openagbfirm3.gif


* 64 MiB (512 mbit) games. Not possible to support.
==Known issues==
* Games with extra hardware built into the cartridge (except Real-Time Clock). Patches are required.
* Sleep mode is not fully implemented.
* GBA Serial port (aka. Link Cable).
* Using Select+Y to dump screen output to a file can freeze the screen output sometimes.
* 64 KiB (512 kbit) SRAM (homebrew games/emulators). Not possible to support.
* Save type autodetection may still fail for certain games using EEPROM.
* Can't switch back to 3DS mode from GBA mode requiring a reboot for booting a different game.
* Lack of settings (including brightness control during gameplay).
* Savestates. Very difficult to implement because no direct hardware access.
* No cheats and other enhancements.


== Troubleshooting ==
==Changelog==
'''2021/12/24'''
* Increased file browser entry limit to 1000 per folder (the real limit depends on the average file name length of all files).
* Autoboot support has been added. Place autoboot.txt in /3ds/open_agb_firm containing the ROM path in a single line. Example path: sdmc:/rom.gba
* All savegames and per-game configs are now stored under /3ds/open_agb_firm/saves.
* Per game config support has been added and with it multiple savegame slot support (up to 10). Currently this is the only officially supported config option for games. Place romName.ini (replace romName with the ROM file name) in /3ds/open_agb_firm/saves. See the README under the Game section.


Known problems and the solution. Problem: The game crashes/shows white or blackscreens or shows a savegame corrupt message.
[https://github.com/profi200/open_agb_firm/releases Release notes.]
Solution: Try to delete the savegame file. If this doesn't help report the issue.
Note: EEPROM saves made by some emulators are incompatible because they have every 8 bytes block endian swapped.


== License ==
==Credits==
Thanks to:
* yellows8.
* plutoo.
* smea.
* Normmatt.
* WinterMute.
* ctrulib devs.
* LumaTeam.
* devkitPro.
* ChaN (fatfs).
* benhoyt (inih).
* fastboot3DS project.
* MAME.
* No-Intro.
* Wolfvak, Sono and all the other people in #GodMode9 on freenode/Discord.
* endrift, Extrems and all the other people in #mgba on freenode.
* everyone who contributed to 3dbrew.org.


You may use this under the terms of the GNU General Public License GPL v3 or under the terms of any later revisions of the GPL. Refer to the provided <code>LICENSE.txt</code> file for further information.
Copyright (C) 2021 derrek, profi200, d0k3.


== Thanks to... ==
==External links==
* yellows8
* GitHub - https://github.com/profi200/open_agb_firm
* plutoo
* GBAtemp - https://gbatemp.net/threads/open_agb_firm-discussion-thread.570844
* smea
* Normmatt
* WinterMute
* ctrulib devs
* Luma 3DS devs
* devkitPro
* ChaN
* fastboot3DS project
* Wolfvak, Sono and all the other people in #GodMode9 on IRC/Discord
* endrift, Extrems and all the other people in #mgba on Freenode


...everyone who contributed to 3dbrew.org Copyright (C) 2020 derrek, profi200, d0k3
[[Category:3DS homebrew emulators]]
[[Category:Homebrew console emulators on 3DS]]

Revision as of 12:48, 15 Ocak 2022

open_agb_firm
File:Open agb firm.jpg
General
Authorprofi200
TypeSystem Tools
Versionalpha_2020-12-24
LicenseGPL-3.0
Last Updated2021/12/24
Links
Download
Website
Source

open_agb_firm is a bare metal interface for natively running GBA games and homebrew using the 3DS's built-in GBA hardware.

Note: open_agb_firm is currently in alpha. While open_agb_firm is relatively stable and safe to use, some quirks that have not been fixed. Use at your own risk.

Features

  • A complete and better alternative to GBA VC injects (AGB_FIRM).
  • Launch GBA files directly from the SD card.
  • Write save files directly to the SD card.
  • Automatic save type configuration using an included database.
  • User configuration, such as gamma settings.
  • And more to come.

Installation

Download contains alpha version 2021-12-24 and a new build (by stranno).

Copy the open_agb_firm.firm file to your 3DS's SD card at /luma/payloads/ if you're using Luma3DS or elsewhere if you're using fastboot3DS.

Copy the 3ds folder to the root of your 3DS's SD card. Merge folders if asked.

Launch open_agb_firm using Luma3DS by holding Start while booting your 3DS or assign it to a slot if you're using fastboot3DS.

After open_agb_firm launches, use the file browser to navigate to a .gba ROM to run.

User guide

Configuration

Settings are stored in /3ds/open_agb_firm/config.ini.

General settings:

  • u8 backlight - Backlight brightness (default: 64, values ≤64 are recommended). Possible values are:
    • Old 3DS - 20-117
    • New 3DS - 16-142
  • bool directBoot - Skip GBA BIOS intro at game startup (default: false)
  • bool useGbaDb - Use gba_db.bin to get save types (default: true).

Video-related settings:

  • u8 scaler - Video scaler. 0 = none, 1 = bilinear, 2 = hardware (default: 2).
  • float gbaGamma - GBA input gamma (default: 2.2).
  • float lcdGamma - Output LCD gamma (default : 1.54).
  • float contrast - Screen gain (default: 1.0).
  • float brightness - Screen lift (default: 0.0).

Game-specific settings:

  • u8 saveSlot - Only intended to be used in the per-game settings (romName.ini in /3ds/open_agb_firm/saves). Savegame slot 0-9 (default: 0).

Advanced settings:

  • bool saveOverride - Open save type override menu after selecting a game (default: false).
  • u16 defaultSave - Change save type default when save type is not in gba_db.bin and cannot be autodetected. Possible values:
    • 0, 1 - EEPROM 8k.
    • 2, 3 - EEPROM 64k.
    • 4, 6, 8 - Flash 512k RTC.
    • 5, 7, 9 - Flash 512k.
    • 10, 12 - Flash 1m RTC.
    • 11, 13 - Flash 1m.
    • 14 - SRAM 256k (default value).
    • 15 - None.

Hardware Limitations

open_agb_firm using the 3DS's built-in GBA hardware. Unfortunately, this comes with limitations compared to GBA emulators. This is a list of limitations cannot be solved in software/difficult to work around:

  • >32 MiB (>256 Mbit) games and homebrew.
  • Games with extra hardware built into the cartridge (except real-time clocks). Patches are required.
  • Proper save autodetection (can't find save type during gameplay).
  • GBA serial port (aka Link Cable).
  • >32 KiB (>256 Kbit) SRAM (homebrew games/emulators).
  • Reboots are required for switching between games.
  • No save states. Very difficult to implement because no direct hardware access.
  • Sound has lots of aliasing issues. No known workaround (hardware bug).

EEPROM Fixer

Most emulators output EEPROM saves differently than what open_agb_firm expects, making them incompatible.

Fortunately, they are very easy to fix, using this tool by exelotl.

The tool also works vise versa, if you want to use a save generated by open_agb_firm with an emulator.

FAQ

Q. Why isn't open_agb_firm a normal 3DS app?

To access the 3DS's GBA hardware, open_agb_firm needs to run with full hardware access, which can only be provided by running as a FIRM.

Q. Is this safe to use?

Of course! While open_agb_firm does run with full hardware access, a lot of work has been put in by several people to ensure that nothing unexpected happens.

Some backend code from open_agb_firm is actually used in fastboot3ds.

Q. What games work with open_agb_firm?

In theory, all of them, except those that fall within the hardware limitations.

Q. How can I increase the brightness?

Increase the value of the backlight setting in config.ini.

See Configuration for more information.

Q. Why do the colors look off?

The default gamma settings are intended to make up for the washed out colors the 3DS LCD has.

If they look weird to you, setting the outGamma setting to 2.2 might help.

Q. Why do some of my ROM hacks/homebrew games have saving issues?

open_agb_firm resorts to save autodetection when it can't find an entry for the game it's running in gba_db.bin (which only contains data for official games).

And it's a bit wonky for games that use EEPROM or misleading SDK save strings.

Q. Why doesn't my save file from an emulator work?

There's a good chance that the save you're having issues with is an EEPROM save, which most emulators output differently. See EEPROM Fixer.

Q. My game doesn't save properly!

First, please ensure that the GBA ROM you are playing is not modified in any way, and matches its No-Intro checksums.

Second, make sure you aren't using an existing .SAV file, because some may have issues for various reasons.

Third, make sure your gba_db.bin is up-to-date. If everything seems to be in order but the game still doesn't save properly, please open an issue so it can be fixed.

In the meantime, the useGbaDb and saveOverride settings may be useful (see Configuration for more information).

Controls

A/B/L/R/Start/Select - GBA buttons

Select+Y - Dump screen output to /3ds/open_agb_firm/texture_dump.bmp (press Home if it freezes)

Hold Power button - Turn off the 3DS

Screenshots

openagbfirm3.gif

Known issues

  • Sleep mode is not fully implemented.
  • Using Select+Y to dump screen output to a file can freeze the screen output sometimes.
  • Save type autodetection may still fail for certain games using EEPROM.
  • Lack of settings (including brightness control during gameplay).
  • No cheats and other enhancements.

Changelog

2021/12/24

  • Increased file browser entry limit to 1000 per folder (the real limit depends on the average file name length of all files).
  • Autoboot support has been added. Place autoboot.txt in /3ds/open_agb_firm containing the ROM path in a single line. Example path: sdmc:/rom.gba
  • All savegames and per-game configs are now stored under /3ds/open_agb_firm/saves.
  • Per game config support has been added and with it multiple savegame slot support (up to 10). Currently this is the only officially supported config option for games. Place romName.ini (replace romName with the ROM file name) in /3ds/open_agb_firm/saves. See the README under the Game section.

Release notes.

Credits

Thanks to:

  • yellows8.
  • plutoo.
  • smea.
  • Normmatt.
  • WinterMute.
  • ctrulib devs.
  • LumaTeam.
  • devkitPro.
  • ChaN (fatfs).
  • benhoyt (inih).
  • fastboot3DS project.
  • MAME.
  • No-Intro.
  • Wolfvak, Sono and all the other people in #GodMode9 on freenode/Discord.
  • endrift, Extrems and all the other people in #mgba on freenode.
  • everyone who contributed to 3dbrew.org.

Copyright (C) 2021 derrek, profi200, d0k3.

External links

Advertising: