static void DisassembleFile(DisassembleFileOptions opts) { TryDisassemble(opts, (v, p) => { return(GetDisassembleOverlayFilter(opts, v, p)); }); }
private static Func <DisassemblyTask, bool> GetDisassembleOverlayFilter(DisassembleFileOptions opts, RomVersion version, string path) { Func <DisassemblyTask, bool> filter = x => false; if (opts.FileStart != null) { if (int.TryParse(opts.FileStart, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int fileStart)) { filter = x => x.VRom.Start == fileStart; } else { Console.WriteLine($"invalid start address {opts.FileStart}"); return(null); } } else if (opts.File != null) { filter = x => x.Name == opts.File || x.Name == $"ovl_{opts.File}"; } else { Rom rom = Rom.New(path, version); OverlayRecord dlf_record; if (!int.TryParse(opts.ActorIndex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int actorIndex)) { Console.WriteLine($"actor index {actorIndex} is invalid"); return(null); } if (actorIndex == 0) { dlf_record = rom.Files.GetPlayPauseOverlayRecord(1); } else { dlf_record = rom.Files.GetActorOverlayRecord(actorIndex); if (dlf_record.VRom.Size == 0) { Console.WriteLine($"actor 0x{opts.ActorIndex:X4} does not have an overlay file"); return(null); } } filter = x => x.VRom.Start == dlf_record.VRom.Start; } return(filter); }