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); }
public frmEditHeader() { InitializeComponent(); this.hexBox.Font = new Font(BaseControl.MonospaceFontFamily, 10, FontStyle.Regular); NesHeader header = NesHeader.FromBytes(InteropEmu.DebugGetNesHeader()); Entity = header; AddBinding("MapperId", txtMapperId, eNumberFormat.Decimal); AddBinding("SubmapperId", txtSubmapperId, eNumberFormat.Decimal); AddBinding("Mirroring", cboMirroringType); AddBinding("System", cboSystem); AddBinding("VsPpu", cboVsPpuType); AddBinding("HasBattery", chkBattery); AddBinding("HasTrainer", chkTrainer); AddBinding("PrgRom", txtPrgRomSize, eNumberFormat.Decimal); AddBinding("ChrRom", txtChrRomSize, eNumberFormat.Decimal); AddBinding("WorkRam", cboWorkRam); AddBinding("SaveRam", cboSaveRam); AddBinding("ChrRam", cboChrRam); AddBinding("ChrRamBattery", cboChrRamBattery); AddBinding("IsNes20", radNes2, radiNes); UpdateUI(); UpdateVsDropdown(); }
public frmEditHeader() { InitializeComponent(); this.hexBox.Font = new Font(BaseControl.MonospaceFontFamily, 10, FontStyle.Regular); NesHeader header = NesHeader.FromBytes(InteropEmu.DebugGetNesHeader()); Entity = header; AddBinding("MapperId", txtMapperId, eNumberFormat.Decimal); AddBinding("SubmapperId", txtSubmapperId, eNumberFormat.Decimal); AddBinding("Mirroring", cboMirroringType); AddBinding("Timing", cboFrameTiming); AddBinding("System", cboSystem); AddBinding("VsPpu", cboVsPpuType); AddBinding("VsSystem", cboVsSystemType); AddBinding("InputType", cboInputType); AddBinding("HasBattery", chkBattery); AddBinding("HasTrainer", chkTrainer); AddBinding("PrgRom", txtPrgRomSize, eNumberFormat.Decimal); AddBinding("ChrRom", txtChrRomSize, eNumberFormat.Decimal); AddBinding("WorkRam", cboWorkRam); AddBinding("SaveRam", cboSaveRam); AddBinding("ChrRam", cboChrRam); AddBinding("ChrRamBattery", cboChrRamBattery); AddBinding("IsNes20", radNes2, radiNes); UpdateUI(); UpdateVsDropdown(); _validSizeValues = new Dictionary <UInt64, int>(); for (int i = 0; i < 256; i++) { int multiplier = (i & 0x03) * 2 + 1; UInt64 value = ((UInt64)1 << (i >> 2)) / 1024; _validSizeValues[(UInt64)multiplier * value] = i; } }
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); }
protected override bool ValidateInput() { UpdateObject(); NesHeader header = Entity as NesHeader; if ((header.PrgRom % 16) != 0) { lblError.Text = "Error: PRG ROM size must be a multiple of 16 KB"; lblError.Visible = true; return(false); } if ((header.ChrRom % 8) != 0) { lblError.Text = "Error: CHR ROM size must be a multiple of 8 KB"; lblError.Visible = true; return(false); } if (header.IsNes20) { if (header.MapperId >= 4096) { lblError.Text = "Error: Mapper ID must be lower than 4096"; lblError.Visible = true; return(false); } if (header.SubmapperId >= 16) { lblError.Text = "Error: Submapper ID must be lower than 16"; lblError.Visible = true; return(false); } if (header.ChrRom >= 32768) { lblError.Text = "Error: CHR ROM size must be lower than 32768 KB"; lblError.Visible = true; return(false); } if (header.PrgRom >= 65536) { lblError.Text = "Error: PRG ROM size must be lower than 65536 KB"; lblError.Visible = true; return(false); } } else { if (header.MapperId >= 256) { lblError.Text = "Error: Mapper ID must be lower than 256 "; lblError.Visible = true; return(false); } if (header.ChrRom >= 2048) { lblError.Text = "Error: CHR ROM size must be lower than 2048 KB"; lblError.Visible = true; return(false); } if (header.PrgRom >= 4096) { lblError.Text = "Error: PRG ROM size must be lower than 4096 KB"; lblError.Visible = true; return(false); } } lblError.Visible = false; hexBox.ByteProvider = new StaticByteProvider(header.ToBytes()); return(base.ValidateInput()); }