Displays most of the header data of GameBoy ROM dumps.
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

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;
}
}
}