When Gecko boots a game, it looks for a file named gameconfig.txt at the root of your SD card to see if it contains settings for that game.  Check the "gameconfig example.txt" file for an example of how the file should look.

-gameconfig.txt format-

Specify a 6 character game id followed followed by a colon, optionally replacing game id characters with ? to match multiple regions/versions, and on the lines after it you specify what settings to change or functions to execute.  Repeat for as many games as you want to add.  Here's what is currently available:

[value] hooktype - Specify hook type value
0 - No Hooks
1 - VBI
2 - Wii Pad
3 - GC Pad
4 - GXDraw
5 - GXFlush
6 - OSSleepThread
7 - AXNextFrame

Example:
hooktype = 6
This will result in the OSSleepThread hook being used if the hook selected was "Default".

[function] poke(address, value) - Poke address with 32-bit value

Example:
poke(80123458, 01234567)
Writes the 32-bit value 0x01234567 to the address 80123458.

[function] pokeifequal(address1, value1, address2, value2) - If 32-bit value of address1 equals value1, then poke address2 with value2 (also 32-bit)

Example:
pokeifequal(80123458, 01234567, 80234568, 98765432)
If address 80123458 contains 32-bit value 01234567, then write the 32-bit value 98765432 to address 80234568.

[function] searchandpoke(searchvalues, address1, address2, offset, value) - Search for the 32-bit values searchvalues between address1 and address2, and if found poke the given offset off of the located address with the given value.  If address1 is 0, use the address first located by a prior invocation of this function or if no such address exists, use a copy of address2 with all but the first 4-bits zeroed out for address1.  If address2 is zero then don't search, compare the search values against the values at address1 and if equal write the given value at the given offset (if address1 was 0 and was not able to be given a value, then nothing will be done).

Examples:
searchandpoke(60000000 60000000 60000000, 80000000, 81800000, 0, 38600001)
searchandpoke(38600001 60000000 60000000, 0, 0, 4, 4E800020)
This will search for the value 0x600000006000000060000000 between addresses 80000000 and 81800000.  If found, it will write the 32-bit value 0x38600001 to the located address.  Then for the next searchandpoke the first located address will be reused (no search will be performed, just an if equal to comparision against the given search values) and the value 0x4E800020 will be written at an offset of 0x4 off of that address.
If 0x600000006000000060000000 was found at more than one address then all but the first instance will have been changed to 0x386000016000000060000000.  The first instance will have been changed to 0x386000014E80002060000000.  To change the first instance to 0x386000014E80002060000000 and leave the rest of the values untouched, this could be used instead:
searchandpoke(60000000 60000000 60000000, 80000000, 81800000, 0, 60000000)
searchandpoke(60000000 60000000 60000000, 0, 0, 0, 38600001)
searchandpoke(38600001 60000000 60000000, 0, 0, 4, 4E800020)
Or if you want to change all instances of 0x600000006000000060000000 within the given memory range to 0x386000014E80002060000000 then this could be used:
searchandpoke(60000000 60000000 60000000, 80000000, 81800000, 0, 38600001)
searchandpoke(38600001 60000000 60000000, 80000000, 81800000, 4, 4E800020)

[function] hook(<search values>)

Example:
hook(90010014 800305FC 2C000000 41820008)
This is equivalent to selecting the GXFlush hook (sorry, I don't feel like creating a new hook for this example).  Currently only hooks with exactly 4 32-bit search values will work with multidol games.  The minimum number of 32-bit values allowed is 3 and the maximum is 8.

[value] vidtv - Set to 0 to not apply VIDTV patch

Example:
vidtv = 0
Don't apply the VIDTV patch, which is usually applied by default.

[value] codeliststart - Specify code list start

Example:
codeliststart = 80345678
Loads the code list to address 80345678.

[value] codelistend - Specify code list end

Example:
codelistend = 80358900
Prevents the code list from writing over address 80358900 or any address after it.

[value] videomode
0 - No override
1 - Force NTSC
2 - Force PAL60
3 - Force PAL50

Example:
videomode = 2
This forces the video mode to PAL60.

[value] language
0 - Default
1 - Japanese
2 - English
3 - German
4 - French
5 - Spanish
6 - Italian
7 - Dutch
8 - S. Chinese
9 - T. Chinese
10 - Korean

Example:
language = 1
This forces the game language setting to Japanese.

[value] rebootermenuitem - Set to 0 to launch rebooter when B is pressed instead of having a "Launch Rebooter" menu item

Example:
rebootermenuitem = 0
Remove the "Launch Rebooter" menu item that is included by default and instead launch rebooter when B is pressed.

[value] startupios - Specify the IOS to switch to when starting Gecko OS.

Example:
startupios = 36
Always load IOS 36 when starting Gecko OS (the default unless IOS 36 does not support channel loading).

[value] switchios - Set to 0 to disable IOS switching for games, and just continue to use the startup IOS to boot the game

Example:
switchios = 0
Disable IOS switching, not recommended but sometimes it may help if you are having problems with a game not working currently.