You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.1 KiB
85 lines
3.1 KiB
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; |
|
} |
|
} |
|
}
|
|
|