From 84f14de487263946e0e302c4602dd3fbbe39eb15 Mon Sep 17 00:00:00 2001 From: Nabile Rahmani Date: Wed, 21 Nov 2018 16:05:28 +0100 Subject: [PATCH] Fixed ROM header fields, and added an option to display headers. MediaFormat values were guesses from various games (i.e. SM64 is a regular cartridge, OoT was to be expanded, and 64dd.org disk ID listings). --- DotN64.Desktop/Program.cs | 16 ++++++++++++++++ DotN64/Cartridge.MediaFormat.cs | 9 +++++---- DotN64/Cartridge.cs | 8 ++++---- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/DotN64.Desktop/Program.cs b/DotN64.Desktop/Program.cs index c07986d..e52ad80 100644 --- a/DotN64.Desktop/Program.cs +++ b/DotN64.Desktop/Program.cs @@ -104,9 +104,24 @@ namespace DotN64.Desktop break; case "windowed": case "w": + options.FullScreenVideo = false; break; } break; + case "--info": + var cartridge = LoadCartridge(args[++i]); + + Console.WriteLine($"Image name: {cartridge.ImageName}"); + Console.WriteLine($"ID: {cartridge.ID}"); + Console.WriteLine($"Version: {1.0f + (cartridge.Version & ((1 << 4) - 1) >> 4) + (cartridge.Version & ((1 << 4) - 1)) * 0.1f:0.0}"); + Console.WriteLine($"Media format: {cartridge.Format}"); + Console.WriteLine($"Country: {cartridge.Country}"); + Console.WriteLine($"Size: {cartridge.ROM.Length / (float)0x100000:0.##} MB"); + Console.WriteLine($"CRC: 0x{cartridge.CRC[0]:X8}, 0x{cartridge.CRC[1]:X8}"); + Console.WriteLine($"Boot address: 0x{cartridge.BootAddress:X8}"); + Console.WriteLine($"Clock rate: {cartridge.ClockRate}"); + Console.WriteLine($"Release: {cartridge.Release}"); + return; default: options.Cartridge = arg; break; @@ -223,6 +238,7 @@ namespace DotN64.Desktop Console.WriteLine("\t-h, --help: Shows this help."); Console.WriteLine("\t-v, --video x : Sets the window mode."); Console.WriteLine("\t--no-video: Disables the video output."); + Console.WriteLine("\t--info : Displays header information for a game."); } #endregion diff --git a/DotN64/Cartridge.MediaFormat.cs b/DotN64/Cartridge.MediaFormat.cs index 0e5d720..340128b 100644 --- a/DotN64/Cartridge.MediaFormat.cs +++ b/DotN64/Cartridge.MediaFormat.cs @@ -2,11 +2,12 @@ { public partial class Cartridge { - public enum MediaFormat + public enum MediaFormat : byte { - Cartridge = 'N', - Disk = 'D', - ExpandableCartridge = 'E' + ExpandableCartridge = (byte)'C', + Disk = (byte)'D', + ExpansionDisk = (byte)'E', + Cartridge = (byte)'N' } } } diff --git a/DotN64/Cartridge.cs b/DotN64/Cartridge.cs index 655fddd..9fa096d 100644 --- a/DotN64/Cartridge.cs +++ b/DotN64/Cartridge.cs @@ -17,9 +17,9 @@ namespace DotN64 public uint ClockRate => BitHelper.FromBigEndian(BitConverter.ToUInt32(ROM, 0x04)); - public uint BootAddressOffset => BitHelper.FromBigEndian(BitConverter.ToUInt32(ROM, 0x08)); + public uint BootAddress => BitHelper.FromBigEndian(BitConverter.ToUInt32(ROM, 0x08)); - public uint ReleaseOffset => BitHelper.FromBigEndian(BitConverter.ToUInt32(ROM, 0x0C)); + public uint Release => BitHelper.FromBigEndian(BitConverter.ToUInt32(ROM, 0x0C)); public uint[] CRC => new[] { @@ -29,9 +29,9 @@ namespace DotN64 public string ImageName => Encoding.ASCII.GetString(ROM, 0x20, 0x34 - 0x20); - public MediaFormat Format => (MediaFormat)BitHelper.FromBigEndian(BitConverter.ToUInt32(ROM, 0x38)); + public string ID => Encoding.ASCII.GetString(ROM, 0x3B, 4); - public ushort ID => BitHelper.FromBigEndian(BitConverter.ToUInt16(ROM, 0x3C)); + public MediaFormat Format => (MediaFormat)ROM[0x3B]; public CountryCode Country => (CountryCode)ROM[0x3E];