From e64adeff3e45eac9745815f08c2bb8b35658dd19 Mon Sep 17 00:00:00 2001 From: rozlette Date: Sun, 17 Nov 2019 17:48:25 -0600 Subject: [PATCH] Split .rodata --- codescript.txt | 84 ++++++++++++++++++++++++++++++++++++++++++++++ tables/objects.py | 85 +++++++++++++++++++++++++++++++++++++++++++++-- tools/disasm.py | 11 +++--- 3 files changed, 172 insertions(+), 8 deletions(-) diff --git a/codescript.txt b/codescript.txt index 786cb73aca..71fcadd3e5 100644 --- a/codescript.txt +++ b/codescript.txt @@ -214,6 +214,7 @@ SECTIONS build/asm/code_0x800BF9A0.o(.text) build/asm/z_bgcheck.o(.text) build/asm/code_0x800CAAD0.o(.text) + build/asm/code_0x800CAE10.o(.text) build/asm/z_camera.o(.text) build/src/code/code_0x800E03A0.o(.text) . += 0x10; /* XXX pad with NOPs*/ @@ -306,10 +307,13 @@ SECTIONS build/asm/speed_meter.o(.text) build/asm/sys_cmpdma.o(.text) build/asm/sys_initial_check.o(.text) + build/asm/code_0x80179300.o(.text) build/asm/code_0x801795F0.o(.text) + build/asm/code_0x8017FEB0.o(.text) build/asm/sys_matrix.o(.text) build/asm/code_0x80182CE0.o(.text) build/src/code/code_0x80183070.o(.text) + build/asm/code_0x801830A0.o(.text) build/asm/sys_flashrom.o(.text) build/asm/code_0x80185F90.o(.text) build/asm/code_0x801877D0.o(.text) @@ -328,6 +332,86 @@ SECTIONS build/asm/code_0x801AA020.o(.text) build/asm/code_0x801AA610.o(.text) build/asm/code_0x801AAAA0.o(.text) + + build/asm/code_data.o(.text) + + build/asm/code_rodata_z_en_item00.o(.text) + build/asm/code_rodata_z_eff_blure.o(.text) + build/asm/code_rodata_z_eff_shield_particle.o(.text) + build/asm/code_rodata_z_eff_spark.o(.text) + build/asm/code_rodata_z_eff_ss_dead.o(.text) + build/asm/code_rodata_0x800AF710.o(.text) + build/asm/code_rodata_z_effect_soft_sprite_old_init.o(.text) + build/asm/code_rodata_flg_set.o(.text) + build/asm/code_rodata_z_actor.o(.text) + build/asm/code_rodata_0x800BF9A0.o(.text) + build/asm/code_rodata_z_bgcheck.o(.text) + build/asm/code_rodata_0x800CAE10.o(.text) + build/asm/code_rodata_z_camera.o(.text) + build/asm/code_rodata_z_collision_check.o(.text) + build/asm/code_rodata_0x800E8EA0.o(.text) + build/asm/code_rodata_z_debug_mode.o(.text) + build/asm/code_rodata_z_draw.o(.text) + build/asm/code_rodata_z_eff_footmark.o(.text) + build/asm/code_rodata_0x800F1460.o(.text) + build/asm/code_rodata_z_fcurve_data_skelanime.o(.text) + build/asm/code_rodata_z_fireobj.o(.text) + build/asm/code_rodata_z_horse.o(.text) + build/asm/code_rodata_z_jpeg.o(.text) + build/asm/code_rodata_z_kankyo.o(.text) + build/asm/code_rodata_z_lib.o(.text) + build/asm/code_rodata_z_lifemeter.o(.text) + build/asm/code_rodata_z_lights.o(.text) + build/asm/code_rodata_z_map_disp.o(.text) + build/asm/code_rodata_0x8010C230.o(.text) + build/asm/code_rodata_z_parameter.o(.text) + build/asm/code_rodata_z_player_lib.o(.text) + build/asm/code_rodata_0x8012A080.o(.text) + build/asm/code_rodata_z_room.o(.text) + build/asm/code_rodata_z_scene_proc.o(.text) + build/asm/code_rodata_z_scene_table.o(.text) + build/asm/code_rodata_z_skin.o(.text) + build/asm/code_rodata_0x80138BA0.o(.text) + build/asm/code_rodata_z_sub_s.o(.text) + build/asm/code_rodata_0x8013EC10.o(.text) + build/asm/code_rodata_z_view.o(.text) + build/asm/code_rodata_z_vimode.o(.text) + build/asm/code_rodata_0x80140E80.o(.text) + build/asm/code_rodata_z_vr_box.o(.text) + build/asm/code_rodata_z_message.o(.text) + build/asm/code_rodata_z_message_nes.o(.text) + build/asm/code_rodata_z_message_staff.o(.text) + build/asm/code_rodata_0x80160A90.o(.text) + build/asm/code_rodata_z_kaleido_manager.o(.text) + build/asm/code_rodata_z_fbdemo_circle.o(.text) + build/asm/code_rodata_z_play.o(.text) + build/asm/code_rodata_z_play_hireso.o(.text) + build/asm/code_rodata_PreRender.o(.text) + build/asm/code_rodata_0x80172BC0.o(.text) + build/asm/code_rodata_0x80172C30.o(.text) + build/asm/code_rodata_game.o(.text) + build/asm/code_rodata_graph.o(.text) + build/asm/code_rodata_main.o(.text) + build/asm/code_rodata_padmgr.o(.text) + build/asm/code_rodata_sched.o(.text) + build/asm/code_rodata_0x80179300.o(.text) + build/asm/code_rodata_0x801795F0.o(.text) + build/asm/code_rodata_0x8017FEB0.o(.text) + build/asm/code_rodata_sys_matrix.o(.text) + build/asm/code_rodata_0x801830A0.o(.text) + build/asm/code_rodata_sys_flashrom.o(.text) + build/asm/code_rodata_0x801877D0.o(.text) + build/asm/code_rodata_0x8018B0F0.o(.text) + build/asm/code_rodata_0x8018EB60.o(.text) + build/asm/code_rodata_0x80192BE0.o(.text) + build/asm/code_rodata_0x80194930.o(.text) + build/asm/code_rodata_0x801974D0.o(.text) + build/asm/code_rodata_0x8019AF00.o(.text) + build/asm/code_rodata_0x801A51F0.o(.text) + build/asm/code_rodata_0x801A5BD0.o(.text) + build/asm/code_rodata_0x801A7B10.o(.text) + build/asm/code_rodata_0x801AA610.o(.text) + code_bss_start = .; } diff --git a/tables/objects.py b/tables/objects.py index 4e0eb27a6b..770b4d213d 100644 --- a/tables/objects.py +++ b/tables/objects.py @@ -120,7 +120,8 @@ 0x800B3880:"z_DLF", 0x800B3AD0:"z_actor", 0x800BFB80:"z_bgcheck", - 0x800CAE10:"z_camera", + 0x800CAE10:"", + 0x800CB210:"z_camera", 0x800E0410:"z_collision_check", 0x800E93E0:"z_debug", 0x800E9470:"z_debug_display", @@ -182,6 +183,86 @@ 0x80177390:"speed_meter", 0x80178750:"sys_cmpdma", 0x80178F30:"sys_initial_check", + 0x80179300:"", + 0x8017FEB0:"", 0x80180160:"sys_matrix", - 0x801830A0:"sys_flashrom" + 0x801830A0:"", + 0x801857C0:"sys_flashrom", + 0x801AAAB0:"code_data", + 0x801DBDF0:"code_rodata_z_en_item00", + 0x801DC080:"code_rodata_z_eff_blure", + 0x801DC0B0:"code_rodata_z_eff_shield_particle", + 0x801DC0C0:"code_rodata_z_eff_spark", + 0x801DC0D0:"code_rodata_z_eff_ss_dead", + 0x801DC0E0:"code_rodata_0x800AF710", + 0x801DC100:"code_rodata_z_effect_soft_sprite_old_init", + 0x801DC120:"code_rodata_flg_set", + 0x801DC9D0:"code_rodata_z_actor", + 0x801DCBB0:"code_rodata_0x800BF9A0", + 0x801DCC00:"code_rodata_z_bgcheck", + 0x801DCDB0:"code_rodata_0x800CAE10", + 0x801DCDC0:"code_rodata_z_camera", + 0x801DD5C0:"code_rodata_z_collision_check", + 0x801DD600:"code_rodata_0x800E8EA0", + 0x801DD610:"code_rodata_z_debug_mode", + 0x801DD770:"code_rodata_z_draw", + 0x801DD780:"code_rodata_z_eff_footmark", + 0x801DD790:"code_rodata_0x800F1460", + 0x801DD7C0:"code_rodata_z_fcurve_data_skelanime", + 0x801DD7D0:"code_rodata_z_fireobj", + 0x801DD7E0:"code_rodata_z_horse", + 0x801DD7F0:"code_rodata_z_jpeg", + 0x801DD880:"code_rodata_z_kankyo", + 0x801DDA80:"code_rodata_z_lib", + 0x801DDA90:"code_rodata_z_lifemeter", + 0x801DDAB0:"code_rodata_z_lights", + 0x801DDAC0:"code_rodata_z_map_disp", + 0x801DDAE0:"code_rodata_0x8010C230", + 0x801DDB00:"code_rodata_z_parameter", + 0x801DDD20:"code_rodata_z_player_lib", + 0x801DDE10:"code_rodata_0x8012A080", + 0x801DDFA0:"code_rodata_z_room", + 0x801DDFF0:"code_rodata_z_scene_proc", + 0x801DE020:"code_rodata_z_scene_table", + 0x801DE5C0:"code_rodata_z_skin", + 0x801DE5D0:"code_rodata_0x80138BA0", + 0x801DE5E0:"code_rodata_z_sub_s", + 0x801DF090:"code_rodata_0x8013EC10", + 0x801DF0A0:"code_rodata_z_view", + 0x801DF0B0:"code_rodata_z_vimode", + 0x801DF120:"code_rodata_0x80140E80", + 0x801DF130:"code_rodata_z_vr_box", + 0x801DF150:"code_rodata_z_message", + 0x801DF730:"code_rodata_z_message_nes", + 0x801DF860:"code_rodata_z_message_staff", + 0x801DF900:"code_rodata_0x80160A90", + 0x801DF9C0:"code_rodata_z_kaleido_manager", + 0x801DF9E0:"code_rodata_z_fbdemo_circle", + 0x801DFA00:"code_rodata_z_play", + 0x801DFC50:"code_rodata_z_play_hireso", + 0x801DFC60:"code_rodata_PreRender", + 0x801DFC70:"code_rodata_0x80172BC0", + 0x801DFC80:"code_rodata_0x80172C30", + 0x801DFCC0:"code_rodata_game", + 0x801DFCE0:"code_rodata_graph", + 0x801DFD70:"code_rodata_main", + 0x801DFD90:"code_rodata_padmgr", + 0x801DFDE0:"code_rodata_sched", + 0x801E0120:"code_rodata_0x80179300", + 0x801E0130:"code_rodata_0x801795F0", + 0x801E01E0:"code_rodata_0x8017FEB0", + 0x801E01F0:"code_rodata_sys_matrix", + 0x801E0200:"code_rodata_0x801830A0", + 0x801E0230:"code_rodata_sys_flashrom", + 0x801E0280:"code_rodata_0x801877D0", + 0x801E02B0:"code_rodata_0x8018B0F0", + 0x801E0300:"code_rodata_0x8018EB60", + 0x801E0390:"code_rodata_0x80192BE0", + 0x801E04E0:"code_rodata_0x80194930", + 0x801E0540:"code_rodata_0x801974D0", + 0x801E0BD0:"code_rodata_0x8019AF00", + 0x801E0EC0:"code_rodata_0x801A51F0", + 0x801E1050:"code_rodata_0x801A5BD0", + 0x801E1070:"code_rodata_0x801A7B10", + 0x801E1120:"code_rodata_0x801AA610", } diff --git a/tools/disasm.py b/tools/disasm.py index b6f0095523..98cbcbfea9 100644 --- a/tools/disasm.py +++ b/tools/disasm.py @@ -197,7 +197,8 @@ class Disassembler: for addr in known_objects: self.add_object(addr) - self.add_function(addr) # assume every object starts with a function + if self.is_in_code(addr): + self.add_function(addr) # assume every object starts with a function for addr in known_vars: self.add_variable(addr) @@ -209,6 +210,7 @@ class Disassembler: def add_file(self, path, name, vaddr): self.files.append(self.File(name, read_file(path + '/' + name), vaddr)) + self.files = sorted(self.files, key = lambda file: file.vaddr) self.reset_cache() def add_object(self, addr): @@ -228,10 +230,12 @@ class Disassembler: def add_data_region(self, start, end, file_name): self.data_regions.append((start, end, file_name)) + self.data_regions = sorted(self.data_regions, key = lambda region: region[0]) self.reset_cache() def add_bss_region(self, start, end, file_name): self.bss_regions.append((start, end, file_name)) + self.bss_regions = sorted(self.bss_regions, key = lambda region: region[0]) self.reset_cache() def is_in_data(self, addr): @@ -364,11 +368,6 @@ class Disassembler: if self.has_done_first_pass == True: return - # TODO keep sorted - self.files = sorted(self.files, key = lambda file: file.vaddr) - self.data_regions = sorted(self.data_regions, key = lambda region: region[0]) - self.bss_regions = sorted(self.bss_regions, key = lambda region: region[0]) - for file in self.files: for i in range(0, file.size // 4): inst = file.get_inst(i)