Added MWCC, Added WIBO:
- Implemented WIBO command for MWCC - Implemented WIBO command for MWLD - Need to get matching build - Wip work on generate_lcf and inc.lcf
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
INCLUDE "undefined_syms.txt"
|
||||
INCLUDE "undefined_syms_auto.txt"
|
||||
INCLUDE "undefined_funcs_auto.txt"
|
||||
+208
-208
@@ -239,217 +239,217 @@ segments:
|
||||
- [0x02E480, asm, sdk/sce/ee/gcc/lib/gcc-lib/ee/version/libgcc/vsprintf]
|
||||
- [0x02E530, asm, sdk/sce/ee/gcc/lib/gcc-lib/ee/version/libgcc/writer]
|
||||
- [0x02E590, asm, sdk/sce/ee/gcc/lib/gcc-lib/ee/version/libgcc/wsetup]
|
||||
- [0x02E6A0, c, cs4/Seimei/src/AniFile]
|
||||
- [0x02EA20, c, cs4/Seimei/src/Anim]
|
||||
- [0x032110, c, cs4/Seimei/src/Camera]
|
||||
- [0x034930, c, cs4/Seimei/src/Debug]
|
||||
- [0x034D10, c, cs4/Seimei/src/Draw]
|
||||
- [0x038710, c, cs4/Seimei/src/File]
|
||||
- [0x038D00, c, cs4/Seimei/src/Game]
|
||||
- [0x039A00, c, cs4/Seimei/src/Load]
|
||||
- [0x03A380, c, cs4/Seimei/src/Main]
|
||||
- [0x03AFE0, c, cs4/Seimei/src/MathUtil]
|
||||
- [0x03BCE0, c, cs4/Seimei/src/MdlLink]
|
||||
- [0x03BDC0, c, cs4/Seimei/src/Mic]
|
||||
- [0x03BEE0, c, cs4/Seimei/src/Model]
|
||||
- [0x03D1A0, c, cs4/Seimei/src/Pad]
|
||||
- [0x03DF80, c, cs4/Seimei/src/Sprite]
|
||||
- [0x03E9A0, c, cs4/Seimei/src/Tex]
|
||||
- [0x03FC40, c, cs4/Seimei/src/Vmd]
|
||||
- [0x0414C0, c, cs4/Seimei/src/Vram]
|
||||
- [0x041B90, c, cs4/Seimei/src/Vu1]
|
||||
- [0x041E70, c, cs4/Seimei/fslib/lib/fslibmc]
|
||||
- [0x046A00, c, cs4/Seimei/fslib/lib/fslibpa2]
|
||||
- [0x047A20, c, cs4/Seimei/fslib/lib/fslibsd]
|
||||
- [0x0484C0, c, cs4/Seimei/fslib/lib/fslibsdsynth]
|
||||
- [0x04AA50, c, cs4/Seimei/fslib/lib/fslibvu0]
|
||||
- [0x04ABC0, c, cs4/Seimei/src/Memory]
|
||||
- [0x04B150, c, cs4/Seimei/src/Map]
|
||||
- [0x04FBC0, c, cs4/Seimei/src/String]
|
||||
- [0x04FD50, c, cs4/Seimei/src/My]
|
||||
- [0x053740, c, cs4/Seimei/src/MyAct]
|
||||
- [0x056F20, c, cs4/Seimei/src/MyThk]
|
||||
- [0x059480, c, cs4/Seimei/fslib/lib/fslibhit]
|
||||
- [0x0594F0, c, cs4/Seimei/fslib/lib/hit_basic]
|
||||
- [0x059650, c, cs4/Seimei/fslib/lib/hit_calc]
|
||||
- [0x059720, c, cs4/Seimei/fslib/lib/hit_info]
|
||||
- [0x059790, c, cs4/Seimei/src/Mi2]
|
||||
- [0x059860, c, cs4/Seimei/src/CharHit]
|
||||
- [0x059C60, c, cs4/Seimei/src/Dss]
|
||||
- [0x05ACB0, c, cs4/Seimei/src/Damage]
|
||||
- [0x05B3B0, c, cs4/Seimei/src/Hmd]
|
||||
- [0x05E360, c, cs4/Seimei/src/Binder]
|
||||
- [0x05E980, c, cs4/Seimei/src/Ene]
|
||||
- [0x060DF0, c, cs4/Seimei/src/EneAct]
|
||||
- [0x062F40, c, cs4/Seimei/src/EneThk]
|
||||
- [0x0649E0, c, cs4/Seimei/src/PointLight]
|
||||
- [0x065370, c, cs4/Seimei/lib/libaio]
|
||||
- [0x0683E0, c, cs4/Seimei/src/Scene]
|
||||
- [0x068BF0, c, cs4/Seimei/src/ShadowVolume]
|
||||
- [0x068E00, c, cs4/Seimei/src/DepthAlpha]
|
||||
- [0x069460, c, cs4/Seimei/src/ClothSimulator]
|
||||
- [0x069930, c, cs4/Seimei/src/Rta]
|
||||
- [0x06B9B0, c, cs4/Seimei/src/rta_util]
|
||||
- [0x06BB00, c, cs4/Seimei/src/Script]
|
||||
- [0x06F370, c, cs4/Seimei/fslib/lib/fslibscr]
|
||||
- [0x0709B0, c, cs4/Seimei/src/MyDamage]
|
||||
- [0x0710E0, c, cs4/Seimei/src/EneDamage]
|
||||
- [0x02E6A0, asm, cs4/Seimei/src/AniFile]
|
||||
- [0x02EA20, asm, cs4/Seimei/src/Anim]
|
||||
- [0x032110, asm, cs4/Seimei/src/Camera]
|
||||
- [0x034930, asm, cs4/Seimei/src/Debug]
|
||||
- [0x034D10, asm, cs4/Seimei/src/Draw]
|
||||
- [0x038710, asm, cs4/Seimei/src/File]
|
||||
- [0x038D00, asm, cs4/Seimei/src/Game]
|
||||
- [0x039A00, asm, cs4/Seimei/src/Load]
|
||||
- [0x03A380, asm, cs4/Seimei/src/Main]
|
||||
- [0x03AFE0, asm, cs4/Seimei/src/MathUtil]
|
||||
- [0x03BCE0, asm, cs4/Seimei/src/MdlLink]
|
||||
- [0x03BDC0, asm, cs4/Seimei/src/Mic]
|
||||
- [0x03BEE0, asm, cs4/Seimei/src/Model]
|
||||
- [0x03D1A0, asm, cs4/Seimei/src/Pad]
|
||||
- [0x03DF80, asm, cs4/Seimei/src/Sprite]
|
||||
- [0x03E9A0, asm, cs4/Seimei/src/Tex]
|
||||
- [0x03FC40, asm, cs4/Seimei/src/Vmd]
|
||||
- [0x0414C0, asm, cs4/Seimei/src/Vram]
|
||||
- [0x041B90, asm, cs4/Seimei/src/Vu1]
|
||||
- [0x041E70, asm, cs4/Seimei/fslib/lib/fslibmc]
|
||||
- [0x046A00, asm, cs4/Seimei/fslib/lib/fslibpa2]
|
||||
- [0x047A20, asm, cs4/Seimei/fslib/lib/fslibsd]
|
||||
- [0x0484C0, asm, cs4/Seimei/fslib/lib/fslibsdsynth]
|
||||
- [0x04AA50, asm, cs4/Seimei/fslib/lib/fslibvu0]
|
||||
- [0x04ABC0, asm, cs4/Seimei/src/Memory]
|
||||
- [0x04B150, asm, cs4/Seimei/src/Map]
|
||||
- [0x04FBC0, asm, cs4/Seimei/src/String]
|
||||
- [0x04FD50, asm, cs4/Seimei/src/My]
|
||||
- [0x053740, asm, cs4/Seimei/src/MyAct]
|
||||
- [0x056F20, asm, cs4/Seimei/src/MyThk]
|
||||
- [0x059480, asm, cs4/Seimei/fslib/lib/fslibhit]
|
||||
- [0x0594F0, asm, cs4/Seimei/fslib/lib/hit_basic]
|
||||
- [0x059650, asm, cs4/Seimei/fslib/lib/hit_calc]
|
||||
- [0x059720, asm, cs4/Seimei/fslib/lib/hit_info]
|
||||
- [0x059790, asm, cs4/Seimei/src/Mi2]
|
||||
- [0x059860, asm, cs4/Seimei/src/CharHit]
|
||||
- [0x059C60, asm, cs4/Seimei/src/Dss]
|
||||
- [0x05ACB0, asm, cs4/Seimei/src/Damage]
|
||||
- [0x05B3B0, asm, cs4/Seimei/src/Hmd]
|
||||
- [0x05E360, asm, cs4/Seimei/src/Binder]
|
||||
- [0x05E980, asm, cs4/Seimei/src/Ene]
|
||||
- [0x060DF0, asm, cs4/Seimei/src/EneAct]
|
||||
- [0x062F40, asm, cs4/Seimei/src/EneThk]
|
||||
- [0x0649E0, asm, cs4/Seimei/src/PointLight]
|
||||
- [0x065370, asm, cs4/Seimei/lib/libaio]
|
||||
- [0x0683E0, asm, cs4/Seimei/src/Scene]
|
||||
- [0x068BF0, asm, cs4/Seimei/src/ShadowVolume]
|
||||
- [0x068E00, asm, cs4/Seimei/src/DepthAlpha]
|
||||
- [0x069460, asm, cs4/Seimei/src/ClothSimulator]
|
||||
- [0x069930, asm, cs4/Seimei/src/Rta]
|
||||
- [0x06B9B0, asm, cs4/Seimei/src/rta_util]
|
||||
- [0x06BB00, asm, cs4/Seimei/src/Script]
|
||||
- [0x06F370, asm, cs4/Seimei/fslib/lib/fslibscr]
|
||||
- [0x0709B0, asm, cs4/Seimei/src/MyDamage]
|
||||
- [0x0710E0, asm, cs4/Seimei/src/EneDamage]
|
||||
- [0x072120, asm, unklib_001720A0] # GCC TU
|
||||
- [0x072360, c, cs4/Seimei/fslib/lib/FsFont]
|
||||
- [0x0747D0, c, cs4/Seimei/fslib/lib/FsFontDraw]
|
||||
- [0x076C20, c, cs4/Seimei/fslib/lib/FsFontRect]
|
||||
- [0x076C40, c, cs4/Seimei/fslib/lib/FsFontReplace]
|
||||
- [0x076F20, c, cs4/Seimei/src/Font]
|
||||
- [0x077A10, c, cs4/Seimei/src/Dizzy]
|
||||
- [0x0796C0, c, cs4/Seimei/src/SandEffect]
|
||||
- [0x0796E0, c, cs4/Seimei/src/Drama]
|
||||
- [0x07B6A0, c, cs4/Seimei/src/Msg]
|
||||
- [0x07CA90, c, cs4/Seimei/src/KuonMsg]
|
||||
- [0x07D140, c, cs4/Seimei/src/List]
|
||||
- [0x07D920, c, cs4/Seimei/src/util]
|
||||
- [0x07DAE0, c, cs4/Seimei/src/FsMsg]
|
||||
- [0x07DBC0, c, cs4/Seimei/src/TmpMenu]
|
||||
- [0x07DFB0, c, cs4/Seimei/src/Object]
|
||||
- [0x0807A0, c, cs4/Seimei/src/Fade]
|
||||
- [0x081180, c, cs4/Seimei/src/Blast]
|
||||
- [0x081760, c, cs4/Seimei/src/Light]
|
||||
- [0x081910, c, cs4/Seimei/src/Cdvd]
|
||||
- [0x0820E0, c, cs4/Seimei/src/Filter]
|
||||
- [0x085190, c, cs4/Seimei/src/msg_util]
|
||||
- [0x085610, c, cs4/Seimei/src/DrawOT]
|
||||
- [0x085FA0, c, cs4/Seimei/src/ItemMng]
|
||||
- [0x087040, c, cs4/Seimei/src/Title]
|
||||
- [0x08DDB0, c, cs4/Seimei/src/Spirit]
|
||||
- [0x08DE80, c, cs4/Seimei/src/E016Act]
|
||||
- [0x08E2E0, c, cs4/Seimei/src/E016Thk]
|
||||
- [0x08E800, c, cs4/Seimei/src/E011Act]
|
||||
- [0x08EEB0, c, cs4/Seimei/src/E011Thk]
|
||||
- [0x08F770, c, cs4/Seimei/src/Peep]
|
||||
- [0x090F60, c, cs4/Seimei/src/P007Act]
|
||||
- [0x0910A0, c, cs4/Seimei/src/P007Thk]
|
||||
- [0x091170, c, cs4/Seimei/src/EtcEvent]
|
||||
- [0x091700, c, cs4/Seimei/src/FrontEnd/FrontEnd_Card]
|
||||
- [0x093A10, c, cs4/Seimei/src/P008Act]
|
||||
- [0x093C60, c, cs4/Seimei/src/Param]
|
||||
- [0x093CE0, c, cs4/Seimei/src/P004Act]
|
||||
- [0x094120, c, cs4/Seimei/src/P004Thk]
|
||||
- [0x094400, c, cs4/Seimei/src/E022Act]
|
||||
- [0x094EF0, c, cs4/Seimei/src/E022Thk]
|
||||
- [0x095750, c, cs4/Seimei/src/Movie]
|
||||
- [0x072360, asm, cs4/Seimei/fslib/lib/FsFont]
|
||||
- [0x0747D0, asm, cs4/Seimei/fslib/lib/FsFontDraw]
|
||||
- [0x076C20, asm, cs4/Seimei/fslib/lib/FsFontRect]
|
||||
- [0x076C40, asm, cs4/Seimei/fslib/lib/FsFontReplace]
|
||||
- [0x076F20, asm, cs4/Seimei/src/Font]
|
||||
- [0x077A10, asm, cs4/Seimei/src/Dizzy]
|
||||
- [0x0796C0, asm, cs4/Seimei/src/SandEffect]
|
||||
- [0x0796E0, asm, cs4/Seimei/src/Drama]
|
||||
- [0x07B6A0, asm, cs4/Seimei/src/Msg]
|
||||
- [0x07CA90, asm, cs4/Seimei/src/KuonMsg]
|
||||
- [0x07D140, asm, cs4/Seimei/src/List]
|
||||
- [0x07D920, asm, cs4/Seimei/src/util]
|
||||
- [0x07DAE0, asm, cs4/Seimei/src/FsMsg]
|
||||
- [0x07DBC0, asm, cs4/Seimei/src/TmpMenu]
|
||||
- [0x07DFB0, asm, cs4/Seimei/src/Object]
|
||||
- [0x0807A0, asm, cs4/Seimei/src/Fade]
|
||||
- [0x081180, asm, cs4/Seimei/src/Blast]
|
||||
- [0x081760, asm, cs4/Seimei/src/Light]
|
||||
- [0x081910, asm, cs4/Seimei/src/Cdvd]
|
||||
- [0x0820E0, asm, cs4/Seimei/src/Filter]
|
||||
- [0x085190, asm, cs4/Seimei/src/msg_util]
|
||||
- [0x085610, asm, cs4/Seimei/src/DrawOT]
|
||||
- [0x085FA0, asm, cs4/Seimei/src/ItemMng]
|
||||
- [0x087040, asm, cs4/Seimei/src/Title]
|
||||
- [0x08DDB0, asm, cs4/Seimei/src/Spirit]
|
||||
- [0x08DE80, asm, cs4/Seimei/src/E016Act]
|
||||
- [0x08E2E0, asm, cs4/Seimei/src/E016Thk]
|
||||
- [0x08E800, asm, cs4/Seimei/src/E011Act]
|
||||
- [0x08EEB0, asm, cs4/Seimei/src/E011Thk]
|
||||
- [0x08F770, asm, cs4/Seimei/src/Peep]
|
||||
- [0x090F60, asm, cs4/Seimei/src/P007Act]
|
||||
- [0x0910A0, asm, cs4/Seimei/src/P007Thk]
|
||||
- [0x091170, asm, cs4/Seimei/src/EtcEvent]
|
||||
- [0x091700, asm, cs4/Seimei/src/FrontEnd/FrontEnd_Card]
|
||||
- [0x093A10, asm, cs4/Seimei/src/P008Act]
|
||||
- [0x093C60, asm, cs4/Seimei/src/Param]
|
||||
- [0x093CE0, asm, cs4/Seimei/src/P004Act]
|
||||
- [0x094120, asm, cs4/Seimei/src/P004Thk]
|
||||
- [0x094400, asm, cs4/Seimei/src/E022Act]
|
||||
- [0x094EF0, asm, cs4/Seimei/src/E022Thk]
|
||||
- [0x095750, asm, cs4/Seimei/src/Movie]
|
||||
- [0x095D20, asm, unklib_00195CA0]
|
||||
- [0x09BBE0, c, cs4/Seimei/src/MsgFile]
|
||||
- [0x09C0F0, c, cs4/Seimei/src/MemoryCard]
|
||||
- [0x09DF70, c, cs4/Seimei/src/MCIconData]
|
||||
- [0x09DF90, c, cs4/Seimei/src/MultiStm]
|
||||
- [0x09BBE0, asm, cs4/Seimei/src/MsgFile]
|
||||
- [0x09C0F0, asm, cs4/Seimei/src/MemoryCard]
|
||||
- [0x09DF70, asm, cs4/Seimei/src/MCIconData]
|
||||
- [0x09DF90, asm, cs4/Seimei/src/MultiStm]
|
||||
- [0x09E1E0, asm, unklib_0019E160]
|
||||
- [0x0A1510, c, cs4/Seimei/src/Mirror]
|
||||
- [0x0A23B0, c, cs4/Seimei/src/Riddle]
|
||||
- [0x0A4F80, c, cs4/Seimei/src/E031Act]
|
||||
- [0x0A4F90, c, cs4/Seimei/src/MovePath]
|
||||
- [0x0A53F0, c, cs4/Seimei/src/P006Thk]
|
||||
- [0x0A54D0, c, cs4/Seimei/src/P027Act]
|
||||
- [0x0A5610, c, cs4/Seimei/src/P027Thk]
|
||||
- [0x0A5AE0, c, cs4/Seimei/src/P018Act]
|
||||
- [0x0A5EA0, c, cs4/Seimei/src/P018Thk]
|
||||
- [0x0A5F50, c, cs4/Seimei/src/Miz]
|
||||
- [0x0A6060, c, cs4/Seimei/src/E032Act]
|
||||
- [0x0A6440, c, cs4/Seimei/src/E032Thk]
|
||||
- [0x0A6630, c, cs4/Seimei/src/P019Act]
|
||||
- [0x0A69F0, c, cs4/Seimei/src/P019Thk]
|
||||
- [0x0A6B20, c, cs4/Seimei/src/P030Act]
|
||||
- [0x0A6E20, c, cs4/Seimei/src/P030Thk]
|
||||
- [0x0A6E40, c, cs4/Seimei/src/TexEffect]
|
||||
- [0x0A8580, c, cs4/Seimei/src/P020Act]
|
||||
- [0x0A89A0, c, cs4/Seimei/src/E042Act]
|
||||
- [0x0A8DD0, c, cs4/Seimei/src/Sound/Sec]
|
||||
- [0x0A9290, c, cs4/Seimei/src/Sound/Snd]
|
||||
- [0x0AA110, c, cs4/Seimei/src/Sound/SndReverb]
|
||||
- [0x0AA640, c, cs4/Seimei/src/Sound/SndSq]
|
||||
- [0x0AB190, c, cs4/Seimei/src/Sound/SndVoice]
|
||||
- [0x0AC990, c, cs4/Seimei/src/Sound/VagStm]
|
||||
- [0x0AE600, c, cs4/Seimei/src/sfx/PtclMng]
|
||||
- [0x0BB900, c, cs4/Seimei/src/sfx/Sfx]
|
||||
- [0x0BC750, c, cs4/Seimei/src/sfx/SfxCommon]
|
||||
- [0x0BF400, c, cs4/Seimei/src/sfx/SfxDebug_TmrGraph]
|
||||
- [0x0BF500, c, cs4/Seimei/src/sfx/SfxDomanString]
|
||||
- [0x0C00B0, c, cs4/Seimei/src/sfx/SfxDraw]
|
||||
- [0x0C3BD0, c, cs4/Seimei/src/sfx/SfxFileIO]
|
||||
- [0x0C42A0, c, cs4/Seimei/src/sfx/SfxFlicker]
|
||||
- [0x0C5C50, c, cs4/Seimei/src/sfx/SfxFormat]
|
||||
- [0x0C6B60, c, cs4/Seimei/src/sfx/SfxMng]
|
||||
- [0x0CE240, c, cs4/Seimei/src/sfx/SfxModel]
|
||||
- [0x0CEBE0, c, cs4/Seimei/src/sfx/SfxPLight]
|
||||
- [0x0CF7F0, c, cs4/Seimei/src/sfx/SfxPostEffect]
|
||||
- [0x0CFDA0, c, cs4/Seimei/src/sfx/SfxTracer]
|
||||
- [0x0D0F90, c, cs4/Seimei/src/sfx/StaticList]
|
||||
- [0x0D14E0, c, cs4/Seimei/src/menu/KnMenuModel]
|
||||
- [0x0D61F0, c, cs4/Seimei/src/menu/KnMenuWind]
|
||||
- [0x0D66D0, c, cs4/Seimei/src/menu/KuonMenu]
|
||||
- [0x0D8500, c, cs4/Seimei/src/menu/Menu]
|
||||
- [0x0D9620, c, cs4/Seimei/src/menu/menu_util]
|
||||
- [0x0EBBE0, c, cs4/Seimei/src/menu/MenuCtrl]
|
||||
- [0x0EE080, c, cs4/Seimei/src/menu/MenuItem]
|
||||
- [0x0F1B60, c, cs4/Seimei/src/MiniGame/GameFunc]
|
||||
- [0x0F55C0, c, cs4/Seimei/src/MiniGame/MGAnime]
|
||||
- [0x0F7C70, c, cs4/Seimei/src/MiniGame/MGFont]
|
||||
- [0x0F7DC0, c, cs4/Seimei/src/MiniGame/MGInit]
|
||||
- [0x0F9AB0, c, cs4/Seimei/src/MiniGame/MGLoad]
|
||||
- [0x0F9CD0, c, cs4/Seimei/src/MiniGame/MGPad]
|
||||
- [0x0FE8D0, c, cs4/Seimei/src/MiniGame/MGSprite]
|
||||
- [0x0FF080, c, cs4/Seimei/src/MiniGame/MiniGame]
|
||||
- [0x0FF8D0, c, cs4/Seimei/src/E035Act]
|
||||
- [0x0FFBB0, c, cs4/Seimei/src/E035Thk]
|
||||
- [0x0FFD70, c, cs4/Seimei/src/E034Act]
|
||||
- [0x0FFF70, c, cs4/Seimei/src/E034Thk]
|
||||
- [0x100130, c, cs4/Seimei/src/P025Act]
|
||||
- [0x100710, c, cs4/Seimei/src/P025Thk]
|
||||
- [0x100920, c, cs4/Seimei/src/E003Act]
|
||||
- [0x100FD0, c, cs4/Seimei/src/E003Thk]
|
||||
- [0x101890, c, cs4/Seimei/src/E028Act]
|
||||
- [0x1018A0, c, cs4/Seimei/src/E033Act]
|
||||
- [0x101960, c, cs4/Seimei/src/E036Act]
|
||||
- [0x101970, c, cs4/Seimei/src/E037Act]
|
||||
- [0x101980, c, cs4/Seimei/src/MiniGame/TMKSpriteInit]
|
||||
- [0x104470, c, cs4/Seimei/src/sfx/SfxBugs]
|
||||
- [0x105150, c, cs4/Seimei/src/E044Act]
|
||||
- [0x105560, c, cs4/Seimei/src/sfx/SfxFog]
|
||||
- [0x105A00, c, cs4/Seimei/fslib/lib/fsspummng]
|
||||
- [0x106520, c, cs4/Seimei/src/Event]
|
||||
- [0x106A90, c, cs4/Seimei/src/Event0031]
|
||||
- [0x107380, c, cs4/Seimei/src/Event0051]
|
||||
- [0x107E90, c, cs4/Seimei/src/MiniGame/sgh/sgh]
|
||||
- [0x107EA0, c, cs4/Seimei/src/MiniGame/sgh/sghDice]
|
||||
- [0x108860, c, cs4/Seimei/src/MiniGame/sgh/sghDraw]
|
||||
- [0x108AD0, c, cs4/Seimei/src/MiniGame/sgh/sghEne]
|
||||
- [0x108BD0, c, cs4/Seimei/src/MiniGame/sgh/sghEneThk]
|
||||
- [0x10A890, c, cs4/Seimei/src/MiniGame/sgh/sghKoma]
|
||||
- [0x10BEA0, c, cs4/Seimei/src/MiniGame/sgh/sghMain]
|
||||
- [0x10BFE0, c, cs4/Seimei/src/MiniGame/sgh/sghMap]
|
||||
- [0x10C9D0, c, cs4/Seimei/src/MiniGame/sgh/sghMarker]
|
||||
- [0x10CBF0, c, cs4/Seimei/src/MiniGame/sgh/sghMode]
|
||||
- [0x10DCB0, c, cs4/Seimei/src/MiniGame/sgh/sghMsg]
|
||||
- [0x10EA40, c, cs4/Seimei/src/MiniGame/sgh/sghPad]
|
||||
- [0x10F7D0, c, cs4/Seimei/src/MiniGame/sgh/sghSprite]
|
||||
- [0x10FC50, c, cs4/Seimei/src/MiniGame/sgh/sghTime]
|
||||
- [0x10FC70, c, cs4/Seimei/src/Event0035]
|
||||
- [0x110390, c, cs4/Seimei/src/Event0034]
|
||||
- [0x1107C0, c, cs4/Seimei/src/Event0033]
|
||||
- [0x110F20, c, cs4/Seimei/src/Event0040]
|
||||
- [0x111470, c, cs4/Seimei/src/Event0010]
|
||||
- [0x112490, c, cs4/Seimei/src/Event0041]
|
||||
- [0x1126A0, c, cs4/Seimei/src/Event0008]
|
||||
- [0x112A80, c, cs4/Seimei/src/Event0009]
|
||||
- [0x112B40, c, cs4/Seimei/src/menu/MenuTD]
|
||||
- [0x113920, c, cs4/Seimei/src/Event0083]
|
||||
- [0x113B10, c, cs4/Seimei/src/E041Act]
|
||||
- [0x113BD0, c, cs4/Seimei/src/Event0002]
|
||||
- [0x114110, c, cs4/Seimei/src/Event0006]
|
||||
- [0x115080, c, cs4/Seimei/src/sfx/SfxScriptIF]
|
||||
- [0x115300, c, cs4/Seimei/src/Event0032]
|
||||
- [0x115610, c, cs4/Seimei/src/E023Act]
|
||||
- [0x115620, c, cs4/Seimei/src/Event0001]
|
||||
- [0x1157F0, c, cs4/Seimei/src/P036Act]
|
||||
- [0x115910, c, cs4/Seimei/src/Event0085]
|
||||
- [0x0A1510, asm, cs4/Seimei/src/Mirror]
|
||||
- [0x0A23B0, asm, cs4/Seimei/src/Riddle]
|
||||
- [0x0A4F80, asm, cs4/Seimei/src/E031Act]
|
||||
- [0x0A4F90, asm, cs4/Seimei/src/MovePath]
|
||||
- [0x0A53F0, asm, cs4/Seimei/src/P006Thk]
|
||||
- [0x0A54D0, asm, cs4/Seimei/src/P027Act]
|
||||
- [0x0A5610, asm, cs4/Seimei/src/P027Thk]
|
||||
- [0x0A5AE0, asm, cs4/Seimei/src/P018Act]
|
||||
- [0x0A5EA0, asm, cs4/Seimei/src/P018Thk]
|
||||
- [0x0A5F50, asm, cs4/Seimei/src/Miz]
|
||||
- [0x0A6060, asm, cs4/Seimei/src/E032Act]
|
||||
- [0x0A6440, asm, cs4/Seimei/src/E032Thk]
|
||||
- [0x0A6630, asm, cs4/Seimei/src/P019Act]
|
||||
- [0x0A69F0, asm, cs4/Seimei/src/P019Thk]
|
||||
- [0x0A6B20, asm, cs4/Seimei/src/P030Act]
|
||||
- [0x0A6E20, asm, cs4/Seimei/src/P030Thk]
|
||||
- [0x0A6E40, asm, cs4/Seimei/src/TexEffect]
|
||||
- [0x0A8580, asm, cs4/Seimei/src/P020Act]
|
||||
- [0x0A89A0, asm, cs4/Seimei/src/E042Act]
|
||||
- [0x0A8DD0, asm, cs4/Seimei/src/Sound/Sec]
|
||||
- [0x0A9290, asm, cs4/Seimei/src/Sound/Snd]
|
||||
- [0x0AA110, asm, cs4/Seimei/src/Sound/SndReverb]
|
||||
- [0x0AA640, asm, cs4/Seimei/src/Sound/SndSq]
|
||||
- [0x0AB190, asm, cs4/Seimei/src/Sound/SndVoice]
|
||||
- [0x0AC990, asm, cs4/Seimei/src/Sound/VagStm]
|
||||
- [0x0AE600, asm, cs4/Seimei/src/sfx/PtclMng]
|
||||
- [0x0BB900, asm, cs4/Seimei/src/sfx/Sfx]
|
||||
- [0x0BC750, asm, cs4/Seimei/src/sfx/SfxCommon]
|
||||
- [0x0BF400, asm, cs4/Seimei/src/sfx/SfxDebug_TmrGraph]
|
||||
- [0x0BF500, asm, cs4/Seimei/src/sfx/SfxDomanString]
|
||||
- [0x0C00B0, asm, cs4/Seimei/src/sfx/SfxDraw]
|
||||
- [0x0C3BD0, asm, cs4/Seimei/src/sfx/SfxFileIO]
|
||||
- [0x0C42A0, asm, cs4/Seimei/src/sfx/SfxFlicker]
|
||||
- [0x0C5C50, asm, cs4/Seimei/src/sfx/SfxFormat]
|
||||
- [0x0C6B60, asm, cs4/Seimei/src/sfx/SfxMng]
|
||||
- [0x0CE240, asm, cs4/Seimei/src/sfx/SfxModel]
|
||||
- [0x0CEBE0, asm, cs4/Seimei/src/sfx/SfxPLight]
|
||||
- [0x0CF7F0, asm, cs4/Seimei/src/sfx/SfxPostEffect]
|
||||
- [0x0CFDA0, asm, cs4/Seimei/src/sfx/SfxTracer]
|
||||
- [0x0D0F90, asm, cs4/Seimei/src/sfx/StaticList]
|
||||
- [0x0D14E0, asm, cs4/Seimei/src/menu/KnMenuModel]
|
||||
- [0x0D61F0, asm, cs4/Seimei/src/menu/KnMenuWind]
|
||||
- [0x0D66D0, asm, cs4/Seimei/src/menu/KuonMenu]
|
||||
- [0x0D8500, asm, cs4/Seimei/src/menu/Menu]
|
||||
- [0x0D9620, asm, cs4/Seimei/src/menu/menu_util]
|
||||
- [0x0EBBE0, asm, cs4/Seimei/src/menu/MenuCtrl]
|
||||
- [0x0EE080, asm, cs4/Seimei/src/menu/MenuItem]
|
||||
- [0x0F1B60, asm, cs4/Seimei/src/MiniGame/GameFunc]
|
||||
- [0x0F55C0, asm, cs4/Seimei/src/MiniGame/MGAnime]
|
||||
- [0x0F7C70, asm, cs4/Seimei/src/MiniGame/MGFont]
|
||||
- [0x0F7DC0, asm, cs4/Seimei/src/MiniGame/MGInit]
|
||||
- [0x0F9AB0, asm, cs4/Seimei/src/MiniGame/MGLoad]
|
||||
- [0x0F9CD0, asm, cs4/Seimei/src/MiniGame/MGPad]
|
||||
- [0x0FE8D0, asm, cs4/Seimei/src/MiniGame/MGSprite]
|
||||
- [0x0FF080, asm, cs4/Seimei/src/MiniGame/MiniGame]
|
||||
- [0x0FF8D0, asm, cs4/Seimei/src/E035Act]
|
||||
- [0x0FFBB0, asm, cs4/Seimei/src/E035Thk]
|
||||
- [0x0FFD70, asm, cs4/Seimei/src/E034Act]
|
||||
- [0x0FFF70, asm, cs4/Seimei/src/E034Thk]
|
||||
- [0x100130, asm, cs4/Seimei/src/P025Act]
|
||||
- [0x100710, asm, cs4/Seimei/src/P025Thk]
|
||||
- [0x100920, asm, cs4/Seimei/src/E003Act]
|
||||
- [0x100FD0, asm, cs4/Seimei/src/E003Thk]
|
||||
- [0x101890, asm, cs4/Seimei/src/E028Act]
|
||||
- [0x1018A0, asm, cs4/Seimei/src/E033Act]
|
||||
- [0x101960, asm, cs4/Seimei/src/E036Act]
|
||||
- [0x101970, asm, cs4/Seimei/src/E037Act]
|
||||
- [0x101980, asm, cs4/Seimei/src/MiniGame/TMKSpriteInit]
|
||||
- [0x104470, asm, cs4/Seimei/src/sfx/SfxBugs]
|
||||
- [0x105150, asm, cs4/Seimei/src/E044Act]
|
||||
- [0x105560, asm, cs4/Seimei/src/sfx/SfxFog]
|
||||
- [0x105A00, asm, cs4/Seimei/fslib/lib/fsspummng]
|
||||
- [0x106520, asm, cs4/Seimei/src/Event]
|
||||
- [0x106A90, asm, cs4/Seimei/src/Event0031]
|
||||
- [0x107380, asm, cs4/Seimei/src/Event0051]
|
||||
- [0x107E90, asm, cs4/Seimei/src/MiniGame/sgh/sgh]
|
||||
- [0x107EA0, asm, cs4/Seimei/src/MiniGame/sgh/sghDice]
|
||||
- [0x108860, asm, cs4/Seimei/src/MiniGame/sgh/sghDraw]
|
||||
- [0x108AD0, asm, cs4/Seimei/src/MiniGame/sgh/sghEne]
|
||||
- [0x108BD0, asm, cs4/Seimei/src/MiniGame/sgh/sghEneThk]
|
||||
- [0x10A890, asm, cs4/Seimei/src/MiniGame/sgh/sghKoma]
|
||||
- [0x10BEA0, asm, cs4/Seimei/src/MiniGame/sgh/sghMain]
|
||||
- [0x10BFE0, asm, cs4/Seimei/src/MiniGame/sgh/sghMap]
|
||||
- [0x10C9D0, asm, cs4/Seimei/src/MiniGame/sgh/sghMarker]
|
||||
- [0x10CBF0, asm, cs4/Seimei/src/MiniGame/sgh/sghMode]
|
||||
- [0x10DCB0, asm, cs4/Seimei/src/MiniGame/sgh/sghMsg]
|
||||
- [0x10EA40, asm, cs4/Seimei/src/MiniGame/sgh/sghPad]
|
||||
- [0x10F7D0, asm, cs4/Seimei/src/MiniGame/sgh/sghSprite]
|
||||
- [0x10FC50, asm, cs4/Seimei/src/MiniGame/sgh/sghTime]
|
||||
- [0x10FC70, asm, cs4/Seimei/src/Event0035]
|
||||
- [0x110390, asm, cs4/Seimei/src/Event0034]
|
||||
- [0x1107C0, asm, cs4/Seimei/src/Event0033]
|
||||
- [0x110F20, asm, cs4/Seimei/src/Event0040]
|
||||
- [0x111470, asm, cs4/Seimei/src/Event0010]
|
||||
- [0x112490, asm, cs4/Seimei/src/Event0041]
|
||||
- [0x1126A0, asm, cs4/Seimei/src/Event0008]
|
||||
- [0x112A80, asm, cs4/Seimei/src/Event0009]
|
||||
- [0x112B40, asm, cs4/Seimei/src/menu/MenuTD]
|
||||
- [0x113920, asm, cs4/Seimei/src/Event0083]
|
||||
- [0x113B10, asm, cs4/Seimei/src/E041Act]
|
||||
- [0x113BD0, asm, cs4/Seimei/src/Event0002]
|
||||
- [0x114110, asm, cs4/Seimei/src/Event0006]
|
||||
- [0x115080, asm, cs4/Seimei/src/sfx/SfxScriptIF]
|
||||
- [0x115300, asm, cs4/Seimei/src/Event0032]
|
||||
- [0x115610, asm, cs4/Seimei/src/E023Act]
|
||||
- [0x115620, asm, cs4/Seimei/src/Event0001]
|
||||
- [0x1157F0, asm, cs4/Seimei/src/P036Act]
|
||||
- [0x115910, asm, cs4/Seimei/src/Event0085]
|
||||
- [0x115B70, asm, unklib_00215AF0]
|
||||
|
||||
# vutext
|
||||
|
||||
+295
-72
@@ -17,6 +17,13 @@ import tempfile
|
||||
import subprocess
|
||||
import ninja_syntax
|
||||
|
||||
from dataclasses import dataclass, asdict
|
||||
#from utils import ensure_path_and_write, normalize_object_path, to_expected_path
|
||||
|
||||
import splat.util.options as splat_options
|
||||
from splat.segtypes.linker_entry import LinkerEntry, clean_up_path
|
||||
from spimdisasm.common.CompilerConfig import compilerOptions
|
||||
|
||||
from typing import Any, Union, Protocol, Literal, cast
|
||||
from pathlib import Path
|
||||
from contextlib import contextmanager
|
||||
@@ -29,6 +36,10 @@ from splat.segtypes.linker_entry import LinkerEntry
|
||||
from tools.python.fix_assets import fix_assets
|
||||
from tools.python.fix_linkerscript import fix_linkerscript
|
||||
|
||||
from sys import stdout
|
||||
from subprocess import run
|
||||
from dataclasses import dataclass
|
||||
from struct import unpack
|
||||
|
||||
@contextmanager
|
||||
def suppress_stdout_stderr():
|
||||
@@ -50,30 +61,20 @@ TOOLS_DIR = ROOT / "tools"
|
||||
|
||||
CROSS = "mips-ps2-decompals-"
|
||||
|
||||
COMPILER = "ee-gcc2.9-991111-01"
|
||||
COMPILER_FLAGS = "-DMATCHING_DECOMP -O2 -g2 -gstabs" # -malign-functions=3
|
||||
COMPILER = "mwcps2-3.0b52-030722"
|
||||
COMPILER_FLAGS = "-O3,p -sym on -str readonly"
|
||||
|
||||
WIBO = f"{TOOLS_DIR}/wibo-x86_64"
|
||||
|
||||
|
||||
LANGUAGES: dict[str, str] = {
|
||||
"SLUS_210.07": "",
|
||||
}
|
||||
|
||||
# list of object file names (e.g., "tim2_new.c.o"), that have asm that needs
|
||||
# to be patched. the respective c files (e.g. "tim2_new.c") will be compiled
|
||||
# in two steps: c -> asm, then asm -> obj. in between, the intermediate
|
||||
# asm will be passed to `tools/python/fix_asm_matching.py` for patching.
|
||||
ASM_PATCH_LIST: list[str] = [
|
||||
"effect_oth.c.o",
|
||||
"photo.c.o",
|
||||
"ig_camra.c.o",
|
||||
]
|
||||
|
||||
BIN_PATH_LIST: list[str] = [
|
||||
"photo.c.o",
|
||||
]
|
||||
|
||||
EUC_JP_LIST = [
|
||||
"title.c.o",
|
||||
]
|
||||
FUNCTION_SYMBOL_LABEL = "glabel"
|
||||
END_FUNCTION_SYMBOL_LABEL = "endlabel"
|
||||
UNIQUE_TEXT_SECTION_DIRECTIVE = '.section .text,"ax",@progbits,unique,'
|
||||
INCLUDE_MACRO_INC_DIRECTIVE = '.include "macro.inc"'
|
||||
|
||||
|
||||
def get_compiler_command(command: str):
|
||||
@@ -82,33 +83,28 @@ def get_compiler_command(command: str):
|
||||
ee_compiler_dirname = next(os.walk(ee_dir))[1][0]
|
||||
|
||||
commands = {
|
||||
"ee-gcc": compiler_dir / "bin" / "ee-gcc",
|
||||
"cc1": compiler_dir / "lib" / "gcc-lib" / "ee" / ee_compiler_dirname / "cc1",
|
||||
"cc1plus": compiler_dir / "lib" / "gcc-lib" / "ee" / ee_compiler_dirname / "cc1plus",
|
||||
"cpp": compiler_dir / "lib" / "gcc-lib" / "ee" / ee_compiler_dirname / "cpp",
|
||||
"as": compiler_dir / "ee" / "bin" / "as",
|
||||
#"ee-gcc": compiler_dir / "bin" / "ee-gcc",
|
||||
#"cc1": compiler_dir / "lib" / "gcc-lib" / "ee" / ee_compiler_dirname / "cc1",
|
||||
#"cc1plus": compiler_dir / "lib" / "gcc-lib" / "ee" / ee_compiler_dirname / "cc1plus",
|
||||
#"cpp": compiler_dir / "lib" / "gcc-lib" / "ee" / ee_compiler_dirname / "cpp",
|
||||
#"as": compiler_dir / "ee" / "bin" / "as",
|
||||
}
|
||||
|
||||
return commands[command]
|
||||
#return commands[command]
|
||||
|
||||
|
||||
def make_compiler_cmd(config_dir: Path, src_path: Path, language: str):
|
||||
rel_root = Path(os.path.relpath(ROOT, config_dir))
|
||||
tools_dir = rel_root / "tools"
|
||||
|
||||
game_cc_dir = f"{tools_dir}/cc/{COMPILER}/bin"
|
||||
lib_cc_dir = f"{tools_dir}/cc/{COMPILER}/bin"
|
||||
game_cc_dir = f"{tools_dir}/cc/{COMPILER}"
|
||||
|
||||
compiler_includes = f"-I{src_path.parent / 'src'} -I{src_path.parent / 'include'} -Iinclude -isystem include/sdk/ee -isystem include/gcc"
|
||||
assembler_includes = f"-Wa,-I{src_path.parent / 'include'} -Wa,-I{src_path.parent}"
|
||||
compiler_includes = f"-I{src_path.parent / 'src'} -I{src_path.parent / 'include'} -Iinclude/sdk/ee"
|
||||
assembler_includes = f"-I{src_path.parent / 'include'} -I{src_path.parent}"
|
||||
common_includes = f"{compiler_includes} {assembler_includes}"
|
||||
game_compile_cmd = f"{game_cc_dir}/ee-gcc -c {common_includes} {COMPILER_FLAGS}"
|
||||
lib_compile_cmd = f"{lib_cc_dir}/ee-gcc -c -isystem include/{COMPILER} {common_includes} {COMPILER_FLAGS}"
|
||||
game_compile_cmd = f"{WIBO} {game_cc_dir}/mwccps2.exe -c {common_includes} {COMPILER_FLAGS}"
|
||||
|
||||
return game_compile_cmd, lib_compile_cmd, common_includes
|
||||
|
||||
|
||||
WIBO_VER = "0.6.4"
|
||||
return game_compile_cmd, common_includes
|
||||
|
||||
|
||||
def exec_shell(command: list[str]) -> str:
|
||||
@@ -149,17 +145,17 @@ def clean(config_dir: Path, config: dict[str, Any]):
|
||||
|
||||
|
||||
def write_permuter_settings(config_dir: Path, src_path: Path, language: str):
|
||||
game_compile_cmd, _, _ = make_compiler_cmd(config_dir, src_path, language)
|
||||
game_compile_cmd, _ = make_compiler_cmd(config_dir, src_path, language)
|
||||
with open(config_dir / "permuter_settings.toml", "w") as f:
|
||||
f.write(
|
||||
f"""compiler_command = "{game_compile_cmd} -D__GNUC__"
|
||||
assembler_command = "{CROSS}as -march=r5900 -mabi=eabi -Iinclude"
|
||||
compiler_type = "gcc"
|
||||
compiler_type = "mwcc"
|
||||
|
||||
[preserve_macros]
|
||||
|
||||
[decompme.compilers]
|
||||
"tools/build/cc/gcc/gcc" = "{COMPILER}"
|
||||
"tools/build/cc/mwcc/mwcc" = "{COMPILER}"
|
||||
"""
|
||||
)
|
||||
|
||||
@@ -177,7 +173,7 @@ def build_stuff(
|
||||
pre_elf_path = f"build/{basename}.elf"
|
||||
|
||||
src_path = Path(config["options"]["src_path"])
|
||||
game_compile_cmd, lib_compile_cmd, common_includes = make_compiler_cmd(config_dir, src_path, language)
|
||||
game_compile_cmd, common_includes = make_compiler_cmd(config_dir, src_path, language)
|
||||
|
||||
built_objects: set[Path] = set()
|
||||
|
||||
@@ -213,9 +209,10 @@ def build_stuff(
|
||||
ninja = ninja_syntax.Writer(open(str(ROOT / config_dir / "build.ninja"), "w"), width=9999)
|
||||
|
||||
# Rules
|
||||
ld_args = "--no-warn-rwx-segments -EL -T undefined_syms.txt -T undefined_syms_auto.txt -T undefined_funcs_auto.txt -Map $mapfile -T $in -o $out"
|
||||
ld_args = "-map -lcf $in -o $out"
|
||||
|
||||
cpp = Path("..", "..", get_compiler_command("cpp"))
|
||||
ld = Path("..", (Path("tools") / "cc" / COMPILER / "mwldps2.exe"))
|
||||
cpp = Path("..", (Path("tools") / "cc" / COMPILER / "mwccps2.exe"))
|
||||
|
||||
ninja.rule(
|
||||
"as",
|
||||
@@ -223,7 +220,7 @@ def build_stuff(
|
||||
# NOTE: Japanese strings are EUC-JP encoded!!
|
||||
# We need to convert them from (-f) UTF-8 to (-t) EUC-JP while compiling,
|
||||
# otherwise Japanese strings will be compiled wrong!
|
||||
command=f"{cpp} {common_includes} $in -o - | iconv -f=UTF-8 -t=EUC-JP | {CROSS}as -no-pad-sections -EL -march=5900 -mabi=eabi -I{src_path.parent / 'include'} -o $out",
|
||||
command=f"{WIBO} {cpp} {common_includes} $in -o - | iconv -f=UTF-8 -t=EUC-JP | {CROSS}as -no-pad-sections -EL -march=5900 -mabi=eabi -I{src_path.parent / 'include'} -o $out",
|
||||
)
|
||||
|
||||
ninja.rule(
|
||||
@@ -235,14 +232,14 @@ def build_stuff(
|
||||
f"{game_compile_cmd.replace(' -c ', ' -S ')} $in -o $$s_in && " # .......... 3) replace -c with -S in gcc command to generate intermediate assembly file instead of object
|
||||
f"python3 {ROOT}/tools/python/fix_asm_matching.py {language} $$s_in && " # . 4) fix assembly file using known patterns with tools/python/fix_asm_matching.py
|
||||
f"{game_compile_cmd} $$s_in -o $out && " # ................................. 5) compile assembly file into object
|
||||
f"{CROSS}strip $out -N dummy-symbol-name" # ................................ 6) strip 'dummy-symbol-name' from object
|
||||
f"{ld}strip $out -N dummy-symbol-name" # ................................ 6) strip 'dummy-symbol-name' from object
|
||||
),
|
||||
)
|
||||
|
||||
ninja.rule(
|
||||
"cc",
|
||||
description="cc $in",
|
||||
command=f"{game_compile_cmd} $in -o $out && {CROSS}strip $out -N dummy-symbol-name",
|
||||
command=f"{game_compile_cmd} $in -o $out && {ld}strip $out -N dummy-symbol-name",
|
||||
)
|
||||
|
||||
ninja.rule(
|
||||
@@ -251,22 +248,22 @@ def build_stuff(
|
||||
command=(
|
||||
f"eucjp_in=$$(echo $in.eucjp.c | sed 's,^[^/]*/[^/]*/,cc-src/,') && " # . 1) remove ../../ from path + prefix with cc-src/ + suffix with .eucjp.c and store it into eucjp_in var: ../src/file.c -> eucjp_in=cc-src/src/file.c.eucjp.c
|
||||
f'mkdir -p $$(dirname "$$eucjp_in") && ' # .............................. 2) create directory from eucjp_in var: s_in=cc-src/src/path/to/file.c.eucjp.c -> mkdir -p cc-src/src/path/to/
|
||||
f"iconv -o $$eucjp_in -f=UTF-8 -t=EUC-JP $in && " # ..................... 3) convert source file to EUC-JP (save converted source to cc-src/src/file.c.eucjp.c)
|
||||
#f"iconv -o $$eucjp_in -f=UTF-8 -t=EUC-JP $in && " # ..................... 3) convert source file to EUC-JP (save converted source to cc-src/src/file.c.eucjp.c)
|
||||
f'{game_compile_cmd} -I$$(dirname "$in") $$eucjp_in -o $out && ' # ...... 4) compile converted source file into object (also add original source directory as include path to allow relative imports)
|
||||
f"{CROSS}strip $out -N dummy-symbol-name" # ............................. 5) strip 'dummy-symbol-name' from object
|
||||
),
|
||||
)
|
||||
|
||||
ninja.rule(
|
||||
"libcc",
|
||||
description="cc $in",
|
||||
command=f"{lib_compile_cmd} $in -o $out && {CROSS}strip $out -N dummy-symbol-name",
|
||||
)
|
||||
#ninja.rule(
|
||||
# "libcc",
|
||||
# description="cc $in",
|
||||
# command=f"{lib_compile_cmd} $in -o $out && {ld}strip $out -N dummy-symbol-name",
|
||||
# )
|
||||
|
||||
ninja.rule(
|
||||
"ld",
|
||||
description="link $out",
|
||||
command=f"{CROSS}ld {ld_args}",
|
||||
command=f"{WIBO} {ld} {ld_args}",
|
||||
)
|
||||
|
||||
ninja.rule(
|
||||
@@ -278,7 +275,7 @@ def build_stuff(
|
||||
ninja.rule(
|
||||
"elf",
|
||||
description="elf $out",
|
||||
command=f"{CROSS}objcopy $in $out -O binary && python3 {ROOT}/tools/python/fix_bin_matching.py {language} $out",
|
||||
command=f"{ld}objcopy $in $out -O binary && python3 {ROOT}/tools/python/fix_bin_matching.py {language} $out",
|
||||
)
|
||||
|
||||
for entry in linker_entries:
|
||||
@@ -304,12 +301,6 @@ def build_stuff(
|
||||
if any(str(src_path).startswith("src/lib/") for src_path in entry.src_paths):
|
||||
build(entry.object_path, entry.src_paths, "libcc")
|
||||
|
||||
elif entry.object_path.name in ASM_PATCH_LIST:
|
||||
build(entry.object_path, entry.src_paths, "cc-s")
|
||||
|
||||
elif entry.object_path.name in EUC_JP_LIST:
|
||||
build(entry.object_path, entry.src_paths, "cc-eucjp")
|
||||
|
||||
else:
|
||||
build(entry.object_path, entry.src_paths, "cc")
|
||||
|
||||
@@ -351,6 +342,162 @@ def build_stuff(
|
||||
)
|
||||
|
||||
|
||||
def get_line_file_path(args: AnnotationArgs):
|
||||
if args.line_file_path is not None:
|
||||
return args.line_file_path
|
||||
|
||||
# if args.elf_path.name == SH2_SERIAL and "Event/stage" in args.asm_path.as_posix():
|
||||
# return Path(f"{TOOLS}/alessatool/dwarf") / Path(args.asm_path.name).with_suffix(".line")
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def line_has_vram_addr(line: str, addr_str: str) -> bool:
|
||||
if addr_str not in line or "*/" not in line:
|
||||
return False
|
||||
|
||||
return line.index("*/") > line.index(addr_str)
|
||||
|
||||
|
||||
def annotate_asm(args: AnnotationArgs):
|
||||
with open(args.asm_path, "r") as asm_file:
|
||||
asm_contents = asm_file.read()
|
||||
|
||||
asm_lines = asm_contents.splitlines()
|
||||
asm_line_index = 0
|
||||
|
||||
vram_start = args.vram_start
|
||||
vram_end = args.vram_end
|
||||
|
||||
if vram_start is None or vram_end is None:
|
||||
vram_start, vram_end = find_vram_bounds(asm_lines)
|
||||
|
||||
line_file_path = get_line_file_path(args)
|
||||
|
||||
if line_file_path is None or not line_file_path.exists():
|
||||
addresses = (f"0x{v:X}" for v in range(vram_start, vram_end, 0x4))
|
||||
proc = run([args.addr2line_path, "-e", args.elf_path, *addresses], capture_output=True, encoding=args.encoding)
|
||||
addr2line_output_lines = proc.stdout.splitlines()
|
||||
else:
|
||||
# parse the binary line number file.
|
||||
|
||||
# the format is a list of u_shorts, one per line number.
|
||||
# there should be one line number per vram address, and each vram
|
||||
# address should be exactly 4 bytes apart, mirroring how the addr2line
|
||||
# output is formatted
|
||||
|
||||
with open(line_file_path, "rb") as line_file:
|
||||
line_data = line_file.read()
|
||||
line_numbers = unpack(f"<{len(line_data) // 2}H", line_data)
|
||||
compile_unit = args.asm_path.with_suffix(".c").name
|
||||
addr2line_output_lines = list(map(lambda n : to_addr2line_format(compile_unit, n), line_numbers))
|
||||
|
||||
main_tu_name = None
|
||||
prev_tu_name = None
|
||||
prev_line_number = -1
|
||||
function_count = 0
|
||||
is_in_function_label = False
|
||||
current_vram_addr = vram_start
|
||||
annotated_asm_lines = []
|
||||
|
||||
for addr_index in range(0, len(addr2line_output_lines) - 1):
|
||||
line = addr2line_output_lines[addr_index]
|
||||
|
||||
if line.startswith("?"):
|
||||
current_vram_addr += 0x4
|
||||
continue
|
||||
|
||||
separator_index = line.rfind(":")
|
||||
current_line_number = int(line[separator_index+1:])
|
||||
|
||||
if current_line_number == prev_line_number:
|
||||
current_vram_addr += 0x4
|
||||
continue
|
||||
|
||||
vram_addr_str = f"{current_vram_addr:X}"
|
||||
|
||||
current_tu_name = line[0:separator_index]
|
||||
if current_tu_name != main_tu_name and current_tu_name != prev_tu_name:
|
||||
if main_tu_name:
|
||||
print(f"[warn] alessatool/annotate: address at {vram_addr_str} belongs to {current_tu_name}")
|
||||
else:
|
||||
main_tu_name = current_tu_name
|
||||
prev_tu_name = current_tu_name
|
||||
|
||||
while True:
|
||||
if asm_line_index >= len(asm_lines):
|
||||
raise AssertionError(
|
||||
f"address 0x{current_vram_addr:X} not found in asm"
|
||||
)
|
||||
|
||||
asm_line = asm_lines[asm_line_index]
|
||||
|
||||
if line_has_vram_addr(asm_line, vram_addr_str):
|
||||
break
|
||||
|
||||
should_append_asm_line = True
|
||||
if args.tu:
|
||||
asm_line_trimmed = asm_line.strip()
|
||||
|
||||
# track when we go in & out of function symbols
|
||||
if asm_line_trimmed.startswith(FUNCTION_SYMBOL_LABEL):
|
||||
function_count += 1
|
||||
is_in_function_label = True
|
||||
annotated_asm_lines.append(f"{UNIQUE_TEXT_SECTION_DIRECTIVE}{function_count}")
|
||||
annotated_asm_lines.append("")
|
||||
elif asm_line_trimmed.startswith(END_FUNCTION_SYMBOL_LABEL):
|
||||
is_in_function_label = False
|
||||
|
||||
# remove `nop`s
|
||||
if not is_in_function_label and asm_line_trimmed.endswith("nop"):
|
||||
should_append_asm_line = False
|
||||
|
||||
# remove `macro.inc` include directive
|
||||
elif asm_line_trimmed == INCLUDE_MACRO_INC_DIRECTIVE:
|
||||
should_append_asm_line = False
|
||||
|
||||
if should_append_asm_line:
|
||||
annotated_asm_lines.append(asm_line)
|
||||
|
||||
asm_line_index += 1
|
||||
|
||||
annotated_asm_lines.append(f"\t.loc 1 {current_line_number}")
|
||||
annotated_asm_lines.append(asm_line)
|
||||
asm_line_index += 1
|
||||
|
||||
prev_line_number = current_line_number
|
||||
current_vram_addr += 0x4
|
||||
|
||||
while asm_line_index < len(asm_lines) - 1:
|
||||
annotated_asm_lines.append(asm_lines[asm_line_index])
|
||||
asm_line_index += 1
|
||||
|
||||
assert main_tu_name, "no valid compilation unit found"
|
||||
annotated_asm_lines = [
|
||||
".section .debug",
|
||||
".previous",
|
||||
".text",
|
||||
f".file 1 \"{main_tu_name}\"",
|
||||
*annotated_asm_lines
|
||||
]
|
||||
|
||||
append_final_new_line(annotated_asm_lines)
|
||||
annotated_asm_contents = "\n".join(annotated_asm_lines)
|
||||
|
||||
if not args.stdout and args.out_path:
|
||||
with open(args.out_path, "w") as out_file:
|
||||
out_file.write(annotated_asm_contents)
|
||||
if args.verbose:
|
||||
print(f"alessatool/annotate: wrote asm to {args.out_path}")
|
||||
else:
|
||||
stdout.write(annotated_asm_contents)
|
||||
|
||||
|
||||
def append_final_new_line(lines: list[str]):
|
||||
if lines[-1] != "":
|
||||
lines.append("")
|
||||
|
||||
|
||||
def make_asm(config_path: Path, config: dict[str, Any]):
|
||||
"""
|
||||
Extracts assembly for each function into 'expected/asm/' subfolder.
|
||||
@@ -456,7 +603,7 @@ def make_asm(config_path: Path, config: dict[str, Any]):
|
||||
tmp_obj_path = tmp_path / "obj"
|
||||
tmp_asm_dir = tmp_path / "asm"
|
||||
|
||||
cpp = Path("..", "..", "..", get_compiler_command("cpp"))
|
||||
cpp = Path("..", "..", "..", (Path("tools") / "cc" / COMPILER))
|
||||
|
||||
for asm_file in tmp_asm_dir.rglob("*.c.s"):
|
||||
asm_file_rel = asm_file.relative_to(tmp_path)
|
||||
@@ -464,8 +611,8 @@ def make_asm(config_path: Path, config: dict[str, Any]):
|
||||
obj_file = tmp_obj_path / obj_file_rel.relative_to("obj")
|
||||
obj_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
subprocess.run(
|
||||
f"{cpp} -I../src -I../include -Iinclude -isystem include/sdk/ee -isystem include/gcc -Wa,-I../include -Wa,-I../.. '{asm_file_rel}' -o - | "
|
||||
f"iconv -f=UTF-8 -t=EUC-JP '{asm_file_rel}' | "
|
||||
f"{cpp} -I../src -I../include -Iinclude -Iinclude/sdk/ee -I../.. '{asm_file_rel}' -o - | "
|
||||
#f"iconv -f=UTF-8 -t=EUC-JP '{asm_file_rel}' | "
|
||||
f"mips-linux-gnu-as -no-pad-sections -EL -march=5900 -mabi=eabi -I../include -o {obj_file_rel} {asm_file_rel}",
|
||||
shell=True,
|
||||
cwd=tmp_path,
|
||||
@@ -590,6 +737,85 @@ def generate_objdiff_configuration(config_path: Path, config: dict[str, Any], la
|
||||
print(f"Wrote objdiff configuration ({len(units)} units) to {objdiff_path}")
|
||||
|
||||
|
||||
SECTION_ALIGNMENT_PAIRS: list[tuple[str, int]] = [
|
||||
(".text", 0x10),
|
||||
(".data", 0x8),
|
||||
(".rodata", 0x8),
|
||||
(".lit4", 0x4),
|
||||
(".sdata", 0x4),
|
||||
(".sbss", 0x4),
|
||||
(".bss", 0x10),
|
||||
]
|
||||
|
||||
TRACKED_SEGMENT_TYPES = ["asm", "c", "data", "rodata"]
|
||||
|
||||
def generate_lcf():
|
||||
'''
|
||||
Generate a linker command file. It uses an oversimplified method of looping
|
||||
over the linker entries emitted by Splat and looking for splits that are
|
||||
parented to a `code` segment. Then it writes out the list of object files
|
||||
for each section.
|
||||
|
||||
Expects a template file with the extension `.inc.lcf`.
|
||||
'''
|
||||
|
||||
entries_by_section_type: dict[str, list[LinkerEntry]] = dict()
|
||||
for section_type, _ in SECTION_ALIGNMENT_PAIRS:
|
||||
entries_by_section_type[section_type] = []
|
||||
|
||||
for entry in split.linker_writer.entries:
|
||||
segment = entry.segment
|
||||
parent = segment.parent
|
||||
|
||||
if not parent or parent.type != "code":
|
||||
continue
|
||||
|
||||
section_type = entry.section_link_type
|
||||
if section_type not in entries_by_section_type:
|
||||
continue
|
||||
|
||||
entries_by_section_type[section_type].append(entry)
|
||||
|
||||
lcf_blocks: list[str] = []
|
||||
|
||||
for section_type, alignment in SECTION_ALIGNMENT_PAIRS:
|
||||
objects = entries_by_section_type[section_type]
|
||||
if not objects:
|
||||
continue
|
||||
if section_type == ".bss":
|
||||
alignment = args.bss_alignment
|
||||
|
||||
block = [
|
||||
f"\t\t# {section_type}",
|
||||
f"\t\t__{section_type[1:]}_start = .;",
|
||||
f"\t\tALIGNALL(0x{alignment:X});",
|
||||
]
|
||||
for entry in objects:
|
||||
alignment = entry.segment.ld_align_segment_start
|
||||
if alignment is not None:
|
||||
block.append(f"\t\tALIGNALL(0x{alignment:X});")
|
||||
|
||||
object_name = entry.object_path.name
|
||||
block.append(f"\t\t{object_name} ({section_type})")
|
||||
|
||||
lcf_blocks.append("\n".join(block))
|
||||
|
||||
generated_lcf = "\n\n".join(lcf_blocks)
|
||||
|
||||
template_path = args.template_path
|
||||
output_path = args.lcf_output_path
|
||||
|
||||
template = template_path.read_text()
|
||||
output = template.replace(
|
||||
"### 🔴 code 🔴 ###",
|
||||
generated_lcf.strip(),
|
||||
)
|
||||
output_path.write_text(output)
|
||||
|
||||
if args.verbose:
|
||||
print(f"✅ Mullberry/generate: wrote LCF to {output_path}")
|
||||
|
||||
|
||||
def main():
|
||||
class ArgsProtocol(Protocol):
|
||||
YAML_FILE: Path
|
||||
@@ -622,22 +848,13 @@ def main():
|
||||
)
|
||||
args = cast(ArgsProtocol, parser.parse_args())
|
||||
|
||||
# try:
|
||||
# exec_shell(["wibo"])
|
||||
# except FileNotFoundError:
|
||||
# print("ERROR: wibo does not appear to be accessible")
|
||||
# print("To install it, please download it and put it in your PATH:")
|
||||
# print(
|
||||
# f" wget https://github.com/decompals/wibo/releases/download/{WIBO_VER}/wibo && "
|
||||
# f"chmod +x wibo && sudo mv wibo /usr/bin/"
|
||||
# )
|
||||
# sys.exit(1)
|
||||
|
||||
cwd = Path(os.getcwd()).resolve()
|
||||
if not ROOT.samefile(cwd):
|
||||
print("ERROR: this script must be run from it's directory!")
|
||||
exit(1)
|
||||
|
||||
compilerOptions["MWCCPS2"].value.bigAddendWorkaroundForMigratedFunctions = False
|
||||
|
||||
config = splat_load_yaml(
|
||||
[args.YAML_FILE],
|
||||
modes=["all"],
|
||||
@@ -648,6 +865,9 @@ def main():
|
||||
basename = config["options"]["basename"]
|
||||
config_dir = Path(args.YAML_FILE).parent
|
||||
|
||||
compiler_dir = Path("tools") / "cc" / COMPILER
|
||||
|
||||
|
||||
if basename not in LANGUAGES:
|
||||
supported_elfs = f"{set(f'{elf} ({lang})' for elf, lang in LANGUAGES.items())}".replace("'", "")
|
||||
print(f"unsupported game ELF. Supported versions are: {supported_elfs}")
|
||||
@@ -677,6 +897,9 @@ def main():
|
||||
assert asm_data_path.is_dir(), f"{asm_data_path} not found or not a directory"
|
||||
assert asset_rel_path.is_dir(), f"{asset_rel_path} not found or not a directory"
|
||||
|
||||
generate_lcf()
|
||||
|
||||
|
||||
# fix asset .incbin path from relative to root to relative to config dir:
|
||||
# e.g., change:
|
||||
# .incbin "config/assets/name.section.bin"
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Reference in New Issue
Block a user