From 00cc73f20eaab0d9ece6eb3972e6b1ffeb75d717 Mon Sep 17 00:00:00 2001 From: Matthew Stanley <1379tech@gmail.com> Date: Thu, 23 Apr 2026 14:25:34 -0700 Subject: [PATCH] feat: GPU semi-transparency + 85 GTE library seeds + debug commands GPU fixes: - Mono tri/quad/rect/dot/8x8/lines: route through sw_renderer with semi-transparency support (bit 25 extraction + sw_set_semi_transparency) - Add 16x16 mono sprite (0x78-0x7B) and 1x1 textured dot (0x6C-0x6F) - Add per-opcode execution counter (gpu_get_opcode_count) GTE library: batch-discovered 85 functions in BFC33000-BFC36000 including SetRotMatrix, SetTransMatrix, and full transform pipeline. Emitted: 1173 (was 1086). Seeds: 955. Zero dispatch misses. Debug commands: gpu_opcodes, gte_state, screenshot_file (BMP to disk). Co-Authored-By: Claude Opus 4.6 (1M context) --- generated/SCPH1001_dispatch.c | 180 +- generated/SCPH1001_full.c | 3500 +++++++- recompiler/seeds/phase2_ghidra_seeds.json | 9141 +++++++++++---------- runtime/src/debug_server.c | 43 + runtime/src/gpu.c | 95 +- 5 files changed, 8552 insertions(+), 4407 deletions(-) diff --git a/generated/SCPH1001_dispatch.c b/generated/SCPH1001_dispatch.c index b8d27553..87103ce5 100644 --- a/generated/SCPH1001_dispatch.c +++ b/generated/SCPH1001_dispatch.c @@ -1,7 +1,7 @@ /* AUTO-GENERATED by psxrecomp-bios --emit-full. DO NOT EDIT. * * BIOS SHA256: 71af94d1e47a68c11e8fdb9f8368040601514a42a5a399cda48c7d3bff1e99d3 - * Dispatch entries: 1087 + * Dispatch entries: 1174 */ #include "cpu_state.h" @@ -847,15 +847,57 @@ extern void func_1FC33358(CPUState* cpu); extern void func_1FC33400(CPUState* cpu); extern void func_1FC33538(CPUState* cpu); extern void func_1FC336F0(CPUState* cpu); +extern void func_1FC33758(CPUState* cpu); +extern void func_1FC337AC(CPUState* cpu); +extern void func_1FC33800(CPUState* cpu); +extern void func_1FC3388C(CPUState* cpu); +extern void func_1FC33918(CPUState* cpu); +extern void func_1FC33978(CPUState* cpu); extern void func_1FC339F0(CPUState* cpu); +extern void func_1FC33AB8(CPUState* cpu); +extern void func_1FC33B80(CPUState* cpu); +extern void func_1FC33C04(CPUState* cpu); +extern void func_1FC33C84(CPUState* cpu); extern void func_1FC33C98(CPUState* cpu); extern void func_1FC33CC0(CPUState* cpu); +extern void func_1FC33D24(CPUState* cpu); +extern void func_1FC33DA4(CPUState* cpu); +extern void func_1FC33E20(CPUState* cpu); +extern void func_1FC33E80(CPUState* cpu); +extern void func_1FC33E90(CPUState* cpu); +extern void func_1FC33EA0(CPUState* cpu); +extern void func_1FC33EC0(CPUState* cpu); +extern void func_1FC33ECC(CPUState* cpu); +extern void func_1FC33EE0(CPUState* cpu); +extern void func_1FC33EF4(CPUState* cpu); extern void func_1FC33F00(CPUState* cpu); extern void func_1FC33F20(CPUState* cpu); +extern void func_1FC33F40(CPUState* cpu); +extern void func_1FC33F54(CPUState* cpu); +extern void func_1FC33F6C(CPUState* cpu); +extern void func_1FC33F80(CPUState* cpu); +extern void func_1FC33F94(CPUState* cpu); +extern void func_1FC33FA8(CPUState* cpu); extern void func_1FC33FB4(CPUState* cpu); extern void func_1FC33FCC(CPUState* cpu); extern void func_1FC33FD8(CPUState* cpu); extern void func_1FC33FE4(CPUState* cpu); +extern void func_1FC33FF0(CPUState* cpu); +extern void func_1FC33FFC(CPUState* cpu); +extern void func_1FC34008(CPUState* cpu); +extern void func_1FC3401C(CPUState* cpu); +extern void func_1FC34028(CPUState* cpu); +extern void func_1FC3403C(CPUState* cpu); +extern void func_1FC34054(CPUState* cpu); +extern void func_1FC34068(CPUState* cpu); +extern void func_1FC3407C(CPUState* cpu); +extern void func_1FC34088(CPUState* cpu); +extern void func_1FC3409C(CPUState* cpu); +extern void func_1FC340CC(CPUState* cpu); +extern void func_1FC340D8(CPUState* cpu); +extern void func_1FC340E4(CPUState* cpu); +extern void func_1FC34104(CPUState* cpu); +extern void func_1FC34110(CPUState* cpu); extern void func_1FC34160(CPUState* cpu); extern void func_1FC34304(CPUState* cpu); extern void func_1FC344A4(CPUState* cpu); @@ -863,15 +905,60 @@ extern void func_1FC345F4(CPUState* cpu); extern void func_1FC34748(CPUState* cpu); extern void func_1FC34898(CPUState* cpu); extern void func_1FC348FC(CPUState* cpu); +extern void func_1FC34924(CPUState* cpu); +extern void func_1FC34928(CPUState* cpu); +extern void func_1FC34954(CPUState* cpu); +extern void func_1FC34958(CPUState* cpu); +extern void func_1FC34980(CPUState* cpu); +extern void func_1FC34984(CPUState* cpu); extern void func_1FC349B8(CPUState* cpu); +extern void func_1FC34A04(CPUState* cpu); +extern void func_1FC34A08(CPUState* cpu); +extern void func_1FC34A30(CPUState* cpu); +extern void func_1FC34A34(CPUState* cpu); +extern void func_1FC34A60(CPUState* cpu); +extern void func_1FC34A64(CPUState* cpu); +extern void func_1FC34A90(CPUState* cpu); +extern void func_1FC34AA0(CPUState* cpu); extern void func_1FC34AF0(CPUState* cpu); +extern void func_1FC34B08(CPUState* cpu); extern void func_1FC34B58(CPUState* cpu); +extern void func_1FC34EC0(CPUState* cpu); +extern void func_1FC34EC4(CPUState* cpu); +extern void func_1FC35128(CPUState* cpu); +extern void func_1FC3524C(CPUState* cpu); +extern void func_1FC35348(CPUState* cpu); +extern void func_1FC35470(CPUState* cpu); +extern void func_1FC35598(CPUState* cpu); +extern void func_1FC35698(CPUState* cpu); +extern void func_1FC357C4(CPUState* cpu); +extern void func_1FC3582C(CPUState* cpu); extern void func_1FC3586C(CPUState* cpu); +extern void func_1FC35890(CPUState* cpu); extern void func_1FC359B4(CPUState* cpu); extern void func_1FC35AD8(CPUState* cpu); extern void func_1FC35B08(CPUState* cpu); extern void func_1FC35B38(CPUState* cpu); extern void func_1FC35B68(CPUState* cpu); +extern void func_1FC35B88(CPUState* cpu); +extern void func_1FC35BC4(CPUState* cpu); +extern void func_1FC35C28(CPUState* cpu); +extern void func_1FC35C60(CPUState* cpu); +extern void func_1FC35CC8(CPUState* cpu); +extern void func_1FC35D10(CPUState* cpu); +extern void func_1FC35D58(CPUState* cpu); +extern void func_1FC35DA0(CPUState* cpu); +extern void func_1FC35DD4(CPUState* cpu); +extern void func_1FC35E30(CPUState* cpu); +extern void func_1FC35E64(CPUState* cpu); +extern void func_1FC35E98(CPUState* cpu); +extern void func_1FC35EC0(CPUState* cpu); +extern void func_1FC35EEC(CPUState* cpu); +extern void func_1FC35F18(CPUState* cpu); +extern void func_1FC35F38(CPUState* cpu); +extern void func_1FC35F78(CPUState* cpu); +extern void func_1FC35FA0(CPUState* cpu); +extern void func_1FC35FD0(CPUState* cpu); extern void func_1FC36068(CPUState* cpu); extern void func_1FC362D0(CPUState* cpu); extern void func_1FC36740(CPUState* cpu); @@ -1113,7 +1200,7 @@ typedef struct { PsxRecompFunc func; } DispatchEntry; -static const DispatchEntry dispatch_table[1087] = { +static const DispatchEntry dispatch_table[1174] = { { 0x00000500u, func_00000500 }, { 0x00000510u, func_00000510 }, { 0x00000520u, func_00000520 }, @@ -1943,15 +2030,57 @@ static const DispatchEntry dispatch_table[1087] = { { 0x1FC33400u, func_1FC33400 }, { 0x1FC33538u, func_1FC33538 }, { 0x1FC336F0u, func_1FC336F0 }, + { 0x1FC33758u, func_1FC33758 }, + { 0x1FC337ACu, func_1FC337AC }, + { 0x1FC33800u, func_1FC33800 }, + { 0x1FC3388Cu, func_1FC3388C }, + { 0x1FC33918u, func_1FC33918 }, + { 0x1FC33978u, func_1FC33978 }, { 0x1FC339F0u, func_1FC339F0 }, + { 0x1FC33AB8u, func_1FC33AB8 }, + { 0x1FC33B80u, func_1FC33B80 }, + { 0x1FC33C04u, func_1FC33C04 }, + { 0x1FC33C84u, func_1FC33C84 }, { 0x1FC33C98u, func_1FC33C98 }, { 0x1FC33CC0u, func_1FC33CC0 }, + { 0x1FC33D24u, func_1FC33D24 }, + { 0x1FC33DA4u, func_1FC33DA4 }, + { 0x1FC33E20u, func_1FC33E20 }, + { 0x1FC33E80u, func_1FC33E80 }, + { 0x1FC33E90u, func_1FC33E90 }, + { 0x1FC33EA0u, func_1FC33EA0 }, + { 0x1FC33EC0u, func_1FC33EC0 }, + { 0x1FC33ECCu, func_1FC33ECC }, + { 0x1FC33EE0u, func_1FC33EE0 }, + { 0x1FC33EF4u, func_1FC33EF4 }, { 0x1FC33F00u, func_1FC33F00 }, { 0x1FC33F20u, func_1FC33F20 }, + { 0x1FC33F40u, func_1FC33F40 }, + { 0x1FC33F54u, func_1FC33F54 }, + { 0x1FC33F6Cu, func_1FC33F6C }, + { 0x1FC33F80u, func_1FC33F80 }, + { 0x1FC33F94u, func_1FC33F94 }, + { 0x1FC33FA8u, func_1FC33FA8 }, { 0x1FC33FB4u, func_1FC33FB4 }, { 0x1FC33FCCu, func_1FC33FCC }, { 0x1FC33FD8u, func_1FC33FD8 }, { 0x1FC33FE4u, func_1FC33FE4 }, + { 0x1FC33FF0u, func_1FC33FF0 }, + { 0x1FC33FFCu, func_1FC33FFC }, + { 0x1FC34008u, func_1FC34008 }, + { 0x1FC3401Cu, func_1FC3401C }, + { 0x1FC34028u, func_1FC34028 }, + { 0x1FC3403Cu, func_1FC3403C }, + { 0x1FC34054u, func_1FC34054 }, + { 0x1FC34068u, func_1FC34068 }, + { 0x1FC3407Cu, func_1FC3407C }, + { 0x1FC34088u, func_1FC34088 }, + { 0x1FC3409Cu, func_1FC3409C }, + { 0x1FC340CCu, func_1FC340CC }, + { 0x1FC340D8u, func_1FC340D8 }, + { 0x1FC340E4u, func_1FC340E4 }, + { 0x1FC34104u, func_1FC34104 }, + { 0x1FC34110u, func_1FC34110 }, { 0x1FC34160u, func_1FC34160 }, { 0x1FC34304u, func_1FC34304 }, { 0x1FC344A4u, func_1FC344A4 }, @@ -1959,15 +2088,60 @@ static const DispatchEntry dispatch_table[1087] = { { 0x1FC34748u, func_1FC34748 }, { 0x1FC34898u, func_1FC34898 }, { 0x1FC348FCu, func_1FC348FC }, + { 0x1FC34924u, func_1FC34924 }, + { 0x1FC34928u, func_1FC34928 }, + { 0x1FC34954u, func_1FC34954 }, + { 0x1FC34958u, func_1FC34958 }, + { 0x1FC34980u, func_1FC34980 }, + { 0x1FC34984u, func_1FC34984 }, { 0x1FC349B8u, func_1FC349B8 }, + { 0x1FC34A04u, func_1FC34A04 }, + { 0x1FC34A08u, func_1FC34A08 }, + { 0x1FC34A30u, func_1FC34A30 }, + { 0x1FC34A34u, func_1FC34A34 }, + { 0x1FC34A60u, func_1FC34A60 }, + { 0x1FC34A64u, func_1FC34A64 }, + { 0x1FC34A90u, func_1FC34A90 }, + { 0x1FC34AA0u, func_1FC34AA0 }, { 0x1FC34AF0u, func_1FC34AF0 }, + { 0x1FC34B08u, func_1FC34B08 }, { 0x1FC34B58u, func_1FC34B58 }, + { 0x1FC34EC0u, func_1FC34EC0 }, + { 0x1FC34EC4u, func_1FC34EC4 }, + { 0x1FC35128u, func_1FC35128 }, + { 0x1FC3524Cu, func_1FC3524C }, + { 0x1FC35348u, func_1FC35348 }, + { 0x1FC35470u, func_1FC35470 }, + { 0x1FC35598u, func_1FC35598 }, + { 0x1FC35698u, func_1FC35698 }, + { 0x1FC357C4u, func_1FC357C4 }, + { 0x1FC3582Cu, func_1FC3582C }, { 0x1FC3586Cu, func_1FC3586C }, + { 0x1FC35890u, func_1FC35890 }, { 0x1FC359B4u, func_1FC359B4 }, { 0x1FC35AD8u, func_1FC35AD8 }, { 0x1FC35B08u, func_1FC35B08 }, { 0x1FC35B38u, func_1FC35B38 }, { 0x1FC35B68u, func_1FC35B68 }, + { 0x1FC35B88u, func_1FC35B88 }, + { 0x1FC35BC4u, func_1FC35BC4 }, + { 0x1FC35C28u, func_1FC35C28 }, + { 0x1FC35C60u, func_1FC35C60 }, + { 0x1FC35CC8u, func_1FC35CC8 }, + { 0x1FC35D10u, func_1FC35D10 }, + { 0x1FC35D58u, func_1FC35D58 }, + { 0x1FC35DA0u, func_1FC35DA0 }, + { 0x1FC35DD4u, func_1FC35DD4 }, + { 0x1FC35E30u, func_1FC35E30 }, + { 0x1FC35E64u, func_1FC35E64 }, + { 0x1FC35E98u, func_1FC35E98 }, + { 0x1FC35EC0u, func_1FC35EC0 }, + { 0x1FC35EECu, func_1FC35EEC }, + { 0x1FC35F18u, func_1FC35F18 }, + { 0x1FC35F38u, func_1FC35F38 }, + { 0x1FC35F78u, func_1FC35F78 }, + { 0x1FC35FA0u, func_1FC35FA0 }, + { 0x1FC35FD0u, func_1FC35FD0 }, { 0x1FC36068u, func_1FC36068 }, { 0x1FC362D0u, func_1FC362D0 }, { 0x1FC36740u, func_1FC36740 }, @@ -2221,7 +2395,7 @@ void psx_dispatch(CPUState* cpu, uint32_t addr) { for (;;) { cpu->pc = 0; uint32_t phys = normalize(addr); - int lo = 0, hi = 1087 - 1; + int lo = 0, hi = 1174 - 1; int found = 0; while (lo <= hi) { int mid = (lo + hi) / 2; diff --git a/generated/SCPH1001_full.c b/generated/SCPH1001_full.c index 427726b8..c835a71d 100644 --- a/generated/SCPH1001_full.c +++ b/generated/SCPH1001_full.c @@ -1,7 +1,7 @@ /* AUTO-GENERATED by psxrecomp-bios --emit-full. DO NOT EDIT. * * BIOS SHA256: 71af94d1e47a68c11e8fdb9f8368040601514a42a5a399cda48c7d3bff1e99d3 - * Functions: 1087 + * Functions: 1174 */ #include "cpu_state.h" @@ -843,15 +843,57 @@ void func_1FC33358(CPUState* cpu); void func_1FC33400(CPUState* cpu); void func_1FC33538(CPUState* cpu); void func_1FC336F0(CPUState* cpu); +void func_1FC33758(CPUState* cpu); +void func_1FC337AC(CPUState* cpu); +void func_1FC33800(CPUState* cpu); +void func_1FC3388C(CPUState* cpu); +void func_1FC33918(CPUState* cpu); +void func_1FC33978(CPUState* cpu); void func_1FC339F0(CPUState* cpu); +void func_1FC33AB8(CPUState* cpu); +void func_1FC33B80(CPUState* cpu); +void func_1FC33C04(CPUState* cpu); +void func_1FC33C84(CPUState* cpu); void func_1FC33C98(CPUState* cpu); void func_1FC33CC0(CPUState* cpu); +void func_1FC33D24(CPUState* cpu); +void func_1FC33DA4(CPUState* cpu); +void func_1FC33E20(CPUState* cpu); +void func_1FC33E80(CPUState* cpu); +void func_1FC33E90(CPUState* cpu); +void func_1FC33EA0(CPUState* cpu); +void func_1FC33EC0(CPUState* cpu); +void func_1FC33ECC(CPUState* cpu); +void func_1FC33EE0(CPUState* cpu); +void func_1FC33EF4(CPUState* cpu); void func_1FC33F00(CPUState* cpu); void func_1FC33F20(CPUState* cpu); +void func_1FC33F40(CPUState* cpu); +void func_1FC33F54(CPUState* cpu); +void func_1FC33F6C(CPUState* cpu); +void func_1FC33F80(CPUState* cpu); +void func_1FC33F94(CPUState* cpu); +void func_1FC33FA8(CPUState* cpu); void func_1FC33FB4(CPUState* cpu); void func_1FC33FCC(CPUState* cpu); void func_1FC33FD8(CPUState* cpu); void func_1FC33FE4(CPUState* cpu); +void func_1FC33FF0(CPUState* cpu); +void func_1FC33FFC(CPUState* cpu); +void func_1FC34008(CPUState* cpu); +void func_1FC3401C(CPUState* cpu); +void func_1FC34028(CPUState* cpu); +void func_1FC3403C(CPUState* cpu); +void func_1FC34054(CPUState* cpu); +void func_1FC34068(CPUState* cpu); +void func_1FC3407C(CPUState* cpu); +void func_1FC34088(CPUState* cpu); +void func_1FC3409C(CPUState* cpu); +void func_1FC340CC(CPUState* cpu); +void func_1FC340D8(CPUState* cpu); +void func_1FC340E4(CPUState* cpu); +void func_1FC34104(CPUState* cpu); +void func_1FC34110(CPUState* cpu); void func_1FC34160(CPUState* cpu); void func_1FC34304(CPUState* cpu); void func_1FC344A4(CPUState* cpu); @@ -859,15 +901,60 @@ void func_1FC345F4(CPUState* cpu); void func_1FC34748(CPUState* cpu); void func_1FC34898(CPUState* cpu); void func_1FC348FC(CPUState* cpu); +void func_1FC34924(CPUState* cpu); +void func_1FC34928(CPUState* cpu); +void func_1FC34954(CPUState* cpu); +void func_1FC34958(CPUState* cpu); +void func_1FC34980(CPUState* cpu); +void func_1FC34984(CPUState* cpu); void func_1FC349B8(CPUState* cpu); +void func_1FC34A04(CPUState* cpu); +void func_1FC34A08(CPUState* cpu); +void func_1FC34A30(CPUState* cpu); +void func_1FC34A34(CPUState* cpu); +void func_1FC34A60(CPUState* cpu); +void func_1FC34A64(CPUState* cpu); +void func_1FC34A90(CPUState* cpu); +void func_1FC34AA0(CPUState* cpu); void func_1FC34AF0(CPUState* cpu); +void func_1FC34B08(CPUState* cpu); void func_1FC34B58(CPUState* cpu); +void func_1FC34EC0(CPUState* cpu); +void func_1FC34EC4(CPUState* cpu); +void func_1FC35128(CPUState* cpu); +void func_1FC3524C(CPUState* cpu); +void func_1FC35348(CPUState* cpu); +void func_1FC35470(CPUState* cpu); +void func_1FC35598(CPUState* cpu); +void func_1FC35698(CPUState* cpu); +void func_1FC357C4(CPUState* cpu); +void func_1FC3582C(CPUState* cpu); void func_1FC3586C(CPUState* cpu); +void func_1FC35890(CPUState* cpu); void func_1FC359B4(CPUState* cpu); void func_1FC35AD8(CPUState* cpu); void func_1FC35B08(CPUState* cpu); void func_1FC35B38(CPUState* cpu); void func_1FC35B68(CPUState* cpu); +void func_1FC35B88(CPUState* cpu); +void func_1FC35BC4(CPUState* cpu); +void func_1FC35C28(CPUState* cpu); +void func_1FC35C60(CPUState* cpu); +void func_1FC35CC8(CPUState* cpu); +void func_1FC35D10(CPUState* cpu); +void func_1FC35D58(CPUState* cpu); +void func_1FC35DA0(CPUState* cpu); +void func_1FC35DD4(CPUState* cpu); +void func_1FC35E30(CPUState* cpu); +void func_1FC35E64(CPUState* cpu); +void func_1FC35E98(CPUState* cpu); +void func_1FC35EC0(CPUState* cpu); +void func_1FC35EEC(CPUState* cpu); +void func_1FC35F18(CPUState* cpu); +void func_1FC35F38(CPUState* cpu); +void func_1FC35F78(CPUState* cpu); +void func_1FC35FA0(CPUState* cpu); +void func_1FC35FD0(CPUState* cpu); void func_1FC36068(CPUState* cpu); void func_1FC362D0(CPUState* cpu); void func_1FC36740(CPUState* cpu); @@ -127798,6 +127885,368 @@ label_BFC336F0: return; } +void func_1FC33758(CPUState* cpu) { +label_BFC33758: + psx_check_interrupts(cpu); + /* 0xBFC33758: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC3375C: C8890000 lwc2 gte[9], 0($a0) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC33760: C88A0004 lwc2 gte[10], 4($a0) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC33764: C88B0008 lwc2 gte[11], 8($a0) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (8))); + /* 0xBFC33768: 00000000 nop */ + /* nop */ + /* 0xBFC3376C: 4B98003D gte cmd 0x3D */ + gte_execute(cpu, 0x198003D); + /* 0xBFC33770: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC33774: 48874000 mtc2 $a3, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[7]; + /* 0xBFC33778: C8A90000 lwc2 gte[9], 0($a1) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[5]); + /* 0xBFC3377C: C8AA0004 lwc2 gte[10], 4($a1) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[5] + (4))); + /* 0xBFC33780: C8AB0008 lwc2 gte[11], 8($a1) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[5] + (8))); + /* 0xBFC33784: 00000000 nop */ + /* nop */ + /* 0xBFC33788: 4BA8003E gte cmd 0x3E */ + gte_execute(cpu, 0x1A8003E); + /* 0xBFC3378C: 8FA80010 lw $t0, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3378Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33790: 00000000 nop */ + /* nop */ + /* 0xBFC33794: E9090000 swc2 gte[9], 0($t0) */ + cpu->write_word(cpu->gpr[8], cpu->gte_data[9]); + /* 0xBFC33798: E9090000 swc2 gte[9], 0($t0) */ + cpu->write_word(cpu->gpr[8], cpu->gte_data[9]); + /* 0xBFC3379C: E90A0004 swc2 gte[10], 4($t0) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[8] + (4)), cpu->gte_data[10]); + /* 0xBFC337A0: E90B0008 swc2 gte[11], 8($t0) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[8] + (8)), cpu->gte_data[11]); + /* 0xBFC337A4: 03E00008 jr $ra */ + /* 0xBFC337A8: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC337AC(CPUState* cpu) { +label_BFC337AC: + psx_check_interrupts(cpu); + /* 0xBFC337AC: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC337B0: C8890000 lwc2 gte[9], 0($a0) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC337B4: C88A0004 lwc2 gte[10], 4($a0) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC337B8: C88B0008 lwc2 gte[11], 8($a0) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (8))); + /* 0xBFC337BC: 00000000 nop */ + /* nop */ + /* 0xBFC337C0: 4B90003D gte cmd 0x3D */ + gte_execute(cpu, 0x190003D); + /* 0xBFC337C4: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC337C8: 48874000 mtc2 $a3, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[7]; + /* 0xBFC337CC: C8A90000 lwc2 gte[9], 0($a1) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[5]); + /* 0xBFC337D0: C8AA0004 lwc2 gte[10], 4($a1) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[5] + (4))); + /* 0xBFC337D4: C8AB0008 lwc2 gte[11], 8($a1) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[5] + (8))); + /* 0xBFC337D8: 00000000 nop */ + /* nop */ + /* 0xBFC337DC: 4BA0003E gte cmd 0x3E */ + gte_execute(cpu, 0x1A0003E); + /* 0xBFC337E0: 8FA80010 lw $t0, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC337E0u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC337E4: 00000000 nop */ + /* nop */ + /* 0xBFC337E8: E9090000 swc2 gte[9], 0($t0) */ + cpu->write_word(cpu->gpr[8], cpu->gte_data[9]); + /* 0xBFC337EC: E9090000 swc2 gte[9], 0($t0) */ + cpu->write_word(cpu->gpr[8], cpu->gte_data[9]); + /* 0xBFC337F0: E90A0004 swc2 gte[10], 4($t0) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[8] + (4)), cpu->gte_data[10]); + /* 0xBFC337F4: E90B0008 swc2 gte[11], 8($t0) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[8] + (8)), cpu->gte_data[11]); + /* 0xBFC337F8: 03E00008 jr $ra */ + /* 0xBFC337FC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33800(CPUState* cpu) { +label_BFC33800: + psx_check_interrupts(cpu); + /* 0xBFC33800: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33800u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33804: 8C8A0004 lw $t2, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33804u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC33808: 00084C03 sra $t1, $t0, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC3380C: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC33810: 314AFFFF andi $t2, $t2, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC33814: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC33818: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC3381C: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC33820: 488A5800 mtc2 $t2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[10]; + /* 0xBFC33824: 00000000 nop */ + /* nop */ + /* 0xBFC33828: 4B98003D gte cmd 0x3D */ + gte_execute(cpu, 0x198003D); + /* 0xBFC3382C: 8CA80000 lw $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3382Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33830: 8CAA0004 lw $t2, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33830u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC33834: 00084C03 sra $t1, $t0, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC33838: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3383C: 314AFFFF andi $t2, $t2, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC33840: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC33844: 48874000 mtc2 $a3, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[7]; + /* 0xBFC33848: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC3384C: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC33850: 488A5800 mtc2 $t2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[10]; + /* 0xBFC33854: 00000000 nop */ + /* nop */ + /* 0xBFC33858: 4BA8003E gte cmd 0x3E */ + gte_execute(cpu, 0x1A8003E); + /* 0xBFC3385C: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC33860: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC33864: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC33868: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3386C: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC33870: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC33874: 8FAD0010 lw $t5, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33874u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC33878: 480A5800 mfc2 $t2, gte_data[11] */ + cpu->gpr[10] = cpu->gte_data[11]; + /* 0xBFC3387C: ADA80000 sw $t0, 0($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3387Cu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC33880: ADAA0004 sw $t2, 4($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33880u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC33884: 03E00008 jr $ra */ + /* 0xBFC33888: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3388C(CPUState* cpu) { +label_BFC3388C: + psx_check_interrupts(cpu); + /* 0xBFC3388C: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3388Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33890: 8C8A0004 lw $t2, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33890u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC33894: 00084C03 sra $t1, $t0, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC33898: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3389C: 314AFFFF andi $t2, $t2, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC338A0: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC338A4: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC338A8: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC338AC: 488A5800 mtc2 $t2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[10]; + /* 0xBFC338B0: 00000000 nop */ + /* nop */ + /* 0xBFC338B4: 4B90003D gte cmd 0x3D */ + gte_execute(cpu, 0x190003D); + /* 0xBFC338B8: 8CA80000 lw $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC338B8u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC338BC: 8CAA0004 lw $t2, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC338BCu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC338C0: 00084C03 sra $t1, $t0, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC338C4: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC338C8: 314AFFFF andi $t2, $t2, 0xFFFF */ + cpu->gpr[10] = cpu->gpr[10] & 0xFFFFu; + /* 0xBFC338CC: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC338D0: 48874000 mtc2 $a3, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[7]; + /* 0xBFC338D4: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC338D8: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC338DC: 488A5800 mtc2 $t2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[10]; + /* 0xBFC338E0: 00000000 nop */ + /* nop */ + /* 0xBFC338E4: 4BA0003E gte cmd 0x3E */ + gte_execute(cpu, 0x1A0003E); + /* 0xBFC338E8: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC338EC: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC338F0: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC338F4: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC338F8: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC338FC: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC33900: 8FAD0010 lw $t5, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33900u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC33904: 480A5800 mfc2 $t2, gte_data[11] */ + cpu->gpr[10] = cpu->gte_data[11]; + /* 0xBFC33908: ADA80000 sw $t0, 0($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33908u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC3390C: ADAA0004 sw $t2, 4($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3390Cu); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC33910: 03E00008 jr $ra */ + /* 0xBFC33914: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33918(CPUState* cpu) { +label_BFC33918: + psx_check_interrupts(cpu); + /* 0xBFC33918: 90880000 lbu $t0, 0($a0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (0))); + /* 0xBFC3391C: 90890001 lbu $t1, 1($a0) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (1))); + /* 0xBFC33920: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC33924: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC33928: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC3392C: 00000000 nop */ + /* nop */ + /* 0xBFC33930: 4B98003D gte cmd 0x3D */ + gte_execute(cpu, 0x198003D); + /* 0xBFC33934: 90A80000 lbu $t0, 0($a1) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (0))); + /* 0xBFC33938: 90A90001 lbu $t1, 1($a1) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (1))); + /* 0xBFC3393C: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC33940: 48874000 mtc2 $a3, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[7]; + /* 0xBFC33944: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC33948: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC3394C: 00000000 nop */ + /* nop */ + /* 0xBFC33950: 4BA8003E gte cmd 0x3E */ + gte_execute(cpu, 0x1A8003E); + /* 0xBFC33954: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC33958: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC3395C: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC33960: 8FAD0010 lw $t5, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33960u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC33964: 00000000 nop */ + /* nop */ + /* 0xBFC33968: A1A80000 sb $t0, 0($t5) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[13] + (0)), (uint8_t)(cpu->gpr[8] & 0xFFu)); + /* 0xBFC3396C: A1A90001 sb $t1, 1($t5) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[13] + (1)), (uint8_t)(cpu->gpr[9] & 0xFFu)); + /* 0xBFC33970: 03E00008 jr $ra */ + /* 0xBFC33974: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33978(CPUState* cpu) { +label_BFC33978: + psx_check_interrupts(cpu); + /* 0xBFC33978: 90880000 lbu $t0, 0($a0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (0))); + /* 0xBFC3397C: 90890001 lbu $t1, 1($a0) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (1))); + /* 0xBFC33980: 908A0002 lbu $t2, 2($a0) */ + cpu->gpr[10] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (2))); + /* 0xBFC33984: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC33988: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC3398C: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC33990: 488A5800 mtc2 $t2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[10]; + /* 0xBFC33994: 00000000 nop */ + /* nop */ + /* 0xBFC33998: 4B98003D gte cmd 0x3D */ + gte_execute(cpu, 0x198003D); + /* 0xBFC3399C: 90A80000 lbu $t0, 0($a1) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (0))); + /* 0xBFC339A0: 90A90001 lbu $t1, 1($a1) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (1))); + /* 0xBFC339A4: 90AA0002 lbu $t2, 2($a1) */ + cpu->gpr[10] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (2))); + /* 0xBFC339A8: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC339AC: 48874000 mtc2 $a3, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[7]; + /* 0xBFC339B0: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC339B4: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC339B8: 488A5800 mtc2 $t2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[10]; + /* 0xBFC339BC: 00000000 nop */ + /* nop */ + /* 0xBFC339C0: 4BA8003E gte cmd 0x3E */ + gte_execute(cpu, 0x1A8003E); + /* 0xBFC339C4: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC339C8: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC339CC: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC339D0: 480A5800 mfc2 $t2, gte_data[11] */ + cpu->gpr[10] = cpu->gte_data[11]; + /* 0xBFC339D4: 8FAD0010 lw $t5, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC339D4u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC339D8: 00000000 nop */ + /* nop */ + /* 0xBFC339DC: A1A80000 sb $t0, 0($t5) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[13] + (0)), (uint8_t)(cpu->gpr[8] & 0xFFu)); + /* 0xBFC339E0: A1A90001 sb $t1, 1($t5) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[13] + (1)), (uint8_t)(cpu->gpr[9] & 0xFFu)); + /* 0xBFC339E4: A1AA0002 sb $t2, 2($t5) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[13] + (2)), (uint8_t)(cpu->gpr[10] & 0xFFu)); + /* 0xBFC339E8: 03E00008 jr $ra */ + /* 0xBFC339EC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC339F0(CPUState* cpu) { label_BFC339F0: psx_check_interrupts(cpu); @@ -127906,6 +128355,303 @@ label_BFC33A58: return; } +void func_1FC33AB8(CPUState* cpu) { +label_BFC33AB8: + psx_check_interrupts(cpu); + /* 0xBFC33AB8: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33AB8u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33ABC: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33ABCu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC33AC0: 01080019 multu $t0, $t0 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[8] * (uint64_t)cpu->gpr[8]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC33AC4: 8C8A0008 lw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33AC4u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC33AC8: 00005812 mflo $t3 */ + cpu->gpr[11] = cpu->lo; + /* 0xBFC33ACC: 00000000 nop */ + /* nop */ + /* 0xBFC33AD0: 00000000 nop */ + /* nop */ + /* 0xBFC33AD4: 01290019 multu $t1, $t1 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[9]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC33AD8: 00006012 mflo $t4 */ + cpu->gpr[12] = cpu->lo; + /* 0xBFC33ADC: 016C5820 add $t3, $t3, $t4 */ + { int32_t psx_a = (int32_t)cpu->gpr[11]; int32_t psx_b = (int32_t)cpu->gpr[12]; int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[11] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33AE0: 00000000 nop */ + /* nop */ + /* 0xBFC33AE4: 014A0019 multu $t2, $t2 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[10]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC33AE8: 00006812 mflo $t5 */ + cpu->gpr[13] = cpu->lo; + /* 0xBFC33AEC: 016D1820 add $v1, $t3, $t5 */ + { int32_t psx_a = (int32_t)cpu->gpr[11]; int32_t psx_b = (int32_t)cpu->gpr[13]; int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[3] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33AF0: 00000000 nop */ + /* nop */ + /* 0xBFC33AF4: 00807821 addu $t7, $a0, $zero */ + cpu->gpr[15] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC33AF8: 00A0C021 addu $t8, $a1, $zero */ + cpu->gpr[24] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC33AFC: 00602021 addu $a0, $v1, $zero */ + cpu->gpr[4] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC33B00: 3C058008 lui $a1, 0x8008 */ + cpu->gpr[5] = 0x80080000u; + /* 0xBFC33B04: 24A583BC addiu $a1, $a1, -31812 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (-31812)); + /* 0xBFC33B08: 3C068008 lui $a2, 0x8008 */ + cpu->gpr[6] = 0x80080000u; + /* 0xBFC33B0C: 24C683C0 addiu $a2, $a2, -31808 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (-31808)); + /* 0xBFC33B10: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC33B14: AC3F83B4 sw $ra, -31820($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-31820)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B14u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC33B18: 0C012F26 jal 0xB004BC98 */ + /* 0xBFC33B1C: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC33B20u; + psx_dispatch(cpu, 0x8004BC98u); +label_BFC33B20: + psx_check_interrupts(cpu); + /* 0xBFC33B20: 3C1F8008 lui $ra, 0x8008 */ + cpu->gpr[31] = 0x80080000u; + /* 0xBFC33B24: 8FFF83B4 lw $ra, -31820($ra) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[31] + (-31820)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B24u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC33B28: 00000000 nop */ + /* nop */ + /* 0xBFC33B2C: 3C0C8008 lui $t4, 0x8008 */ + cpu->gpr[12] = 0x80080000u; + /* 0xBFC33B30: 8D8C83BC lw $t4, -31812($t4) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[12] + (-31812)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B30u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC33B34: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC33B38: 8DAD83C0 lw $t5, -31808($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-31808)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B38u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC33B3C: 8DE80000 lw $t0, 0($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B3Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33B40: 8DE90004 lw $t1, 4($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B40u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC33B44: 010C0019 multu $t0, $t4 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[8] * (uint64_t)cpu->gpr[12]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC33B48: 8DEA0008 lw $t2, 8($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B48u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC33B4C: 00601021 addu $v0, $v1, $zero */ + cpu->gpr[2] = cpu->gpr[3] + cpu->gpr[0]; + /* 0xBFC33B50: 00004012 mflo $t0 */ + cpu->gpr[8] = cpu->lo; + /* 0xBFC33B54: 01A84007 srav $t0, $t0, $t5 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] >> (cpu->gpr[13] & 0x1Fu)); + /* 0xBFC33B58: A7080000 sh $t0, 0($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B58u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[8] & 0xFFFFu)); } + /* 0xBFC33B5C: 012C0019 multu $t1, $t4 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[12]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC33B60: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC33B64: 01A94807 srav $t1, $t1, $t5 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> (cpu->gpr[13] & 0x1Fu)); + /* 0xBFC33B68: A7090002 sh $t1, 2($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B68u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[9] & 0xFFFFu)); } + /* 0xBFC33B6C: 014C0019 multu $t2, $t4 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[12]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC33B70: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC33B74: 01AA5007 srav $t2, $t2, $t5 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> (cpu->gpr[13] & 0x1Fu)); + /* 0xBFC33B78: 03E00008 jr $ra */ + /* 0xBFC33B7C: A70A0004 sh $t2, 4($t8) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[24] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33B7Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[10] & 0xFFFFu)); } + return; +} + +void func_1FC33B80(CPUState* cpu) { +label_BFC33B80: + psx_check_interrupts(cpu); + /* 0xBFC33B80: 4884F000 mtc2 $a0, gte_data[30] */ + gte_write_data(cpu, 30, cpu->gpr[4]); + /* 0xBFC33B84: 00000000 nop */ + /* nop */ + /* 0xBFC33B88: 00000000 nop */ + /* nop */ + /* 0xBFC33B8C: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC33B90: 24010020 addiu $at, $zero, 32 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC33B94: 10410019 beq $v0, $at, 0xBFC33BFC */ + uint32_t psx_brA_BFC33B94 = cpu->gpr[2]; uint32_t psx_brB_BFC33B94 = cpu->gpr[1]; + int psx_taken_BFC33B94 = (psx_brA_BFC33B94 == psx_brB_BFC33B94); + /* 0xBFC33B98: 00000000 nop */ + /* nop */ + if (psx_taken_BFC33B94) goto label_BFC33BFC; +label_BFC33B9C: + psx_check_interrupts(cpu); + /* 0xBFC33B9C: 30480001 andi $t0, $v0, 0x1 */ + cpu->gpr[8] = cpu->gpr[2] & 0x1u; + /* 0xBFC33BA0: 240AFFFE addiu $t2, $zero, -2 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (-2)); + /* 0xBFC33BA4: 004A5024 and $t2, $v0, $t2 */ + cpu->gpr[10] = cpu->gpr[2] & cpu->gpr[10]; + /* 0xBFC33BA8: 2409001F addiu $t1, $zero, 31 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (31)); + /* 0xBFC33BAC: 012A4822 subu $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] - cpu->gpr[10]; + /* 0xBFC33BB0: 00094843 sra $t1, $t1, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 1u); + /* 0xBFC33BB4: 214BFFE8 addi $t3, $t2, -24 */ + { int32_t psx_a = (int32_t)cpu->gpr[10]; int32_t psx_b = (-24); int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[11] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33BB8: 05600003 bltz $t3, 0xBFC33BC8 */ + uint32_t psx_brA_BFC33BB8 = cpu->gpr[11]; + int psx_taken_BFC33BB8 = ((int32_t)psx_brA_BFC33BB8 < 0); + /* 0xBFC33BBC: 00000000 nop */ + /* nop */ + if (psx_taken_BFC33BB8) goto label_BFC33BC8; +label_BFC33BC0: + psx_check_interrupts(cpu); + /* 0xBFC33BC0: 01646004 sllv $t4, $a0, $t3 */ + cpu->gpr[12] = cpu->gpr[4] << (cpu->gpr[11] & 0x1Fu); + /* 0xBFC33BC4: 10000003 beq $zero, $zero, 0xBFC33BD4 */ + uint32_t psx_brA_BFC33BC4 = cpu->gpr[0]; uint32_t psx_brB_BFC33BC4 = cpu->gpr[0]; + int psx_taken_BFC33BC4 = (psx_brA_BFC33BC4 == psx_brB_BFC33BC4); +label_BFC33BC8: + psx_check_interrupts(cpu); + /* 0xBFC33BC8: 240B0018 addiu $t3, $zero, 24 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (24)); + if (psx_taken_BFC33BC4) goto label_BFC33BD4; +label_BFC33BCC: + psx_check_interrupts(cpu); + /* 0xBFC33BCC: 016A5822 subu $t3, $t3, $t2 */ + cpu->gpr[11] = cpu->gpr[11] - cpu->gpr[10]; + /* 0xBFC33BD0: 01646007 srav $t4, $a0, $t3 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[4] >> (cpu->gpr[11] & 0x1Fu)); +label_BFC33BD4: + psx_check_interrupts(cpu); + /* 0xBFC33BD4: 218CFFC0 addi $t4, $t4, -64 */ + { int32_t psx_a = (int32_t)cpu->gpr[12]; int32_t psx_b = (-64); int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[12] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33BD8: 000C6040 sll $t4, $t4, 1 */ + cpu->gpr[12] = cpu->gpr[12] << 1u; + /* 0xBFC33BDC: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC33BE0: 01AC6821 addu $t5, $t5, $t4 */ + cpu->gpr[13] = cpu->gpr[13] + cpu->gpr[12]; + /* 0xBFC33BE4: 85AD83C4 lh $t5, -31804($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-31804)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33BE4u); return; } cpu->gpr[13] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC33BE8: 00000000 nop */ + /* nop */ + /* 0xBFC33BEC: 012D6804 sllv $t5, $t5, $t1 */ + cpu->gpr[13] = cpu->gpr[13] << (cpu->gpr[9] & 0x1Fu); + /* 0xBFC33BF0: 000D1302 srl $v0, $t5, 12 */ + cpu->gpr[2] = cpu->gpr[13] >> 12u; + /* 0xBFC33BF4: 03E00008 jr $ra */ + /* 0xBFC33BF8: 00000000 nop */ + /* nop */ + return; +label_BFC33BFC: + psx_check_interrupts(cpu); + /* 0xBFC33BFC: 03E00008 jr $ra */ + /* 0xBFC33C00: 24020000 addiu $v0, $zero, 0 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (0)); + return; +} + +void func_1FC33C04(CPUState* cpu) { +label_BFC33C04: + psx_check_interrupts(cpu); + /* 0xBFC33C04: 4884F000 mtc2 $a0, gte_data[30] */ + gte_write_data(cpu, 30, cpu->gpr[4]); + /* 0xBFC33C08: 00000000 nop */ + /* nop */ + /* 0xBFC33C0C: 00000000 nop */ + /* nop */ + /* 0xBFC33C10: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC33C14: 24010020 addiu $at, $zero, 32 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (32)); + /* 0xBFC33C18: 1041001D beq $v0, $at, 0xBFC33C90 */ + uint32_t psx_brA_BFC33C18 = cpu->gpr[2]; uint32_t psx_brB_BFC33C18 = cpu->gpr[1]; + int psx_taken_BFC33C18 = (psx_brA_BFC33C18 == psx_brB_BFC33C18); + /* 0xBFC33C1C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC33C18) { cpu->pc = 0xBFC33C90u; return; } +label_BFC33C20: + psx_check_interrupts(cpu); + /* 0xBFC33C20: 30480001 andi $t0, $v0, 0x1 */ + cpu->gpr[8] = cpu->gpr[2] & 0x1u; + /* 0xBFC33C24: 240AFFFE addiu $t2, $zero, -2 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[0] + (-2)); + /* 0xBFC33C28: 004A5024 and $t2, $v0, $t2 */ + cpu->gpr[10] = cpu->gpr[2] & cpu->gpr[10]; + /* 0xBFC33C2C: 24090013 addiu $t1, $zero, 19 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (19)); + /* 0xBFC33C30: 012A4822 subu $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] - cpu->gpr[10]; + /* 0xBFC33C34: 00094843 sra $t1, $t1, 1 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 1u); + /* 0xBFC33C38: 214BFFE8 addi $t3, $t2, -24 */ + { int32_t psx_a = (int32_t)cpu->gpr[10]; int32_t psx_b = (-24); int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[11] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33C3C: 05600003 bltz $t3, 0xBFC33C4C */ + uint32_t psx_brA_BFC33C3C = cpu->gpr[11]; + int psx_taken_BFC33C3C = ((int32_t)psx_brA_BFC33C3C < 0); + /* 0xBFC33C40: 00000000 nop */ + /* nop */ + if (psx_taken_BFC33C3C) goto label_BFC33C4C; +label_BFC33C44: + psx_check_interrupts(cpu); + /* 0xBFC33C44: 01646004 sllv $t4, $a0, $t3 */ + cpu->gpr[12] = cpu->gpr[4] << (cpu->gpr[11] & 0x1Fu); + /* 0xBFC33C48: 10000003 beq $zero, $zero, 0xBFC33C58 */ + uint32_t psx_brA_BFC33C48 = cpu->gpr[0]; uint32_t psx_brB_BFC33C48 = cpu->gpr[0]; + int psx_taken_BFC33C48 = (psx_brA_BFC33C48 == psx_brB_BFC33C48); +label_BFC33C4C: + psx_check_interrupts(cpu); + /* 0xBFC33C4C: 240B0018 addiu $t3, $zero, 24 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[0] + (24)); + if (psx_taken_BFC33C48) goto label_BFC33C58; +label_BFC33C50: + psx_check_interrupts(cpu); + /* 0xBFC33C50: 016A5822 subu $t3, $t3, $t2 */ + cpu->gpr[11] = cpu->gpr[11] - cpu->gpr[10]; + /* 0xBFC33C54: 01646007 srav $t4, $a0, $t3 */ + cpu->gpr[12] = (uint32_t)((int32_t)cpu->gpr[4] >> (cpu->gpr[11] & 0x1Fu)); +label_BFC33C58: + psx_check_interrupts(cpu); + /* 0xBFC33C58: 218CFFC0 addi $t4, $t4, -64 */ + { int32_t psx_a = (int32_t)cpu->gpr[12]; int32_t psx_b = (-64); int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[12] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33C5C: 000C6040 sll $t4, $t4, 1 */ + cpu->gpr[12] = cpu->gpr[12] << 1u; + /* 0xBFC33C60: 3C0D8008 lui $t5, 0x8008 */ + cpu->gpr[13] = 0x80080000u; + /* 0xBFC33C64: 01AC6821 addu $t5, $t5, $t4 */ + cpu->gpr[13] = cpu->gpr[13] + cpu->gpr[12]; + /* 0xBFC33C68: 85AD83C4 lh $t5, -31804($t5) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[13] + (-31804)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33C68u); return; } cpu->gpr[13] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC33C6C: 00000000 nop */ + /* nop */ + /* 0xBFC33C70: 05200004 bltz $t1, 0xBFC33C84 */ + uint32_t psx_brA_BFC33C70 = cpu->gpr[9]; + int psx_taken_BFC33C70 = ((int32_t)psx_brA_BFC33C70 < 0); + /* 0xBFC33C74: 00000000 nop */ + /* nop */ + if (psx_taken_BFC33C70) { cpu->pc = 0xBFC33C84u; return; } +label_BFC33C78: + psx_check_interrupts(cpu); + /* 0xBFC33C78: 012D1004 sllv $v0, $t5, $t1 */ + cpu->gpr[2] = cpu->gpr[13] << (cpu->gpr[9] & 0x1Fu); + /* 0xBFC33C7C: 03E00008 jr $ra */ + /* 0xBFC33C80: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33C84(CPUState* cpu) { +label_BFC33C84: + psx_check_interrupts(cpu); + /* 0xBFC33C84: 00094822 subu $t1, $zero, $t1 */ + cpu->gpr[9] = cpu->gpr[0] - cpu->gpr[9]; + /* 0xBFC33C88: 03E00008 jr $ra */ + /* 0xBFC33C8C: 012D1006 srlv $v0, $t5, $t1 */ + cpu->gpr[2] = cpu->gpr[13] >> (cpu->gpr[9] & 0x1Fu); + return; +} + void func_1FC33C98(CPUState* cpu) { label_BFC33C98: psx_check_interrupts(cpu); @@ -128003,6 +128749,290 @@ label_BFC33CF4: return; } +void func_1FC33D24(CPUState* cpu) { +label_BFC33D24: + psx_check_interrupts(cpu); + /* 0xBFC33D24: 000630C0 sll $a2, $a2, 3 */ + cpu->gpr[6] = cpu->gpr[6] << 3u; + /* 0xBFC33D28: 00C53020 add $a2, $a2, $a1 */ + { int32_t psx_a = (int32_t)cpu->gpr[6]; int32_t psx_b = (int32_t)cpu->gpr[5]; int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[6] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33D2C: 48874000 mtc2 $a3, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[7]; +label_BFC33D30: + psx_check_interrupts(cpu); + /* 0xBFC33D30: 8CA80000 lw $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33D30u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33D34: 84AA0004 lh $t2, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33D34u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC33D38: 00084C03 sra $t1, $t0, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC33D3C: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC33D40: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC33D44: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC33D48: 488A5800 mtc2 $t2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[10]; + /* 0xBFC33D4C: 00000000 nop */ + /* nop */ + /* 0xBFC33D50: 00000000 nop */ + /* nop */ + /* 0xBFC33D54: 4B98003D gte cmd 0x3D */ + gte_execute(cpu, 0x198003D); + /* 0xBFC33D58: 8C820000 lw $v0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33D58u); return; } cpu->gpr[2] = cpu->read_word(psx_addr); } + /* 0xBFC33D5C: 84870004 lh $a3, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33D5Cu); return; } cpu->gpr[7] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC33D60: 00021C03 sra $v1, $v0, 16 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[2] >> 16u); + /* 0xBFC33D64: 3042FFFF andi $v0, $v0, 0xFFFF */ + cpu->gpr[2] = cpu->gpr[2] & 0xFFFFu; + /* 0xBFC33D68: 20A50008 addi $a1, $a1, 8 */ + { int32_t psx_a = (int32_t)cpu->gpr[5]; int32_t psx_b = (8); int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[5] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33D6C: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC33D70: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC33D74: 480A5800 mfc2 $t2, gte_data[11] */ + cpu->gpr[10] = cpu->gte_data[11]; + /* 0xBFC33D78: 00481020 add $v0, $v0, $t0 */ + { int32_t psx_a = (int32_t)cpu->gpr[2]; int32_t psx_b = (int32_t)cpu->gpr[8]; int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[2] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33D7C: 00691820 add $v1, $v1, $t1 */ + { int32_t psx_a = (int32_t)cpu->gpr[3]; int32_t psx_b = (int32_t)cpu->gpr[9]; int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[3] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33D80: 00EA3820 add $a3, $a3, $t2 */ + { int32_t psx_a = (int32_t)cpu->gpr[7]; int32_t psx_b = (int32_t)cpu->gpr[10]; int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[7] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33D84: A4820000 sh $v0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33D84u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[2] & 0xFFFFu)); } + /* 0xBFC33D88: A4830002 sh $v1, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33D88u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[3] & 0xFFFFu)); } + /* 0xBFC33D8C: A4870004 sh $a3, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33D8Cu); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[7] & 0xFFFFu)); } + /* 0xBFC33D90: 20840008 addi $a0, $a0, 8 */ + { int32_t psx_a = (int32_t)cpu->gpr[4]; int32_t psx_b = (8); int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[4] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC33D94: 14A6FFE6 bne $a1, $a2, 0xBFC33D30 */ + uint32_t psx_brA_BFC33D94 = cpu->gpr[5]; uint32_t psx_brB_BFC33D94 = cpu->gpr[6]; + int psx_taken_BFC33D94 = (psx_brA_BFC33D94 != psx_brB_BFC33D94); + /* 0xBFC33D98: 00000000 nop */ + /* nop */ + if (psx_taken_BFC33D94) goto label_BFC33D30; +label_BFC33D9C: + psx_check_interrupts(cpu); + /* 0xBFC33D9C: 03E00008 jr $ra */ + /* 0xBFC33DA0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33DA4(CPUState* cpu) { +label_BFC33DA4: + psx_check_interrupts(cpu); + /* 0xBFC33DA4: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33DA4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33DA8: 848A0004 lh $t2, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33DA8u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC33DAC: 00084C03 sra $t1, $t0, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC33DB0: 00084400 sll $t0, $t0, 16 */ + cpu->gpr[8] = cpu->gpr[8] << 16u; + /* 0xBFC33DB4: 00084403 sra $t0, $t0, 16 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC33DB8: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC33DBC: 48C8A800 ctc2 $t0, gte_ctrl[21] */ + cpu->gte_ctrl[21] = cpu->gpr[8]; + /* 0xBFC33DC0: 48C9B000 ctc2 $t1, gte_ctrl[22] */ + cpu->gte_ctrl[22] = cpu->gpr[9]; + /* 0xBFC33DC4: 48CAB800 ctc2 $t2, gte_ctrl[23] */ + cpu->gte_ctrl[23] = cpu->gpr[10]; + /* 0xBFC33DC8: 8CA80000 lw $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33DC8u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC33DCC: 84AA0004 lh $t2, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33DCCu); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC33DD0: 00084C03 sra $t1, $t0, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC33DD4: 00084400 sll $t0, $t0, 16 */ + cpu->gpr[8] = cpu->gpr[8] << 16u; + /* 0xBFC33DD8: 00084403 sra $t0, $t0, 16 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC33DDC: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC33DE0: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC33DE4: 488A5800 mtc2 $t2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[10]; + /* 0xBFC33DE8: 00000000 nop */ + /* nop */ + /* 0xBFC33DEC: 00000000 nop */ + /* nop */ + /* 0xBFC33DF0: 4A980011 gte cmd 0x11 */ + gte_execute(cpu, 0x0980011); + /* 0xBFC33DF4: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC33DF8: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC33DFC: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC33E00: 480A5800 mfc2 $t2, gte_data[11] */ + cpu->gpr[10] = cpu->gte_data[11]; + /* 0xBFC33E04: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC33E08: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC33E0C: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC33E10: ACE80000 sw $t0, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33E10u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC33E14: ACEA0004 sw $t2, 4($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC33E14u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC33E18: 03E00008 jr $ra */ + /* 0xBFC33E1C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33E20(CPUState* cpu) { +label_BFC33E20: + psx_check_interrupts(cpu); + /* 0xBFC33E20: 90880000 lbu $t0, 0($a0) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (0))); + /* 0xBFC33E24: 90890001 lbu $t1, 1($a0) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[4] + (1))); + /* 0xBFC33E28: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC33E2C: 48C8A800 ctc2 $t0, gte_ctrl[21] */ + cpu->gte_ctrl[21] = cpu->gpr[8]; + /* 0xBFC33E30: 48C9B000 ctc2 $t1, gte_ctrl[22] */ + cpu->gte_ctrl[22] = cpu->gpr[9]; + /* 0xBFC33E34: 90A80000 lbu $t0, 0($a1) */ + cpu->gpr[8] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (0))); + /* 0xBFC33E38: 90A90001 lbu $t1, 1($a1) */ + cpu->gpr[9] = (uint32_t)cpu->read_byte((uint32_t)((int32_t)cpu->gpr[5] + (1))); + /* 0xBFC33E3C: 48884800 mtc2 $t0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[8]; + /* 0xBFC33E40: 48895000 mtc2 $t1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[9]; + /* 0xBFC33E44: 00000000 nop */ + /* nop */ + /* 0xBFC33E48: 00000000 nop */ + /* nop */ + /* 0xBFC33E4C: 4A980011 gte cmd 0x11 */ + gte_execute(cpu, 0x0980011); + /* 0xBFC33E50: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC33E54: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC33E58: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC33E5C: A0E80000 sb $t0, 0($a3) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[7] + (0)), (uint8_t)(cpu->gpr[8] & 0xFFu)); + /* 0xBFC33E60: A0E90001 sb $t1, 1($a3) */ + cpu->write_byte((uint32_t)((int32_t)cpu->gpr[7] + (1)), (uint8_t)(cpu->gpr[9] & 0xFFu)); + /* 0xBFC33E64: 03E00008 jr $ra */ + /* 0xBFC33E68: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33E80(CPUState* cpu) { +label_BFC33E80: + psx_check_interrupts(cpu); + /* 0xBFC33E80: C8820000 lwc2 gte[2], 0($a0) */ + cpu->gte_data[2] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC33E84: C8830004 lwc2 gte[3], 4($a0) */ + cpu->gte_data[3] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC33E88: 03E00008 jr $ra */ + /* 0xBFC33E8C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33E90(CPUState* cpu) { +label_BFC33E90: + psx_check_interrupts(cpu); + /* 0xBFC33E90: C8840000 lwc2 gte[4], 0($a0) */ + cpu->gte_data[4] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC33E94: C8850004 lwc2 gte[5], 4($a0) */ + cpu->gte_data[5] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC33E98: 03E00008 jr $ra */ + /* 0xBFC33E9C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33EA0(CPUState* cpu) { +label_BFC33EA0: + psx_check_interrupts(cpu); + /* 0xBFC33EA0: C8800000 lwc2 gte[0], 0($a0) */ + cpu->gte_data[0] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC33EA4: C8810004 lwc2 gte[1], 4($a0) */ + cpu->gte_data[1] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC33EA8: C8A20000 lwc2 gte[2], 0($a1) */ + cpu->gte_data[2] = cpu->read_word(cpu->gpr[5]); + /* 0xBFC33EAC: C8A30004 lwc2 gte[3], 4($a1) */ + cpu->gte_data[3] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[5] + (4))); + /* 0xBFC33EB0: C8C40000 lwc2 gte[4], 0($a2) */ + cpu->gte_data[4] = cpu->read_word(cpu->gpr[6]); + /* 0xBFC33EB4: C8C50004 lwc2 gte[5], 4($a2) */ + cpu->gte_data[5] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[6] + (4))); + /* 0xBFC33EB8: 03E00008 jr $ra */ + /* 0xBFC33EBC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33EC0(CPUState* cpu) { +label_BFC33EC0: + psx_check_interrupts(cpu); + /* 0xBFC33EC0: C8860000 lwc2 gte[6], 0($a0) */ + cpu->gte_data[6] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC33EC4: 03E00008 jr $ra */ + /* 0xBFC33EC8: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33ECC(CPUState* cpu) { +label_BFC33ECC: + psx_check_interrupts(cpu); + /* 0xBFC33ECC: C8940000 lwc2 gte[20], 0($a0) */ + cpu->gte_data[20] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC33ED0: C8B50000 lwc2 gte[21], 0($a1) */ + cpu->gte_data[21] = cpu->read_word(cpu->gpr[5]); + /* 0xBFC33ED4: C8D60000 lwc2 gte[22], 0($a2) */ + cpu->gte_data[22] = cpu->read_word(cpu->gpr[6]); + /* 0xBFC33ED8: 03E00008 jr $ra */ + /* 0xBFC33EDC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33EE0(CPUState* cpu) { +label_BFC33EE0: + psx_check_interrupts(cpu); + /* 0xBFC33EE0: 48844800 mtc2 $a0, gte_data[9] */ + cpu->gte_data[9] = cpu->gpr[4]; + /* 0xBFC33EE4: 48855000 mtc2 $a1, gte_data[10] */ + cpu->gte_data[10] = cpu->gpr[5]; + /* 0xBFC33EE8: 48865800 mtc2 $a2, gte_data[11] */ + cpu->gte_data[11] = cpu->gpr[6]; + /* 0xBFC33EEC: 03E00008 jr $ra */ + /* 0xBFC33EF0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33EF4(CPUState* cpu) { +label_BFC33EF4: + psx_check_interrupts(cpu); + /* 0xBFC33EF4: 48844000 mtc2 $a0, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[4]; + /* 0xBFC33EF8: 03E00008 jr $ra */ + /* 0xBFC33EFC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC33F00(CPUState* cpu) { label_BFC33F00: psx_check_interrupts(cpu); @@ -128045,6 +129075,94 @@ label_BFC33F20: return; } +void func_1FC33F40(CPUState* cpu) { +label_BFC33F40: + psx_check_interrupts(cpu); + /* 0xBFC33F40: 48848800 mtc2 $a0, gte_data[17] */ + cpu->gte_data[17] = cpu->gpr[4]; + /* 0xBFC33F44: 48859000 mtc2 $a1, gte_data[18] */ + cpu->gte_data[18] = cpu->gpr[5]; + /* 0xBFC33F48: 48869800 mtc2 $a2, gte_data[19] */ + cpu->gte_data[19] = cpu->gpr[6]; + /* 0xBFC33F4C: 03E00008 jr $ra */ + /* 0xBFC33F50: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33F54(CPUState* cpu) { +label_BFC33F54: + psx_check_interrupts(cpu); + /* 0xBFC33F54: 48848000 mtc2 $a0, gte_data[16] */ + cpu->gte_data[16] = cpu->gpr[4]; + /* 0xBFC33F58: 48858800 mtc2 $a1, gte_data[17] */ + cpu->gte_data[17] = cpu->gpr[5]; + /* 0xBFC33F5C: 48869000 mtc2 $a2, gte_data[18] */ + cpu->gte_data[18] = cpu->gpr[6]; + /* 0xBFC33F60: 48879800 mtc2 $a3, gte_data[19] */ + cpu->gte_data[19] = cpu->gpr[7]; + /* 0xBFC33F64: 03E00008 jr $ra */ + /* 0xBFC33F68: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33F6C(CPUState* cpu) { +label_BFC33F6C: + psx_check_interrupts(cpu); + /* 0xBFC33F6C: 48846000 mtc2 $a0, gte_data[12] */ + cpu->gte_data[12] = cpu->gpr[4]; + /* 0xBFC33F70: 48856800 mtc2 $a1, gte_data[13] */ + cpu->gte_data[13] = cpu->gpr[5]; + /* 0xBFC33F74: 48867000 mtc2 $a2, gte_data[14] */ + cpu->gte_data[14] = cpu->gpr[6]; + /* 0xBFC33F78: 03E00008 jr $ra */ + /* 0xBFC33F7C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33F80(CPUState* cpu) { +label_BFC33F80: + psx_check_interrupts(cpu); + /* 0xBFC33F80: 48C40000 ctc2 $a0, gte_ctrl[0] */ + cpu->gte_ctrl[0] = cpu->gpr[4]; + /* 0xBFC33F84: 48C51000 ctc2 $a1, gte_ctrl[2] */ + cpu->gte_ctrl[2] = cpu->gpr[5]; + /* 0xBFC33F88: 48C62000 ctc2 $a2, gte_ctrl[4] */ + cpu->gte_ctrl[4] = cpu->gpr[6]; + /* 0xBFC33F8C: 03E00008 jr $ra */ + /* 0xBFC33F90: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33F94(CPUState* cpu) { +label_BFC33F94: + psx_check_interrupts(cpu); + /* 0xBFC33F94: 4884C800 mtc2 $a0, gte_data[25] */ + cpu->gte_data[25] = cpu->gpr[4]; + /* 0xBFC33F98: 4885D000 mtc2 $a1, gte_data[26] */ + cpu->gte_data[26] = cpu->gpr[5]; + /* 0xBFC33F9C: 4886D800 mtc2 $a2, gte_data[27] */ + cpu->gte_data[27] = cpu->gpr[6]; + /* 0xBFC33FA0: 03E00008 jr $ra */ + /* 0xBFC33FA4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33FA8(CPUState* cpu) { +label_BFC33FA8: + psx_check_interrupts(cpu); + /* 0xBFC33FA8: 4884F000 mtc2 $a0, gte_data[30] */ + gte_write_data(cpu, 30, cpu->gpr[4]); + /* 0xBFC33FAC: 03E00008 jr $ra */ + /* 0xBFC33FB0: 00000000 nop */ + /* nop */ + return; +} + void func_1FC33FB4(CPUState* cpu) { label_BFC33FB4: psx_check_interrupts(cpu); @@ -128095,6 +129213,282 @@ label_BFC33FE4: return; } +void func_1FC33FF0(CPUState* cpu) { +label_BFC33FF0: + psx_check_interrupts(cpu); + /* 0xBFC33FF0: 48023800 mfc2 $v0, gte_data[7] */ + cpu->gpr[2] = cpu->gte_data[7]; + /* 0xBFC33FF4: 03E00008 jr $ra */ + /* 0xBFC33FF8: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC33FFC(CPUState* cpu) { +label_BFC33FFC: + psx_check_interrupts(cpu); + /* 0xBFC33FFC: 48024000 mfc2 $v0, gte_data[8] */ + cpu->gpr[2] = cpu->gte_data[8]; + /* 0xBFC34000: 03E00008 jr $ra */ + /* 0xBFC34004: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC34008(CPUState* cpu) { +label_BFC34008: + psx_check_interrupts(cpu); + /* 0xBFC34008: E8890000 swc2 gte[9], 0($a0) */ + cpu->write_word(cpu->gpr[4], cpu->gte_data[9]); + /* 0xBFC3400C: E8AA0000 swc2 gte[10], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[10]); + /* 0xBFC34010: E8CB0000 swc2 gte[11], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[11]); + /* 0xBFC34014: 03E00008 jr $ra */ + /* 0xBFC34018: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3401C(CPUState* cpu) { +label_BFC3401C: + psx_check_interrupts(cpu); + /* 0xBFC3401C: E8930000 swc2 gte[19], 0($a0) */ + cpu->write_word(cpu->gpr[4], cpu->gte_data[19]); + /* 0xBFC34020: 03E00008 jr $ra */ + /* 0xBFC34024: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC34028(CPUState* cpu) { +label_BFC34028: + psx_check_interrupts(cpu); + /* 0xBFC34028: E8910000 swc2 gte[17], 0($a0) */ + cpu->write_word(cpu->gpr[4], cpu->gte_data[17]); + /* 0xBFC3402C: E8B20000 swc2 gte[18], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[18]); + /* 0xBFC34030: E8D30000 swc2 gte[19], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[19]); + /* 0xBFC34034: 03E00008 jr $ra */ + /* 0xBFC34038: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3403C(CPUState* cpu) { +label_BFC3403C: + psx_check_interrupts(cpu); + /* 0xBFC3403C: E8900000 swc2 gte[16], 0($a0) */ + cpu->write_word(cpu->gpr[4], cpu->gte_data[16]); + /* 0xBFC34040: E8B10000 swc2 gte[17], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[17]); + /* 0xBFC34044: E8D20000 swc2 gte[18], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[18]); + /* 0xBFC34048: E8F30000 swc2 gte[19], 0($a3) */ + cpu->write_word(cpu->gpr[7], cpu->gte_data[19]); + /* 0xBFC3404C: 03E00008 jr $ra */ + /* 0xBFC34050: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC34054(CPUState* cpu) { +label_BFC34054: + psx_check_interrupts(cpu); + /* 0xBFC34054: E88C0000 swc2 gte[12], 0($a0) */ + cpu->write_word(cpu->gpr[4], cpu->gte_data[12]); + /* 0xBFC34058: E8AD0000 swc2 gte[13], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[13]); + /* 0xBFC3405C: E8CE0000 swc2 gte[14], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[14]); + /* 0xBFC34060: 03E00008 jr $ra */ + /* 0xBFC34064: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC34068(CPUState* cpu) { +label_BFC34068: + psx_check_interrupts(cpu); + /* 0xBFC34068: E8940000 swc2 gte[20], 0($a0) */ + cpu->write_word(cpu->gpr[4], cpu->gte_data[20]); + /* 0xBFC3406C: E8B50000 swc2 gte[21], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[21]); + /* 0xBFC34070: E8D60000 swc2 gte[22], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[22]); + /* 0xBFC34074: 03E00008 jr $ra */ + /* 0xBFC34078: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3407C(CPUState* cpu) { +label_BFC3407C: + psx_check_interrupts(cpu); + /* 0xBFC3407C: 4802C000 mfc2 $v0, gte_data[24] */ + cpu->gpr[2] = cpu->gte_data[24]; + /* 0xBFC34080: 03E00008 jr $ra */ + /* 0xBFC34084: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC34088(CPUState* cpu) { +label_BFC34088: + psx_check_interrupts(cpu); + /* 0xBFC34088: E8990000 swc2 gte[25], 0($a0) */ + cpu->write_word(cpu->gpr[4], cpu->gte_data[25]); + /* 0xBFC3408C: E8BA0000 swc2 gte[26], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[26]); + /* 0xBFC34090: E8DB0000 swc2 gte[27], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[27]); + /* 0xBFC34094: 03E00008 jr $ra */ + /* 0xBFC34098: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3409C(CPUState* cpu) { +label_BFC3409C: + psx_check_interrupts(cpu); + /* 0xBFC3409C: 4808E800 mfc2 $t0, gte_data[29] */ + cpu->gpr[8] = gte_read_data(cpu, 29); + /* 0xBFC340A0: 00000000 nop */ + /* nop */ + /* 0xBFC340A4: 3109001F andi $t1, $t0, 0x1F */ + cpu->gpr[9] = cpu->gpr[8] & 0x1Fu; + /* 0xBFC340A8: AC890000 sw $t1, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC340A8u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC340AC: 310903E0 andi $t1, $t0, 0x3E0 */ + cpu->gpr[9] = cpu->gpr[8] & 0x3E0u; + /* 0xBFC340B0: 00094942 srl $t1, $t1, 5 */ + cpu->gpr[9] = cpu->gpr[9] >> 5u; + /* 0xBFC340B4: AC890004 sw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC340B4u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC340B8: 31097C00 andi $t1, $t0, 0x7C00 */ + cpu->gpr[9] = cpu->gpr[8] & 0x7C00u; + /* 0xBFC340BC: 00094A82 srl $t1, $t1, 10 */ + cpu->gpr[9] = cpu->gpr[9] >> 10u; + /* 0xBFC340C0: AC890008 sw $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC340C0u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC340C4: 03E00008 jr $ra */ + /* 0xBFC340C8: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC340CC(CPUState* cpu) { +label_BFC340CC: + psx_check_interrupts(cpu); + /* 0xBFC340CC: 4802F800 mfc2 $v0, gte_data[31] */ + cpu->gpr[2] = cpu->gte_data[31]; + /* 0xBFC340D0: 03E00008 jr $ra */ + /* 0xBFC340D4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC340D8(CPUState* cpu) { +label_BFC340D8: + psx_check_interrupts(cpu); + /* 0xBFC340D8: 4842F800 cfc2 $v0, gte_ctrl[31] */ + cpu->gpr[2] = cpu->gte_ctrl[31]; + /* 0xBFC340DC: 03E00008 jr $ra */ + /* 0xBFC340E0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC340E4(CPUState* cpu) { +label_BFC340E4: + psx_check_interrupts(cpu); + /* 0xBFC340E4: 4848C000 cfc2 $t0, gte_ctrl[24] */ + cpu->gpr[8] = cpu->gte_ctrl[24]; + /* 0xBFC340E8: 4849C800 cfc2 $t1, gte_ctrl[25] */ + cpu->gpr[9] = cpu->gte_ctrl[25]; + /* 0xBFC340EC: 00084403 sra $t0, $t0, 16 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC340F0: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC340F4: AC880000 sw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC340F4u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC340F8: ACA90000 sw $t1, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC340F8u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC340FC: 03E00008 jr $ra */ + /* 0xBFC34100: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC34104(CPUState* cpu) { +label_BFC34104: + psx_check_interrupts(cpu); + /* 0xBFC34104: 4842D000 cfc2 $v0, gte_ctrl[26] */ + cpu->gpr[2] = cpu->gte_ctrl[26]; + /* 0xBFC34108: 03E00008 jr $ra */ + /* 0xBFC3410C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC34110(CPUState* cpu) { +label_BFC34110: + psx_check_interrupts(cpu); + /* 0xBFC34110: 00803821 addu $a3, $a0, $zero */ + cpu->gpr[7] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC34114: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC34118: 00A03021 addu $a2, $a1, $zero */ + cpu->gpr[6] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC3411C: 24090003 addiu $t1, $zero, 3 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); +label_BFC34120: + psx_check_interrupts(cpu); + /* 0xBFC34120: 00027040 sll $t6, $v0, 1 */ + cpu->gpr[14] = cpu->gpr[2] << 1u; + /* 0xBFC34124: 00EE4021 addu $t0, $a3, $t6 */ + cpu->gpr[8] = cpu->gpr[7] + cpu->gpr[14]; + /* 0xBFC34128: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC3412C: 00C02021 addu $a0, $a2, $zero */ + cpu->gpr[4] = cpu->gpr[6] + cpu->gpr[0]; +label_BFC34130: + psx_check_interrupts(cpu); + /* 0xBFC34130: 850F0000 lh $t7, 0($t0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[8] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34130u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34134: 24630001 addiu $v1, $v1, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1)); + /* 0xBFC34138: 24840002 addiu $a0, $a0, 2 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (2)); + /* 0xBFC3413C: 25080006 addiu $t0, $t0, 6 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[8] + (6)); + /* 0xBFC34140: 1469FFFB bne $v1, $t1, 0xBFC34130 */ + uint32_t psx_brA_BFC34140 = cpu->gpr[3]; uint32_t psx_brB_BFC34140 = cpu->gpr[9]; + int psx_taken_BFC34140 = (psx_brA_BFC34140 != psx_brB_BFC34140); + /* 0xBFC34144: A48FFFFE sh $t7, -2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34144u); return; } cpu->write_half(psx_addr, (uint16_t)(cpu->gpr[15] & 0xFFFFu)); } + if (psx_taken_BFC34140) goto label_BFC34130; +label_BFC34148: + psx_check_interrupts(cpu); + /* 0xBFC34148: 24420001 addiu $v0, $v0, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] + (1)); + /* 0xBFC3414C: 28410003 slti $at, $v0, 3 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (3) ? 1 : 0); + /* 0xBFC34150: 1420FFF3 bne $at, $zero, 0xBFC34120 */ + uint32_t psx_brA_BFC34150 = cpu->gpr[1]; uint32_t psx_brB_BFC34150 = cpu->gpr[0]; + int psx_taken_BFC34150 = (psx_brA_BFC34150 != psx_brB_BFC34150); + /* 0xBFC34154: 24C60006 addiu $a2, $a2, 6 */ + cpu->gpr[6] = (uint32_t)((int32_t)cpu->gpr[6] + (6)); + if (psx_taken_BFC34150) goto label_BFC34120; +label_BFC34158: + psx_check_interrupts(cpu); + /* 0xBFC34158: 03E00008 jr $ra */ + /* 0xBFC3415C: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + return; +} + void func_1FC34160(CPUState* cpu) { label_BFC34160: psx_check_interrupts(cpu); @@ -129195,7 +130589,7 @@ label_BFC348FC: int psx_taken_BFC348FC = ((int32_t)psx_brA_BFC348FC < 0); /* 0xBFC34900: 28810400 slti $at, $a0, 1024 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (1024) ? 1 : 0); - if (psx_taken_BFC348FC) goto label_BFC34924; + if (psx_taken_BFC348FC) { cpu->pc = 0xBFC34924u; return; } label_BFC34904: psx_check_interrupts(cpu); /* 0xBFC34904: 10200008 beq $at, $zero, 0xBFC34928 */ @@ -129203,7 +130597,7 @@ label_BFC34904: int psx_taken_BFC34904 = (psx_brA_BFC34904 == psx_brB_BFC34904); /* 0xBFC34908: 28810400 slti $at, $a0, 1024 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (1024) ? 1 : 0); - if (psx_taken_BFC34904) goto label_BFC34928; + if (psx_taken_BFC34904) { cpu->pc = 0xBFC34928u; return; } label_BFC3490C: psx_check_interrupts(cpu); /* 0xBFC3490C: 00047040 sll $t6, $a0, 1 */ @@ -129218,10 +130612,17 @@ label_BFC3490C: /* 0xBFC34920: 00000000 nop */ /* nop */ return; +} + +void func_1FC34924(CPUState* cpu) { label_BFC34924: psx_check_interrupts(cpu); /* 0xBFC34924: 28810400 slti $at, $a0, 1024 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (1024) ? 1 : 0); + cpu->pc = 0xBFC34928u; return; /* fallthrough */ +} + +void func_1FC34928(CPUState* cpu) { label_BFC34928: psx_check_interrupts(cpu); /* 0xBFC34928: 1420000A bne $at, $zero, 0xBFC34954 */ @@ -129229,7 +130630,7 @@ label_BFC34928: int psx_taken_BFC34928 = (psx_brA_BFC34928 != psx_brB_BFC34928); /* 0xBFC3492C: 28810800 slti $at, $a0, 2048 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (2048) ? 1 : 0); - if (psx_taken_BFC34928) goto label_BFC34954; + if (psx_taken_BFC34928) { cpu->pc = 0xBFC34954u; return; } label_BFC34930: psx_check_interrupts(cpu); /* 0xBFC34930: 10200009 beq $at, $zero, 0xBFC34958 */ @@ -129237,7 +130638,7 @@ label_BFC34930: int psx_taken_BFC34930 = (psx_brA_BFC34930 == psx_brB_BFC34930); /* 0xBFC34934: 28810800 slti $at, $a0, 2048 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (2048) ? 1 : 0); - if (psx_taken_BFC34930) goto label_BFC34958; + if (psx_taken_BFC34930) { cpu->pc = 0xBFC34958u; return; } label_BFC34938: psx_check_interrupts(cpu); /* 0xBFC34938: 00047840 sll $t7, $a0, 1 */ @@ -129254,10 +130655,17 @@ label_BFC34938: /* 0xBFC34950: 00000000 nop */ /* nop */ return; +} + +void func_1FC34954(CPUState* cpu) { label_BFC34954: psx_check_interrupts(cpu); /* 0xBFC34954: 28810800 slti $at, $a0, 2048 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (2048) ? 1 : 0); + cpu->pc = 0xBFC34958u; return; /* fallthrough */ +} + +void func_1FC34958(CPUState* cpu) { label_BFC34958: psx_check_interrupts(cpu); /* 0xBFC34958: 14200009 bne $at, $zero, 0xBFC34980 */ @@ -129265,7 +130673,7 @@ label_BFC34958: int psx_taken_BFC34958 = (psx_brA_BFC34958 != psx_brB_BFC34958); /* 0xBFC3495C: 28810C00 slti $at, $a0, 3072 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3072) ? 1 : 0); - if (psx_taken_BFC34958) goto label_BFC34980; + if (psx_taken_BFC34958) { cpu->pc = 0xBFC34980u; return; } label_BFC34960: psx_check_interrupts(cpu); /* 0xBFC34960: 10200008 beq $at, $zero, 0xBFC34984 */ @@ -129273,7 +130681,7 @@ label_BFC34960: int psx_taken_BFC34960 = (psx_brA_BFC34960 == psx_brB_BFC34960); /* 0xBFC34964: 28810C00 slti $at, $a0, 3072 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3072) ? 1 : 0); - if (psx_taken_BFC34960) goto label_BFC34984; + if (psx_taken_BFC34960) { cpu->pc = 0xBFC34984u; return; } label_BFC34968: psx_check_interrupts(cpu); /* 0xBFC34968: 0004C040 sll $t8, $a0, 1 */ @@ -129288,10 +130696,17 @@ label_BFC34968: /* 0xBFC3497C: 00021023 subu $v0, $zero, $v0 */ cpu->gpr[2] = cpu->gpr[0] - cpu->gpr[2]; return; +} + +void func_1FC34980(CPUState* cpu) { label_BFC34980: psx_check_interrupts(cpu); /* 0xBFC34980: 28810C00 slti $at, $a0, 3072 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3072) ? 1 : 0); + cpu->pc = 0xBFC34984u; return; /* fallthrough */ +} + +void func_1FC34984(CPUState* cpu) { label_BFC34984: psx_check_interrupts(cpu); /* 0xBFC34984: 1420000A bne $at, $zero, 0xBFC349B0 */ @@ -129372,7 +130787,7 @@ label_BFC349D8: int psx_taken_BFC349D8 = ((int32_t)psx_brA_BFC349D8 < 0); /* 0xBFC349DC: 28810400 slti $at, $a0, 1024 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (1024) ? 1 : 0); - if (psx_taken_BFC349D8) goto label_BFC34A04; + if (psx_taken_BFC349D8) { cpu->pc = 0xBFC34A04u; return; } label_BFC349E0: psx_check_interrupts(cpu); /* 0xBFC349E0: 10200009 beq $at, $zero, 0xBFC34A08 */ @@ -129380,7 +130795,7 @@ label_BFC349E0: int psx_taken_BFC349E0 = (psx_brA_BFC349E0 == psx_brB_BFC349E0); /* 0xBFC349E4: 28810400 slti $at, $a0, 1024 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (1024) ? 1 : 0); - if (psx_taken_BFC349E0) goto label_BFC34A08; + if (psx_taken_BFC349E0) { cpu->pc = 0xBFC34A08u; return; } label_BFC349E8: psx_check_interrupts(cpu); /* 0xBFC349E8: 00047040 sll $t6, $a0, 1 */ @@ -129397,10 +130812,17 @@ label_BFC349E8: /* 0xBFC34A00: 00000000 nop */ /* nop */ return; +} + +void func_1FC34A04(CPUState* cpu) { label_BFC34A04: psx_check_interrupts(cpu); /* 0xBFC34A04: 28810400 slti $at, $a0, 1024 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (1024) ? 1 : 0); + cpu->pc = 0xBFC34A08u; return; /* fallthrough */ +} + +void func_1FC34A08(CPUState* cpu) { label_BFC34A08: psx_check_interrupts(cpu); /* 0xBFC34A08: 14200009 bne $at, $zero, 0xBFC34A30 */ @@ -129408,7 +130830,7 @@ label_BFC34A08: int psx_taken_BFC34A08 = (psx_brA_BFC34A08 != psx_brB_BFC34A08); /* 0xBFC34A0C: 28810800 slti $at, $a0, 2048 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (2048) ? 1 : 0); - if (psx_taken_BFC34A08) goto label_BFC34A30; + if (psx_taken_BFC34A08) { cpu->pc = 0xBFC34A30u; return; } label_BFC34A10: psx_check_interrupts(cpu); /* 0xBFC34A10: 10200008 beq $at, $zero, 0xBFC34A34 */ @@ -129416,7 +130838,7 @@ label_BFC34A10: int psx_taken_BFC34A10 = (psx_brA_BFC34A10 == psx_brB_BFC34A10); /* 0xBFC34A14: 28810800 slti $at, $a0, 2048 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (2048) ? 1 : 0); - if (psx_taken_BFC34A10) goto label_BFC34A34; + if (psx_taken_BFC34A10) { cpu->pc = 0xBFC34A34u; return; } label_BFC34A18: psx_check_interrupts(cpu); /* 0xBFC34A18: 00047840 sll $t7, $a0, 1 */ @@ -129431,10 +130853,17 @@ label_BFC34A18: /* 0xBFC34A2C: 00021023 subu $v0, $zero, $v0 */ cpu->gpr[2] = cpu->gpr[0] - cpu->gpr[2]; return; +} + +void func_1FC34A30(CPUState* cpu) { label_BFC34A30: psx_check_interrupts(cpu); /* 0xBFC34A30: 28810800 slti $at, $a0, 2048 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (2048) ? 1 : 0); + cpu->pc = 0xBFC34A34u; return; /* fallthrough */ +} + +void func_1FC34A34(CPUState* cpu) { label_BFC34A34: psx_check_interrupts(cpu); /* 0xBFC34A34: 1420000A bne $at, $zero, 0xBFC34A60 */ @@ -129442,7 +130871,7 @@ label_BFC34A34: int psx_taken_BFC34A34 = (psx_brA_BFC34A34 != psx_brB_BFC34A34); /* 0xBFC34A38: 28810C00 slti $at, $a0, 3072 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3072) ? 1 : 0); - if (psx_taken_BFC34A34) goto label_BFC34A60; + if (psx_taken_BFC34A34) { cpu->pc = 0xBFC34A60u; return; } label_BFC34A3C: psx_check_interrupts(cpu); /* 0xBFC34A3C: 10200009 beq $at, $zero, 0xBFC34A64 */ @@ -129450,7 +130879,7 @@ label_BFC34A3C: int psx_taken_BFC34A3C = (psx_brA_BFC34A3C == psx_brB_BFC34A3C); /* 0xBFC34A40: 28810C00 slti $at, $a0, 3072 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3072) ? 1 : 0); - if (psx_taken_BFC34A3C) goto label_BFC34A64; + if (psx_taken_BFC34A3C) { cpu->pc = 0xBFC34A64u; return; } label_BFC34A44: psx_check_interrupts(cpu); /* 0xBFC34A44: 0004C040 sll $t8, $a0, 1 */ @@ -129467,10 +130896,17 @@ label_BFC34A44: /* 0xBFC34A5C: 00021023 subu $v0, $zero, $v0 */ cpu->gpr[2] = cpu->gpr[0] - cpu->gpr[2]; return; +} + +void func_1FC34A60(CPUState* cpu) { label_BFC34A60: psx_check_interrupts(cpu); /* 0xBFC34A60: 28810C00 slti $at, $a0, 3072 */ cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[4] < (3072) ? 1 : 0); + cpu->pc = 0xBFC34A64u; return; /* fallthrough */ +} + +void func_1FC34A64(CPUState* cpu) { label_BFC34A64: psx_check_interrupts(cpu); /* 0xBFC34A64: 14200008 bne $at, $zero, 0xBFC34A88 */ @@ -129507,6 +130943,87 @@ label_BFC34A88: return; } +void func_1FC34A90(CPUState* cpu) { +label_BFC34A90: + psx_check_interrupts(cpu); + /* 0xBFC34A90: 00801821 addu $v1, $a0, $zero */ + cpu->gpr[3] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC34A94: 00037023 subu $t6, $zero, $v1 */ + cpu->gpr[14] = cpu->gpr[0] - cpu->gpr[3]; + /* 0xBFC34A98: 000E7980 sll $t7, $t6, 6 */ + cpu->gpr[15] = cpu->gpr[14] << 6u; + /* 0xBFC34A9C: 01E5001A div $t7, $a1 */ + { int32_t psx_n = (int32_t)cpu->gpr[15]; int32_t psx_d = (int32_t)cpu->gpr[5]; if (psx_d == 0) { cpu->lo = (psx_n >= 0) ? 0xFFFFFFFFu : 0x00000001u; cpu->hi = (uint32_t)psx_n; } else if (psx_n == INT32_MIN && psx_d == -1) { cpu->lo = 0x80000000u; cpu->hi = 0u; } else { int32_t psx_q = psx_n / psx_d; int32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = (uint32_t)psx_q; cpu->hi = (uint32_t)psx_r; } } + cpu->pc = 0xBFC34AA0u; return; /* fallthrough */ +} + +void func_1FC34AA0(CPUState* cpu) { +label_BFC34AA0: + psx_check_interrupts(cpu); + /* 0xBFC34AA0: 27BDFFE8 addiu $sp, $sp, -24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); + /* 0xBFC34AA4: AFBF0014 sw $ra, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34AA4u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC34AA8: 00002012 mflo $a0 */ + cpu->gpr[4] = cpu->lo; + /* 0xBFC34AAC: 14A00002 bne $a1, $zero, 0xBFC34AB8 */ + uint32_t psx_brA_BFC34AAC = cpu->gpr[5]; uint32_t psx_brB_BFC34AAC = cpu->gpr[0]; + int psx_taken_BFC34AAC = (psx_brA_BFC34AAC != psx_brB_BFC34AAC); + /* 0xBFC34AB0: 00000000 nop */ + /* nop */ + if (psx_taken_BFC34AAC) goto label_BFC34AB8; +label_BFC34AB4: + psx_check_interrupts(cpu); + /* 0xBFC34AB4: 0007000D break 0x1C00 */ + psx_break(cpu, 0x01C00u, 0xBFC34AB4u); return; +label_BFC34AB8: + psx_check_interrupts(cpu); + /* 0xBFC34AB8: 2401FFFF addiu $at, $zero, -1 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[0] + (-1)); + /* 0xBFC34ABC: 14A10004 bne $a1, $at, 0xBFC34AD0 */ + uint32_t psx_brA_BFC34ABC = cpu->gpr[5]; uint32_t psx_brB_BFC34ABC = cpu->gpr[1]; + int psx_taken_BFC34ABC = (psx_brA_BFC34ABC != psx_brB_BFC34ABC); + /* 0xBFC34AC0: 3C018000 lui $at, 0x8000 */ + cpu->gpr[1] = 0x80000000u; + if (psx_taken_BFC34ABC) goto label_BFC34AD0; +label_BFC34AC4: + psx_check_interrupts(cpu); + /* 0xBFC34AC4: 15E10002 bne $t7, $at, 0xBFC34AD0 */ + uint32_t psx_brA_BFC34AC4 = cpu->gpr[15]; uint32_t psx_brB_BFC34AC4 = cpu->gpr[1]; + int psx_taken_BFC34AC4 = (psx_brA_BFC34AC4 != psx_brB_BFC34AC4); + /* 0xBFC34AC8: 00000000 nop */ + /* nop */ + if (psx_taken_BFC34AC4) goto label_BFC34AD0; +label_BFC34ACC: + psx_check_interrupts(cpu); + /* 0xBFC34ACC: 0006000D break 0x1800 */ + psx_break(cpu, 0x01800u, 0xBFC34ACCu); return; +label_BFC34AD0: + psx_check_interrupts(cpu); + /* 0xBFC34AD0: 0C012FF6 jal 0xB004BFD8 */ + /* 0xBFC34AD4: 00000000 nop */ + /* nop */ + cpu->gpr[31] = 0xBFC34AD8u; + psx_dispatch(cpu, 0x8004BFD8u); +label_BFC34AD8: + psx_check_interrupts(cpu); + /* 0xBFC34AD8: 0C012FF9 jal 0xB004BFE4 */ + /* 0xBFC34ADC: 3C040140 lui $a0, 0x140 */ + cpu->gpr[4] = 0x01400000u; + cpu->gpr[31] = 0xBFC34AE0u; + psx_dispatch(cpu, 0x8004BFE4u); +label_BFC34AE0: + psx_check_interrupts(cpu); + /* 0xBFC34AE0: 8FBF0014 lw $ra, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34AE0u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC34AE4: 27BD0018 addiu $sp, $sp, 24 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (24)); + /* 0xBFC34AE8: 03E00008 jr $ra */ + /* 0xBFC34AEC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC34AF0(CPUState* cpu) { label_BFC34AF0: psx_check_interrupts(cpu); @@ -129522,6 +131039,12 @@ label_BFC34AF0: cpu->gpr[14] = cpu->gpr[0] - cpu->gpr[14]; /* 0xBFC34B04: 01C5001A div $t6, $a1 */ { int32_t psx_n = (int32_t)cpu->gpr[14]; int32_t psx_d = (int32_t)cpu->gpr[5]; if (psx_d == 0) { cpu->lo = (psx_n >= 0) ? 0xFFFFFFFFu : 0x00000001u; cpu->hi = (uint32_t)psx_n; } else if (psx_n == INT32_MIN && psx_d == -1) { cpu->lo = 0x80000000u; cpu->hi = 0u; } else { int32_t psx_q = psx_n / psx_d; int32_t psx_r = psx_n - (psx_q * psx_d); cpu->lo = (uint32_t)psx_q; cpu->hi = (uint32_t)psx_r; } } + cpu->pc = 0xBFC34B08u; return; /* fallthrough */ +} + +void func_1FC34B08(CPUState* cpu) { +label_BFC34B08: + psx_check_interrupts(cpu); /* 0xBFC34B08: 27BDFFE8 addiu $sp, $sp, -24 */ cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-24)); /* 0xBFC34B0C: AFBF0014 sw $ra, 20($sp) */ @@ -130102,6 +131625,1125 @@ label_BFC34E8C: return; } +void func_1FC34EC0(CPUState* cpu) { +label_BFC34EC0: + psx_check_interrupts(cpu); + /* 0xBFC34EC0: 848E0000 lh $t6, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34EC0u); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + cpu->pc = 0xBFC34EC4u; return; /* fallthrough */ +} + +void func_1FC34EC4(CPUState* cpu) { +label_BFC34EC4: + psx_check_interrupts(cpu); + /* 0xBFC34EC4: 27BDFFC0 addiu $sp, $sp, -64 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (-64)); + /* 0xBFC34EC8: 25CFF000 addiu $t7, $t6, -4096 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[14] + (-4096)); + /* 0xBFC34ECC: AFAF0014 sw $t7, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34ECCu); return; } cpu->write_word(psx_addr, cpu->gpr[15]); } + /* 0xBFC34ED0: 84980002 lh $t8, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34ED0u); return; } cpu->gpr[24] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34ED4: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC34ED8: AFB80018 sw $t8, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34ED8u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC34EDC: 84990004 lh $t9, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34EDCu); return; } cpu->gpr[25] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34EE0: 27A50040 addiu $a1, $sp, 64 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[29] + (64)); + /* 0xBFC34EE4: AFB9001C sw $t9, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34EE4u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC34EE8: 84890006 lh $t1, 6($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (6)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34EE8u); return; } cpu->gpr[9] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34EEC: 27A80064 addiu $t0, $sp, 100 */ + cpu->gpr[8] = (uint32_t)((int32_t)cpu->gpr[29] + (100)); + /* 0xBFC34EF0: AFA90020 sw $t1, 32($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (32)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34EF0u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC34EF4: 848A0008 lh $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34EF4u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34EF8: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC34EFC: 254BF000 addiu $t3, $t2, -4096 */ + cpu->gpr[11] = (uint32_t)((int32_t)cpu->gpr[10] + (-4096)); + /* 0xBFC34F00: AFAB0024 sw $t3, 36($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (36)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F00u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC34F04: 848C000A lh $t4, 10($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (10)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F04u); return; } cpu->gpr[12] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34F08: 24070003 addiu $a3, $zero, 3 */ + cpu->gpr[7] = (uint32_t)((int32_t)cpu->gpr[0] + (3)); + /* 0xBFC34F0C: AFAC0028 sw $t4, 40($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (40)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F0Cu); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC34F10: 848D000C lh $t5, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F10u); return; } cpu->gpr[13] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34F14: 00000000 nop */ + /* nop */ + /* 0xBFC34F18: AFAD002C sw $t5, 44($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F18u); return; } cpu->write_word(psx_addr, cpu->gpr[13]); } + /* 0xBFC34F1C: 848E000E lh $t6, 14($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F1Cu); return; } cpu->gpr[14] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34F20: 00000000 nop */ + /* nop */ + /* 0xBFC34F24: AFAE0030 sw $t6, 48($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (48)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F24u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC34F28: 848F0010 lh $t7, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F28u); return; } cpu->gpr[15] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC34F2C: 00000000 nop */ + /* nop */ + /* 0xBFC34F30: 25F8F000 addiu $t8, $t7, -4096 */ + cpu->gpr[24] = (uint32_t)((int32_t)cpu->gpr[15] + (-4096)); + /* 0xBFC34F34: AFB80034 sw $t8, 52($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (52)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F34u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } +label_BFC34F38: + psx_check_interrupts(cpu); + /* 0xBFC34F38: 00001821 addu $v1, $zero, $zero */ + cpu->gpr[3] = cpu->gpr[0] + cpu->gpr[0]; + /* 0xBFC34F3C: 00A02021 addu $a0, $a1, $zero */ + cpu->gpr[4] = cpu->gpr[5] + cpu->gpr[0]; +label_BFC34F40: + psx_check_interrupts(cpu); + /* 0xBFC34F40: 8C86FFD4 lw $a2, -44($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F40u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC34F44: 00000000 nop */ + /* nop */ + /* 0xBFC34F48: 04C10005 bgez $a2, 0xBFC34F60 */ + uint32_t psx_brA_BFC34F48 = cpu->gpr[6]; + int psx_taken_BFC34F48 = ((int32_t)psx_brA_BFC34F48 >= 0); + /* 0xBFC34F4C: 00000000 nop */ + /* nop */ + if (psx_taken_BFC34F48) goto label_BFC34F60; +label_BFC34F50: + psx_check_interrupts(cpu); + /* 0xBFC34F50: 0006C823 subu $t9, $zero, $a2 */ + cpu->gpr[25] = cpu->gpr[0] - cpu->gpr[6]; + /* 0xBFC34F54: AC99FFD4 sw $t9, -44($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F54u); return; } cpu->write_word(psx_addr, cpu->gpr[25]); } + /* 0xBFC34F58: 8C86FFD4 lw $a2, -44($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (-44)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC34F58u); return; } cpu->gpr[6] = cpu->read_word(psx_addr); } + /* 0xBFC34F5C: 00000000 nop */ + /* nop */ +label_BFC34F60: + psx_check_interrupts(cpu); + /* 0xBFC34F60: 24630001 addiu $v1, $v1, 1 */ + cpu->gpr[3] = (uint32_t)((int32_t)cpu->gpr[3] + (1)); + /* 0xBFC34F64: 00461021 addu $v0, $v0, $a2 */ + cpu->gpr[2] = cpu->gpr[2] + cpu->gpr[6]; + /* 0xBFC34F68: 1467FFF5 bne $v1, $a3, 0xBFC34F40 */ + uint32_t psx_brA_BFC34F68 = cpu->gpr[3]; uint32_t psx_brB_BFC34F68 = cpu->gpr[7]; + int psx_taken_BFC34F68 = (psx_brA_BFC34F68 != psx_brB_BFC34F68); + /* 0xBFC34F6C: 24840004 addiu $a0, $a0, 4 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (4)); + if (psx_taken_BFC34F68) goto label_BFC34F40; +label_BFC34F70: + psx_check_interrupts(cpu); + /* 0xBFC34F70: 24A5000C addiu $a1, $a1, 12 */ + cpu->gpr[5] = (uint32_t)((int32_t)cpu->gpr[5] + (12)); + /* 0xBFC34F74: 00A8082B sltu $at, $a1, $t0 */ + cpu->gpr[1] = (uint32_t)(cpu->gpr[5] < cpu->gpr[8] ? 1 : 0); + /* 0xBFC34F78: 1420FFEF bne $at, $zero, 0xBFC34F38 */ + uint32_t psx_brA_BFC34F78 = cpu->gpr[1]; uint32_t psx_brB_BFC34F78 = cpu->gpr[0]; + int psx_taken_BFC34F78 = (psx_brA_BFC34F78 != psx_brB_BFC34F78); + /* 0xBFC34F7C: 28410014 slti $at, $v0, 20 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[2] < (20) ? 1 : 0); + if (psx_taken_BFC34F78) goto label_BFC34F38; +label_BFC34F80: + psx_check_interrupts(cpu); + /* 0xBFC34F80: 10200004 beq $at, $zero, 0xBFC34F94 */ + uint32_t psx_brA_BFC34F80 = cpu->gpr[1]; uint32_t psx_brB_BFC34F80 = cpu->gpr[0]; + int psx_taken_BFC34F80 = (psx_brA_BFC34F80 == psx_brB_BFC34F80); + /* 0xBFC34F84: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; + if (psx_taken_BFC34F80) goto label_BFC34F94; +label_BFC34F88: + psx_check_interrupts(cpu); + /* 0xBFC34F88: 10000002 beq $zero, $zero, 0xBFC34F94 */ + uint32_t psx_brA_BFC34F88 = cpu->gpr[0]; uint32_t psx_brB_BFC34F88 = cpu->gpr[0]; + int psx_taken_BFC34F88 = (psx_brA_BFC34F88 == psx_brB_BFC34F88); + /* 0xBFC34F8C: 24020001 addiu $v0, $zero, 1 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[0] + (1)); + if (psx_taken_BFC34F88) goto label_BFC34F94; +label_BFC34F90: + psx_check_interrupts(cpu); + /* 0xBFC34F90: 00001021 addu $v0, $zero, $zero */ + cpu->gpr[2] = cpu->gpr[0] + cpu->gpr[0]; +label_BFC34F94: + psx_check_interrupts(cpu); + /* 0xBFC34F94: 03E00008 jr $ra */ + /* 0xBFC34F98: 27BD0040 addiu $sp, $sp, 64 */ + cpu->gpr[29] = (uint32_t)((int32_t)cpu->gpr[29] + (64)); + return; +} + +void func_1FC35128(CPUState* cpu) { +label_BFC35128: + psx_check_interrupts(cpu); + /* 0xBFC35128: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35128u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3512C: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3512Cu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35130: 8C8A0008 lw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35130u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35134: 8C8B000C lw $t3, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35134u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC35138: 8C8C0010 lw $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35138u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC3513C: 48C80000 ctc2 $t0, gte_ctrl[0] */ + cpu->gte_ctrl[0] = cpu->gpr[8]; + /* 0xBFC35140: 48C90800 ctc2 $t1, gte_ctrl[1] */ + cpu->gte_ctrl[1] = cpu->gpr[9]; + /* 0xBFC35144: 48CA1000 ctc2 $t2, gte_ctrl[2] */ + cpu->gte_ctrl[2] = cpu->gpr[10]; + /* 0xBFC35148: 48CB1800 ctc2 $t3, gte_ctrl[3] */ + cpu->gte_ctrl[3] = cpu->gpr[11]; + /* 0xBFC3514C: 48CC2000 ctc2 $t4, gte_ctrl[4] */ + cpu->gte_ctrl[4] = cpu->gpr[12]; + /* 0xBFC35150: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC35154: 48C03000 ctc2 $zero, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[0]; + /* 0xBFC35158: 48C03800 ctc2 $zero, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[0]; + /* 0xBFC3515C: 94A80000 lhu $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3515Cu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC35160: 8CA90004 lw $t1, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35160u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35164: 8CAA000C lw $t2, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35164u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35168: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC3516C: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC35170: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC35174: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35178: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC3517C: 00000000 nop */ + /* nop */ + /* 0xBFC35180: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35184: 94A80002 lhu $t0, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35184u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC35188: 8CA90008 lw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35188u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3518C: 84AA000E lh $t2, 14($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3518Cu); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC35190: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35194: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC35198: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC3519C: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC351A0: 480C5000 mfc2 $t4, gte_data[10] */ + cpu->gpr[12] = cpu->gte_data[10]; + /* 0xBFC351A4: 480D5800 mfc2 $t5, gte_data[11] */ + cpu->gpr[13] = cpu->gte_data[11]; + /* 0xBFC351A8: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC351AC: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC351B0: 00000000 nop */ + /* nop */ + /* 0xBFC351B4: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC351B8: 94A80004 lhu $t0, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC351B8u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC351BC: 8CA90008 lw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC351BCu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC351C0: 8CAA0010 lw $t2, 16($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC351C0u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC351C4: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC351C8: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC351CC: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC351D0: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC351D4: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC351D8: 480F5000 mfc2 $t7, gte_data[10] */ + cpu->gpr[15] = cpu->gte_data[10]; + /* 0xBFC351DC: 48185800 mfc2 $t8, gte_data[11] */ + cpu->gpr[24] = cpu->gte_data[11]; + /* 0xBFC351E0: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC351E4: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC351E8: 00000000 nop */ + /* nop */ + /* 0xBFC351EC: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC351F0: 316BFFFF andi $t3, $t3, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC351F4: 000E7400 sll $t6, $t6, 16 */ + cpu->gpr[14] = cpu->gpr[14] << 16u; + /* 0xBFC351F8: 01CB7025 or $t6, $t6, $t3 */ + cpu->gpr[14] = cpu->gpr[14] | cpu->gpr[11]; + /* 0xBFC351FC: ACCE0000 sw $t6, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC351FCu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC35200: 31ADFFFF andi $t5, $t5, 0xFFFF */ + cpu->gpr[13] = cpu->gpr[13] & 0xFFFFu; + /* 0xBFC35204: 0018C400 sll $t8, $t8, 16 */ + cpu->gpr[24] = cpu->gpr[24] << 16u; + /* 0xBFC35208: 030DC025 or $t8, $t8, $t5 */ + cpu->gpr[24] = cpu->gpr[24] | cpu->gpr[13]; + /* 0xBFC3520C: ACD8000C sw $t8, 12($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3520Cu); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC35210: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35214: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35218: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC3521C: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35220: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC35224: 010C4025 or $t0, $t0, $t4 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[12]; + /* 0xBFC35228: ACC80004 sw $t0, 4($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35228u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC3522C: 31EFFFFF andi $t7, $t7, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[15] & 0xFFFFu; + /* 0xBFC35230: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35234: 012F4825 or $t1, $t1, $t7 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[15]; + /* 0xBFC35238: ACC90008 sw $t1, 8($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35238u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC3523C: E8CB0010 swc2 gte[11], 16($a2) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[6] + (16)), cpu->gte_data[11]); + /* 0xBFC35240: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC35244: 03E00008 jr $ra */ + /* 0xBFC35248: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3524C(CPUState* cpu) { +label_BFC3524C: + psx_check_interrupts(cpu); + /* 0xBFC3524C: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC35250: 48C03000 ctc2 $zero, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[0]; + /* 0xBFC35254: 48C03800 ctc2 $zero, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[0]; + /* 0xBFC35258: 94880000 lhu $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35258u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC3525C: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3525Cu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35260: 8C8A000C lw $t2, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35260u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35264: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC35268: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC3526C: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC35270: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35274: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC35278: 00000000 nop */ + /* nop */ + /* 0xBFC3527C: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35280: 94880002 lhu $t0, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35280u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC35284: 8C890008 lw $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35284u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35288: 848A000E lh $t2, 14($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35288u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC3528C: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35290: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC35294: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC35298: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC3529C: 480C5000 mfc2 $t4, gte_data[10] */ + cpu->gpr[12] = cpu->gte_data[10]; + /* 0xBFC352A0: 480D5800 mfc2 $t5, gte_data[11] */ + cpu->gpr[13] = cpu->gte_data[11]; + /* 0xBFC352A4: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC352A8: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC352AC: 00000000 nop */ + /* nop */ + /* 0xBFC352B0: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC352B4: 94880004 lhu $t0, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC352B4u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC352B8: 8C890008 lw $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC352B8u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC352BC: 8C8A0010 lw $t2, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC352BCu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC352C0: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC352C4: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC352C8: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC352CC: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC352D0: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC352D4: 480F5000 mfc2 $t7, gte_data[10] */ + cpu->gpr[15] = cpu->gte_data[10]; + /* 0xBFC352D8: 48185800 mfc2 $t8, gte_data[11] */ + cpu->gpr[24] = cpu->gte_data[11]; + /* 0xBFC352DC: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC352E0: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC352E4: 00000000 nop */ + /* nop */ + /* 0xBFC352E8: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC352EC: 316BFFFF andi $t3, $t3, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC352F0: 000E7400 sll $t6, $t6, 16 */ + cpu->gpr[14] = cpu->gpr[14] << 16u; + /* 0xBFC352F4: 01CB7025 or $t6, $t6, $t3 */ + cpu->gpr[14] = cpu->gpr[14] | cpu->gpr[11]; + /* 0xBFC352F8: ACAE0000 sw $t6, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC352F8u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC352FC: 31ADFFFF andi $t5, $t5, 0xFFFF */ + cpu->gpr[13] = cpu->gpr[13] & 0xFFFFu; + /* 0xBFC35300: 0018C400 sll $t8, $t8, 16 */ + cpu->gpr[24] = cpu->gpr[24] << 16u; + /* 0xBFC35304: 030DC025 or $t8, $t8, $t5 */ + cpu->gpr[24] = cpu->gpr[24] | cpu->gpr[13]; + /* 0xBFC35308: ACB8000C sw $t8, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35308u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3530C: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35310: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35314: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC35318: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3531C: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC35320: 010C4025 or $t0, $t0, $t4 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[12]; + /* 0xBFC35324: ACA80004 sw $t0, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35324u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35328: 31EFFFFF andi $t7, $t7, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[15] & 0xFFFFu; + /* 0xBFC3532C: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35330: 012F4825 or $t1, $t1, $t7 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[15]; + /* 0xBFC35334: ACA90008 sw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35334u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35338: E8AB0010 swc2 gte[11], 16($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (16)), cpu->gte_data[11]); + /* 0xBFC3533C: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC35340: 03E00008 jr $ra */ + /* 0xBFC35344: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35348(CPUState* cpu) { +label_BFC35348: + psx_check_interrupts(cpu); + /* 0xBFC35348: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35348u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3534C: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3534Cu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35350: 8C8A0008 lw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35350u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35354: 8C8B000C lw $t3, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35354u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC35358: 8C8C0010 lw $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35358u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC3535C: 48C80000 ctc2 $t0, gte_ctrl[0] */ + cpu->gte_ctrl[0] = cpu->gpr[8]; + /* 0xBFC35360: 48C90800 ctc2 $t1, gte_ctrl[1] */ + cpu->gte_ctrl[1] = cpu->gpr[9]; + /* 0xBFC35364: 48CA1000 ctc2 $t2, gte_ctrl[2] */ + cpu->gte_ctrl[2] = cpu->gpr[10]; + /* 0xBFC35368: 48CB1800 ctc2 $t3, gte_ctrl[3] */ + cpu->gte_ctrl[3] = cpu->gpr[11]; + /* 0xBFC3536C: 48CC2000 ctc2 $t4, gte_ctrl[4] */ + cpu->gte_ctrl[4] = cpu->gpr[12]; + /* 0xBFC35370: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC35374: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC35378: 48C03000 ctc2 $zero, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[0]; + /* 0xBFC3537C: 48C03800 ctc2 $zero, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[0]; + /* 0xBFC35380: 94A80000 lhu $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35380u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC35384: 8CA90004 lw $t1, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35384u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35388: 8CAA000C lw $t2, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35388u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC3538C: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC35390: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC35394: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC35398: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC3539C: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC353A0: 00000000 nop */ + /* nop */ + /* 0xBFC353A4: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC353A8: 94A80002 lhu $t0, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC353A8u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC353AC: 8CA90008 lw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC353ACu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC353B0: 84AA000E lh $t2, 14($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC353B0u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC353B4: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC353B8: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC353BC: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC353C0: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC353C4: 480C5000 mfc2 $t4, gte_data[10] */ + cpu->gpr[12] = cpu->gte_data[10]; + /* 0xBFC353C8: 480D5800 mfc2 $t5, gte_data[11] */ + cpu->gpr[13] = cpu->gte_data[11]; + /* 0xBFC353CC: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC353D0: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC353D4: 00000000 nop */ + /* nop */ + /* 0xBFC353D8: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC353DC: 94A80004 lhu $t0, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC353DCu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC353E0: 8CA90008 lw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC353E0u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC353E4: 8CAA0010 lw $t2, 16($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC353E4u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC353E8: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC353EC: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC353F0: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC353F4: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC353F8: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC353FC: 480F5000 mfc2 $t7, gte_data[10] */ + cpu->gpr[15] = cpu->gte_data[10]; + /* 0xBFC35400: 48185800 mfc2 $t8, gte_data[11] */ + cpu->gpr[24] = cpu->gte_data[11]; + /* 0xBFC35404: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35408: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC3540C: 00000000 nop */ + /* nop */ + /* 0xBFC35410: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35414: 316BFFFF andi $t3, $t3, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC35418: 000E7400 sll $t6, $t6, 16 */ + cpu->gpr[14] = cpu->gpr[14] << 16u; + /* 0xBFC3541C: 01CB7025 or $t6, $t6, $t3 */ + cpu->gpr[14] = cpu->gpr[14] | cpu->gpr[11]; + /* 0xBFC35420: AC8E0000 sw $t6, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35420u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC35424: 31ADFFFF andi $t5, $t5, 0xFFFF */ + cpu->gpr[13] = cpu->gpr[13] & 0xFFFFu; + /* 0xBFC35428: 0018C400 sll $t8, $t8, 16 */ + cpu->gpr[24] = cpu->gpr[24] << 16u; + /* 0xBFC3542C: 030DC025 or $t8, $t8, $t5 */ + cpu->gpr[24] = cpu->gpr[24] | cpu->gpr[13]; + /* 0xBFC35430: AC98000C sw $t8, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35430u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC35434: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35438: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC3543C: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC35440: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35444: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC35448: 010C4025 or $t0, $t0, $t4 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[12]; + /* 0xBFC3544C: AC880004 sw $t0, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3544Cu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35450: 31EFFFFF andi $t7, $t7, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[15] & 0xFFFFu; + /* 0xBFC35454: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35458: 012F4825 or $t1, $t1, $t7 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[15]; + /* 0xBFC3545C: AC890008 sw $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3545Cu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35460: E88B0010 swc2 gte[11], 16($a0) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[4] + (16)), cpu->gte_data[11]); + /* 0xBFC35464: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC35468: 03E00008 jr $ra */ + /* 0xBFC3546C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35470(CPUState* cpu) { +label_BFC35470: + psx_check_interrupts(cpu); + /* 0xBFC35470: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35470u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35474: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35474u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35478: 8C8A0008 lw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35478u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC3547C: 8C8B000C lw $t3, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3547Cu); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC35480: 8C8C0010 lw $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35480u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC35484: 48C80000 ctc2 $t0, gte_ctrl[0] */ + cpu->gte_ctrl[0] = cpu->gpr[8]; + /* 0xBFC35488: 48C90800 ctc2 $t1, gte_ctrl[1] */ + cpu->gte_ctrl[1] = cpu->gpr[9]; + /* 0xBFC3548C: 48CA1000 ctc2 $t2, gte_ctrl[2] */ + cpu->gte_ctrl[2] = cpu->gpr[10]; + /* 0xBFC35490: 48CB1800 ctc2 $t3, gte_ctrl[3] */ + cpu->gte_ctrl[3] = cpu->gpr[11]; + /* 0xBFC35494: 48CC2000 ctc2 $t4, gte_ctrl[4] */ + cpu->gte_ctrl[4] = cpu->gpr[12]; + /* 0xBFC35498: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC3549C: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC354A0: 48C03000 ctc2 $zero, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[0]; + /* 0xBFC354A4: 48C03800 ctc2 $zero, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[0]; + /* 0xBFC354A8: 94A80000 lhu $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC354A8u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC354AC: 8CA90004 lw $t1, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC354ACu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC354B0: 8CAA000C lw $t2, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC354B0u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC354B4: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC354B8: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC354BC: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC354C0: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC354C4: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC354C8: 00000000 nop */ + /* nop */ + /* 0xBFC354CC: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC354D0: 94A80002 lhu $t0, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC354D0u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC354D4: 8CA90008 lw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC354D4u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC354D8: 84AA000E lh $t2, 14($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC354D8u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC354DC: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC354E0: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC354E4: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC354E8: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC354EC: 480C5000 mfc2 $t4, gte_data[10] */ + cpu->gpr[12] = cpu->gte_data[10]; + /* 0xBFC354F0: 480D5800 mfc2 $t5, gte_data[11] */ + cpu->gpr[13] = cpu->gte_data[11]; + /* 0xBFC354F4: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC354F8: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC354FC: 00000000 nop */ + /* nop */ + /* 0xBFC35500: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35504: 94A80004 lhu $t0, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35504u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC35508: 8CA90008 lw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35508u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3550C: 8CAA0010 lw $t2, 16($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3550Cu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35510: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC35514: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC35518: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC3551C: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC35520: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC35524: 480F5000 mfc2 $t7, gte_data[10] */ + cpu->gpr[15] = cpu->gte_data[10]; + /* 0xBFC35528: 48185800 mfc2 $t8, gte_data[11] */ + cpu->gpr[24] = cpu->gte_data[11]; + /* 0xBFC3552C: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35530: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC35534: 00000000 nop */ + /* nop */ + /* 0xBFC35538: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC3553C: 316BFFFF andi $t3, $t3, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC35540: 000E7400 sll $t6, $t6, 16 */ + cpu->gpr[14] = cpu->gpr[14] << 16u; + /* 0xBFC35544: 01CB7025 or $t6, $t6, $t3 */ + cpu->gpr[14] = cpu->gpr[14] | cpu->gpr[11]; + /* 0xBFC35548: ACAE0000 sw $t6, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35548u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3554C: 31ADFFFF andi $t5, $t5, 0xFFFF */ + cpu->gpr[13] = cpu->gpr[13] & 0xFFFFu; + /* 0xBFC35550: 0018C400 sll $t8, $t8, 16 */ + cpu->gpr[24] = cpu->gpr[24] << 16u; + /* 0xBFC35554: 030DC025 or $t8, $t8, $t5 */ + cpu->gpr[24] = cpu->gpr[24] | cpu->gpr[13]; + /* 0xBFC35558: ACB8000C sw $t8, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35558u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3555C: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35560: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35564: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC35568: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3556C: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC35570: 010C4025 or $t0, $t0, $t4 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[12]; + /* 0xBFC35574: ACA80004 sw $t0, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35574u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35578: 31EFFFFF andi $t7, $t7, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[15] & 0xFFFFu; + /* 0xBFC3557C: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35580: 012F4825 or $t1, $t1, $t7 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[15]; + /* 0xBFC35584: ACA90008 sw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35584u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35588: E8AB0010 swc2 gte[11], 16($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (16)), cpu->gte_data[11]); + /* 0xBFC3558C: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC35590: 03E00008 jr $ra */ + /* 0xBFC35594: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35598(CPUState* cpu) { +label_BFC35598: + psx_check_interrupts(cpu); + /* 0xBFC35598: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC3559C: 48C03000 ctc2 $zero, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[0]; + /* 0xBFC355A0: 48C03800 ctc2 $zero, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[0]; + /* 0xBFC355A4: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC355A4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC355A8: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC355A8u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC355AC: 8C8A000C lw $t2, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC355ACu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC355B0: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC355B4: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC355B8: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC355BC: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC355C0: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC355C4: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC355C8: 00000000 nop */ + /* nop */ + /* 0xBFC355CC: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC355D0: 94880002 lhu $t0, 2($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC355D0u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC355D4: 8C890008 lw $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC355D4u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC355D8: 848A000E lh $t2, 14($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC355D8u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC355DC: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC355E0: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC355E4: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC355E8: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC355EC: 480C5000 mfc2 $t4, gte_data[10] */ + cpu->gpr[12] = cpu->gte_data[10]; + /* 0xBFC355F0: 480D5800 mfc2 $t5, gte_data[11] */ + cpu->gpr[13] = cpu->gte_data[11]; + /* 0xBFC355F4: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC355F8: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC355FC: 00000000 nop */ + /* nop */ + /* 0xBFC35600: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35604: 94880004 lhu $t0, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35604u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC35608: 8C890008 lw $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35608u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC3560C: 8C8A0010 lw $t2, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3560Cu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35610: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC35614: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC35618: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC3561C: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC35620: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC35624: 480F5000 mfc2 $t7, gte_data[10] */ + cpu->gpr[15] = cpu->gte_data[10]; + /* 0xBFC35628: 48185800 mfc2 $t8, gte_data[11] */ + cpu->gpr[24] = cpu->gte_data[11]; + /* 0xBFC3562C: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35630: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC35634: 00000000 nop */ + /* nop */ + /* 0xBFC35638: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC3563C: 316BFFFF andi $t3, $t3, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC35640: 000E7400 sll $t6, $t6, 16 */ + cpu->gpr[14] = cpu->gpr[14] << 16u; + /* 0xBFC35644: 01CB7025 or $t6, $t6, $t3 */ + cpu->gpr[14] = cpu->gpr[14] | cpu->gpr[11]; + /* 0xBFC35648: AC8E0000 sw $t6, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35648u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC3564C: 31ADFFFF andi $t5, $t5, 0xFFFF */ + cpu->gpr[13] = cpu->gpr[13] & 0xFFFFu; + /* 0xBFC35650: 0018C400 sll $t8, $t8, 16 */ + cpu->gpr[24] = cpu->gpr[24] << 16u; + /* 0xBFC35654: 030DC025 or $t8, $t8, $t5 */ + cpu->gpr[24] = cpu->gpr[24] | cpu->gpr[13]; + /* 0xBFC35658: AC98000C sw $t8, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35658u); return; } cpu->write_word(psx_addr, cpu->gpr[24]); } + /* 0xBFC3565C: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35660: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35664: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC35668: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3566C: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC35670: 010C4025 or $t0, $t0, $t4 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[12]; + /* 0xBFC35674: AC880004 sw $t0, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35674u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35678: 31EFFFFF andi $t7, $t7, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[15] & 0xFFFFu; + /* 0xBFC3567C: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35680: 012F4825 or $t1, $t1, $t7 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[15]; + /* 0xBFC35684: AC890008 sw $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35684u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35688: E88B0010 swc2 gte[11], 16($a0) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[4] + (16)), cpu->gte_data[11]); + /* 0xBFC3568C: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC35690: 03E00008 jr $ra */ + /* 0xBFC35694: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35698(CPUState* cpu) { +label_BFC35698: + psx_check_interrupts(cpu); + /* 0xBFC35698: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35698u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3569C: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3569Cu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC356A0: 8C8A0008 lw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC356A0u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC356A4: 8C8B000C lw $t3, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC356A4u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC356A8: 8C8C0010 lw $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC356A8u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC356AC: 48C80000 ctc2 $t0, gte_ctrl[0] */ + cpu->gte_ctrl[0] = cpu->gpr[8]; + /* 0xBFC356B0: 48C90800 ctc2 $t1, gte_ctrl[1] */ + cpu->gte_ctrl[1] = cpu->gpr[9]; + /* 0xBFC356B4: 48CA1000 ctc2 $t2, gte_ctrl[2] */ + cpu->gte_ctrl[2] = cpu->gpr[10]; + /* 0xBFC356B8: 48CB1800 ctc2 $t3, gte_ctrl[3] */ + cpu->gte_ctrl[3] = cpu->gpr[11]; + /* 0xBFC356BC: 48CC2000 ctc2 $t4, gte_ctrl[4] */ + cpu->gte_ctrl[4] = cpu->gpr[12]; + /* 0xBFC356C0: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC356C4: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC356C8: 48C03000 ctc2 $zero, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[0]; + /* 0xBFC356CC: 48C03800 ctc2 $zero, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[0]; + /* 0xBFC356D0: 94A80000 lhu $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC356D0u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC356D4: 8CA90004 lw $t1, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC356D4u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC356D8: 8CAA000C lw $t2, 12($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC356D8u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC356DC: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC356E0: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC356E4: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC356E8: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC356EC: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC356F0: 00000000 nop */ + /* nop */ + /* 0xBFC356F4: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC356F8: 94A80002 lhu $t0, 2($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (2)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC356F8u); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC356FC: 8CA90008 lw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC356FCu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35700: 84AA000E lh $t2, 14($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (14)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35700u); return; } cpu->gpr[10] = (uint32_t)(int32_t)(int16_t)cpu->read_half(psx_addr); } + /* 0xBFC35704: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35708: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC3570C: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC35710: 480B4800 mfc2 $t3, gte_data[9] */ + cpu->gpr[11] = cpu->gte_data[9]; + /* 0xBFC35714: 480C5000 mfc2 $t4, gte_data[10] */ + cpu->gpr[12] = cpu->gte_data[10]; + /* 0xBFC35718: 480D5800 mfc2 $t5, gte_data[11] */ + cpu->gpr[13] = cpu->gte_data[11]; + /* 0xBFC3571C: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35720: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC35724: 00000000 nop */ + /* nop */ + /* 0xBFC35728: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC3572C: 94A80004 lhu $t0, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 1u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3572Cu); return; } cpu->gpr[8] = (uint32_t)cpu->read_half(psx_addr); } + /* 0xBFC35730: 8CA90008 lw $t1, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35730u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35734: 8CAA0010 lw $t2, 16($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35734u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35738: 3C01FFFF lui $at, 0xFFFF */ + cpu->gpr[1] = 0xFFFF0000u; + /* 0xBFC3573C: 01214824 and $t1, $t1, $at */ + cpu->gpr[9] = cpu->gpr[9] & cpu->gpr[1]; + /* 0xBFC35740: 01094025 or $t0, $t0, $t1 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[9]; + /* 0xBFC35744: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC35748: 480E4800 mfc2 $t6, gte_data[9] */ + cpu->gpr[14] = cpu->gte_data[9]; + /* 0xBFC3574C: 480F5000 mfc2 $t7, gte_data[10] */ + cpu->gpr[15] = cpu->gte_data[10]; + /* 0xBFC35750: 48185800 mfc2 $t8, gte_data[11] */ + cpu->gpr[24] = cpu->gte_data[11]; + /* 0xBFC35754: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35758: 488A0800 mtc2 $t2, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[10]; + /* 0xBFC3575C: 00000000 nop */ + /* nop */ + /* 0xBFC35760: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35764: 316BFFFF andi $t3, $t3, 0xFFFF */ + cpu->gpr[11] = cpu->gpr[11] & 0xFFFFu; + /* 0xBFC35768: 000E7400 sll $t6, $t6, 16 */ + cpu->gpr[14] = cpu->gpr[14] << 16u; + /* 0xBFC3576C: 01CB7025 or $t6, $t6, $t3 */ + cpu->gpr[14] = cpu->gpr[14] | cpu->gpr[11]; + /* 0xBFC35770: 31ADFFFF andi $t5, $t5, 0xFFFF */ + cpu->gpr[13] = cpu->gpr[13] & 0xFFFFu; + /* 0xBFC35774: 0018C400 sll $t8, $t8, 16 */ + cpu->gpr[24] = cpu->gpr[24] << 16u; + /* 0xBFC35778: 030DC025 or $t8, $t8, $t5 */ + cpu->gpr[24] = cpu->gpr[24] | cpu->gpr[13]; + /* 0xBFC3577C: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35780: 48084800 mfc2 $t0, gte_data[9] */ + cpu->gpr[8] = cpu->gte_data[9]; + /* 0xBFC35784: 48095000 mfc2 $t1, gte_data[10] */ + cpu->gpr[9] = cpu->gte_data[10]; + /* 0xBFC35788: 480A5800 mfc2 $t2, gte_data[11] */ + cpu->gpr[10] = cpu->gte_data[11]; + /* 0xBFC3578C: 3108FFFF andi $t0, $t0, 0xFFFF */ + cpu->gpr[8] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35790: 000C6400 sll $t4, $t4, 16 */ + cpu->gpr[12] = cpu->gpr[12] << 16u; + /* 0xBFC35794: 010C4025 or $t0, $t0, $t4 */ + cpu->gpr[8] = cpu->gpr[8] | cpu->gpr[12]; + /* 0xBFC35798: 31EFFFFF andi $t7, $t7, 0xFFFF */ + cpu->gpr[15] = cpu->gpr[15] & 0xFFFFu; + /* 0xBFC3579C: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC357A0: 012F4825 or $t1, $t1, $t7 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[15]; + /* 0xBFC357A4: 48CE0000 ctc2 $t6, gte_ctrl[0] */ + cpu->gte_ctrl[0] = cpu->gpr[14]; + /* 0xBFC357A8: 48C80800 ctc2 $t0, gte_ctrl[1] */ + cpu->gte_ctrl[1] = cpu->gpr[8]; + /* 0xBFC357AC: 48C91000 ctc2 $t1, gte_ctrl[2] */ + cpu->gte_ctrl[2] = cpu->gpr[9]; + /* 0xBFC357B0: 48D81800 ctc2 $t8, gte_ctrl[3] */ + cpu->gte_ctrl[3] = cpu->gpr[24]; + /* 0xBFC357B4: 48CA2000 ctc2 $t2, gte_ctrl[4] */ + cpu->gte_ctrl[4] = cpu->gpr[10]; + /* 0xBFC357B8: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC357BC: 03E00008 jr $ra */ + /* 0xBFC357C0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC357C4(CPUState* cpu) { +label_BFC357C4: + psx_check_interrupts(cpu); + /* 0xBFC357C4: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC357C4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC357C8: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC357C8u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC357CC: 8C8A0008 lw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC357CCu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC357D0: 8C8B000C lw $t3, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC357D0u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC357D4: 8C8C0010 lw $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC357D4u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC357D8: 48C80000 ctc2 $t0, gte_ctrl[0] */ + cpu->gte_ctrl[0] = cpu->gpr[8]; + /* 0xBFC357DC: 48C90800 ctc2 $t1, gte_ctrl[1] */ + cpu->gte_ctrl[1] = cpu->gpr[9]; + /* 0xBFC357E0: 48CA1000 ctc2 $t2, gte_ctrl[2] */ + cpu->gte_ctrl[2] = cpu->gpr[10]; + /* 0xBFC357E4: 48CB1800 ctc2 $t3, gte_ctrl[3] */ + cpu->gte_ctrl[3] = cpu->gpr[11]; + /* 0xBFC357E8: 48CC2000 ctc2 $t4, gte_ctrl[4] */ + cpu->gte_ctrl[4] = cpu->gpr[12]; + /* 0xBFC357EC: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC357F0: 48C03000 ctc2 $zero, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[0]; + /* 0xBFC357F4: 48C03800 ctc2 $zero, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[0]; + /* 0xBFC357F8: 8CA80000 lw $t0, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC357F8u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC357FC: 8CA90004 lw $t1, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC357FCu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35800: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35804: 48890800 mtc2 $t1, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[9]; + /* 0xBFC35808: 00000000 nop */ + /* nop */ + /* 0xBFC3580C: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35810: E8C90000 swc2 gte[9], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[9]); + /* 0xBFC35814: E8C90000 swc2 gte[9], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[9]); + /* 0xBFC35818: E8CA0004 swc2 gte[10], 4($a2) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[6] + (4)), cpu->gte_data[10]); + /* 0xBFC3581C: E8CB0008 swc2 gte[11], 8($a2) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[6] + (8)), cpu->gte_data[11]); + /* 0xBFC35820: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC35824: 03E00008 jr $ra */ + /* 0xBFC35828: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC3582C(CPUState* cpu) { +label_BFC3582C: + psx_check_interrupts(cpu); + /* 0xBFC3582C: 48C02800 ctc2 $zero, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[0]; + /* 0xBFC35830: 48C03000 ctc2 $zero, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[0]; + /* 0xBFC35834: 48C03800 ctc2 $zero, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[0]; + /* 0xBFC35838: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35838u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC3583C: 8C890004 lw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3583Cu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35840: 48880000 mtc2 $t0, gte_data[0] */ + cpu->gte_data[0] = cpu->gpr[8]; + /* 0xBFC35844: 48890800 mtc2 $t1, gte_data[1] */ + cpu->gte_data[1] = cpu->gpr[9]; + /* 0xBFC35848: 00000000 nop */ + /* nop */ + /* 0xBFC3584C: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35850: E8A90000 swc2 gte[9], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[9]); + /* 0xBFC35854: E8A90000 swc2 gte[9], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[9]); + /* 0xBFC35858: E8AA0004 swc2 gte[10], 4($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (4)), cpu->gte_data[10]); + /* 0xBFC3585C: E8AB0008 swc2 gte[11], 8($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (8)), cpu->gte_data[11]); + /* 0xBFC35860: 00C01021 addu $v0, $a2, $zero */ + cpu->gpr[2] = cpu->gpr[6] + cpu->gpr[0]; + /* 0xBFC35864: 03E00008 jr $ra */ + /* 0xBFC35868: 00000000 nop */ + /* nop */ + return; +} + void func_1FC3586C(CPUState* cpu) { label_BFC3586C: psx_check_interrupts(cpu); @@ -130125,6 +132767,157 @@ label_BFC3586C: return; } +void func_1FC35890(CPUState* cpu) { +label_BFC35890: + psx_check_interrupts(cpu); + /* 0xBFC35890: 8C880000 lw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35890u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35894: 8CAB0000 lw $t3, 0($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35894u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC35898: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3589C: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC358A0: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC358A4: 012B0019 multu $t1, $t3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[11]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC358A8: 8CAC0004 lw $t4, 4($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC358A8u); return; } cpu->gpr[12] = cpu->read_word(psx_addr); } + /* 0xBFC358AC: 00085403 sra $t2, $t0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC358B0: 8CAD0008 lw $t5, 8($a1) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[5] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC358B0u); return; } cpu->gpr[13] = cpu->read_word(psx_addr); } + /* 0xBFC358B4: 8C880004 lw $t0, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC358B4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC358B8: 00801021 addu $v0, $a0, $zero */ + cpu->gpr[2] = cpu->gpr[4] + cpu->gpr[0]; + /* 0xBFC358BC: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC358C0: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC358C4: 3129FFFF andi $t1, $t1, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC358C8: 014C0019 multu $t2, $t4 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[12]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC358CC: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC358D0: 000A5303 sra $t2, $t2, 12 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 12u); + /* 0xBFC358D4: 000A5400 sll $t2, $t2, 16 */ + cpu->gpr[10] = cpu->gpr[10] << 16u; + /* 0xBFC358D8: 012A4825 or $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC358DC: AC890000 sw $t1, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC358DCu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC358E0: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC358E4: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC358E8: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC358EC: 012D0019 multu $t1, $t5 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[13]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC358F0: 00085403 sra $t2, $t0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC358F4: 8C880008 lw $t0, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC358F4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC358F8: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC358FC: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC35900: 3129FFFF andi $t1, $t1, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC35904: 014B0019 multu $t2, $t3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[11]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC35908: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC3590C: 000A5303 sra $t2, $t2, 12 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 12u); + /* 0xBFC35910: 000A5400 sll $t2, $t2, 16 */ + cpu->gpr[10] = cpu->gpr[10] << 16u; + /* 0xBFC35914: 012A4825 or $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC35918: AC890004 sw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35918u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC3591C: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35920: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35924: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC35928: 012C0019 multu $t1, $t4 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[12]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC3592C: 00085403 sra $t2, $t0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC35930: 8C88000C lw $t0, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35930u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35934: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC35938: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC3593C: 3129FFFF andi $t1, $t1, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC35940: 014D0019 multu $t2, $t5 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[13]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC35944: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC35948: 000A5303 sra $t2, $t2, 12 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 12u); + /* 0xBFC3594C: 000A5400 sll $t2, $t2, 16 */ + cpu->gpr[10] = cpu->gpr[10] << 16u; + /* 0xBFC35950: 012A4825 or $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC35954: AC890008 sw $t1, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35954u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35958: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC3595C: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC35960: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC35964: 012B0019 multu $t1, $t3 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[11]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC35968: 00085403 sra $t2, $t0, 16 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[8] >> 16u); + /* 0xBFC3596C: 8C880010 lw $t0, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC3596Cu); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35970: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC35974: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC35978: 3129FFFF andi $t1, $t1, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[9] & 0xFFFFu; + /* 0xBFC3597C: 014C0019 multu $t2, $t4 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[10] * (uint64_t)cpu->gpr[12]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC35980: 00005012 mflo $t2 */ + cpu->gpr[10] = cpu->lo; + /* 0xBFC35984: 000A5303 sra $t2, $t2, 12 */ + cpu->gpr[10] = (uint32_t)((int32_t)cpu->gpr[10] >> 12u); + /* 0xBFC35988: 000A5400 sll $t2, $t2, 16 */ + cpu->gpr[10] = cpu->gpr[10] << 16u; + /* 0xBFC3598C: 012A4825 or $t1, $t1, $t2 */ + cpu->gpr[9] = cpu->gpr[9] | cpu->gpr[10]; + /* 0xBFC35990: AC89000C sw $t1, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35990u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35994: 3109FFFF andi $t1, $t0, 0xFFFF */ + cpu->gpr[9] = cpu->gpr[8] & 0xFFFFu; + /* 0xBFC35998: 00094C00 sll $t1, $t1, 16 */ + cpu->gpr[9] = cpu->gpr[9] << 16u; + /* 0xBFC3599C: 00094C03 sra $t1, $t1, 16 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 16u); + /* 0xBFC359A0: 012D0019 multu $t1, $t5 */ + { uint64_t psx_p = (uint64_t)cpu->gpr[9] * (uint64_t)cpu->gpr[13]; cpu->lo = (uint32_t)(psx_p & 0xFFFFFFFFu); cpu->hi = (uint32_t)(psx_p >> 32); } + /* 0xBFC359A4: 00004812 mflo $t1 */ + cpu->gpr[9] = cpu->lo; + /* 0xBFC359A8: 00094B03 sra $t1, $t1, 12 */ + cpu->gpr[9] = (uint32_t)((int32_t)cpu->gpr[9] >> 12u); + /* 0xBFC359AC: 03E00008 jr $ra */ + /* 0xBFC359B0: AC890010 sw $t1, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC359B0u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + return; +} + void func_1FC359B4(CPUState* cpu) { label_BFC359B4: psx_check_interrupts(cpu); @@ -130384,6 +133177,687 @@ label_BFC35B68: return; } +void func_1FC35B88(CPUState* cpu) { +label_BFC35B88: + psx_check_interrupts(cpu); + /* 0xBFC35B88: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC35B8C: 8DCE8EDC lw $t6, -28964($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-28964)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35B8Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC35B90: 00000000 nop */ + /* nop */ + /* 0xBFC35B94: 29C10280 slti $at, $t6, 640 */ + cpu->gpr[1] = (uint32_t)((int32_t)cpu->gpr[14] < (640) ? 1 : 0); + /* 0xBFC35B98: 1420000A bne $at, $zero, 0xBFC35BC4 */ + uint32_t psx_brA_BFC35B98 = cpu->gpr[1]; uint32_t psx_brB_BFC35B98 = cpu->gpr[0]; + int psx_taken_BFC35B98 = (psx_brA_BFC35B98 != psx_brB_BFC35B98); + /* 0xBFC35B9C: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC35B98) { cpu->pc = 0xBFC35BC4u; return; } +label_BFC35BA0: + psx_check_interrupts(cpu); + /* 0xBFC35BA0: AC3F8ED0 sw $ra, -28976($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28976)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35BA0u); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC35BA4: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC35BA8: 0C016A44 jal 0xB005A910 */ + /* 0xBFC35BAC: 24849160 addiu $a0, $a0, -28320 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-28320)); + cpu->gpr[31] = 0xBFC35BB0u; + psx_dispatch(cpu, 0x8005A910u); +label_BFC35BB0: + psx_check_interrupts(cpu); + /* 0xBFC35BB0: 3C1F8008 lui $ra, 0x8008 */ + cpu->gpr[31] = 0x80080000u; + /* 0xBFC35BB4: 8FFF8ED0 lw $ra, -28976($ra) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[31] + (-28976)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35BB4u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC35BB8: 00000000 nop */ + /* nop */ + /* 0xBFC35BBC: 03E00008 jr $ra */ + /* 0xBFC35BC0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35BC4(CPUState* cpu) { +label_BFC35BC4: + psx_check_interrupts(cpu); + /* 0xBFC35BC4: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC35BC8: 01EE7821 addu $t7, $t7, $t6 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[14]; + /* 0xBFC35BCC: 25EF8EE0 addiu $t7, $t7, -28960 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-28960)); + /* 0xBFC35BD0: 48480000 cfc2 $t0, gte_ctrl[0] */ + cpu->gpr[8] = cpu->gte_ctrl[0]; + /* 0xBFC35BD4: 48490800 cfc2 $t1, gte_ctrl[1] */ + cpu->gpr[9] = cpu->gte_ctrl[1]; + /* 0xBFC35BD8: ADE80000 sw $t0, 0($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35BD8u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35BDC: ADE90004 sw $t1, 4($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35BDCu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35BE0: 48481000 cfc2 $t0, gte_ctrl[2] */ + cpu->gpr[8] = cpu->gte_ctrl[2]; + /* 0xBFC35BE4: 48491800 cfc2 $t1, gte_ctrl[3] */ + cpu->gpr[9] = cpu->gte_ctrl[3]; + /* 0xBFC35BE8: ADE80008 sw $t0, 8($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35BE8u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35BEC: ADE9000C sw $t1, 12($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35BECu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35BF0: 48482000 cfc2 $t0, gte_ctrl[4] */ + cpu->gpr[8] = cpu->gte_ctrl[4]; + /* 0xBFC35BF4: 00000000 nop */ + /* nop */ + /* 0xBFC35BF8: ADE80010 sw $t0, 16($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35BF8u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35BFC: 48482800 cfc2 $t0, gte_ctrl[5] */ + cpu->gpr[8] = cpu->gte_ctrl[5]; + /* 0xBFC35C00: 48493000 cfc2 $t1, gte_ctrl[6] */ + cpu->gpr[9] = cpu->gte_ctrl[6]; + /* 0xBFC35C04: 484A3800 cfc2 $t2, gte_ctrl[7] */ + cpu->gpr[10] = cpu->gte_ctrl[7]; + /* 0xBFC35C08: ADE80014 sw $t0, 20($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C08u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35C0C: ADE90018 sw $t1, 24($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C0Cu); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35C10: ADEA001C sw $t2, 28($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C10u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC35C14: 21CE0020 addi $t6, $t6, 32 */ + { int32_t psx_a = (int32_t)cpu->gpr[14]; int32_t psx_b = (32); int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[14] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC35C18: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC35C1C: AC2E8EDC sw $t6, -28964($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28964)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C1Cu); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC35C20: 03E00008 jr $ra */ + /* 0xBFC35C24: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35C28(CPUState* cpu) { +label_BFC35C28: + psx_check_interrupts(cpu); + /* 0xBFC35C28: 3C0E8008 lui $t6, 0x8008 */ + cpu->gpr[14] = 0x80080000u; + /* 0xBFC35C2C: 8DCE8EDC lw $t6, -28964($t6) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[14] + (-28964)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C2Cu); return; } cpu->gpr[14] = cpu->read_word(psx_addr); } + /* 0xBFC35C30: 00000000 nop */ + /* nop */ + /* 0xBFC35C34: 1DC0000A bgtz $t6, 0xBFC35C60 */ + uint32_t psx_brA_BFC35C34 = cpu->gpr[14]; + int psx_taken_BFC35C34 = ((int32_t)psx_brA_BFC35C34 > 0); + /* 0xBFC35C38: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + if (psx_taken_BFC35C34) { cpu->pc = 0xBFC35C60u; return; } +label_BFC35C3C: + psx_check_interrupts(cpu); + /* 0xBFC35C3C: AC3F8ED0 sw $ra, -28976($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28976)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C3Cu); return; } cpu->write_word(psx_addr, cpu->gpr[31]); } + /* 0xBFC35C40: 3C048008 lui $a0, 0x8008 */ + cpu->gpr[4] = 0x80080000u; + /* 0xBFC35C44: 0C016A44 jal 0xB005A910 */ + /* 0xBFC35C48: 24849191 addiu $a0, $a0, -28271 */ + cpu->gpr[4] = (uint32_t)((int32_t)cpu->gpr[4] + (-28271)); + cpu->gpr[31] = 0xBFC35C4Cu; + psx_dispatch(cpu, 0x8005A910u); +label_BFC35C4C: + psx_check_interrupts(cpu); + /* 0xBFC35C4C: 3C1F8008 lui $ra, 0x8008 */ + cpu->gpr[31] = 0x80080000u; + /* 0xBFC35C50: 8FFF8ED0 lw $ra, -28976($ra) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[31] + (-28976)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C50u); return; } cpu->gpr[31] = cpu->read_word(psx_addr); } + /* 0xBFC35C54: 00000000 nop */ + /* nop */ + /* 0xBFC35C58: 03E00008 jr $ra */ + /* 0xBFC35C5C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35C60(CPUState* cpu) { +label_BFC35C60: + psx_check_interrupts(cpu); + /* 0xBFC35C60: 21CEFFE0 addi $t6, $t6, -32 */ + { int32_t psx_a = (int32_t)cpu->gpr[14]; int32_t psx_b = (-32); int64_t psx_r = (int64_t)psx_a + (int64_t)psx_b; if (psx_r < (int64_t)INT32_MIN || psx_r > (int64_t)INT32_MAX) { psx_arith_overflow(cpu); return; } cpu->gpr[14] = (uint32_t)(int32_t)psx_r; } + /* 0xBFC35C64: 3C018008 lui $at, 0x8008 */ + cpu->gpr[1] = 0x80080000u; + /* 0xBFC35C68: AC2E8EDC sw $t6, -28964($at) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[1] + (-28964)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C68u); return; } cpu->write_word(psx_addr, cpu->gpr[14]); } + /* 0xBFC35C6C: 3C0F8008 lui $t7, 0x8008 */ + cpu->gpr[15] = 0x80080000u; + /* 0xBFC35C70: 01EE7821 addu $t7, $t7, $t6 */ + cpu->gpr[15] = cpu->gpr[15] + cpu->gpr[14]; + /* 0xBFC35C74: 25EF8EE0 addiu $t7, $t7, -28960 */ + cpu->gpr[15] = (uint32_t)((int32_t)cpu->gpr[15] + (-28960)); + /* 0xBFC35C78: 8DE80000 lw $t0, 0($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C78u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35C7C: 8DE90004 lw $t1, 4($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C7Cu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35C80: 48C80000 ctc2 $t0, gte_ctrl[0] */ + cpu->gte_ctrl[0] = cpu->gpr[8]; + /* 0xBFC35C84: 48C90800 ctc2 $t1, gte_ctrl[1] */ + cpu->gte_ctrl[1] = cpu->gpr[9]; + /* 0xBFC35C88: 8DE80008 lw $t0, 8($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C88u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35C8C: 8DE9000C lw $t1, 12($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C8Cu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35C90: 48C81000 ctc2 $t0, gte_ctrl[2] */ + cpu->gte_ctrl[2] = cpu->gpr[8]; + /* 0xBFC35C94: 48C91800 ctc2 $t1, gte_ctrl[3] */ + cpu->gte_ctrl[3] = cpu->gpr[9]; + /* 0xBFC35C98: 8DE80010 lw $t0, 16($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35C98u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35C9C: 00000000 nop */ + /* nop */ + /* 0xBFC35CA0: 48C82000 ctc2 $t0, gte_ctrl[4] */ + cpu->gte_ctrl[4] = cpu->gpr[8]; + /* 0xBFC35CA4: 00000000 nop */ + /* nop */ + /* 0xBFC35CA8: 8DE80014 lw $t0, 20($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CA8u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35CAC: 8DE90018 lw $t1, 24($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CACu); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35CB0: 8DEA001C lw $t2, 28($t7) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[15] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CB0u); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35CB4: 48C82800 ctc2 $t0, gte_ctrl[5] */ + cpu->gte_ctrl[5] = cpu->gpr[8]; + /* 0xBFC35CB8: 48C93000 ctc2 $t1, gte_ctrl[6] */ + cpu->gte_ctrl[6] = cpu->gpr[9]; + /* 0xBFC35CBC: 48CA3800 ctc2 $t2, gte_ctrl[7] */ + cpu->gte_ctrl[7] = cpu->gpr[10]; + /* 0xBFC35CC0: 03E00008 jr $ra */ + /* 0xBFC35CC4: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35CC8(CPUState* cpu) { +label_BFC35CC8: + psx_check_interrupts(cpu); + /* 0xBFC35CC8: 48480000 cfc2 $t0, gte_ctrl[0] */ + cpu->gpr[8] = cpu->gte_ctrl[0]; + /* 0xBFC35CCC: 48490800 cfc2 $t1, gte_ctrl[1] */ + cpu->gpr[9] = cpu->gte_ctrl[1]; + /* 0xBFC35CD0: 484A1000 cfc2 $t2, gte_ctrl[2] */ + cpu->gpr[10] = cpu->gte_ctrl[2]; + /* 0xBFC35CD4: 484B1800 cfc2 $t3, gte_ctrl[3] */ + cpu->gpr[11] = cpu->gte_ctrl[3]; + /* 0xBFC35CD8: 484C2000 cfc2 $t4, gte_ctrl[4] */ + cpu->gpr[12] = cpu->gte_ctrl[4]; + /* 0xBFC35CDC: AC880000 sw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CDCu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35CE0: AC890004 sw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CE0u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35CE4: AC8A0008 sw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CE4u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC35CE8: AC8B000C sw $t3, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CE8u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC35CEC: AC8C0010 sw $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CECu); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC35CF0: 48482800 cfc2 $t0, gte_ctrl[5] */ + cpu->gpr[8] = cpu->gte_ctrl[5]; + /* 0xBFC35CF4: 48493000 cfc2 $t1, gte_ctrl[6] */ + cpu->gpr[9] = cpu->gte_ctrl[6]; + /* 0xBFC35CF8: 484A3800 cfc2 $t2, gte_ctrl[7] */ + cpu->gpr[10] = cpu->gte_ctrl[7]; + /* 0xBFC35CFC: AC880014 sw $t0, 20($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35CFCu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35D00: AC890018 sw $t1, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D00u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35D04: AC8A001C sw $t2, 28($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D04u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC35D08: 03E00008 jr $ra */ + /* 0xBFC35D0C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35D10(CPUState* cpu) { +label_BFC35D10: + psx_check_interrupts(cpu); + /* 0xBFC35D10: 48484000 cfc2 $t0, gte_ctrl[8] */ + cpu->gpr[8] = cpu->gte_ctrl[8]; + /* 0xBFC35D14: 48494800 cfc2 $t1, gte_ctrl[9] */ + cpu->gpr[9] = cpu->gte_ctrl[9]; + /* 0xBFC35D18: 484A5000 cfc2 $t2, gte_ctrl[10] */ + cpu->gpr[10] = cpu->gte_ctrl[10]; + /* 0xBFC35D1C: 484B5800 cfc2 $t3, gte_ctrl[11] */ + cpu->gpr[11] = cpu->gte_ctrl[11]; + /* 0xBFC35D20: 484C6000 cfc2 $t4, gte_ctrl[12] */ + cpu->gpr[12] = cpu->gte_ctrl[12]; + /* 0xBFC35D24: AC880000 sw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D24u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35D28: AC890004 sw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D28u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35D2C: AC8A0008 sw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D2Cu); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC35D30: AC8B000C sw $t3, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D30u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC35D34: AC8C0010 sw $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D34u); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC35D38: 48486800 cfc2 $t0, gte_ctrl[13] */ + cpu->gpr[8] = cpu->gte_ctrl[13]; + /* 0xBFC35D3C: 48497000 cfc2 $t1, gte_ctrl[14] */ + cpu->gpr[9] = cpu->gte_ctrl[14]; + /* 0xBFC35D40: 484A7800 cfc2 $t2, gte_ctrl[15] */ + cpu->gpr[10] = cpu->gte_ctrl[15]; + /* 0xBFC35D44: AC880014 sw $t0, 20($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D44u); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35D48: AC890018 sw $t1, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D48u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35D4C: AC8A001C sw $t2, 28($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D4Cu); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC35D50: 03E00008 jr $ra */ + /* 0xBFC35D54: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35D58(CPUState* cpu) { +label_BFC35D58: + psx_check_interrupts(cpu); + /* 0xBFC35D58: 48488000 cfc2 $t0, gte_ctrl[16] */ + cpu->gpr[8] = cpu->gte_ctrl[16]; + /* 0xBFC35D5C: 48498800 cfc2 $t1, gte_ctrl[17] */ + cpu->gpr[9] = cpu->gte_ctrl[17]; + /* 0xBFC35D60: 484A9000 cfc2 $t2, gte_ctrl[18] */ + cpu->gpr[10] = cpu->gte_ctrl[18]; + /* 0xBFC35D64: 484B9800 cfc2 $t3, gte_ctrl[19] */ + cpu->gpr[11] = cpu->gte_ctrl[19]; + /* 0xBFC35D68: 484CA000 cfc2 $t4, gte_ctrl[20] */ + cpu->gpr[12] = cpu->gte_ctrl[20]; + /* 0xBFC35D6C: AC880000 sw $t0, 0($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D6Cu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35D70: AC890004 sw $t1, 4($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (4)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D70u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35D74: AC8A0008 sw $t2, 8($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (8)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D74u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC35D78: AC8B000C sw $t3, 12($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (12)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D78u); return; } cpu->write_word(psx_addr, cpu->gpr[11]); } + /* 0xBFC35D7C: AC8C0010 sw $t4, 16($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D7Cu); return; } cpu->write_word(psx_addr, cpu->gpr[12]); } + /* 0xBFC35D80: 4848A800 cfc2 $t0, gte_ctrl[21] */ + cpu->gpr[8] = cpu->gte_ctrl[21]; + /* 0xBFC35D84: 4849B000 cfc2 $t1, gte_ctrl[22] */ + cpu->gpr[9] = cpu->gte_ctrl[22]; + /* 0xBFC35D88: 484AB800 cfc2 $t2, gte_ctrl[23] */ + cpu->gpr[10] = cpu->gte_ctrl[23]; + /* 0xBFC35D8C: AC880014 sw $t0, 20($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D8Cu); return; } cpu->write_word(psx_addr, cpu->gpr[8]); } + /* 0xBFC35D90: AC890018 sw $t1, 24($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D90u); return; } cpu->write_word(psx_addr, cpu->gpr[9]); } + /* 0xBFC35D94: AC8A001C sw $t2, 28($a0) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[4] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35D94u); return; } cpu->write_word(psx_addr, cpu->gpr[10]); } + /* 0xBFC35D98: 03E00008 jr $ra */ + /* 0xBFC35D9C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35DA0(CPUState* cpu) { +label_BFC35DA0: + psx_check_interrupts(cpu); + /* 0xBFC35DA0: C8800000 lwc2 gte[0], 0($a0) */ + cpu->gte_data[0] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35DA4: C8810004 lwc2 gte[1], 4($a0) */ + cpu->gte_data[1] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35DA8: 00000000 nop */ + /* nop */ + /* 0xBFC35DAC: 4A180001 gte cmd 0x01 */ + gte_execute(cpu, 0x0180001); + /* 0xBFC35DB0: E8AE0000 swc2 gte[14], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[14]); + /* 0xBFC35DB4: E8AE0000 swc2 gte[14], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[14]); + /* 0xBFC35DB8: E8C80000 swc2 gte[8], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[8]); + /* 0xBFC35DBC: 4843F800 cfc2 $v1, gte_ctrl[31] */ + cpu->gpr[3] = cpu->gte_ctrl[31]; + /* 0xBFC35DC0: 48029800 mfc2 $v0, gte_data[19] */ + cpu->gpr[2] = cpu->gte_data[19]; + /* 0xBFC35DC4: ACE30000 sw $v1, 0($a3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[7] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35DC4u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC35DC8: 00021083 sra $v0, $v0, 2 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] >> 2u); + /* 0xBFC35DCC: 03E00008 jr $ra */ + /* 0xBFC35DD0: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35DD4(CPUState* cpu) { +label_BFC35DD4: + psx_check_interrupts(cpu); + /* 0xBFC35DD4: C8800000 lwc2 gte[0], 0($a0) */ + cpu->gte_data[0] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35DD8: C8810004 lwc2 gte[1], 4($a0) */ + cpu->gte_data[1] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35DDC: C8A20000 lwc2 gte[2], 0($a1) */ + cpu->gte_data[2] = cpu->read_word(cpu->gpr[5]); + /* 0xBFC35DE0: C8A30004 lwc2 gte[3], 4($a1) */ + cpu->gte_data[3] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[5] + (4))); + /* 0xBFC35DE4: C8C40000 lwc2 gte[4], 0($a2) */ + cpu->gte_data[4] = cpu->read_word(cpu->gpr[6]); + /* 0xBFC35DE8: C8C50004 lwc2 gte[5], 4($a2) */ + cpu->gte_data[5] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[6] + (4))); + /* 0xBFC35DEC: 00000000 nop */ + /* nop */ + /* 0xBFC35DF0: 4A280030 gte cmd 0x30 */ + gte_execute(cpu, 0x0280030); + /* 0xBFC35DF4: 8FA80010 lw $t0, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35DF4u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35DF8: 8FA90014 lw $t1, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35DF8u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35DFC: 8FAA0018 lw $t2, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35DFCu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35E00: 8FAB001C lw $t3, 28($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (28)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35E00u); return; } cpu->gpr[11] = cpu->read_word(psx_addr); } + /* 0xBFC35E04: E8EC0000 swc2 gte[12], 0($a3) */ + cpu->write_word(cpu->gpr[7], cpu->gte_data[12]); + /* 0xBFC35E08: E8EC0000 swc2 gte[12], 0($a3) */ + cpu->write_word(cpu->gpr[7], cpu->gte_data[12]); + /* 0xBFC35E0C: E90D0000 swc2 gte[13], 0($t0) */ + cpu->write_word(cpu->gpr[8], cpu->gte_data[13]); + /* 0xBFC35E10: E92E0000 swc2 gte[14], 0($t1) */ + cpu->write_word(cpu->gpr[9], cpu->gte_data[14]); + /* 0xBFC35E14: E9480000 swc2 gte[8], 0($t2) */ + cpu->write_word(cpu->gpr[10], cpu->gte_data[8]); + /* 0xBFC35E18: 4843F800 cfc2 $v1, gte_ctrl[31] */ + cpu->gpr[3] = cpu->gte_ctrl[31]; + /* 0xBFC35E1C: 48029800 mfc2 $v0, gte_data[19] */ + cpu->gpr[2] = cpu->gte_data[19]; + /* 0xBFC35E20: AD630000 sw $v1, 0($t3) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[11] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35E20u); return; } cpu->write_word(psx_addr, cpu->gpr[3]); } + /* 0xBFC35E24: 00021083 sra $v0, $v0, 2 */ + cpu->gpr[2] = (uint32_t)((int32_t)cpu->gpr[2] >> 2u); + /* 0xBFC35E28: 03E00008 jr $ra */ + /* 0xBFC35E2C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35E30(CPUState* cpu) { +label_BFC35E30: + psx_check_interrupts(cpu); + /* 0xBFC35E30: C8800000 lwc2 gte[0], 0($a0) */ + cpu->gte_data[0] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35E34: C8810004 lwc2 gte[1], 4($a0) */ + cpu->gte_data[1] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35E38: 00000000 nop */ + /* nop */ + /* 0xBFC35E3C: 4A480012 gte cmd 0x12 */ + gte_execute(cpu, 0x0480012); + /* 0xBFC35E40: E8B90000 swc2 gte[25], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[25]); + /* 0xBFC35E44: E8B90000 swc2 gte[25], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[25]); + /* 0xBFC35E48: E8BA0004 swc2 gte[26], 4($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (4)), cpu->gte_data[26]); + /* 0xBFC35E4C: E8BB0008 swc2 gte[27], 8($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (8)), cpu->gte_data[27]); + /* 0xBFC35E50: 4842F800 cfc2 $v0, gte_ctrl[31] */ + cpu->gpr[2] = cpu->gte_ctrl[31]; + /* 0xBFC35E54: 00000000 nop */ + /* nop */ + /* 0xBFC35E58: ACC20000 sw $v0, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35E58u); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC35E5C: 03E00008 jr $ra */ + /* 0xBFC35E60: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35E64(CPUState* cpu) { +label_BFC35E64: + psx_check_interrupts(cpu); + /* 0xBFC35E64: C8800000 lwc2 gte[0], 0($a0) */ + cpu->gte_data[0] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35E68: C8810004 lwc2 gte[1], 4($a0) */ + cpu->gte_data[1] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35E6C: 00000000 nop */ + /* nop */ + /* 0xBFC35E70: 4A400012 gte cmd 0x12 */ + gte_execute(cpu, 0x0400012); + /* 0xBFC35E74: E8B90000 swc2 gte[25], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[25]); + /* 0xBFC35E78: E8B90000 swc2 gte[25], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[25]); + /* 0xBFC35E7C: E8BA0004 swc2 gte[26], 4($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (4)), cpu->gte_data[26]); + /* 0xBFC35E80: E8BB0008 swc2 gte[27], 8($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (8)), cpu->gte_data[27]); + /* 0xBFC35E84: 4842F800 cfc2 $v0, gte_ctrl[31] */ + cpu->gpr[2] = cpu->gte_ctrl[31]; + /* 0xBFC35E88: 00000000 nop */ + /* nop */ + /* 0xBFC35E8C: ACC20000 sw $v0, 0($a2) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[6] + (0)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35E8Cu); return; } cpu->write_word(psx_addr, cpu->gpr[2]); } + /* 0xBFC35E90: 03E00008 jr $ra */ + /* 0xBFC35E94: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35E98(CPUState* cpu) { +label_BFC35E98: + psx_check_interrupts(cpu); + /* 0xBFC35E98: C8800000 lwc2 gte[0], 0($a0) */ + cpu->gte_data[0] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35E9C: C8810004 lwc2 gte[1], 4($a0) */ + cpu->gte_data[1] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35EA0: 00000000 nop */ + /* nop */ + /* 0xBFC35EA4: 4A4A6412 gte cmd 0x12 */ + gte_execute(cpu, 0x04A6412); + /* 0xBFC35EA8: E8A90000 swc2 gte[9], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[9]); + /* 0xBFC35EAC: E8A90000 swc2 gte[9], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[9]); + /* 0xBFC35EB0: E8AA0004 swc2 gte[10], 4($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (4)), cpu->gte_data[10]); + /* 0xBFC35EB4: E8AB0008 swc2 gte[11], 8($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (8)), cpu->gte_data[11]); + /* 0xBFC35EB8: 03E00008 jr $ra */ + /* 0xBFC35EBC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35EC0(CPUState* cpu) { +label_BFC35EC0: + psx_check_interrupts(cpu); + /* 0xBFC35EC0: C8890000 lwc2 gte[9], 0($a0) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35EC4: C88A0004 lwc2 gte[10], 4($a0) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35EC8: C88B0008 lwc2 gte[11], 8($a0) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (8))); + /* 0xBFC35ECC: 00000000 nop */ + /* nop */ + /* 0xBFC35ED0: 4A4DA412 gte cmd 0x12 */ + gte_execute(cpu, 0x04DA412); + /* 0xBFC35ED4: E8A90000 swc2 gte[9], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[9]); + /* 0xBFC35ED8: E8A90000 swc2 gte[9], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[9]); + /* 0xBFC35EDC: E8AA0004 swc2 gte[10], 4($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (4)), cpu->gte_data[10]); + /* 0xBFC35EE0: E8AB0008 swc2 gte[11], 8($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (8)), cpu->gte_data[11]); + /* 0xBFC35EE4: 03E00008 jr $ra */ + /* 0xBFC35EE8: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35EEC(CPUState* cpu) { +label_BFC35EEC: + psx_check_interrupts(cpu); + /* 0xBFC35EEC: C8890000 lwc2 gte[9], 0($a0) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35EF0: C88A0004 lwc2 gte[10], 4($a0) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35EF4: C88B0008 lwc2 gte[11], 8($a0) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (8))); + /* 0xBFC35EF8: C8A60000 lwc2 gte[6], 0($a1) */ + cpu->gte_data[6] = cpu->read_word(cpu->gpr[5]); + /* 0xBFC35EFC: 48864000 mtc2 $a2, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[6]; + /* 0xBFC35F00: 00000000 nop */ + /* nop */ + /* 0xBFC35F04: 4A680029 gte cmd 0x29 */ + gte_execute(cpu, 0x0680029); + /* 0xBFC35F08: E8F60000 swc2 gte[22], 0($a3) */ + cpu->write_word(cpu->gpr[7], cpu->gte_data[22]); + /* 0xBFC35F0C: E8F60000 swc2 gte[22], 0($a3) */ + cpu->write_word(cpu->gpr[7], cpu->gte_data[22]); + /* 0xBFC35F10: 03E00008 jr $ra */ + /* 0xBFC35F14: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35F18(CPUState* cpu) { +label_BFC35F18: + psx_check_interrupts(cpu); + /* 0xBFC35F18: C8860000 lwc2 gte[6], 0($a0) */ + cpu->gte_data[6] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35F1C: 48854000 mtc2 $a1, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[5]; + /* 0xBFC35F20: 00000000 nop */ + /* nop */ + /* 0xBFC35F24: 4A780010 gte cmd 0x10 */ + gte_execute(cpu, 0x0780010); + /* 0xBFC35F28: E8D60000 swc2 gte[22], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[22]); + /* 0xBFC35F2C: E8D60000 swc2 gte[22], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[22]); + /* 0xBFC35F30: 03E00008 jr $ra */ + /* 0xBFC35F34: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35F38(CPUState* cpu) { +label_BFC35F38: + psx_check_interrupts(cpu); + /* 0xBFC35F38: C8940000 lwc2 gte[20], 0($a0) */ + cpu->gte_data[20] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35F3C: C8B50000 lwc2 gte[21], 0($a1) */ + cpu->gte_data[21] = cpu->read_word(cpu->gpr[5]); + /* 0xBFC35F40: C8D60000 lwc2 gte[22], 0($a2) */ + cpu->gte_data[22] = cpu->read_word(cpu->gpr[6]); + /* 0xBFC35F44: C8C60000 lwc2 gte[6], 0($a2) */ + cpu->gte_data[6] = cpu->read_word(cpu->gpr[6]); + /* 0xBFC35F48: 48874000 mtc2 $a3, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[7]; + /* 0xBFC35F4C: 00000000 nop */ + /* nop */ + /* 0xBFC35F50: 4AF8002A gte cmd 0x2A */ + gte_execute(cpu, 0x0F8002A); + /* 0xBFC35F54: 8FA80010 lw $t0, 16($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (16)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35F54u); return; } cpu->gpr[8] = cpu->read_word(psx_addr); } + /* 0xBFC35F58: 8FA90014 lw $t1, 20($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (20)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35F58u); return; } cpu->gpr[9] = cpu->read_word(psx_addr); } + /* 0xBFC35F5C: 8FAA0018 lw $t2, 24($sp) */ + { uint32_t psx_addr = (uint32_t)((int32_t)cpu->gpr[29] + (24)); if (psx_addr & 3u) { psx_unaligned_access(cpu, psx_addr, 0xBFC35F5Cu); return; } cpu->gpr[10] = cpu->read_word(psx_addr); } + /* 0xBFC35F60: E9140000 swc2 gte[20], 0($t0) */ + cpu->write_word(cpu->gpr[8], cpu->gte_data[20]); + /* 0xBFC35F64: E9140000 swc2 gte[20], 0($t0) */ + cpu->write_word(cpu->gpr[8], cpu->gte_data[20]); + /* 0xBFC35F68: E9350000 swc2 gte[21], 0($t1) */ + cpu->write_word(cpu->gpr[9], cpu->gte_data[21]); + /* 0xBFC35F6C: E9560000 swc2 gte[22], 0($t2) */ + cpu->write_word(cpu->gpr[10], cpu->gte_data[22]); + /* 0xBFC35F70: 03E00008 jr $ra */ + /* 0xBFC35F74: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35F78(CPUState* cpu) { +label_BFC35F78: + psx_check_interrupts(cpu); + /* 0xBFC35F78: C8890000 lwc2 gte[9], 0($a0) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35F7C: C88A0004 lwc2 gte[10], 4($a0) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35F80: C88B0008 lwc2 gte[11], 8($a0) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (8))); + /* 0xBFC35F84: 48854000 mtc2 $a1, gte_data[8] */ + cpu->gte_data[8] = cpu->gpr[5]; + /* 0xBFC35F88: 00000000 nop */ + /* nop */ + /* 0xBFC35F8C: 4A980011 gte cmd 0x11 */ + gte_execute(cpu, 0x0980011); + /* 0xBFC35F90: E8D60000 swc2 gte[22], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[22]); + /* 0xBFC35F94: E8D60000 swc2 gte[22], 0($a2) */ + cpu->write_word(cpu->gpr[6], cpu->gte_data[22]); + /* 0xBFC35F98: 03E00008 jr $ra */ + /* 0xBFC35F9C: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35FA0(CPUState* cpu) { +label_BFC35FA0: + psx_check_interrupts(cpu); + /* 0xBFC35FA0: C8890000 lwc2 gte[9], 0($a0) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35FA4: C88A0004 lwc2 gte[10], 4($a0) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35FA8: C88B0008 lwc2 gte[11], 8($a0) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (8))); + /* 0xBFC35FAC: 00000000 nop */ + /* nop */ + /* 0xBFC35FB0: 4AA80428 gte cmd 0x28 */ + gte_execute(cpu, 0x0A80428); + /* 0xBFC35FB4: E8A90000 swc2 gte[9], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[9]); + /* 0xBFC35FB8: E8A90000 swc2 gte[9], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[9]); + /* 0xBFC35FBC: E8AA0004 swc2 gte[10], 4($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (4)), cpu->gte_data[10]); + /* 0xBFC35FC0: E8AB0008 swc2 gte[11], 8($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (8)), cpu->gte_data[11]); + /* 0xBFC35FC4: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC35FC8: 03E00008 jr $ra */ + /* 0xBFC35FCC: 00000000 nop */ + /* nop */ + return; +} + +void func_1FC35FD0(CPUState* cpu) { +label_BFC35FD0: + psx_check_interrupts(cpu); + /* 0xBFC35FD0: C8890000 lwc2 gte[9], 0($a0) */ + cpu->gte_data[9] = cpu->read_word(cpu->gpr[4]); + /* 0xBFC35FD4: C88A0004 lwc2 gte[10], 4($a0) */ + cpu->gte_data[10] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (4))); + /* 0xBFC35FD8: C88B0008 lwc2 gte[11], 8($a0) */ + cpu->gte_data[11] = cpu->read_word((uint32_t)((int32_t)cpu->gpr[4] + (8))); + /* 0xBFC35FDC: 00000000 nop */ + /* nop */ + /* 0xBFC35FE0: 4AA00428 gte cmd 0x28 */ + gte_execute(cpu, 0x0A00428); + /* 0xBFC35FE4: E8B90000 swc2 gte[25], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[25]); + /* 0xBFC35FE8: E8B90000 swc2 gte[25], 0($a1) */ + cpu->write_word(cpu->gpr[5], cpu->gte_data[25]); + /* 0xBFC35FEC: E8BA0004 swc2 gte[26], 4($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (4)), cpu->gte_data[26]); + /* 0xBFC35FF0: E8BB0008 swc2 gte[27], 8($a1) */ + cpu->write_word((uint32_t)((int32_t)cpu->gpr[5] + (8)), cpu->gte_data[27]); + /* 0xBFC35FF4: 00A01021 addu $v0, $a1, $zero */ + cpu->gpr[2] = cpu->gpr[5] + cpu->gpr[0]; + /* 0xBFC35FF8: 03E00008 jr $ra */ + /* 0xBFC35FFC: 00000000 nop */ + /* nop */ + return; +} + void func_1FC36068(CPUState* cpu) { label_BFC36068: psx_check_interrupts(cpu); diff --git a/recompiler/seeds/phase2_ghidra_seeds.json b/recompiler/seeds/phase2_ghidra_seeds.json index 56e99277..a026e3d3 100644 --- a/recompiler/seeds/phase2_ghidra_seeds.json +++ b/recompiler/seeds/phase2_ghidra_seeds.json @@ -1,4354 +1,4789 @@ -{ - "schema": "psxrecomp-v4 phase2 seeds", - "source": "generated/ghidra_function_starts.json + phase1c seeds + dispatch_miss_seeds + preserved manual", - "seed_count": 857, - "seeds": [ - { - "address": "0xBFC00000", - "label": "reset_vector", - "rationale": "MIPS R3000A reset vector" - }, - { - "address": "0xBFC00180", - "label": "general_exception_bev1", - "rationale": "BEV=1 general exception vector" - }, - { - "address": "0xBFC00420", - "label": "ghidra_BFC00420", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC00678", - "label": "ghidra_BFC00678", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC006A8", - "label": "ghidra_BFC006A8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC006D8", - "label": "ghidra_BFC006D8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC00778", - "label": "ghidra_BFC00778", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC00810", - "label": "ghidra_BFC00810", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC008A0", - "label": "ghidra_BFC008A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC00944", - "label": "ghidra_BFC00944", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC00B7C", - "label": "ghidra_BFC00B7C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC00DA0", - "label": "ghidra_BFC00DA0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC018E0", - "label": "ghidra_BFC018E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC01920", - "label": "ghidra_BFC01920", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC01A60", - "label": "ghidra_BFC01A60", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC01A90", - "label": "ghidra_BFC01A90", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC01ACC", - "label": "ghidra_BFC01ACC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC01B80", - "label": "ghidra_BFC01B80", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC01C8C", - "label": "ghidra_BFC01C8C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC01E5C", - "label": "ghidra_BFC01E5C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC020F0", - "label": "ghidra_BFC020F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02104", - "label": "ghidra_BFC02104", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02240", - "label": "ghidra_BFC02240", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0227C", - "label": "ghidra_BFC0227C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC022C0", - "label": "ghidra_BFC022C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02324", - "label": "ghidra_BFC02324", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02590", - "label": "ghidra_BFC02590", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC025B0", - "label": "ghidra_BFC025B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02738", - "label": "ghidra_BFC02738", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02950", - "label": "ghidra_BFC02950", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02AF0", - "label": "ghidra_BFC02AF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02B10", - "label": "ghidra_BFC02B10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02B50", - "label": "ghidra_BFC02B50", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02CC0", - "label": "ghidra_BFC02CC0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02D20", - "label": "ghidra_BFC02D20", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02DAC", - "label": "ghidra_BFC02DAC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02EA0", - "label": "ghidra_BFC02EA0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02EDC", - "label": "ghidra_BFC02EDC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC02F20", - "label": "ghidra_BFC02F20", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03098", - "label": "ghidra_BFC03098", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03104", - "label": "ghidra_BFC03104", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03190", - "label": "ghidra_BFC03190", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03288", - "label": "ghidra_BFC03288", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03310", - "label": "ghidra_BFC03310", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC033C8", - "label": "ghidra_BFC033C8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03418", - "label": "ghidra_BFC03418", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03494", - "label": "ghidra_BFC03494", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03764", - "label": "ghidra_BFC03764", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03910", - "label": "ghidra_BFC03910", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03968", - "label": "ghidra_BFC03968", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03978", - "label": "ghidra_BFC03978", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03990", - "label": "ghidra_BFC03990", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC039B0", - "label": "ghidra_BFC039B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03A18", - "label": "ghidra_BFC03A18", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03AA4", - "label": "ghidra_BFC03AA4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03C90", - "label": "ghidra_BFC03C90", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03CF0", - "label": "ghidra_BFC03CF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03D80", - "label": "ghidra_BFC03D80", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03EA0", - "label": "ghidra_BFC03EA0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03F8C", - "label": "ghidra_BFC03F8C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03FAC", - "label": "ghidra_BFC03FAC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC03FE0", - "label": "ghidra_BFC03FE0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0403C", - "label": "ghidra_BFC0403C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC040EC", - "label": "ghidra_BFC040EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04138", - "label": "ghidra_BFC04138", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04260", - "label": "ghidra_BFC04260", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC042A0", - "label": "ghidra_BFC042A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC042D0", - "label": "ghidra_BFC042D0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04610", - "label": "ghidra_BFC04610", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04678", - "label": "ghidra_BFC04678", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0472C", - "label": "ghidra_BFC0472C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC048D0", - "label": "ghidra_BFC048D0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04ABC", - "label": "ghidra_BFC04ABC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04BC4", - "label": "ghidra_BFC04BC4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04C38", - "label": "ghidra_BFC04C38", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04D50", - "label": "ghidra_BFC04D50", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04DEC", - "label": "ghidra_BFC04DEC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC04FBC", - "label": "ghidra_BFC04FBC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0506C", - "label": "ghidra_BFC0506C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC050A4", - "label": "ghidra_BFC050A4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC050FC", - "label": "ghidra_BFC050FC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05120", - "label": "ghidra_BFC05120", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05194", - "label": "ghidra_BFC05194", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05558", - "label": "ghidra_BFC05558", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC057B0", - "label": "ghidra_BFC057B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0593C", - "label": "ghidra_BFC0593C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05A44", - "label": "ghidra_BFC05A44", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05C18", - "label": "ghidra_BFC05C18", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05C50", - "label": "ghidra_BFC05C50", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05D04", - "label": "ghidra_BFC05D04", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05DB0", - "label": "ghidra_BFC05DB0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05DF4", - "label": "ghidra_BFC05DF4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05E58", - "label": "ghidra_BFC05E58", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC05F08", - "label": "ghidra_BFC05F08", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06010", - "label": "ghidra_BFC06010", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06038", - "label": "ghidra_BFC06038", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC060DC", - "label": "ghidra_BFC060DC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0615C", - "label": "ghidra_BFC0615C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC061A0", - "label": "ghidra_BFC061A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC061D4", - "label": "ghidra_BFC061D4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06218", - "label": "ghidra_BFC06218", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06288", - "label": "ghidra_BFC06288", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC062CC", - "label": "ghidra_BFC062CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC063CC", - "label": "ghidra_BFC063CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC064D8", - "label": "ghidra_BFC064D8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06548", - "label": "ghidra_BFC06548", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC065C0", - "label": "ghidra_BFC065C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0661C", - "label": "ghidra_BFC0661C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06680", - "label": "ghidra_BFC06680", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06700", - "label": "ghidra_BFC06700", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06784", - "label": "ghidra_BFC06784", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC067E8", - "label": "ghidra_BFC067E8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06CA4", - "label": "ghidra_BFC06CA4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06EC4", - "label": "ghidra_BFC06EC4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06F28", - "label": "ghidra_BFC06F28", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06FA4", - "label": "ghidra_BFC06FA4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC06FF0", - "label": "ghidra_BFC06FF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0703C", - "label": "ghidra_BFC0703C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC070AC", - "label": "ghidra_BFC070AC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0711C", - "label": "ghidra_BFC0711C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07148", - "label": "ghidra_BFC07148", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC071A0", - "label": "ghidra_BFC071A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC072B8", - "label": "ghidra_BFC072B8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07330", - "label": "ghidra_BFC07330", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07370", - "label": "ghidra_BFC07370", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC073A0", - "label": "ghidra_BFC073A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07410", - "label": "ghidra_BFC07410", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07664", - "label": "ghidra_BFC07664", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07700", - "label": "ghidra_BFC07700", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC078A4", - "label": "ghidra_BFC078A4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07A04", - "label": "ghidra_BFC07A04", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07B88", - "label": "ghidra_BFC07B88", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07C1C", - "label": "ghidra_BFC07C1C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC07F28", - "label": "ghidra_BFC07F28", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC08020", - "label": "ghidra_BFC08020", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC08098", - "label": "ghidra_BFC08098", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC081FC", - "label": "ghidra_BFC081FC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC08354", - "label": "ghidra_BFC08354", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC083CC", - "label": "ghidra_BFC083CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC085B0", - "label": "ghidra_BFC085B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC085D4", - "label": "ghidra_BFC085D4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC086B0", - "label": "ghidra_BFC086B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC086EC", - "label": "ghidra_BFC086EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC08720", - "label": "ghidra_BFC08720", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC087C4", - "label": "ghidra_BFC087C4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0884C", - "label": "ghidra_BFC0884C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC088A0", - "label": "ghidra_BFC088A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0895C", - "label": "ghidra_BFC0895C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC089C0", - "label": "ghidra_BFC089C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC08B3C", - "label": "ghidra_BFC08B3C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC08FFC", - "label": "ghidra_BFC08FFC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC09144", - "label": "ghidra_BFC09144", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC091CC", - "label": "ghidra_BFC091CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC092EC", - "label": "ghidra_BFC092EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC09540", - "label": "ghidra_BFC09540", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC09598", - "label": "ghidra_BFC09598", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC09720", - "label": "ghidra_BFC09720", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC098A8", - "label": "ghidra_BFC098A8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC09914", - "label": "ghidra_BFC09914", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0994C", - "label": "ghidra_BFC0994C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0996C", - "label": "ghidra_BFC0996C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC09CDC", - "label": "ghidra_BFC09CDC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC09D3C", - "label": "ghidra_BFC09D3C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0A080", - "label": "ghidra_BFC0A080", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0A3D4", - "label": "ghidra_BFC0A3D4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0A43C", - "label": "ghidra_BFC0A43C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0A4B4", - "label": "ghidra_BFC0A4B4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0A5E4", - "label": "ghidra_BFC0A5E4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0A754", - "label": "ghidra_BFC0A754", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0A8BC", - "label": "ghidra_BFC0A8BC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0AB60", - "label": "ghidra_BFC0AB60", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0AD08", - "label": "ghidra_BFC0AD08", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0B0D0", - "label": "ghidra_BFC0B0D0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0B170", - "label": "ghidra_BFC0B170", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0B394", - "label": "ghidra_BFC0B394", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0B54C", - "label": "ghidra_BFC0B54C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0B5A0", - "label": "ghidra_BFC0B5A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0B5F4", - "label": "ghidra_BFC0B5F4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0B648", - "label": "ghidra_BFC0B648", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0BFF0", - "label": "ghidra_BFC0BFF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C048", - "label": "ghidra_BFC0C048", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C0DC", - "label": "ghidra_BFC0C0DC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C140", - "label": "ghidra_BFC0C140", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C1FC", - "label": "ghidra_BFC0C1FC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C220", - "label": "ghidra_BFC0C220", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C248", - "label": "ghidra_BFC0C248", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C270", - "label": "ghidra_BFC0C270", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C298", - "label": "ghidra_BFC0C298", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C2C0", - "label": "ghidra_BFC0C2C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C2E8", - "label": "ghidra_BFC0C2E8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C318", - "label": "ghidra_BFC0C318", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C354", - "label": "ghidra_BFC0C354", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C580", - "label": "ghidra_BFC0C580", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C720", - "label": "ghidra_BFC0C720", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C830", - "label": "ghidra_BFC0C830", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C890", - "label": "ghidra_BFC0C890", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0C9CC", - "label": "ghidra_BFC0C9CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0CAB4", - "label": "ghidra_BFC0CAB4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0CC68", - "label": "ghidra_BFC0CC68", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0CD80", - "label": "ghidra_BFC0CD80", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0CF84", - "label": "ghidra_BFC0CF84", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D0CC", - "label": "ghidra_BFC0D0CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D11C", - "label": "ghidra_BFC0D11C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D34C", - "label": "ghidra_BFC0D34C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D4CC", - "label": "ghidra_BFC0D4CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D570", - "label": "ghidra_BFC0D570", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D600", - "label": "ghidra_BFC0D600", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D640", - "label": "ghidra_BFC0D640", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D664", - "label": "ghidra_BFC0D664", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D688", - "label": "ghidra_BFC0D688", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D72C", - "label": "ghidra_BFC0D72C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D7BC", - "label": "ghidra_BFC0D7BC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D850", - "label": "ghidra_BFC0D850", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D880", - "label": "ghidra_BFC0D880", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D890", - "label": "ghidra_BFC0D890", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D8A0", - "label": "ghidra_BFC0D8A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D8B0", - "label": "ghidra_BFC0D8B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D8C0", - "label": "ghidra_BFC0D8C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D8D0", - "label": "ghidra_BFC0D8D0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D950", - "label": "ghidra_BFC0D950", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D960", - "label": "ghidra_BFC0D960", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D970", - "label": "ghidra_BFC0D970", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D980", - "label": "ghidra_BFC0D980", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D990", - "label": "ghidra_BFC0D990", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D9A0", - "label": "ghidra_BFC0D9A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D9B0", - "label": "ghidra_BFC0D9B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D9C0", - "label": "ghidra_BFC0D9C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D9D0", - "label": "ghidra_BFC0D9D0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D9E0", - "label": "ghidra_BFC0D9E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0D9F0", - "label": "ghidra_BFC0D9F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DA00", - "label": "ghidra_BFC0DA00", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DA10", - "label": "ghidra_BFC0DA10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DA20", - "label": "ghidra_BFC0DA20", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DA30", - "label": "ghidra_BFC0DA30", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DA40", - "label": "ghidra_BFC0DA40", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DA50", - "label": "ghidra_BFC0DA50", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DA60", - "label": "ghidra_BFC0DA60", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DAA0", - "label": "ghidra_BFC0DAA0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DAB0", - "label": "ghidra_BFC0DAB0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DAC0", - "label": "ghidra_BFC0DAC0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DAD0", - "label": "ghidra_BFC0DAD0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DAE0", - "label": "ghidra_BFC0DAE0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DAF0", - "label": "ghidra_BFC0DAF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB00", - "label": "ghidra_BFC0DB00", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB10", - "label": "ghidra_BFC0DB10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB20", - "label": "ghidra_BFC0DB20", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB30", - "label": "ghidra_BFC0DB30", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB40", - "label": "ghidra_BFC0DB40", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB50", - "label": "ghidra_BFC0DB50", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB60", - "label": "ghidra_BFC0DB60", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB70", - "label": "ghidra_BFC0DB70", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB80", - "label": "ghidra_BFC0DB80", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DB90", - "label": "ghidra_BFC0DB90", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DBA0", - "label": "ghidra_BFC0DBA0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DBB0", - "label": "ghidra_BFC0DBB0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DBC0", - "label": "ghidra_BFC0DBC0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DBD0", - "label": "ghidra_BFC0DBD0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DBE0", - "label": "ghidra_BFC0DBE0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DBF0", - "label": "ghidra_BFC0DBF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DC00", - "label": "ghidra_BFC0DC00", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DC10", - "label": "ghidra_BFC0DC10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DC20", - "label": "ghidra_BFC0DC20", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DC30", - "label": "ghidra_BFC0DC30", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DC40", - "label": "ghidra_BFC0DC40", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC0DC50", - "label": "ghidra_BFC0DC50", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC10C74", - "label": "ghidra_BFC10C74", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11008", - "label": "ghidra_BFC11008", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11294", - "label": "ghidra_BFC11294", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC112F4", - "label": "ghidra_BFC112F4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11358", - "label": "ghidra_BFC11358", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC113BC", - "label": "ghidra_BFC113BC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11420", - "label": "ghidra_BFC11420", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11458", - "label": "ghidra_BFC11458", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11490", - "label": "ghidra_BFC11490", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC114C8", - "label": "ghidra_BFC114C8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11500", - "label": "ghidra_BFC11500", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11620", - "label": "ghidra_BFC11620", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1188C", - "label": "ghidra_BFC1188C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11B18", - "label": "ghidra_BFC11B18", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11C8C", - "label": "ghidra_BFC11C8C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC11F58", - "label": "ghidra_BFC11F58", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC122C0", - "label": "ghidra_BFC122C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12370", - "label": "ghidra_BFC12370", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12408", - "label": "ghidra_BFC12408", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12458", - "label": "ghidra_BFC12458", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12564", - "label": "ghidra_BFC12564", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12628", - "label": "ghidra_BFC12628", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12794", - "label": "ghidra_BFC12794", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12900", - "label": "ghidra_BFC12900", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12998", - "label": "ghidra_BFC12998", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC129FC", - "label": "ghidra_BFC129FC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12AC8", - "label": "ghidra_BFC12AC8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12B00", - "label": "ghidra_BFC12B00", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12B60", - "label": "ghidra_BFC12B60", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12C08", - "label": "ghidra_BFC12C08", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12CE8", - "label": "ghidra_BFC12CE8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12F6C", - "label": "ghidra_BFC12F6C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC12FB4", - "label": "ghidra_BFC12FB4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13070", - "label": "ghidra_BFC13070", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC130AC", - "label": "ghidra_BFC130AC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13178", - "label": "ghidra_BFC13178", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13244", - "label": "ghidra_BFC13244", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13310", - "label": "ghidra_BFC13310", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC133D8", - "label": "ghidra_BFC133D8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC134A4", - "label": "ghidra_BFC134A4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC135AC", - "label": "ghidra_BFC135AC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC137E0", - "label": "ghidra_BFC137E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13980", - "label": "ghidra_BFC13980", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13AF0", - "label": "ghidra_BFC13AF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13B24", - "label": "ghidra_BFC13B24", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13B6C", - "label": "ghidra_BFC13B6C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13C34", - "label": "ghidra_BFC13C34", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13C64", - "label": "ghidra_BFC13C64", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13E04", - "label": "ghidra_BFC13E04", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13E60", - "label": "ghidra_BFC13E60", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13EE8", - "label": "ghidra_BFC13EE8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC13F98", - "label": "ghidra_BFC13F98", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC144BC", - "label": "ghidra_BFC144BC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC145C8", - "label": "ghidra_BFC145C8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC14690", - "label": "ghidra_BFC14690", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC14710", - "label": "ghidra_BFC14710", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC14770", - "label": "ghidra_BFC14770", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC147F4", - "label": "ghidra_BFC147F4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC14A90", - "label": "ghidra_BFC14A90", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC14B00", - "label": "ghidra_BFC14B00", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC14CF4", - "label": "ghidra_BFC14CF4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC158A8", - "label": "ghidra_BFC158A8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC15B9C", - "label": "ghidra_BFC15B9C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC16170", - "label": "ghidra_BFC16170", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC18254", - "label": "ghidra_BFC18254", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC18684", - "label": "ghidra_BFC18684", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC18798", - "label": "ghidra_BFC18798", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC188F0", - "label": "ghidra_BFC188F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC18990", - "label": "ghidra_BFC18990", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC18D10", - "label": "ghidra_BFC18D10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC192E4", - "label": "ghidra_BFC192E4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC193C0", - "label": "ghidra_BFC193C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1952C", - "label": "ghidra_BFC1952C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC19630", - "label": "ghidra_BFC19630", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC196D4", - "label": "ghidra_BFC196D4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC19A58", - "label": "ghidra_BFC19A58", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC19DF4", - "label": "ghidra_BFC19DF4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1A15C", - "label": "ghidra_BFC1A15C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1A17C", - "label": "ghidra_BFC1A17C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1A19C", - "label": "ghidra_BFC1A19C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1A430", - "label": "ghidra_BFC1A430", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1A5B0", - "label": "ghidra_BFC1A5B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1A6EC", - "label": "ghidra_BFC1A6EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1AA90", - "label": "ghidra_BFC1AA90", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1AC68", - "label": "ghidra_BFC1AC68", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1AE68", - "label": "ghidra_BFC1AE68", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1B7E0", - "label": "ghidra_BFC1B7E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1BD68", - "label": "ghidra_BFC1BD68", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1BEE0", - "label": "ghidra_BFC1BEE0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1BF44", - "label": "ghidra_BFC1BF44", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1C130", - "label": "ghidra_BFC1C130", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1C4C0", - "label": "ghidra_BFC1C4C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1C78C", - "label": "ghidra_BFC1C78C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1C8EC", - "label": "ghidra_BFC1C8EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1C9B4", - "label": "ghidra_BFC1C9B4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1CAF0", - "label": "ghidra_BFC1CAF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1CBAC", - "label": "ghidra_BFC1CBAC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1CDD8", - "label": "ghidra_BFC1CDD8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1DBF4", - "label": "ghidra_BFC1DBF4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1DDD8", - "label": "ghidra_BFC1DDD8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1DF50", - "label": "ghidra_BFC1DF50", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1E0C4", - "label": "ghidra_BFC1E0C4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1E10C", - "label": "ghidra_BFC1E10C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1E3CC", - "label": "ghidra_BFC1E3CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1F6AC", - "label": "ghidra_BFC1F6AC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1F980", - "label": "ghidra_BFC1F980", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC1FFA8", - "label": "ghidra_BFC1FFA8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20338", - "label": "ghidra_BFC20338", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2069C", - "label": "ghidra_BFC2069C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20BE4", - "label": "ghidra_BFC20BE4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20C64", - "label": "ghidra_BFC20C64", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20CE4", - "label": "ghidra_BFC20CE4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20D4C", - "label": "ghidra_BFC20D4C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20DB4", - "label": "ghidra_BFC20DB4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20E10", - "label": "ghidra_BFC20E10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20E6C", - "label": "ghidra_BFC20E6C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20EC8", - "label": "ghidra_BFC20EC8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20F24", - "label": "ghidra_BFC20F24", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20F8C", - "label": "ghidra_BFC20F8C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC20FE8", - "label": "ghidra_BFC20FE8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC21044", - "label": "ghidra_BFC21044", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC210C0", - "label": "ghidra_BFC210C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC21128", - "label": "ghidra_BFC21128", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC21184", - "label": "ghidra_BFC21184", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC21200", - "label": "ghidra_BFC21200", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2125C", - "label": "ghidra_BFC2125C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC212C4", - "label": "ghidra_BFC212C4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC21320", - "label": "ghidra_BFC21320", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC213A4", - "label": "ghidra_BFC213A4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC213FC", - "label": "ghidra_BFC213FC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC214B0", - "label": "ghidra_BFC214B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC218CC", - "label": "ghidra_BFC218CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2193C", - "label": "ghidra_BFC2193C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC21A9C", - "label": "ghidra_BFC21A9C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC22164", - "label": "ghidra_BFC22164", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC226D0", - "label": "ghidra_BFC226D0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC228D8", - "label": "ghidra_BFC228D8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC22B80", - "label": "ghidra_BFC22B80", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC22E1C", - "label": "ghidra_BFC22E1C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC22E90", - "label": "ghidra_BFC22E90", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC23078", - "label": "ghidra_BFC23078", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC230C4", - "label": "ghidra_BFC230C4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2311C", - "label": "ghidra_BFC2311C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC232DC", - "label": "ghidra_BFC232DC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC23500", - "label": "ghidra_BFC23500", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC23524", - "label": "ghidra_BFC23524", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC23D3C", - "label": "ghidra_BFC23D3C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC24288", - "label": "ghidra_BFC24288", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC24418", - "label": "ghidra_BFC24418", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC24640", - "label": "ghidra_BFC24640", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC24A48", - "label": "ghidra_BFC24A48", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC24F00", - "label": "ghidra_BFC24F00", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC251A8", - "label": "ghidra_BFC251A8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25200", - "label": "ghidra_BFC25200", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC252BC", - "label": "ghidra_BFC252BC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2531C", - "label": "ghidra_BFC2531C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25390", - "label": "ghidra_BFC25390", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC254B0", - "label": "ghidra_BFC254B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25558", - "label": "ghidra_BFC25558", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25754", - "label": "ghidra_BFC25754", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25B74", - "label": "ghidra_BFC25B74", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25CC0", - "label": "ghidra_BFC25CC0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25D8C", - "label": "ghidra_BFC25D8C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25E8C", - "label": "ghidra_BFC25E8C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC25EF8", - "label": "ghidra_BFC25EF8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2632C", - "label": "ghidra_BFC2632C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2644C", - "label": "ghidra_BFC2644C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC264A0", - "label": "ghidra_BFC264A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC26550", - "label": "ghidra_BFC26550", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC265C0", - "label": "ghidra_BFC265C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC26610", - "label": "ghidra_BFC26610", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC26670", - "label": "ghidra_BFC26670", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC266B0", - "label": "ghidra_BFC266B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC268EC", - "label": "ghidra_BFC268EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC26C10", - "label": "ghidra_BFC26C10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC26E64", - "label": "ghidra_BFC26E64", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27190", - "label": "ghidra_BFC27190", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC273E4", - "label": "ghidra_BFC273E4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27868", - "label": "ghidra_BFC27868", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27910", - "label": "ghidra_BFC27910", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27A2C", - "label": "ghidra_BFC27A2C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27B24", - "label": "ghidra_BFC27B24", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27BDC", - "label": "ghidra_BFC27BDC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27CC8", - "label": "ghidra_BFC27CC8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27DB0", - "label": "ghidra_BFC27DB0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27E68", - "label": "ghidra_BFC27E68", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27E88", - "label": "ghidra_BFC27E88", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC27EB4", - "label": "ghidra_BFC27EB4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC28064", - "label": "ghidra_BFC28064", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC28490", - "label": "ghidra_BFC28490", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC284F0", - "label": "ghidra_BFC284F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2886C", - "label": "ghidra_BFC2886C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC28B84", - "label": "ghidra_BFC28B84", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC29770", - "label": "ghidra_BFC29770", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC29AE0", - "label": "ghidra_BFC29AE0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC29FE8", - "label": "ghidra_BFC29FE8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2A31C", - "label": "ghidra_BFC2A31C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2ACD0", - "label": "ghidra_BFC2ACD0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2BF1C", - "label": "ghidra_BFC2BF1C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2BF74", - "label": "ghidra_BFC2BF74", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2C2F0", - "label": "ghidra_BFC2C2F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2C3E0", - "label": "ghidra_BFC2C3E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2CA9C", - "label": "ghidra_BFC2CA9C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2CAE0", - "label": "ghidra_BFC2CAE0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2CB24", - "label": "ghidra_BFC2CB24", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2CB80", - "label": "ghidra_BFC2CB80", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2CC10", - "label": "ghidra_BFC2CC10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2CCC4", - "label": "ghidra_BFC2CCC4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2CE08", - "label": "ghidra_BFC2CE08", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2CF54", - "label": "ghidra_BFC2CF54", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2D0E0", - "label": "ghidra_BFC2D0E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2E44C", - "label": "ghidra_BFC2E44C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2E600", - "label": "ghidra_BFC2E600", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2E65C", - "label": "ghidra_BFC2E65C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2ED1C", - "label": "ghidra_BFC2ED1C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2EE6C", - "label": "ghidra_BFC2EE6C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2EF40", - "label": "ghidra_BFC2EF40", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2F210", - "label": "ghidra_BFC2F210", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2F618", - "label": "ghidra_BFC2F618", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2F65C", - "label": "ghidra_BFC2F65C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2F718", - "label": "ghidra_BFC2F718", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2F808", - "label": "ghidra_BFC2F808", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2F85C", - "label": "ghidra_BFC2F85C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2F8AC", - "label": "ghidra_BFC2F8AC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2FCC4", - "label": "ghidra_BFC2FCC4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC2FE6C", - "label": "ghidra_BFC2FE6C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3010C", - "label": "ghidra_BFC3010C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3015C", - "label": "ghidra_BFC3015C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC301AC", - "label": "ghidra_BFC301AC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3022C", - "label": "ghidra_BFC3022C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3029C", - "label": "ghidra_BFC3029C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC302BC", - "label": "ghidra_BFC302BC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3031C", - "label": "ghidra_BFC3031C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC30350", - "label": "ghidra_BFC30350", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3079C", - "label": "ghidra_BFC3079C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC30868", - "label": "ghidra_BFC30868", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC30960", - "label": "ghidra_BFC30960", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC30A80", - "label": "ghidra_BFC30A80", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC30DF0", - "label": "ghidra_BFC30DF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31194", - "label": "ghidra_BFC31194", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31380", - "label": "ghidra_BFC31380", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC313EC", - "label": "ghidra_BFC313EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31448", - "label": "ghidra_BFC31448", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31580", - "label": "ghidra_BFC31580", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31638", - "label": "ghidra_BFC31638", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC317D0", - "label": "ghidra_BFC317D0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31968", - "label": "ghidra_BFC31968", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31C64", - "label": "ghidra_BFC31C64", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31D14", - "label": "ghidra_BFC31D14", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31DC4", - "label": "ghidra_BFC31DC4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC31E74", - "label": "ghidra_BFC31E74", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC322E4", - "label": "ghidra_BFC322E4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC32410", - "label": "ghidra_BFC32410", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC32450", - "label": "ghidra_BFC32450", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3255C", - "label": "ghidra_BFC3255C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC32724", - "label": "ghidra_BFC32724", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC32820", - "label": "ghidra_BFC32820", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC328F4", - "label": "ghidra_BFC328F4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC329F0", - "label": "ghidra_BFC329F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC32CCC", - "label": "ghidra_BFC32CCC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC33138", - "label": "ghidra_BFC33138", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC331A0", - "label": "ghidra_BFC331A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC33358", - "label": "ghidra_BFC33358", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC33400", - "label": "ghidra_BFC33400", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC34160", - "label": "ghidra_BFC34160", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC34304", - "label": "ghidra_BFC34304", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC344A4", - "label": "ghidra_BFC344A4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC345F4", - "label": "ghidra_BFC345F4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC34748", - "label": "ghidra_BFC34748", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC34898", - "label": "ghidra_BFC34898", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC34B58", - "label": "ghidra_BFC34B58", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC36CF0", - "label": "ghidra_BFC36CF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC36D1C", - "label": "ghidra_BFC36D1C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC36EC0", - "label": "ghidra_BFC36EC0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC36F90", - "label": "ghidra_BFC36F90", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37028", - "label": "ghidra_BFC37028", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37070", - "label": "ghidra_BFC37070", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC370A0", - "label": "ghidra_BFC370A0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC370F4", - "label": "ghidra_BFC370F4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37130", - "label": "ghidra_BFC37130", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3716C", - "label": "ghidra_BFC3716C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37334", - "label": "ghidra_BFC37334", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37368", - "label": "ghidra_BFC37368", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC373E0", - "label": "ghidra_BFC373E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37434", - "label": "ghidra_BFC37434", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC374BC", - "label": "ghidra_BFC374BC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC374EC", - "label": "ghidra_BFC374EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37838", - "label": "ghidra_BFC37838", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37868", - "label": "ghidra_BFC37868", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC378B4", - "label": "ghidra_BFC378B4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37908", - "label": "ghidra_BFC37908", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37998", - "label": "ghidra_BFC37998", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37A4C", - "label": "ghidra_BFC37A4C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC37AC4", - "label": "ghidra_BFC37AC4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC38204", - "label": "ghidra_BFC38204", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC382E0", - "label": "ghidra_BFC382E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC38524", - "label": "ghidra_BFC38524", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC387D4", - "label": "ghidra_BFC387D4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC38A7C", - "label": "ghidra_BFC38A7C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC38BE8", - "label": "ghidra_BFC38BE8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC38C68", - "label": "ghidra_BFC38C68", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC38DAC", - "label": "ghidra_BFC38DAC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC39080", - "label": "ghidra_BFC39080", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC39410", - "label": "ghidra_BFC39410", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC394EC", - "label": "ghidra_BFC394EC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3954C", - "label": "ghidra_BFC3954C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC39630", - "label": "ghidra_BFC39630", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC396E8", - "label": "ghidra_BFC396E8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC39D38", - "label": "ghidra_BFC39D38", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC39E84", - "label": "ghidra_BFC39E84", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC39FE4", - "label": "ghidra_BFC39FE4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3A094", - "label": "ghidra_BFC3A094", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3A228", - "label": "ghidra_BFC3A228", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3A2C0", - "label": "ghidra_BFC3A2C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3AAC4", - "label": "ghidra_BFC3AAC4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3AD68", - "label": "ghidra_BFC3AD68", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3B054", - "label": "ghidra_BFC3B054", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3B30C", - "label": "ghidra_BFC3B30C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3B368", - "label": "ghidra_BFC3B368", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3B85C", - "label": "ghidra_BFC3B85C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3B93C", - "label": "ghidra_BFC3B93C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3BA74", - "label": "ghidra_BFC3BA74", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3BD78", - "label": "ghidra_BFC3BD78", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3BD98", - "label": "ghidra_BFC3BD98", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3BE6C", - "label": "ghidra_BFC3BE6C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3BF10", - "label": "ghidra_BFC3BF10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3C060", - "label": "ghidra_BFC3C060", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3C140", - "label": "ghidra_BFC3C140", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3C428", - "label": "ghidra_BFC3C428", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3C4E0", - "label": "ghidra_BFC3C4E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3C710", - "label": "ghidra_BFC3C710", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3D810", - "label": "ghidra_BFC3D810", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3D8C0", - "label": "ghidra_BFC3D8C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3DF20", - "label": "ghidra_BFC3DF20", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3E020", - "label": "ghidra_BFC3E020", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3E110", - "label": "ghidra_BFC3E110", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3E980", - "label": "ghidra_BFC3E980", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3ED40", - "label": "ghidra_BFC3ED40", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3EDB4", - "label": "ghidra_BFC3EDB4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3EFF0", - "label": "ghidra_BFC3EFF0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F1B8", - "label": "ghidra_BFC3F1B8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F2B4", - "label": "ghidra_BFC3F2B4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F484", - "label": "ghidra_BFC3F484", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F4F0", - "label": "ghidra_BFC3F4F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F570", - "label": "ghidra_BFC3F570", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F5D8", - "label": "ghidra_BFC3F5D8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F6F0", - "label": "ghidra_BFC3F6F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F7E8", - "label": "ghidra_BFC3F7E8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F8E4", - "label": "ghidra_BFC3F8E4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3F9AC", - "label": "ghidra_BFC3F9AC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3FA10", - "label": "ghidra_BFC3FA10", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3FAEC", - "label": "ghidra_BFC3FAEC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3FB74", - "label": "ghidra_BFC3FB74", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3FC50", - "label": "ghidra_BFC3FC50", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3FD0C", - "label": "ghidra_BFC3FD0C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3FDC8", - "label": "ghidra_BFC3FDC8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3FE60", - "label": "ghidra_BFC3FE60", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC3FF40", - "label": "ghidra_BFC3FF40", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40034", - "label": "ghidra_BFC40034", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC400DC", - "label": "ghidra_BFC400DC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40184", - "label": "ghidra_BFC40184", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40260", - "label": "ghidra_BFC40260", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC402DC", - "label": "ghidra_BFC402DC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40484", - "label": "ghidra_BFC40484", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40628", - "label": "ghidra_BFC40628", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC406E0", - "label": "ghidra_BFC406E0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40700", - "label": "ghidra_BFC40700", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC407B8", - "label": "ghidra_BFC407B8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40B68", - "label": "ghidra_BFC40B68", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40DE8", - "label": "ghidra_BFC40DE8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC40F34", - "label": "ghidra_BFC40F34", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC4102C", - "label": "ghidra_BFC4102C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41200", - "label": "ghidra_BFC41200", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41258", - "label": "ghidra_BFC41258", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC413B0", - "label": "ghidra_BFC413B0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC413F4", - "label": "ghidra_BFC413F4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41458", - "label": "ghidra_BFC41458", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41520", - "label": "ghidra_BFC41520", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41648", - "label": "ghidra_BFC41648", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41670", - "label": "ghidra_BFC41670", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41708", - "label": "ghidra_BFC41708", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC417CC", - "label": "ghidra_BFC417CC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41848", - "label": "ghidra_BFC41848", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC418C4", - "label": "ghidra_BFC418C4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC4192C", - "label": "ghidra_BFC4192C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41A44", - "label": "ghidra_BFC41A44", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41C80", - "label": "ghidra_BFC41C80", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC41DA4", - "label": "ghidra_BFC41DA4", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC42014", - "label": "ghidra_BFC42014", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC4203C", - "label": "ghidra_BFC4203C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC42060", - "label": "ghidra_BFC42060", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC42090", - "label": "ghidra_BFC42090", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC420C0", - "label": "ghidra_BFC420C0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC420F0", - "label": "ghidra_BFC420F0", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC42120", - "label": "ghidra_BFC42120", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC42160", - "label": "ghidra_BFC42160", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC421D8", - "label": "shell_vblank_restore_entry", - "rationale": "Mid-function entry: SaveState/RestoreState (A0:0x13/0x14) longjmp target inside func_1FC42160; after RestoreState returns v0!=0 the callback loop runs" - }, - { - "address": "0xBFC4231C", - "label": "shell_vblank_init_body", - "rationale": "Mid-function entry: SaveState returns v0=0 → BEQ at 0xBFC421D8 taken → callback table setup at 0xBFC4231C. Split from func_1FC42160" - }, - { - "address": "0xBFC42370", - "label": "shell_vblank_epilogue", - "rationale": "Mid-function entry: func_1FC42160 epilogue (restore ra/sp, return). Branch target from BNE at 0xBFC4216C when init flag is set" - }, - { - "address": "0xBFC42424", - "label": "ghidra_BFC42424", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC424A8", - "label": "ghidra_BFC424A8", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC42540", - "label": "ghidra_BFC42540", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC425FC", - "label": "ghidra_BFC425FC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC42640", - "label": "ghidra_BFC42640", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC426DC", - "label": "ghidra_BFC426DC", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC4270C", - "label": "ghidra_BFC4270C", - "rationale": "Ghidra function start" - }, - { - "address": "0xBFC42380", - "label": "dmiss_BFC42380", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC42844", - "label": "dmiss_BFC42844", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC38AD4", - "label": "dmiss_BFC38AD4", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC42910", - "label": "shell_post_callback_cleanup", - "rationale": "Called from func_1FC42160 after 256-iteration callback countdown expires; was dispatch miss" - }, - { - "address": "0xBFC42A90", - "label": "dmiss_BFC42A90", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC42A10", - "label": "dmiss_BFC42A10", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC27FB0", - "label": "dmiss_BFC27FB0", - "rationale": "dispatch miss: Kernel Part 2 function, indirect call" - }, - { - "address": "0xBFC36D48", - "label": "dmiss_BFC36D48", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC38AA4", - "label": "dmiss_BFC38AA4", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC1E3AC", - "label": "dmiss_BFC1E3AC", - "rationale": "dispatch miss: Shell function, called in vblank loop" - }, - { - "address": "0xBFC3045C", - "label": "dmiss_BFC3045C", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC30470", - "label": "dmiss_BFC30470", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC30484", - "label": "dmiss_BFC30484", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC30498", - "label": "dmiss_BFC30498", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC30554", - "label": "dmiss_BFC30554", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC30560", - "label": "dmiss_BFC30560", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC3056C", - "label": "dmiss_BFC3056C", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC30578", - "label": "dmiss_BFC30578", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC36DD0", - "label": "dmiss_BFC36DD0", - "rationale": "dispatch miss: Shell function, indirect call via table" - }, - { - "address": "0xBFC11840", - "label": "dmiss_BFC11840", - "rationale": "dispatch miss: KP2 function, indirect call" - }, - { - "address": "0xBFC36DF8", - "label": "dmiss_BFC36DF8", - "rationale": "dispatch miss: Shell function, indirect call" - }, - { - "address": "0xBFC11524", - "label": "dmiss_BFC11524", - "rationale": "dispatch miss: KP2 secondary entry point for exception handler, mid-function split of func_00001A00, called during VBlank" - }, - { - "address": "0xBFC11610", - "label": "dmiss_BFC11610", - "rationale": "dispatch miss: KP2 function, tail-call target from 0xBFC11524 exception handler path" - }, - { - "address": "0xBFC0193C", - "label": "cache_flush_continuation", - "rationale": "Jump target of cache-flush jr k0 at BFC01938" - }, - { - "address": "0xBFC01E24", - "label": "SysInitMemory", - "rationale": "Dispatch miss during boot \u00e2\u20ac\u201d kernel init function" - }, - { - "address": "0xBFC02200", - "label": "jal_BFC02200", - "rationale": "JAL target from code region" - }, - { - "address": "0xBFC03FC0", - "label": "jal_BFC03FC0", - "rationale": "JAL target from code region" - }, - { - "address": "0xBFC06FDC", - "label": "indirect_BFC06FDC", - "rationale": "Reached via indirect dispatch during boot" - }, - { - "address": "0xBFC0DA70", - "label": "jal_BFC0DA70", - "rationale": "JAL target from code region" - }, - { - "address": "0xBFC0DA80", - "label": "jal_BFC0DA80", - "rationale": "JAL target from code region" - }, - { - "address": "0xBFC0DA90", - "label": "jal_BFC0DA90", - "rationale": "JAL target from code region" - }, - { - "address": "0xBFC10000", - "label": "kernel_trampoline_0", - "rationale": "Trampoline to FileOpen (0x598)" - }, - { - "address": "0xBFC10010", - "label": "kernel_trampoline_1", - "rationale": "Trampoline to FileRead (0x5C4)" - }, - { - "address": "0xBFC10020", - "label": "kernel_trampoline_2", - "rationale": "Trampoline to FileClose (0x5E0)" - }, - { - "address": "0xBFC10030", - "label": "kernel_trampoline_3", - "rationale": "Trampoline to 0x600" - }, - { - "address": "0xBFC10040", - "label": "kernel_memcpy", - "rationale": "ROM-to-RAM and RAM clear routine" - }, - { - "address": "0xBFC10098", - "label": "kernel_bzero", - "rationale": "RAM clear routine (to 0xBFC100BC)" - }, - { - "address": "0xBFC100C4", - "label": "a0_vector_dispatch", - "rationale": "A0 function table dispatch" - }, - { - "address": "0xBFC100E0", - "label": "b0_vector_dispatch", - "rationale": "B0 function table dispatch" - }, - { - "address": "0xBFC10100", - "label": "c0_vector_dispatch", - "rationale": "C0 function table dispatch" - }, - { - "address": "0xBFC10120", - "label": "kernel_get_cause", - "rationale": "mfc0 v0,Cause; jr ra" - }, - { - "address": "0xBFC10130", - "label": "kernel_get_sr", - "rationale": "mfc0 v0,SR; jr ra" - }, - { - "address": "0xBFC10140", - "label": "kernel_set_sr", - "rationale": "mtc0 a0,SR; jr ra" - }, - { - "address": "0xBFC10150", - "label": "kernel_syscall", - "rationale": "syscall; jr ra" - }, - { - "address": "0xBFC1015C", - "label": "kernel_get_c0_table", - "rationale": "Returns C0 table pointer" - }, - { - "address": "0xBFC10168", - "label": "kernel_get_b0_table", - "rationale": "Returns B0 table pointer" - }, - { - "address": "0xBFC10174", - "label": "kernel_BFC10174", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10780", - "label": "rmiss_BFC10780", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC109A0", - "label": "kernel_BFC109A0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC109B0", - "label": "kernel_BFC109B0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10A20", - "label": "kernel_BFC10A20", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10A2C", - "label": "kernel_BFC10A2C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10A40", - "label": "kernel_BFC10A40", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10B30", - "label": "rmiss_BFC10B30", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC10BB8", - "label": "kernel_BFC10BB8", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10BE0", - "label": "kernel_BFC10BE0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10BE4", - "label": "rmiss_BFC10BE4", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC10C3C", - "label": "kernel_BFC10C3C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10F08", - "label": "kernel_BFC10F08", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10F20", - "label": "kernel_BFC10F20", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC10F44", - "label": "kernel_BFC10F44", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC110D8", - "label": "kernel_BFC110D8", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC110F8", - "label": "kernel_BFC110F8", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11114", - "label": "kernel_BFC11114", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC111AC", - "label": "kernel_BFC111AC", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC111C4", - "label": "kernel_BFC111C4", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC111E4", - "label": "kernel_BFC111E4", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1121C", - "label": "kernel_BFC1121C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11228", - "label": "kernel_BFC11228", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1125C", - "label": "kernel_BFC1125C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11274", - "label": "kernel_BFC11274", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1152C", - "label": "rmiss_BFC1152C", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC11560", - "label": "rmiss_BFC11560", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC115E8", - "label": "rmiss_BFC115E8", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC115FC", - "label": "rmiss_BFC115FC", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC11644", - "label": "kernel_BFC11644", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1175C", - "label": "kernel_BFC1175C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11800", - "label": "kernel_BFC11800", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11870", - "label": "kernel_BFC11870", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1191C", - "label": "kernel_BFC1191C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11944", - "label": "kernel_BFC11944", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11980", - "label": "kernel_BFC11980", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11998", - "label": "kernel_BFC11998", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC119C8", - "label": "kernel_BFC119C8", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11A04", - "label": "kernel_BFC11A04", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11A10", - "label": "kernel_BFC11A10", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11A4C", - "label": "kernel_BFC11A4C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11A88", - "label": "kernel_BFC11A88", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11AFC", - "label": "kernel_BFC11AFC", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11BA8", - "label": "kernel_BFC11BA8", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11BD4", - "label": "kernel_BFC11BD4", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11C14", - "label": "kernel_BFC11C14", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11C24", - "label": "kernel_BFC11C24", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11C50", - "label": "kernel_BFC11C50", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC11C68", - "label": "kernel_BFC11C68", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC12224", - "label": "kernel_BFC12224", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1228C", - "label": "kernel_BFC1228C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC122A0", - "label": "kernel_BFC122A0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC129EC", - "label": "kernel_BFC129EC", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC12BC8", - "label": "kernel_BFC12BC8", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC12BE0", - "label": "kernel_BFC12BE0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC12BE4", - "label": "rmiss_BFC12BE4", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC12EA4", - "label": "kernel_BFC12EA4", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1302C", - "label": "kernel_BFC1302C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC130A4", - "label": "kernel_BFC130A4", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC13570", - "label": "kernel_BFC13570", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1372C", - "label": "kernel_BFC1372C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1376C", - "label": "rmiss_BFC1376C", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC137B4", - "label": "indirect_BFC137B4", - "rationale": "Reached via indirect dispatch during boot (kernel relocated)" - }, - { - "address": "0xBFC137BC", - "label": "rmiss_BFC137BC", - "rationale": "runtime dispatch miss" - }, - { - "address": "0xBFC138AC", - "label": "kernel_BFC138AC", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1395C", - "label": "kernel_BFC1395C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC13968", - "label": "kernel_BFC13968", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC13A04", - "label": "kernel_BFC13A04", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC13ED0", - "label": "kernel_BFC13ED0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC13F5C", - "label": "kernel_BFC13F5C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1454C", - "label": "kernel_BFC1454C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC14588", - "label": "kernel_BFC14588", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC14594", - "label": "kernel_BFC14594", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC14670", - "label": "kernel_BFC14670", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC14754", - "label": "kernel_BFC14754", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC14764", - "label": "kernel_BFC14764", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1483C", - "label": "kernel_BFC1483C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1484C", - "label": "kernel_BFC1484C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC14864", - "label": "kernel_BFC14864", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1486C", - "label": "kernel_BFC1486C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15188", - "label": "kernel_BFC15188", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15664", - "label": "kernel_BFC15664", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15930", - "label": "kernel_BFC15930", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15950", - "label": "kernel_BFC15950", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15998", - "label": "kernel_BFC15998", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15A04", - "label": "kernel_BFC15A04", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15A4C", - "label": "kernel_BFC15A4C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15AB8", - "label": "kernel_BFC15AB8", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15AF0", - "label": "kernel_BFC15AF0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15B5C", - "label": "kernel_BFC15B5C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15B70", - "label": "kernel_BFC15B70", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15CC4", - "label": "kernel_BFC15CC4", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15E90", - "label": "kernel_BFC15E90", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15EBC", - "label": "kernel_BFC15EBC", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC15F08", - "label": "kernel_BFC15F08", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC1609C", - "label": "kernel_BFC1609C", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC16690", - "label": "kernel_BFC16690", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC166A0", - "label": "kernel_BFC166A0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC166B0", - "label": "kernel_BFC166B0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC166C0", - "label": "kernel_BFC166C0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC166D0", - "label": "kernel_BFC166D0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC166E0", - "label": "kernel_BFC166E0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC166F0", - "label": "kernel_BFC166F0", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC16700", - "label": "kernel_BFC16700", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC16710", - "label": "kernel_BFC16710", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC16720", - "label": "kernel_BFC16720", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC18000", - "label": "shell_entry", - "rationale": "Shell entry point at BFC18000, copied to RAM 0x80030000" - }, - { - "address": "0xBFC18788", - "label": "kernel_BFC18788", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC188B4", - "label": "kernel_BFC188B4", - "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" - }, - { - "address": "0xBFC33CC0", - "label": "jal_BFC33CC0", - "rationale": "JAL target from code region" - }, - { - "address": "0xBFC41FC0", - "label": "shell_InitRCnt_setup", - "rationale": "Undiscovered function: calls B0:0x15 (InitRCnt) with arg 0x20000001. Only reachable via indirect jalr from shell init table. Missing seed causes VSync counter to never increment." - }, - { - "address": "0xBFC425BC", - "label": "vblank_chain_handler", - "rationale": "VBlank chain handler: the ONLY instruction in the entire BIOS ROM that stores to 0x80079D9C (VSync counter) is at 0xBFC425E0, inside this 15-instruction function at 0xBFC425BC. Function reads counter, increments it, optionally calls user callback at *0x800DFF40. Not reachable via any JAL/literal/lui in ROM — installed at runtime by kernel chain-registration code. Missing seed means counter-increment code is never recompiled, so even if kernel installs the handler pointer it cannot dispatch to recompiled code." - }, - { - "address": "0xBFC1E3C0", - "label": "sio_event_opener_epilogue", - "rationale": "Epilogue fragment at BFC1E3C0 (addiu sp,sp,0x18; jr ra; nop). Reached via branch from SIO state machine. Dispatch miss after fall-through fix exposed new code paths." - }, - { - "address": "0xBFC336F0", - "label": "gte_cop2_init", - "rationale": "GTE/COP2 initialization: enables COP2 in SR, sets COP2 control registers. Contains COP2 instructions (Phase 5). Reached after fall-through fix." - }, - { - "address": "0xBFC42BA0", - "label": "shell_vblank_dispatch", - "rationale": "Called from chain-E004 verify (func_1FC40700) via jal 0x8005ABA0. Walks VBlank callback chain → calls VSync counter incrementer. Missing seed blocks VSync counter from incrementing." - }, - { - "address": "0xBFC38AF0", - "label": "shell_hot_function", - "rationale": "Dispatch miss at 0x80050AF0 (phys 0x1FC38AF0) — 178 misses. Hot shell function during rendering loop." - }, - { - "address": "0xBFC137D0", - "label": "kernel_ram_function", - "rationale": "Dispatch miss at 0xBFC137D0 (phys 0x00003CD0) — 3 misses. Kernel RAM function." - }, - { - "address": "0xBFC42BF0", - "label": "shell_register_callback", - "rationale": "Called from func_1FC42160 init path at 0xBFC42330 to register VBlank callbacks; missing seed caused callback table corruption" - }, - { - "address": "0xBFC42BE0", - "label": "shell_vblank_process", - "rationale": "Called from chain-E004 verify (jal 0x8005ABE0). Also called from shell main loop to process VBlank events. Missing seed causes VBlank callback chain to never execute." - }, - { - "address": "0xBFC4226C", - "label": "shell_vblank_callback_loop", - "rationale": "Mid-function entry point inside func_1FC42160. The BIOS shell jumps here directly to walk VBlank callbacks, bypassing the init-gate at the function top. Needed for VSync counter increment." - }, - { - "address": "0xBFC1A050", - "label": "shell_input_handler", - "rationale": "Shell function called via RAM 0x80032050 after pad input detected. Dispatch miss blocked shell from processing button presses." - }, - { - "address": "0xBFC19FD0", - "label": "shell_input_handler_2", - "rationale": "Second shell input handler at RAM 0x80031FD0. Similar to BFC1A050. Dispatch miss after adding BFC1A050." - }, - { - "address": "0xBFC151E8", - "label": "kernel_56E8", - "rationale": "Kernel function at RAM 0x56E8. Dispatch miss from shell input path." - }, - { - "address": "0xBFC156A4", - "label": "kernel_5BA4", - "rationale": "Kernel function at RAM 0x5BA4. Dispatch miss from shell input path." - }, - { - "address": "0xBFC0BA8C", - "label": "bios_BA8C", - "rationale": "BIOS boot code function. Dispatch miss from shell input path." - }, - { - "address": "0xBFC0C1DC", - "label": "bios_C1DC", - "rationale": "BIOS boot code function. Dispatch miss from shell input path." - }, - { - "address": "0xBFC15268", - "label": "kernel_5768", - "rationale": "Kernel function at RAM 0x5768. Cascade from input path seeds." - }, - { - "address": "0xBFC15724", - "label": "kernel_5C24", - "rationale": "Kernel function at RAM 0x5C24. Cascade from input path seeds." - }, - { - "address": "0xBFC42308", - "label": "shell_42308", - "rationale": "Shell function near VSync callback area. Dispatch miss from input path." - }, - { - "address": "0xBFC1529C", - "label": "kernel_579C", - "rationale": "Kernel function at RAM 0x579C. Cascade from input path." - }, - { - "address": "0xBFC15650", - "label": "kernel_5B50", - "rationale": "Kernel function. Cascade from input path." - }, - { - "address": "0xBFC15894", - "label": "kernel_5D94", - "rationale": "Kernel function. Cascade from input path." - }, - { - "address": "0xBFC15334", - "label": "kernel_5834", - "rationale": "Kernel function at RAM 0x5834. Cascade." - }, - { - "address": "0xBFC15758", - "label": "kernel_5C58", - "rationale": "Kernel function at RAM 0x5C58. Cascade." - }, - { - "address": "0xBFC15654", - "label": "kernel_5B54", - "rationale": "Kernel function. Cascade from input path." - }, - { - "address": "0xBFC15370", - "label": "kernel_5870", - "rationale": "Kernel (CARD driver) function. Cascade." - }, - { - "address": "0xBFC15848", - "label": "kernel_5D48", - "rationale": "Kernel (CARD driver) function. Cascade." - }, - { - "address": "0xBFC15898", - "label": "kernel_5D98", - "rationale": "Kernel (CARD driver) function. Cascade." - }, - { - "address": "0xBFC153B4", - "label": "kernel_58B4", - "rationale": "Kernel (CARD driver) function at RAM 0x58B4. Cascade." - }, - { - "address": "0xBFC153E8", - "label": "kernel_58E8", - "rationale": "Kernel (CARD driver) function at RAM 0x58E8. Cascade." - }, - { - "address": "0xBFC15418", - "label": "kernel_5918", - "rationale": "Kernel (CARD driver) leaf function at RAM 0x5918. Cascade." - }, - { - "address": "0xBFC15454", - "label": "kernel_5954", - "rationale": "CARD driver cascade." - }, - { - "address": "0xBFC15490", - "label": "kernel_5990", - "rationale": "CARD driver cascade." - }, - { - "address": "0xBFC154CC", - "label": "kernel_59CC", - "rationale": "CARD driver cascade (predicted)." - }, - { - "address": "0xBFC15508", - "label": "kernel_5A08", - "rationale": "CARD driver cascade (predicted)." - }, - { - "address": "0xBFC15544", - "label": "kernel_5A44", - "rationale": "CARD driver cascade (predicted)." - }, - { - "address": "0xBFC15580", - "label": "kernel_5A80", - "rationale": "CARD driver cascade (predicted)." - }, - { - "address": "0xBFC155BC", - "label": "kernel_5ABC", - "rationale": "CARD driver cascade (predicted)." - }, - { - "address": "0xBFC155F8", - "label": "kernel_5AF8", - "rationale": "CARD driver cascade (predicted)." - }, - { - "address": "0xBFC15634", - "label": "kernel_5B34", - "rationale": "CARD driver cascade (predicted)." - }, - { - "address": "0xBFC15500", - "label": "kernel_5A00", - "rationale": "CARD driver cascade." - } - ], - "excluded": [ - { - "address": "0xBFC00100", - "label": "utlb_miss_bev1", - "rationale": "R3000 UTLB-miss vector; PS1 has no TLB; never executed" - } - ] +{ + "schema": "psxrecomp-v4 phase2 seeds", + "source": "generated/ghidra_function_starts.json + phase1c seeds + dispatch_miss_seeds + preserved manual", + "seed_count": 955, + "seeds": [ + { + "address": "0xBFC00000", + "label": "reset_vector", + "rationale": "MIPS R3000A reset vector" + }, + { + "address": "0xBFC00180", + "label": "general_exception_bev1", + "rationale": "BEV=1 general exception vector" + }, + { + "address": "0xBFC00420", + "label": "ghidra_BFC00420", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC00678", + "label": "ghidra_BFC00678", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC006A8", + "label": "ghidra_BFC006A8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC006D8", + "label": "ghidra_BFC006D8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC00778", + "label": "ghidra_BFC00778", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC00810", + "label": "ghidra_BFC00810", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC008A0", + "label": "ghidra_BFC008A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC00944", + "label": "ghidra_BFC00944", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC00B7C", + "label": "ghidra_BFC00B7C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC00DA0", + "label": "ghidra_BFC00DA0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC018E0", + "label": "ghidra_BFC018E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC01920", + "label": "ghidra_BFC01920", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC01A60", + "label": "ghidra_BFC01A60", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC01A90", + "label": "ghidra_BFC01A90", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC01ACC", + "label": "ghidra_BFC01ACC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC01B80", + "label": "ghidra_BFC01B80", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC01C8C", + "label": "ghidra_BFC01C8C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC01E5C", + "label": "ghidra_BFC01E5C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC020F0", + "label": "ghidra_BFC020F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02104", + "label": "ghidra_BFC02104", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02240", + "label": "ghidra_BFC02240", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0227C", + "label": "ghidra_BFC0227C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC022C0", + "label": "ghidra_BFC022C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02324", + "label": "ghidra_BFC02324", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02590", + "label": "ghidra_BFC02590", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC025B0", + "label": "ghidra_BFC025B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02738", + "label": "ghidra_BFC02738", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02950", + "label": "ghidra_BFC02950", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02AF0", + "label": "ghidra_BFC02AF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02B10", + "label": "ghidra_BFC02B10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02B50", + "label": "ghidra_BFC02B50", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02CC0", + "label": "ghidra_BFC02CC0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02D20", + "label": "ghidra_BFC02D20", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02DAC", + "label": "ghidra_BFC02DAC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02EA0", + "label": "ghidra_BFC02EA0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02EDC", + "label": "ghidra_BFC02EDC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC02F20", + "label": "ghidra_BFC02F20", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03098", + "label": "ghidra_BFC03098", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03104", + "label": "ghidra_BFC03104", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03190", + "label": "ghidra_BFC03190", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03288", + "label": "ghidra_BFC03288", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03310", + "label": "ghidra_BFC03310", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC033C8", + "label": "ghidra_BFC033C8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03418", + "label": "ghidra_BFC03418", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03494", + "label": "ghidra_BFC03494", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03764", + "label": "ghidra_BFC03764", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03910", + "label": "ghidra_BFC03910", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03968", + "label": "ghidra_BFC03968", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03978", + "label": "ghidra_BFC03978", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03990", + "label": "ghidra_BFC03990", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC039B0", + "label": "ghidra_BFC039B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03A18", + "label": "ghidra_BFC03A18", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03AA4", + "label": "ghidra_BFC03AA4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03C90", + "label": "ghidra_BFC03C90", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03CF0", + "label": "ghidra_BFC03CF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03D80", + "label": "ghidra_BFC03D80", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03EA0", + "label": "ghidra_BFC03EA0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03F8C", + "label": "ghidra_BFC03F8C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03FAC", + "label": "ghidra_BFC03FAC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC03FE0", + "label": "ghidra_BFC03FE0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0403C", + "label": "ghidra_BFC0403C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC040EC", + "label": "ghidra_BFC040EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04138", + "label": "ghidra_BFC04138", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04260", + "label": "ghidra_BFC04260", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC042A0", + "label": "ghidra_BFC042A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC042D0", + "label": "ghidra_BFC042D0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04610", + "label": "ghidra_BFC04610", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04678", + "label": "ghidra_BFC04678", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0472C", + "label": "ghidra_BFC0472C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC048D0", + "label": "ghidra_BFC048D0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04ABC", + "label": "ghidra_BFC04ABC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04BC4", + "label": "ghidra_BFC04BC4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04C38", + "label": "ghidra_BFC04C38", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04D50", + "label": "ghidra_BFC04D50", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04DEC", + "label": "ghidra_BFC04DEC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC04FBC", + "label": "ghidra_BFC04FBC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0506C", + "label": "ghidra_BFC0506C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC050A4", + "label": "ghidra_BFC050A4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC050FC", + "label": "ghidra_BFC050FC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05120", + "label": "ghidra_BFC05120", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05194", + "label": "ghidra_BFC05194", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05558", + "label": "ghidra_BFC05558", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC057B0", + "label": "ghidra_BFC057B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0593C", + "label": "ghidra_BFC0593C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05A44", + "label": "ghidra_BFC05A44", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05C18", + "label": "ghidra_BFC05C18", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05C50", + "label": "ghidra_BFC05C50", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05D04", + "label": "ghidra_BFC05D04", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05DB0", + "label": "ghidra_BFC05DB0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05DF4", + "label": "ghidra_BFC05DF4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05E58", + "label": "ghidra_BFC05E58", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC05F08", + "label": "ghidra_BFC05F08", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06010", + "label": "ghidra_BFC06010", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06038", + "label": "ghidra_BFC06038", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC060DC", + "label": "ghidra_BFC060DC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0615C", + "label": "ghidra_BFC0615C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC061A0", + "label": "ghidra_BFC061A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC061D4", + "label": "ghidra_BFC061D4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06218", + "label": "ghidra_BFC06218", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06288", + "label": "ghidra_BFC06288", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC062CC", + "label": "ghidra_BFC062CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC063CC", + "label": "ghidra_BFC063CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC064D8", + "label": "ghidra_BFC064D8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06548", + "label": "ghidra_BFC06548", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC065C0", + "label": "ghidra_BFC065C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0661C", + "label": "ghidra_BFC0661C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06680", + "label": "ghidra_BFC06680", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06700", + "label": "ghidra_BFC06700", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06784", + "label": "ghidra_BFC06784", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC067E8", + "label": "ghidra_BFC067E8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06CA4", + "label": "ghidra_BFC06CA4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06EC4", + "label": "ghidra_BFC06EC4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06F28", + "label": "ghidra_BFC06F28", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06FA4", + "label": "ghidra_BFC06FA4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC06FF0", + "label": "ghidra_BFC06FF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0703C", + "label": "ghidra_BFC0703C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC070AC", + "label": "ghidra_BFC070AC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0711C", + "label": "ghidra_BFC0711C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07148", + "label": "ghidra_BFC07148", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC071A0", + "label": "ghidra_BFC071A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC072B8", + "label": "ghidra_BFC072B8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07330", + "label": "ghidra_BFC07330", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07370", + "label": "ghidra_BFC07370", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC073A0", + "label": "ghidra_BFC073A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07410", + "label": "ghidra_BFC07410", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07664", + "label": "ghidra_BFC07664", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07700", + "label": "ghidra_BFC07700", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC078A4", + "label": "ghidra_BFC078A4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07A04", + "label": "ghidra_BFC07A04", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07B88", + "label": "ghidra_BFC07B88", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07C1C", + "label": "ghidra_BFC07C1C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC07F28", + "label": "ghidra_BFC07F28", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC08020", + "label": "ghidra_BFC08020", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC08098", + "label": "ghidra_BFC08098", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC081FC", + "label": "ghidra_BFC081FC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC08354", + "label": "ghidra_BFC08354", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC083CC", + "label": "ghidra_BFC083CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC085B0", + "label": "ghidra_BFC085B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC085D4", + "label": "ghidra_BFC085D4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC086B0", + "label": "ghidra_BFC086B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC086EC", + "label": "ghidra_BFC086EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC08720", + "label": "ghidra_BFC08720", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC087C4", + "label": "ghidra_BFC087C4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0884C", + "label": "ghidra_BFC0884C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC088A0", + "label": "ghidra_BFC088A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0895C", + "label": "ghidra_BFC0895C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC089C0", + "label": "ghidra_BFC089C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC08B3C", + "label": "ghidra_BFC08B3C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC08FFC", + "label": "ghidra_BFC08FFC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC09144", + "label": "ghidra_BFC09144", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC091CC", + "label": "ghidra_BFC091CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC092EC", + "label": "ghidra_BFC092EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC09540", + "label": "ghidra_BFC09540", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC09598", + "label": "ghidra_BFC09598", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC09720", + "label": "ghidra_BFC09720", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC098A8", + "label": "ghidra_BFC098A8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC09914", + "label": "ghidra_BFC09914", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0994C", + "label": "ghidra_BFC0994C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0996C", + "label": "ghidra_BFC0996C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC09CDC", + "label": "ghidra_BFC09CDC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC09D3C", + "label": "ghidra_BFC09D3C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0A080", + "label": "ghidra_BFC0A080", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0A3D4", + "label": "ghidra_BFC0A3D4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0A43C", + "label": "ghidra_BFC0A43C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0A4B4", + "label": "ghidra_BFC0A4B4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0A5E4", + "label": "ghidra_BFC0A5E4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0A754", + "label": "ghidra_BFC0A754", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0A8BC", + "label": "ghidra_BFC0A8BC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0AB60", + "label": "ghidra_BFC0AB60", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0AD08", + "label": "ghidra_BFC0AD08", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0B0D0", + "label": "ghidra_BFC0B0D0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0B170", + "label": "ghidra_BFC0B170", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0B394", + "label": "ghidra_BFC0B394", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0B54C", + "label": "ghidra_BFC0B54C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0B5A0", + "label": "ghidra_BFC0B5A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0B5F4", + "label": "ghidra_BFC0B5F4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0B648", + "label": "ghidra_BFC0B648", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0BFF0", + "label": "ghidra_BFC0BFF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C048", + "label": "ghidra_BFC0C048", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C0DC", + "label": "ghidra_BFC0C0DC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C140", + "label": "ghidra_BFC0C140", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C1FC", + "label": "ghidra_BFC0C1FC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C220", + "label": "ghidra_BFC0C220", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C248", + "label": "ghidra_BFC0C248", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C270", + "label": "ghidra_BFC0C270", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C298", + "label": "ghidra_BFC0C298", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C2C0", + "label": "ghidra_BFC0C2C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C2E8", + "label": "ghidra_BFC0C2E8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C318", + "label": "ghidra_BFC0C318", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C354", + "label": "ghidra_BFC0C354", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C580", + "label": "ghidra_BFC0C580", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C720", + "label": "ghidra_BFC0C720", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C830", + "label": "ghidra_BFC0C830", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C890", + "label": "ghidra_BFC0C890", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0C9CC", + "label": "ghidra_BFC0C9CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0CAB4", + "label": "ghidra_BFC0CAB4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0CC68", + "label": "ghidra_BFC0CC68", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0CD80", + "label": "ghidra_BFC0CD80", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0CF84", + "label": "ghidra_BFC0CF84", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D0CC", + "label": "ghidra_BFC0D0CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D11C", + "label": "ghidra_BFC0D11C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D34C", + "label": "ghidra_BFC0D34C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D4CC", + "label": "ghidra_BFC0D4CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D570", + "label": "ghidra_BFC0D570", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D600", + "label": "ghidra_BFC0D600", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D640", + "label": "ghidra_BFC0D640", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D664", + "label": "ghidra_BFC0D664", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D688", + "label": "ghidra_BFC0D688", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D72C", + "label": "ghidra_BFC0D72C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D7BC", + "label": "ghidra_BFC0D7BC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D850", + "label": "ghidra_BFC0D850", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D880", + "label": "ghidra_BFC0D880", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D890", + "label": "ghidra_BFC0D890", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D8A0", + "label": "ghidra_BFC0D8A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D8B0", + "label": "ghidra_BFC0D8B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D8C0", + "label": "ghidra_BFC0D8C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D8D0", + "label": "ghidra_BFC0D8D0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D950", + "label": "ghidra_BFC0D950", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D960", + "label": "ghidra_BFC0D960", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D970", + "label": "ghidra_BFC0D970", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D980", + "label": "ghidra_BFC0D980", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D990", + "label": "ghidra_BFC0D990", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D9A0", + "label": "ghidra_BFC0D9A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D9B0", + "label": "ghidra_BFC0D9B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D9C0", + "label": "ghidra_BFC0D9C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D9D0", + "label": "ghidra_BFC0D9D0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D9E0", + "label": "ghidra_BFC0D9E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0D9F0", + "label": "ghidra_BFC0D9F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DA00", + "label": "ghidra_BFC0DA00", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DA10", + "label": "ghidra_BFC0DA10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DA20", + "label": "ghidra_BFC0DA20", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DA30", + "label": "ghidra_BFC0DA30", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DA40", + "label": "ghidra_BFC0DA40", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DA50", + "label": "ghidra_BFC0DA50", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DA60", + "label": "ghidra_BFC0DA60", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DAA0", + "label": "ghidra_BFC0DAA0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DAB0", + "label": "ghidra_BFC0DAB0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DAC0", + "label": "ghidra_BFC0DAC0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DAD0", + "label": "ghidra_BFC0DAD0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DAE0", + "label": "ghidra_BFC0DAE0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DAF0", + "label": "ghidra_BFC0DAF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB00", + "label": "ghidra_BFC0DB00", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB10", + "label": "ghidra_BFC0DB10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB20", + "label": "ghidra_BFC0DB20", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB30", + "label": "ghidra_BFC0DB30", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB40", + "label": "ghidra_BFC0DB40", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB50", + "label": "ghidra_BFC0DB50", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB60", + "label": "ghidra_BFC0DB60", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB70", + "label": "ghidra_BFC0DB70", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB80", + "label": "ghidra_BFC0DB80", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DB90", + "label": "ghidra_BFC0DB90", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DBA0", + "label": "ghidra_BFC0DBA0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DBB0", + "label": "ghidra_BFC0DBB0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DBC0", + "label": "ghidra_BFC0DBC0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DBD0", + "label": "ghidra_BFC0DBD0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DBE0", + "label": "ghidra_BFC0DBE0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DBF0", + "label": "ghidra_BFC0DBF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DC00", + "label": "ghidra_BFC0DC00", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DC10", + "label": "ghidra_BFC0DC10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DC20", + "label": "ghidra_BFC0DC20", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DC30", + "label": "ghidra_BFC0DC30", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DC40", + "label": "ghidra_BFC0DC40", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC0DC50", + "label": "ghidra_BFC0DC50", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC10C74", + "label": "ghidra_BFC10C74", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11008", + "label": "ghidra_BFC11008", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11294", + "label": "ghidra_BFC11294", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC112F4", + "label": "ghidra_BFC112F4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11358", + "label": "ghidra_BFC11358", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC113BC", + "label": "ghidra_BFC113BC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11420", + "label": "ghidra_BFC11420", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11458", + "label": "ghidra_BFC11458", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11490", + "label": "ghidra_BFC11490", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC114C8", + "label": "ghidra_BFC114C8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11500", + "label": "ghidra_BFC11500", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11620", + "label": "ghidra_BFC11620", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1188C", + "label": "ghidra_BFC1188C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11B18", + "label": "ghidra_BFC11B18", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11C8C", + "label": "ghidra_BFC11C8C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC11F58", + "label": "ghidra_BFC11F58", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC122C0", + "label": "ghidra_BFC122C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12370", + "label": "ghidra_BFC12370", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12408", + "label": "ghidra_BFC12408", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12458", + "label": "ghidra_BFC12458", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12564", + "label": "ghidra_BFC12564", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12628", + "label": "ghidra_BFC12628", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12794", + "label": "ghidra_BFC12794", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12900", + "label": "ghidra_BFC12900", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12998", + "label": "ghidra_BFC12998", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC129FC", + "label": "ghidra_BFC129FC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12AC8", + "label": "ghidra_BFC12AC8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12B00", + "label": "ghidra_BFC12B00", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12B60", + "label": "ghidra_BFC12B60", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12C08", + "label": "ghidra_BFC12C08", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12CE8", + "label": "ghidra_BFC12CE8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12F6C", + "label": "ghidra_BFC12F6C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC12FB4", + "label": "ghidra_BFC12FB4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13070", + "label": "ghidra_BFC13070", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC130AC", + "label": "ghidra_BFC130AC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13178", + "label": "ghidra_BFC13178", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13244", + "label": "ghidra_BFC13244", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13310", + "label": "ghidra_BFC13310", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC133D8", + "label": "ghidra_BFC133D8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC134A4", + "label": "ghidra_BFC134A4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC135AC", + "label": "ghidra_BFC135AC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC137E0", + "label": "ghidra_BFC137E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13980", + "label": "ghidra_BFC13980", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13AF0", + "label": "ghidra_BFC13AF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13B24", + "label": "ghidra_BFC13B24", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13B6C", + "label": "ghidra_BFC13B6C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13C34", + "label": "ghidra_BFC13C34", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13C64", + "label": "ghidra_BFC13C64", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13E04", + "label": "ghidra_BFC13E04", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13E60", + "label": "ghidra_BFC13E60", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13EE8", + "label": "ghidra_BFC13EE8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC13F98", + "label": "ghidra_BFC13F98", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC144BC", + "label": "ghidra_BFC144BC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC145C8", + "label": "ghidra_BFC145C8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC14690", + "label": "ghidra_BFC14690", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC14710", + "label": "ghidra_BFC14710", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC14770", + "label": "ghidra_BFC14770", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC147F4", + "label": "ghidra_BFC147F4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC14A90", + "label": "ghidra_BFC14A90", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC14B00", + "label": "ghidra_BFC14B00", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC14CF4", + "label": "ghidra_BFC14CF4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC158A8", + "label": "ghidra_BFC158A8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC15B9C", + "label": "ghidra_BFC15B9C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC16170", + "label": "ghidra_BFC16170", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC18254", + "label": "ghidra_BFC18254", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC18684", + "label": "ghidra_BFC18684", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC18798", + "label": "ghidra_BFC18798", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC188F0", + "label": "ghidra_BFC188F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC18990", + "label": "ghidra_BFC18990", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC18D10", + "label": "ghidra_BFC18D10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC192E4", + "label": "ghidra_BFC192E4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC193C0", + "label": "ghidra_BFC193C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1952C", + "label": "ghidra_BFC1952C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC19630", + "label": "ghidra_BFC19630", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC196D4", + "label": "ghidra_BFC196D4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC19A58", + "label": "ghidra_BFC19A58", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC19DF4", + "label": "ghidra_BFC19DF4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1A15C", + "label": "ghidra_BFC1A15C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1A17C", + "label": "ghidra_BFC1A17C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1A19C", + "label": "ghidra_BFC1A19C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1A430", + "label": "ghidra_BFC1A430", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1A5B0", + "label": "ghidra_BFC1A5B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1A6EC", + "label": "ghidra_BFC1A6EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1AA90", + "label": "ghidra_BFC1AA90", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1AC68", + "label": "ghidra_BFC1AC68", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1AE68", + "label": "ghidra_BFC1AE68", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1B7E0", + "label": "ghidra_BFC1B7E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1BD68", + "label": "ghidra_BFC1BD68", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1BEE0", + "label": "ghidra_BFC1BEE0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1BF44", + "label": "ghidra_BFC1BF44", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1C130", + "label": "ghidra_BFC1C130", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1C4C0", + "label": "ghidra_BFC1C4C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1C78C", + "label": "ghidra_BFC1C78C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1C8EC", + "label": "ghidra_BFC1C8EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1C9B4", + "label": "ghidra_BFC1C9B4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1CAF0", + "label": "ghidra_BFC1CAF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1CBAC", + "label": "ghidra_BFC1CBAC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1CDD8", + "label": "ghidra_BFC1CDD8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1DBF4", + "label": "ghidra_BFC1DBF4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1DDD8", + "label": "ghidra_BFC1DDD8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1DF50", + "label": "ghidra_BFC1DF50", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1E0C4", + "label": "ghidra_BFC1E0C4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1E10C", + "label": "ghidra_BFC1E10C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1E3CC", + "label": "ghidra_BFC1E3CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1F6AC", + "label": "ghidra_BFC1F6AC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1F980", + "label": "ghidra_BFC1F980", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC1FFA8", + "label": "ghidra_BFC1FFA8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20338", + "label": "ghidra_BFC20338", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2069C", + "label": "ghidra_BFC2069C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20BE4", + "label": "ghidra_BFC20BE4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20C64", + "label": "ghidra_BFC20C64", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20CE4", + "label": "ghidra_BFC20CE4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20D4C", + "label": "ghidra_BFC20D4C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20DB4", + "label": "ghidra_BFC20DB4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20E10", + "label": "ghidra_BFC20E10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20E6C", + "label": "ghidra_BFC20E6C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20EC8", + "label": "ghidra_BFC20EC8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20F24", + "label": "ghidra_BFC20F24", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20F8C", + "label": "ghidra_BFC20F8C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC20FE8", + "label": "ghidra_BFC20FE8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC21044", + "label": "ghidra_BFC21044", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC210C0", + "label": "ghidra_BFC210C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC21128", + "label": "ghidra_BFC21128", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC21184", + "label": "ghidra_BFC21184", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC21200", + "label": "ghidra_BFC21200", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2125C", + "label": "ghidra_BFC2125C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC212C4", + "label": "ghidra_BFC212C4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC21320", + "label": "ghidra_BFC21320", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC213A4", + "label": "ghidra_BFC213A4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC213FC", + "label": "ghidra_BFC213FC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC214B0", + "label": "ghidra_BFC214B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC218CC", + "label": "ghidra_BFC218CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2193C", + "label": "ghidra_BFC2193C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC21A9C", + "label": "ghidra_BFC21A9C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC22164", + "label": "ghidra_BFC22164", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC226D0", + "label": "ghidra_BFC226D0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC228D8", + "label": "ghidra_BFC228D8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC22B80", + "label": "ghidra_BFC22B80", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC22E1C", + "label": "ghidra_BFC22E1C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC22E90", + "label": "ghidra_BFC22E90", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC23078", + "label": "ghidra_BFC23078", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC230C4", + "label": "ghidra_BFC230C4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2311C", + "label": "ghidra_BFC2311C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC232DC", + "label": "ghidra_BFC232DC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC23500", + "label": "ghidra_BFC23500", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC23524", + "label": "ghidra_BFC23524", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC23D3C", + "label": "ghidra_BFC23D3C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC24288", + "label": "ghidra_BFC24288", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC24418", + "label": "ghidra_BFC24418", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC24640", + "label": "ghidra_BFC24640", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC24A48", + "label": "ghidra_BFC24A48", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC24F00", + "label": "ghidra_BFC24F00", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC251A8", + "label": "ghidra_BFC251A8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25200", + "label": "ghidra_BFC25200", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC252BC", + "label": "ghidra_BFC252BC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2531C", + "label": "ghidra_BFC2531C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25390", + "label": "ghidra_BFC25390", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC254B0", + "label": "ghidra_BFC254B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25558", + "label": "ghidra_BFC25558", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25754", + "label": "ghidra_BFC25754", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25B74", + "label": "ghidra_BFC25B74", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25CC0", + "label": "ghidra_BFC25CC0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25D8C", + "label": "ghidra_BFC25D8C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25E8C", + "label": "ghidra_BFC25E8C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC25EF8", + "label": "ghidra_BFC25EF8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2632C", + "label": "ghidra_BFC2632C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2644C", + "label": "ghidra_BFC2644C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC264A0", + "label": "ghidra_BFC264A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC26550", + "label": "ghidra_BFC26550", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC265C0", + "label": "ghidra_BFC265C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC26610", + "label": "ghidra_BFC26610", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC26670", + "label": "ghidra_BFC26670", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC266B0", + "label": "ghidra_BFC266B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC268EC", + "label": "ghidra_BFC268EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC26C10", + "label": "ghidra_BFC26C10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC26E64", + "label": "ghidra_BFC26E64", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27190", + "label": "ghidra_BFC27190", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC273E4", + "label": "ghidra_BFC273E4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27868", + "label": "ghidra_BFC27868", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27910", + "label": "ghidra_BFC27910", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27A2C", + "label": "ghidra_BFC27A2C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27B24", + "label": "ghidra_BFC27B24", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27BDC", + "label": "ghidra_BFC27BDC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27CC8", + "label": "ghidra_BFC27CC8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27DB0", + "label": "ghidra_BFC27DB0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27E68", + "label": "ghidra_BFC27E68", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27E88", + "label": "ghidra_BFC27E88", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC27EB4", + "label": "ghidra_BFC27EB4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC28064", + "label": "ghidra_BFC28064", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC28490", + "label": "ghidra_BFC28490", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC284F0", + "label": "ghidra_BFC284F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2886C", + "label": "ghidra_BFC2886C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC28B84", + "label": "ghidra_BFC28B84", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC29770", + "label": "ghidra_BFC29770", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC29AE0", + "label": "ghidra_BFC29AE0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC29FE8", + "label": "ghidra_BFC29FE8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2A31C", + "label": "ghidra_BFC2A31C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2ACD0", + "label": "ghidra_BFC2ACD0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2BF1C", + "label": "ghidra_BFC2BF1C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2BF74", + "label": "ghidra_BFC2BF74", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2C2F0", + "label": "ghidra_BFC2C2F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2C3E0", + "label": "ghidra_BFC2C3E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2CA9C", + "label": "ghidra_BFC2CA9C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2CAE0", + "label": "ghidra_BFC2CAE0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2CB24", + "label": "ghidra_BFC2CB24", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2CB80", + "label": "ghidra_BFC2CB80", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2CC10", + "label": "ghidra_BFC2CC10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2CCC4", + "label": "ghidra_BFC2CCC4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2CE08", + "label": "ghidra_BFC2CE08", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2CF54", + "label": "ghidra_BFC2CF54", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2D0E0", + "label": "ghidra_BFC2D0E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2E44C", + "label": "ghidra_BFC2E44C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2E600", + "label": "ghidra_BFC2E600", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2E65C", + "label": "ghidra_BFC2E65C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2ED1C", + "label": "ghidra_BFC2ED1C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2EE6C", + "label": "ghidra_BFC2EE6C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2EF40", + "label": "ghidra_BFC2EF40", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2F210", + "label": "ghidra_BFC2F210", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2F618", + "label": "ghidra_BFC2F618", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2F65C", + "label": "ghidra_BFC2F65C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2F718", + "label": "ghidra_BFC2F718", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2F808", + "label": "ghidra_BFC2F808", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2F85C", + "label": "ghidra_BFC2F85C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2F8AC", + "label": "ghidra_BFC2F8AC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2FCC4", + "label": "ghidra_BFC2FCC4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC2FE6C", + "label": "ghidra_BFC2FE6C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3010C", + "label": "ghidra_BFC3010C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3015C", + "label": "ghidra_BFC3015C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC301AC", + "label": "ghidra_BFC301AC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3022C", + "label": "ghidra_BFC3022C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3029C", + "label": "ghidra_BFC3029C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC302BC", + "label": "ghidra_BFC302BC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3031C", + "label": "ghidra_BFC3031C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC30350", + "label": "ghidra_BFC30350", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3079C", + "label": "ghidra_BFC3079C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC30868", + "label": "ghidra_BFC30868", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC30960", + "label": "ghidra_BFC30960", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC30A80", + "label": "ghidra_BFC30A80", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC30DF0", + "label": "ghidra_BFC30DF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31194", + "label": "ghidra_BFC31194", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31380", + "label": "ghidra_BFC31380", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC313EC", + "label": "ghidra_BFC313EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31448", + "label": "ghidra_BFC31448", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31580", + "label": "ghidra_BFC31580", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31638", + "label": "ghidra_BFC31638", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC317D0", + "label": "ghidra_BFC317D0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31968", + "label": "ghidra_BFC31968", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31C64", + "label": "ghidra_BFC31C64", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31D14", + "label": "ghidra_BFC31D14", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31DC4", + "label": "ghidra_BFC31DC4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC31E74", + "label": "ghidra_BFC31E74", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC322E4", + "label": "ghidra_BFC322E4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC32410", + "label": "ghidra_BFC32410", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC32450", + "label": "ghidra_BFC32450", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3255C", + "label": "ghidra_BFC3255C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC32724", + "label": "ghidra_BFC32724", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC32820", + "label": "ghidra_BFC32820", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC328F4", + "label": "ghidra_BFC328F4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC329F0", + "label": "ghidra_BFC329F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC32CCC", + "label": "ghidra_BFC32CCC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC33138", + "label": "ghidra_BFC33138", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC331A0", + "label": "ghidra_BFC331A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC33358", + "label": "ghidra_BFC33358", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC33400", + "label": "ghidra_BFC33400", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC34160", + "label": "ghidra_BFC34160", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC34304", + "label": "ghidra_BFC34304", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC344A4", + "label": "ghidra_BFC344A4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC345F4", + "label": "ghidra_BFC345F4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC34748", + "label": "ghidra_BFC34748", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC34898", + "label": "ghidra_BFC34898", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC34B58", + "label": "ghidra_BFC34B58", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC36CF0", + "label": "ghidra_BFC36CF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC36D1C", + "label": "ghidra_BFC36D1C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC36EC0", + "label": "ghidra_BFC36EC0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC36F90", + "label": "ghidra_BFC36F90", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37028", + "label": "ghidra_BFC37028", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37070", + "label": "ghidra_BFC37070", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC370A0", + "label": "ghidra_BFC370A0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC370F4", + "label": "ghidra_BFC370F4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37130", + "label": "ghidra_BFC37130", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3716C", + "label": "ghidra_BFC3716C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37334", + "label": "ghidra_BFC37334", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37368", + "label": "ghidra_BFC37368", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC373E0", + "label": "ghidra_BFC373E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37434", + "label": "ghidra_BFC37434", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC374BC", + "label": "ghidra_BFC374BC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC374EC", + "label": "ghidra_BFC374EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37838", + "label": "ghidra_BFC37838", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37868", + "label": "ghidra_BFC37868", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC378B4", + "label": "ghidra_BFC378B4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37908", + "label": "ghidra_BFC37908", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37998", + "label": "ghidra_BFC37998", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37A4C", + "label": "ghidra_BFC37A4C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC37AC4", + "label": "ghidra_BFC37AC4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC38204", + "label": "ghidra_BFC38204", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC382E0", + "label": "ghidra_BFC382E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC38524", + "label": "ghidra_BFC38524", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC387D4", + "label": "ghidra_BFC387D4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC38A7C", + "label": "ghidra_BFC38A7C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC38BE8", + "label": "ghidra_BFC38BE8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC38C68", + "label": "ghidra_BFC38C68", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC38DAC", + "label": "ghidra_BFC38DAC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC39080", + "label": "ghidra_BFC39080", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC39410", + "label": "ghidra_BFC39410", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC394EC", + "label": "ghidra_BFC394EC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3954C", + "label": "ghidra_BFC3954C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC39630", + "label": "ghidra_BFC39630", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC396E8", + "label": "ghidra_BFC396E8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC39D38", + "label": "ghidra_BFC39D38", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC39E84", + "label": "ghidra_BFC39E84", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC39FE4", + "label": "ghidra_BFC39FE4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3A094", + "label": "ghidra_BFC3A094", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3A228", + "label": "ghidra_BFC3A228", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3A2C0", + "label": "ghidra_BFC3A2C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3AAC4", + "label": "ghidra_BFC3AAC4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3AD68", + "label": "ghidra_BFC3AD68", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3B054", + "label": "ghidra_BFC3B054", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3B30C", + "label": "ghidra_BFC3B30C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3B368", + "label": "ghidra_BFC3B368", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3B85C", + "label": "ghidra_BFC3B85C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3B93C", + "label": "ghidra_BFC3B93C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3BA74", + "label": "ghidra_BFC3BA74", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3BD78", + "label": "ghidra_BFC3BD78", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3BD98", + "label": "ghidra_BFC3BD98", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3BE6C", + "label": "ghidra_BFC3BE6C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3BF10", + "label": "ghidra_BFC3BF10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3C060", + "label": "ghidra_BFC3C060", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3C140", + "label": "ghidra_BFC3C140", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3C428", + "label": "ghidra_BFC3C428", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3C4E0", + "label": "ghidra_BFC3C4E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3C710", + "label": "ghidra_BFC3C710", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3D810", + "label": "ghidra_BFC3D810", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3D8C0", + "label": "ghidra_BFC3D8C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3DF20", + "label": "ghidra_BFC3DF20", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3E020", + "label": "ghidra_BFC3E020", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3E110", + "label": "ghidra_BFC3E110", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3E980", + "label": "ghidra_BFC3E980", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3ED40", + "label": "ghidra_BFC3ED40", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3EDB4", + "label": "ghidra_BFC3EDB4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3EFF0", + "label": "ghidra_BFC3EFF0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F1B8", + "label": "ghidra_BFC3F1B8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F2B4", + "label": "ghidra_BFC3F2B4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F484", + "label": "ghidra_BFC3F484", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F4F0", + "label": "ghidra_BFC3F4F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F570", + "label": "ghidra_BFC3F570", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F5D8", + "label": "ghidra_BFC3F5D8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F6F0", + "label": "ghidra_BFC3F6F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F7E8", + "label": "ghidra_BFC3F7E8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F8E4", + "label": "ghidra_BFC3F8E4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3F9AC", + "label": "ghidra_BFC3F9AC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3FA10", + "label": "ghidra_BFC3FA10", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3FAEC", + "label": "ghidra_BFC3FAEC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3FB74", + "label": "ghidra_BFC3FB74", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3FC50", + "label": "ghidra_BFC3FC50", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3FD0C", + "label": "ghidra_BFC3FD0C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3FDC8", + "label": "ghidra_BFC3FDC8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3FE60", + "label": "ghidra_BFC3FE60", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC3FF40", + "label": "ghidra_BFC3FF40", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40034", + "label": "ghidra_BFC40034", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC400DC", + "label": "ghidra_BFC400DC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40184", + "label": "ghidra_BFC40184", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40260", + "label": "ghidra_BFC40260", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC402DC", + "label": "ghidra_BFC402DC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40484", + "label": "ghidra_BFC40484", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40628", + "label": "ghidra_BFC40628", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC406E0", + "label": "ghidra_BFC406E0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40700", + "label": "ghidra_BFC40700", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC407B8", + "label": "ghidra_BFC407B8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40B68", + "label": "ghidra_BFC40B68", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40DE8", + "label": "ghidra_BFC40DE8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC40F34", + "label": "ghidra_BFC40F34", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC4102C", + "label": "ghidra_BFC4102C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41200", + "label": "ghidra_BFC41200", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41258", + "label": "ghidra_BFC41258", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC413B0", + "label": "ghidra_BFC413B0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC413F4", + "label": "ghidra_BFC413F4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41458", + "label": "ghidra_BFC41458", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41520", + "label": "ghidra_BFC41520", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41648", + "label": "ghidra_BFC41648", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41670", + "label": "ghidra_BFC41670", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41708", + "label": "ghidra_BFC41708", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC417CC", + "label": "ghidra_BFC417CC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41848", + "label": "ghidra_BFC41848", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC418C4", + "label": "ghidra_BFC418C4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC4192C", + "label": "ghidra_BFC4192C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41A44", + "label": "ghidra_BFC41A44", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41C80", + "label": "ghidra_BFC41C80", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC41DA4", + "label": "ghidra_BFC41DA4", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC42014", + "label": "ghidra_BFC42014", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC4203C", + "label": "ghidra_BFC4203C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC42060", + "label": "ghidra_BFC42060", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC42090", + "label": "ghidra_BFC42090", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC420C0", + "label": "ghidra_BFC420C0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC420F0", + "label": "ghidra_BFC420F0", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC42120", + "label": "ghidra_BFC42120", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC42160", + "label": "ghidra_BFC42160", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC421D8", + "label": "shell_vblank_restore_entry", + "rationale": "Mid-function entry: SaveState/RestoreState (A0:0x13/0x14) longjmp target inside func_1FC42160; after RestoreState returns v0!=0 the callback loop runs" + }, + { + "address": "0xBFC4231C", + "label": "shell_vblank_init_body", + "rationale": "Mid-function entry: SaveState returns v0=0 \u00e2\u2020\u2019 BEQ at 0xBFC421D8 taken \u00e2\u2020\u2019 callback table setup at 0xBFC4231C. Split from func_1FC42160" + }, + { + "address": "0xBFC42370", + "label": "shell_vblank_epilogue", + "rationale": "Mid-function entry: func_1FC42160 epilogue (restore ra/sp, return). Branch target from BNE at 0xBFC4216C when init flag is set" + }, + { + "address": "0xBFC42424", + "label": "ghidra_BFC42424", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC424A8", + "label": "ghidra_BFC424A8", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC42540", + "label": "ghidra_BFC42540", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC425FC", + "label": "ghidra_BFC425FC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC42640", + "label": "ghidra_BFC42640", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC426DC", + "label": "ghidra_BFC426DC", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC4270C", + "label": "ghidra_BFC4270C", + "rationale": "Ghidra function start" + }, + { + "address": "0xBFC42380", + "label": "dmiss_BFC42380", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC42844", + "label": "dmiss_BFC42844", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC38AD4", + "label": "dmiss_BFC38AD4", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC42910", + "label": "shell_post_callback_cleanup", + "rationale": "Called from func_1FC42160 after 256-iteration callback countdown expires; was dispatch miss" + }, + { + "address": "0xBFC42A90", + "label": "dmiss_BFC42A90", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC42A10", + "label": "dmiss_BFC42A10", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC27FB0", + "label": "dmiss_BFC27FB0", + "rationale": "dispatch miss: Kernel Part 2 function, indirect call" + }, + { + "address": "0xBFC36D48", + "label": "dmiss_BFC36D48", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC38AA4", + "label": "dmiss_BFC38AA4", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC1E3AC", + "label": "dmiss_BFC1E3AC", + "rationale": "dispatch miss: Shell function, called in vblank loop" + }, + { + "address": "0xBFC3045C", + "label": "dmiss_BFC3045C", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC30470", + "label": "dmiss_BFC30470", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC30484", + "label": "dmiss_BFC30484", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC30498", + "label": "dmiss_BFC30498", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC30554", + "label": "dmiss_BFC30554", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC30560", + "label": "dmiss_BFC30560", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC3056C", + "label": "dmiss_BFC3056C", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC30578", + "label": "dmiss_BFC30578", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC36DD0", + "label": "dmiss_BFC36DD0", + "rationale": "dispatch miss: Shell function, indirect call via table" + }, + { + "address": "0xBFC11840", + "label": "dmiss_BFC11840", + "rationale": "dispatch miss: KP2 function, indirect call" + }, + { + "address": "0xBFC36DF8", + "label": "dmiss_BFC36DF8", + "rationale": "dispatch miss: Shell function, indirect call" + }, + { + "address": "0xBFC11524", + "label": "dmiss_BFC11524", + "rationale": "dispatch miss: KP2 secondary entry point for exception handler, mid-function split of func_00001A00, called during VBlank" + }, + { + "address": "0xBFC11610", + "label": "dmiss_BFC11610", + "rationale": "dispatch miss: KP2 function, tail-call target from 0xBFC11524 exception handler path" + }, + { + "address": "0xBFC0193C", + "label": "cache_flush_continuation", + "rationale": "Jump target of cache-flush jr k0 at BFC01938" + }, + { + "address": "0xBFC01E24", + "label": "SysInitMemory", + "rationale": "Dispatch miss during boot \u00e2\u20ac\u201d kernel init function" + }, + { + "address": "0xBFC02200", + "label": "jal_BFC02200", + "rationale": "JAL target from code region" + }, + { + "address": "0xBFC03FC0", + "label": "jal_BFC03FC0", + "rationale": "JAL target from code region" + }, + { + "address": "0xBFC06FDC", + "label": "indirect_BFC06FDC", + "rationale": "Reached via indirect dispatch during boot" + }, + { + "address": "0xBFC0DA70", + "label": "jal_BFC0DA70", + "rationale": "JAL target from code region" + }, + { + "address": "0xBFC0DA80", + "label": "jal_BFC0DA80", + "rationale": "JAL target from code region" + }, + { + "address": "0xBFC0DA90", + "label": "jal_BFC0DA90", + "rationale": "JAL target from code region" + }, + { + "address": "0xBFC10000", + "label": "kernel_trampoline_0", + "rationale": "Trampoline to FileOpen (0x598)" + }, + { + "address": "0xBFC10010", + "label": "kernel_trampoline_1", + "rationale": "Trampoline to FileRead (0x5C4)" + }, + { + "address": "0xBFC10020", + "label": "kernel_trampoline_2", + "rationale": "Trampoline to FileClose (0x5E0)" + }, + { + "address": "0xBFC10030", + "label": "kernel_trampoline_3", + "rationale": "Trampoline to 0x600" + }, + { + "address": "0xBFC10040", + "label": "kernel_memcpy", + "rationale": "ROM-to-RAM and RAM clear routine" + }, + { + "address": "0xBFC10098", + "label": "kernel_bzero", + "rationale": "RAM clear routine (to 0xBFC100BC)" + }, + { + "address": "0xBFC100C4", + "label": "a0_vector_dispatch", + "rationale": "A0 function table dispatch" + }, + { + "address": "0xBFC100E0", + "label": "b0_vector_dispatch", + "rationale": "B0 function table dispatch" + }, + { + "address": "0xBFC10100", + "label": "c0_vector_dispatch", + "rationale": "C0 function table dispatch" + }, + { + "address": "0xBFC10120", + "label": "kernel_get_cause", + "rationale": "mfc0 v0,Cause; jr ra" + }, + { + "address": "0xBFC10130", + "label": "kernel_get_sr", + "rationale": "mfc0 v0,SR; jr ra" + }, + { + "address": "0xBFC10140", + "label": "kernel_set_sr", + "rationale": "mtc0 a0,SR; jr ra" + }, + { + "address": "0xBFC10150", + "label": "kernel_syscall", + "rationale": "syscall; jr ra" + }, + { + "address": "0xBFC1015C", + "label": "kernel_get_c0_table", + "rationale": "Returns C0 table pointer" + }, + { + "address": "0xBFC10168", + "label": "kernel_get_b0_table", + "rationale": "Returns B0 table pointer" + }, + { + "address": "0xBFC10174", + "label": "kernel_BFC10174", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10780", + "label": "rmiss_BFC10780", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC109A0", + "label": "kernel_BFC109A0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC109B0", + "label": "kernel_BFC109B0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10A20", + "label": "kernel_BFC10A20", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10A2C", + "label": "kernel_BFC10A2C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10A40", + "label": "kernel_BFC10A40", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10B30", + "label": "rmiss_BFC10B30", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC10BB8", + "label": "kernel_BFC10BB8", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10BE0", + "label": "kernel_BFC10BE0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10BE4", + "label": "rmiss_BFC10BE4", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC10C3C", + "label": "kernel_BFC10C3C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10F08", + "label": "kernel_BFC10F08", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10F20", + "label": "kernel_BFC10F20", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC10F44", + "label": "kernel_BFC10F44", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC110D8", + "label": "kernel_BFC110D8", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC110F8", + "label": "kernel_BFC110F8", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11114", + "label": "kernel_BFC11114", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC111AC", + "label": "kernel_BFC111AC", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC111C4", + "label": "kernel_BFC111C4", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC111E4", + "label": "kernel_BFC111E4", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1121C", + "label": "kernel_BFC1121C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11228", + "label": "kernel_BFC11228", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1125C", + "label": "kernel_BFC1125C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11274", + "label": "kernel_BFC11274", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1152C", + "label": "rmiss_BFC1152C", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC11560", + "label": "rmiss_BFC11560", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC115E8", + "label": "rmiss_BFC115E8", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC115FC", + "label": "rmiss_BFC115FC", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC11644", + "label": "kernel_BFC11644", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1175C", + "label": "kernel_BFC1175C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11800", + "label": "kernel_BFC11800", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11870", + "label": "kernel_BFC11870", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1191C", + "label": "kernel_BFC1191C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11944", + "label": "kernel_BFC11944", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11980", + "label": "kernel_BFC11980", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11998", + "label": "kernel_BFC11998", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC119C8", + "label": "kernel_BFC119C8", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11A04", + "label": "kernel_BFC11A04", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11A10", + "label": "kernel_BFC11A10", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11A4C", + "label": "kernel_BFC11A4C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11A88", + "label": "kernel_BFC11A88", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11AFC", + "label": "kernel_BFC11AFC", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11BA8", + "label": "kernel_BFC11BA8", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11BD4", + "label": "kernel_BFC11BD4", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11C14", + "label": "kernel_BFC11C14", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11C24", + "label": "kernel_BFC11C24", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11C50", + "label": "kernel_BFC11C50", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC11C68", + "label": "kernel_BFC11C68", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC12224", + "label": "kernel_BFC12224", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1228C", + "label": "kernel_BFC1228C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC122A0", + "label": "kernel_BFC122A0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC129EC", + "label": "kernel_BFC129EC", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC12BC8", + "label": "kernel_BFC12BC8", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC12BE0", + "label": "kernel_BFC12BE0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC12BE4", + "label": "rmiss_BFC12BE4", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC12EA4", + "label": "kernel_BFC12EA4", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1302C", + "label": "kernel_BFC1302C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC130A4", + "label": "kernel_BFC130A4", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC13570", + "label": "kernel_BFC13570", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1372C", + "label": "kernel_BFC1372C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1376C", + "label": "rmiss_BFC1376C", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC137B4", + "label": "indirect_BFC137B4", + "rationale": "Reached via indirect dispatch during boot (kernel relocated)" + }, + { + "address": "0xBFC137BC", + "label": "rmiss_BFC137BC", + "rationale": "runtime dispatch miss" + }, + { + "address": "0xBFC138AC", + "label": "kernel_BFC138AC", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1395C", + "label": "kernel_BFC1395C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC13968", + "label": "kernel_BFC13968", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC13A04", + "label": "kernel_BFC13A04", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC13ED0", + "label": "kernel_BFC13ED0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC13F5C", + "label": "kernel_BFC13F5C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1454C", + "label": "kernel_BFC1454C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC14588", + "label": "kernel_BFC14588", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC14594", + "label": "kernel_BFC14594", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC14670", + "label": "kernel_BFC14670", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC14754", + "label": "kernel_BFC14754", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC14764", + "label": "kernel_BFC14764", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1483C", + "label": "kernel_BFC1483C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1484C", + "label": "kernel_BFC1484C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC14864", + "label": "kernel_BFC14864", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1486C", + "label": "kernel_BFC1486C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15188", + "label": "kernel_BFC15188", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15664", + "label": "kernel_BFC15664", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15930", + "label": "kernel_BFC15930", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15950", + "label": "kernel_BFC15950", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15998", + "label": "kernel_BFC15998", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15A04", + "label": "kernel_BFC15A04", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15A4C", + "label": "kernel_BFC15A4C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15AB8", + "label": "kernel_BFC15AB8", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15AF0", + "label": "kernel_BFC15AF0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15B5C", + "label": "kernel_BFC15B5C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15B70", + "label": "kernel_BFC15B70", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15CC4", + "label": "kernel_BFC15CC4", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15E90", + "label": "kernel_BFC15E90", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15EBC", + "label": "kernel_BFC15EBC", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC15F08", + "label": "kernel_BFC15F08", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC1609C", + "label": "kernel_BFC1609C", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC16690", + "label": "kernel_BFC16690", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC166A0", + "label": "kernel_BFC166A0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC166B0", + "label": "kernel_BFC166B0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC166C0", + "label": "kernel_BFC166C0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC166D0", + "label": "kernel_BFC166D0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC166E0", + "label": "kernel_BFC166E0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC166F0", + "label": "kernel_BFC166F0", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC16700", + "label": "kernel_BFC16700", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC16710", + "label": "kernel_BFC16710", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC16720", + "label": "kernel_BFC16720", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC18000", + "label": "shell_entry", + "rationale": "Shell entry point at BFC18000, copied to RAM 0x80030000" + }, + { + "address": "0xBFC18788", + "label": "kernel_BFC18788", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC188B4", + "label": "kernel_BFC188B4", + "rationale": "Kernel ROM function (auto-discovered from tables/boundaries)" + }, + { + "address": "0xBFC33CC0", + "label": "jal_BFC33CC0", + "rationale": "JAL target from code region" + }, + { + "address": "0xBFC41FC0", + "label": "shell_InitRCnt_setup", + "rationale": "Undiscovered function: calls B0:0x15 (InitRCnt) with arg 0x20000001. Only reachable via indirect jalr from shell init table. Missing seed causes VSync counter to never increment." + }, + { + "address": "0xBFC425BC", + "label": "vblank_chain_handler", + "rationale": "VBlank chain handler: the ONLY instruction in the entire BIOS ROM that stores to 0x80079D9C (VSync counter) is at 0xBFC425E0, inside this 15-instruction function at 0xBFC425BC. Function reads counter, increments it, optionally calls user callback at *0x800DFF40. Not reachable via any JAL/literal/lui in ROM \u00e2\u20ac\u201d installed at runtime by kernel chain-registration code. Missing seed means counter-increment code is never recompiled, so even if kernel installs the handler pointer it cannot dispatch to recompiled code." + }, + { + "address": "0xBFC1E3C0", + "label": "sio_event_opener_epilogue", + "rationale": "Epilogue fragment at BFC1E3C0 (addiu sp,sp,0x18; jr ra; nop). Reached via branch from SIO state machine. Dispatch miss after fall-through fix exposed new code paths." + }, + { + "address": "0xBFC336F0", + "label": "gte_cop2_init", + "rationale": "GTE/COP2 initialization: enables COP2 in SR, sets COP2 control registers. Contains COP2 instructions (Phase 5). Reached after fall-through fix." + }, + { + "address": "0xBFC42BA0", + "label": "shell_vblank_dispatch", + "rationale": "Called from chain-E004 verify (func_1FC40700) via jal 0x8005ABA0. Walks VBlank callback chain \u00e2\u2020\u2019 calls VSync counter incrementer. Missing seed blocks VSync counter from incrementing." + }, + { + "address": "0xBFC38AF0", + "label": "shell_hot_function", + "rationale": "Dispatch miss at 0x80050AF0 (phys 0x1FC38AF0) \u00e2\u20ac\u201d 178 misses. Hot shell function during rendering loop." + }, + { + "address": "0xBFC137D0", + "label": "kernel_ram_function", + "rationale": "Dispatch miss at 0xBFC137D0 (phys 0x00003CD0) \u00e2\u20ac\u201d 3 misses. Kernel RAM function." + }, + { + "address": "0xBFC42BF0", + "label": "shell_register_callback", + "rationale": "Called from func_1FC42160 init path at 0xBFC42330 to register VBlank callbacks; missing seed caused callback table corruption" + }, + { + "address": "0xBFC42BE0", + "label": "shell_vblank_process", + "rationale": "Called from chain-E004 verify (jal 0x8005ABE0). Also called from shell main loop to process VBlank events. Missing seed causes VBlank callback chain to never execute." + }, + { + "address": "0xBFC4226C", + "label": "shell_vblank_callback_loop", + "rationale": "Mid-function entry point inside func_1FC42160. The BIOS shell jumps here directly to walk VBlank callbacks, bypassing the init-gate at the function top. Needed for VSync counter increment." + }, + { + "address": "0xBFC1A050", + "label": "shell_input_handler", + "rationale": "Shell function called via RAM 0x80032050 after pad input detected. Dispatch miss blocked shell from processing button presses." + }, + { + "address": "0xBFC19FD0", + "label": "shell_input_handler_2", + "rationale": "Second shell input handler at RAM 0x80031FD0. Similar to BFC1A050. Dispatch miss after adding BFC1A050." + }, + { + "address": "0xBFC151E8", + "label": "kernel_56E8", + "rationale": "Kernel function at RAM 0x56E8. Dispatch miss from shell input path." + }, + { + "address": "0xBFC156A4", + "label": "kernel_5BA4", + "rationale": "Kernel function at RAM 0x5BA4. Dispatch miss from shell input path." + }, + { + "address": "0xBFC0BA8C", + "label": "bios_BA8C", + "rationale": "BIOS boot code function. Dispatch miss from shell input path." + }, + { + "address": "0xBFC0C1DC", + "label": "bios_C1DC", + "rationale": "BIOS boot code function. Dispatch miss from shell input path." + }, + { + "address": "0xBFC15268", + "label": "kernel_5768", + "rationale": "Kernel function at RAM 0x5768. Cascade from input path seeds." + }, + { + "address": "0xBFC15724", + "label": "kernel_5C24", + "rationale": "Kernel function at RAM 0x5C24. Cascade from input path seeds." + }, + { + "address": "0xBFC42308", + "label": "shell_42308", + "rationale": "Shell function near VSync callback area. Dispatch miss from input path." + }, + { + "address": "0xBFC1529C", + "label": "kernel_579C", + "rationale": "Kernel function at RAM 0x579C. Cascade from input path." + }, + { + "address": "0xBFC15650", + "label": "kernel_5B50", + "rationale": "Kernel function. Cascade from input path." + }, + { + "address": "0xBFC15894", + "label": "kernel_5D94", + "rationale": "Kernel function. Cascade from input path." + }, + { + "address": "0xBFC15334", + "label": "kernel_5834", + "rationale": "Kernel function at RAM 0x5834. Cascade." + }, + { + "address": "0xBFC15758", + "label": "kernel_5C58", + "rationale": "Kernel function at RAM 0x5C58. Cascade." + }, + { + "address": "0xBFC15654", + "label": "kernel_5B54", + "rationale": "Kernel function. Cascade from input path." + }, + { + "address": "0xBFC15370", + "label": "kernel_5870", + "rationale": "Kernel (CARD driver) function. Cascade." + }, + { + "address": "0xBFC15848", + "label": "kernel_5D48", + "rationale": "Kernel (CARD driver) function. Cascade." + }, + { + "address": "0xBFC15898", + "label": "kernel_5D98", + "rationale": "Kernel (CARD driver) function. Cascade." + }, + { + "address": "0xBFC153B4", + "label": "kernel_58B4", + "rationale": "Kernel (CARD driver) function at RAM 0x58B4. Cascade." + }, + { + "address": "0xBFC153E8", + "label": "kernel_58E8", + "rationale": "Kernel (CARD driver) function at RAM 0x58E8. Cascade." + }, + { + "address": "0xBFC15418", + "label": "kernel_5918", + "rationale": "Kernel (CARD driver) leaf function at RAM 0x5918. Cascade." + }, + { + "address": "0xBFC15454", + "label": "kernel_5954", + "rationale": "CARD driver cascade." + }, + { + "address": "0xBFC15490", + "label": "kernel_5990", + "rationale": "CARD driver cascade." + }, + { + "address": "0xBFC154CC", + "label": "kernel_59CC", + "rationale": "CARD driver cascade (predicted)." + }, + { + "address": "0xBFC15508", + "label": "kernel_5A08", + "rationale": "CARD driver cascade (predicted)." + }, + { + "address": "0xBFC15544", + "label": "kernel_5A44", + "rationale": "CARD driver cascade (predicted)." + }, + { + "address": "0xBFC15580", + "label": "kernel_5A80", + "rationale": "CARD driver cascade (predicted)." + }, + { + "address": "0xBFC155BC", + "label": "kernel_5ABC", + "rationale": "CARD driver cascade (predicted)." + }, + { + "address": "0xBFC155F8", + "label": "kernel_5AF8", + "rationale": "CARD driver cascade (predicted)." + }, + { + "address": "0xBFC15634", + "label": "kernel_5B34", + "rationale": "CARD driver cascade (predicted)." + }, + { + "address": "0xBFC15500", + "label": "kernel_5A00", + "rationale": "CARD driver cascade." + }, + { + "address": "0xBFC33758", + "label": "gte_lib_BFC33758", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC337AC", + "label": "gte_lib_BFC337AC", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33800", + "label": "gte_lib_BFC33800", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC3388C", + "label": "gte_lib_BFC3388C", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33918", + "label": "gte_lib_BFC33918", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33978", + "label": "gte_lib_BFC33978", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33AB8", + "label": "gte_lib_BFC33AB8", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33B80", + "label": "gte_lib_BFC33B80", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33C04", + "label": "gte_lib_BFC33C04", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33C84", + "label": "gte_lib_BFC33C84", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33D24", + "label": "gte_lib_BFC33D24", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33DA4", + "label": "gte_lib_BFC33DA4", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33E20", + "label": "gte_lib_BFC33E20", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33E80", + "label": "gte_lib_BFC33E80", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33E90", + "label": "gte_lib_BFC33E90", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33EA0", + "label": "gte_lib_BFC33EA0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33EC0", + "label": "gte_lib_BFC33EC0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33ECC", + "label": "gte_lib_BFC33ECC", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33EE0", + "label": "gte_lib_BFC33EE0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33EF4", + "label": "gte_lib_BFC33EF4", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33F40", + "label": "gte_lib_BFC33F40", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33F54", + "label": "gte_lib_BFC33F54", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33F6C", + "label": "gte_lib_BFC33F6C", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33F80", + "label": "gte_lib_BFC33F80", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33F94", + "label": "gte_lib_BFC33F94", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33FA8", + "label": "gte_lib_BFC33FA8", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33FF0", + "label": "gte_lib_BFC33FF0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC33FFC", + "label": "gte_lib_BFC33FFC", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34008", + "label": "gte_lib_BFC34008", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC3401C", + "label": "gte_lib_BFC3401C", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34028", + "label": "gte_lib_BFC34028", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC3403C", + "label": "gte_lib_BFC3403C", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34054", + "label": "gte_lib_BFC34054", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34068", + "label": "gte_lib_BFC34068", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC3407C", + "label": "gte_lib_BFC3407C", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34088", + "label": "gte_lib_BFC34088", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC3409C", + "label": "gte_lib_BFC3409C", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC340CC", + "label": "gte_lib_BFC340CC", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC340D8", + "label": "gte_lib_BFC340D8", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC340E4", + "label": "gte_lib_BFC340E4", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34104", + "label": "gte_lib_BFC34104", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34110", + "label": "gte_lib_BFC34110", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34924", + "label": "gte_lib_BFC34924", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34954", + "label": "gte_lib_BFC34954", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34980", + "label": "gte_lib_BFC34980", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34A04", + "label": "gte_lib_BFC34A04", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34A30", + "label": "gte_lib_BFC34A30", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34A60", + "label": "gte_lib_BFC34A60", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34A90", + "label": "gte_lib_BFC34A90", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34AA0", + "label": "gte_lib_BFC34AA0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34B08", + "label": "gte_lib_BFC34B08", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34EC0", + "label": "gte_lib_BFC34EC0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34EC4", + "label": "gte_lib_BFC34EC4", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35128", + "label": "gte_lib_BFC35128", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC3524C", + "label": "gte_lib_BFC3524C", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35348", + "label": "gte_lib_BFC35348", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35470", + "label": "gte_lib_BFC35470", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35598", + "label": "gte_lib_BFC35598", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35698", + "label": "gte_lib_BFC35698", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC357C4", + "label": "gte_lib_BFC357C4", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC3582C", + "label": "gte_lib_BFC3582C", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35890", + "label": "gte_lib_BFC35890", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35B88", + "label": "gte_lib_BFC35B88", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35BC4", + "label": "gte_lib_BFC35BC4", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35C28", + "label": "gte_lib_BFC35C28", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35C60", + "label": "gte_lib_BFC35C60", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35CC8", + "label": "gte_lib_BFC35CC8", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35D10", + "label": "gte_lib_BFC35D10", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35D58", + "label": "gte_lib_BFC35D58", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35DA0", + "label": "gte_lib_BFC35DA0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35DD4", + "label": "gte_lib_BFC35DD4", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35E30", + "label": "gte_lib_BFC35E30", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35E64", + "label": "gte_lib_BFC35E64", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35E98", + "label": "gte_lib_BFC35E98", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35EC0", + "label": "gte_lib_BFC35EC0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35EEC", + "label": "gte_lib_BFC35EEC", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35F18", + "label": "gte_lib_BFC35F18", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35F38", + "label": "gte_lib_BFC35F38", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35F78", + "label": "gte_lib_BFC35F78", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35FA0", + "label": "gte_lib_BFC35FA0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC35FD0", + "label": "gte_lib_BFC35FD0", + "rationale": "GTE math library function. Batch-discovered from BFC33000-BFC36000." + }, + { + "address": "0xBFC34928", + "label": "gte_lib_BFC34928", + "rationale": "GTE library sub-entry. Cascade from batch." + }, + { + "address": "0xBFC34A08", + "label": "gte_lib_BFC34A08", + "rationale": "GTE library sub-entry. Cascade from batch." + }, + { + "address": "0xBFC34958", + "label": "gte_lib_BFC34958", + "rationale": "GTE library sub-entry. Cascade." + }, + { + "address": "0xBFC34A34", + "label": "gte_lib_BFC34A34", + "rationale": "GTE library sub-entry. Cascade." + }, + { + "address": "0xBFC34984", + "label": "gte_lib_BFC34984", + "rationale": "GTE library sub-entry. Cascade." + }, + { + "address": "0xBFC34A64", + "label": "gte_lib_BFC34A64", + "rationale": "GTE library sub-entry. Cascade." + } + ], + "excluded": [ + { + "address": "0xBFC00100", + "label": "utlb_miss_bev1", + "rationale": "R3000 UTLB-miss vector; PS1 has no TLB; never executed" + } + ] } \ No newline at end of file diff --git a/runtime/src/debug_server.c b/runtime/src/debug_server.c index 1e2c92d5..4e0052b8 100644 --- a/runtime/src/debug_server.c +++ b/runtime/src/debug_server.c @@ -444,6 +444,47 @@ static void handle_irq_state(int id, const char *json) dma_get_dpcr(), dma_get_dicr()); } +/* GPU opcode counter — defined in gpu.c */ +extern uint32_t gpu_get_opcode_count(uint8_t op); + +static void handle_gpu_opcodes(int id, const char *json) +{ + (void)json; + /* Report non-zero GP0 opcode counts */ + char buf[4096]; + int pos = snprintf(buf, sizeof(buf), "{\"id\":%d,\"ok\":true,\"opcodes\":{", id); + int first = 1; + for (int i = 0; i < 256; i++) { + uint32_t cnt = gpu_get_opcode_count((uint8_t)i); + if (cnt > 0) { + pos += snprintf(buf + pos, sizeof(buf) - pos, "%s\"0x%02X\":%u", + first ? "" : ",", i, cnt); + first = 0; + } + } + pos += snprintf(buf + pos, sizeof(buf) - pos, "}}"); + send_fmt("%s", buf); +} + +static void handle_gte_state(int id, const char *json) +{ + (void)json; + if (!s_cpu) { send_err(id, "no cpu"); return; } + char buf[2048]; + int pos = snprintf(buf, sizeof(buf), "{\"id\":%d,\"ok\":true,\"gte_ctrl\":[", id); + for (int i = 0; i < 32; i++) { + pos += snprintf(buf + pos, sizeof(buf) - pos, "%s\"0x%08X\"", + i ? "," : "", s_cpu->gte_ctrl[i]); + } + pos += snprintf(buf + pos, sizeof(buf) - pos, "],\"gte_data\":["); + for (int i = 0; i < 32; i++) { + pos += snprintf(buf + pos, sizeof(buf) - pos, "%s\"0x%08X\"", + i ? "," : "", s_cpu->gte_data[i]); + } + pos += snprintf(buf + pos, sizeof(buf) - pos, "]}"); + send_fmt("%s", buf); +} + static void handle_sio_state(int id, const char *json) { (void)json; @@ -1254,6 +1295,8 @@ static const CmdEntry s_commands[] = { { "get_snapshots", handle_get_snapshots }, { "screenshot", handle_screenshot }, { "screenshot_file", handle_screenshot_file }, + { "gpu_opcodes", handle_gpu_opcodes }, + { "gte_state", handle_gte_state }, { "quit", handle_quit }, { "dispatch_check", handle_dispatch_check }, { "dispatch_tail", handle_dispatch_tail }, diff --git a/runtime/src/gpu.c b/runtime/src/gpu.c index 036af798..1be54378 100644 --- a/runtime/src/gpu.c +++ b/runtime/src/gpu.c @@ -440,6 +440,7 @@ static void raster_triangle(int32_t x0, int32_t y0, /* Execute mono triangle (GP0 0x20-0x23) */ static void gp0_exec_mono_tri(void) { + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); int32_t vx[3], vy[3]; for (int i = 0; i < 3; i++) { @@ -447,11 +448,13 @@ static void gp0_exec_mono_tri(void) { vx[i] += draw_offset_x; vy[i] += draw_offset_y; } - raster_triangle(vx[0], vy[0], vx[1], vy[1], vx[2], vy[2], color); + sw_set_semi_transparency(semi_trans, (int)semi_transparency); + sw_draw_flat_triangle(vx[0], vy[0], vx[1], vy[1], vx[2], vy[2], color); } /* Execute mono quad (GP0 0x28-0x2B) — two triangles: (0,1,2) and (2,1,3) */ static void gp0_exec_mono_quad(void) { + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); int32_t vx[4], vy[4]; for (int i = 0; i < 4; i++) { @@ -459,8 +462,9 @@ static void gp0_exec_mono_quad(void) { vx[i] += draw_offset_x; vy[i] += draw_offset_y; } - raster_triangle(vx[0], vy[0], vx[1], vy[1], vx[2], vy[2], color); - raster_triangle(vx[2], vy[2], vx[1], vy[1], vx[3], vy[3], color); + sw_set_semi_transparency(semi_trans, (int)semi_transparency); + sw_draw_flat_triangle(vx[0], vy[0], vx[1], vy[1], vx[2], vy[2], color); + sw_draw_flat_triangle(vx[2], vy[2], vx[1], vy[1], vx[3], vy[3], color); } /* Execute shaded triangle (GP0 0x30-0x33) — Gouraud shaded */ @@ -656,29 +660,20 @@ static void gp0_exec_shaded_textured_quad(void) { /* Execute mono line (GP0 0x40-0x47) — Bresenham */ static void gp0_exec_mono_line(void) { + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); int32_t x0, y0, x1, y1; parse_vertex(gp0_cmd_buf[1], &x0, &y0); parse_vertex(gp0_cmd_buf[2], &x1, &y1); x0 += draw_offset_x; y0 += draw_offset_y; x1 += draw_offset_x; y1 += draw_offset_y; - /* Simple Bresenham */ - int32_t dx = x1 - x0, dy = y1 - y0; - int32_t sx = dx > 0 ? 1 : -1, sy = dy > 0 ? 1 : -1; - if (dx < 0) dx = -dx; - if (dy < 0) dy = -dy; - int32_t err = dx - dy; - for (;;) { - raster_pixel(x0, y0, color); - if (x0 == x1 && y0 == y1) break; - int32_t e2 = 2 * err; - if (e2 > -dy) { err -= dy; x0 += sx; } - if (e2 < dx) { err += dx; y0 += sy; } - } + sw_set_semi_transparency(semi_trans, (int)semi_transparency); + sw_draw_line(x0, y0, x1, y1, color); } /* Execute shaded line (GP0 0x50-0x57) — flat shaded for now */ static void gp0_exec_shaded_line(void) { + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); int32_t x0, y0, x1, y1; parse_vertex(gp0_cmd_buf[1], &x0, &y0); @@ -686,34 +681,23 @@ static void gp0_exec_shaded_line(void) { parse_vertex(gp0_cmd_buf[3], &x1, &y1); x0 += draw_offset_x; y0 += draw_offset_y; x1 += draw_offset_x; y1 += draw_offset_y; - int32_t dx = x1 - x0, dy = y1 - y0; - int32_t sx = dx > 0 ? 1 : -1, sy = dy > 0 ? 1 : -1; - if (dx < 0) dx = -dx; - if (dy < 0) dy = -dy; - int32_t err = dx - dy; - for (;;) { - raster_pixel(x0, y0, color); - if (x0 == x1 && y0 == y1) break; - int32_t e2 = 2 * err; - if (e2 > -dy) { err -= dy; x0 += sx; } - if (e2 < dx) { err += dx; y0 += sy; } - } + sw_set_semi_transparency(semi_trans, (int)semi_transparency); + sw_draw_line(x0, y0, x1, y1, color); } /* Execute mono rectangle (GP0 0x60-0x63) */ static void gp0_exec_mono_rect(void) { + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); int32_t x0, y0; parse_vertex(gp0_cmd_buf[1], &x0, &y0); x0 += draw_offset_x; y0 += draw_offset_y; - uint32_t w = gp0_cmd_buf[2] & 0xFFFFu; - uint32_t h = (gp0_cmd_buf[2] >> 16) & 0xFFFFu; - /* Clamp to PS1 max */ + int w = gp0_cmd_buf[2] & 0xFFFFu; + int h = (gp0_cmd_buf[2] >> 16) & 0xFFFFu; if (w > 1023) w = 1023; if (h > 511) h = 511; - for (uint32_t dy = 0; dy < h; dy++) - for (uint32_t dx = 0; dx < w; dx++) - raster_pixel(x0 + (int32_t)dx, y0 + (int32_t)dy, color); + sw_set_semi_transparency(semi_trans, (int)semi_transparency); + sw_draw_flat_rect(x0, y0, w, h, color); } /* Execute textured rectangle (GP0 0x64-0x67) */ @@ -739,11 +723,13 @@ static void gp0_exec_textured_rect(void) { /* Execute 1x1 dot (GP0 0x68-0x6B) */ static void gp0_exec_mono_dot(void) { + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); int32_t x, y; parse_vertex(gp0_cmd_buf[1], &x, &y); x += draw_offset_x; y += draw_offset_y; - raster_pixel(x, y, color); + sw_set_semi_transparency(semi_trans, (int)semi_transparency); + sw_draw_flat_rect(x, y, 1, 1, color); } /* Execute 8x8 textured sprite (GP0 0x74-0x77) */ @@ -765,13 +751,13 @@ static void gp0_exec_textured_8x8(void) { /* Execute 8x8 sprite (GP0 0x70-0x73) */ static void gp0_exec_mono_8x8(void) { + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); int32_t x0, y0; parse_vertex(gp0_cmd_buf[1], &x0, &y0); x0 += draw_offset_x; y0 += draw_offset_y; - for (int32_t dy = 0; dy < 8; dy++) - for (int32_t dx = 0; dx < 8; dx++) - raster_pixel(x0 + dx, y0 + dy, color); + sw_set_semi_transparency(semi_trans, (int)semi_transparency); + sw_draw_flat_rect(x0, y0, 8, 8, color); } /* Execute 16x16 textured sprite (GP0 0x7C-0x7F) */ @@ -1027,9 +1013,15 @@ static int gp0_command_word_count(uint8_t opcode) { } } +/* Per-opcode execution counters (exposed via gpu_get_opcode_stats) */ +static uint32_t gp0_opcode_count[256]; + +uint32_t gpu_get_opcode_count(uint8_t op) { return gp0_opcode_count[op]; } + /* Execute a fully-collected GP0 command */ static void gp0_execute_command(void) { uint8_t opcode = (gp0_cmd_buf[0] >> 24) & 0xFF; + gp0_opcode_count[opcode]++; /* Categorize for diagnostics */ if (opcode <= 0x01) gp0_nop_count++; @@ -1118,12 +1110,39 @@ static void gp0_execute_command(void) { case 0x68: case 0x69: case 0x6A: case 0x6B: gp0_exec_mono_dot(); break; + case 0x6C: case 0x6D: case 0x6E: case 0x6F: { + /* 1x1 textured dot: cmd, vertex, texcoord+clut (no size word) */ + uint32_t color24 = gp0_cmd_buf[0] & 0xFFFFFFu; + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; + int32_t x0, y0; + parse_vertex(gp0_cmd_buf[1], &x0, &y0); + x0 += draw_offset_x; y0 += draw_offset_y; + int u0 = gp0_cmd_buf[2] & 0xFF; + int v0 = (gp0_cmd_buf[2] >> 8) & 0xFF; + uint16_t clut = (uint16_t)(gp0_cmd_buf[2] >> 16); + uint16_t clut_x = (clut & 0x3F) * 16; + uint16_t clut_y = (clut >> 6) & 0x1FF; + setup_textured_draw(color24, semi_trans); + sw_draw_textured_rect(x0, y0, 1, 1, u0, v0, clut_x, clut_y, current_texpage()); + break; + } case 0x70: case 0x71: case 0x72: case 0x73: gp0_exec_mono_8x8(); break; case 0x74: case 0x75: case 0x76: case 0x77: gp0_exec_textured_8x8(); break; + case 0x78: case 0x79: case 0x7A: case 0x7B: { + /* 16x16 mono sprite */ + int semi_trans = (gp0_cmd_buf[0] >> 25) & 1; + uint16_t color = rgb888_to_rgb555(gp0_cmd_buf[0] & 0xFFFFFFu); + int32_t x0, y0; + parse_vertex(gp0_cmd_buf[1], &x0, &y0); + x0 += draw_offset_x; y0 += draw_offset_y; + sw_set_semi_transparency(semi_trans, (int)semi_transparency); + sw_draw_flat_rect(x0, y0, 16, 16, color); + break; + } case 0x7C: case 0x7D: case 0x7E: case 0x7F: gp0_exec_textured_16x16(); break;