public static void MakeAllDataLength(List <Address> list, List <DisassemblerTrumb.LDRPointer> ldrmap) { List <Address> procs = new List <Address>(); FindProc find = new FindProc(procs, ldrmap); list.AddRange(procs); //発見したProcsを追加. //Procsに付属するデータを発見する foreach (Address a in procs) { uint addr = a.Addr; uint end = addr + a.Length; for (; addr < end; addr += 8) { uint code = Program.ROM.u8(addr); if (ProcsScriptForm.hasASMRoutine(code)) {//呼び出しているASM関数 uint arg = Program.ROM.p32(addr + 4); if (arg != 0) { FEBuilderGBA.Address.AddFunction(list, addr + 4, GetProcsName(a) + " CallASM"); } } else if (code == 0x01) {//Set name FEBuilderGBA.Address.AddCString(list, addr + 4); } } } }
public static void MakeCheckError(List <FELint.ErrorSt> errors, List <DisassemblerTrumb.LDRPointer> ldrmap) { List <Address> procs = new List <Address>(); FindProc find = new FindProc(procs, ldrmap); //Procsに付属するデータを発見する foreach (Address a in procs) { uint addr = a.Addr; uint end = addr + a.Length; for (; addr < end; addr += 8) { uint code = Program.ROM.u8(addr); if (ProcsScriptForm.hasASMRoutine(code)) {//呼び出しているASM関数 uint arg = Program.ROM.u32(addr + 4); if (arg != 0) { FELint.CheckASMPointer(arg, errors, FELint.Type.PROCS, a.Addr, addr); } } else if (ProcsScriptForm.hasChildProcs(code)) {//子Procsの確認 uint arg = Program.ROM.u32(addr + 4); if (arg != 0) { FELint.CheckProcsPointer(arg, errors, FELint.Type.PROCS, a.Addr, addr); } } else if (code == 0x01) {//Set name uint name = Program.ROM.u32(addr + 4); FELint.CheckText(name, "PROCS", errors, FELint.Type.SOUNDROOM, a.Addr, addr); } } } }