예제 #1
0
        private static DisassemblyTask New(List <JDmaData> dmadata, int index, OverlayRecord ovlInfo,
                                           OvlType nameClass)
        {
            string name = GetTaskName(dmadata, index, ovlInfo, nameClass);

            DisassemblyTask task = new DisassemblyTask()
            {
                Name = name,
                VRam = ovlInfo.VRam,
                VRom = ovlInfo.VRom,
            };

            task.PreparseActions.Add(input => {
                OverlayPreprocess(task, input, ovlInfo);
            });
            return(task);
        }
예제 #2
0
        private static DisassemblyTask New(List <JOcaBase.JDmaData> dmadata, Rom rom, int index,
                                           OverlayRecord ovlInfo, OvlType nameClass)
        {
            RomFile      file; //what we're going to disassemble
            BinaryReader FileReader;
            ActorInit    actorInfo = new ActorInit();

            var    overlay   = new Overlay();
            var    dmaRecord = dmadata.SingleOrDefault(x => x.VRomStart == ovlInfo.VRom.Start && ovlInfo.VRom.Start != 0);
            string name      = (dmaRecord != null)? dmaRecord.Filename : $"{nameClass}_{index:X4}";

            if (ovlInfo.VRom.Size != 0)
            {
                file       = rom.Files.GetFile(ovlInfo.VRom);
                FileReader = new BinaryReader(file);
                overlay    = new Overlay(FileReader);
            }

            DisassemblyTask task = new DisassemblyTask()
            {
                Name        = name,
                VRam        = ovlInfo.VRam,
                VRom        = ovlInfo.VRom,
                Relocations = overlay.Relocations
            };

            N64Ptr fstart = task.VRam.Start;

            Section text   = new Section("text", fstart, fstart, overlay.TextSize, 0, true);
            Section data   = new Section("data", fstart, text.VRam + text.Size, overlay.DataSize, 0);
            Section rodata = new Section("rodata", fstart, data.VRam + data.Size, overlay.RodataSize, 0);
            long    off    = ovlInfo.VRam.Start + ovlInfo.VRom.Size;
            Section bss    = new Section("bss", fstart, off, overlay.BssSize, 0);

            task.Sections.Values.Add(text);
            task.Sections.Values.Add(data);
            task.Sections.Values.Add(rodata);
            task.Sections.Values.Add(bss);
            return(task);
        }
예제 #3
0
        private static string GetTaskName(List <JDmaData> dmadata, int index, OverlayRecord ovlInfo, OvlType nameClass)
        {
            var    dmaRecord = dmadata.SingleOrDefault(x => x.VRomStart == ovlInfo.VRom.Start && ovlInfo.VRom.Start != 0);
            string name      = (dmaRecord != null) ? dmaRecord.Filename : $"{nameClass}_{index:X4}";

            return(name);
        }