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.
86 lines
3.1 KiB
86 lines
3.1 KiB
4 years ago
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|