/// <summary>
            /// Converts a ROM file to a headerless, de-interleaved ROM image if it is not already. The returned
            /// array will be the orginial byte array if unmodified, otherwise a new byte array will be
            /// created to hold the ROM image.
            /// </summary>
            /// <param name="rom">ROM file to get the ROM image for</param>
            /// <returns>The returned
            /// array will be the orginial byte array if unmodified, otherwise a new byte array will be
            /// created to hold the ROM image.</returns>
            public static byte[] GetBinFormat(byte[] rom)
            {
                // Todo: move this function to ConsoleTools.Gen

                bool eHeader, iHeader, interleaved, s32X;

                iHeader = Gen.HasInternalHeader(rom, out interleaved, out eHeader, out s32X);

                byte[] romImage = rom;

                // Remove external header, if present
                if (eHeader)
                {
                    romImage = new byte[rom.Length - Gen.ExternalHeaderSize];
                    Array.Copy(rom, Gen.ExternalHeaderSize, romImage, 0, rom.Length - Gen.ExternalHeaderSize);
                }

                // De-interleave ROM, if necessary
                if (interleaved)
                {
                    // Make sure we aren't modifying the ROM passed in as a parameter
                    bool recycleRomImageBuffer = (rom != romImage);

                    romImage = Gen.DeInterleaveRom(romImage, false, recycleRomImageBuffer);
                }
                return(romImage);
            }