NeoGF/gcmtool
2022-08-23 08:02:28 +02:00
..
gcmtest.py Update gcmtest.py 2022-08-14 22:50:22 +02:00
gcmtool.py Update gcmtool.py 2022-08-23 08:02:28 +02:00
README.md Update README.md 2022-08-20 14:17:18 +02:00

gcmtool.py

Python3 script for unpack/pack/rebuild GCM/iso file format. This tool can rebuild FileStringTable (FST) of GCM and patch boot.bin with a new apploader.img, boot.dol, add/remove/edit folder and files of the game. MIT License.

User manual

Unpack GCM/iso file source_gcm.iso in the default new folder game_code-DVD_number. If optional_dest_folder is specified we unpack in optional_dest_folder.

gcmtool.py --unpack source_gcm.iso optional_dest_folder

Pack source_folder in the default new GCM/iso file source_folder.iso. If optional_dest_file.iso is specified we pack in optional_dest_file.iso. If one of the files or system files contains length change we have to use --rebuild-fst command before packing. If the dol is duplicated in the FST use --disable-ignore to allow shared dol space. If conf is enabled it will have priority on system values.

gcmtool.py --pack source_folder optional_dest_file.iso

Rebuild the FST file system of an unpacked GCM/iso and patch boot.bin for a new apploader, dol, and add/remove/edit of folders and files. If conf is enabled it will have priority on system values.

gcmtool.py --rebuild-fst source_folder

Print stats about the GCM/iso file or the unpacked GCM/iso folder. This stats contains informations about full memory mapping sorted by offset (files and system files), get empty spaces informations using optional align -a (default=4) and all conf values.

gcmtool.py --stats path -a 4 

Unpack and rebuild the FST of the unpacked folder.

gcmtool.py -ur source_gcm.iso optional_dest_folder

Rebuild the FST of the unpacked folder and pack.

gcmtool.py -rp source_folder optional_dest_file.iso

Japanese charset is not handled for now except if you have installed Japanese local.

The original GCM/iso and repack GCM/iso are different most of the time. This is because GCM DVD contains "empty spaces" with data unused (old datas or random datas I don't know). So this datas are useless and loss during unpack.

The sorting of files during FST rebuild is deferent from the original and this is full compatible with the GameCube dol API.

Extracted file tree

root folder contains all files of the unpacked GCM/iso

sys folder contains GCM system files of the game:

  • boot.bin
  • bi2.bin
  • apploader.img
  • boot.dol
  • fst.bin
  • system.conf

sys/sytem.conf

The conf file system.conf allow to force somes values and patch sys/files and also new generated iso. The conf file is parsed and applied with --pack and --rebuild-fst.

[Default]

  • boot.bin_section = disabled / enabled # If enabled then boot.bin section will be applied.
  • bi2.bin_section = disabled / enabled # If enabled then bi2.bin section will be applied.
  • apploader.img_section = disabled / enabled # If enabled then apploader.img section will be applied.

[boot.bin]

  • GameCode = GG4P # 4 bytes ascii value - A-Za-z0-9
  • MakerCode = 08 # 2 bytes ascii value - A-Za-z0-9
  • DiskNumber = 0 # Disk number information for multiple disks. The number starts from 0. 0-98
  • GameVersion = 0 # The version number of the video game. 0-99
  • AudioStreaming = 1 # The flag for the streaming mode. 1 for streaming mode, otherwise 0.
  • StreamBufferSize = 0 # Number of Streaming buffers. 0-15
  • DVDMagic = 0xc2339f3d
  • GameName = GotchaForceEur # The character string of the video game title (Kanji characters are available.). 64 bytes max.
  • DolOffset = auto # Hex value: 0xabcdef or auto: dol offset on the DVD.
  • FstOffset = auto # Hex value: 0xabcdef or auto: fst offset on the DVD.
  • FstLen = auto # Hex value: 0xabcdef or auto: fst length.
  • FstMaxLen = auto # Hex value: 0xabcdef or auto: the size of the area reserved for FST. Used when there is multiple FST to load (multiple DVD).
  • UserPosition = auto # Hex value: 0xabcdef or auto: start of files stored in the gcm.
  • UserLength = auto # Hex value: 0xabcdef or auto: length of files stored in the gcm.

[bi2.bin]

  • DebugMonitorSize = 0x0 # Hex value: 0xabcdef aligned to 32 bytes.
  • SimulatedMemorySize = 0x1800000 # Hex value: 0xabcdef aligned to 32 bytes.
  • ArgumentOffset = 0x0 # Hex value: 0xabcdef
  • DebugFlag = 0 # Numeric value: 123. Following values could change.
    • 0,1,5,6,7: normal boot
    • 2: Devkit set to : 0, MetroTRK : Set to AMC DDH hardware
    • 3: Devkit set to : 1, MetroTRK : Set to GDEV hardware
    • 4: Devkit set to : 2, MetroTRK : Set to BBA
  • TrackLocation = 0x0 # Hex value: 0xabcdef
  • TrackSize = 0x0 # Hex value: 0xabcdef
  • CountryCode = 2 # Numeric value: 123 - Japan=0, USA=1, PAL=2, SouthKorea=4
  • TotalDisk = 1 # Numeric value: 1-99
  • LongFileNameSupport = 1 # Numeric value. Set to 1 for long file name support; set to 0 to restrict file to 8.3 format.
  • DolLimit = 0x0 # Hex value: 0xabcdef

[apploader.img]

  • Version = 2003/04/17 # 16 bytes ascii
  • EntryPoint = 0x81200258 # Hex value: 0xabcdef
  • Size = 0x1954 # Hex value: 0xabcdef
  • TrailerSize = 0x1b8b0 # Hex value: 0xabcdef