GameCube:GameCube Memory Manager

GCMM is a GameCube Memory Card Manager.

GameCube/Wii Memory Manager is an application to backup Nintendo GameCube savegames.

GCMM is a project started by dsbomb and justb, which is based on Askot's modification to add SD support to the mcbackup libogc example.

Suloku has updated the code to newest libraries to port it to the Wii system, and what I find more important: restoring savegames now works properly.

Features

 * Backups and restores savegames into GCI format
 * Restores savegames in GCS/SAV format
 * Deletes savegames from memory card
 * Backups memory card raw images in .raw format
 * Restores memory card raw images from RAW/GCP/MCI format
 * Format the memory card
 * Wiimote and GameCube controller support
 * Power button support
 * Front SD, FAT32 USB device (wii), SDGecko (wii/gamecube), SD2SP2 and GCLoader (gamecube) support
 * Shows savegame information, alongside animated Icon and Banner!
 * A (somewhat) nice UI
 * Open Source!

Changelog
1.5.1 - November 19, 2021
 * Fixed exit/reboot secuence (finally)
 * Several card fixes thanks to Extrems and libogc2!
 * SD2SP2 fix
 * Changed to libogc2 to fix bug in sd2sp2 mounting when it has already been mounted once (even on another dol file) without rebooting. (will still compile with libogc)
 * Using custom card.c and card.h (again) since libogc2 is missing some functions
 * Added device selector. Press 1/R button to access it.
 * Devices can be swapped without rebooting GCMM now. When running device selector follow on screen instructions to know when you can safely insert/remove a device.
 * SDGecko support for Wii mode.
 * GCLoader support for Gamecube mode.
 * Show current device (wiisd/wiiusb/sdgecko/sd2sp2/gcloader/no device) in main screen.
 * Support for command line paramenters in both wii and gamecube (use Swiis cli files for gamecube). Read more in cli_readme.txt. Pre-made cli files are included.
 * WII/GC: added Dark mode theme (as a separate dol file).
 * Background is changed depending on fat device being used (gamecube)

1.5.1 - October 10, 2021
 * Merged DacoTaco's changes to make GCMM compatible with libogc 2.3.1, not needing to have a local copy of card.c/h
 * RAW read/restore functions use a lot less memory (lead to problems in recent builds with 2048 block memory card)
 * Reworked raw restore/read functions (they hopefully work correctly now for all memory cards)
 * Fixed bug in libogc's card.c preventing to correctly write from block 1024 onwards in 2048 block cards (right now needs modified libogc to compile and work, since we aren't using our own card.c/h anymore).

1.5 - April 21, 2021
 * Merged carstene1ns changes to compile with latest libraries
 * Adopted libogc's latest changes to card.c, no longer needs system.h. Thanks tueidj for your patches all these years!
 * Fixed bug in card.c which prevented some saves sharing filename characters not being restored (paper mario)
 * Improved SD2SP2 boot sequence:
 * By default SD2SP2 will be used. If there is none GCMM will ask for SD Gecko location (slot A or B)
 * Holding A or Z while booting will prompt if you want to use SD2SP2 or SD Gecko. If SD Gecko is selected then it's slot can be selected.
 * Fixed GC rebooting:
 * Gamecube mode exit secuence:
 * 1.- If there is a reboot stub (PSOLOAD/SDLOADER), GCMM will return to it
 * 2.- If not, GCMM will try to load autoexec.dol in fat device used in GCMM
 * 3.- If not, restart.
 * Note: When using SDLOADER it is recommended to run Swiss, as returning to SDLOADER will break it (selection bar will be red) and dol loading will not work. It is adviced to have an autoexec.dol available (swiss recommended). This happens in Wii's gamecube mode, I don't know if gamecube has the same behavior.

1.4g - January 03, 2020
 * Added SD2SP2 support ("released" as beta, no official release made)

1.4f - April 5, 2017
 * dragonbane0 made a mod of version 1.4c with folder selection and alphabetical sorting. Zephiles pointed this out and the changes have been merged with some little extra tweaks. Thanks you both!

1.4e - February 27, 2016
 * Fixed bug in card.c that prevented correct backup/write of saves with same filename but different case. Bug affected Timesplitters 2, probably Timesplitters 3 too. Thanks to DakuTree for reporting and Antidote for fixing.

1.4d - August 8, 2015
 * Fixed bug in card.c that prevented writing to the last block of the memory card, preventing restoring a savegame that would fill the memory card (thanks to undergroundmonorail)
 * Fixed bug in card.c that prevented correct block freeing when deleting a file and only was fixed by using the memory card on official software (the wii/gamecube save manager or probably also games)
 * Added libogc fix for a bug in card.c (the bug didn't affect GCMM, it was fixed in 1.4b, but I didn't change card.c)
 * Changed button presses for single savegame delete to prevent unvoluntary savegame deleting

1.4c - January 5, 2014
 * Disabled __sector_erase check when raw restoring as some unofficial cards seem to have problems with it.

1.4b - September 3, 2013
 * Card initialization was wrong all the way, wich lead to savegames of the same game of different region or those that shared similar filenames (Twilight Princess and WindWaker) to not work properly. Thanks to antidote.crk for noticing. (read considerations sections for more info)
 * Added version display

1.4a - February 15, 2013
 * Fixed SD Gecko when inserted/swapped at slot selection screen in GameCube mode.
 * FLash ID display was missing a byte
 * Changed some text that may confuse the user
 * Made font sizes more coherent

1.4 - October 8, 2012
 * Animated icon alongside several (minor) graphical improvements
 * Ability to select SD Gecko slot in GameCube mode (just like Wii mode SD/USB prompt)
 * Moved "Backup All" to Backup Mode (press R/1 when in Backup Mode)
 * Added an analog "Restore All" in Restore Mode (overwriting is supported)
 * Shows filename when prompted to overwrite (also in "Restore All")
 * Savegame permisions are shown in a more explicit and user friendly way
 * Shows memory card freeblocks
 * Page number display in file selector
 * Left and right now scroll 5 file entries at once
 * Scrolling of file entries can be done holding the button (up/down/left/right)
 * Added security checks to Raw Restore Mode
 * Added some special characters to the font (needed for savegame comments)
 * Minor code tweaks
 * Lots of thanks to bm123456 and themanuel for beta testing and support!

1.3 - September 14, 2012
 * Shows card/image serial number in Raw Restore Mode
 * F-zero and Phantasy Star Online Ep I&II and Phantasy Star Online III savegames are patched uppon restoring so they will work on target card (by Ralf)
 * Lot's of thanks to Ralf at gscentral.org forums

1.2d - September 8, 2012
 * Previous version couldn't raw backup if backup folder didn't exist in sd/usb
 * Added (double)overwrite prompt when restoring a savefile to memory card (Nano/Excelsiior's idea)
 * Updated graphics so raw mode commands are less cryptic (wii mode design based on JoostinOnline's for GCMM+)
 * Use DejavuSans as font (much better readability) from GCMM+ by Nano/Excelsiior

1.2c - September 6, 2012
 * Raw backups are now named with the number of blocks: insted of Backup_*timestamp*.raw now it is 0059b_*timestamp.raw, 2043b_*timestamp.raw...
 * Minor code changes (just for safety)

1.2b - September 6, 2012
 * Solved a potential bug, 1.2 and 1.2a seemed unaffected by it.

1.2a - September 06, 2012
 * 1.2 wasn't correctly freeing memory and eventually raw backup and restore would hang the app (a 2043 block card would make it hang at the second attempt to raw backup the card)

1.2 - September 06, 2012
 * Added raw backup mode (in .raw format, compatible with dolphin and devolution)
 * Added RAW/GCP/MCI support for raw restore mode
 * Added format mode
 * Flash ID of inserted card and SD image are shown in Raw Restore Mode
 * Protection against writing a raw image to the wrong card (trough Flash ID checking)
 * Raw mode works with official and unofficial cards, as well as gci mode (thanks to tueidj for pointing me in the right path!)

1.1 - August 29, 2012
 * Icon and banner by dronesplitter!
 * Added USB-SD selection in wiimode (only at boot)
 * Added card slot selection (wii mode only)
 * Propper GCI backup and restore. Now GCMM uses __card_getstatusex and __card_setstatuex, which provide a more 1:1 backup/restore
 * Correctly displaying savegame Date information
 * Savegame information rearranged.
 * Accepted PlabloACZ and Picachu025 modifications, with the following changes:
 * Tweaked mount function
 * Filenames are no longer prefixed with a number for current sesion. Instead, savegames are suffixed with a number. When backing up a savegame if the same file exists on SD it will be prefixed with a growing number (if savegame_00.gci exists, then it will try savegame_01.gci, savegame_02.gci... and so on)
 * Infinite loop can't happen when backupping a savegame as in r11 MOD 2.

r11 MOD 2 (Pikachu025) - September 11, 2011
 * R (GC-Pad) / 1 (Wiimote) now launches a "backup all" mode, where all saves on the memory card are written to the SD card without any user prompts in the meantime.
 * I came across a couple saves that had ridiculous filenames that refused to write to SD, so if the program comes across one of those, it'll now write them out as "illegal_name" instead of the actual filename.
 * Filenames written to SD are now prefixed with a number, counting up from 1 for every file written during the current session. I added this since I had multiple files that resulted in the same filename.
 * I also added a small check if the file was written correctly. If not, it'll retry. This probably results in an infinite loop when your SD card doesn't have enough free space, so ensure that I guess.
 * I also (quite shoddily) edited the image listing all the options to add the new option, it's ugly but does its job. Feel free to fix, I don't have Photoshop or anything here.

r11 MOD (PabloACZ) - September 09, 2011
 * SDGetFileList function in sdsupp.c updated to reflect the changes in DevKitPPC/libogc from the last three years (diropen, dirnext and dirclose commands were replaced with opendir, readdir and closedir, respectively).
 * Modified the MountCard function in mcard.c to perform a probe on the GC Memory Card slot, to make sure it was mounted properly.
 * Improved the compatibility with GCS/SAV files with the patch posted by jcwitzel in December 2009.
 * The Makefiles were modified to include the zlib in the libraries section. It seems that the latest libFreeType PPC port needs it to work.
 * **Hopefully** Added compatibility with Official GameCube Memory Cards (see this). According to a friend of mine, it works with a 256 blocks Memory Card.
 * Compiled with DevKitPPC r24, libogc 1.8.8, libfat 1.0.10 and libFreetype 2.4.2.

1.0 - December 31, 2008
 * Updated to libfat
 * Added Wii support
 * Fixed restore bug (yes, savegames will restore properly)
 * New background
 * Support for interlaced and widescreen in all regions
 * Delete mode (dsbomb&justb)
 * Shows the savegame information (mostly by dsbomb&justb)
 * Many other fixes/modifications for the user

To Do

 * SAMBA support for network mangement of savegames

Raw Images
A raw image is a 1:1 copy of the memory card. It can only be restored to the card it was made from. Note that unofficial cards share the same Flash ID, which allows restoring raw images between unofficial cards (as long as they have the same size).

These limitations can be solved with Raw Tools.

For example: You can grab a 59 block card raw image from an unofficial card and modify it so you can restore it to your 1019 blocks official card, mantaining the serial number of the card so your protected savegames still work.

note: as of GCMM 1.3 protected savegames can be restored to any card and they will work (thanks to Ralf!)

Protected Savegames
This is just for information, as since GCMM 1.3 even serial protected savegames (F-Zero and Phantasy Star Online) can be restored to any memory card.

There are two kinds of protected savegames:


 * Permision protected savegames: this savegames can't be moved/copied from the Gamecube/Wii memory card manager. These saves can be backed up and restored without problems by GCMM
 * List of known permision protected savegames: Medal of Honor: Frontline, Pokemon Coloseum, Pokemon XD, Fire Emblem.


 * Serial protected savegames: this savegames can't be moved/copied from the Gamecube/Wii memory card manager and will only work in the card they were backupped from. This protected savegames rely on the serial number that is given to the memory card when it is formated. That's why they won't work in other cards and why they won't work on the same card if it has been formatted.
 * List of known serial protected savegames: F-Zero GX, Phantasy Star Online Ep I&2, Pahtasy Star Online III

Restoring a raw image to a diferent card won't work, it has to be the same card (it will work even if the card was formatted). Please note that all unofficial cards share the same Flash ID (which is different from the serial number), allowing raw image restoring between unofficial cards (as long as they are the same size).

To be confirmed if some protected savegames also rely on the block number the savefile starts (or how many blocks where occupied before the savegame was created).

As of 1.1 restored savegames mantain the savegame's original permisions (they are reseted when game is saved again anyways)

Other Savegame Formats
There are computer programs that can transform other savegame formats into GCI (currently GCMM supports SAV and GCS restoring).

GCP/RAW format is a raw savegame image of the memory card. At the moment creating a raw image is possible thanks to Masken, but there are still problems when restoring.

MCI format (createad by softdev's sdmc) is a raw image of the card (as GCP/RAW), preceded by a 64 byte header.

Considerations
Users:
 * If you extract a device (USB, internal SD, USB gecko), it won't work againt. If you did so, reboot the GCMM. On the contrary
 * Memory cards can be extracted/inserted at will at the main menu screen. It is not recommended to change the card in any other screen.
 * Dolphin (wii/gc computer emulator) has a nice memory card manager, check it out!

About USB devices:
 * Two of my USB devices won't work with GCMM, but those same devices make The Homebrew Channel crash. If you have problems try another usb device or an SD card.

Developers:


 * LibOGC card functions works with time functions that use Epoch (seconds since jan 1, 1970) as reference, while GameCube works with seconds since jan 1, 2000). The difference is 946684800 seconds
 * GCMM is compatible with libogc thanks to DacoTaco, but currently uses libogc2 with custom card.c (essentially libogc2's card.c with some modifications) due to libogc2 having support for sd2sp2 and gcloader, as well as many bugfixes. If changes are applied to libogc GCMM will be able to properly use it again.
 * Very good sources of documentation are libogc and dolphin's source code.
 * Card_Init shall be called only once. Any subsequent call will be pointless; to change the company and gamecode one should use Card_setgamecode and Card_setcompany libogc functions.

Setup and Installation
Unzip the archive. You will find the following folders inside:

After boot, GCMM will check which devices are available. If only one device is available, GCMM will use it as default. If more than a single device is available GCMM will boot into the device selector screen. You may skip device selector screen at boot using command line arguments (check cli files for gamecube mode).
 * apps : Contains Homebrew Channel ready files, both for normal and dark themed GCMM (see Homebrew Channel instructions below)
 * gamecube: 			Contains GameCube DOL file, both normal and dark themed (not required for Wii)
 * gamecube/cli files: Contains a set of cli files to use with swiss in gamecube mode. Read cli_readme.txt for mor information.

Available devices in order shown by GCMM. Please don't connect more than one USB device in Wii mode.

Wii Wii SD Wii USB Slot A SD Gecko Slot B SD Gecko

Gamecube SD2SP2 Slot A SD Gecko Slot B SD Gecko GC Loader

When not using an SD Gecko adapter, you will be able to select a memory card slot to use.

The savegames are read and stored to the following dir: sd:/MCBACKUP/

Wii - Via HBC
The most popular method of running homebrew on the Wii is through the HBC. If you already have the channel installed, just copy over the apps folder included in the archive into the root of your SD card.

If you haven't installed the Homebrew Channel yet, read about how to here.

Gamecube
You can load gcmm via sdload and an SD card in slot A, or by streaming it to your Gamecube, or by booting a bootable DVD with gcmm on it. You may also use any of the more recent game exploits. A good source for information on these topics is at http://www.gc-forever.com/wiki/index.php?title=Booting_Homebrew

Controls
They are shown at the screen.

Raw Mode Controls
Hold L (gamecube pad) or B (wiimote) then press the corresponding button
 * Raw Backup Mode: GC_pad L+Y, Wiimote B+Minus
 * Raw Restore Mode: GC_pad L+X, Wiimote B+Plus
 * Format Card Mode: GC_pad L+Z, Wiimote B+2

Compiling From Source
Currently gcmm uses: - Read more about installing portlibs: https://devkitpro.org/wiki/devkitPro_pacman
 * DevkitPPC as installed by devkitPro Updater 3.0.3 as of November 19th 2021: https://github.com/devkitPro/installer/releases
 * libOGC2 (updated libogc by Extrems) as of November 19th 2021: https://github.com/extremscorner/libogc2/commit/6bce86690ca2b45557f14460122bc7d43c5ac547
 * libfat updated by Extrems as of November 19th 2021: http://sourceforge.net/projects/devkitpro/files/libfat/
 * libFreeType 2.4.2 port, currently installed via pacman and devkitpro toolchain: https://github.com/devkitPro/pacman-packages

Credits

 * SoftDev for his contributions to the GC/WII scene
 * Costis for helping with some doubts, he's allways there
 * Masken for his code on raw data reading/writing
 * Justb & dsbomb for originally creating gcmm
 * CowTRobo & Samsom for very useful old sources
 * Tantric for pointing out that official memory cards won't work on wii mode, which encouraged me to continue gcmm as all my previous efforts where in vane due to using an official card for the testing.
 * tueidj, for his patches and very useful information and support. Official memory cards work due to his work.
 * dronesplitter for banner and icon implementation
 * PlabloACZ and Picachu025 for updating the source on 2011 after I forgot about GCMM.
 * Nano(Excelsiior), for inspiring me to finally working again on GCMM
 * bm123456 and themanuel for beta testing and support
 * DacoTaco for libogc compatibility changes
 * Extrems for many libogc bugfixes, gcloader and sd2sp2 support in libogc, libfat updates and improvements
 * f3bandit for beta testing, specially gcloader support

Lots of thanks to everyone using GCMM!