using System; using System.IO; namespace DMGHeader { internal static class Program { internal static void DumpHeader(DmgHeader header) { Console.Write("Entry Point: "); if(header.EntryPoint.Jump == JumpType.None) { Console.WriteLine("No jump found."); } else { var jumpType = header.EntryPoint.Jump == JumpType.Absolute ? "Absolute" : "Relative"; Console.WriteLine($"{jumpType} jump to ROM position 0x{header.EntryPoint.JumpAddress:X4}"); } Console.WriteLine($"Logo Check: {(header.ValidLogo ? "PASSED" : "FAILED")}"); Console.WriteLine($"Title/Manufacturer Code: {header.Title}"); Console.Write("CGB Mode: "); switch(header.CgbMode) { case CgbMode.Disabled: Console.WriteLine("Disabled"); break; case CgbMode.PaletteOnly: Console.WriteLine("Palette Only"); break; case CgbMode.Enhanced: Console.WriteLine("Enhanced"); break; case CgbMode.Required: Console.WriteLine("Required"); break; default: Console.WriteLine("Unknown"); break; } Console.WriteLine($"SGB: {(header.SgbSupport ? "Supported" : "Not Supported")}"); Console.WriteLine($"Cartridge Type: {header.CartridgeType}"); Console.WriteLine($"ROM Size: {header.RomSize}"); Console.WriteLine($"Cartridge RAM Size: {header.ExternalRamSize}"); Console.Write("Destination Code: "); switch(header.DestinationCode) { case DestinationCode.Japanese: Console.WriteLine("Japanese"); break; case DestinationCode.NonJapanese: Console.WriteLine("Non-Japanese"); break; case DestinationCode.Unknown: Console.WriteLine("Unknown/Invalid Code"); break; default: Console.WriteLine("-- INVALID ENUM VALUE -- "); break; } Console.WriteLine($"Mask ROM Version: 0x{header.MaskRomVersion:X2}"); Console.WriteLine($"Header Checksum: 0x{header.HeaderChecksum:X2}"); Console.WriteLine($"Header Checksum Status: {(header.ValidHeaderChecksum ? "VALID" : "NOT VALID")}"); Console.WriteLine($"Cartridge Checksum: 0x{header.CartridgeChecksum:X4}"); Console.WriteLine(); } private static int Main(string[] args) { if(args.Length == 0) { Console.WriteLine("usage: DMGHeader [filename]"); return 0; } var filename = args[0]; if(!File.Exists(filename)) { Console.WriteLine("File not found!"); return 1; } var header = new DmgHeader(filename); DumpHeader(header); return 0; } } }