コード例 #1
0
ファイル: frmEditHeader.cs プロジェクト: skystare/Mesen
            public static NesHeader FromBytes(byte[] bytes)
            {
                BinaryHeader binHeader = new BinaryHeader(bytes);

                NesHeader header = new NesHeader();

                header.IsNes20    = binHeader.GetRomHeaderVersion() == RomHeaderVersion.Nes2_0;
                header.PrgRom     = (uint)(binHeader.GetPrgSize());
                header.ChrRom     = (uint)(binHeader.GetChrSize());
                header.HasTrainer = binHeader.HasTrainer();
                header.HasBattery = binHeader.HasBattery();

                header.System = binHeader.GetTvSystem();
                header.Timing = binHeader.GetFrameTiming();

                header.Mirroring     = binHeader.GetMirroringType();
                header.MapperId      = (uint)binHeader.GetMapperID();
                header.SubmapperId   = (uint)binHeader.GetSubMapper();
                header.WorkRam       = (MemorySizes)binHeader.GetWorkRamSize();
                header.SaveRam       = (MemorySizes)binHeader.GetSaveRamSize();
                header.ChrRam        = (MemorySizes)binHeader.GetChrRamSize();
                header.ChrRamBattery = (MemorySizes)binHeader.GetSaveChrRamSize();
                header.InputType     = binHeader.GetInputType();
                header.VsPpu         = (VsPpuType)bytes[13];
                header.VsSystem      = binHeader.GetVsSystemType();

                return(header);
            }
コード例 #2
0
        public BinaryHeader ReadHeader()
        {
            var header = new BinaryHeader();

            // Check if the stream isn't too small to be a proper file
            if (mReader.BaseStreamLength < BinaryHeader.SIZE)
            {
                throw new InvalidDataException("Stream is too small to be valid");
            }

            header.FileType               = mReader.ReadByte();
            header.IsCompressed           = mReader.ReadByte() != 0;
            header.UserId                 = mReader.ReadInt16();
            header.FileSize               = mReader.ReadInt32();
            header.Magic                  = mReader.ReadBytes(4);
            header.Field0C                = mReader.ReadInt32();
            header.RelocationTable.Offset = mReader.ReadInt32();
            header.RelocationTableSize    = mReader.ReadInt32();
            header.DialogCount            = mReader.ReadInt32();
            header.IsRelocated            = mReader.ReadInt16() != 0;
            header.Field1E                = mReader.ReadInt16();

            // swap endianness
            if (header.Magic.SequenceEqual(BinaryHeader.MAGIC_V1) || header.Magic.SequenceEqual(BinaryHeader.MAGIC_V0))
            {
                if (mVersion.HasFlag(BinaryFormatVersion.BigEndian))
                {
                    SwapHeader(ref header);
                    mReader.Endianness = Endianness.LittleEndian;
                }

                mVersion = BinaryFormatVersion.Version1;
            }
            else if (header.Magic.SequenceEqual(BinaryHeader.MAGIC_V1_BE))
            {
                if (!mVersion.HasFlag(BinaryFormatVersion.BigEndian))
                {
                    SwapHeader(ref header);
                    mReader.Endianness = Endianness.BigEndian;
                }

                mVersion = BinaryFormatVersion.Version1BigEndian;
            }
            else
            {
                throw new InvalidDataException("Header magic value does not match");
            }

            if (header.RelocationTable.Offset != 0)
            {
                mReader.EnqueuePositionAndSeekBegin(mPositionBase + header.RelocationTable.Offset);
                header.RelocationTable.Value = mReader.ReadBytes(header.RelocationTableSize);
                mReader.SeekBeginToDequedPosition();
            }

            return(header);
        }
コード例 #3
0
 private void SwapHeader(ref BinaryHeader header)
 {
     EndiannessHelper.Swap(ref header.UserId);
     EndiannessHelper.Swap(ref header.FileSize);
     EndiannessHelper.Swap(ref header.Field0C);
     EndiannessHelper.Swap(ref header.RelocationTable.Offset);
     EndiannessHelper.Swap(ref header.RelocationTableSize);
     EndiannessHelper.Swap(ref header.DialogCount);
     EndiannessHelper.Swap(ref header.Field1E);
 }
コード例 #4
0
 private void WriteHeader(ref BinaryHeader header)
 {
     mWriter.Write(header.FileType);
     mWriter.Write(header.IsCompressed ? ( byte )1 : ( byte )0);
     mWriter.Write(header.UserId);
     mWriter.Write(header.FileSize);
     mWriter.Write(header.Magic);
     mWriter.Write(header.Field0C);
     mWriter.Write(header.RelocationTable.Offset);
     mWriter.Write(header.RelocationTableSize);
     mWriter.Write(header.DialogCount);
     mWriter.Write(header.IsRelocated ? ( short )1 : ( short )0);
     mWriter.Write(header.Field1E);
 }
コード例 #5
0
 private void WriteHeader(ref BinaryHeader header)
 {
     mWriter.Write(header.FileType);
     mWriter.Write(header.Format);
     mWriter.Write(header.UserId);
     mWriter.Write(header.FileSize);
     mWriter.Write(header.Magic);
     mWriter.Write(header.ExtSize);
     mWriter.Write(header.RelocationTable.Offset);
     mWriter.Write(header.RelocationTableSize);
     mWriter.Write(header.DialogCount);
     mWriter.Write(header.IsRelocated ? ( short )1 : ( short )0);
     mWriter.Write(header.Version);
 }
コード例 #6
0
ファイル: Shader.cs プロジェクト: Hiroky/CSharpRenderer
        /// <summary>
        /// 初期化
        /// </summary>
        /// <param name="data"></param>
        public void Initialize(byte[] data)
        {
            var device = GraphicsCore.D3D11Device;

            // byte配列からポインタを取得
            var          handle = GCHandle.Alloc(data, GCHandleType.Pinned);
            IntPtr       ptr    = handle.AddrOfPinnedObject();
            BinaryHeader header = (BinaryHeader)Marshal.PtrToStructure(ptr, typeof(BinaryHeader));
            IntPtr       vs_ptr = ptr + (int)header.vs_offset;
            IntPtr       ps_ptr = ptr + (int)header.ps_offset;

            name_     = "0x" + header.id.ToString("x8");
            shaderId_ = header.id;

            // 頂点シェーダ
            using (ShaderBytecode bytecode = new ShaderBytecode(new SlimDX.DataStream(vs_ptr, header.vs_size, true, false))) {
                vertexShader_ = new VertexShader(device, bytecode);
                using (ShaderReflection reflect = new ShaderReflection(bytecode)) {
                    // レイアウト生成
                    vertexAttr_ = reflect.GetVertexLayoutAttribute();
                    int layout_id = Shader.GetVertexLayoutID(vertexAttr_);
                    inputLayout_ = new InputLayout(device, bytecode, sLayoutList[layout_id]);

                    // コンスタントバッファ解決
                    ResolveConstantBuffer(reflect);
                }
            }

            // ピクセルシェーダ
            using (ShaderBytecode bytecode = new ShaderBytecode(new SlimDX.DataStream(ps_ptr, header.ps_size, true, false))) {
                pixelShader_ = new PixelShader(device, bytecode);
                using (ShaderReflection reflect = new ShaderReflection(bytecode)) {
                    // コンスタントバッファ解決
                    ResolveConstantBuffer(reflect);
                }
            }

            // ハンドル解放
            handle.Free();

            Initilaized = true;
        }
コード例 #7
0
ファイル: frmEditHeader.cs プロジェクト: zycanfly/Mesen
            public static NesHeader FromBytes(byte[] bytes)
            {
                BinaryHeader binHeader = new BinaryHeader(bytes);

                NesHeader header = new NesHeader();

                header.IsNes20    = binHeader.GetRomHeaderVersion() == RomHeaderVersion.Nes2_0;
                header.PrgRom     = (uint)(binHeader.GetPrgSize() * 16);
                header.ChrRom     = (uint)(binHeader.GetChrSize() * 8);
                header.HasTrainer = binHeader.HasTrainer();
                header.HasBattery = binHeader.HasBattery();
                if (binHeader.IsVsSystem())
                {
                    header.System = TvSystem.VsSystem;
                }
                else if (binHeader.IsPlaychoice())
                {
                    header.System = TvSystem.Playchoice;
                }
                else if (binHeader.IsPalRom())
                {
                    header.System = TvSystem.Pal;
                }
                else
                {
                    header.System = TvSystem.Ntsc;
                }

                header.Mirroring     = binHeader.GetMirroringType();
                header.MapperId      = (uint)binHeader.GetMapperID();
                header.SubmapperId   = (uint)binHeader.GetSubMapper();
                header.WorkRam       = (MemorySizes)binHeader.GetWorkRamSize();
                header.SaveRam       = (MemorySizes)binHeader.GetSaveRamSize();
                header.ChrRam        = (MemorySizes)binHeader.GetChrRamSize();
                header.ChrRamBattery = (MemorySizes)binHeader.GetSaveChrRamSize();
                header.VsPpu         = (VsPpuType)bytes[13];

                return(header);
            }