xboxscene.org forums
OG Xbox Forums => Software Forums => Development => Topic started by: PHloGiSTo on December 04, 2002, 08:22:00 PM
-
I have spent some time working with the XBOX File System format with the intention of releasing a new program to allow the PROPER creation of xbox images. However, due to unforseen circumstances i am unable to dedicate the amount of time needed to complete my task. Therefore, i am providing the information below which i hope someone will find useful for the creation of properly created (and optimized) ISO images.
As you know, some people are complaining about dirty disc errors, which mysteriously vanish when the image is compiled as a UDF image. Clearly this should NOT be the case, since the xbox file system was designed and optimized specifically for xbox games.
Since most homebrew ISO programs are based on the SDK GDImage program they all contain the errors inherent in the GDImage.exe (that program wasnt designed for ISO mastering and does not create proper images intended for distribution).
PROBLEM 1: Linked Lists in directories. The entries for a given directory are contained in a Binary Tree structure, with the left and right indexes pointing to the next entry in the directory. Under ideal circumstances this is a VERY efficient method for locating files. Under the WORST case scenario the Binary Tree degenerates into a Linked List.
E.G. given a directory of 2000 entries, a Linked List will require 2000 comparisons before finding the last file in the directory, with a balanced Binary Tree, this search is reduced to a mere 11 comparisons. Since adding files to a directory in Alphabetical order results in Linked Lists, a Binary Tree balancing routine is needed to create properly balanced AVL trees.
PROBLEM 2: Improper Directory Size. The size of a directory (indicated in the Entry Structure) should be the total size of the its entries, not the size of the sector required to contain them all. This doesnt appear to be a serious error but it doesnt follow the spec completely -- This problem doesnt exist on all ISO makers namely XISO v1.05 is guilty of this).
PROBLEM 3: Inner to Outer file order. File access times are reduced for the outer section of a DVD (or CD) therefore, by pushing the data to the outer edge of the disc, the load times can be reduced. The only program that i am aware of that allows for this Outer-to-Inner image creation is the XBLayout.exe included with the SDK. unfortunately it has other disadvantages that makes it unuseable for the homebrew scene (namely: 3.4GB image size and reservation for Security Sectors)
PROBLEM 4: File organization. MS recommends large files, particularly video files, to be placed at the outer edge of the disc, a file organization method needs to be implemented to allow for the organization of files on the disc in a particular order. A graphical interface for organizing the files would be great (similar to XBLayout.exe) but the ability to save and load the optmization file list would be essential.
Some suggested optimizations for xbox iso creation:
1. allow the user to specify the desired image size --defaulting to either 4,700,000,000 bytes or 700,000,000 bytes depending on the total size of files in project.
2. ability to load up an unoptimized ISO and create a new iso with the above optimizations (without first needing to extract all the files from the original ISO)
3. since 300+ images are currently floating around without any optimized file organization, it would be silly to repackage those images and rerelease them, instead if an optimization file was distributed it could be used to recreate a new image. A suggestion for implementing this follows:
TheImage.XFO file is a simple text file with each line listing the order of the files in the image
'*' starts a comment
'|' could be used to link entries to the SAME data (to help the RIPPING groups reduce the size of images)
So an example XFO file would look like this:
* XFSISO v0.5 ALPHA <-- name of program used to create the XFO file
* The Game Name <-- name of the game this optimization file is for
\default.xbe * 4,000,123
\data\movie1.bik * 900,000
\data\movie2.bik | \data\movie1.bik * 900,000 \fonts\abc.tga * 72,039
The file would be used to create an image with all diretories at the outermost edge
then Default.xbe
followed by movie1.bik
movie2.bik actually is a crosslinked file pointing to the data contained in movie1.bik
and finally abc.tga
the rest of the image would contain '0' dummy space.
I hope you find this information useful.
PHloGiSTo